Define bb_xgetlarg as a standard interface for extracting numbers from getopt which includes careful error checking. -Erik
No binary (build failed)
—
(log yok)
| @@ -121,6 +121,7 @@ int recursive_action(const char *fileName, int recurse, int followLinks, int dep | |
| void* userData); | |
| extern int parse_mode( const char* s, mode_t* theMode); | |
| + | extern long bb_xgetlarg(char *arg, int base, long lower, long upper); |
| extern int get_kernel_revision(void); | |
| @@ -43,7 +43,7 @@ LIBBB_SRC:= \ | |
| setup_environment.c simplify_path.c syscalls.c syslog_msg_with_name.c \ | |
| time_string.c trim.c u_signal_names.c vdprintf.c verror_msg.c \ | |
| vherror_msg.c vperror_msg.c wfopen.c xconnect.c xgetcwd.c xfuncs.c \ | |
| - | xgethostbyname.c xgethostbyname2.c xreadlink.c xregcomp.c |
| + | xgethostbyname.c xgethostbyname2.c xreadlink.c xregcomp.c bb_xgetlarg.c |
| LIBBB_OBJS=$(patsubst %.c,$(LIBBB_DIR)%.o, $(LIBBB_SRC)) | |
| @@ -0,0 +1,28 @@ | |
| + | /* vi: set sw=4 ts=4: */ |
| + | /* |
| + | * Copyright (C) 2003 Erik Andersen <[email protected]> |
| + | */ |
| + | |
| + | |
| + | #include <stdio.h> |
| + | #include <stdlib.h> |
| + | #include <getopt.h> |
| + | #include <errno.h> |
| + | #include <assert.h> |
| + | |
| + | #include "busybox.h" |
| + | |
| + | extern long bb_xgetlarg(char *arg, int base, long lower, long upper) |
| + | { |
| + | long result; |
| + | char *endptr; |
| + | int errno_save = errno; |
| + | |
| + | assert(arg!=NULL); |
| + | errno = 0; |
| + | result = strtol(arg, &endptr, base); |
| + | if (errno != 0 || *endptr!='\0' || result < lower || result > upper) |
| + | show_usage(); |
| + | errno = errno_save; |
| + | return result; |
| + | } |