|
|
1.1 root 1: /* /sccs/src/cmd/uucp/s.chremdir.c
2: chremdir.c 1.1 8/30/84 17:37:02
3: */
4: #include "uucp.h"
5: VERSION(@(#)chremdir.c 1.1);
6:
7: /*
8: * chremdir(sys)
9: * char *sys;
10: *
11: * create SPOOL/sys directory and chdir to it
12: * side effect: set RemSpool
13: */
14: void
15: chremdir(sys)
16: char *sys;
17: {
18: int ret;
19:
20: mkremdir(sys); /* set RemSpool, makes sure it exists */
21: DEBUG(6, "chdir(%s)\n", RemSpool);
22: ret = chdir(RemSpool);
23: ASSERT(ret == 0, Ct_CHDIR, RemSpool, errno);
24: (void) strcpy(Wrkdir, RemSpool);
25: return;
26: }
27:
28: /*
29: * mkremdir(sys)
30: * char *sys;
31: *
32: * create SPOOL/sys directory
33: */
34:
35: void
36: mkremdir(sys)
37: char *sys;
38: {
39: (void) sprintf(RemSpool, "%s/%s", SPOOL, sys);
40: do {
41: (void) mkdirs2(RemSpool, DIRMASK);
42: } while (mkdirlock() == 0);
43: return;
44: }
45:
46: /*
47: * put a file in the spool directory
48: * so it won't be empty, so rm won't rm it
49: * it's not really a lockfile, but we have good ways of cleaning up
50: */
51:
52: #define HUGE 10000
53:
54: static int
55: mkdirlock()
56: {
57: char buf[BUFSIZ];
58: extern int errno;
59:
60: sprintf(buf, "%s/L.%d", RemSpool, getpid());
61: if (access(buf, 0) >= 0)
62: return (1);
63: if (ulockf(buf, HUGE) != FAIL)
64: return (1);
65: ASSERT(errno == ENOENT, "spool dir screwup", buf, errno);
66: return (0);
67: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.