1: #ifndef lint
2: static char sccsid[] = "@(#)subdir.c 5.1 (Berkeley) 7/2/83";
3: #endif
4:
5: #include "uucp.h"
6: #ifdef UUDIR
7: /*
8: * By Tom Truscott, March 1983
9: * THIS VERSION OF SYSKLUDGE IS FOR USE ONLY
10: * WITH THE 'UUDIR' VERSION OF UUCP.
11: *
12: * There once was a separate 'uudir' package to retrofit
13: * versions of uucp, but that is no longer recommended.
14: *
15: * Prefix table.
16: * If a prefix is "abc", for example,
17: * then any file Spool/abc... is mapped to Spool/abc/abc... .
18: * The first prefix found is used, so D.foo should preceed D. in table.
19: *
20: * Each prefix must be a subdirectory of Spool, owned by uucp!
21: * Remember: use cron to uuclean these directories daily,
22: * and check them manual every now and then. Beware complacency!
23: */
24:
25: static char *prefix[] = {
26: DLocalX, /* Outbound 'xqt' request files */
27: DLocal, /* Outbound data files */
28: "D.", /* Other "D." files (remember the "."!) */
29: "C.", /* "C." subdirectory */
30: "X.", /* "X." subdirectory */
31: "TM.", /* Temporaries for inbound files */
32: 0
33: };
34:
35: /*
36: * filename mapping kludges to put uucp work files in other directories.
37: */
38:
39: #define BUFLEN 50
40: /* assert(strlen(Spool)+1+14+1+14 <= BUFLEN) */
41:
42: static char fn1[BUFLEN], fn2[BUFLEN]; /* remapped filename areas */
43: static int inspool; /* true iff working dir is Spool */
44:
45: /*
46: * return (possibly) remapped string s
47: */
48: char *
49: SubFile(as)
50: char *as;
51: {
52: register char *s, **p;
53: register int n;
54: static char *tptr = NULL;
55:
56: /* Alternate buffers so "link(subfile(a), subfile(b))" works */
57: if (tptr != fn1)
58: tptr = fn1;
59: else
60: tptr = fn2;
61:
62: s = as;
63: tptr[0] = '\0';
64:
65: /* if s begins with Spool/, copy that to tptr and advance s */
66: if (strncmp(s, Spool, n = strlen(Spool)) == 0 && s[n] == '/') {
67: if (!inspool) {
68: strcpy(tptr, Spool);
69: strcat(tptr, "/");
70: }
71: s += n + 1;
72: }
73: else
74: if (!inspool)
75: return(as);
76:
77: /* look for first prefix which matches, and make subdirectory */
78: for (p = &prefix[0]; *p; p++) {
79: if (strncmp(s, *p, n = strlen(*p))==0 && s[n] && s[n] != '/') {
80: strcat(tptr, *p);
81: strcat(tptr, "/");
82: strcat(tptr, s);
83: return(tptr);
84: }
85: }
86: return(as);
87: }
88:
89: /*
90: * save away filename
91: */
92: SubChDir(s)
93: register char *s;
94: {
95: inspool = (strcmp(s, Spool) == 0);
96: return(chdir(s));
97: }
98:
99: /*
100: * return possibly corrected directory for searching
101: */
102: char *
103: SubDir(d, pre)
104: register char *d, pre;
105: {
106: if (strcmp(d, Spool) == 0)
107: if (pre == CMDPRE)
108: return("/usr/spool/uucp/C.");
109: else if (pre == XQTPRE)
110: return("/usr/spool/uucp/X.");
111: return(d);
112: }
113: #else
114: static int subdir_here; /* quiet 'ranlib' command */
115: #endif
Defined functions
Defined variables
fn1
defined in line
42; used 2 times
fn2
defined in line
42; used 1 times
sccsid
defined in line
2;
never used
Defined macros