00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00033 #include <arg_parse.h>
00034 #include <errno.h>
00035 #include <str.h>
00036
00037 int arg_parse_short_long(const char *arg, const char *ashort, const char *along)
00038 {
00039 if (str_cmp(arg, ashort) == 0)
00040 return 0;
00041
00042 if (str_lcmp(arg, along, str_length(along)) == 0)
00043 return str_length(along);
00044
00045 return -1;
00046 }
00047
00067 int arg_parse_int(int argc, char *argv[], int *index, int *value,
00068 int offset)
00069 {
00070 char *rest;
00071
00072 if (offset)
00073 *value = strtol(argv[*index] + offset, &rest, 10);
00074 else if ((*index) + 1 < argc) {
00075 (*index)++;
00076 *value = strtol(argv[*index], &rest, 10);
00077 } else
00078 return ENOENT;
00079
00080 if ((rest) && (*rest))
00081 return EINVAL;
00082
00083 return EOK;
00084 }
00085
00107 int arg_parse_name_int(int argc, char *argv[], int *index, int *value,
00108 int offset, arg_parser parser)
00109 {
00110 char *arg;
00111
00112 int ret = arg_parse_string(argc, argv, index, &arg, offset);
00113 if (ret != EOK)
00114 return ret;
00115
00116 return parser(arg, value);
00117 }
00118
00137 int arg_parse_string(int argc, char **argv, int *index, char **value,
00138 int offset)
00139 {
00140 if (offset)
00141 *value = argv[*index] + offset;
00142 else if ((*index) + 1 < argc) {
00143 (*index)++;
00144 *value = argv[*index];
00145 } else
00146 return ENOENT;
00147
00148 return EOK;
00149 }
00150