|
|
1.1 ! root 1: /* /sccs/src/cmd/uucp/s.logent.c ! 2: logent.c 1.2 8/30/84 17:37:31 ! 3: */ ! 4: #include "uucp.h" ! 5: VERSION(@(#)logent.c 1.2); ! 6: ! 7: static FILE *_Lf = NULL; ! 8: static int _Sf = -1; ! 9: ! 10: /* ! 11: * Make log entry ! 12: * text -> ptr to text string ! 13: * status -> ptr to status string ! 14: * Returns: ! 15: * none ! 16: */ ! 17: void ! 18: logent(text, status) ! 19: register char *text, *status; ! 20: { ! 21: static char logfile[MAXFULLNAME]; ! 22: ! 23: if (*Rmtname == NULLCHAR) /* ignore logging if Rmtname is not yet set */ ! 24: return; ! 25: if (Nstat.t_pid == 0) ! 26: Nstat.t_pid = getpid(); ! 27: ! 28: if (_Lf != NULL ! 29: && strncmp(Rmtname, BASENAME(logfile, '/'), SYSNSIZE) != 0) { ! 30: fclose(_Lf); ! 31: _Lf = NULL; ! 32: } ! 33: ! 34: if (_Lf == NULL) { ! 35: sprintf(logfile, "%s/%s", Logfile, Rmtname); ! 36: _Lf = fopen(logfile, "a"); ! 37: (void) chmod(logfile, 0644); ! 38: if (_Lf == NULL) ! 39: return; ! 40: setbuf(_Lf, CNULL); ! 41: } ! 42: (void) fseek(_Lf, 0L, 2); ! 43: (void) fprintf(_Lf, "%s %s %s ", User, Rmtname, Jobid); ! 44: (void) fprintf(_Lf, "(%s,%d,%d) ", timeStamp(), Nstat.t_pid, Seqn); ! 45: (void) fprintf(_Lf, "%s (%s)\n", status, text); ! 46: return; ! 47: } ! 48: ! 49: ! 50: /* ! 51: * Make entry for a conversation (uucico only) ! 52: * text -> pointer to message string ! 53: * Returns: ! 54: * none ! 55: */ ! 56: void ! 57: syslog(text) ! 58: register char *text; ! 59: { ! 60: int sbuflen; ! 61: char sysbuf[BUFSIZ]; ! 62: ! 63: (void) sprintf(sysbuf, "%s!%s %s (%s) (%c,%d,%d) [%s] %s\n", ! 64: Rmtname, User, Role == SLAVE ? "S" : "M", timeStamp(), ! 65: Pchar, getpid(), Seqn, Dc, text); ! 66: sbuflen = strlen(sysbuf); ! 67: if (_Sf < 0) { ! 68: errno = 0; ! 69: _Sf = open(SYSLOG, 1); ! 70: if (errno == ENOENT) { ! 71: _Sf = creat(SYSLOG, 0644); ! 72: (void) chmod(SYSLOG, 0644); ! 73: } ! 74: if (_Sf < 0) ! 75: return; ! 76: } ! 77: (void) lseek(_Sf, 0L, 2); ! 78: (void) write(_Sf, sysbuf, sbuflen); ! 79: return; ! 80: } ! 81: ! 82: ! 83: /* ! 84: * Close log files before a fork ! 85: */ ! 86: void ! 87: closelog() ! 88: { ! 89: if (_Sf >= 0) { ! 90: (void) close(_Sf); ! 91: _Sf = -1; ! 92: } ! 93: if (_Lf) { ! 94: (void) fclose(_Lf); ! 95: _Lf = NULL; ! 96: } ! 97: } ! 98: ! 99: /* ! 100: * millitick() ! 101: * ! 102: * return msec since last time called ! 103: */ ! 104: #ifdef ATTSV ! 105: time_t ! 106: millitick() ! 107: { ! 108: struct tms tbuf; ! 109: time_t now, rval; ! 110: static time_t past; /* guaranteed 0 first time called */ ! 111: ! 112: if (past == 0) { ! 113: past = times(&tbuf); ! 114: rval = 0; ! 115: } else { ! 116: rval = ((now = times(&tbuf)) - past) * 1000 / HZ; ! 117: past = now; ! 118: } ! 119: return(rval); ! 120: } ! 121: ! 122: #else !ATTSV ! 123: time_t ! 124: millitick() ! 125: { ! 126: struct timeb tbuf; ! 127: static struct timeb tbuf1; ! 128: static past; /* guaranteed 0 first time called */ ! 129: time_t rval; ! 130: ! 131: if (past == 0) { ! 132: past++; ! 133: rval = 0; ! 134: ftime(&tbuf1); ! 135: } else { ! 136: ftime(&tbuf); ! 137: rval = (tbuf.time - tbuf1.time) * 1000 ! 138: + tbuf.millitm - tbuf1.millitm; ! 139: tbuf1 = tbuf; ! 140: } ! 141: return(rval); ! 142: } ! 143: #endif ATTSV
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.