diff options
author | Mystery Man <unknown@mandriva.org> | 2004-06-15 16:50:22 +0000 |
---|---|---|
committer | Mystery Man <unknown@mandriva.org> | 2004-06-15 16:50:22 +0000 |
commit | 8ea9beca90c410e12593fedfb6e741dbdf8795d0 (patch) | |
tree | 544a377d0ea57462110009fbbbfd14473390e2a1 /mdk-stage1/dietlibc/libcruft/getopt_long_only.c | |
parent | b5dc638815c772056e07cd013f5b1674900456d5 (diff) | |
download | drakx-topic/mandrakesoft.tar drakx-topic/mandrakesoft.tar.gz drakx-topic/mandrakesoft.tar.bz2 drakx-topic/mandrakesoft.tar.xz drakx-topic/mandrakesoft.zip |
This commit was manufactured by cvs2svn to create branch 'mandrakesoft'.topic/mandrakesoft
Diffstat (limited to 'mdk-stage1/dietlibc/libcruft/getopt_long_only.c')
-rw-r--r-- | mdk-stage1/dietlibc/libcruft/getopt_long_only.c | 108 |
1 files changed, 0 insertions, 108 deletions
diff --git a/mdk-stage1/dietlibc/libcruft/getopt_long_only.c b/mdk-stage1/dietlibc/libcruft/getopt_long_only.c deleted file mode 100644 index f12f9f184..000000000 --- a/mdk-stage1/dietlibc/libcruft/getopt_long_only.c +++ /dev/null @@ -1,108 +0,0 @@ -#include <string.h> -#include <getopt.h> - -static void getopterror(int which) { - static char error1[]="Unknown option `-x'.\n"; - static char error2[]="Missing argument for `-x'.\n"; - if (opterr) { - if (which) { - error2[23]=optopt; - write(2,error2,28); - } else { - error1[17]=optopt; - write(2,error1,22); - } - } -} - -int getopt_long_only(int argc, char * const argv[], const char *optstring, - const struct option *longopts, int *longindex) { - static int lastidx=0,lastofs=0; - char *tmp,*arg; - if (optind==0) optind=1; /* whoever started setting optind to 0 should be shot */ -again: - if (optind>argc || !argv[optind] || *argv[optind]!='-' || argv[optind][1]==0) - return -1; - if (argv[optind][1]=='-' && argv[optind][2]==0) { - ++optind; - return -1; - } - if (argv[optind][1]=='-') - arg=argv[optind]+2; - else - arg=argv[optind]+1; - { - char* max=strchr(arg,'='); - const struct option* o; - if (!max) max=arg+strlen(arg); - for (o=longopts; o->name; ++o) { - if (!strncmp(o->name,arg,(size_t)(max-arg))) { /* match */ - if (longindex) *longindex=o-longopts; - if (o->has_arg>0) { - if (*max=='=') - optarg=max+1; - else { - optarg=argv[optind+1]; - if (!optarg && o->has_arg==1) { /* no argument there */ - if (*optstring==':') return ':'; - write(2,"argument required: `",20); - write(2,arg,(size_t)(max-arg)); - write(2,"'.\n",3); - ++optind; - return '?'; - } - ++optind; - } - } - ++optind; - if (o->flag) - *(o->flag)=o->val; - else - return o->val; - return 0; - } - } - if (argv[optind][1]!='-') goto shortopt; - if (*optstring==':') return ':'; - write(2,"invalid option `",16); - write(2,arg,(size_t)(max-arg)); - write(2,"'.\n",3); - ++optind; - return '?'; - } -shortopt: - if (lastidx!=optind) { - lastidx=optind; lastofs=0; - } - optopt=argv[optind][lastofs+1]; - if ((tmp=strchr(optstring,optopt))) { - if (*tmp==0) { /* apparently, we looked for \0, i.e. end of argument */ - ++optind; - goto again; - } - if (tmp[1]==':') { /* argument expected */ - if (tmp[2]==':' || argv[optind][lastofs+2]) { /* "-foo", return "oo" as optarg */ - if (!*(optarg=argv[optind]+lastofs+2)) optarg=0; - goto found; - } - optarg=argv[optind+1]; - if (!optarg) { /* missing argument */ - ++optind; - if (*optstring==':') return ':'; - getopterror(1); - return ':'; - } - ++optind; - } else { - ++lastofs; - return optopt; - } -found: - ++optind; - return optopt; - } else { /* not found */ - getopterror(0); - ++optind; - return '?'; - } -} |