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) {

Reply via email to