1#include "ROOT/InternalIOUtils.hxx"
17#include <sys/extattr.h>
24#define getxattr(path, name, value, size) getxattr(path, name, value, size, 0u, 0)
28#define getxattr(path, name, value, size) extattr_get_file(path, EXTATTR_NAMESPACE_USER, name, value, size)
35std::optional<std::string>
36ROOT::Internal::GetXAttrVal([[maybe_unused]] std::string_view path, [[maybe_unused]] std::string_view xattr)
40 if (
auto len = getxattr(path.data(), xattr.data(),
nullptr, 0);
len >= 0) {
41 std::string xval(
len, 0);
43 if (getxattr(path.data(), xattr.data(), xval.data(),
len) ==
len)
50std::optional<std::string> ROOT::Internal::GetEOSRedirectedXRootURL([[maybe_unused]] std::string_view inputPath)
53 if (inputPath.empty() || inputPath.back() ==
'/')
56 if (
gEnv->
GetValue(
"TFile.CrossProtocolRedirects", 1) != 1)
59 auto xurl = ROOT::Internal::GetXAttrVal(inputPath,
"eos.url.xroot");
63 auto baseName = inputPath.substr(inputPath.find_last_of(
"/") + 1);
66 if (!std::equal(baseName.crbegin(), baseName.crend(), xurl->crbegin())) {
68 <<
"Could not find path base name '" << baseName <<
"' in redirected URL '" << *xurl <<
"'.";
78 <<
"Redirected URL '" << *xurl <<
"' does not begin with any valid XRootD protocol string.";
#define R__LOG_WARNING(...)
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
A log configuration for a channel, e.g.
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
bool StartsWith(std::string_view string, std::string_view prefix)