X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=tar.c;h=7d440f451c7c51ac426751100e8bc0c3a9976cd5;hb=36fe1a30b1958351de2b8065cb19d3d1b8ed1b33;hp=6784d80ff0cd2ee05a5ca3f78233687267656ba5;hpb=7ab9c7ee52db8759d457819f5480378fa3aa97cc;p=oweals%2Fbusybox.git diff --git a/tar.c b/tar.c index 6784d80ff..7d440f451 100644 --- a/tar.c +++ b/tar.c @@ -173,7 +173,7 @@ extern int tar_main(int argc, char **argv) #if defined BB_FEATURE_TAR_EXCLUDE int excludeListSize=0; #endif - const char *tarName=NULL; + const char *tarName="-"; int listFlag = FALSE; int extractFlag = FALSE; int createFlag = FALSE; @@ -185,15 +185,15 @@ extern int tar_main(int argc, char **argv) usage(tar_usage); /* Parse any options */ - while (--argc > 0 && **(++argv) == '-') { + while (--argc > 0 && strspn(*(++argv), "-cxt") >0 ) { stopIt=FALSE; - while (stopIt==FALSE && *(++(*argv))) { + while (stopIt==FALSE && *argv && **argv) { switch (**argv) { case 'f': if (--argc == 0) { fatalError( "Option requires an argument: No file specified\n"); } - if (tarName != NULL) + if (*tarName != '-') fatalError( "Only one 'f' option allowed\n"); tarName = *(++argv); if (tarName == NULL) @@ -252,6 +252,7 @@ extern int tar_main(int argc, char **argv) fatalError( "Unknown tar flag '%c'\n" "Try `tar --help' for more information\n", **argv); } + ++(*argv); } } @@ -265,7 +266,8 @@ extern int tar_main(int argc, char **argv) #else exit(writeTarFile(tarName, tostdoutFlag, verboseFlag, argc, argv, excludeList)); #endif - } else { + } + if (listFlag == TRUE || extractFlag == TRUE) { exit(readTarFile(tarName, extractFlag, listFlag, tostdoutFlag, verboseFlag, excludeList)); }