Blame dwarfdump/getopttest.c

Packit cdaae3
/* This is for testing the local getopt. */
Packit cdaae3
Packit cdaae3
Packit cdaae3
#ifdef GETOPT_FROM_SYSTEM
Packit cdaae3
#define dwgetopt  getopt
Packit cdaae3
#define dwopterr  opterr
Packit cdaae3
#define dwoptind  optind
Packit cdaae3
#define dwoptopt  optopt
Packit cdaae3
#define dwopterr  opterr
Packit cdaae3
#define dwoptarg  optarg
Packit cdaae3
Packit cdaae3
#define dwno_argument  no_argument
Packit cdaae3
#define dwrequired_argument  required_argument
Packit cdaae3
#define dwoptional_argument  optional_argument
Packit cdaae3
#endif
Packit cdaae3
Packit cdaae3
#include <stdio.h>
Packit cdaae3
#include <stdlib.h>
Packit cdaae3
#include <string.h> /* for strcmp */
Packit cdaae3
#include "dwgetopt.h" /* for dwgetopt */
Packit cdaae3
char *argv1[20];
Packit cdaae3
Packit cdaae3
/*  Use for testing dwgetopt only.
Packit cdaae3
    Not a standard function. */
Packit cdaae3
static void
Packit cdaae3
dwgetoptresetfortestingonly(void)
Packit cdaae3
{
Packit cdaae3
   dwopterr   = 1;
Packit cdaae3
   dwoptind   = 1;
Packit cdaae3
   dwoptopt   = 0;
Packit cdaae3
   dwoptreset = 0;
Packit cdaae3
   dwoptarg   = 0;
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
Packit cdaae3
Packit cdaae3
/* for rchar read the real int/char returned.
Packit cdaae3
   for xchar read the expected int/char.
Packit cdaae3
Packit cdaae3
   for roptarg, read dwoptarg (the real optarg val),
Packit cdaae3
   for xoptarg read expected-optarg
Packit cdaae3
Packit cdaae3
   for roptind read dwoptind,
Packit cdaae3
   for xoptind read expected-optind
Packit cdaae3
*/
Packit cdaae3
static void
Packit cdaae3
chkval(int ct,
Packit cdaae3
    int rchar,int xchar,
Packit cdaae3
    char *roptarg,char *xoptarg,
Packit cdaae3
    int roptind,int xoptind,
Packit cdaae3
    const char *testid)
Packit cdaae3
{
Packit cdaae3
    int err = 0;
Packit cdaae3
    if (rchar != xchar) {
Packit cdaae3
        err++;
Packit cdaae3
        printf("Mismatch %d %s: got char %c 0x%x exp char %c 0x%x\n",
Packit cdaae3
            ct,testid,rchar,rchar,xchar,xchar);
Packit cdaae3
    }
Packit cdaae3
    if (roptarg != xoptarg) {
Packit cdaae3
        /* pointers non-match */
Packit cdaae3
        if (roptarg && xoptarg && (!strcmp(roptarg,xoptarg))) {
Packit cdaae3
            /* strings match. */
Packit cdaae3
        } else {
Packit cdaae3
            err++;
Packit cdaae3
            printf("Mismatch %d %s: got dwoptarg %s 0x%lx exp optarg %s 0x%lx\n",
Packit cdaae3
                ct,testid,
Packit cdaae3
                roptarg?roptarg:"",
Packit cdaae3
                (unsigned long)roptarg,
Packit cdaae3
                xoptarg?xoptarg:"",
Packit cdaae3
                (unsigned long)xoptarg);
Packit cdaae3
        }
Packit cdaae3
    }
Packit cdaae3
    if (roptind != xoptind) {
Packit cdaae3
        err++;
Packit cdaae3
        printf("Mismatch %d %s: got dwoptind %d 0x%x exp optind %d 0x%x\n",
Packit cdaae3
            ct,testid,roptind,roptind,xoptind,xoptind);
Packit cdaae3
    }
Packit cdaae3
    if (err > 0) {
Packit cdaae3
        printf("FAIL getopttest %s\n",testid);
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
static int
Packit cdaae3
test3(void)
Packit cdaae3
{
Packit cdaae3
    int ct = 1;
Packit cdaae3
    int c = 0;
Packit cdaae3
    int argct = 8;
Packit cdaae3
    argv1[0]="a.out";
Packit cdaae3
    argv1[1]="-a";
Packit cdaae3
    argv1[2]="-#bx";
Packit cdaae3
    argv1[3]="-b";
Packit cdaae3
    argv1[4]="-c";
Packit cdaae3
    argv1[5]="-cfoo";
Packit cdaae3
    argv1[6]="-d";
Packit cdaae3
    argv1[7]="progtoread";
Packit cdaae3
    argv1[8]=0;
Packit cdaae3
    for ( ;(c = dwgetopt(argct, argv1, "#:abc::d")) != EOF; ct++) {
Packit cdaae3
    switch(ct) {
Packit cdaae3
    case 1:
Packit cdaae3
        chkval(ct,c,'a',dwoptarg,0,dwoptind,2,"test31");
Packit cdaae3
        break;
Packit cdaae3
    case 2:
Packit cdaae3
        chkval(ct,c,'#',dwoptarg,"bx",dwoptind,3,"test32");
Packit cdaae3
        break;
Packit cdaae3
    case 3:
Packit cdaae3
        chkval(ct,c,'b',dwoptarg,0,dwoptind,4,"test33");
Packit cdaae3
        break;
Packit cdaae3
    case 4:
Packit cdaae3
        chkval(ct,c,'c',dwoptarg,0,dwoptind,5,"test34");
Packit cdaae3
        break;
Packit cdaae3
    case 5:
Packit cdaae3
        chkval(ct,c,'c',dwoptarg,"foo",dwoptind,6,"test35");
Packit cdaae3
        break;
Packit cdaae3
    case 6:
Packit cdaae3
        chkval(ct,c,'d',dwoptarg,0,dwoptind,7,"test36");
Packit cdaae3
        break;
Packit cdaae3
    case 7:
Packit cdaae3
    case 8:
Packit cdaae3
    case 9:
Packit cdaae3
    case 10:
Packit cdaae3
    case 11:
Packit cdaae3
    default:
Packit cdaae3
        printf("FAIL test3 unexpected ct %d\n",ct);
Packit cdaae3
    }
Packit cdaae3
    }
Packit cdaae3
#if 0
Packit cdaae3
    printf(" final check: ct %d dwoptind %d\n",ct,optind);
Packit cdaae3
#endif
Packit cdaae3
    if (strcmp(argv1[dwoptind],"progtoread")) {
Packit cdaae3
        printf("FAIL test3 on non-dash dwoptind %d arg got %s exp %s\n",
Packit cdaae3
            dwoptind,argv1[dwoptind],"progtoread");
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    printf("PASS getopt test 3\n");
Packit cdaae3
    return 0;
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
Packit cdaae3
static int
Packit cdaae3
test2(void)
Packit cdaae3
{
Packit cdaae3
    int ct = 1;
Packit cdaae3
    int c = 0;
Packit cdaae3
    int argct = 5;
Packit cdaae3
    argv1[0]="a.out";
Packit cdaae3
    argv1[1]="-a";
Packit cdaae3
    argv1[2]="-#pound";
Packit cdaae3
    argv1[3]="-b";
Packit cdaae3
    argv1[4]="-cfilename";
Packit cdaae3
    argv1[5]=0;
Packit cdaae3
    for ( ;(c = dwgetopt(argct, argv1,
Packit cdaae3
        "#:abc::")) != EOF; ct++) {
Packit cdaae3
    switch(ct) {
Packit cdaae3
    case 1:
Packit cdaae3
        chkval(ct,c,'a',dwoptarg,0,dwoptind,2,"test21");
Packit cdaae3
        break;
Packit cdaae3
    case 2:
Packit cdaae3
        chkval(ct,c,'#',dwoptarg,"pound",dwoptind,3,"test22");
Packit cdaae3
        break;
Packit cdaae3
        break;
Packit cdaae3
    case 3:
Packit cdaae3
        chkval(ct,c,'b',dwoptarg,0,dwoptind,4,"test23");
Packit cdaae3
        break;
Packit cdaae3
    case 4:
Packit cdaae3
        chkval(ct,c,'c',dwoptarg,"filename",dwoptind,5,"test24");
Packit cdaae3
        break;
Packit cdaae3
    default:
Packit cdaae3
        printf("FAIL test2 unexpected ct %d\n",ct);
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    }
Packit cdaae3
#if 0
Packit cdaae3
    printf(" final check: ct %d dwoptind %d\n",ct,optind);
Packit cdaae3
#endif
Packit cdaae3
    if (argv1[dwoptind]) {
Packit cdaae3
        printf("FAIL test2 on non-dash arg dwoptind %d got 0x%lx exp NULL\n",
Packit cdaae3
            dwoptind,(unsigned long)argv1[dwoptind]);
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    printf("PASS getopt test 2\n");
Packit cdaae3
    return 0;
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
Packit cdaae3
Packit cdaae3
static void chklongval(int ct,
Packit cdaae3
    int rchar,int xchar,
Packit cdaae3
    const char *xoptname,
Packit cdaae3
    struct dwoption *ropt, struct dwoption *xopt,
Packit cdaae3
    char *roptarg,char *xoptarg,
Packit cdaae3
    int roptind,int xoptind,
Packit cdaae3
    const char *testid)
Packit cdaae3
{
Packit cdaae3
    int err = 0;
Packit cdaae3
    if(xopt != ropt || strcmp(ropt->name,xopt->name)) {
Packit cdaae3
        printf("FAIL name check %s: long opt %s vs %s %s\n",
Packit cdaae3
            xoptname,
Packit cdaae3
            ropt->name,xopt->name,
Packit cdaae3
            testid);
Packit cdaae3
        ++err;
Packit cdaae3
    }
Packit cdaae3
    if (roptarg != xoptarg &&
Packit cdaae3
        (!roptarg || !xoptarg || strcmp(roptarg,xoptarg))) {
Packit cdaae3
        printf("FAIL argument check %s: long opt %s vs %s %s\n",
Packit cdaae3
            xoptname,
Packit cdaae3
            roptarg?roptarg:"",xoptarg?xoptarg:"",
Packit cdaae3
            testid);
Packit cdaae3
        ++err;
Packit cdaae3
    }
Packit cdaae3
    if (roptind != xoptind) {
Packit cdaae3
        printf("FAIL optind check %s: long opt %d vs %d %s\n",
Packit cdaae3
            xoptname,
Packit cdaae3
            roptind,xoptind,
Packit cdaae3
            testid);
Packit cdaae3
        ++err;
Packit cdaae3
    }
Packit cdaae3
Packit cdaae3
    if (err > 0) {
Packit cdaae3
        printf("FAIL long getopttest %s\n",testid);
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
Packit cdaae3
static int
Packit cdaae3
ltest1(void)
Packit cdaae3
{
Packit cdaae3
    int ct = 1;
Packit cdaae3
    int c = 0;
Packit cdaae3
    int argct = 13;
Packit cdaae3
    argv1[0]="a.out";
Packit cdaae3
    argv1[1]="-ab";
Packit cdaae3
    argv1[2] = "--simplelong";
Packit cdaae3
    argv1[3] = "--optarglong";
Packit cdaae3
    argv1[4] = "--requireoptarglong=val";
Packit cdaae3
    argv1[5] = "-cd";
Packit cdaae3
    argv1[6]="progtoread";
Packit cdaae3
    argv1[7]=0;
Packit cdaae3
    static struct dwoption  longopts[] =  {
Packit cdaae3
        {"simplelong",       dwno_argument,      0,0},
Packit cdaae3
        {"optarglong",       dwoptional_argument,0,0},
Packit cdaae3
        {"requireoptarglong",dwrequired_argument,0,0},
Packit cdaae3
        {0,0,0,0}
Packit cdaae3
    };
Packit cdaae3
    int longindex = 0;
Packit cdaae3
Packit cdaae3
    for ( ;(c = dwgetopt_long(argct, argv1,
Packit cdaae3
        "abcd",
Packit cdaae3
        longopts,&longindex)) != EOF; ct++) {
Packit cdaae3
    switch(ct) {
Packit cdaae3
    case 1:
Packit cdaae3
        chkval(ct,c,'a',dwoptarg,0,dwoptind,1,"ltest12");
Packit cdaae3
        break;
Packit cdaae3
    case 2:
Packit cdaae3
        chkval(ct,c,'b',dwoptarg,0,dwoptind,2,"ltest2");
Packit cdaae3
        break;
Packit cdaae3
Packit cdaae3
    case 3: {
Packit cdaae3
        struct dwoption * foundop = longopts + longindex;
Packit cdaae3
        chklongval(ct,c,0,
Packit cdaae3
            "simplelong",
Packit cdaae3
            foundop,longopts+0,
Packit cdaae3
            dwoptarg,0,
Packit cdaae3
            dwoptind,3,"ltest3");
Packit cdaae3
        }
Packit cdaae3
        break;
Packit cdaae3
    case 4: {
Packit cdaae3
        struct dwoption * foundop = longopts + longindex;
Packit cdaae3
        chklongval(ct,c,0,
Packit cdaae3
            "optarglong",
Packit cdaae3
            foundop,longopts+1,
Packit cdaae3
            dwoptarg,0,
Packit cdaae3
            dwoptind,4,"ltest4");
Packit cdaae3
        }
Packit cdaae3
        break;
Packit cdaae3
    case 5: {
Packit cdaae3
        struct dwoption * foundop = longopts + longindex;
Packit cdaae3
        chklongval(ct,c,0,
Packit cdaae3
            "requireoptarglong",
Packit cdaae3
            foundop,longopts+2,
Packit cdaae3
            dwoptarg,"val",
Packit cdaae3
            dwoptind,5,"ltest5");
Packit cdaae3
        }
Packit cdaae3
        break;
Packit cdaae3
Packit cdaae3
    case 6:
Packit cdaae3
        chkval(ct,c,'c',dwoptarg,0,dwoptind,5,"ltest6");
Packit cdaae3
        break;
Packit cdaae3
    case 7:
Packit cdaae3
        chkval(ct,c,'d',dwoptarg,0,dwoptind,6,"ltest7");
Packit cdaae3
        break;
Packit cdaae3
Packit cdaae3
Packit cdaae3
    default:
Packit cdaae3
        printf("FAIL ltest1 unexpected ct %d in ltest1\n",ct);
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    }
Packit cdaae3
#if 0
Packit cdaae3
    printf(" final check: ct %d dwoptind %d\n",ct,optind);
Packit cdaae3
#endif
Packit cdaae3
    if (strcmp(argv1[dwoptind],"progtoread")) {
Packit cdaae3
        printf("FAIL ltest1 on non-dash arg dwoptind %d got %s exp %s\n",
Packit cdaae3
            dwoptind,argv1[dwoptind],"progtoread");
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    printf("PASS getopt ltest1\n");
Packit cdaae3
    return 0;
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
static int
Packit cdaae3
ltest2(void)
Packit cdaae3
{
Packit cdaae3
    int ct = 1;
Packit cdaae3
    int c = 0;
Packit cdaae3
    int argct = 13;
Packit cdaae3
    argv1[0]="a.out";
Packit cdaae3
    argv1[1]="-ab";
Packit cdaae3
    argv1[2] = "--optarglong";
Packit cdaae3
    argv1[3] = "--optarglong=";
Packit cdaae3
    argv1[4] = "--optarglong=val";
Packit cdaae3
    argv1[5] = "-cd";
Packit cdaae3
    argv1[6]="progtoread";
Packit cdaae3
    argv1[7]=0;
Packit cdaae3
    static struct dwoption  longopts[] =  {
Packit cdaae3
        {"optarglong",       dwoptional_argument,0,0},
Packit cdaae3
        {0,0,0,0}
Packit cdaae3
    };
Packit cdaae3
    int longindex = 0;
Packit cdaae3
Packit cdaae3
    for ( ;(c = dwgetopt_long(argct, argv1,
Packit cdaae3
        "abcd",
Packit cdaae3
        longopts,&longindex)) != EOF; ct++) {
Packit cdaae3
    switch(ct) {
Packit cdaae3
    case 1:
Packit cdaae3
        chkval(ct,c,'a',dwoptarg,0,dwoptind,1,"ltest21");
Packit cdaae3
        break;
Packit cdaae3
    case 2:
Packit cdaae3
        chkval(ct,c,'b',dwoptarg,0,dwoptind,2,"ltest22");
Packit cdaae3
        break;
Packit cdaae3
Packit cdaae3
    case 3: {
Packit cdaae3
        struct dwoption * foundop = longopts + longindex;
Packit cdaae3
        chklongval(ct,c,0,
Packit cdaae3
            "optarglong",
Packit cdaae3
            foundop,longopts+0,
Packit cdaae3
            dwoptarg,0,
Packit cdaae3
            dwoptind,3,"ltest23");
Packit cdaae3
        }
Packit cdaae3
        break;
Packit cdaae3
    case 4: {
Packit cdaae3
        struct dwoption * foundop = longopts + longindex;
Packit cdaae3
        chklongval(ct,c,0,
Packit cdaae3
            "optarglong",
Packit cdaae3
            foundop,longopts+0,
Packit cdaae3
            dwoptarg,0,
Packit cdaae3
            dwoptind,4,"ltest24");
Packit cdaae3
        }
Packit cdaae3
        break;
Packit cdaae3
    case 5: {
Packit cdaae3
        struct dwoption * foundop = longopts + longindex;
Packit cdaae3
        chklongval(ct,c,0,
Packit cdaae3
            "optarglong",
Packit cdaae3
            foundop,longopts+0,
Packit cdaae3
            dwoptarg,"val",
Packit cdaae3
            dwoptind,5,"ltest25");
Packit cdaae3
        }
Packit cdaae3
        break;
Packit cdaae3
Packit cdaae3
    case 6:
Packit cdaae3
        chkval(ct,c,'c',dwoptarg,0,dwoptind,5,"ltest26");
Packit cdaae3
        break;
Packit cdaae3
    case 7:
Packit cdaae3
        chkval(ct,c,'d',dwoptarg,0,dwoptind,6,"ltest27");
Packit cdaae3
        break;
Packit cdaae3
Packit cdaae3
Packit cdaae3
    default:
Packit cdaae3
        printf("FAIL ltest1 unexpected ct %d in ltest2\n",ct);
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    }
Packit cdaae3
#if 0
Packit cdaae3
    printf(" final check: ct %d dwoptind %d\n",ct,optind);
Packit cdaae3
#endif
Packit cdaae3
    if (strcmp(argv1[dwoptind],"progtoread")) {
Packit cdaae3
        printf("FAIL ltest2 on non-dash arg dwoptind %d got %s exp %s\n",
Packit cdaae3
            dwoptind,argv1[dwoptind],"progtoread");
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    printf("PASS getopt ltest2\n");
Packit cdaae3
    return 0;
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
Packit cdaae3
static int
Packit cdaae3
test1(void)
Packit cdaae3
{
Packit cdaae3
    int ct = 1;
Packit cdaae3
    int c = 0;
Packit cdaae3
    int argct = 13;
Packit cdaae3
    argv1[0]="a.out";
Packit cdaae3
    argv1[1]="-a";
Packit cdaae3
    argv1[2]="-#";
Packit cdaae3
    argv1[3]="6";
Packit cdaae3
    argv1[4]="-H1";
Packit cdaae3
    argv1[5]="-H";
Packit cdaae3
    argv1[6]="2";
Packit cdaae3
    argv1[7]="-ka";
Packit cdaae3
    argv1[8]="-l";
Packit cdaae3
    argv1[9]="-lv";
Packit cdaae3
    argv1[10]="-x";
Packit cdaae3
    argv1[11]="path=./foo";
Packit cdaae3
    argv1[12]="progtoread";
Packit cdaae3
    argv1[13]=0;
Packit cdaae3
    for ( ;(c = dwgetopt(argct, argv1,
Packit cdaae3
        "#:abc::CdDeE::fFgGhH:iIk:l::mMnNo::O:pPqQrRsS:t:u:UvVwW::x:yz"))
Packit cdaae3
        != EOF; ct++) {
Packit cdaae3
    switch(ct) {
Packit cdaae3
    case 1:
Packit cdaae3
        chkval(ct,c,'a',dwoptarg,0,dwoptind,2,"test11");
Packit cdaae3
        break;
Packit cdaae3
    case 2:
Packit cdaae3
        chkval(ct,c,'#',dwoptarg,"6",dwoptind,4,"test12");
Packit cdaae3
        break;
Packit cdaae3
    case 3:
Packit cdaae3
        chkval(ct,c,'H',dwoptarg,"1",dwoptind,5,"test13");
Packit cdaae3
        break;
Packit cdaae3
    case 4:
Packit cdaae3
        chkval(ct,c,'H',dwoptarg,"2",dwoptind,7,"test14");
Packit cdaae3
        break;
Packit cdaae3
    case 5:
Packit cdaae3
        chkval(ct,c,'k',dwoptarg,"a",dwoptind,8,"test15");
Packit cdaae3
        break;
Packit cdaae3
    case 6:
Packit cdaae3
        chkval(ct,c,'l',dwoptarg,0,dwoptind,9,"test16");
Packit cdaae3
        break;
Packit cdaae3
    case 7:
Packit cdaae3
        chkval(ct,c,'l',dwoptarg,"v",dwoptind,10,"test17");
Packit cdaae3
        break;
Packit cdaae3
    case 8:
Packit cdaae3
        chkval(ct,c,'x',dwoptarg,"path=./foo",dwoptind,12,"test18");
Packit cdaae3
        break;
Packit cdaae3
    default:
Packit cdaae3
        printf("FAIL test1 unexpected ct %d in test1\n",ct);
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    }
Packit cdaae3
#if 0
Packit cdaae3
    printf(" final check: ct %d dwoptind %d\n",ct,optind);
Packit cdaae3
#endif
Packit cdaae3
    if (strcmp(argv1[dwoptind],"progtoread")) {
Packit cdaae3
        printf("FAIL test1 on non-dash arg dwoptind %d got %s exp %s\n",
Packit cdaae3
            dwoptind,argv1[dwoptind],"progtoread");
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    printf("PASS getopt test1\n");
Packit cdaae3
    return 0;
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
static int
Packit cdaae3
test5(void)
Packit cdaae3
{
Packit cdaae3
    int ct = 1;
Packit cdaae3
    int c = 0;
Packit cdaae3
    int argct = 8;
Packit cdaae3
    argv1[0]="a.out";
Packit cdaae3
    argv1[1]="-ab";
Packit cdaae3
    argv1[2]="-a";
Packit cdaae3
    argv1[3]="-cx";
Packit cdaae3
    argv1[4]="-c";
Packit cdaae3
    argv1[5]="y";
Packit cdaae3
    argv1[6]="-d";
Packit cdaae3
    argv1[7]="-da";
Packit cdaae3
    argv1[8]=0;
Packit cdaae3
    for ( ;(c = dwgetopt(argct, argv1, "abc:d::")) != EOF; ct++) {
Packit cdaae3
    switch(ct) {
Packit cdaae3
    case 1:
Packit cdaae3
        chkval(ct,c,'a',dwoptarg,0,dwoptind,1,"test51");
Packit cdaae3
        break;
Packit cdaae3
    case 2:
Packit cdaae3
        chkval(ct,c,'b',dwoptarg,0,dwoptind,2,"test52");
Packit cdaae3
        break;
Packit cdaae3
    case 3:
Packit cdaae3
        chkval(ct,c,'a',dwoptarg,0,dwoptind,3,"test53");
Packit cdaae3
        break;
Packit cdaae3
    case 4:
Packit cdaae3
        chkval(ct,c,'c',dwoptarg,"x",dwoptind,4,"test54");
Packit cdaae3
        break;
Packit cdaae3
    case 5:
Packit cdaae3
        chkval(ct,c,'c',dwoptarg,"y",dwoptind,6,"test55");
Packit cdaae3
        break;
Packit cdaae3
    case 6:
Packit cdaae3
        chkval(ct,c,'d',dwoptarg,0,dwoptind,7,"test56");
Packit cdaae3
        break;
Packit cdaae3
    case 7:
Packit cdaae3
        chkval(ct,c,'d',dwoptarg,"a",dwoptind,8,"test17");
Packit cdaae3
        break;
Packit cdaae3
    default:
Packit cdaae3
        printf("FAIL test5 unexpected ct %d in test1 char 0x%x %c\n",ct,c,c);
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    }
Packit cdaae3
#if 0
Packit cdaae3
    printf(" final check: ct %d dwoptind %d\n",ct,optind);
Packit cdaae3
#endif
Packit cdaae3
    if (argv1[dwoptind]) {
Packit cdaae3
        printf("FAIL test5 there is a non-dash arg dwoptind %d got 0x%lx\n",
Packit cdaae3
            dwoptind,(unsigned long)argv1[dwoptind]);
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    printf("PASS getopt test5\n");
Packit cdaae3
    return 0;
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
static int
Packit cdaae3
test6(void)
Packit cdaae3
{
Packit cdaae3
    int ct = 1;
Packit cdaae3
    int c = 0;
Packit cdaae3
    int argct = 2;
Packit cdaae3
    argv1[0]="a.out";
Packit cdaae3
    argv1[1]="-H";
Packit cdaae3
    argv1[2]=0;
Packit cdaae3
    for ( ;(c = dwgetopt(argct, argv1, "abH:d::")) != EOF; ct++) {
Packit cdaae3
    switch(ct) {
Packit cdaae3
    case 1:
Packit cdaae3
        chkval(ct,c,'?',dwoptarg,0,dwoptind,2,"test61");
Packit cdaae3
        break;
Packit cdaae3
    default:
Packit cdaae3
        printf("FAIL test5 unexpected ct %d in test1 char 0x%x %c\n",ct,c,c);
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    }
Packit cdaae3
    if (argv1[dwoptind]) {
Packit cdaae3
        printf("FAIL test6 there is a non-dash arg dwoptind %d got 0x%lx\n",
Packit cdaae3
            dwoptind,(unsigned long)argv1[dwoptind]);
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    printf("PASS getopt test6\n");
Packit cdaae3
    return 0;
Packit cdaae3
}
Packit cdaae3
/*  Leading : in opt string */
Packit cdaae3
static int
Packit cdaae3
test7(void)
Packit cdaae3
{
Packit cdaae3
    int ct = 1;
Packit cdaae3
    int c = 0;
Packit cdaae3
    int argct = 2;
Packit cdaae3
    argv1[0]="a.out";
Packit cdaae3
    argv1[1]="-H";
Packit cdaae3
    argv1[2]=0;
Packit cdaae3
    for ( ;(c = dwgetopt(argct, argv1, ":abH:d::")) != EOF; ct++) {
Packit cdaae3
    switch(ct) {
Packit cdaae3
    case 1:
Packit cdaae3
        chkval(ct,c,':',dwoptarg,0,dwoptind,2,"test71");
Packit cdaae3
        break;
Packit cdaae3
    default:
Packit cdaae3
        printf("FAIL test5 unexpected ct %d in test1 char 0x%x %c\n",ct,c,c);
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    }
Packit cdaae3
    if (argv1[dwoptind]) {
Packit cdaae3
        printf("FAIL test7 there is a non-dash arg dwoptind %d got 0x%lx\n",
Packit cdaae3
            dwoptind,(unsigned long)argv1[dwoptind]);
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    printf("PASS getopt test7\n");
Packit cdaae3
    return 0;
Packit cdaae3
}
Packit cdaae3
static int
Packit cdaae3
test8(void)
Packit cdaae3
{
Packit cdaae3
    int ct = 1;
Packit cdaae3
    int c = 0;
Packit cdaae3
    int argct = 2;
Packit cdaae3
    argv1[0]="a.out";
Packit cdaae3
    argv1[1]="-x";
Packit cdaae3
    argv1[2]=0;
Packit cdaae3
    /*  We expect a ? because the arg list is improper. */
Packit cdaae3
    for ( ;(c = dwgetopt(argct, argv1, "abH:d::")) != EOF; ct++) {
Packit cdaae3
    switch(ct) {
Packit cdaae3
    case 1:
Packit cdaae3
        chkval(ct,c,'?',dwoptarg,0,dwoptind,2,"test81");
Packit cdaae3
        break;
Packit cdaae3
    default:
Packit cdaae3
        printf("FAIL test5 unexpected ct %d in test1 char 0x%x %c\n",ct,c,c);
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    }
Packit cdaae3
    if (argv1[dwoptind]) {
Packit cdaae3
        printf("FAIL test8 there is a non-dash arg dwoptind %d got 0x%lx\n",
Packit cdaae3
            dwoptind,(unsigned long)argv1[dwoptind]);
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    printf("PASS getopt test8\n");
Packit cdaae3
    return 0;
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
Packit cdaae3
Packit cdaae3
Packit cdaae3
int main(int argc, const char **argv)
Packit cdaae3
{
Packit cdaae3
    int ct = 0;
Packit cdaae3
    int failct = 0;
Packit cdaae3
    printf("argc: %d\n",argc);
Packit cdaae3
    for( ct = 0; ct < argc ; ++ct) {
Packit cdaae3
        printf("argv[%d] = %s\n",ct,argv[ct]);
Packit cdaae3
    }
Packit cdaae3
    if ( argc == 3) {
Packit cdaae3
        int num = 0;
Packit cdaae3
        if (strcmp(argv[1],"-c")) {
Packit cdaae3
            printf("FAIL: invalid arg list\n");
Packit cdaae3
            exit(1);
Packit cdaae3
        }
Packit cdaae3
        num = atoi(argv[2]);
Packit cdaae3
        printf("Run one test, number %d\n",num);
Packit cdaae3
        switch(num) {
Packit cdaae3
        case 1:
Packit cdaae3
            failct = test1();
Packit cdaae3
            break;
Packit cdaae3
        case 2:
Packit cdaae3
            failct = test2();
Packit cdaae3
            break;
Packit cdaae3
        case 3:
Packit cdaae3
            failct = test3();
Packit cdaae3
            break;
Packit cdaae3
        case 5:
Packit cdaae3
            failct = test5();
Packit cdaae3
            break;
Packit cdaae3
        case 6:
Packit cdaae3
            failct = test6();
Packit cdaae3
            break;
Packit cdaae3
        case 7:
Packit cdaae3
            failct = test7();
Packit cdaae3
            break;
Packit cdaae3
        case 8:
Packit cdaae3
            failct = test8();
Packit cdaae3
            break;
Packit cdaae3
        default:
Packit cdaae3
            printf("FAIL: invalid test number %d\n",num);
Packit cdaae3
            exit(1);
Packit cdaae3
        }
Packit cdaae3
        if ( failct) {
Packit cdaae3
            printf("FAIL getopttest\n");
Packit cdaae3
            exit(1);
Packit cdaae3
        }
Packit cdaae3
        printf("PASS getopttest\n");
Packit cdaae3
        exit(0);
Packit cdaae3
    } else if (argc != 1) {
Packit cdaae3
        printf("FAIL: invalid arg list\n");
Packit cdaae3
            exit(1);
Packit cdaae3
    }
Packit cdaae3
    failct += ltest1();
Packit cdaae3
    dwgetoptresetfortestingonly();
Packit cdaae3
    failct += ltest2();
Packit cdaae3
    dwgetoptresetfortestingonly();
Packit cdaae3
    failct += test5();
Packit cdaae3
    dwgetoptresetfortestingonly();
Packit cdaae3
    failct += test1();
Packit cdaae3
    dwgetoptresetfortestingonly();
Packit cdaae3
    failct += test2();
Packit cdaae3
    dwgetoptresetfortestingonly();
Packit cdaae3
    failct += test3();
Packit cdaae3
    dwgetoptresetfortestingonly();
Packit cdaae3
    failct += test6();
Packit cdaae3
    dwgetoptresetfortestingonly();
Packit cdaae3
    failct += test7();
Packit cdaae3
    dwgetoptresetfortestingonly();
Packit cdaae3
    failct += test8();
Packit cdaae3
    if ( failct) {
Packit cdaae3
        printf("FAIL getopttest\n");
Packit cdaae3
        exit(1);
Packit cdaae3
    }
Packit cdaae3
    printf("PASS getopttest\n");
Packit cdaae3
    return 0;
Packit cdaae3
}