static int collectargs (char **argv, int *pi, int *pv, int *pe) { int i; for (i = 1; argv[i] != NULL; i++) { if (argv[i][0] != '-') /* not an option? */ return i; switch (argv[i][1]) { /* option */ case '-': noextrachars(argv[i]); return (argv[i+1] != NULL ? i+1 : 0); case '\0': return i; case 'i': noextrachars(argv[i]); *pi = 1; /* go through */ case 'v': noextrachars(argv[i]); *pv = 1; break; case 'e': *pe = 1; /* go through */ case 'l': /* both options need an argument */ if (argv[i][2] == '\0') { /* no concatenated argument? */ i++; /* try next 'argv' */ if (argv[i] == NULL || argv[i][0] == '-') return -(i - 1); /* no next argument or it is another option */ } break; default: /* invalid option; return its index... */ return -i; /* ...as a negative value */ } } return 0; }
static int collectargs (char **argv, int *pi, int *pv, int *pe) { int i; for (i = 1; argv[i] != NULL; i++) { if (argv[i][0] != '-') /* not an option? */ return i; switch (argv[i][1]) { /* option */ case '-': noextrachars(argv[i]); return (argv[i+1] != NULL ? i+1 : 0); case '\0': return i; case 'i': noextrachars(argv[i]); *pi = 1; /* go through */ case 'v': noextrachars(argv[i]); *pv = 1; break; case 'e': *pe = 1; /* go through */ case 'l': if (argv[i][2] == '\0') { i++; if (argv[i] == NULL) return -1; } break; default: return -1; /* invalid option */ } } return 0; }