1 #ifndef lint 2 static char sccsid[] = "@(#)subdir.c 5.1 (Berkeley) 07/02/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 116