&data->child_stdout);
if (child == -1) {
archive_set_error(f->archive, EINVAL,
- "Can't initialise filter");
+ "Can't launch external program: %s", cmd);
return (ARCHIVE_FATAL);
}
#if defined(_WIN32) && !defined(__CYGWIN__)
close(data->child_stdout);
data->child_stdout = -1;
archive_set_error(f->archive, EINVAL,
- "Can't initialise filter");
+ "Can't launch external program: %s", cmd);
return (ARCHIVE_FATAL);
}
#else
__archive_write_program_write(struct archive_write_filter *f,
struct archive_write_program_data *data, const void *buff, size_t length)
{
+ struct private_data *private = (struct private_data *)f->data;
ssize_t ret;
const char *buf;
ret = child_write(f, data, buf, length);
if (ret == -1 || ret == 0) {
archive_set_error(f->archive, EIO,
- "Can't write to filter");
+ "Can't write to program: %s", private->cmd);
return (ARCHIVE_FATAL);
}
length -= ret;
__archive_write_program_close(struct archive_write_filter *f,
struct archive_write_program_data *data)
{
+ struct private_data *private = (struct private_data *)f->data;
int ret, r1, status;
ssize_t bytes_read;
if (bytes_read == -1) {
archive_set_error(f->archive, errno,
- "Read from filter failed unexpectedly.");
+ "Error reading from program: %s", private->cmd);
ret = ARCHIVE_FATAL;
goto cleanup;
}
if (status != 0) {
archive_set_error(f->archive, EIO,
- "Filter exited with failure.");
+ "Error closing program: %s", private->cmd);
ret = ARCHIVE_FATAL;
}
r1 = __archive_write_close_filter(f->next_filter);