From a5d186d3157df0227dc3a8206bc3e8ca75a8b14e Mon Sep 17 00:00:00 2001 From: pquerna Date: Tue, 15 Mar 2005 22:24:00 +0000 Subject: backport fix for writev_full from trunk. git-svn-id: http://svn.apache.org/repos/asf/apr/apr/branches/1.1.x@157597 13f79535-47bb-0310-9956-ffa450edef68 --- file_io/unix/fullrw.c | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/file_io/unix/fullrw.c b/file_io/unix/fullrw.c index 7d1f85b32..71ffe0f55 100644 --- a/file_io/unix/fullrw.c +++ b/file_io/unix/fullrw.c @@ -66,30 +66,19 @@ APR_DECLARE(apr_status_t) apr_file_writev_full(apr_file_t *thefile, apr_size_t nvec, apr_size_t *bytes_written) { - apr_status_t status; + apr_status_t rv = APR_SUCCESS; + int i; + apr_size_t amt = 0; apr_size_t total = 0; - do { - apr_size_t i, amt; - status = apr_file_writev(thefile, vec, nvec, &amt); - - /* We assume that writev will only write complete iovec areas. - * Incomplete writes inside a single area are not supported. - * This should be safe according to SuS v2. - */ - for (i = 0; i < nvec; i++) { - total += vec[i].iov_len; - if (total >= amt) { - vec = &vec[i+1]; - nvec -= i+1; - break; - } - } - } while (status == APR_SUCCESS && nvec > 0); + for (i = 0; i < nvec && rv == APR_SUCCESS; i++) { + rv = apr_file_write_full(thefile, vec[i].iov_base, + vec[i].iov_len, &amt); + total += amt; + } if (bytes_written != NULL) *bytes_written = total; - return status; + return rv; } - -- cgit v1.2.1