From: Volker Lendecke Date: Mon, 22 Dec 2008 21:17:59 +0000 (+0100) Subject: Make write_data use write_data_iov X-Git-Tag: samba-3.3.0~126 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3713aa0f7ab7109f4bbdad59b8a547c7f254617d;p=thirdparty%2Fsamba.git Make write_data use write_data_iov (cherry picked from commit f77527188bdc40a77764451c2fb7bba511a1f5a2) --- diff --git a/source/lib/util_sock.c b/source/lib/util_sock.c index c0e947b06cb..9c37e0ca8e7 100644 --- a/source/lib/util_sock.c +++ b/source/lib/util_sock.c @@ -1109,37 +1109,37 @@ ssize_t write_data_iov(int fd, const struct iovec *orig_iov, int iovcnt) Write data to a fd. ****************************************************************************/ +/**************************************************************************** + Write data to a fd. +****************************************************************************/ + ssize_t write_data(int fd, const char *buffer, size_t N) { - size_t total=0; ssize_t ret; - char addr[INET6_ADDRSTRLEN]; - - while (total < N) { - ret = sys_write(fd,buffer + total,N - total); + struct iovec iov; - if (ret == -1) { - if (fd == get_client_fd()) { - /* Try and give an error message saying - * what client failed. */ - DEBUG(0,("write_data: write failure in " - "writing to client %s. Error %s\n", - get_peer_addr(fd,addr,sizeof(addr)), - strerror(errno) )); - } else { - DEBUG(0,("write_data: write failure. " - "Error = %s\n", strerror(errno) )); - } - return -1; - } + iov.iov_base = CONST_DISCARD(char *, buffer); + iov.iov_len = N; - if (ret == 0) { - return total; - } + ret = write_data_iov(fd, &iov, 1); + if (ret >= 0) { + return ret; + } - total += ret; + if (fd == get_client_fd()) { + char addr[INET6_ADDRSTRLEN]; + /* + * Try and give an error message saying what client failed. + */ + DEBUG(0, ("write_data: write failure in writing to client %s. " + "Error %s\n", get_peer_addr(fd,addr,sizeof(addr)), + strerror(errno))); + } else { + DEBUG(0,("write_data: write failure. Error = %s\n", + strerror(errno) )); } - return (ssize_t)total; + + return -1; } /****************************************************************************