aboutsummaryrefslogtreecommitdiff
path: root/coreutils
diff options
context:
space:
mode:
Diffstat (limited to 'coreutils')
-rw-r--r--coreutils/basename.c10
-rw-r--r--coreutils/ln.c18
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);
}