diff --git a/ChangeLog b/ChangeLog index 4ec70d964..a070e6d4e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2025-05-13 dana@dana.is + + * 53588 (tweaked): Src/Modules/system.c, Test/V14system.ztst: + make `zsystem flock` handle optargs in the same word + 2025-05-12 Bart Schaefer * 53602: Doc/Zsh/func.yo, Src/params.c, Test/K01nameref.ztst: diff --git a/Src/Modules/system.c b/Src/Modules/system.c index 929a8b002..f1c0d7042 100644 --- a/Src/Modules/system.c +++ b/Src/Modules/system.c @@ -572,7 +572,7 @@ bin_zsystem_flock(char *nam, char **args, UNUSED(Options ops), UNUSED(int func)) /* variable for fd */ if (optptr[1]) { fdvar = optptr + 1; - optptr += strlen(fdvar) - 1; + optptr += strlen(fdvar); } else if (*args) { fdvar = *args++; } @@ -592,7 +592,7 @@ bin_zsystem_flock(char *nam, char **args, UNUSED(Options ops), UNUSED(int func)) /* timeout in seconds */ if (optptr[1]) { optarg = optptr + 1; - optptr += strlen(optarg) - 1; + optptr += strlen(optarg); } else if (!*args) { zwarnnam(nam, "flock: option %c requires a numeric timeout", opt); @@ -622,7 +622,7 @@ bin_zsystem_flock(char *nam, char **args, UNUSED(Options ops), UNUSED(int func)) /* retry interval in seconds */ if (optptr[1]) { optarg = optptr + 1; - optptr += strlen(optarg) - 1; + optptr += strlen(optarg); } else if (!*args) { zwarnnam(nam, "flock: option %c requires " diff --git a/Test/V14system.ztst b/Test/V14system.ztst index 81253324f..bcabe4082 100644 --- a/Test/V14system.ztst +++ b/Test/V14system.ztst @@ -148,6 +148,16 @@ F:This timing test might fail due to process scheduling issues unrelated to zsh. ?elapsed time seems OK F:This timing test might fail due to process scheduling issues unrelated to zsh. + ( + zsystem flock -t 0.1 -i 0.1 -f XYZ $tst_dir/file + echo $XYZ + zsystem flock -t0.1 -i0.1 -fZYX $tst_dir/file + echo $ZYX + ) +0:regression: zsystem flock optarg parsing +*><-> +*><-> + unset chars REPLY print -n a few words | sysread -i 0 -c chars ret=$?