aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2003-10-20 20:19:59 +0000
committerRoger Dingledine <arma@torproject.org>2003-10-20 20:19:59 +0000
commit5f1750a2886a8c5e488fa4ecc8140d07ce5b1186 (patch)
treea637af519d5884335871832568a49a215bc30c38 /src
parentb40d0bffa781b6e212d0ba39c5bf63039762762e (diff)
downloadtor-5f1750a2886a8c5e488fa4ecc8140d07ce5b1186.tar
tor-5f1750a2886a8c5e488fa4ecc8140d07ce5b1186.tar.gz
include our own timegm() impl, since it's not portable
svn:r635
Diffstat (limited to 'src')
-rw-r--r--src/common/util.c20
-rw-r--r--src/common/util.h6
-rw-r--r--src/or/routers.c4
3 files changed, 24 insertions, 6 deletions
diff --git a/src/common/util.c b/src/common/util.c
index ccc130030..098b20157 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 6358654bf..01087df87 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 4ecd2fcb9..5acaa4300 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) {