]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - fd.c
Rename write_nonblock() to xwrite().
[paraslash.git] / fd.c
diff --git a/fd.c b/fd.c
index 830b15dad62f755ee75e1999b656d78a15890d10..a73325ba5af60adb712213aa789243dc02f74d90 100644 (file)
--- a/fd.c
+++ b/fd.c
 #include "string.h"
 #include "fd.h"
 
-/**
- * Write a buffer to a file descriptor, re-write on short writes.
- *
- * \param fd The file descriptor.
- * \param buf The buffer to be sent.
- * \param len The length of \a buf.
- *
- * \return Standard.
- */
-int write_all(int fd, const char *buf, size_t len)
-{
-       size_t total = len;
-
-       assert(total);
-       len = 0;
-       while (len < total) {
-               int ret = write(fd, buf + len, total - len);
-               if (ret == -1)
-                       return -ERRNO_TO_PARA_ERROR(errno);
-               len += ret;
-       }
-       return len;
-}
-
-/**
- * Send a buffer given by a format string.
- *
- * \param fd The file descriptor.
- * \param fmt A format string.
- *
- * \return Standard.
- */
-__printf_2_3 int write_va_buffer(int fd, const char *fmt, ...)
-{
-       char *msg;
-       int ret;
-
-       PARA_VSPRINTF(fmt, msg);
-       ret = write_buffer(fd, msg);
-       free(msg);
-       return ret;
-}
-
 /**
  * Write a buffer to a file descriptor, re-writing on short writes.
  *
@@ -80,7 +37,7 @@ __printf_2_3 int write_va_buffer(int fd, const char *fmt, ...)
  * len indicates that some bytes have been written but the next write would
  * block.
  */
-int write_nonblock(int fd, const char *buf, size_t len)
+int xwrite(int fd, const char *buf, size_t len)
 {
        size_t written = 0;
 
@@ -109,6 +66,48 @@ int write_nonblock(int fd, const char *buf, size_t len)
        return written;
 }
 
+/**
+ * Write all data to a file descriptor.
+ *
+ * \param fd The file descriptor.
+ * \param buf The buffer to be sent.
+ * \param len The length of \a buf.
+ *
+ * This is like \ref xwrite() but returns \p -E_SHORT_WRITE if not
+ * all data could be written.
+ *
+ * \return Number of bytes written on success, negative error code else.
+ */
+int write_all(int fd, const char *buf, size_t len)
+{
+       int ret = xwrite(fd, buf, len);
+
+       if (ret < 0)
+               return ret;
+       if (ret != len)
+               return -E_SHORT_WRITE;
+       return ret;
+}
+
+/**
+ * Write a buffer given by a format string.
+ *
+ * \param fd The file descriptor.
+ * \param fmt A format string.
+ *
+ * \return The return value of the underlying call to \ref write_all().
+ */
+__printf_2_3 int write_va_buffer(int fd, const char *fmt, ...)
+{
+       char *msg;
+       int ret;
+
+       PARA_VSPRINTF(fmt, msg);
+       ret = write_buffer(fd, msg);
+       free(msg);
+       return ret;
+}
+
 /**
  * Read from a non-blocking file descriptor into multiple buffers.
  *
@@ -121,7 +120,7 @@ int write_nonblock(int fd, const char *buf, size_t len)
  * If \a rfds is not \p NULL and the (non-blocking) file descriptor \a fd is
  * not set in \a rfds, this function returns early without doing anything.
  * Otherwise The function tries to read up to \a sz bytes from \a fd. As for
- * write_nonblock(), EAGAIN is not considered an error condition. However, EOF
+ * xwrite(), EAGAIN is not considered an error condition. However, EOF
  * is.
  *
  * \return Zero or a negative error code. If the underlying call to readv(2)
@@ -134,7 +133,7 @@ int write_nonblock(int fd, const char *buf, size_t len)
  * have been read before the error occurred. In this case \a num_bytes is
  * positive.
  *
- * \sa \ref write_nonblock(), read(2), readv(2).
+ * \sa \ref xwrite(), read(2), readv(2).
  */
 int readv_nonblock(int fd, struct iovec *iov, int iovcnt, fd_set *rfds,
                size_t *num_bytes)