1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
23 /* All Rights Reserved */
24
25
26 #ident "%Z%%M% %I% %E% SMI" /* from SVR4 bnu:gtcfile.c 2.5 */
27
28 #include "uucp.h"
29
30 #define NCSAVE 30 /* no more than 30 saved C files, please */
31 static int ncsave;
32 static struct cs_struct csave[NCSAVE];
33 int Dfileused = FALSE;
34 static char jobid[NAMESIZE];
35
36 extern void wfcommit(), wfremove(), putdfiles();
37 extern int job_size(), fgrade(), retseq();
38
39 /* commitall()
40 *
41 * commit any and all saved C files
42 *
43 * returns
44 * nothing
45 */
46
47 void
commitall()48 commitall()
49 {
50 char sys[NAMESIZE+5];
51 char cmfile[NAMESIZE+5];
52 int i;
53 int n;
54
55 for (i = 0; i < ncsave; i++) {
56 if (Sgrades) {
57 if ((job_size(&csave[i]) == FAIL) ||
58 (fgrade(&csave[i]) == FAIL)) {
59 wfremove(csave[i].file);
60 continue;
61 }
62 }
63 else {
64 Dfileused = TRUE;
65 csave[i].grade = Grade;
66 }
67
68 /* make new file name for for the job */
69
70 if (Sgrades) {
71 n = retseq(csave[i].sys);
72 (void) sprintf(cmfile, "%c.%.*s%c%.4x", *csave[i].file,
73 SYSNSIZE, csave[i].sys, csave[i].grade, n);
74 }
75 else
76 (void) strncpy(cmfile, csave[i].file, NAMESIZE-1);
77 cmfile[NAMESIZE-1] = '\0';
78
79 DEBUG(9, "User job queued to %c queue\n", csave[i].grade);
80 (void) sprintf(sys, "/%c", csave[i].grade);
81 (void) strcat(csave[i].sys, sys);
82 if (Dfileused) {
83 putdfiles(csave[i]);
84 Dfileused = FALSE;
85 }
86 wfcommit(csave[i].file, cmfile, csave[i].sys);
87 (void) strncpy(csave[i].file, cmfile, NAMESIZE);
88 }
89
90 ncsave = 0;
91
92 /* set real jobid */
93
94 (void) strncpy(jobid, BASENAME(csave[0].file, '.'), NAMESIZE);
95 return;
96 }
97
98 /*
99 * gtcfile - copy into file the name of the saved C file for system sys
100 *
101 * returns
102 * SUCCESS -> found one
103 * FAIL -> none saved
104 *
105 */
106
107 int
gtcfile(file,sys)108 gtcfile(file, sys)
109 char *file, *sys;
110 {
111 register int i;
112
113 for (i = 0; i < ncsave; i++)
114 if (strncmp(sys, csave[i].sys, SYSNSIZE) == SAME) {
115 (void) strncpy(file, csave[i].file, NAMESIZE-1);
116 return(SUCCESS);
117 }
118
119 return(FAIL);
120 }
121
122 /*
123 * jid - returns the real job id of this uucp file transfer
124 *
125 * returns
126 * jobid
127 *
128 */
129
130 char *
jid()131 jid()
132 {
133 return(jobid);
134 }
135
136 /*
137 * svcfile - save the name of a C. file for system sys for re-using
138 * returns
139 * none
140 */
141
142 void
svcfile(file,sys,grd)143 svcfile(file, sys, grd)
144 char *file, *sys, *grd;
145 {
146 ASSERT(ncsave < NCSAVE, "TOO MANY SAVED C FILES", "", ncsave);
147 (void) strncpy(csave[ncsave].file, BASENAME(file, '/'), NAMESIZE-1);
148 (void) strncpy(csave[ncsave].sys, sys, NAMESIZE-1);
149 (void) strncpy (csave[ncsave].sgrade, grd, NAMESIZE-1);
150 ncsave++;
151 return;
152 }
153
154 void
wfabort()155 wfabort()
156 {
157 register int i;
158
159 for (i = 0; i < ncsave; i++)
160 wfremove(csave[i].file);
161 ncsave = 0;
162 return;
163 }
164
165 /*
166 * wfcommit - move wfile1 in current directory to SPOOL/sys/dir/wfile2
167 * return
168 * none
169 */
170
171 void
wfcommit(wfile1,wfile2,sys)172 wfcommit(wfile1, wfile2, sys)
173 char *wfile1, *wfile2, *sys;
174 {
175 char cmitfile[MAXFULLNAME];
176 char remote[NAMESIZE];
177 char *fileBase;
178 char *p;
179
180 /* make remote directory if it does not exist */
181
182 (void) strncpy(remote, sys, NAMESIZE);
183 if ((p = strchr(remote, '/')) != NULL) {
184 *p++ = '\0';
185
186 DEBUG(6, "create remote spool area %s\n", remote);
187 mkremdir(remote);
188 }
189
190 if (p != NULL)
191 DEBUG(6, "create service grade directory %s under remote spool\n", p);
192 else
193 DEBUG(6, "create remote spool area %s\n", sys);
194
195 mkremdir(sys);
196
197 DEBUG(6, "commit %s ", wfile1);
198
199 fileBase = BASENAME(wfile2, '/');
200 sprintf(cmitfile, "%s/%s", RemSpool, fileBase);
201 DEBUG(6, "to %s\n", cmitfile);
202
203 ASSERT(access(cmitfile, 0) != 0, Fl_EXISTS, cmitfile, 0);
204 ASSERT(xmv(wfile1, cmitfile) == 0, Ct_LINK, cmitfile, errno);
205 return;
206 }
207