[Nbd] [PATCH 1 of 3] Remove compilation warnings and increase error checking in test suite
- To: nbd-general@lists.sourceforge.net
- Subject: [Nbd] [PATCH 1 of 3] Remove compilation warnings and increase error checking in test suite
- From: Alex Bligh <alex@...872...>
- Date: Tue, 17 May 2011 10:25:01 +0100
- Message-id: <743245A0673CF1D45CE6EC87@...874...>
- Reply-to: Alex Bligh <alex@...872...>
This allows for clean compilation of "make check" and adds some error
checking.
Also at:
http://www.alex.org.uk/nbd-testsuite-fix-warnings.patch
--
Alex Bligh
Signed-Off-By: Alex Bligh <alex@...872...>
commit 085441290bc5c304b1c8ce41a76b55129d9736c3
Author: Alex Bligh <alex@...872...>
Date: Tue May 17 07:45:19 2011 +0100
Remove compilation warnings and increase error checking in test suite
diff --git a/nbd-tester-client.c b/nbd-tester-client.c
index d52b687..beb6d06 100644
--- a/nbd-tester-client.c
+++ b/nbd-tester-client.c
@@ -72,9 +72,28 @@ static inline int read_all(int f, void *buf, size_t len)
{
return retval;
}
+static inline int write_all(int f, void *buf, size_t len) {
+ ssize_t res;
+ size_t retval=0;
+
+ while(len>0) {
+ if((res=write(f, buf, len)) <=0) {
+ snprintf(errstr, errstr_len, "Write failed: %s", strerror(errno));
+ return -1;
+ }
+ len-=res;
+ buf+=res;
+ retval+=res;
+ }
+ return retval;
+}
+
#define READ_ALL_ERRCHK(f, buf, len, whereto, errmsg...) if((read_all(f,
buf, len))<=0) { snprintf(errstr, errstr_len, ##errmsg); goto whereto; }
#define READ_ALL_ERR_RT(f, buf, len, whereto, rval, errmsg...)
if((read_all(f, buf, len))<=0) { snprintf(errstr, errstr_len, ##errmsg);
retval = rval; goto whereto; }
+#define WRITE_ALL_ERRCHK(f, buf, len, whereto, errmsg...) if((write_all(f,
buf, len))<=0) { snprintf(errstr, errstr_len, ##errmsg); goto whereto; }
+#define WRITE_ALL_ERR_RT(f, buf, len, whereto, rval, errmsg...)
if((write_all(f, buf, len))<=0) { snprintf(errstr, errstr_len, ##errmsg);
retval = rval; goto whereto; }
+
int setup_connection(gchar *hostname, int port, gchar* name,
CONNECTION_TYPE ctype) {
int sock;
struct hostent *host;
@@ -131,21 +150,24 @@ int setup_connection(gchar *hostname, int port,
gchar* name, CONNECTION_TYPE cty
goto end;
}
/* flags */
- READ_ALL_ERRCHK(sock, buf, sizeof(uint16_t), err_open, "Could not read
flags: %s", strerror(errno));
+ READ_ALL_ERRCHK(sock, buf, sizeof(uint16_t), err_open, "Could not read
reserved field: %s", strerror(errno));
/* reserved field */
- write(sock, &tmp32, sizeof(tmp32));
+ WRITE_ALL_ERRCHK(sock, &tmp32, sizeof(tmp32), err_open, "Could not write
reserved field: %s", strerror(errno));
/* magic */
tmp64 = htonll(opts_magic);
- write(sock, &tmp64, sizeof(tmp64));
+ WRITE_ALL_ERRCHK(sock, &tmp64, sizeof(tmp64), err_open, "Could not write
magic: %s", strerror(errno));
/* name */
tmp32 = htonl(NBD_OPT_EXPORT_NAME);
- write(sock, &tmp32, sizeof(tmp32));
+ WRITE_ALL_ERRCHK(sock, &tmp32, sizeof(tmp32), err_open, "Could not write
option: %s", strerror(errno));
tmp32 = htonl((uint32_t)strlen(name));
- write(sock, &tmp32, sizeof(tmp32));
- write(sock, name, strlen(name));
+ WRITE_ALL_ERRCHK(sock, &tmp32, sizeof(tmp32), err_open, "Could not write
name length: %s", strerror(errno));
+ WRITE_ALL_ERRCHK(sock, name, strlen(name), err_open, "Could not write
name:: %s", strerror(errno));
READ_ALL_ERRCHK(sock, &size, sizeof(size), err_open, "Could not read
size: %s", strerror(errno));
size = ntohll(size);
- READ_ALL_ERRCHK(sock, buf, sizeof(uint16_t)+124, err_open, "Could not
read reserved zeroes: %s", strerror(errno));
+ uint16_t flags;
+ READ_ALL_ERRCHK(sock, buf, sizeof(uint16_t), err_open, "Could not read
flags: %s", strerror(errno));
+ flags = ntohs(flags);
+ READ_ALL_ERRCHK(sock, buf, 124, err_open, "Could not read reserved
zeroes: %s", strerror(errno));
goto end;
err_open:
close(sock);
@@ -193,12 +215,12 @@ int read_packet_check_header(int sock, size_t
datasize, long long int curhandle)
rep.magic=ntohl(rep.magic);
rep.error=ntohl(rep.error);
if(rep.magic!=NBD_REPLY_MAGIC) {
- snprintf(errstr, errstr_len, "Received package with incorrect
reply_magic. Index of sent packages is %lld (0x%llX), received handle is
%lld (0x%llX). Received magic 0x%lX, expected 0x%lX", curhandle, curhandle,
*((u64*)rep.handle), *((u64*)rep.handle), (long unsigned int)rep.magic,
(long unsigned int)NBD_REPLY_MAGIC);
+ snprintf(errstr, errstr_len, "Received package with incorrect
reply_magic. Index of sent packages is %lld (0x%llX), received handle is
%lld (0x%llX). Received magic 0x%lX, expected 0x%lX", (long long
int)curhandle, (long long unsigned int)curhandle, (long long
int)*((u64*)rep.handle), (long long unsigned int)*((u64*)rep.handle), (long
unsigned int)rep.magic, (long unsigned int)NBD_REPLY_MAGIC);
retval=-1;
goto end;
}
if(rep.error) {
- snprintf(errstr, errstr_len, "Received error from server: %ld (0x%lX).
Handle is %lld (0x%llX).", (long int)rep.error, (long unsigned
int)rep.error, (long long int)(*((u64*)rep.handle)), *((u64*)rep.handle));
+ snprintf(errstr, errstr_len, "Received error from server: %ld (0x%lX).
Handle is %lld (0x%llX).", (long int)rep.error, (long unsigned
int)rep.error, (long long int)(*((u64*)rep.handle)), (long long unsigned
int)*((u64*)rep.handle));
retval=-1;
goto end;
}
@@ -231,7 +253,7 @@ int oversize_test(gchar* hostname, int port, char*
name, int sock, char sock_is_
req.len=htonl(1024*1024);
memcpy(&(req.handle),&i,sizeof(i));
req.from=htonll(i);
- write(sock, &req, sizeof(req));
+ WRITE_ALL_ERR_RT(sock, &req, sizeof(req), err, -1, "Could not write
request: %s", strerror(errno));
printf("%d: testing oversized request: %d: ", getpid(), ntohl(req.len));
READ_ALL_ERR_RT(sock, &rep, sizeof(struct nbd_reply), err, -1, "Could not
read reply header: %s", strerror(errno));
READ_ALL_ERR_RT(sock, &buf, ntohl(req.len), err, -1, "Could not read
data: %s", strerror(errno));
@@ -245,7 +267,7 @@ int oversize_test(gchar* hostname, int port, char*
name, int sock, char sock_is_
/* This probably should not work */
i++; req.from=htonll(i);
req.len = htonl(ntohl(req.len) + sizeof(struct nbd_request) / 2);
- write(sock, &req, sizeof(req));
+ WRITE_ALL_ERR_RT(sock, &req, sizeof(req), err, -1, "Could not write
request: %s", strerror(errno));
printf("%d: testing oversized request: %d: ", getpid(), ntohl(req.len));
READ_ALL_ERR_RT(sock, &rep, sizeof(struct nbd_reply), err, -1, "Could not
read reply header: %s", strerror(errno));
READ_ALL_ERR_RT(sock, &buf, ntohl(req.len), err, -1, "Could not read
data: %s", strerror(errno));
@@ -259,7 +281,7 @@ int oversize_test(gchar* hostname, int port, char*
name, int sock, char sock_is_
/* ... unless this works, too */
i++; req.from=htonll(i);
req.len = htonl(ntohl(req.len) << 1);
- write(sock, &req, sizeof(req));
+ WRITE_ALL_ERR_RT(sock, &req, sizeof(req), err, -1, "Could not write
request: %s", strerror(errno));
printf("%d: testing oversized request: %d: ", getpid(), ntohl(req.len));
READ_ALL_ERR_RT(sock, &rep, sizeof(struct nbd_reply), err, -1, "Could not
read reply header: %s", strerror(errno));
READ_ALL_ERR_RT(sock, &buf, ntohl(req.len), err, -1, "Could not read
data: %s", strerror(errno));
@@ -313,7 +335,10 @@ int throughput_test(gchar* hostname, int port, char*
name, int sock, char sock_i
if(do_write) {
memcpy(&(req.handle),&i,sizeof(i));
req.from=htonll(i);
- write(sock, &req, sizeof(req));
+ if (write_all(sock, &req, sizeof(req)) <0) {
+ retval=-1;
+ goto err_open;
+ }
printf("%d: Requests(+): %d\n", (int)mypid, ++requests);
}
do {
Reply to: