zephyr/lib/posix/options/getopt
Christopher Friedt 855b8bc6ca posix: separate shell utilities and posix api implementation
Previously, the POSIX shell utilities were intermixed with the
POSIX API implementation.

The POSIX shell utilities only depend on the public POSIX API,
so it makes sense to keep them in a separate subdirectory.

Signed-off-by: Christopher Friedt <cfriedt@meta.com>
2024-02-01 05:26:24 -05:00
..
CMakeLists.txt posix: separate shell utilities and posix api implementation 2024-02-01 05:26:24 -05:00
getopt.c posix: separate shell utilities and posix api implementation 2024-02-01 05:26:24 -05:00
getopt.h posix: separate shell utilities and posix api implementation 2024-02-01 05:26:24 -05:00
getopt_common.c posix: separate shell utilities and posix api implementation 2024-02-01 05:26:24 -05:00
getopt_common.h posix: separate shell utilities and posix api implementation 2024-02-01 05:26:24 -05:00
getopt_long.c posix: separate shell utilities and posix api implementation 2024-02-01 05:26:24 -05:00
Kconfig posix: separate shell utilities and posix api implementation 2024-02-01 05:26:24 -05:00
README posix: separate shell utilities and posix api implementation 2024-02-01 05:26:24 -05:00

[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(sh, 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]