summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2005-01-03 18:59:04 +0000
committerrwatson <rwatson@FreeBSD.org>2005-01-03 18:59:04 +0000
commit2f28c551e1b7dfd0e591c9777600740eff3551d4 (patch)
treeb4bd214eb2c1030d88e87ceb50d9dfc656edd0ac /sbin
parent064653b217a3373de95a0378ad82df9645417d2e (diff)
downloadFreeBSD-src-2f28c551e1b7dfd0e591c9777600740eff3551d4.zip
FreeBSD-src-2f28c551e1b7dfd0e591c9777600740eff3551d4.tar.gz
The ffsinfo utility uses atol() to parse numeric values out of optarg
strings. This isn't necessarily a bug, but it can be slightly inconvenient, because atol() doesn't know how to parse hexadecimal or octal numbers and at least one of the options of ffsinfo(8) would be easier to use if it did. Changing atol() -> strtol() allows one to use hex masks for -l MASK, i.e.: orion:/a/freebsd/src/sbin/ffsinfo# ./ffsinfo -l 0x3ff / PR: 73110 Submitted by: keramida MFC after: 2 weeks
Diffstat (limited to 'sbin')
-rw-r--r--sbin/ffsinfo/ffsinfo.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/sbin/ffsinfo/ffsinfo.c b/sbin/ffsinfo/ffsinfo.c
index 3e3a8c2..e556be8 100644
--- a/sbin/ffsinfo/ffsinfo.c
+++ b/sbin/ffsinfo/ffsinfo.c
@@ -63,6 +63,7 @@ static const char rcsid[] =
#include <ctype.h>
#include <err.h>
+#include <errno.h>
#include <fcntl.h>
#include <libufs.h>
#include <paths.h>
@@ -148,19 +149,25 @@ main(int argc, char **argv)
while ((ch=getopt(argc, argv, "g:i:l:o:")) != -1) {
switch(ch) {
case 'g':
- cfg_cg=atol(optarg);
+ cfg_cg=strtol(optarg, NULL, 0);
+ if(errno == EINVAL||errno == ERANGE)
+ err(1, "%s", optarg);
if(cfg_cg < -1) {
usage();
}
break;
case 'i':
- cfg_in=atol(optarg);
+ cfg_in=strtol(optarg, NULL, 0);
+ if(errno == EINVAL||errno == ERANGE)
+ err(1, "%s", optarg);
if(cfg_in < 0) {
usage();
}
break;
case 'l':
- cfg_lv=atol(optarg);
+ cfg_lv=strtol(optarg, NULL, 0);
+ if(errno == EINVAL||errno == ERANGE)
+ err(1, "%s", optarg);
if(cfg_lv < 0x1||cfg_lv > 0x3ff) {
usage();
}
OpenPOWER on IntegriCloud