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_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;
 | 
				
			||||||
| 
						 | 
					@ -236,18 +235,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
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -299,14 +295,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;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -570,24 +565,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