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