#include "store.h"
#include "ref.h"
+#include "util.h"
using std::max;
using std::list;
const char *filter_program = "bzip2 -c";
const char *filter_extension = ".bz2";
-static void cloexec(int fd)
-{
- long flags = fcntl(fd, F_GETFD);
-
- if (flags < 0)
- return;
-
- fcntl(fd, F_SETFD, flags | FD_CLOEXEC);
-}
-
Tarfile::Tarfile(RemoteFile *file, const string &segment)
: size(0),
segment_name(segment)
tar_write(buf, TAR_BLOCK_SIZE);
if (close(filter_fd) != 0)
- throw IOException("Error closing Tarfile");
+ fatal("Error closing Tarfile");
/* ...and wait for filter process to finish. */
int status;
waitpid(filter_pid, &status, 0);
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
- throw IOException("Filter process error");
+ fatal("Filter process error");
}
close(real_fd);
/* Create a pipe for communicating with the filter process. */
if (pipe(fds) < 0) {
- throw IOException("Unable to create pipe for filter");
+ fatal("Unable to create pipe for filter");
}
/* Create a child process which can exec() the filter program. */
pid = fork();
if (pid < 0)
- throw IOException("Unable to fork filter process");
+ fatal("Unable to fork filter process");
if (pid > 0) {
/* Parent process */
if (errno == EINTR)
continue;
fprintf(stderr, "Write error: %m\n");
- throw IOException("Write error");
+ fatal("Write error");
}
len -= res;