Module Name: src Committed By: christos Date: Sat Jan 9 18:26:03 UTC 2021
Modified Files: src/usr.bin/telnet: commands.c Log Message: preserve errno because we are doing system calls between error printing and error setting. To generate a diff of this commit: cvs rdiff -u -r1.78 -r1.79 src/usr.bin/telnet/commands.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/telnet/commands.c diff -u src/usr.bin/telnet/commands.c:1.78 src/usr.bin/telnet/commands.c:1.79 --- src/usr.bin/telnet/commands.c:1.78 Sat Jan 9 13:22:42 2021 +++ src/usr.bin/telnet/commands.c Sat Jan 9 13:26:03 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: commands.c,v 1.78 2021/01/09 18:22:42 christos Exp $ */ +/* $NetBSD: commands.c,v 1.79 2021/01/09 18:26:03 christos Exp $ */ /* * Copyright (C) 1997 and 1998 WIDE Project. @@ -63,7 +63,7 @@ #if 0 static char sccsid[] = "@(#)commands.c 8.4 (Berkeley) 5/30/95"; #else -__RCSID("$NetBSD: commands.c,v 1.78 2021/01/09 18:22:42 christos Exp $"); +__RCSID("$NetBSD: commands.c,v 1.79 2021/01/09 18:26:03 christos Exp $"); #endif #endif /* not lint */ @@ -2086,7 +2086,7 @@ tn(int argc, char *argv[]) { struct addrinfo hints, *res, *res0; const char *cause = "telnet: unknown"; - int error; + int error, serrno = 0; char *cmd, *hostp = 0; const char *portp = 0; const char *user = 0; @@ -2193,6 +2193,7 @@ tn(int argc, char *argv[]) printf("Trying %s...\n", sockaddr_ntop(res->ai_addr)); net = socket(res->ai_family, res->ai_socktype, res->ai_protocol); if (net < 0) { + serrno = errno; cause = "telnet: socket"; continue; } @@ -2203,11 +2204,13 @@ tn(int argc, char *argv[]) #if defined(IPSEC) && defined(IPSEC_POLICY_IPSEC) if (setpolicy(net, res, ipsec_policy_in) < 0) { + serrno = errno; (void) NetClose(net); net = -1; continue; } if (setpolicy(net, res, ipsec_policy_out) < 0) { + serrno = errno; (void) NetClose(net); net = -1; continue; @@ -2218,6 +2221,7 @@ tn(int argc, char *argv[]) if (res->ai_next) { warn("Connect to address %s: ", sockaddr_ntop(res->ai_addr)); } + serrno = errno; cause = "Unable to connect to remote host"; (void) NetClose(net); net = -1; @@ -2232,7 +2236,7 @@ tn(int argc, char *argv[]) } freeaddrinfo(res0); if (net < 0 || connected == 0) { - warn("%s", cause); + warnc(serrno, "%s", cause); return 0; }