From 46e8d2310130dcacc3db1a6c2fc9ff9e94144eda Mon Sep 17 00:00:00 2001 From: Bill Joy Date: Sun, 27 May 1979 02:59:50 -0800 Subject: [PATCH 1/1] BSD 3 development Work on file usr/src/cmd/uucp/gnxseq.c Synthesized-from: 3bsd --- usr/src/cmd/uucp/gnxseq.c | 103 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 usr/src/cmd/uucp/gnxseq.c diff --git a/usr/src/cmd/uucp/gnxseq.c b/usr/src/cmd/uucp/gnxseq.c new file mode 100644 index 0000000000..27d5eb13de --- /dev/null +++ b/usr/src/cmd/uucp/gnxseq.c @@ -0,0 +1,103 @@ +#include "uucp.h" +#include +#include + + + +/******* + * gnxseq(rmtname) get next conversation sequence number + * char *rmtname; + * + * return - 0 no entry | >0 sequence number + */ + +gnxseq(rmtname) +char *rmtname; +{ + int count = 0, ct, ret, i; + struct tm *tp; + extern struct tm *localtime(); + time_t clock; + FILE *fp0, *fp1; + char buf[BUFSIZ], name[NAMESIZE]; + + for (i = 0; i < 5; i++) { + if ((ret = ulockf(SQLOCK, SQTIME)) == 0) + break; + sleep(5); + } + if (ret != 0) { + logent("CAN'T LOCK", SQLOCK); + DEBUG(4, "can't lock %s\n", SQLOCK); + return(0); + } + if ((fp0 = fopen(SQFILE, "r")) == NULL) + return(0); + if ((fp1 = fopen(SQTMP, "w")) == NULL) { + fclose(fp0); + return(0); + } + chmod(SQTMP, 0400); + + while (fgets(buf, BUFSIZ, fp0) != NULL) { + ret = sscanf(buf, "%s%d", name, &ct); + if (ret < 2) + ct = 0; + name[7] = '\0'; + if (ct > 9998) + ct = 0; + if (strcmp(rmtname, name) != SAME) { + fputs(buf, fp1); + continue; + } + + /* found name */ + count = ++ct; + time(&clock); + tp = localtime(&clock); + fprintf(fp1, "%s %d %d/%d-%d:%d\n", name, ct, + tp->tm_mon + 1, tp->tm_mday, tp->tm_hour, + tp->tm_min); + while (fgets(buf, BUFSIZ, fp0) != NULL) + fputs(buf, fp1); + } + fclose(fp0); + fclose(fp1); + if (count == 0) { + rmlock(SQLOCK); + unlink(SQTMP); + } + return(count); +} + + +/*** + * cmtseq() commit sequence update + * + * return 0 ok | other - link failed + */ + +cmtseq() +{ + int ret; + + if ((ret = access(SQTMP, 0400)) != 0) { + rmlock(SQLOCK); + return(0); + } + unlink(SQFILE); + ret = link(SQTMP, SQFILE); + unlink(SQTMP); + rmlock(SQLOCK); + return(ret); +} + +/*** + * ulkseq() unlock sequence file + */ + +ulkseq() +{ + unlink(SQTMP); + rmlock(SQLOCK); +} -- 2.20.1