/*
- * Copyright (C) 2006-2007 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2008 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
#include "para.h"
#include "error.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. In any case, the number of bytes that have been written is
+ * stored in \a len.
+ */
+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 1;
+}
+
/**
* Check whether a file exists.
*
*
* \return Standard.
*/
-int mark_fd_blocking(int fd)
+__must_check int mark_fd_blocking(int fd)
{
int flags = fcntl(fd, F_GETFL);
if (flags < 0)
*
* \return Standard.
*/
-int mark_fd_nonblocking(int fd)
+__must_check int mark_fd_nonblocking(int fd)
{
int flags = fcntl(fd, F_GETFL);
if (flags < 0)
* open call is closed after mmap(). Otherwise the file is kept open and the
* file descriptor is returned in \a fd_ptr.
*
- * \return Positive on success, negative on errors. Possible errors include: \p
- * E_FSTAT, any errors returned by para_open(), \p E_EMPTY, \p E_MMAP.
+ * \return Standard.
*
* \sa para_open(), mmap(2).
*/