1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 11:37:44 +00:00

LibC: Correctly reset the getopt state on optind = 1

The Linux `getopt_long` manpage tells users to reset `optind` to 1 when
scanning the same argument vector or a new argument vector again. This
makes sense, since `optind` denotes the _next_ option to be processed.

The behavior of setting `optind` to 0 doesn't seem to be specified
anywhere, so let's also remove that comment from `unistd.h`.
This commit is contained in:
Tim Schumacher 2023-03-12 13:36:33 +01:00 committed by Andreas Kling
parent b5594bf9a2
commit 515f31339c
2 changed files with 3 additions and 4 deletions

View file

@ -33,7 +33,7 @@ int getopt(int argc, char* const* argv, char const* short_options)
for (auto i = 1; i < argc; ++i)
s_args.append({ argv[i], strlen(argv[i]) });
if (optind == 0 || optreset == 1) {
if (optind == 1 || optreset == 1) {
s_parser.reset_state();
optind = 1;
optreset = 0;
@ -75,7 +75,7 @@ int getopt_long(int argc, char* const* argv, char const* short_options, const st
});
}
if (optind == 0 || optreset == 1) {
if (optind == 1 || optreset == 1) {
s_parser.reset_state();
optind = 1;
optreset = 0;