Fix Hurd build, another go
[users/jgh/exim.git] / src / OS / os.c-GNU
index 52316a73d8610d04d7b3d8ba7d18ed309e986637..a75166322f09f5ceb84528dbaab0a384db5387ad 100644 (file)
@@ -1,5 +1,3 @@
-/* $Cambridge: exim/src/OS/os.c-GNU,v 1.1 2004/10/06 15:07:39 ph10 Exp $ */
-
 /*************************************************
 *     Exim - an Internet mail transport agent    *
 *************************************************/
@@ -54,4 +52,42 @@ return -1;
 }
 #endif  /* OS_LOAD_AVERAGE */
 
+
+ssize_t
+os_pipe_read(int fd, void * buf, size_t count)
+{
+int rc;
+for (int retries = 10; retries > 0; retries--)
+  {
+  if ((rc = read(fd, buf, count)) >= 0) break;
+  if (rc != -1 || errno != EINTR) break;
+  }
+return rc;
+}
+
+
+ssize_t
+os_pipe_write(int fd, void * buf, size_t count)
+{
+int rc;
+for (int retries = 10; retries > 0; retries--)
+  {
+  if ((rc = write(fd, buf, count)) >= 0) break;
+  if (rc != -1 || errno != EINTR) break;
+  }
+return rc;
+}
+
+ssize_t
+os_pipe_writev(int fd, const struct iovec * iov, int iovcnt)
+{
+int rc;
+for (int retries = 10; retries > 0; retries--)
+  {
+  if ((rc = writev(fd, iov, iovcnt)) >= 0) break;
+  if (rc != -1 || errno != EINTR) break;
+  }
+return rc;
+}
+
 /* End of os.c-GNU */