diff --git a/configure.in b/configure.in
index 935a1a8fc9e9c906c701c7716727f1e932c15ee5..c17eddc1cafb9bbbdf923a97f108bb9c2127caa8 100644
--- a/configure.in
+++ b/configure.in
@@ -135,6 +135,8 @@ if (test ! -z "$ac_cv_openssldir" && test "x$ac_cv_openssldir" != "x(system)") ;
 fi
 LIBS="$saved_LIBS"
 
+AC_SYS_LARGEFILE
+
 dnl The warning message here is no longer strictly accurate.
 
 AC_CHECK_HEADERS(unistd.h string.h signal.h netdb.h ctype.h poll.h sys/stat.h sys/poll.h sys/types.h fcntl.h sys/fcntl.h sys/ioctl.h sys/socket.h sys/time.h netinet/in.h arpa/inet.h errno.h assert.h time.h pwd.h grp.h zlib.h, , AC_MSG_WARN(some headers were not found, compilation may fail))
@@ -143,7 +145,7 @@ dnl These headers are not essential
 
 AC_CHECK_HEADERS(stdint.h sys/types.h inttypes.h sys/param.h sys/wait.h sys/limits.h netinet/in.h arpa/inet.h machine/limits.h syslog.h sys/time.h sys/resource.h)
 
-AC_CHECK_FUNCS(gettimeofday ftime socketpair uname inet_aton strptime getrlimit setrlimit strlcat strlcpy strtoull getpwnam)
+AC_CHECK_FUNCS(gettimeofday ftime socketpair uname inet_aton strptime getrlimit setrlimit strlcat strlcpy strtoull getpwnam fseeko ftello)
 
 AC_CHECK_MEMBERS([struct timeval.tv_sec])
 
diff --git a/src/common/log.c b/src/common/log.c
index 7e351aed2a9ce740b2a5fed69646b0733873bd38..af5d183ea1b08173932dc017b673f0c7c0bef3dd 100644
--- a/src/common/log.c
+++ b/src/common/log.c
@@ -89,7 +89,11 @@ static void log_tor_version(logfile_t *lf, int reset)
   if (lf->is_temporary)
     /* If it's temporary, it isn't really a file. */
     return;
+#if HAVE_FTELLO
+  is_new = (ftello(lf->file) == 0);
+#else
   is_new = (ftell(lf->file) == 0);
+#endif
   if (reset && !is_new)
     /* We are resetting, but we aren't at the start of the file; no
      * need to log again. */
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index 63801982aecb787db9f4fd35db102187272f355b..6ec3023567afdf9af534726a8f6b479756432be5 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -20,12 +20,10 @@ extern circuit_t *global_circuitlist;
 
 static int
 circuit_deliver_create_cell(circuit_t *circ, char *payload);
-static cpath_build_state_t *
-onion_new_cpath_build_state(uint8_t purpose, const char *exit_digest);
-static int
-onion_extend_cpath(crypt_path_t **head_ptr, cpath_build_state_t
-                   *state, routerinfo_t **router_out);
-static int decide_circ_id_type(char *local_nick, char *remote_nick);
+static cpath_build_state_t *onion_new_cpath_build_state(uint8_t purpose,
+                                                   const char *exit_digest);
+static int onion_extend_cpath(crypt_path_t **head_ptr,
+                       cpath_build_state_t *state, routerinfo_t **router_out);
 static int count_acceptable_routers(smartlist_t *routers);
 
 /** Iterate over values of circ_id, starting from conn-\>next_circ_id,
@@ -342,7 +340,6 @@ void circuit_n_conn_done(connection_t *or_conn, int success) {
 
 static int
 circuit_deliver_create_cell(circuit_t *circ, char *payload) {
-  int circ_id_type;
   cell_t cell;
 
   tor_assert(circ);