From 9776afc23d4a953d4baf399f9682f53baf4654fc Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Mon, 1 Jan 2007 22:39:08 +0000 Subject: [PATCH] Fixed bug #779: Rotation of apdu.log fails. --- src/log.c | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/log.c b/src/log.c index e7ec51f..956e321 100644 --- a/src/log.c +++ b/src/log.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2006, Index Data ApS * See the file LICENSE for details. * - * $Id: log.c,v 1.43 2006-11-27 14:09:32 adam Exp $ + * $Id: log.c,v 1.44 2007-01-01 22:39:08 adam Exp $ */ /** @@ -57,7 +57,7 @@ char *strerror(int n) static int l_level = YLOG_DEFAULT_LEVEL; -enum l_file_type { use_stderr, use_none, use_file }; +enum l_file_type { use_stderr, use_none, use_file }; static enum l_file_type yaz_file_type = use_stderr; static FILE *yaz_global_log_file = NULL; @@ -176,10 +176,10 @@ void yaz_log_init_file(const char *fname) static void rotate_log(const char *cur_fname) { int i; + #ifdef WIN32 /* windows can't rename a file if it is open */ - fclose(yaz_global_log_file); - yaz_global_log_file = 0; + yaz_log_close(); #endif for (i = 0; i<9; i++) { @@ -301,6 +301,9 @@ static void yaz_log_open_check(struct tm *tm, int force, const char *filemode) char new_filename[512]; static char cur_filename[512] = ""; + if (yaz_file_type != use_file) + return; + if (l_fname && *l_fname) { strftime(new_filename, sizeof(new_filename)-1, l_fname, tm); @@ -311,7 +314,7 @@ static void yaz_log_open_check(struct tm *tm, int force, const char *filemode) } } - if (l_max_size > 0 && yaz_global_log_file && yaz_file_type == use_file) + if (l_max_size > 0 && yaz_global_log_file) { long flen = ftell(yaz_global_log_file); if (flen > l_max_size) @@ -320,12 +323,25 @@ static void yaz_log_open_check(struct tm *tm, int force, const char *filemode) force = 1; } } - if (force && yaz_file_type == use_file && *cur_filename) + if (force && *cur_filename) { + FILE *new_file; +#ifdef WIN32 yaz_log_close(); - yaz_global_log_file = fopen(cur_filename, filemode); - if (l_level & YLOG_FLUSH) - setvbuf(yaz_global_log_file, 0, _IONBF, 0); +#endif + new_file = fopen(cur_filename, filemode); + if (new_file) + { + yaz_log_close(); + yaz_global_log_file = new_file; + if (l_level & YLOG_FLUSH) + setvbuf(yaz_global_log_file, 0, _IONBF, 0); + } + else + { + /* disable log rotate */ + l_max_size = 0; + } } } -- 1.7.10.4