diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/getdate.y | 14 | ||||
-rw-r--r-- | lib/http.c | 12 |
2 files changed, 24 insertions, 2 deletions
diff --git a/lib/getdate.y b/lib/getdate.y index 80f10120c..bdcf9d91e 100644 --- a/lib/getdate.y +++ b/lib/getdate.y @@ -9,10 +9,13 @@ */ #ifdef HAVE_CONFIG_H -# include <config.h> +# include "config.h" # ifdef HAVE_ALLOCA_H # include <alloca.h> # endif +# ifdef HAVE_TIME_H +# include <time.h> +# endif #endif /* Since the code of getdate.y is not included in the Emacs executable @@ -468,6 +471,7 @@ o_merid : /* NULL */ extern struct tm *gmtime (); extern struct tm *localtime (); +extern struct tm *localtime_r (time_t *, struct tm *); extern time_t mktime (); /* Month and day table. */ @@ -918,10 +922,16 @@ curl_getdate (const char *p, const time_t *now) { struct tm tm, tm0, *tmp; time_t Start; - +#ifdef HAVE_LOCALTIME_R + struct tm keeptime; +#endif yyInput = p; Start = now ? *now : time ((time_t *) NULL); +#ifdef HAVE_LOCALTIME_R + tmp = localtime_r(&Start, &keeptime); +#else tmp = localtime (&Start); +#endif if (!tmp) return -1; yyYear = tmp->tm_year + TM_YEAR_ORIGIN; diff --git a/lib/http.c b/lib/http.c index 711775bbd..c8be1e35d 100644 --- a/lib/http.c +++ b/lib/http.c @@ -61,6 +61,7 @@ #endif #include <netinet/in.h> #include <sys/time.h> + #include <sys/resource.h> #ifdef HAVE_UNISTD_H #include <unistd.h> @@ -360,7 +361,18 @@ CURLcode http(struct connectdata *conn) if(data->timecondition) { struct tm *thistime; +#ifdef HAVE_LOCALTIME_R + extern struct tm *localtime_r(time_t *, struct tm *); + /* thread-safe version */ + struct tm keeptime; + thistime = localtime_r(&data->timevalue, &keeptime); +#else thistime = localtime(&data->timevalue); +#endif + if(NULL == thistime) { + failf(data, "localtime() failed!"); + return CURLE_OUT_OF_MEMORY; + } #ifdef HAVE_STRFTIME /* format: "Tue, 15 Nov 1994 12:45:26 GMT" */ |