diff options
author | Christian Grothoff <christian@grothoff.org> | 2012-01-28 14:23:43 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2012-01-28 14:23:43 +0000 |
commit | 84f8bfaf8bddaaa743bfab82164d763c3973d0ba (patch) | |
tree | 3c7e9c8b80ce70f422f69a7e0cc4326ac09a0b7a /src/util | |
parent | 873e09c5ebd42457daa2ba80e222a1087e0f71a8 (diff) | |
download | gnunet-84f8bfaf8bddaaa743bfab82164d763c3973d0ba.tar.gz gnunet-84f8bfaf8bddaaa743bfab82164d763c3973d0ba.zip |
-fix error reporting, remove unnecessary syscalls on some paths
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/disk.c | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/src/util/disk.c b/src/util/disk.c index a044482f1..6fe2ebe8f 100644 --- a/src/util/disk.c +++ b/src/util/disk.c | |||
@@ -2148,28 +2148,43 @@ GNUNET_DISK_pipe (int blocking_read, int blocking_write, int inherit_read, int i | |||
2148 | p->fd[0]->fd = fd[0]; | 2148 | p->fd[0]->fd = fd[0]; |
2149 | p->fd[1]->fd = fd[1]; | 2149 | p->fd[1]->fd = fd[1]; |
2150 | ret = 0; | 2150 | ret = 0; |
2151 | flags = fcntl (fd[0], F_GETFL); | ||
2152 | if (!blocking_read) | 2151 | if (!blocking_read) |
2152 | { | ||
2153 | flags = fcntl (fd[0], F_GETFL); | ||
2153 | flags |= O_NONBLOCK; | 2154 | flags |= O_NONBLOCK; |
2154 | if (0 > fcntl (fd[0], F_SETFL, flags)) | 2155 | if (0 > fcntl (fd[0], F_SETFL, flags)) |
2155 | ret = -1; | 2156 | { |
2157 | ret = -1; | ||
2158 | eno = errno; | ||
2159 | } | ||
2160 | } | ||
2156 | flags = fcntl (fd[0], F_GETFD); | 2161 | flags = fcntl (fd[0], F_GETFD); |
2157 | flags |= FD_CLOEXEC; | 2162 | flags |= FD_CLOEXEC; |
2158 | if (0 > fcntl (fd[0], F_SETFD, flags)) | 2163 | if (0 > fcntl (fd[0], F_SETFD, flags)) |
2164 | { | ||
2159 | ret = -1; | 2165 | ret = -1; |
2166 | eno = errno; | ||
2167 | } | ||
2160 | 2168 | ||
2161 | flags = fcntl (fd[1], F_GETFL); | ||
2162 | if (!blocking_write) | 2169 | if (!blocking_write) |
2170 | { | ||
2171 | flags = fcntl (fd[1], F_GETFL); | ||
2163 | flags |= O_NONBLOCK; | 2172 | flags |= O_NONBLOCK; |
2164 | if (0 > fcntl (fd[1], F_SETFL, flags)) | 2173 | if (0 > fcntl (fd[1], F_SETFL, flags)) |
2165 | ret = -1; | 2174 | { |
2175 | ret = -1; | ||
2176 | eno = errno; | ||
2177 | } | ||
2178 | } | ||
2166 | flags = fcntl (fd[1], F_GETFD); | 2179 | flags = fcntl (fd[1], F_GETFD); |
2167 | flags |= FD_CLOEXEC; | 2180 | flags |= FD_CLOEXEC; |
2168 | if (0 > fcntl (fd[1], F_SETFD, flags)) | 2181 | if (0 > fcntl (fd[1], F_SETFD, flags)) |
2182 | { | ||
2169 | ret = -1; | 2183 | ret = -1; |
2184 | eno = errno; | ||
2185 | } | ||
2170 | if (ret == -1) | 2186 | if (ret == -1) |
2171 | { | 2187 | { |
2172 | eno = errno; | ||
2173 | LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "fcntl"); | 2188 | LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "fcntl"); |
2174 | GNUNET_break (0 == close (p->fd[0]->fd)); | 2189 | GNUNET_break (0 == close (p->fd[0]->fd)); |
2175 | GNUNET_break (0 == close (p->fd[1]->fd)); | 2190 | GNUNET_break (0 == close (p->fd[1]->fd)); |