30 buf->st_size = entry->
size;
52 if ((Oflag & O_ACCMODE) == O_RDONLY)
58 entry_storage = opt.value();
59 entry = &std::get<XrdOssMirageEntry>(entry_storage);
67 entry_storage = opt.value();
68 entry = &*std::get<XrdOssMirageEntryPtr>(entry_storage);
72 return -entry->
open.return_code;
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());
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);
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();
struct XrdOssMirageEntry::@117 read
struct XrdOssMirageEntry::@116 open
struct XrdOssMirageEntry::@118 write
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
std::optional< XrdOssMirageEntry > get_entry_read(const char *path)
std::optional< XrdOssMirageEntryPtr > get_entry_write(const char *path)