Home | History | Annotate | Download | only in bnu
      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
     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
    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 *
    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
    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
    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
    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