diff options
Diffstat (limited to 'coreutils')
-rw-r--r-- | coreutils/cp.c | 7 | ||||
-rw-r--r-- | coreutils/mv.c | 7 |
2 files changed, 12 insertions, 2 deletions
diff --git a/coreutils/cp.c b/coreutils/cp.c index 4af73c274..e96012d50 100644 --- a/coreutils/cp.c +++ b/coreutils/cp.c @@ -48,6 +48,7 @@ static int srcDirFlag = FALSE; static int fileAction(const char *fileName, struct stat* statbuf) { char newdestName[NAME_MAX]; + char* newsrcName = NULL; strcpy(newdestName, destName); if ( srcDirFlag == TRUE ) { @@ -62,7 +63,11 @@ static int fileAction(const char *fileName, struct stat* statbuf) if (newdestName[strlen(newdestName)-1] != '/' ) { strcat(newdestName, "/"); } - strcat(newdestName, srcName); + newsrcName = strrchr(srcName, '/'); + if (newsrcName && *newsrcName != '\0') + strcat(newdestName, newsrcName); + else + strcat(newdestName, srcName); } return (copyFile(fileName, newdestName, preserveFlag, followLinks)); diff --git a/coreutils/mv.c b/coreutils/mv.c index 92c40c9b7..467a360de 100644 --- a/coreutils/mv.c +++ b/coreutils/mv.c @@ -40,6 +40,7 @@ static int srcDirFlag = FALSE; static int fileAction(const char *fileName, struct stat* statbuf) { char newdestName[NAME_MAX]; + char* newsrcName = NULL; strcpy(newdestName, destName); if ( srcDirFlag == TRUE ) { @@ -50,7 +51,11 @@ static int fileAction(const char *fileName, struct stat* statbuf) if (newdestName[strlen(newdestName)-1] != '/' ) { strcat(newdestName, "/"); } - strcat(newdestName, srcName); + newsrcName = strrchr(srcName, '/'); + if (newsrcName && *newsrcName != '\0') + strcat(newdestName, newsrcName); + else + strcat(newdestName, srcName); } return (copyFile(fileName, newdestName, TRUE, TRUE)); |