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 tarball for details. 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 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 return cc; /* write() returns -1 on failure. */ 29 30 total += cc; 31 buf = ((const char *)buf) + cc; 32 len -= cc; 33 } 34 35 return total; 36} 37