Hi, Can you check if this patch fixes the problem? I've just commited it to CVS, so it should be available in tomorrow's snapshot. Index: syslog-ng/configure.in diff -u syslog-ng/configure.in:1.72.4.25 syslog-ng/configure.in:1.72.4.26 --- syslog-ng/configure.in:1.72.4.25 Thu Jun 30 11:20:10 2005 +++ syslog-ng/configure.in Wed Nov 2 20:35:47 2005 @@ -1,4 +1,4 @@ -dnl $Id: configure.in,v 1.72.4.25 2005/06/30 09:20:10 bazsi Exp $ +dnl $Id: configure.in,v 1.72.4.26 2005/11/02 19:35:47 bazsi Exp $ dnl Process this file with autoconf to produce a configure script. AC_INIT(src/affile.c) AC_PREREQ(2.50) @@ -136,6 +136,7 @@ AC_DEFINE(HAVE_MODERN_UTMP, 1, [new style UTMP is defined on the system]) fi + dnl Seek a type for UINT32 AC_CHECK_SIZEOF(short, 2) AC_CHECK_SIZEOF(int, 4) @@ -185,7 +186,7 @@ AC_CHECK_LIB(socket, socket) AC_CHECK_LIB(nsl, gethostbyname) AC_CHECK_FUNCS(select snprintf vsnprintf strerror inet_aton strncpy getutent) -AC_CHECK_FUNCS(getopt_long strcasecmp strptime) +AC_CHECK_FUNCS(getopt_long strcasecmp strptime strftime) old_LIBS=$LIBS @@ -218,6 +219,34 @@ LIBS=$old_LIBS LIBWRAP_LIBS=$blb_cv_c_lwrap +AC_CACHE_CHECK([for %z format string in strftime], + blb_cv_c_strftime_percent_z, +[AC_TRY_RUN([ +#include <time.h> +#include <string.h> + +int main(void) +{ + struct tm tm; + char buf[32]; + + memset(&tm, 0, sizeof(tm)); + strftime(buf, sizeof(buf), "%z", &tm); + + if (strlen(buf) == 5) + return 0; + return 1; +} +], +blb_cv_c_strftime_percent_z=yes, +blb_cv_c_strftime_percent_z=no, +blb_cv_c_strftime_percent_z=no)]) + +if test "x$blb_cv_c_strftime_percent_z" = "xyes"; then + AC_DEFINE(HAVE_STRFTIME_PERCENT_Z, 1, [strftime has a %z format argument]) +fi + + if test "x$ac_cv_func_snprintf" = "xno" -o \ "x$ac_cv_func_vsnprintf" = "xno"; then AC_LIBOBJ(snprintf) Index: syslog-ng/src/macros.c diff -u syslog-ng/src/macros.c:1.4.4.6 syslog-ng/src/macros.c:1.4.4.7 --- syslog-ng/src/macros.c:1.4.4.6 Thu Aug 5 13:35:12 2004 +++ syslog-ng/src/macros.c Wed Nov 2 20:35:47 2005 @@ -19,7 +19,7 @@ * * Inspired by nsyslog, originally written by Darren Reed. * - * $Id: macros.c,v 1.4.4.6 2004/08/05 11:35:12 bazsi Exp $ + * $Id: macros.c,v 1.4.4.7 2005/11/02 19:35:47 bazsi Exp $ * ***************************************************************************/ @@ -109,17 +109,33 @@ } static size_t -format_tzofs(char *dest, size_t left, struct tm *tm) +format_tzofs(char *dest, size_t left, time_t unixtime, struct tm *tm) { size_t length; -#if HAVE_GLOBAL_TIMEZONE - length = snprintf(dest, left - 1, "%c%02ld%02ld", - timezone > 0 ? '-' : '+', - (timezone < 0 ? -timezone : timezone) / 3600, - (timezone % 3600) / 60); -#else +#if HAVE_STRFTIME_PERCENT_Z length = strftime(dest, left -1, "%z", tm); +#else + struct tm ltm, *gtm; + long tzoff; + + ltm = *localtime(&unixtime); + gtm = gmtime(&unixtime); + + tzoff = (ltm.tm_hour - gtm->tm_hour) * 3600; + tzoff += (ltm.tm_min - gtm->tm_min) * 60; + tzoff += ltm.tm_sec - gtm->tm_sec; + + /* normalize within +/- 12 hours */ + if (tzoff < -12*3600) + tzoff += 24*3600; + else if (tzoff > 12*3600) + tzoff -= 24*3600; + + length = snprintf(dest, left - 1, "%c%02ld%02ld", + tzoff < 0 ? '-' : '+', + (tzoff < 0 ? -tzoff : tzoff) / 3600, + (tzoff % 3600) / 60); #endif return length; } @@ -340,7 +356,7 @@ case M_ISODATE_RECVD: case M_ISODATE_STAMP: length = strftime(*dest, *left - 1, "%Y-%m-%dT%H:%M:%S", tm); - length = length + format_tzofs((*dest) + length, *left - length - 1, tm); + length = length + format_tzofs((*dest) + length, *left - length - 1, unixtime, tm); break; case M_FULLDATE: case M_FULLDATE_RECVD: @@ -355,7 +371,7 @@ case M_TZOFFSET: case M_TZOFFSET_RECVD: case M_TZOFFSET_STAMP: - length = format_tzofs(*dest, *left - 1, tm); + length = format_tzofs(*dest, *left - 1, unixtime, tm); break; case M_TZ: case M_TZ_RECVD: On Mon, 2005-10-31 at 14:37 +0100, Peter Valdemar Mørch wrote:
Hi,
-- Bazsi