diff --git a/cstool/Makefile b/cstool/Makefile index 5410fa350..9b28e4323 100644 --- a/cstool/Makefile +++ b/cstool/Makefile @@ -28,7 +28,7 @@ endif all: $(TARGET) $(TARGET): ../$(LIBCAPSTONE) $(OBJECTS) -ifeq ($(V),0) +ifeq ($(V), 0) $(call log,LINK,$@) @${CC} $(OBJECTS) $(LDFLAGS) -o $@ else @@ -39,7 +39,7 @@ clean: ${RM} -rf *.o $(TARGET) %.o: %.c -ifeq ($(V),0) +ifeq ($(V), 0) $(call log,CC,$@) @${CC} $(CFLAGS) -c $< -o $@ else diff --git a/cstool/getopt.c b/cstool/getopt.c new file mode 100644 index 000000000..f4404c168 --- /dev/null +++ b/cstool/getopt.c @@ -0,0 +1,76 @@ +#include +#include + +#include "getopt.h" + +int opterr = 1, /* if error message should be printed */ +optind = 1, /* index into parent argv vector */ +optopt, /* character checked for validity */ +optreset; /* reset getopt */ +const char *optarg; /* argument associated with option */ + +#define BADCH (int)'?' +#define BADARG (int)':' +#define EMSG "" + +/* + * getopt -- + * Parse argc/argv argument vector. + */ +int getopt (int nargc, char * const nargv[], const char *ostr) +{ + static const char *place = EMSG; /* option letter processing */ + const char *oli; /* option letter list index */ + + if (optreset || !*place) { /* update scanning pointer */ + optreset = 0; + if (optind >= nargc || *(place = nargv[optind]) != '-') { + place = EMSG; + return (-1); + } + + if (place[1] && *++place == '-') { /* found "--" */ + ++optind; + place = EMSG; + return (-1); + } + } /* option letter okay? */ + + if ((optopt = (int)*place++) == (int)':' || + !(oli = strchr (ostr, optopt))) { + /* + * if the user didn't specify '-' as an option, + * assume it means -1. + */ + if (optopt == (int)'-') + return (-1); + if (!*place) + ++optind; + if (opterr && *ostr != ':') + (void)printf ("illegal option -- %c\n", optopt); + return (BADCH); + } + + if (*++oli != ':') { /* don't need argument */ + optarg = NULL; + if (!*place) + ++optind; + } else { /* need an argument */ + if (*place) /* no white space */ + optarg = place; + else if (nargc <= ++optind) { /* no arg */ + place = EMSG; + if (*ostr == ':') + return (BADARG); + if (opterr) + (void)printf ("option requires an argument -- %c\n", optopt); + return (BADCH); + } else /* white space */ + optarg = nargv[optind]; + place = EMSG; + ++optind; + } + + return optopt; /* dump back option letter */ +} + diff --git a/cstool/getopt.h b/cstool/getopt.h index 81af41059..bca36c172 100644 --- a/cstool/getopt.h +++ b/cstool/getopt.h @@ -1,73 +1,14 @@ -#include -#include +#ifndef CSTOOL_GETOPT_H +#define CSTOOL_GETOPT_H // global -int opterr = 1, /* if error message should be printed */ -optind = 1, /* index into parent argv vector */ +extern int opterr, /* if error message should be printed */ +optind, /* index into parent argv vector */ optopt, /* character checked for validity */ optreset; /* reset getopt */ -const char *optarg; /* argument associated with option */ -#define BADCH (int)'?' -#define BADARG (int)':' -#define EMSG "" +extern const char *optarg; /* argument associated with option */ -/* - * getopt -- - * Parse argc/argv argument vector. - */ -int -getopt (int nargc, char * const nargv[], const char *ostr) -{ - static const char *place = EMSG; /* option letter processing */ - const char *oli; /* option letter list index */ +int getopt (int nargc, char *const nargv[], const char *ostr); - if (optreset || !*place) { /* update scanning pointer */ - optreset = 0; - if (optind >= nargc || *(place = nargv[optind]) != '-') { - place = EMSG; - return (-1); - } - if (place[1] && *++place == '-') { /* found "--" */ - ++optind; - place = EMSG; - return (-1); - } - } /* option letter okay? */ - if ((optopt = (int)*place++) == (int)':' || - !(oli = strchr (ostr, optopt))) { - /* - * if the user didn't specify '-' as an option, - * assume it means -1. - */ - if (optopt == (int)'-') - return (-1); - if (!*place) - ++optind; - if (opterr && *ostr != ':') - (void)printf ("illegal option -- %c\n", optopt); - return (BADCH); - } - if (*++oli != ':') { /* don't need argument */ - optarg = NULL; - if (!*place) - ++optind; - } - else { /* need an argument */ - if (*place) /* no white space */ - optarg = place; - else if (nargc <= ++optind) { /* no arg */ - place = EMSG; - if (*ostr == ':') - return (BADARG); - if (opterr) - (void)printf ("option requires an argument -- %c\n", optopt); - return (BADCH); - } - else /* white space */ - optarg = nargv[optind]; - place = EMSG; - ++optind; - } - return optopt; /* dump back option letter */ -} +#endif