CernVM-FS  2.13.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
sink_file.cc
Go to the documentation of this file.
1 
5 #include "sink_file.h"
6 
7 #include <cerrno>
8 #include <cstdio>
9 #include <string>
10 
11 namespace cvmfs {
12 
19 int64_t FileSink::Write(const void *buf, uint64_t sz) {
20  size_t ret = fwrite(buf, 1ul, sz, file_);
21 
22  if (ferror(file_) != 0) {
23  // ferror does not tell us what exactly the error is
24  // and errno is also not set
25  // so just return generic I/O error flag
26  return -EIO;
27  }
28 
29  return static_cast<int64_t>(ret);
30 }
31 
39  return ((fflush(file_) == 0) && (ftruncate(fileno(file_), 0) == 0)
40  && (freopen(NULL, "w", file_) == file_))
41  ? 0
42  : -errno;
43 }
44 
55  if (is_owner_ && file_) {
56  int ret = fclose(file_);
57  file_ = NULL;
58  if (ret != 0) {
59  return -errno;
60  }
61 
62  return 0;
63  } else {
64  return Reset();
65  }
66 }
67 
71 std::string FileSink::Describe() {
72  std::string result = "File sink with ";
73  result += IsValid() ? " valid file pointer" : " invalid file pointer";
74  return result;
75 }
76 void FileSink::Adopt(FILE *file, bool is_owner) {
77  if (is_owner_ && file_) {
78  (void)fclose(file_);
79  }
80 
81  is_owner_ = is_owner;
82  file_ = file;
83 }
84 } // namespace cvmfs
virtual int Purge()
Definition: sink_file.cc:54
virtual std::string Describe()
Definition: sink_file.cc:71
virtual bool IsValid()
Definition: sink_file.h:59
void Adopt(FILE *file, bool is_owner=true)
Definition: sink_file.cc:76
FILE * file()
Definition: sink_file.h:105
virtual int64_t Write(const void *buf, uint64_t sz)
Definition: sink_file.cc:19
virtual int Reset()
Definition: sink_file.cc:38
bool is_owner_
Definition: sink.h:100