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#include "libbb.h" 10 11/* 12 * Write all of the supplied buffer out to a file. 13 * This does multiple writes as necessary. 14 * Returns the amount written, or -1 on an error. 15 */ 16ssize_t FAST_FUNC full_write(int fd, const void *buf, size_t len) 17{ 18 ssize_t cc; 19 ssize_t total; 20 21 total = 0; 22 23 while (len) { 24 cc = safe_write(fd, buf, len); 25 26 if (cc < 0) { 27 if (total) { 28 /* we already wrote some! */ 29 /* user can do another write to know the error code */ 30 return total; 31 } 32 return cc; /* write() returns -1 on failure. */ 33 } 34 35 total += cc; 36 buf = ((const char *)buf) + cc; 37 len -= cc; 38 } 39 40 return total; 41} 42