Merge from libarchive.googlecode.com: If we're
given an empty filename, just invoke write_open_fd() instead of re-implementing the code to use stdout.
This commit is contained in:
parent
018cd707c0
commit
625683944d
@ -71,24 +71,18 @@ archive_write_open_filename(struct archive *a, const char *filename)
|
||||
{
|
||||
struct write_file_data *mine;
|
||||
|
||||
if (filename == NULL || filename[0] == '\0') {
|
||||
mine = (struct write_file_data *)malloc(sizeof(*mine));
|
||||
if (mine == NULL) {
|
||||
archive_set_error(a, ENOMEM, "No memory");
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
mine->filename[0] = '\0'; /* Record that we're using stdout. */
|
||||
} else {
|
||||
mine = (struct write_file_data *)malloc(sizeof(*mine) + strlen(filename));
|
||||
if (mine == NULL) {
|
||||
archive_set_error(a, ENOMEM, "No memory");
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
strcpy(mine->filename, filename);
|
||||
if (filename == NULL || filename[0] == '\0')
|
||||
return (archive_write_open_fd(a, 1));
|
||||
|
||||
mine = (struct write_file_data *)malloc(sizeof(*mine) + strlen(filename));
|
||||
if (mine == NULL) {
|
||||
archive_set_error(a, ENOMEM, "No memory");
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
strcpy(mine->filename, filename);
|
||||
mine->fd = -1;
|
||||
return (archive_write_open(a, mine,
|
||||
file_open, file_write, file_close));
|
||||
file_open, file_write, file_close));
|
||||
}
|
||||
|
||||
static int
|
||||
@ -104,21 +98,11 @@ file_open(struct archive *a, void *client_data)
|
||||
/*
|
||||
* Open the file.
|
||||
*/
|
||||
if (mine->filename[0] != '\0') {
|
||||
mine->fd = open(mine->filename, flags, 0666);
|
||||
if (mine->fd < 0) {
|
||||
archive_set_error(a, errno, "Failed to open '%s'",
|
||||
mine->filename);
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* NULL filename is stdout.
|
||||
*/
|
||||
mine->fd = 1;
|
||||
/* By default, pad archive when writing to stdout. */
|
||||
if (archive_write_get_bytes_in_last_block(a) < 0)
|
||||
archive_write_set_bytes_in_last_block(a, 0);
|
||||
mine->fd = open(mine->filename, flags, 0666);
|
||||
if (mine->fd < 0) {
|
||||
archive_set_error(a, errno, "Failed to open '%s'",
|
||||
mine->filename);
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
|
||||
if (fstat(mine->fd, &st) != 0) {
|
||||
@ -172,8 +156,7 @@ file_close(struct archive *a, void *client_data)
|
||||
struct write_file_data *mine = (struct write_file_data *)client_data;
|
||||
|
||||
(void)a; /* UNUSED */
|
||||
if (mine->filename[0] != '\0')
|
||||
close(mine->fd);
|
||||
close(mine->fd);
|
||||
free(mine);
|
||||
return (ARCHIVE_OK);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user