Annotation of libwww/Library/src/HTMemLog.c, revision 1.1.2.2
1.1.2.1 eric 1: /* HTMemLog.c
2: ** MEMORY BUFFERED DATA LOGGING UTILITIES
3: **
4: ** (c) COPYRIGHT MIT 1996.
5: ** Please first read the full copyright statement in the file COPYRIGH.
1.1.2.2 ! eric 6: ** @(#) $Id: HTMemLog.c,v 1.1.2.1 1996/11/26 23:22:18 eric Exp $
1.1.2.1 eric 7: **
8: ** 26 Nov 96 (EGP) started
9: */
10:
11: /* Library include files */
12: #include "sysdep.h"
13: #include "HTUtils.h"
14: #include "HTMemLog.h"
15:
16: PRIVATE size_t LogBuffSize = 1024; /* default size is 1k */
17: PRIVATE int LogFile = 2;
18: PRIVATE const char * LogFileName = NULL;
19: PRIVATE char * LogBuff = NULL;
20: PRIVATE size_t LogLen = 0;
21:
22: PUBLIC int HTMemLog_open (const char *ident, const size_t size)
23: {
24: #ifdef USE_SYSLOG
25: openlog(ident, LOG_NDELAY, LOG_USER);
26: #else /* USE_SYSLOG */
27: LogFileName = ident;
28: #if 0
29: if ((LogFile = open(ident, O_CREAT|O_TRUNC)) == -1)
30: return HT_ERROR;
31: close(LogFile);
32: #endif
33: LogBuffSize = size;
34: if ((LogBuff = (char *) HT_MALLOC(size)) == NULL)
35: HT_OUTOFMEM("HTMemLog_open");
36: LogLen = 0;
37: #endif /* !USE_SYSLOG */
38: return HT_OK;
39: }
40:
41: PRIVATE int HTMemLog_flush(void)
42: {
1.1.2.2 ! eric 43: if ((LogFile = open(LogFileName, O_CREAT|O_APPEND)) == -1)
1.1.2.1 eric 44: return HT_ERROR;
1.1.2.2 ! eric 45: if (write(LogFile, LogBuff, LogLen) == -1) {
! 46: switch (errno) {
! 47: case EBADF: printf("EBADF\n"); break;
! 48: case EINVAL: printf("EINVAL\n"); break;
! 49: case EFAULT: printf("EFAULT\n"); break;
! 50: case EPIPE: printf("EPIPE\n"); break;
! 51: case EAGAIN: printf("EAGAIN\n"); break;
! 52: case EINTR: printf("EINTR\n"); break;
! 53: case ENOSPC: printf("ENOSPC\n"); break;
! 54: default: printf("default\n"); break;
! 55: }
! 56: }
1.1.2.1 eric 57: LogLen = 0;
58: close(LogFile);
59: return HT_OK;
60: }
61:
62: PUBLIC int HTMemLog_add(const char * buf, const size_t len)
63: {
64: /*
65: ** Dump everything that won't fit in buffer
66: */
67: while (len + LogLen > LogBuffSize) {
68: size_t toWrite = LogBuffSize-LogLen;
69: memcpy(LogBuff+LogLen, buf, toWrite);
70: HTMemLog_flush();
71: buf += toWrite;
72: len -= toWrite;
73: }
74: memcpy(LogBuff+LogLen, buf, len);
75: LogLen += len;
76: return HT_OK;
77: }
78:
79: PRIVATE int HTMemLog_adjustGMT(long theTime)
80: {
81: static long adjustment = -1;
82: if (adjustment == -1) {
83: tzset();
84: adjustment = timezone;
85: }
86: return theTime-adjustment;
87: }
88:
89: PRIVATE int HTMemLog_addTime(void)
90: {
91: char buff[20];
92: int len;
93: struct timeval tp;
94: struct timezone tz = {300, DST_USA};
95:
96: gettimeofday(&tp, &tz);
97: tp.tv_sec = HTMemLog_adjustGMT(tp.tv_sec)%(24*60*60);
98: len = sprintf(buff, "%02d:%02d:%02d.%d ", tp.tv_sec/3600, (tp.tv_sec%3600)/60, tp.tv_sec%60, tp.tv_usec);
99: HTMemLog_add(buff, len);
100: return tp.tv_sec;
101: }
102:
103: PUBLIC void HTMemLog_close (void)
104: {
105: #ifdef USE_SYSLOG
106: closelog();
107: #else /* USE_SYSLOG */
108: if (LogLen)
109: HTMemLog_flush();
110: if (LogFile > 2)
111: close(LogFile);
112: if (LogBuff != NULL)
113: HT_FREE(LogBuff);
114: #endif /* !USE_SYSLOG */
115: }
116:
117: PUBLIC int HTMemLog_callback (const char * data, const size_t len, const char * fmt, va_list pArgs)
118: {
119: char buff[8200];
120: int ret;
121: ret = vsprintf(buff, fmt, pArgs);
122: #ifdef USE_SYSLOG
123: syslog(LOG_DEBUG, "%s\n", buff);
124: if (len > 8192)
125: len = 8192;
126: strncpy(buff, data, len);
127: buff[len] = 0;
128: syslog(LOG_DEBUG, "%s\n", buff);
129: #else /* USE_SYSLOG */
130: /*
131: time(&now);
132: tptr = ctime(&now);
133: HTMemLog_add(tptr, strlen(tptr));
134: */
135: HTMemLog_addTime();
136: HTMemLog_add(buff, ret);
137: HTMemLog_add("\n", 1);
138: HTMemLog_add(data, len);
139: #endif /* !USE_SYSLOG */
140: return ret;
141: }
142:
Webmaster