Make write_data use write_data_iov
authorVolker Lendecke <vl@samba.org>
Mon, 22 Dec 2008 21:17:59 +0000 (22:17 +0100)
committerVolker Lendecke <vl@samba.org>
Mon, 29 Dec 2008 12:24:28 +0000 (13:24 +0100)
source3/lib/util_sock.c

index a362938fd3bd22112c21efba1fb825d645c4f8da..d23758ad6a22bb46b7bb55ff4e0137941155e3e3 100644 (file)
@@ -707,37 +707,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];
+       struct iovec iov;
 
-       while (total < N) {
-               ret = sys_write(fd,buffer + total,N - total);
+       iov.iov_base = CONST_DISCARD(char *, buffer);
+       iov.iov_len = N;
 
-               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;
-               }
-
-               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;
 }
 
 /****************************************************************************