From 58a71f0b2a4edba28bf52613bea8911d5d051568 Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Sun, 7 Jun 2020 17:47:26 +0200 Subject: [PATCH] Add privoxy_gmtime_r() so we can simplify some code --- miscutil.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ miscutil.h | 1 + 2 files changed, 49 insertions(+) diff --git a/miscutil.c b/miscutil.c index eabf7b1e..522805ea 100644 --- a/miscutil.c +++ b/miscutil.c @@ -61,6 +61,7 @@ #include "project.h" #include "miscutil.h" +#include "jcc.h" #include "errlog.h" /********************************************************************* @@ -854,6 +855,53 @@ int privoxy_millisleep(unsigned milliseconds) } +/********************************************************************* + * + * Function : privoxy_gmtime_r + * + * Description : Behave like gmtime_r() and convert a + * time_t to a struct tm. + * + * Parameters : + * 1 : time_spec: The time to convert + * 2 : result: The struct tm to use as storage + * + * Returns : Pointer to the result or NULL on error. + * + *********************************************************************/ +struct tm *privoxy_gmtime_r(const time_t *time_spec, struct tm *result) +{ + struct tm *timeptr; + +#ifdef HAVE_GMTIME_R + timeptr = gmtime_r(time_spec, result); +#elif defined(MUTEX_LOCKS_AVAILABLE) + privoxy_mutex_lock(&gmtime_mutex); + timeptr = gmtime(time_spec); +#else +#warning Using unlocked gmtime() + timeptr = gmtime(time_spec); +#endif + + if (timeptr == NULL) + { +#if !defined(HAVE_GMTIME_R) && defined(MUTEX_LOCKS_AVAILABLE) + privoxy_mutex_unlock(&gmtime_mutex); +#endif + return NULL; + } + +#if !defined(HAVE_GMTIME_R) + *result = *timeptr; + timeptr = result; +#ifdef MUTEX_LOCKS_AVAILABLE + privoxy_mutex_unlock(&gmtime_mutex); +#endif +#endif + + return timeptr; +} + #if !defined(HAVE_TIMEGM) && defined(HAVE_TZSET) && defined(HAVE_PUTENV) /********************************************************************* * diff --git a/miscutil.h b/miscutil.h index b738641c..4f81299a 100644 --- a/miscutil.h +++ b/miscutil.h @@ -92,6 +92,7 @@ size_t privoxy_strlcat(char *destination, const char *source, size_t size); #endif /* ndef HAVE_STRLCAT */ extern int privoxy_millisleep(unsigned milliseconds); +extern struct tm *privoxy_gmtime_r(const time_t *time_spec, struct tm *result); #if defined(__cplusplus) } -- 2.39.2