X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_date_api.c;h=ba6ef45ef13321838d508af622bf55a342aba464;hp=3872009157a5d1ea3ace49c0c1a981a32de92ab0;hb=dbc4ec02cd319000b5c8589910047cfe6d5738be;hpb=a0bca521b491711e43aef74fe19c23a8eb4d0777 diff --git a/http_date_api.c b/http_date_api.c index 3872009..ba6ef45 100644 --- a/http_date_api.c +++ b/http_date_api.c @@ -6,25 +6,21 @@ | modification, are permitted provided that the conditions mentioned | | in the accompanying LICENSE file are met. | +--------------------------------------------------------------------+ - | Copyright (c) 2004-2005, Michael Wallner | + | Copyright (c) 2004-2006, Michael Wallner | +--------------------------------------------------------------------+ */ /* $Id$ */ -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif -#include "php.h" - #include "php_http.h" -#include "php_http_std_defs.h" -#include +#include "php_http_api.h" +#include "php_http_date_api.h" -static int check_day(char *day, size_t len); -static int check_month(char *month); -static int check_tzone(char *tzone); +static inline int check_day(const char *day, size_t len); +static inline int check_month(const char *month); +static inline int check_tzone(const char *tzone); +static inline time_t parse_date(const char *month); /* {{{ day/month names */ static const char *days[] = { @@ -99,7 +95,7 @@ static const struct time_zone { /* {{{ Day/Month/TZ checks for http_parse_date() Originally by libcurl, Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. */ -static int check_day(char *day, size_t len) +static inline int check_day(const char *day, size_t len) { int i; const char * const *check = (len > 3) ? &weekdays[0] : &wkdays[0]; @@ -112,7 +108,7 @@ static int check_day(char *day, size_t len) return -1; } -static int check_month(char *month) +static inline int check_month(const char *month) { int i; const char * const *check = &months[0]; @@ -128,7 +124,7 @@ static int check_month(char *month) /* return the time zone offset between GMT and the input one, in number of seconds or -1 if the timezone wasn't found/legal */ -static int check_tzone(char *tzone) +static inline int check_tzone(const char *tzone) { unsigned i; const struct time_zone *check = time_zones; @@ -162,9 +158,39 @@ PHP_HTTP_API char *_http_date(time_t t TSRMLS_DC) } /* }}} */ -/* {{{ time_t http_parse_date(char *) +/* {{{ time_t http_parse_date(char *) */ +PHP_HTTP_API time_t _http_parse_date(const char *date TSRMLS_DC) +{ + time_t t = -1; + +#ifdef PHP_WIN32 + /* fix odd offsets with Win32 */ + char tzput[64] = "TZ="; + const char *tzget = NULL; + + if ((tzget = getenv("TZ"))) { + strlcat(tzput, tzget, 63); + } + putenv("TZ=GMT"); +#endif + + t = parse_date(date); + +#ifdef PHP_WIN32 + putenv(tzput); +#endif + + if (-1 == t) { + http_error_ex(HE_NOTICE, HTTP_E_RUNTIME, "Could not parse date: %s", date); + } + + return t; +} +/* }}} */ + +/* time_t parse_date(char *) Originally by libcurl, Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. */ -PHP_HTTP_API time_t _http_parse_date(const char *date) +static inline time_t parse_date(const char *date) { time_t t = 0; int tz_offset = -1, year = -1, month = -1, monthday = -1, weekday = -1,