svn commit: r291451 - head/usr.bin/rctl
Edward Tomasz Napierala
trasz at FreeBSD.org
Sun Nov 29 12:33:57 UTC 2015
Author: trasz
Date: Sun Nov 29 12:33:56 2015
New Revision: 291451
URL: https://svnweb.freebsd.org/changeset/base/291451
Log:
Simplify rule retrieval and improve error handling.
MFC after: 1 month
Sponsored by: The FreeBSD Foundation
Modified:
head/usr.bin/rctl/rctl.c
Modified: head/usr.bin/rctl/rctl.c
==============================================================================
--- head/usr.bin/rctl/rctl.c Sun Nov 29 12:23:08 2015 (r291450)
+++ head/usr.bin/rctl/rctl.c Sun Nov 29 12:33:56 2015 (r291451)
@@ -387,20 +387,24 @@ show_limits(const char *filter, int hfla
char *outbuf = NULL;
size_t outbuflen = RCTL_DEFAULT_BUFSIZE / 4;
- do {
+ for (;;) {
outbuflen *= 4;
outbuf = realloc(outbuf, outbuflen);
if (outbuf == NULL)
err(1, "realloc");
+ error = rctl_get_limits(filter, strlen(filter) + 1,
+ outbuf, outbuflen);
+ if (error == 0)
+ break;
+ if (errno == ERANGE)
+ continue;
+ if (errno == ENOSYS)
+ enosys();
+ warn("rctl_get_limits");
+ free(outbuf);
- error = rctl_get_limits(filter, strlen(filter) + 1, outbuf,
- outbuflen);
- if (error && errno != ERANGE) {
- if (errno == ENOSYS)
- enosys();
- warn("rctl_get_limits");
- }
- } while (error && errno == ERANGE);
+ return (error);
+ }
print_rules(outbuf, hflag, nflag);
free(outbuf);
@@ -466,20 +470,24 @@ show_usage(const char *filter, int hflag
char *copy, *outbuf = NULL, *tmp;
size_t outbuflen = RCTL_DEFAULT_BUFSIZE / 4;
- do {
+ for (;;) {
outbuflen *= 4;
outbuf = realloc(outbuf, outbuflen);
if (outbuf == NULL)
err(1, "realloc");
+ error = rctl_get_racct(filter, strlen(filter) + 1,
+ outbuf, outbuflen);
+ if (error == 0)
+ break;
+ if (errno == ERANGE)
+ continue;
+ if (errno == ENOSYS)
+ enosys();
+ warn("rctl_get_racct");
+ free(outbuf);
- error = rctl_get_racct(filter, strlen(filter) + 1, outbuf,
- outbuflen);
- if (error && errno != ERANGE) {
- if (errno == ENOSYS)
- enosys();
- warn("rctl_get_racct");
- }
- } while (error && errno == ERANGE);
+ return (error);
+ }
copy = outbuf;
while ((tmp = strsep(©, ",")) != NULL) {
@@ -512,19 +520,23 @@ show_rules(const char *filter, int hflag
else
filterlen = 0;
- do {
+ for (;;) {
outbuflen *= 4;
outbuf = realloc(outbuf, outbuflen);
if (outbuf == NULL)
err(1, "realloc");
-
error = rctl_get_rules(filter, filterlen, outbuf, outbuflen);
- if (error && errno != ERANGE) {
- if (errno == ENOSYS)
- enosys();
- warn("rctl_get_rules");
- }
- } while (error && errno == ERANGE);
+ if (error == 0)
+ break;
+ if (errno == ERANGE)
+ continue;
+ if (errno == ENOSYS)
+ enosys();
+ warn("rctl_get_rules");
+ free(outbuf);
+
+ return (error);
+ }
print_rules(outbuf, hflag, nflag);
free(outbuf);
More information about the svn-src-head
mailing list