From: Roger Dingledine Date: Mon, 20 Oct 2003 20:19:59 +0000 (+0000) Subject: include our own timegm() impl, since it's not portable X-Git-Tag: tor-0.0.2pre14~215 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5f1750a2886a8c5e488fa4ecc8140d07ce5b1186;p=thirdparty%2Ftor.git include our own timegm() impl, since it's not portable svn:r635 --- diff --git a/src/common/util.c b/src/common/util.c index ccc130030e..098b201573 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -112,13 +112,29 @@ void tv_addms(struct timeval *a, long ms) { a->tv_usec %= 1000000; } +time_t tor_timegm (struct tm *tm) { + time_t ret; + char *tz; + + tz = getenv("TZ"); + setenv("TZ", "", 1); + tzset(); + ret = mktime(tm); + if (tz) + setenv("TZ", tz, 1); + else + unsetenv("TZ"); + tzset(); + return ret; +} + /* * Low-level I/O. */ /* a wrapper for write(2) that makes sure to write all count bytes. * Only use if fd is a blocking fd. */ -int write_all(int fd, const void *buf, size_t count) { +int write_all(int fd, const char *buf, size_t count) { int written = 0; int result; @@ -133,7 +149,7 @@ int write_all(int fd, const void *buf, size_t count) { /* a wrapper for read(2) that makes sure to read all count bytes. * Only use if fd is a blocking fd. */ -int read_all(int fd, void *buf, size_t count) { +int read_all(int fd, char *buf, size_t count) { int numread = 0; int result; diff --git a/src/common/util.h b/src/common/util.h index 6358654bff..01087df87d 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -44,8 +44,10 @@ void tv_addms(struct timeval *a, long ms); void tv_add(struct timeval *a, struct timeval *b); int tv_cmp(struct timeval *a, struct timeval *b); -int write_all(int fd, const void *buf, size_t count); -int read_all(int fd, void *buf, size_t count); +time_t tor_timegm (struct tm *tm); + +int write_all(int fd, const char *buf, size_t count); +int read_all(int fd, char *buf, size_t count); void set_socket_nonblocking(int socket); diff --git a/src/or/routers.c b/src/or/routers.c index 4ecd2fcb9c..5acaa43005 100644 --- a/src/or/routers.c +++ b/src/or/routers.c @@ -599,7 +599,7 @@ int router_get_dir_from_string_impl(char *s, directory_t **dest, if (!strptime(tok.val.cmd.args[0], "%Y-%m-%d %H:%M:%S", &published)) { log_fn(LOG_WARN, "Published time was unparseable"); goto err; } - published_on = timegm(&published); + published_on = tor_timegm(&published); NEXT_TOK(); TOK_IS(K_RECOMMENDED_SOFTWARE, "recommended-software"); @@ -857,7 +857,7 @@ routerinfo_t *router_get_entry_from_string(char**s) { if (!strptime(ARGS[0], "%Y-%m-%d %H:%M:%S", &published)) { log_fn(LOG_WARN, "Published time was unparseable"); goto err; } - router->published_on = timegm(&published); + router->published_on = tor_timegm(&published); NEXT_TOKEN(); if (tok->tp != K_ONION_KEY) {