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
This commit is contained in:
parent
93f4f5a560
commit
7bb84191e6
@ -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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user