| #include <stdlib.h> |
| #include <string.h> |
| #include <stdio.h> |
| |
| #include "axis2_getopt_windows.h" |
| |
| int opterr = 1; /*default - log error*/ |
| int optind = 1; |
| int optopt; |
| char *optarg; |
| |
| #define AXIS2_OPT_ERR_NO_ARG 1 |
| #define AXIS2_OPT_ERR_INVALID_OPTION 2 |
| #define AXIS2_OPT_ERR_BAD_ARG 3 |
| |
| |
| |
| int _axis2_opt_error(int __optopt, int __err, int __showerr) |
| { |
| switch(__err) |
| { |
| case AXIS2_OPT_ERR_NO_ARG: |
| if (__showerr) |
| fprintf(stderr," option requires an argument -- %c\n", __optopt); |
| break; |
| case AXIS2_OPT_ERR_INVALID_OPTION: |
| if (__showerr) |
| fprintf(stderr," illegal option -- %c\n", __optopt); |
| break; |
| case AXIS2_OPT_ERR_BAD_ARG: |
| return (int)':'; |
| default: |
| if (__showerr) |
| fprintf(stderr, "unknown\n"); |
| } |
| return (int)'?'; |
| } |
| |
| AXIS2_DECLARE(int) axis2_getopt(int __argc, char * const *__argv, const char *__shortopts) |
| { |
| static char *pos = ""; |
| char *olstindex; |
| |
| if (!*pos) |
| { |
| /* no option or invalid option*/ |
| if (optind >= __argc || *(pos = __argv[optind]) != '-') |
| { |
| pos = ""; |
| return -1; |
| } |
| /*-- option*/ |
| if (pos[1] && *++pos == '-') |
| { |
| ++optind; |
| pos = ""; |
| return -1; |
| } |
| } |
| |
| if ((optopt = (int)*pos++) == (int)':' || |
| !(olstindex = strchr(__shortopts, optopt))) |
| { |
| |
| if (optopt == (int)'-') |
| return -1; |
| if (!*pos) |
| ++optind; |
| if (*__shortopts != ':') |
| return _axis2_opt_error(optopt,AXIS2_OPT_ERR_BAD_ARG,opterr); |
| _axis2_opt_error(optopt,AXIS2_OPT_ERR_INVALID_OPTION,opterr); |
| } |
| |
| if (*++olstindex != ':') |
| { |
| optarg = NULL; |
| if (!*pos) |
| ++optind; |
| } |
| else |
| { |
| if (*pos) |
| optarg = pos; |
| else if (__argc <= ++optind) |
| { |
| pos = ""; |
| if (*__shortopts == ':') |
| return _axis2_opt_error(-1,AXIS2_OPT_ERR_BAD_ARG,opterr); |
| return _axis2_opt_error(optopt,AXIS2_OPT_ERR_NO_ARG,opterr); |
| } |
| else |
| optarg = __argv[optind]; |
| pos = ""; |
| ++optind; |
| } |
| return optopt; |
| } |
| |