21 constexpr
int kDefaultBlockSize = 128 * 1024;
27 struct RDavixFileDes {
28 RDavixFileDes() : fd(nullptr), pos(&ctx) {}
29 RDavixFileDes(
const RDavixFileDes &) =
delete;
30 RDavixFileDes &operator=(
const RDavixFileDes &) =
delete;
31 ~RDavixFileDes() =
default;
42 ROOT::Internal::RRawFileDavix::RRawFileDavix(std::string_view url, ROptions options)
43 : RRawFile(url, options), fFileDes(new RDavixFileDes())
47 ROOT::Internal::RRawFileDavix::~RRawFileDavix()
49 if (fFileDes->fd !=
nullptr)
50 fFileDes->pos.close(fFileDes->fd,
nullptr);
53 std::unique_ptr<ROOT::Internal::RRawFile> ROOT::Internal::RRawFileDavix::Clone()
const
55 return std::make_unique<RRawFileDavix>(fUrl, fOptions);
58 std::uint64_t ROOT::Internal::RRawFileDavix::GetSizeImpl()
61 Davix::DavixError *err =
nullptr;
62 if (fFileDes->pos.stat(
nullptr, fUrl, &buf, &err) == -1) {
63 throw std::runtime_error(
"Cannot determine size of '" + fUrl +
"', error: " + err->getErrMsg());
68 void ROOT::Internal::RRawFileDavix::OpenImpl()
70 Davix::DavixError *err =
nullptr;
71 fFileDes->fd = fFileDes->pos.open(
nullptr, fUrl, O_RDONLY, &err);
72 if (fFileDes->fd ==
nullptr) {
73 throw std::runtime_error(
"Cannot open '" + fUrl +
"', error: " + err->getErrMsg());
75 if (fOptions.fBlockSize < 0)
76 fOptions.fBlockSize = kDefaultBlockSize;
79 size_t ROOT::Internal::RRawFileDavix::ReadAtImpl(
void *buffer,
size_t nbytes, std::uint64_t offset)
81 Davix::DavixError *err =
nullptr;
82 auto retval = fFileDes->pos.pread(fFileDes->fd, buffer, nbytes, offset, &err);
84 throw std::runtime_error(
"Cannot read from '" + fUrl +
"', error: " + err->getErrMsg());
86 return static_cast<size_t>(retval);