memcpy() already copies argv[argc] (the NULL terminator), so the explicit gs->args[argc] = NULL after it does nothing. Drop it.
In the optional-argument branch, '*(curoptp + 1)' is already known to be ':' by the preceding check, so the first half of the && is dead. Use curoptp[2] == ':' directly. No functional change. Signed-off-by: Simon Glass <[email protected]> --- (no changes since v1) lib/getopt.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/getopt.c b/lib/getopt.c index 126427bb4ad..0179ae4d5ea 100644 --- a/lib/getopt.c +++ b/lib/getopt.c @@ -22,7 +22,6 @@ void getopt_init_state(struct getopt_state *gs, int argc, char *const argv[]) gs->argc = argc; memcpy(gs->argv, argv, (argc + 1) * sizeof(*gs->argv)); - gs->argv[argc] = NULL; gs->index = 1; gs->arg_index = 1; gs->nonopts = 0; @@ -107,7 +106,7 @@ int __getopt(struct getopt_state *gs, const char *optstring, bool silent) return curopt; } - if (*(curoptp + 1) && *(curoptp + 2) == ':') { + if (curoptp[2] == ':') { /* optional argument */ if (argv[gs->index][gs->arg_index + 1]) { /* optional argument with directly following arg */ -- 2.43.0

