summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2008-12-02 23:26:04 +0000
committerNick Mathewson <nickm@torproject.org>2008-12-02 23:26:04 +0000
commit6221bdd294c58399e12d13983cca0f0285033092 (patch)
treecda6bcc4bfae167cc875318c52a09bba48b5ce40
parent330218c7f75ed2a14e5b5cf8322932c9c42ce758 (diff)
downloadtor-6221bdd294c58399e12d13983cca0f0285033092.tar.gz
tor-6221bdd294c58399e12d13983cca0f0285033092.zip
Add two lseek wrappers to compat.[ch]: one to return current fd position, and one to move the fd to the end of the file.
svn:r17454
-rw-r--r--src/common/compat.c31
-rw-r--r--src/common/compat.h3
2 files changed, 34 insertions, 0 deletions
diff --git a/src/common/compat.c b/src/common/compat.c
index 31fbf263e4..a54fded833 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -581,6 +581,37 @@ tor_lockfile_unlock(tor_lockfile_t *lockfile)
tor_free(lockfile);
}
+/* Some old versions of unix didn't define constants for these values,
+ * and instead expect you to say 0, 1, or 2. */
+#ifndef SEEK_CUR
+#define SEEK_CUR 1
+#endif
+#ifndef SEEK_END
+#define SEEK_END 2
+#endif
+
+/** Return the position of fd with respect to the start of the file */
+off_t
+tor_fd_getpos(int fd)
+{
+#ifdef WIN32
+ return (off_t) _lseek(fd, 0, SEEK_CUR);
+#else
+ return (off_t) lseek(fd, 0, SEEK_CUR);
+#endif
+}
+
+/** Move fd to the end of the file. Return -1 on error, 0 on success. */
+int
+tor_fd_seekend(int fd)
+{
+#ifdef WIN32
+ return _lseek(fd, 0, SEEK_END) < 0 ? -1 : 0;
+#else
+ return lseek(fd, 0, SEEK_END) < 0 ? -1 : 0;
+#endif
+}
+
#undef DEBUG_SOCKET_COUNTING
#ifdef DEBUG_SOCKET_COUNTING
/** A bitarray of all fds that should be passed to tor_socket_close(). Only
diff --git a/src/common/compat.h b/src/common/compat.h
index aab49b208e..2002c08dd4 100644
--- a/src/common/compat.h
+++ b/src/common/compat.h
@@ -294,6 +294,9 @@ tor_lockfile_t *tor_lockfile_lock(const char *filename, int blocking,
int *locked_out);
void tor_lockfile_unlock(tor_lockfile_t *lockfile);
+off_t tor_fd_getpos(int fd);
+int tor_fd_seekend(int fd);
+
#ifdef MS_WINDOWS
#define PATH_SEPARATOR "\\"
#else