tar: handle "tar fx TARFILE" etc
No binary (build failed)
—
(log yok)
| @@ -840,6 +840,33 @@ int tar_main(int argc UNUSED_PARAM, char **argv) | |
| IF_NOT_FEATURE_TAR_CREATE("t--x:x--t"); // mutually exclusive | |
| #if ENABLE_FEATURE_TAR_LONG_OPTIONS | |
| applet_long_options = tar_longopts; | |
| + | #endif |
| + | #if ENABLE_DESKTOP |
| + | if (argv[1][0] != '-') { |
| + | /* Compat: |
| + | * 1st argument without dash handles options with parameters |
| + | * differently from dashed one: it takes *next argv[i]* |
| + | * as paramenter even if there are more chars in 1st argument: |
| + | * "tar fx TARFILE" - "x" is not taken as f's param |
| + | * but is interpreted as -x option |
| + | * "tar -xf TARFILE" - dashed equivalent of the above |
| + | * "tar -fx ..." - "x" is taken as f's param |
| + | * getopt32 wouldn't handle 1st command correctly. |
| + | * Unfortunately, people do use such commands. |
| + | * We massage argv[1] to work around it by moving 'f' |
| + | * to the end of the string. |
| + | * More contrived "tar fCx TARFILE DIR" still fails, |
| + | * but such commands are much less likely to be used. |
| + | */ |
| + | char *f = strchr(argv[1], 'f'); |
| + | if (f) { |
| + | while (f[1] != '\0') { |
| + | *f = f[1]; |
| + | f++; |
| + | } |
| + | *f = 'f'; |
| + | } |
| + | } |
| #endif | |
| opt = getopt32(argv, | |
| "txC:f:Opvk" | |