1: #ifndef lint
2: static char sccsid[] = "@(#)gnxseq.c 5.2 (Berkeley) 7/2/83";
3: #endif
4:
5: #include "uucp.h"
6: #include <sys/types.h>
7: #include <sys/time.h>
8:
9: extern time_t time();
10:
11: /*******
12: * gnxseq(rmtname) get next conversation sequence number
13: * char *rmtname;
14: *
15: * return - 0 no entry | >0 sequence number
16: */
17:
18: gnxseq(rmtname)
19: char *rmtname;
20: {
21: int count = 0, ct, ret, i;
22: register struct tm *tp;
23: extern struct tm *localtime();
24: time_t clock;
25: register FILE *fp0, *fp1;
26: char buf[BUFSIZ], name[NAMESIZE];
27:
28: if (access(SQFILE, 0) != 0) /* nothing to do here */
29: return(0);
30:
31: for (i = 0; i < 5; i++) {
32: if ((ret = ulockf(SQLOCK, (time_t) SQTIME)) == 0)
33: break;
34: sleep(5);
35: }
36: if (ret != 0) {
37: logent("CAN'T LOCK", SQLOCK);
38: DEBUG(4, "can't lock %s\n", SQLOCK);
39: return(0);
40: }
41: if ((fp0 = fopen(SQFILE, "r")) == NULL)
42: return(0);
43: if ((fp1 = fopen(SQTMP, "w")) == NULL) {
44: fclose(fp0);
45: return(0);
46: }
47: chmod(SQTMP, 0400);
48:
49: while (fgets(buf, BUFSIZ, fp0) != NULL) {
50: ret = sscanf(buf, "%s%d", name, &ct);
51: if (ret < 2)
52: ct = 0;
53: name[7] = '\0';
54: if (ct > 9998)
55: ct = 0;
56: if (strcmp(rmtname, name) != SAME) {
57: fputs(buf, fp1);
58: continue;
59: }
60:
61: /* found name */
62: count = ++ct;
63: time(&clock);
64: tp = localtime(&clock);
65: fprintf(fp1, "%s %d %d/%d-%d:%02d\n", name, ct,
66: tp->tm_mon + 1, tp->tm_mday, tp->tm_hour,
67: tp->tm_min);
68: while (fgets(buf, BUFSIZ, fp0) != NULL)
69: fputs(buf, fp1);
70: }
71: fclose(fp0);
72: fclose(fp1);
73: if (count == 0) {
74: rmlock(SQLOCK);
75: unlink(SQTMP);
76: }
77: return(count);
78: }
79:
80:
81: /***
82: * cmtseq() commit sequence update
83: *
84: * return 0 ok | other - link failed
85: */
86:
87: cmtseq()
88: {
89: register int ret;
90:
91: if ((ret = access(SQTMP, 0400)) != 0) {
92: rmlock(SQLOCK);
93: return(0);
94: }
95: unlink(SQFILE);
96: ret = link(SQTMP, SQFILE);
97: unlink(SQTMP);
98: rmlock(SQLOCK);
99: return(ret);
100: }
101:
102: /***
103: * ulkseq() unlock sequence file
104: */
105:
106: ulkseq()
107: {
108: unlink(SQTMP);
109: rmlock(SQLOCK);
110: }
Defined functions
Defined variables
sccsid
defined in line
2;
never used