assert(sizeof(struct tar_header) == TAR_BLOCK_SIZE);
this->file = file;
- this->filter = FileFilter::New(file->get_fd(), filter_program);
+ this->filter.reset(FileFilter::New(file->get_fd(), filter_program));
}
Tarfile::~Tarfile()
pid_t pid;
int wrapped_fd = spawn_filter(fd, program, &pid);
- close(fd);
return new FileFilter(fd, wrapped_fd, pid);
}
if (pid == -1)
return 0;
+ // The raw file descriptor was held open to track the output file size, but
+ // is not needed any longer.
+ close(fd_raw);
+
int status;
if (waitpid(pid, &status, 0) < 0) {
fprintf(stderr, "Error waiting for filter process: %m\n");