| typedef __SIZE_TYPE__ size_t; |
| |
| extern void *calloc (size_t __nmemb, size_t __size) |
| __attribute__ ((__nothrow__ , __leaf__, __malloc__, __alloc_size__ (1, 2))); |
| |
| extern char *strdup (const char *__s) |
| __attribute__ ((__nothrow__ , __leaf__, __malloc__, __nonnull__ (1))); |
| |
| extern void abort (void) |
| __attribute__ ((__nothrow__ , __leaf__, __noreturn__)); |
| |
| extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) |
| __attribute__ ((__nothrow__ , __leaf__, __nonnull__ (2, 3))); |
| extern char *optarg; |
| |
| extern void free (void *__ptr) |
| __attribute__ ((__nothrow__ , __leaf__)); |
| |
| char *xstrdup(const char *src) { |
| char *val = strdup(src); |
| if (!val) |
| abort(); |
| return val; |
| } |
| |
| struct test { |
| char *one, *two; |
| }; |
| |
| int main(int argc, char *argv[]) { |
| struct test *options = calloc(1, sizeof(*options)); |
| int rc; |
| if (!options) |
| abort(); |
| |
| while ((rc = getopt(argc, argv, "a:b:")) != -1) { |
| switch (rc) { |
| case 'a': |
| free(options->one); |
| options->one = xstrdup(optarg); |
| break; |
| case 'b': |
| free(options->two); |
| options->two = xstrdup(optarg); |
| break; |
| } |
| } |
| free(options->one); |
| free(options->two); |
| free(options); |
| return 0; |
| } |