From 5f1750a2886a8c5e488fa4ecc8140d07ce5b1186 Mon Sep 17 00:00:00 2001 From: Roger Dingledine <arma@torproject.org> Date: Mon, 20 Oct 2003 20:19:59 +0000 Subject: [PATCH] include our own timegm() impl, since it's not portable svn:r635 --- src/common/util.c | 20 ++++++++++++++++++-- src/common/util.h | 6 ++++-- src/or/routers.c | 4 ++-- 3 files changed, 24 insertions(+), 6 deletions(-) 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) { -- GitLab