/* * Copyright (c) 2021 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ #ifndef _GETOPT_H__ #define _GETOPT_H__ #ifdef __cplusplus extern "C" { #endif #include struct getopt_state { int opterr; /* if error message should be printed */ int optind; /* index into parent argv vector */ int optopt; /* character checked for validity */ int optreset; /* reset getopt */ char *optarg; /* argument associated with option */ char *place; /* option letter processing */ #if CONFIG_GETOPT_LONG int nonopt_start; int nonopt_end; #endif }; extern int optreset; /* reset getopt */ #define no_argument 0 #define required_argument 1 #define optional_argument 2 struct option { /* name of long option */ const char *name; /* * one of no_argument, required_argument, and optional_argument: * whether option takes an argument */ int has_arg; /* if not NULL, set *flag to val when option found */ int *flag; /* if flag not NULL, value to set *flag to; else return value */ int val; }; /* Function intializes getopt_state structure for current thread */ void getopt_init(void); /* Function returns getopt_state structure for the current thread. */ struct getopt_state *getopt_state_get(void); /** * @brief Parses the command-line arguments. * * The getopt_long() function works like @ref getopt() except * it also accepts long options, started with two dashes. * * @note This function is based on FreeBSD implementation but it does not * support environment variable: POSIXLY_CORRECT. * * @param[in] argc Arguments count. * @param[in] argv Arguments. * @param[in] options String containing the legitimate option characters. * @param[in] long_options Pointer to the first element of an array of * @a struct z_option. * @param[in] long_idx If long_idx is not NULL, it points to a variable * which is set to the index of the long option relative * to @p long_options. * * @return If an option was successfully found, function returns * the option character. */ int getopt_long(int nargc, char *const *nargv, const char *options, const struct option *long_options, int *idx); /** * @brief Parses the command-line arguments. * * The getopt_long_only() function works like @ref getopt_long(), * but '-' as well as "--" can indicate a long option. If an option that starts * with '-' (not "--") doesn't match a long option, but does match a short * option, it is parsed as a short option instead. * * @note This function is based on FreeBSD implementation but it does not * support environment variable: POSIXLY_CORRECT. * * @param[in] argc Arguments count. * @param[in] argv Arguments. * @param[in] options String containing the legitimate option characters. * @param[in] long_options Pointer to the first element of an array of * @a struct option. * @param[in] long_idx If long_idx is not NULL, it points to a variable * which is set to the index of the long option relative * to @p long_options. * * @return If an option was successfully found, function returns * the option character. */ int getopt_long_only(int nargc, char *const *nargv, const char *options, const struct option *long_options, int *idx); #ifdef __cplusplus } #endif #endif /* _GETOPT_H__ */