From owner-svn-src-all@FreeBSD.ORG Thu Jan 6 22:11:09 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 1233) id 542231065675; Thu, 6 Jan 2011 22:11:09 +0000 (UTC) Date: Thu, 6 Jan 2011 22:11:09 +0000 From: Alexander Best To: Konstantin Belousov Message-ID: <20110106221109.GA57588@freebsd.org> References: <201101041413.p04EDA4f038360@svn.freebsd.org> <20110106214947.GA53760@freebsd.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="FL5UXtIhxfXey3p5" Content-Disposition: inline In-Reply-To: <20110106214947.GA53760@freebsd.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r216955 - head/usr.sbin/rtprio X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 Jan 2011 22:11:09 -0000 --FL5UXtIhxfXey3p5 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Thu Jan 6 11, Alexander Best wrote: > On Tue Jan 4 11, Konstantin Belousov wrote: > > Author: kib > > Date: Tue Jan 4 14:13:09 2011 > > New Revision: 216955 > > URL: http://svn.freebsd.org/changeset/base/216955 > > > > Log: > > Make the parsing of the integer arguments for rtprio(1)/idprio(1) stricter. > > Style. > > here's a patch with some changes. you might want to cherry pick from it. ;) fixed a whitespace issue. thanks to gcooper@. > > cheers. > alex > > > > > Based on submission by: Eitan Adler , keramida > > Reviewed by: jhb, keramida > > MFC after: 1 week > > > > Modified: > > head/usr.sbin/rtprio/rtprio.c > > > > Modified: head/usr.sbin/rtprio/rtprio.c > > ============================================================================== > > --- head/usr.sbin/rtprio/rtprio.c Tue Jan 4 13:16:28 2011 (r216954) > > +++ head/usr.sbin/rtprio/rtprio.c Tue Jan 4 14:13:09 2011 (r216955) > > @@ -37,31 +37,31 @@ __FBSDID("$FreeBSD$"); > > > > #include > > #include > > -#include > > > > #include > > #include > > +#include > > #include > > #include > > #include > > #include > > > > -static void usage(); > > +static int parseint(const char *, const char *); > > +static void usage(void); > > > > int > > -main(argc, argv) > > - int argc; > > - char **argv; > > +main(int argc, char *argv[]) > > { > > - char *p; > > - int proc = 0; > > struct rtprio rtp; > > + char *p; > > + pid_t proc; > > > > /* find basename */ > > if ((p = rindex(argv[0], '/')) == NULL) > > p = argv[0]; > > else > > ++p; > > + proc = 0; > > > > if (!strcmp(p, "rtprio")) > > rtp.type = RTP_PRIO_REALTIME; > > @@ -70,12 +70,12 @@ main(argc, argv) > > > > switch (argc) { > > case 2: > > - proc = abs(atoi(argv[1])); /* Should check if numeric > > - * arg! */ > > + proc = parseint(argv[1], "pid"); > > + proc = abs(proc); > > /* FALLTHROUGH */ > > case 1: > > if (rtprio(RTP_LOOKUP, proc, &rtp) != 0) > > - err(1, "%s", argv[0]); > > + err(1, "RTP_LOOKUP"); > > printf("%s: ", p); > > switch (rtp.type) { > > case RTP_PRIO_REALTIME: > > @@ -103,19 +103,17 @@ main(argc, argv) > > usage(); > > break; > > } > > - } else { > > - rtp.prio = atoi(argv[1]); > > - } > > + } else > > + rtp.prio = parseint(argv[1], "priority"); > > } else { > > usage(); > > break; > > } > > > > if (argv[2][0] == '-') > > - proc = -atoi(argv[2]); > > - > > + proc = parseint(argv[2] + 1, "pid"); > > if (rtprio(RTP_SET, proc, &rtp) != 0) > > - err(1, "%s", argv[0]); > > + err(1, "RTP_SET"); > > > > if (proc == 0) { > > execvp(argv[2], &argv[2]); > > @@ -123,12 +121,28 @@ main(argc, argv) > > } > > exit(0); > > } > > - exit (1); > > + exit(1); > > +} > > + > > +static int > > +parseint(const char *str, const char *errname) > > +{ > > + char *endp; > > + long res; > > + > > + errno = 0; > > + res = strtol(str, &endp, 10); > > + if (errno != 0 || endp == str || *endp != '\0') > > + err(1, "%s must be a number", errname); > > + if (res >= INT_MAX) > > + err(1, "Integer overflow parsing %s", errname); > > + return (res); > > } > > > > static void > > -usage() > > +usage(void) > > { > > + > > (void) fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n", > > "usage: [id|rt]prio", > > " [id|rt]prio [-]pid", > > -- > a13x > diff --git a/usr.sbin/rtprio/rtprio.c b/usr.sbin/rtprio/rtprio.c > index 38dade8..e28eee8 100644 > --- a/usr.sbin/rtprio/rtprio.c > +++ b/usr.sbin/rtprio/rtprio.c > @@ -67,6 +67,8 @@ main(int argc, char *argv[]) > rtp.type = RTP_PRIO_REALTIME; > else if (!strcmp(p, "idprio")) > rtp.type = RTP_PRIO_IDLE; > + else > + errx(1, "invalid basename"); > > switch (argc) { > case 2: > @@ -76,20 +78,19 @@ main(int argc, char *argv[]) > case 1: > if (rtprio(RTP_LOOKUP, proc, &rtp) != 0) > err(1, "RTP_LOOKUP"); > - printf("%s: ", p); > switch (rtp.type) { > case RTP_PRIO_REALTIME: > case RTP_PRIO_FIFO: > - printf("realtime priority %d\n", rtp.prio); > + warnx("realtime priority %d", rtp.prio); > break; > case RTP_PRIO_NORMAL: > - printf("normal priority\n"); > + warnx("normal priority"); > break; > case RTP_PRIO_IDLE: > - printf("idle priority %d\n", rtp.prio); > + warnx("idle priority %d", rtp.prio); > break; > default: > - printf("invalid priority type %d\n", rtp.type); > + errx(1, "invalid priority type %d", rtp.type); > break; > } > exit(0); > @@ -110,18 +111,17 @@ main(int argc, char *argv[]) > break; > } > > - if (argv[2][0] == '-') > - proc = parseint(argv[2] + 1, "pid"); > - if (rtprio(RTP_SET, proc, &rtp) != 0) > - err(1, "RTP_SET"); > - > - if (proc == 0) { > + if (argv[2][0] == '-') { > + proc = parseint(argv[2], "pid"); > + proc = abs(proc); > + if (rtprio(RTP_SET, proc, &rtp) != 0) > + err(1, "RTP_SET"); > + } else { > execvp(argv[2], &argv[2]); > - err(1, "%s", argv[2]); > + err(1, "%s", argv[2]); > } > exit(0); > } > - exit(1); > } > > static int -- a13x --FL5UXtIhxfXey3p5 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="rtprio.diff3" diff --git a/usr.sbin/rtprio/rtprio.c b/usr.sbin/rtprio/rtprio.c index 38dade8..e15d346 100644 --- a/usr.sbin/rtprio/rtprio.c +++ b/usr.sbin/rtprio/rtprio.c @@ -67,6 +67,8 @@ main(int argc, char *argv[]) rtp.type = RTP_PRIO_REALTIME; else if (!strcmp(p, "idprio")) rtp.type = RTP_PRIO_IDLE; + else + errx(1, "invalid basename"); switch (argc) { case 2: @@ -76,20 +78,19 @@ main(int argc, char *argv[]) case 1: if (rtprio(RTP_LOOKUP, proc, &rtp) != 0) err(1, "RTP_LOOKUP"); - printf("%s: ", p); switch (rtp.type) { case RTP_PRIO_REALTIME: case RTP_PRIO_FIFO: - printf("realtime priority %d\n", rtp.prio); + warnx("realtime priority %d", rtp.prio); break; case RTP_PRIO_NORMAL: - printf("normal priority\n"); + warnx("normal priority"); break; case RTP_PRIO_IDLE: - printf("idle priority %d\n", rtp.prio); + warnx("idle priority %d", rtp.prio); break; default: - printf("invalid priority type %d\n", rtp.type); + errx(1, "invalid priority type %d", rtp.type); break; } exit(0); @@ -110,18 +111,17 @@ main(int argc, char *argv[]) break; } - if (argv[2][0] == '-') - proc = parseint(argv[2] + 1, "pid"); - if (rtprio(RTP_SET, proc, &rtp) != 0) - err(1, "RTP_SET"); - - if (proc == 0) { + if (argv[2][0] == '-') { + proc = parseint(argv[2], "pid"); + proc = abs(proc); + if (rtprio(RTP_SET, proc, &rtp) != 0) + err(1, "RTP_SET"); + } else { execvp(argv[2], &argv[2]); err(1, "%s", argv[2]); } exit(0); } - exit(1); } static int --FL5UXtIhxfXey3p5--