|
|
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: if (_Lf == NULL)
38: return;
39: (void) chmod(logfile, 0644);
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: if ((_Sf = open(SYSLOG, 1)) < 0) {
70: if ((_Sf = creat(SYSLOG, 0644)) < 0)
71: return;
72: chmod(SYSLOG, 0644); /* silly? */
73: }
74: }
75: (void) lseek(_Sf, 0L, 2);
76: (void) write(_Sf, sysbuf, sbuflen);
77: }
78:
79:
80: /*
81: * Close log files before a fork
82: */
83: void
84: closelog()
85: {
86: if (_Sf >= 0) {
87: (void) close(_Sf);
88: _Sf = -1;
89: }
90: if (_Lf) {
91: (void) fclose(_Lf);
92: _Lf = NULL;
93: }
94: }
95:
96: /*
97: * millitick()
98: *
99: * return msec since last time called
100: */
101: #ifdef ATTSV
102: time_t
103: millitick()
104: {
105: struct tms tbuf;
106: time_t now, rval;
107: static time_t past; /* guaranteed 0 first time called */
108:
109: if (past == 0) {
110: past = times(&tbuf);
111: rval = 0;
112: } else {
113: rval = ((now = times(&tbuf)) - past) * 1000 / HZ;
114: past = now;
115: }
116: return(rval);
117: }
118:
119: #else
120: time_t
121: millitick()
122: {
123: struct timeb tbuf;
124: static struct timeb tbuf1;
125: static past; /* guaranteed 0 first time called */
126: time_t rval;
127:
128: if (past == 0) {
129: past++;
130: rval = 0;
131: ftime(&tbuf1);
132: } else {
133: ftime(&tbuf);
134: rval = (tbuf.time - tbuf1.time) * 1000
135: + tbuf.millitm - tbuf1.millitm;
136: tbuf1 = tbuf;
137: }
138: return(rval);
139: }
140: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.