-code deduplication, doxygen fixes
authorChristian Grothoff <christian@grothoff.org>
Sat, 28 Jan 2012 14:35:53 +0000 (14:35 +0000)
committerChristian Grothoff <christian@grothoff.org>
Sat, 28 Jan 2012 14:35:53 +0000 (14:35 +0000)
src/util/disk.c
src/util/resolver_api.c

index 6fe2ebe8fd5a502b6809a784565ebf0e7c5fd43e..d64bcbafb8e8542df6a74ab03d366c61b4a95796 100644 (file)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2001, 2002, 2005, 2006, 2009 Christian Grothoff (and other contributing authors)
+     (C) 2001--2012 Christian Grothoff (and other contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -1972,6 +1972,7 @@ GNUNET_DISK_file_sync (const struct GNUNET_DISK_FileHandle *h)
 #endif
 }
 
+
 #if WINDOWS
 /* Copyright Bob Byrnes  <byrnes <at> curl.com>
    http://permalink.gmane.org/gmane.os.cygwin.patches/2121
@@ -2110,6 +2111,7 @@ create_selectable_pipe (PHANDLE read_pipe_ptr, PHANDLE write_pipe_ptr,
 }
 #endif
 
+
 /**
  * Creates an interprocess channel
  *
@@ -2122,18 +2124,9 @@ create_selectable_pipe (PHANDLE read_pipe_ptr, PHANDLE write_pipe_ptr,
 struct GNUNET_DISK_PipeHandle *
 GNUNET_DISK_pipe (int blocking_read, int blocking_write, int inherit_read, int inherit_write)
 {
-  struct GNUNET_DISK_PipeHandle *p;
-  struct GNUNET_DISK_FileHandle *fds;
-
-  p = GNUNET_malloc (sizeof (struct GNUNET_DISK_PipeHandle) +
-                     2 * sizeof (struct GNUNET_DISK_FileHandle));
-  fds = (struct GNUNET_DISK_FileHandle *) &p[1];
-  p->fd[0] = &fds[0];
-  p->fd[1] = &fds[1];
 #ifndef MINGW
   int fd[2];
   int ret;
-  int flags;
   int eno;
 
   ret = pipe (fd);
@@ -2141,58 +2134,14 @@ GNUNET_DISK_pipe (int blocking_read, int blocking_write, int inherit_read, int i
   {
     eno = errno;
     LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "pipe");
-    GNUNET_free (p);
-    errno = eno;
-    return NULL;
-  }
-  p->fd[0]->fd = fd[0];
-  p->fd[1]->fd = fd[1];
-  ret = 0;
-  if (!blocking_read)
-  {
-    flags = fcntl (fd[0], F_GETFL);
-    flags |= O_NONBLOCK;
-    if (0 > fcntl (fd[0], F_SETFL, flags))
-    {
-      ret = -1;
-      eno = errno;
-    }
-  }
-  flags = fcntl (fd[0], F_GETFD);
-  flags |= FD_CLOEXEC;
-  if (0 > fcntl (fd[0], F_SETFD, flags))
-  {
-    ret = -1;
-    eno = errno;
-  }
-
-  if (!blocking_write)
-  {
-    flags = fcntl (fd[1], F_GETFL);
-    flags |= O_NONBLOCK;
-    if (0 > fcntl (fd[1], F_SETFL, flags))
-    {
-      ret = -1;
-      eno = errno;
-    }
-  }
-  flags = fcntl (fd[1], F_GETFD);
-  flags |= FD_CLOEXEC;
-  if (0 > fcntl (fd[1], F_SETFD, flags))
-  {
-    ret = -1;
-    eno = errno;
-  }
-  if (ret == -1)
-  {
-    LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "fcntl");
-    GNUNET_break (0 == close (p->fd[0]->fd));
-    GNUNET_break (0 == close (p->fd[1]->fd));
-    GNUNET_free (p);
     errno = eno;
     return NULL;
   }
+  return GNUNET_DISK_pipe_from_fd (blocking_read,
+                                  blocking_write,
+                                  fd);
 #else
+  struct GNUNET_DISK_PipeHandle *p;
   BOOL ret;
   HANDLE tmp_handle;
 
@@ -2249,15 +2198,17 @@ GNUNET_DISK_pipe (int blocking_read, int blocking_write, int inherit_read, int i
   p->fd[1]->oOverlapRead->hEvent = CreateEvent (NULL, FALSE, FALSE, NULL);
   p->fd[1]->oOverlapWrite->hEvent = CreateEvent (NULL, FALSE, FALSE, NULL);
 
-#endif
   return p;
+#endif
 }
 
+
 /**
  * Creates a pipe object from a couple of file descriptors.
  * Useful for wrapping existing pipe FDs.
  *
- * @param blocking creates an asynchronous pipe if set to GNUNET_NO
+ * @param blocking_read creates an asynchronous pipe for reading if set to GNUNET_NO
+ * @param blocking_write creates an asynchronous pipe for writing if set to GNUNET_NO
  * @param fd an array of two fd values. One of them may be -1 for read-only or write-only pipes
  *
  * @return handle to the new pipe, NULL on error
@@ -2283,32 +2234,48 @@ GNUNET_DISK_pipe_from_fd (int blocking_read, int blocking_write, int fd[2])
   ret = 0;
   if (fd[0] >= 0)
   {
-    flags = fcntl (fd[0], F_GETFL);
     if (!blocking_read)
+    {
+      flags = fcntl (fd[0], F_GETFL);
       flags |= O_NONBLOCK;
-    if (0 > fcntl (fd[0], F_SETFL, flags))
-      ret = -1;
+      if (0 > fcntl (fd[0], F_SETFL, flags))
+      {
+       ret = -1;
+       eno = errno;
+      }
+    }
     flags = fcntl (fd[0], F_GETFD);
     flags |= FD_CLOEXEC;
     if (0 > fcntl (fd[0], F_SETFD, flags))
+    {
       ret = -1;
+      eno = errno;
+    }
   }
 
   if (fd[1] >= 0)
   {
-    flags = fcntl (fd[1], F_GETFL);
     if (!blocking_write)
+    {
+      flags = fcntl (fd[1], F_GETFL);
       flags |= O_NONBLOCK;
-    if (0 > fcntl (fd[1], F_SETFL, flags))
-      ret = -1;
+      if (0 > fcntl (fd[1], F_SETFL, flags))
+      {
+       ret = -1;
+       eno = errno;
+      }
+    }
     flags = fcntl (fd[1], F_GETFD);
     flags |= FD_CLOEXEC;
     if (0 > fcntl (fd[1], F_SETFD, flags))
+    {
       ret = -1;
+      eno = errno;
+    }
   }
   if (ret == -1)
   {
-    eno = errno;
+    errno = eno;
     LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "fcntl");
     if (p->fd[0]->fd >= 0)
       GNUNET_break (0 == close (p->fd[0]->fd));
@@ -2319,8 +2286,6 @@ GNUNET_DISK_pipe_from_fd (int blocking_read, int blocking_write, int fd[2])
     return NULL;
   }
 #else
-  BOOL ret;
-
   if (fd[0] >= 0)
     p->fd[0]->h = _get_osfhandle (fd[0]);
   else
@@ -2421,6 +2386,7 @@ GNUNET_DISK_pipe_close_end (struct GNUNET_DISK_PipeHandle *p,
   return ret;
 }
 
+
 /**
  * Closes an interprocess channel
  *
@@ -2663,6 +2629,7 @@ GNUNET_DISK_npipe_open (const char *fn, enum GNUNET_DISK_OpenFlags flags,
 #endif
 }
 
+
 /**
  * Closes a named pipe/FIFO
  * @param pipe named pipe
index ea9d55d54908b6a5411dec9631035aa31a148f08..9d5ae6c0a9b02ccf46dc69c9278acdb3d6f63195 100644 (file)
@@ -272,8 +272,9 @@ GNUNET_RESOLVER_disconnect ()
 /**
  * Convert IP address to string without DNS resolution.
  *
- * @param sa the address
- * @param salen number of bytes in sa
+ * @param af address family
+ * @param ip the address
+ * @param ip_len number of bytes in ip
  * @return address as a string, NULL on error
  */
 static char *