From d313757b828cae822aea3d389907fee2801bc729 Mon Sep 17 00:00:00 2001 From: ginsbach Date: Fri, 15 Jul 2005 21:29:54 +0000 Subject: [PATCH] * Exit non-zero error code when flushroute() fails operating on the routing socket, e.g. running route flush as non-root. * When quiet (-q) don't append error string to a non-existent diagnostic output (stdout). The error diagnostic is still written to stderr. [from FreeBSD] * Use warn(3) in place of perror(3). --- sbin/route/route.c | 45 ++++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/sbin/route/route.c b/sbin/route/route.c index 1bb76d2902ef..d2a250beb573 100644 --- a/sbin/route/route.c +++ b/sbin/route/route.c @@ -1,4 +1,4 @@ -/* $NetBSD: route.c,v 1.82 2005/06/26 21:28:15 christos Exp $ */ +/* $NetBSD: route.c,v 1.83 2005/07/15 21:29:54 ginsbach Exp $ */ /* * Copyright (c) 1983, 1989, 1991, 1993 @@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1983, 1989, 1991, 1993\n\ #if 0 static char sccsid[] = "@(#)route.c 8.6 (Berkeley) 4/28/95"; #else -__RCSID("$NetBSD: route.c,v 1.82 2005/06/26 21:28:15 christos Exp $"); +__RCSID("$NetBSD: route.c,v 1.83 2005/07/15 21:29:54 ginsbach Exp $"); #endif #endif /* not lint */ @@ -329,7 +329,7 @@ bad: usage(*argv); rlen = write(sock, next, rtm->rtm_msglen); if (rlen < (int)rtm->rtm_msglen) { warn("write to routing socket, got %d for rlen", rlen); - break; + return 1; } seqno++; if (qflag) @@ -992,8 +992,8 @@ newroute(int argc, char **argv) } if (*cmd == 'g') return rv; - oerrno = errno; if (!qflag) { + oerrno = errno; (void) printf("%s %s %s", cmd, ishost? "host" : "net", dest); if (*gateway) { (void) printf(": gateway %s", gateway); @@ -1003,26 +1003,25 @@ newroute(int argc, char **argv) } if (ret == 0) (void) printf("\n"); - } - if (ret != 0) { - switch (oerrno) { - case ESRCH: - error = "not in table"; - break; - case EBUSY: - error = "entry in use"; - break; - case ENOBUFS: - error = "routing table overflow"; - break; - default: - error = strerror(oerrno); - break; + else { + switch (oerrno) { + case ESRCH: + error = "not in table"; + break; + case EBUSY: + error = "entry in use"; + break; + case ENOBUFS: + error = "routing table overflow"; + break; + default: + error = strerror(oerrno); + break; + } + (void) printf(": %s\n", error); } - (void) printf(": %s\n", error); - return 1; } - return 0; + return (ret != 0); } static void @@ -1552,7 +1551,7 @@ rtmsg(int cmd, int flags) if (debugonly) return (0); if ((rlen = write(sock, (char *)&m_rtmsg, l)) < 0) { - perror("writing to routing socket"); + warn("writing to routing socket"); return (-1); } #ifndef SMALL