NAME | SYNOPSIS | API RESTRICTIONS | DESCRIPTION | EXAMPLES | ATTRIBUTES | SEE ALSO | RESTRICTIONS
$(NUCLEUS_DIR)/lib/classix/libsys.s.a #include <stdlib.h>int getsubopt(char **optionp, char *const *tokens, char **valuep);
extern char *suboptarg;
The function or functions documented here may not be used safely in all application contexts with all APIs provided in the ChorusOS 5.0 product.
See API(5FEA) for details.
The getsubopt function parses a string containing tokens delimited by one or more tab, space or comma (",") characters. It is intended for use in parsing groups of option arguments provided as part of a utility command line.
The optionp argument is a pointer to a pointer to the string. The tokens argument is a pointer to a NULL-terminated array of pointers to strings.
The getsubopt function returns the zero-based offset of the pointer in the tokens array, referencing a string which matches the first token in the string, or -1 if there is no match.
If the token is of the form "name=value", the location referenced by valuep will be set to point to the start of the "value" portion of the token.
On return from getsubopt, optionp will be set to point to the start of the next token in the string, or the NULL at the end of the string if no more tokens are present. The external variable suboptarg will be set to point to the start of the current token, or NULL if no tokens were present. The argument valuep will be set to point to the "value" portion of the token, or NULL if no "value" portion was present.
char *tokens[] = { #define ONE 0 "one", #define TWO 1 "two", NULL }; ... char *options, *value; while ((ch = getopt(argc, argv, "ab:")) != -1) { switch(ch) { case 'a': /* process "a" option */ break; case 'b': options = optarg; while (*options) { switch(getsubopt(&options, tokens, &value)) { case ONE: /* process "one" sub option */ break; case TWO: /* process "two" sub option */ if (!value) { printerr("no value for two"); } else { i = atoi(value); } break; case -1: if (suboptarg) { printerr("illegal sub option %s", suboptarg); } else { printerr("missing sub option"); } break; } break; } |
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
The getsubopt function is not thread--safe.
NAME | SYNOPSIS | API RESTRICTIONS | DESCRIPTION | EXAMPLES | ATTRIBUTES | SEE ALSO | RESTRICTIONS