summaryrefslogtreecommitdiff
path: root/tar.c
diff options
context:
space:
mode:
authorMatt Kraai2000-11-30 04:44:54 +0000
committerMatt Kraai2000-11-30 04:44:54 +0000
commitc119ab9e295df66f25d8922788f68afad5835d52 (patch)
tree2ced1a43b4d6b494ca961040ea6a352baaff39a7 /tar.c
parent8c725e624a6fa97175f48e0fc34b37403e3b8613 (diff)
downloadbusybox-c119ab9e295df66f25d8922788f68afad5835d52.zip
busybox-c119ab9e295df66f25d8922788f68afad5835d52.tar.gz
Note an error if we are unable to list/extract specified files.
Diffstat (limited to 'tar.c')
-rw-r--r--tar.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/tar.c b/tar.c
index a845df1..826ab96 100644
--- a/tar.c
+++ b/tar.c
@@ -144,6 +144,7 @@ static int writeTarFile(const char* tarName, int verboseFlag, char **argv,
extern int tar_main(int argc, char **argv)
{
char** excludeList=NULL;
+ char** extractList=NULL;
#if defined BB_FEATURE_TAR_EXCLUDE
int excludeListSize=0;
#endif
@@ -230,8 +231,10 @@ extern int tar_main(int argc, char **argv)
#endif
}
if (listFlag == TRUE || extractFlag == TRUE) {
+ if (*argv)
+ extractList = argv;
exit(readTarFile(tarName, extractFlag, listFlag, tostdoutFlag,
- verboseFlag, argv, excludeList));
+ verboseFlag, extractList, excludeList));
}
flagError:
@@ -569,7 +572,7 @@ static int readTarFile(const char* tarName, int extractFlag, int listFlag,
continue;
}
#endif
- if (*extractList != NULL) {
+ if (extractList != NULL) {
int skipFlag = TRUE;
for (tmpList = extractList; *tmpList != NULL; tmpList++) {
if (strncmp( *tmpList, header.name, strlen(*tmpList))==0 || (
@@ -580,6 +583,9 @@ static int readTarFile(const char* tarName, int extractFlag, int listFlag,
* the extractFlag set to FALSE, so the junk in the tarball
* is properly skipped over */
skipFlag = FALSE;
+ memmove(extractList+1, extractList,
+ sizeof(*extractList)*(tmpList-extractList));
+ extractList++;
break;
}
}
@@ -712,6 +718,12 @@ static int readTarFile(const char* tarName, int extractFlag, int listFlag,
/* Stuff to do when we are done */
endgame:
close( tarFd);
+ if (extractList != NULL) {
+ for (; *extractList != NULL; extractList++) {
+ errorMsg("%s: Not found in archive\n", *extractList);
+ errorFlag = TRUE;
+ }
+ }
if ( *(header.name) == '\0' ) {
if (errorFlag==TRUE)
errorMsg( "Error exit delayed from previous errors\n");