busybox/libbb/full_write.c
<<
>>
Prefs
   1/* vi: set sw=4 ts=4: */
   2/*
   3 * Utility routines.
   4 *
   5 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
   6 *
   7 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
   8 */
   9
  10#include "libbb.h"
  11
  12/*
  13 * Write all of the supplied buffer out to a file.
  14 * This does multiple writes as necessary.
  15 * Returns the amount written, or -1 on an error.
  16 */
  17ssize_t FAST_FUNC full_write(int fd, const void *buf, size_t len)
  18{
  19        ssize_t cc;
  20        ssize_t total;
  21
  22        total = 0;
  23
  24        while (len) {
  25                cc = safe_write(fd, buf, len);
  26
  27                if (cc < 0) {
  28                        if (total) {
  29                                /* we already wrote some! */
  30                                /* user can do another write to know the error code */
  31                                return total;
  32                        }
  33                        return cc;  /* write() returns -1 on failure. */
  34                }
  35
  36                total += cc;
  37                buf = ((const char *)buf) + cc;
  38                len -= cc;
  39        }
  40
  41        return total;
  42}
  43