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 if error was seen 15 * on the very first write. 16 */ full_write(int fd,const void * buf,size_t len)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