CachedUnit createUnitFromUrl(const StringData* const requestedPath) { auto const w = Stream::getWrapperFromURI(StrNR(requestedPath)); if (!w) return CachedUnit{}; auto const f = w->open(StrNR(requestedPath), "r", 0, null_variant); if (!f) return CachedUnit{}; StringBuffer sb; sb.read(f); return createUnitFromString(requestedPath->data(), sb.detach()); }
CachedUnit createUnitFromFile(const StringData* const path, Unit** releaseUnit, Stream::Wrapper* w, OptLog& ent, const Native::FuncTable& nativeFuncs, const RepoOptions& options, FileLoadFlags& flags) { auto const contents = readFileAsString(w, path); return contents ? createUnitFromString(path->data(), *contents, releaseUnit, ent, nativeFuncs, options, flags) : CachedUnit{}; }
CachedUnit createUnitFromUrl(const StringData* const requestedPath, const Native::FuncTable& nativeFuncs, FileLoadFlags& flags) { auto const w = Stream::getWrapperFromURI(StrNR(requestedPath)); StringBuffer sb; { // Stream wrappers can reenter PHP via user defined callbacks. Roll this // operation into a single event rqtrace::EventGuard trace{"STREAM_WRAPPER_OPEN"}; rqtrace::DisableTracing disable; if (!w) return CachedUnit{}; auto const f = w->open(StrNR(requestedPath), "r", 0, nullptr); if (!f) return CachedUnit{}; sb.read(f.get()); } OptLog ent; return createUnitFromString(requestedPath->data(), sb.detach(), nullptr, ent, nativeFuncs, RepoOptions::defaults(), flags); }
CachedUnit createUnitFromFile(StringData* const path) { auto const contents = readFileAsString(path); return contents ? createUnitFromString(path->data(), *contents) : CachedUnit{}; }