svn commit: r216955 - head/usr.sbin/rtprio
Alexander Best
arundel at freebsd.org
Thu Jan 6 22:11:09 UTC 2011
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 at .
>
> cheers.
> alex
>
> >
> > Based on submission by: Eitan Adler <lists eitanadler com>, 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 <sys/param.h>
> > #include <sys/rtprio.h>
> > -#include <sys/errno.h>
> >
> > #include <ctype.h>
> > #include <err.h>
> > +#include <errno.h>
> > #include <stdio.h>
> > #include <stdlib.h>
> > #include <string.h>
> > #include <unistd.h>
> >
> > -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
-------------- next part --------------
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
More information about the svn-src-head
mailing list