Teach in-tree getopt_long() to move non-options to the end of argv.
Nathan Bossart <nathan@postgresql.org>
Teach in-tree getopt_long() to move non-options to the end of argv. Unlike the other implementations of getopt_long() I could find, the in-tree implementation does not reorder non-options to the end of argv. Instead, it returns -1 as soon as the first non-option is found, even if there are other options listed afterwards. By moving non-options to the end of argv, getopt_long() can parse all specified options and return -1 when only non-options remain. This quirk is periodically missed by hackers (e.g., 869aa40a27, ffd398021c, and d9ddc50baf). This commit introduces the aforementioned non-option reordering behavior to the in-tree getopt_long() implementation. Special thanks to Noah Misch for his help verifying behavior on AIX. Reviewed-by: Kyotaro Horiguchi, Michael Paquier Discussion: https://postgr.es/m/20230609232257.GA121461%40nathanxps13
Files
| Path | Change | +/− |
|---|---|---|
| src/bin/scripts/t/040_createuser.pl | modified | +6 −4 |
| src/port/getopt_long.c | modified | +38 −15 |
Discussion
- add non-option reordering to in-tree getopt_long 37 messages · 2023-06-09 → 2023-12-19