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
							
								
									081f7a53e0
								
							
						
					
					
						commit
						11fc023a72
					
				
							
								
								
									
										29
									
								
								os/log.c
								
								
								
								
							
							
						
						
									
										29
									
								
								os/log.c
								
								
								
								
							|  | @ -110,7 +110,6 @@ OR PERFORMANCE OF THIS SOFTWARE. | |||
| #define DEFAULT_LOG_VERBOSITY		0 | ||||
| #define DEFAULT_LOG_FILE_VERBOSITY	3 | ||||
| 
 | ||||
| static FILE *logFile = NULL; | ||||
| static int logFileFd = -1; | ||||
| static Bool logFlush = FALSE; | ||||
| static Bool logSync = FALSE; | ||||
|  | @ -236,18 +235,15 @@ LogInit(const char *fname, const char *backup) | |||
|                 saved_log_backup = strdup(backup); | ||||
|         } else | ||||
|             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. */ | ||||
|         if (saveBuffer && bufferSize > 0) { | ||||
|             fwrite(saveBuffer, bufferPos, 1, logFile); | ||||
|             fflush(logFile); | ||||
|             write(logFileFd, saveBuffer, bufferPos); | ||||
| #ifndef WIN32 | ||||
|             fsync(fileno(logFile)); | ||||
|             fsync(logFileFd); | ||||
| #endif | ||||
|         } | ||||
|     } | ||||
|  | @ -299,14 +295,13 @@ LogSetDisplay(void) | |||
| void | ||||
| LogClose(enum ExitCode error) | ||||
| { | ||||
|     if (logFile) { | ||||
|     if (logFileFd != -1) { | ||||
|         int msgtype = (error == EXIT_NO_ERROR) ? X_INFO : X_ERROR; | ||||
|         LogMessageVerb(msgtype, -1, | ||||
|                 "Server terminated %s (%d). Closing log file.\n", | ||||
|                 (error == EXIT_NO_ERROR) ? "successfully" : "with error", | ||||
|                 error); | ||||
|         fclose(logFile); | ||||
|         logFile = NULL; | ||||
|         close(logFileFd); | ||||
|         logFileFd = -1; | ||||
|     } | ||||
| } | ||||
|  | @ -570,24 +565,22 @@ LogSWrite(int verb, const char *buf, size_t len, Bool end_line) | |||
|                 fsync(logFileFd); | ||||
| #endif | ||||
|         } | ||||
|         else if (!inSignalContext && logFile) { | ||||
|         else if (!inSignalContext && logFileFd != -1) { | ||||
|             if (newline) { | ||||
|                 time_t t = time(NULL); | ||||
|                 struct tm tm; | ||||
|                 char fmt_tm[32]; | ||||
| 
 | ||||
|                 localtime_r(&t, &tm); | ||||
|                 strftime(fmt_tm, sizeof(fmt_tm) - 1, "%Y-%m-%d %H:%M:%S", &tm); | ||||
| 
 | ||||
|                 fprintf(logFile, "[%s] ", fmt_tm); | ||||
|                 strftime(fmt_tm, sizeof(fmt_tm) - 1, "[%Y-%m-%d %H:%M:%S] ", &tm); | ||||
|                 write(logFileFd, fmt_tm, strlen(fmt_tm)); | ||||
|             } | ||||
|             newline = end_line; | ||||
|             fwrite(buf, len, 1, logFile); | ||||
|             write(logFileFd, buf, len); | ||||
|             if (logFlush) { | ||||
|                 fflush(logFile); | ||||
| #ifndef WIN32 | ||||
|                 if (logSync) | ||||
|                     fsync(fileno(logFile)); | ||||
|                     fsync(logFileFd); | ||||
| #endif | ||||
|             } | ||||
|         } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue