30 buf->st_size = entry->size;
52 if ((Oflag & O_ACCMODE) == O_RDONLY)
54 const auto opt = oss.get_entry_read(path);
58 entry_storage = opt.value();
59 entry = &std::get<XrdOssMirageEntry>(entry_storage);
63 const auto opt = oss.get_entry_write(path);
67 entry_storage = opt.value();
68 entry = &*std::get<XrdOssMirageEntryPtr>(entry_storage);
71 if (entry->open.return_code !=
XrdOssOK)
72 return -entry->open.return_code;
104 if (entry->read.return_code !=
XrdOssOK &&
105 entry->read.return_position >=
static_cast<std::size_t
>(offset) &&
106 entry->read.return_position <=
static_cast<std::size_t
>(offset + size))
107 return -entry->read.return_code;
109 const std::size_t num_bytes = std::min(size,
static_cast<std::size_t
>(entry->size - offset));
111 if (entry->pattern.size() == 1)
112 std::fill_n(
static_cast<char *
>(buffer), num_bytes, entry->pattern.front());
114 if (entry->pattern.size() > 1)
115 std::generate_n(
static_cast<char *
>(buffer), num_bytes, [i = offset % entry->pattern.size(),
this] ()
mutable {
116 return entry->pattern[i++ % entry->pattern.size()];
129 return Read(buffer, offset, size);
134 if (entry->write.return_code !=
XrdOssOK &&
135 entry->write.return_position >=
static_cast<std::size_t
>(offset) &&
136 entry->write.return_position <=
static_cast<std::size_t
>(offset + size))
137 return -entry->write.return_code;
150 if (std::holds_alternative<XrdOssMirageEntryPtr>(entry_storage))
151 std::get<XrdOssMirageEntryPtr>(entry_storage).reset();
virtual int Fchmod(mode_t mode) override
virtual int Close(long long *retsz=0) override
virtual int Open(const char *path, int Oflag, mode_t Mode, XrdOucEnv &env) override
virtual ssize_t pgWrite(void *buffer, off_t offset, size_t wrlen, uint32_t *csvec, uint64_t opts) override
virtual int StatRet(struct stat *buff) override
virtual ssize_t Write(const void *buffer, off_t offset, size_t size) override
virtual ssize_t pgRead(void *buffer, off_t offset, size_t rdlen, uint32_t *csvec, uint64_t opts) override
virtual int Fstat(struct stat *buf) override
XrdOssMirageFile(XrdOssMirage &oss)
virtual int Fsync() override
virtual ssize_t Read(off_t offset, size_t size) override
virtual ssize_t ReadRaw(void *buffer, off_t offset, size_t size) override
virtual int Ftruncate(unsigned long long flen) override