Commit | Line | Data |
---|---|---|
10577efa KT |
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 | ||
52 | p2 = argv[2] - 1; | |
53 | bp = buf - 1; | |
54 | while(*++bp = *++p2); | |
55 | *bp = '/'; | |
56 | p2 = bp; | |
57 | while(*++bp |