diff --git a/TODO b/TODO index 915ba57..0566906 100644 --- a/TODO +++ b/TODO @@ -1,3 +1,4 @@ * The rest of programs. * Manuals * flags for the programs +* fix yes (constantly returns y when no argument is passed) \ No newline at end of file diff --git a/src/ln.c b/src/ln.c index 34763ae..d423506 100644 --- a/src/ln.c +++ b/src/ln.c @@ -1,8 +1,6 @@ #include #include -/* TODO -s flag */ - int main(int argc, char *argv[]) { @@ -12,20 +10,27 @@ main(int argc, char *argv[]) printf("Usage: ln oldfile newfile\n"); return 1; } - - int c = getopt(argc, argv, "s"); - if(c == 's') + int opts; + int fd; + /* I am aware that this doesn't conform to style, but it's the only option that actually works */ + while((opts = getopt(argc, argv, "s:")) != -1) { - symlink(argv[2],argv[3]); - return 0; + switch(opts) + { + case 's': + symlink(argv[2],argv[3]); + break; + case '?': + printf("-%c: Argument not found", optopt); + break; + default: + fd = link(argv[1],argv[2]); + if(fd == -1) + { + fprintf(stderr,"Error creating link\n"); + return 1; + } + return 0; + } } - - - int fd = link(argv[1],argv[2]); - if(fd == -1) - { - fprintf(stderr,"Error creating link\n"); - return 1; - } - return 0; }