]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Allow named pipes for our log files.
authorNick Mathewson <nickm@torproject.org>
Wed, 20 Aug 2014 17:45:16 +0000 (13:45 -0400)
committerNick Mathewson <nickm@torproject.org>
Wed, 20 Aug 2014 17:45:16 +0000 (13:45 -0400)
Closes ticket 12061. Based on a patch from "carlo von lynX" on tor-dev at
  https://lists.torproject.org/pipermail/tor-dev/2014-April/006705.html

changes/bug12061 [new file with mode: 0644]
src/common/compat.c

diff --git a/changes/bug12061 b/changes/bug12061
new file mode 100644 (file)
index 0000000..308417c
--- /dev/null
@@ -0,0 +1,4 @@
+  o Minor features:
+    - On unix, you can now use named pipes as the target of the Log
+      option, and other options that try to append to files. Closes
+      ticket 12061. Patch from "carlo von lynX".
index c4f5987d5a97ffbdb2bbe6141655ac65b72e2f68..eb9a70f580b05b4e396395cadd2b1b5e70d625de 100644 (file)
@@ -981,14 +981,23 @@ tor_fd_getpos(int fd)
 #endif
 }
 
-/** Move <b>fd</b> to the end of the file. Return -1 on error, 0 on success. */
+/** Move <b>fd</b> to the end of the file. Return -1 on error, 0 on success.
+ * If the file is a pipe, do nothing and succeed.
+ **/
 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;
+  int rc = lseek(fd, 0, SEEK_END) < 0 ? -1 : 0;
+#ifdef ESPIPE
+  /* If we get an error and ESPIPE, then it's a pipe or a socket of a fifo:
+   * no need to worry. */
+  if (rc < 0 && errno == ESPIPE)
+    rc = 0;
+#endif
+  return rc;
 #endif
 }