diff --git a/ssh-agent.c b/ssh-agent.c
index 92ce16a..b3558b2 100644
--- a/ssh-agent.c
+++ b/ssh-agent.c
@@ -35,7 +35,7 @@
 
 #include "includes.h"
 #include "openbsd-compat/fake-queue.h"
-RCSID("$OpenBSD: ssh-agent.c,v 1.95 2002/06/19 00:27:55 deraadt Exp $");
+RCSID("$OpenBSD: ssh-agent.c,v 1.96 2002/06/23 10:29:52 deraadt Exp $");
 
 #include <openssl/evp.h>
 #include <openssl/md5.h>
@@ -110,6 +110,7 @@
 idtab_init(void)
 {
 	int i;
+
 	for (i = 0; i <=2; i++) {
 		TAILQ_INIT(&idtable[i].idlist);
 		idtable[i].nentries = 0;
@@ -152,8 +153,8 @@
 process_request_identities(SocketEntry *e, int version)
 {
 	Idtab *tab = idtab_lookup(version);
-	Buffer msg;
 	Identity *id;
+	Buffer msg;
 
 	buffer_init(&msg);
 	buffer_put_char(&msg, (version == 1) ?
@@ -182,14 +183,14 @@
 static void
 process_authentication_challenge1(SocketEntry *e)
 {
-	Identity *id;
-	Key *key;
+	u_char buf[32], mdbuf[16], session_id[16];
+	u_int response_type;
 	BIGNUM *challenge;
+	Identity *id;
 	int i, len;
 	Buffer msg;
 	MD5_CTX md;
-	u_char buf[32], mdbuf[16], session_id[16];
-	u_int response_type;
+	Key *key;
 
 	buffer_init(&msg);
 	key = key_new(KEY_RSA1);
@@ -251,13 +252,12 @@
 static void
 process_sign_request2(SocketEntry *e)
 {
-	extern int datafellows;
-	Key *key;
 	u_char *blob, *data, *signature = NULL;
 	u_int blen, dlen, slen = 0;
-	int flags;
+	extern int datafellows;
+	int ok = -1, flags;
 	Buffer msg;
-	int ok = -1;
+	Key *key;
 
 	datafellows = 0;
 
@@ -296,11 +296,10 @@
 static void
 process_remove_identity(SocketEntry *e, int version)
 {
+	u_int blen, bits;
+	int success = 0;
 	Key *key = NULL;
 	u_char *blob;
-	u_int blen;
-	u_int bits;
-	int success = 0;
 
 	switch (version) {
 	case 1:
@@ -310,7 +309,7 @@
 		buffer_get_bignum(&e->request, key->rsa->n);
 
 		if (bits != key_size(key))
-			log("Warning: identity keysize mismatch: actual %d, announced %d",
+			log("Warning: identity keysize mismatch: actual %u, announced %u",
 			    key_size(key), bits);
 		break;
 	case 2:
@@ -370,10 +369,10 @@
 static void
 reaper(void)
 {
-	Idtab *tab;
+	u_int now = time(NULL);
 	Identity *id, *nxt;
 	int version;
-	u_int now = time(NULL);
+	Idtab *tab;
 
 	for (version = 1; version < 3; version++) {
 		tab = idtab_lookup(version);
@@ -391,11 +390,10 @@
 static void
 process_add_identity(SocketEntry *e, int version)
 {
-	Key *k = NULL;
-	char *type_name;
-	char *comment;
-	int type, success = 0, death = 0;
 	Idtab *tab = idtab_lookup(version);
+	int type, success = 0, death = 0;
+	char *type_name, *comment;
+	Key *k = NULL;
 
 	switch (version) {
 	case 1:
@@ -481,8 +479,8 @@
 static void
 process_lock_agent(SocketEntry *e, int lock)
 {
-	char *passwd;
 	int success = 0;
+	char *passwd;
 
 	passwd = buffer_get_string(&e->request, NULL);
 	if (locked && !lock && strcmp(passwd, lock_passwd) == 0) {
@@ -523,11 +521,11 @@
 static void
 process_add_smartcard_key (SocketEntry *e)
 {
-	Identity *id;
-	Idtab *tab;
-	Key **keys, *k;
 	char *sc_reader_id = NULL, *pin;
 	int i, version, success = 0;
+	Key **keys, *k;
+	Identity *id;
+	Idtab *tab;
 
 	sc_reader_id = buffer_get_string(&e->request, NULL);
 	pin = buffer_get_string(&e->request, NULL);
@@ -566,11 +564,11 @@
 static void
 process_remove_smartcard_key(SocketEntry *e)
 {
-	Identity *id;
-	Idtab *tab;
-	Key **keys, *k = NULL;
 	char *sc_reader_id = NULL, *pin;
 	int i, version, success = 0;
+	Key **keys, *k = NULL;
+	Identity *id;
+	Idtab *tab;
 
 	sc_reader_id = buffer_get_string(&e->request, NULL);
 	pin = buffer_get_string(&e->request, NULL);
@@ -608,8 +606,7 @@
 static void
 process_message(SocketEntry *e)
 {
-	u_int msg_len;
-	u_int type;
+	u_int msg_len, type;
 	u_char *cp;
 
 	/* kill dead keys */
@@ -622,6 +619,7 @@
 	if (msg_len > 256 * 1024) {
 		shutdown(e->fd, SHUT_RDWR);
 		close(e->fd);
+		e->fd = -1;
 		e->type = AUTH_UNUSED;
 		buffer_free(&e->input);
 		buffer_free(&e->output);
@@ -717,6 +715,7 @@
 new_socket(sock_type type, int fd)
 {
 	u_int i, old_alloc;
+
 	if (fcntl(fd, F_SETFL, O_NONBLOCK) < 0)
 		error("fcntl O_NONBLOCK: %s", strerror(errno));
 
@@ -801,11 +800,11 @@
 static void
 after_select(fd_set *readset, fd_set *writeset)
 {
-	u_int i;
-	int len, sock;
+	struct sockaddr_un sunaddr;
 	socklen_t slen;
 	char buf[1024];
-	struct sockaddr_un sunaddr;
+	int len, sock;
+	u_int i;
 
 	for (i = 0; i < sockets_alloc; i++)
 		switch (sockets[i].type) {
@@ -839,6 +838,7 @@
 				if (len <= 0) {
 					shutdown(sockets[i].fd, SHUT_RDWR);
 					close(sockets[i].fd);
+					sockets[i].fd = -1;
 					sockets[i].type = AUTH_UNUSED;
 					buffer_free(&sockets[i].input);
 					buffer_free(&sockets[i].output);
@@ -858,6 +858,7 @@
 				if (len <= 0) {
 					shutdown(sockets[i].fd, SHUT_RDWR);
 					close(sockets[i].fd);
+					sockets[i].fd = -1;
 					sockets[i].type = AUTH_UNUSED;
 					buffer_free(&sockets[i].input);
 					buffer_free(&sockets[i].output);
@@ -928,6 +929,8 @@
 main(int ac, char **av)
 {
 	int sock, c_flag = 0, d_flag = 0, k_flag = 0, s_flag = 0, ch, nalloc;
+	char *shell, *format, *pidstr, *agentsocket = NULL;
+	fd_set *readsetp = NULL, *writesetp = NULL;
 	struct sockaddr_un sunaddr;
 #ifdef HAVE_SETRLIMIT
 	struct rlimit rlim;
@@ -935,12 +938,10 @@
 #ifdef HAVE_CYGWIN
 	int prev_mask;
 #endif
-	pid_t pid;
-	char *shell, *format, *pidstr, pidstrbuf[1 + 3 * sizeof pid];
-	char *agentsocket = NULL;
 	extern int optind;
 	extern char *optarg;
-	fd_set *readsetp = NULL, *writesetp = NULL;
+	pid_t pid;
+	char pidstrbuf[1 + 3 * sizeof pid];
 
 	SSLeay_add_all_algorithms();
 
