1 /*-
2 * Copyright (c) 1985, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * %sccs.include.proprietary.c%
6 */
7
8 #ifndef lint
9 static char sccsid[] = "@(#)cpmv.c 8.1 (Berkeley) 06/06/93";
10 #endif /* not lint */
11
12 #include "uucp.h"
13 #include <sys/stat.h>
14
15 /*LINTLIBRARY*/
16
17 /*
18 * copy f1 to f2
19 *
20 * return - SUCCESS | FAIL
21 */
xcp(f1,f2)22 xcp(f1, f2)
23 char *f1, *f2;
24 {
25 char buf[BUFSIZ];
26 register int len;
27 register int fp1, fp2;
28 char *lastpart();
29 char full[MAXFULLNAME];
30 struct stat s;
31
32 if ((fp1 = open(subfile(f1), 0)) < 0)
33 return FAIL;
34 strcpy(full, f2);
35 if (stat(subfile(f2), &s) == 0) {
36 /* check for directory */
37 if ((s.st_mode & S_IFMT) == S_IFDIR) {
38 strcat(full, "/");
39 strcat(full, lastpart(f1));
40 }
41 }
42 DEBUG(4, "full %s\n", full);
43 if ((fp2 = creat(subfile(full), 0666)) < 0) {
44 close(fp1);
45 return FAIL;
46 }
47 while((len = read(fp1, buf, BUFSIZ)) > 0)
48 if (write(fp2, buf, len) != len) {
49 len = -1;
50 break;
51 }
52
53 close(fp1);
54 close(fp2);
55 return len < 0 ? FAIL: SUCCESS;
56 }
57
58
59 /*
60 * move f1 to f2
61 *
62 * return 0 ok | FAIL failed
63 */
xmv(f1,f2)64 xmv(f1, f2)
65 register char *f1, *f2;
66 {
67 register int ret;
68
69 (void) unlink(subfile(f2));
70 if (link(subfile(f1), subfile(f2)) < 0) {
71 /* copy file */
72 ret = xcp(f1, f2);
73 if (ret == 0)
74 unlink(subfile(f1));
75 return ret;
76 }
77 (void) unlink(subfile(f1));
78 return 0;
79 }
80