xref: /original-bsd/usr.bin/uucp/libuu/gnxseq.c (revision c9dd95d8)
16c12252aSsam #ifndef lint
2*c9dd95d8Sralph static char sccsid[] = "@(#)gnxseq.c	5.3 (Berkeley) 01/22/85";
36c12252aSsam #endif
46c12252aSsam 
56c12252aSsam #include "uucp.h"
66c12252aSsam #include <sys/types.h>
7*c9dd95d8Sralph #ifdef BSD4_2
80d244a74Ssam #include <sys/time.h>
9*c9dd95d8Sralph #else sane
10*c9dd95d8Sralph #include <time.h>
11*c9dd95d8Sralph #endif sane
12*c9dd95d8Sralph 
13*c9dd95d8Sralph #ifdef GNXSEQ
146c12252aSsam 
156c12252aSsam extern	time_t	time();
166c12252aSsam 
176c12252aSsam /*******
186c12252aSsam  *	gnxseq(rmtname)		get next conversation sequence number
196c12252aSsam  *	char *rmtname;
206c12252aSsam  *
216c12252aSsam  *	return - 0 no entry | >0 sequence number
226c12252aSsam  */
236c12252aSsam 
246c12252aSsam gnxseq(rmtname)
256c12252aSsam char *rmtname;
266c12252aSsam {
276c12252aSsam 	int count = 0, ct, ret, i;
286c12252aSsam 	register struct tm *tp;
296c12252aSsam 	extern struct tm *localtime();
306c12252aSsam 	time_t clock;
316c12252aSsam 	register FILE *fp0, *fp1;
326c12252aSsam 	char buf[BUFSIZ], name[NAMESIZE];
336c12252aSsam 
346c12252aSsam 	if (access(SQFILE, 0) != 0)	/* nothing to do here */
356c12252aSsam 		return(0);
366c12252aSsam 
376c12252aSsam 	for (i = 0; i < 5; i++) {
386c12252aSsam 		if ((ret = ulockf(SQLOCK, (time_t)  SQTIME)) == 0)
396c12252aSsam 			break;
406c12252aSsam 		sleep(5);
416c12252aSsam 	}
426c12252aSsam 	if (ret != 0) {
436c12252aSsam 		logent("CAN'T LOCK", SQLOCK);
446c12252aSsam 		DEBUG(4, "can't lock %s\n", SQLOCK);
456c12252aSsam 		return(0);
466c12252aSsam 	}
476c12252aSsam 	if ((fp0 = fopen(SQFILE, "r")) == NULL)
486c12252aSsam 		return(0);
496c12252aSsam 	if ((fp1 = fopen(SQTMP, "w")) == NULL) {
506c12252aSsam 		fclose(fp0);
516c12252aSsam 		return(0);
526c12252aSsam 	}
536c12252aSsam 	chmod(SQTMP, 0400);
546c12252aSsam 
556c12252aSsam 	while (fgets(buf, BUFSIZ, fp0) != NULL) {
566c12252aSsam 		ret = sscanf(buf, "%s%d", name, &ct);
576c12252aSsam 		if (ret < 2)
586c12252aSsam 			ct = 0;
596c12252aSsam 		name[7] = '\0';
606c12252aSsam 		if (ct > 9998)
616c12252aSsam 			ct = 0;
626c12252aSsam 		if (strcmp(rmtname, name) != SAME) {
636c12252aSsam 			fputs(buf, fp1);
646c12252aSsam 			continue;
656c12252aSsam 		}
666c12252aSsam 
676c12252aSsam 		/*  found name  */
686c12252aSsam 		count = ++ct;
696c12252aSsam 		time(&clock);
706c12252aSsam 		tp = localtime(&clock);
71*c9dd95d8Sralph #ifdef USG
72*c9dd95d8Sralph 		fprintf(fp1, "%s %d %d/%d-%2.2d:%2.2d\n", name, ct,
736c12252aSsam 		  tp->tm_mon + 1, tp->tm_mday, tp->tm_hour,
746c12252aSsam 		  tp->tm_min);
75*c9dd95d8Sralph #endif
76*c9dd95d8Sralph #ifndef USG
77*c9dd95d8Sralph 		fprintf(fp1, "%s %d %d/%d-%02d:%02d\n", name, ct,
78*c9dd95d8Sralph 		  tp->tm_mon + 1, tp->tm_mday, tp->tm_hour,
79*c9dd95d8Sralph 		  tp->tm_min);
80*c9dd95d8Sralph #endif
816c12252aSsam 		while (fgets(buf, BUFSIZ, fp0) != NULL)
826c12252aSsam 			fputs(buf, fp1);
836c12252aSsam 	}
846c12252aSsam 	fclose(fp0);
856c12252aSsam 	fclose(fp1);
866c12252aSsam 	if (count == 0) {
876c12252aSsam 		rmlock(SQLOCK);
886c12252aSsam 		unlink(SQTMP);
896c12252aSsam 	}
906c12252aSsam 	return(count);
916c12252aSsam }
926c12252aSsam 
936c12252aSsam 
946c12252aSsam /***
956c12252aSsam  *	cmtseq()	commit sequence update
966c12252aSsam  *
976c12252aSsam  *	return  0  ok | other - link failed
986c12252aSsam  */
996c12252aSsam 
1006c12252aSsam cmtseq()
1016c12252aSsam {
1026c12252aSsam 	register int ret;
1036c12252aSsam 
104*c9dd95d8Sralph 	if ((ret = access(SQTMP, 04)) != 0) {
1056c12252aSsam 		rmlock(SQLOCK);
1066c12252aSsam 		return(0);
1076c12252aSsam 	}
1086c12252aSsam 	unlink(SQFILE);
1096c12252aSsam 	ret = link(SQTMP, SQFILE);
1106c12252aSsam 	unlink(SQTMP);
1116c12252aSsam 	rmlock(SQLOCK);
1126c12252aSsam 	return(ret);
1136c12252aSsam }
1146c12252aSsam 
1156c12252aSsam /***
1166c12252aSsam  *	ulkseq()	unlock sequence file
1176c12252aSsam  */
1186c12252aSsam 
1196c12252aSsam ulkseq()
1206c12252aSsam {
1216c12252aSsam 	unlink(SQTMP);
1226c12252aSsam 	rmlock(SQLOCK);
1236c12252aSsam }
124*c9dd95d8Sralph #endif GNXSEQ
125