Research V2 release
[unix-history] / cmd / cp.c
CommitLineData
10577efa
KT
1main(argc,argv)
2char **argv;
3{
4char buf[512];
5int fold, fnew, n;
6char *p1, *p2, *bp;
7int 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
52 p2 = argv[2] - 1;
53 bp = buf - 1;
54 while(*++bp = *++p2);
55 *bp = '/';
56 p2 = bp;
57 while(*++bp