X-Git-Url: http://git.vrable.net/?p=cumulus.git;a=blobdiff_plain;f=store.cc;h=9d4c8833b7679b1ea6483ee38fe67416f36f146b;hp=720d3bb7da8a6abd4e7e42be35c0bb7c733660e5;hb=a9d83d1e32291aaa449442eaf19ade56bfd42778;hpb=0dfc70e01ddb7d2bce0db03d5364c0bd3a2bb308 diff --git a/store.cc b/store.cc index 720d3bb..9d4c883 100644 --- a/store.cc +++ b/store.cc @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -42,6 +43,7 @@ #include "store.h" #include "ref.h" +#include "util.h" using std::max; using std::list; @@ -54,16 +56,6 @@ using std::string; 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) @@ -85,14 +77,14 @@ Tarfile::~Tarfile() 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); @@ -109,13 +101,13 @@ int spawn_filter(int fd_out, const char *program, pid_t *filter_pid) /* 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 */ @@ -158,7 +150,7 @@ void Tarfile::tar_write(const char *data, size_t len) if (errno == EINTR) continue; fprintf(stderr, "Write error: %m\n"); - throw IOException("Write error"); + fatal("Write error"); } len -= res; @@ -180,7 +172,7 @@ void Tarfile::write_object(int id, const char *data, size_t len) sprintf(header.mode, "%07o", 0600); sprintf(header.uid, "%07o", 0); sprintf(header.gid, "%07o", 0); - sprintf(header.size, "%011o", len); + sprintf(header.size, "%011o", (int)len); sprintf(header.mtime, "%011o", (int)time(NULL)); header.typeflag = '0'; strcpy(header.magic, "ustar "); @@ -289,7 +281,7 @@ void TarSegmentStore::dump_stats() for (map >::iterator i = group_sizes.begin(); i != group_sizes.end(); ++i) { printf(" %s: %lld (%lld compressed)\n", i->first.c_str(), - i->second.first, i->second.second); + (long long)i->second.first, (long long)i->second.second); } }