Note an error if we are unable to list/extract specified files.
diff --git a/archival/tar.c b/archival/tar.c
index a845df1..826ab96 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -144,6 +144,7 @@
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 @@
#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 @@
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 @@
* 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 @@
/* 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");