Fix cp and mv so 'cp foo/README bar' where foo and bar are directories,

and README is a file.
 -Erik
This commit is contained in:
Erik Andersen 2000-01-08 21:16:29 +00:00
parent 5338ce19c8
commit 1dbc17f630
6 changed files with 32 additions and 5 deletions

View File

@ -1,3 +1,10 @@
0.41
* Fixed a bug in both cp and mv preventing 'cp foo/README bar'
type commands (file in a directory to another directory)
from working.
-Erik Andersen,
0.40 0.40
* New Apps: sort, uniq. -beppu * New Apps: sort, uniq. -beppu
* New Apps: lsmod, rmmod -erik * New Apps: lsmod, rmmod -erik

View File

@ -22,7 +22,7 @@ BUILDTIME=$(shell date "+%Y%m%d-%H%M")
# Comment out the following to make a debuggable build # Comment out the following to make a debuggable build
# Leave this off for production use. # Leave this off for production use.
DODEBUG=false DODEBUG=true
# If you want a static binary, turn this on. I can't think # If you want a static binary, turn this on. I can't think
# of many situations where anybody would ever want it static, # of many situations where anybody would ever want it static,
# but... # but...

View File

@ -48,6 +48,7 @@ static int srcDirFlag = FALSE;
static int fileAction(const char *fileName, struct stat* statbuf) static int fileAction(const char *fileName, struct stat* statbuf)
{ {
char newdestName[NAME_MAX]; char newdestName[NAME_MAX];
char* newsrcName = NULL;
strcpy(newdestName, destName); strcpy(newdestName, destName);
if ( srcDirFlag == TRUE ) { if ( srcDirFlag == TRUE ) {
@ -62,7 +63,11 @@ static int fileAction(const char *fileName, struct stat* statbuf)
if (newdestName[strlen(newdestName)-1] != '/' ) { if (newdestName[strlen(newdestName)-1] != '/' ) {
strcat(newdestName, "/"); 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)); return (copyFile(fileName, newdestName, preserveFlag, followLinks));

View File

@ -40,6 +40,7 @@ static int srcDirFlag = FALSE;
static int fileAction(const char *fileName, struct stat* statbuf) static int fileAction(const char *fileName, struct stat* statbuf)
{ {
char newdestName[NAME_MAX]; char newdestName[NAME_MAX];
char* newsrcName = NULL;
strcpy(newdestName, destName); strcpy(newdestName, destName);
if ( srcDirFlag == TRUE ) { if ( srcDirFlag == TRUE ) {
@ -50,7 +51,11 @@ static int fileAction(const char *fileName, struct stat* statbuf)
if (newdestName[strlen(newdestName)-1] != '/' ) { if (newdestName[strlen(newdestName)-1] != '/' ) {
strcat(newdestName, "/"); 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)); return (copyFile(fileName, newdestName, TRUE, TRUE));

7
cp.c
View File

@ -48,6 +48,7 @@ static int srcDirFlag = FALSE;
static int fileAction(const char *fileName, struct stat* statbuf) static int fileAction(const char *fileName, struct stat* statbuf)
{ {
char newdestName[NAME_MAX]; char newdestName[NAME_MAX];
char* newsrcName = NULL;
strcpy(newdestName, destName); strcpy(newdestName, destName);
if ( srcDirFlag == TRUE ) { if ( srcDirFlag == TRUE ) {
@ -62,7 +63,11 @@ static int fileAction(const char *fileName, struct stat* statbuf)
if (newdestName[strlen(newdestName)-1] != '/' ) { if (newdestName[strlen(newdestName)-1] != '/' ) {
strcat(newdestName, "/"); 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)); return (copyFile(fileName, newdestName, preserveFlag, followLinks));

7
mv.c
View File

@ -40,6 +40,7 @@ static int srcDirFlag = FALSE;
static int fileAction(const char *fileName, struct stat* statbuf) static int fileAction(const char *fileName, struct stat* statbuf)
{ {
char newdestName[NAME_MAX]; char newdestName[NAME_MAX];
char* newsrcName = NULL;
strcpy(newdestName, destName); strcpy(newdestName, destName);
if ( srcDirFlag == TRUE ) { if ( srcDirFlag == TRUE ) {
@ -50,7 +51,11 @@ static int fileAction(const char *fileName, struct stat* statbuf)
if (newdestName[strlen(newdestName)-1] != '/' ) { if (newdestName[strlen(newdestName)-1] != '/' ) {
strcat(newdestName, "/"); 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)); return (copyFile(fileName, newdestName, TRUE, TRUE));