]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
smbd: Move fake_sendfile to smb2_reply.c
authorDavid Mulder <dmulder@suse.com>
Thu, 17 Mar 2022 17:15:23 +0000 (11:15 -0600)
committerJeremy Allison <jra@samba.org>
Thu, 7 Apr 2022 17:37:29 +0000 (17:37 +0000)
Signed-off-by: David Mulder <dmulder@suse.com>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/smbd/proto.h
source3/smbd/reply.c
source3/smbd/smb2_reply.c

index a9500064292e8328b87fd84a6a0b442de2ee9101..caa5df3485a02228cca78fb6e8e781d75b33e077 100644 (file)
@@ -928,8 +928,6 @@ void reply_ulogoffX(struct smb_request *req);
 void reply_mknew(struct smb_request *req);
 void reply_ctemp(struct smb_request *req);
 void reply_unlink(struct smb_request *req);
-ssize_t fake_sendfile(struct smbXsrv_connection *xconn, files_struct *fsp,
-                     off_t startpos, size_t nread);
 ssize_t sendfile_short_send(struct smbXsrv_connection *xconn,
                            files_struct *fsp,
                            ssize_t nread,
@@ -1036,6 +1034,8 @@ NTSTATUS unlink_internals(connection_struct *conn,
                        struct smb_request *req,
                        uint32_t dirtype,
                        struct smb_filename *smb_fname);
+ssize_t fake_sendfile(struct smbXsrv_connection *xconn, files_struct *fsp,
+                     off_t startpos, size_t nread);
 
 /* The following definitions come from smbd/seal.c  */
 
index 757133320d059d4e43ffeb55e41ecad6f034e847..1785e95d4dc50a11f17eb4f97c69885cc509dc6d 100644 (file)
@@ -2446,66 +2446,6 @@ static void fail_readraw(void)
        exit_server_cleanly(errstr);
 }
 
-/****************************************************************************
- Fake (read/write) sendfile. Returns -1 on read or write fail.
-****************************************************************************/
-
-ssize_t fake_sendfile(struct smbXsrv_connection *xconn, files_struct *fsp,
-                     off_t startpos, size_t nread)
-{
-       size_t bufsize;
-       size_t tosend = nread;
-       char *buf;
-
-       if (nread == 0) {
-               return 0;
-       }
-
-       bufsize = MIN(nread, 65536);
-
-       if (!(buf = SMB_MALLOC_ARRAY(char, bufsize))) {
-               return -1;
-       }
-
-       while (tosend > 0) {
-               ssize_t ret;
-               size_t cur_read;
-
-               cur_read = MIN(tosend, bufsize);
-               ret = read_file(fsp,buf,startpos,cur_read);
-               if (ret == -1) {
-                       SAFE_FREE(buf);
-                       return -1;
-               }
-
-               /* If we had a short read, fill with zeros. */
-               if (ret < cur_read) {
-                       memset(buf + ret, '\0', cur_read - ret);
-               }
-
-               ret = write_data(xconn->transport.sock, buf, cur_read);
-               if (ret != cur_read) {
-                       int saved_errno = errno;
-                       /*
-                        * Try and give an error message saying what
-                        * client failed.
-                        */
-                       DEBUG(0, ("write_data failed for client %s. "
-                                 "Error %s\n",
-                                 smbXsrv_connection_dbg(xconn),
-                                 strerror(saved_errno)));
-                       SAFE_FREE(buf);
-                       errno = saved_errno;
-                       return -1;
-               }
-               tosend -= cur_read;
-               startpos += cur_read;
-       }
-
-       SAFE_FREE(buf);
-       return (ssize_t)nread;
-}
-
 /****************************************************************************
  Deal with the case of sendfile reading less bytes from the file than
  requested. Fill with zeros (all we can do). Returns 0 on success
index 138bb8d3cb2753072bd4c250437cf3d7a91e6ba8..a74524d43ceb2b18f1afc13cd2ad36b262c1d382 100644 (file)
@@ -890,3 +890,63 @@ NTSTATUS unlink_internals(connection_struct *conn,
 
        return close_file_free(req, &fsp, NORMAL_CLOSE);
 }
+
+/****************************************************************************
+ Fake (read/write) sendfile. Returns -1 on read or write fail.
+****************************************************************************/
+
+ssize_t fake_sendfile(struct smbXsrv_connection *xconn, files_struct *fsp,
+                     off_t startpos, size_t nread)
+{
+       size_t bufsize;
+       size_t tosend = nread;
+       char *buf;
+
+       if (nread == 0) {
+               return 0;
+       }
+
+       bufsize = MIN(nread, 65536);
+
+       if (!(buf = SMB_MALLOC_ARRAY(char, bufsize))) {
+               return -1;
+       }
+
+       while (tosend > 0) {
+               ssize_t ret;
+               size_t cur_read;
+
+               cur_read = MIN(tosend, bufsize);
+               ret = read_file(fsp,buf,startpos,cur_read);
+               if (ret == -1) {
+                       SAFE_FREE(buf);
+                       return -1;
+               }
+
+               /* If we had a short read, fill with zeros. */
+               if (ret < cur_read) {
+                       memset(buf + ret, '\0', cur_read - ret);
+               }
+
+               ret = write_data(xconn->transport.sock, buf, cur_read);
+               if (ret != cur_read) {
+                       int saved_errno = errno;
+                       /*
+                        * Try and give an error message saying what
+                        * client failed.
+                        */
+                       DEBUG(0, ("write_data failed for client %s. "
+                                 "Error %s\n",
+                                 smbXsrv_connection_dbg(xconn),
+                                 strerror(saved_errno)));
+                       SAFE_FREE(buf);
+                       errno = saved_errno;
+                       return -1;
+               }
+               tosend -= cur_read;
+               startpos += cur_read;
+       }
+
+       SAFE_FREE(buf);
+       return (ssize_t)nread;
+}