Module Name: src
Committed By: alnsn
Date: Sat Apr 30 12:25:05 UTC 2011
Modified Files:
src/lib/librumpclient: rumpclient.c
Log Message:
Save/restore errno in error path in dupgood. Check that n>0 before
accessing banner[n-1].
Approved a while ago by pooka@
To generate a diff of this commit:
cvs rdiff -u -r1.44 -r1.45 src/lib/librumpclient/rumpclient.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/librumpclient/rumpclient.c
diff -u src/lib/librumpclient/rumpclient.c:1.44 src/lib/librumpclient/rumpclient.c:1.45
--- src/lib/librumpclient/rumpclient.c:1.44 Tue Mar 15 09:35:05 2011
+++ src/lib/librumpclient/rumpclient.c Sat Apr 30 12:25:05 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpclient.c,v 1.44 2011/03/15 09:35:05 pooka Exp $ */
+/* $NetBSD: rumpclient.c,v 1.45 2011/04/30 12:25:05 alnsn Exp $ */
/*
* Copyright (c) 2010, 2011 Antti Kantee. All Rights Reserved.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: rumpclient.c,v 1.44 2011/03/15 09:35:05 pooka Exp $");
+__RCSID("$NetBSD: rumpclient.c,v 1.45 2011/04/30 12:25:05 alnsn Exp $");
#include <sys/param.h>
#include <sys/event.h>
@@ -589,6 +589,7 @@
{
int ofds[4];
int i;
+ int sverrno;
for (i = 0; (myfd <= 2 || mustchange) && myfd != -1; i++) {
assert(i < __arraycount(ofds));
@@ -600,10 +601,17 @@
}
}
+ sverrno = 0;
+ if (myfd == -1 && i > 0)
+ sverrno = errno;
+
for (i--; i >= 0; i--) {
host_close(ofds[i]);
}
+ if (sverrno)
+ errno = sverrno;
+
return myfd;
}
@@ -673,7 +681,7 @@
return -1;
}
- if ((n = host_read(s, banner, sizeof(banner)-1)) < 0) {
+ if ((n = host_read(s, banner, sizeof(banner)-1)) <= 0) {
ERRLOG(("rump_sp: failed to read banner\n"));
return -1;
}
@@ -683,7 +691,7 @@
return -1;
}
banner[n] = '\0';
- /* parse the banner some day */
+ /* XXX parse the banner some day */
flags = host_fcntl(s, F_GETFL, 0);
if (host_fcntl(s, F_SETFL, flags | O_NONBLOCK) == -1) {