Commit | Line | Data |
---|---|---|
3ab3322c SL |
1 | #ifndef lint |
2 | static char sccsid[] = "@(#)cpmv.c 5.1 (Berkeley) %G%"; | |
3 | #endif | |
4 | ||
5 | #include "uucp.h" | |
6 | #include <sys/types.h> | |
7 | #include <sys/stat.h> | |
8 | ||
9 | ||
10 | /*** | |
11 | * xcp(f1, f2) copy f1 to f2 | |
12 | * char *f1, *f2; | |
13 | * | |
14 | * return - 0 ok | FAIL failed | |
15 | */ | |
16 | ||
17 | xcp(f1, f2) | |
18 | char *f1, *f2; | |
19 | { | |
20 | char buf[BUFSIZ]; | |
21 | register int len; | |
22 | register FILE *fp1, *fp2; | |
23 | char *lastpart(); | |
24 | char full[100]; | |
25 | struct stat s; | |
26 | ||
27 | if ((fp1 = fopen(subfile(f1), "r")) == NULL) | |
28 | return(FAIL); | |
29 | strcpy(full, f2); | |
30 | if (stat(subfile(f2), &s) == 0) { | |
31 | /* check for directory */ | |
32 | if ((s.st_mode & S_IFMT) == S_IFDIR) { | |
33 | strcat(full, "/"); | |
34 | strcat(full, lastpart(f1)); | |
35 | } | |
36 | } | |
37 | DEBUG(4, "full %s\n", full); | |
38 | if ((fp2 = fopen(subfile(full), "w")) == NULL) { | |
39 | fclose(fp1); | |
40 | return(FAIL); | |
41 | } | |
42 | while((len = fread(buf, sizeof (char), BUFSIZ, fp1)) > 0) | |
43 | fwrite(buf, sizeof (char), len, fp2); | |
44 | fclose(fp1); | |
45 | fclose(fp2); | |
46 | return(0); | |
47 | } | |
48 | ||
49 | ||
50 | /* | |
51 | * xmv(f1, f2) move f1 to f2 | |
52 | * char * f1, *f2; | |
53 | * | |
54 | * return 0 ok | FAIL failed | |
55 | */ | |
56 | ||
57 | xmv(f1, f2) | |
58 | register char *f1, *f2; | |
59 | { | |
60 | register int ret; | |
61 | ||
62 | if (link(subfile(f1), subfile(f2)) < 0) { | |
63 | /* copy file */ | |
64 | ret = xcp(f1, f2); | |
65 | if (ret == 0) | |
66 | unlink(subfile(f1)); | |
67 | return(ret); | |
68 | } | |
69 | unlink(subfile(f1)); | |
70 | return(0); | |
71 | } |