mirror of
https://github.com/sheumann/hush.git
synced 2024-12-28 22:30:05 +00:00
tar: handle "tar fx TARFILE" etc
function old new delta tar_main 702 751 +49 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
b87d972817
commit
f645037ffb
@ -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_NOT_FEATURE_TAR_CREATE("t--x:x--t"); // mutually exclusive
|
||||||
#if ENABLE_FEATURE_TAR_LONG_OPTIONS
|
#if ENABLE_FEATURE_TAR_LONG_OPTIONS
|
||||||
applet_long_options = tar_longopts;
|
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
|
#endif
|
||||||
opt = getopt32(argv,
|
opt = getopt32(argv,
|
||||||
"txC:f:Opvk"
|
"txC:f:Opvk"
|
||||||
|
Loading…
Reference in New Issue
Block a user