|
|
1.1 ! root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.