(!1682) os: log via fd instead of FILE
Instead of maintaining both the logfile fd, as well as ANSI FILE pointer, simplify it to just a fd. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
		
							parent
							
								
									cbb5d8aa79
								
							
						
					
					
						commit
						d5f6ff80b0
					
				
							
								
								
									
										29
									
								
								os/log.c
								
								
								
								
							
							
						
						
									
										29
									
								
								os/log.c
								
								
								
								
							|  | @ -109,7 +109,6 @@ OR PERFORMANCE OF THIS SOFTWARE. | ||||||
| #define DEFAULT_LOG_VERBOSITY		0 | #define DEFAULT_LOG_VERBOSITY		0 | ||||||
| #define DEFAULT_LOG_FILE_VERBOSITY	3 | #define DEFAULT_LOG_FILE_VERBOSITY	3 | ||||||
| 
 | 
 | ||||||
| static FILE *logFile = NULL; |  | ||||||
| static int logFileFd = -1; | static int logFileFd = -1; | ||||||
| static Bool logFlush = FALSE; | static Bool logFlush = FALSE; | ||||||
| static Bool logSync = FALSE; | static Bool logSync = FALSE; | ||||||
|  | @ -235,18 +234,15 @@ LogInit(const char *fname, const char *backup) | ||||||
|                 saved_log_backup = strdup(backup); |                 saved_log_backup = strdup(backup); | ||||||
|         } else |         } else | ||||||
|             logFileName = LogFilePrep(fname, backup, display); |             logFileName = LogFilePrep(fname, backup, display); | ||||||
|         if ((logFile = fopen(logFileName, "w")) == NULL) |  | ||||||
|             FatalError("Cannot open log file \"%s\"\n", logFileName); |  | ||||||
|         setvbuf(logFile, NULL, _IONBF, 0); |  | ||||||
| 
 | 
 | ||||||
|         logFileFd = fileno(logFile); |         if ((logFileFd = open(logFileName, O_WRONLY | O_CREAT, S_IRUSR|S_IWUSR|S_IRGRP)) == -1) | ||||||
|  |             FatalError("Cannot open log file \"%s\": %s\n", logFileName, strerror(errno)); | ||||||
| 
 | 
 | ||||||
|         /* Flush saved log information. */ |         /* Flush saved log information. */ | ||||||
|         if (saveBuffer && bufferSize > 0) { |         if (saveBuffer && bufferSize > 0) { | ||||||
|             fwrite(saveBuffer, bufferPos, 1, logFile); |             write(logFileFd, saveBuffer, bufferPos); | ||||||
|             fflush(logFile); |  | ||||||
| #ifndef WIN32 | #ifndef WIN32 | ||||||
|             fsync(fileno(logFile)); |             fsync(logFileFd); | ||||||
| #endif | #endif | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | @ -298,14 +294,13 @@ LogSetDisplay(void) | ||||||
| void | void | ||||||
| LogClose(enum ExitCode error) | LogClose(enum ExitCode error) | ||||||
| { | { | ||||||
|     if (logFile) { |     if (logFileFd != -1) { | ||||||
|         int msgtype = (error == EXIT_NO_ERROR) ? X_INFO : X_ERROR; |         int msgtype = (error == EXIT_NO_ERROR) ? X_INFO : X_ERROR; | ||||||
|         LogMessageVerb(msgtype, -1, |         LogMessageVerb(msgtype, -1, | ||||||
|                 "Server terminated %s (%d). Closing log file.\n", |                 "Server terminated %s (%d). Closing log file.\n", | ||||||
|                 (error == EXIT_NO_ERROR) ? "successfully" : "with error", |                 (error == EXIT_NO_ERROR) ? "successfully" : "with error", | ||||||
|                 error); |                 error); | ||||||
|         fclose(logFile); |         close(logFileFd); | ||||||
|         logFile = NULL; |  | ||||||
|         logFileFd = -1; |         logFileFd = -1; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -568,24 +563,22 @@ LogSWrite(int verb, const char *buf, size_t len, Bool end_line) | ||||||
|                 fsync(logFileFd); |                 fsync(logFileFd); | ||||||
| #endif | #endif | ||||||
|         } |         } | ||||||
|         else if (!inSignalContext && logFile) { |         else if (!inSignalContext && logFileFd != -1) { | ||||||
|             if (newline) { |             if (newline) { | ||||||
|                 time_t t = time(NULL); |                 time_t t = time(NULL); | ||||||
|                 struct tm tm; |                 struct tm tm; | ||||||
|                 char fmt_tm[32]; |                 char fmt_tm[32]; | ||||||
| 
 | 
 | ||||||
|                 localtime_r(&t, &tm); |                 localtime_r(&t, &tm); | ||||||
|                 strftime(fmt_tm, sizeof(fmt_tm) - 1, "%Y-%m-%d %H:%M:%S", &tm); |                 strftime(fmt_tm, sizeof(fmt_tm) - 1, "[%Y-%m-%d %H:%M:%S] ", &tm); | ||||||
| 
 |                 write(logFileFd, fmt_tm, strlen(fmt_tm)); | ||||||
|                 fprintf(logFile, "[%s] ", fmt_tm); |  | ||||||
|             } |             } | ||||||
|             newline = end_line; |             newline = end_line; | ||||||
|             fwrite(buf, len, 1, logFile); |             write(logFileFd, buf, len); | ||||||
|             if (logFlush) { |             if (logFlush) { | ||||||
|                 fflush(logFile); |  | ||||||
| #ifndef WIN32 | #ifndef WIN32 | ||||||
|                 if (logSync) |                 if (logSync) | ||||||
|                     fsync(fileno(logFile)); |                     fsync(logFileFd); | ||||||
| #endif | #endif | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue