From: Nick Mathewson Date: Wed, 20 Aug 2014 17:45:16 +0000 (-0400) Subject: Allow named pipes for our log files. X-Git-Tag: tor-0.2.6.1-alpha~193 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a32913d5aa816cdc41edbabf9b606b83aea6c835;p=thirdparty%2Ftor.git Allow named pipes for our log files. 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 --- diff --git a/changes/bug12061 b/changes/bug12061 new file mode 100644 index 0000000000..308417cce8 --- /dev/null +++ b/changes/bug12061 @@ -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". diff --git a/src/common/compat.c b/src/common/compat.c index c4f5987d5a..eb9a70f580 100644 --- a/src/common/compat.c +++ b/src/common/compat.c @@ -981,14 +981,23 @@ tor_fd_getpos(int fd) #endif } -/** Move fd to the end of the file. Return -1 on error, 0 on success. */ +/** Move fd 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 }