home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Distributions / research / 1972_stuff / oldcp.c < prev    next >
C/C++ Source or Header  |  2000-01-04  |  2KB  |  51 lines

  1. main(argc,argv)
  2. char **argv;
  3. {
  4. char buf[512];
  5. int fold, fnew, n;
  6. char *p1, *p2, *bp;
  7. int mode;
  8.         if(argc != 3) {
  9.                 write(1,"Usage: cp oldfile newfile\n",26);
  10.                 exit();
  11.         }
  12.         if((fold = open(argv[1],0)) < 0){
  13.                 write(1,"Cannot open old file.\n",22);
  14.                 exit();
  15.         }
  16.         fstat(fold,buf);
  17.         mode = buf[2] & 037;
  18.         if((fnew = creat(argv[2],mode)) < 0){
  19.                 stat(argv[2], buf);
  20.                 if((buf[3] & 0100) != 0){
  21.                         p1 = argv[1] - 1;
  22.                         p2 = argv[2] - 1;
  23.                         bp = buf - 1;
  24.                         while(*++bp = *++p2);
  25.                         *bp = '/';
  26.                         p2 = bp;
  27.                         while(*++bp = *++p1)
  28.                                 if(*bp == '/')
  29.                                         bp = p2;
  30.                         if((fnew = creat(buf,mode)) < 0){
  31.                                 write(1,"Cannot creat new file.\n",23);
  32.                                 exit();
  33.                         }
  34.                 }else{
  35.                 write(1,"Cannot creat new file.\n",23);
  36.                 exit();
  37.                 }
  38.         }
  39.         while(n = read(fold, buf, 512))
  40.         if(n < 0){
  41.                 write(1,"Read error\n",11);
  42.                 exit();
  43.         }else
  44.                 if(write(fnew,buf,n) != n){
  45.                         write(1,"Write error.\n",13);
  46.                         exit();
  47.                 }
  48.         fstat(fnew,buf);
  49.         exit();
  50. }
  51.