Determine type of the archive before appending to it.
This commit is contained in:
15
src/update.c
15
src/update.c
@@ -106,7 +106,7 @@ void
|
|||||||
update_archive (void)
|
update_archive (void)
|
||||||
{
|
{
|
||||||
enum read_header previous_status = HEADER_STILL_UNREAD;
|
enum read_header previous_status = HEADER_STILL_UNREAD;
|
||||||
int found_end = 0;
|
bool found_end = false;
|
||||||
|
|
||||||
name_gather ();
|
name_gather ();
|
||||||
open_archive (ACCESS_UPDATE);
|
open_archive (ACCESS_UPDATE);
|
||||||
@@ -126,30 +126,33 @@ update_archive (void)
|
|||||||
{
|
{
|
||||||
struct name *name;
|
struct name *name;
|
||||||
|
|
||||||
|
decode_header (current_header, ¤t_stat_info,
|
||||||
|
¤t_format, 0);
|
||||||
|
archive_format = current_format;
|
||||||
|
|
||||||
if (subcommand_option == UPDATE_SUBCOMMAND
|
if (subcommand_option == UPDATE_SUBCOMMAND
|
||||||
&& (name = name_scan (current_stat_info.file_name)) != NULL)
|
&& (name = name_scan (current_stat_info.file_name)) != NULL)
|
||||||
{
|
{
|
||||||
struct stat s;
|
struct stat s;
|
||||||
enum archive_format unused;
|
|
||||||
|
|
||||||
decode_header (current_header, ¤t_stat_info, &unused, 0);
|
|
||||||
chdir_do (name->change_dir);
|
chdir_do (name->change_dir);
|
||||||
if (deref_stat (dereference_option,
|
if (deref_stat (dereference_option,
|
||||||
current_stat_info.file_name, &s) == 0
|
current_stat_info.file_name, &s) == 0
|
||||||
&& s.st_mtime <= current_stat_info.stat.st_mtime)
|
&& s.st_mtime <= current_stat_info.stat.st_mtime)
|
||||||
add_avoided_name (current_stat_info.file_name);
|
add_avoided_name (current_stat_info.file_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
skip_member ();
|
skip_member ();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case HEADER_ZERO_BLOCK:
|
case HEADER_ZERO_BLOCK:
|
||||||
current_block = current_header;
|
current_block = current_header;
|
||||||
found_end = 1;
|
found_end = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HEADER_END_OF_FILE:
|
case HEADER_END_OF_FILE:
|
||||||
found_end = 1;
|
found_end = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HEADER_FAILURE:
|
case HEADER_FAILURE:
|
||||||
@@ -175,6 +178,8 @@ update_archive (void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tar_stat_destroy (¤t_stat_info);
|
||||||
|
xheader_destroy (&extended_header);
|
||||||
previous_status = status;
|
previous_status = status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user