• S
    lib: Add getopt · 72eda507
    Sean Anderson 提交于
    Some commands can get very unweildy if they have too many positional
    arguments. Adding options makes them easier to read, remember, and
    understand.
    
    This implementation of getopt has been taken from barebox, which has had
    option support for quite a while. I have made a few modifications to their
    version, such as the removal of opterr in favor of a separate getopt_silent
    function. In addition, I have moved all global variables into struct
    getopt_context.
    
    The getopt from barebox also re-orders the arguments passed to it so that
    non-options are placed last. This allows users to specify options anywhere.
    For example, `ls -l foo/ -R` would be re-ordered to `ls -l -R foo/` as
    getopt parsed the options. However, this feature conflicts with the const
    argv in cmd_tbl->cmd. This was originally added in 54841ab5 ("Make sure
    that argv[] argument pointers are not modified."). The reason stated in
    that commit is that hush requires argv to stay unmodified. Has this
    situation changed? Barebox also uses hush, and does not have this problem.
    Perhaps we could use their fix?
    
    I have assigned maintenance of getopt to Simon Glass, as it is currently
    only used by the log command. I would also be fine maintaining it.
    Signed-off-by: NSean Anderson <seanga2@gmail.com>
    72eda507
getopt.h 4.5 KB