#include char *me; char target_name[128]; #ifdef MAIN int main #else int cp #endif (argc,argv) int argc; register char *argv[]; { static char *usage = "cp : usage cp file1 [file2 . . fileN] target\r\n"; char target[128],*fname_part(); register int i; me = argv[0]; if (argc < 3) { write(2,usage,strlen(usage)); return(-1); } strcpy(target, argv[argc-1]); if (target[i = strlen(target) - 1] == '/' || target[i] == '\\') target[i] = '\0'; if (argc == 3) { if (target[1] == ':' && !target[2]) strcat(target,fname_part(argv[1])); if (access(target,0) && !dirp(target)) { fprintf(stderr,"copying %s to %s\n",argv[1],target); if(-1 == filecopy(target,argv[1])) { perror(me); return -1; } } else { if (dirp(target)) { strcpy(target_name,target); if (target_name[strlen(target_name)] != '/') strcat(target_name,"/"); strcat(target_name,fname_part(argv[1])); fprintf(stderr,"copying %s to %s\n",argv[1],target_name); if (-1 == filecopy(target_name,argv[1])) { perror(me); return -1; } } else { fprintf(stderr,"copying %s to %s\n",argv[1],target); if (-1 == filecopy(target,argv[1])) { perror(me); return -1; } } } return(0); } if (target[(i = strlen(target))-1] != ':') if (!dirp(target)) { fprintf(stderr,"cp : %s isn't a directory\n",target); return(-1); } for (i = 1; i < argc-1; i++) { int len; strcpy(target_name,target); if (target_name[1] != ':' && target_name[2] != '\0') if (target_name[(len = strlen(target_name))-1] != '/') { target_name[len = strlen(target_name)] = '/'; target_name[len+1] = '\0'; } strcat(target_name,fname_part(argv[i])); if (!filep(argv[i])) { fprintf(stderr,"cp : %s isn't a file\n",argv[i]); continue; } fprintf(stderr,"copying %s to %s\n",argv[i],target_name); if (-1 == filecopy(target_name,argv[i])) { perror(me); return -1; } } return 0; }