diff options
Diffstat (limited to 'coreutils')
-rw-r--r-- | coreutils/basename.c | 10 | ||||
-rw-r--r-- | coreutils/ln.c | 18 |
2 files changed, 18 insertions, 10 deletions
diff --git a/coreutils/basename.c b/coreutils/basename.c index ac371d274..fa15aa979 100644 --- a/coreutils/basename.c +++ b/coreutils/basename.c @@ -43,14 +43,7 @@ extern int basename_main(int argc, char **argv) argv++; - s1=*argv+strlen(*argv)-1; - while (s1 && *s1 == '/') { - *s1 = '\0'; - s1--; - } - s = strrchr(*argv, '/'); - if (s==NULL) s=*argv; - else s++; + s = get_last_path_component(*argv); if (argc>2) { argv++; @@ -62,4 +55,3 @@ extern int basename_main(int argc, char **argv) printf("%s\n", s); return(TRUE); } - diff --git a/coreutils/ln.c b/coreutils/ln.c index 57e412dc8..beaa58fac 100644 --- a/coreutils/ln.c +++ b/coreutils/ln.c @@ -52,7 +52,7 @@ static int followLinks = TRUE; extern int ln_main(int argc, char **argv) { - char *linkName; + char *linkName, *dirName; int linkIntoDirFlag; int stopIt = FALSE; @@ -104,6 +104,9 @@ extern int ln_main(int argc, char **argv) exit FALSE; } + if (linkIntoDirFlag == TRUE) + dirName = linkName; + while (argc-- >= 2) { #if 0 char srcName[BUFSIZ + 1]; @@ -126,6 +129,14 @@ extern int ln_main(int argc, char **argv) srcName[nChars] = '\0'; } #endif + if (linkIntoDirFlag == TRUE) { + char *baseName = get_last_path_component(*argv); + linkName = (char *)malloc(strlen(dirName)+strlen(baseName)+2); + strcpy(linkName, dirName); + if(dirName[strlen(dirName)-1] != '/') + strcat(linkName, "/"); + strcat(linkName,baseName); + } if (removeoldFlag == TRUE) { status = (unlink(linkName) && errno != ENOENT); @@ -143,6 +154,11 @@ extern int ln_main(int argc, char **argv) perror(linkName); exit FALSE; } + + if (linkIntoDirFlag) + free(linkName); + + argv++; } return( TRUE); } |