d4559f53fa
Getopt has been rework in this way that calling it does not require extra state parameter and its execution is thread safe. Global parameters describing the state of the getopt function have been made available to ensure full API compatibility in using this library. However, referencing these global variables directly is not thread safe. In order to get the state of the getopt function for the thread that is currently using it, call: getopt_state_get(); Extended the library with getopt_long and getopt_long_only functions. Moved getopt libary from utils to posix. Signed-off-by: Jakub Rzeszutko <jakub.rzeszutko@nordicsemi.no>
59 lines
1.9 KiB
Plaintext
59 lines
1.9 KiB
Plaintext
[GetOpt]
|
|
#####################
|
|
|
|
Origin:
|
|
[Lattera FreeBSD]
|
|
[https://github.com/lattera/freebsd/blob/master/lib/libc/stdlib/getopt.c]
|
|
|
|
Status:
|
|
[So far Zephyr samples were using getopt implementation from: argtable3.c.]
|
|
|
|
Purpose:
|
|
[Shell users would like to parse options passed to the command handler.]
|
|
|
|
Description:
|
|
[This library is going to be used by the shell module. Some shell users
|
|
are not satisfied with subcommands alone and need to use the options for
|
|
commands as well. A library is needed that allows the developer to parse
|
|
the arguments string, looking for supported options. Typically, this task
|
|
is accomplished by the getopt function.
|
|
|
|
For this purpose I decided to port the getopt library available
|
|
in the FreeBSD project. I had to modify it so that it could be used
|
|
by all instances of the shell at the same time.
|
|
|
|
Originally this function was using global variables which were defining
|
|
its state. In my implementation I put those variables in a structure
|
|
and a pointer to that structure is passed as an additional parameter
|
|
to getopt function. In proposed implementation each shell backend has its
|
|
own getopt function state structure which it uses.
|
|
|
|
This module is intended to be used inside the shell command handler
|
|
by the abstraction layer "SHELL_GETOPT". For example:
|
|
while ((char c = shell_getopt(shell, argc, argv, "abhc:")) != -1) {
|
|
/* some code */
|
|
}
|
|
]
|
|
|
|
Dependencies:
|
|
[This package does not depend on any other component.
|
|
|
|
Zephyr project will only need this component if the user configures a shell
|
|
module: SHELL_GETOPT.]
|
|
|
|
URL:
|
|
[https://github.com/lattera/freebsd]
|
|
|
|
commit:
|
|
[324e4c082c14aebf00f8dbee0fb7ad285393756a]
|
|
|
|
Maintained-by:
|
|
[External]
|
|
|
|
License:
|
|
[BSD 3-Clause "New" or "Revised" License]
|
|
|
|
License Link:
|
|
[BSD 3-Clause used in getopt: https://spdx.org/licenses/BSD-3-Clause.html]
|
|
[Project license: https://github.com/lattera/freebsd/blob/master/COPYRIGHT]
|