From 73df3cd290f456d3b3e62928b82f92898ad72072 Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Sun, 3 Sep 2006 19:38:28 +0000 Subject: [PATCH] Use gmtime_r if available, fallback to gmtime with mutex protection for MacOSX and use vanilla gmtime for the rest. --- parsers.c | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/parsers.c b/parsers.c index d6a77015..b98444df 100644 --- a/parsers.c +++ b/parsers.c @@ -1,4 +1,4 @@ -const char parsers_rcs[] = "$Id: parsers.c,v 1.64 2006/08/17 17:15:10 fabiankeil Exp $"; +const char parsers_rcs[] = "$Id: parsers.c,v 1.65 2006/08/22 10:55:56 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/parsers.c,v $ @@ -40,6 +40,11 @@ const char parsers_rcs[] = "$Id: parsers.c,v 1.64 2006/08/17 17:15:10 fabiankeil * * Revisions : * $Log: parsers.c,v $ + * Revision 1.65 2006/08/22 10:55:56 fabiankeil + * Changed client_referrer to use the right type (size_t) for + * hostlenght and to shorten the temporary referrer string with + * '\0' instead of adding a useless line break. + * * Revision 1.64 2006/08/17 17:15:10 fabiankeil * - Back to timegm() using GnuPG's replacement if necessary. * Using mktime() and localtime() could add a on hour offset if @@ -1482,6 +1487,9 @@ jb_err server_last_modified(struct client_state *csp, char **header) char buf[BUFFER_SIZE]; char newheader[50]; +#ifdef HAVE_GMTIME_R + struct tm gmt; +#endif struct tm *timeptr = NULL; time_t now, last_modified; long int rtime; @@ -1530,7 +1538,15 @@ jb_err server_last_modified(struct client_state *csp, char **header) { log_error(LOG_LEVEL_HEADER, "Randomizing: %s", *header); now = time(NULL); +#ifdef HAVE_GMTIME_R + timeptr = gmtime_r(&now, &gmt); +#elif OSX_DARWIN + pthread_mutex_lock(&gmtime_mutex); + timeptr = gmtime(&now); + pthread_mutex_unlock(&gmtime_mutex); +#else timeptr = gmtime(&now); +#endif if ((timeptr = parse_header_time(*header, &last_modified)) == NULL) { log_error(LOG_LEVEL_HEADER, "Couldn't parse: %s (crunching!)", *header); @@ -1543,7 +1559,15 @@ jb_err server_last_modified(struct client_state *csp, char **header) { rtime = pick_from_range(rtime); last_modified += rtime; +#ifdef HAVE_GMTIME_R + timeptr = gmtime_r(&last_modified, &gmt); +#elif OSX_DARWIN + pthread_mutex_lock(&gmtime_mutex); timeptr = gmtime(&last_modified); + pthread_mutex_unlock(&gmtime_mutex); +#else + timeptr = gmtime(&last_modified); +#endif strftime(newheader, sizeof(newheader), "%a, %d %b %Y %H:%M:%S GMT", timeptr); freez(*header); *header = strdup("Last-Modified: "); @@ -2224,6 +2248,9 @@ jb_err client_host(struct client_state *csp, char **header) jb_err client_if_modified_since(struct client_state *csp, char **header) { char newheader[50]; +#ifdef HAVE_GMTIME_R + struct tm gmt; +#endif struct tm *timeptr = NULL; time_t tm = 0; const char *newval; @@ -2281,7 +2308,15 @@ jb_err client_if_modified_since(struct client_state *csp, char **header) *header); } tm += rtime; +#ifdef HAVE_GMTIME_R + timeptr = gmtime_r(&tm, &gmt); +#elif OSX_DARWIN + pthread_mutex_lock(&gmtime_mutex); timeptr = gmtime(&tm); + pthread_mutex_unlock(&gmtime_mutex); +#else + timeptr = gmtime(&tm); +#endif strftime(newheader, sizeof(newheader), "%a, %d %b %Y %H:%M:%S GMT", timeptr); freez(*header); -- 2.39.2