|
|
1.1 root 1: #include "uucp.h"
2: #include <sys/types.h>
3: #include <sys/stat.h>
4:
5: /***
6: * xcp(f1, f2) copy f1 to f2
7: * char *f1, *f2;
8: *
9: * return - 0 ok | FAIL failed
10: */
11:
12: xcp(f1, f2)
13: char *f1, *f2;
14: {
15: char buf[BUFSIZ];
16: int len;
17: FILE *fp1, *fp2;
18: char *lastpart();
19: char full[100];
20: struct stat s;
21:
22: if ((fp1 = fopen(f1, "r")) == NULL)
23: return(FAIL);
24: strcpy(full, f2);
25: if (stat(f2, &s) == 0) {
26: /* check for directory */
27: if ((s.st_mode & S_IFMT) == S_IFDIR) {
28: strcat(full, "/");
29: strcat(full, lastpart(f1));
30: }
31: }
32: DEBUG(4, "full %s\n", full);
33: if ((fp2 = fopen(full, "w")) == NULL) {
34: fclose(fp1);
35: return(FAIL);
36: }
37: while((len = fread(buf, sizeof (char), BUFSIZ, fp1)) > 0)
38: fwrite(buf, sizeof (char), len, fp2);
39: fclose(fp1);
40: fclose(fp2);
41: chmod(f2, 0666);
42: return(0);
43: }
44:
45:
46: /*
47: * xmv(f1, f2) move f1 to f2
48: * char * f1, *f2;
49: *
50: * return 0 ok | FAIL failed
51: */
52:
53: xmv(f1, f2)
54: char *f1, *f2;
55: {
56: int ret;
57:
58: if (link(f1, f2) < 0) {
59: /* copy file */
60: ret = xcp(f1, f2);
61: if (ret == 0)
62: unlink(f1);
63: return(ret);
64: }
65: unlink(f1);
66: return(0);
67: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.