#include #include /* * mvcp.c - routines common to mv and cp */ #include typedef char cpbuf[BUFSIZ*16]; extern char *me; int filecopy(target,source) char *target,*source; { void (*oldsig)(); void *malloc(); cpbuf *buffer; int t,s,r; void (*signal())(); oldsig = signal(SIGINT,SIG_IGN); if (NULL == (buffer=malloc(sizeof(cpbuf)))) { perror(me); return -1; } if (-1 == (s = open(source,O_RDONLY))) { fprintf(stderr,"%s : can't open %s\n",me,source); return(-1); } if (-1 == (t = open(target,O_TRUNC))) { fprintf(stderr,"%s : can't open %s\n",me,target); return(-1); } while(0 != (r = read(s,buffer,BUFSIZ*16)) && r != -1) { if(-1 == write(t,buffer,r)) { fprintf(stderr,"%s : error writing %s\n",me,target); return(-1); } } close(t); close(s); free(buffer); (void)signal(SIGINT,oldsig); return (0); } #include typedef struct { char dos_reserved[21]; char attribute; unsigned file_time; unsigned file_date; long file_size; char file_name[13]; } fcb; fcb dir; /*lint -e529 */ int dirp(s) char *s; { register int junk1,junk2; /* handle all of the stupid special cases */ if ((s[1] == ':' && s[2] == '\0') /* root directory on a drive */ || (s[1] == '\0') /* root directory default drive */ || (s[0] == '.' && s[1] == '\0') ) { return 1; } if (0 == strcmp(s,"..")) /* parent of this directory */ { int returnval; char *current,*parent,*getcwd(); current = getcwd(NULL,64); if (-1 == chdir(s)) /* go to parent */ returnval = 0; else returnval = 1; parent = getcwd(NULL,64); (void)chdir(current); free(current); free(parent); return returnval; } /* set the disk transfer address */ bdos(0x1A,&dir); /* do a search first for the directory path */ return (bdos(0x4E,s,0x10) == 0 && bdos(0x4E,s,0) != 0); } /*lint +e529 */ int filep(s) char *s; { /* set the disk transfer address */ bdos(0x1A,&dir); /* do a search first for the directory path */ return bdos(0x4E,s,0) == 0; } char *fname_part(s) register char *s; { register char *r; char *rindex(); if ((r = rindex(s,'/')) || (r = rindex(s,'\\'))) { return r+1; } if (r = rindex(s,':')) { return r+1; } return s; } char *path_part(s) register char *s; { static char buffer[64]; register char *r; char *rindex(); strcpy(buffer,s); /* copy string */ if ((r = rindex(buffer,'/')) || (r = rindex(buffer,'\\'))) { *++r = '\0'; return buffer; } if (r = rindex(buffer,':')) { *++r = '\0'; return buffer; } return NULL; } char *drive_part(s) register char *s; { static char buffer[64]; char *rindex(); strcpy(buffer,s); /* copy string */ if (buffer[1] == ':') { buffer[2] = '\0'; return buffer; } return NULL; }