diff --git a/src/or/dns.c b/src/or/dns.c
index 29ae69ced387f6f9b70363c5831c53823ecf2a95..c4a081da8009308d13cba8ca6463bec5cd3dfe4f 100644
--- a/src/or/dns.c
+++ b/src/or/dns.c
@@ -451,6 +451,7 @@ int dnsworker_main(void *data) {
   char address[MAX_ADDRESSLEN];
   unsigned char address_len;
   char answer[5];
+  uint32_t ip;
   int *fdarray = data;
   int fd;
 
@@ -475,7 +476,7 @@ int dnsworker_main(void *data) {
     address[address_len] = 0; /* null terminate it */
 
     /* XXX isn't this non-aligned uint32 going to cause problems? */
-    switch (tor_lookup_hostname(address, (uint32_t*)answer+1)) {
+    switch (tor_lookup_hostname(address, &ip)) {
       case 1:
         log_fn(LOG_INFO,"Could not resolve dest addr %s (transient).",address);
         answer[0] = DNS_RESOLVE_FAILED_TRANSIENT;
@@ -489,6 +490,7 @@ int dnsworker_main(void *data) {
         answer[0] = DNS_RESOLVE_SUCCEEDED;
         break;
     }
+    set_uint32(answer+1, ip);
     if(write_all(fd, answer, 5, 1) != 5) {
       log_fn(LOG_ERR,"writing answer failed. Child exiting.");
       spawn_exit();
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 318382031401036fc368e341cb49e2a16177b839..da7b5660e84983d2132e7a70e0853007b49d9c44 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -505,9 +505,7 @@ int router_set_routerlist_from_directory(const char *s, crypto_pk_env_t *pkey)
 static int
 router_resolve(routerinfo_t *router)
 {
-  struct hostent *rent;
-
-  if (tor_lookup_hostname(router->address, &router->addr)) {
+  if (tor_lookup_hostname(router->address, &router->addr) != 0) {
     log_fn(LOG_WARN,"Could not get address for router %s (%s).",
            router->address, router->nickname);
     return -1;