/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ #ident "%Z%%M% %I% %E% SMI" /* from SVR4 bnu:gnxseq.c 2.5 */ #include "uucp.h" /* * get next conversation sequence number * rmtname -> name of remote system * returns: * 0 -> no entery * 1 -> 0 sequence number */ int gnxseq(rmtname) char *rmtname; { register FILE *fp0, *fp1; register struct tm *tp; int count = 0, ct, ret; char buf[BUFSIZ], name[NAMESIZE]; time_t clock; if (access(SQFILE, 0) != 0) return(0); { register int i; for (i = 0; i < 5; i++) if ( (ret = mklock(SQLOCK)) == SUCCESS ) break; sleep(5); } if (ret != SUCCESS) { 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, DFILEMODE); 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 (strncmp(rmtname, name, SYSNSIZE) != SAME) { fputs(buf, fp1); continue; } /* * found name */ count = ++ct; time(&clock); tp = localtime(&clock); fprintf(fp1, "%s %d %d/%d-%d:%2.2d\n", name, ct, tp->tm_mon + 1, tp->tm_mday, tp->tm_hour, tp->tm_min); /* * write should be checked */ while (fgets(buf, BUFSIZ, fp0) != NULL) fputs(buf, fp1); } fclose(fp0); fclose(fp1); if (count == 0) { rmlock(SQLOCK); unlink(SQTMP); } return(count); } /* * commit sequence update * returns: * 0 -> ok * other -> link failed */ int cmtseq() { register int ret; if ((ret = access(SQTMP, 0)) != 0) { rmlock(SQLOCK); return(0); } unlink(SQFILE); ret = link(SQTMP, SQFILE); unlink(SQTMP); rmlock(SQLOCK); return(ret); } /* * unlock sequence file */ void ulkseq() { unlink(SQTMP); rmlock(SQLOCK); return; }