summaryrefslogtreecommitdiff
path: root/source3/libsmb
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2008-01-25 23:41:48 +0100
committerVolker Lendecke <vl@samba.org>2008-02-02 11:03:22 +0100
commit5e43eeb1b6eef7ea7a88ffc51a0a0535e9bd8023 (patch)
tree89fafb0e619e518499d7ff0f7ab8078e509f8628 /source3/libsmb
parente514cd0af56031cd0396e716e9e77edf897420e9 (diff)
downloadsamba-5e43eeb1b6eef7ea7a88ffc51a0a0535e9bd8023.tar.gz
samba-5e43eeb1b6eef7ea7a88ffc51a0a0535e9bd8023.tar.bz2
samba-5e43eeb1b6eef7ea7a88ffc51a0a0535e9bd8023.zip
Get rid of read_socket_with_timeout
(This used to be commit f9c8ac83ff42137d2101d3bb17e5dcc3c3d70a8f)
Diffstat (limited to 'source3/libsmb')
-rw-r--r--source3/libsmb/clientgen.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c
index 042b3bdfb0..086c158ed2 100644
--- a/source3/libsmb/clientgen.c
+++ b/source3/libsmb/clientgen.c
@@ -180,8 +180,28 @@ bool cli_receive_smb(struct cli_state *cli)
ssize_t cli_receive_smb_data(struct cli_state *cli, char *buffer, size_t len)
{
- return read_socket_with_timeout(cli->fd, buffer, len, len,
- cli->timeout, &cli->smb_rw_error);
+ NTSTATUS status;
+
+ set_smb_read_error(&cli->smb_rw_error, SMB_READ_OK);
+
+ status = read_socket_with_timeout_ntstatus(
+ cli->fd, buffer, len, len, cli->timeout, NULL);
+ if (NT_STATUS_IS_OK(status)) {
+ return len;
+ }
+
+ if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
+ set_smb_read_error(&cli->smb_rw_error, SMB_READ_EOF);
+ return -1;
+ }
+
+ if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
+ set_smb_read_error(&cli->smb_rw_error, SMB_READ_TIMEOUT);
+ return -1;
+ }
+
+ set_smb_read_error(&cli->smb_rw_error, SMB_READ_ERROR);
+ return -1;
}
/****************************************************************************