Lines Matching full:file
4 * you may not use this file except in compliance with the License.
17 #include "file-inl.h"
18 #include "os/file.h"
47 const std::array<uint8_t, File::MAGIC_SIZE> File::MAGIC {'P', 'A', 'N', 'D', 'A', '\0', '\0', '\0'};
49 // Name anonymous maps for perfing tools finding symbol file correctly.
53 os::file::Mode GetMode(panda_file::File::OpenMode open_mode) in GetMode()
56 case File::READ_ONLY: { in GetMode()
57 return os::file::Mode::READONLY; in GetMode()
59 case File::READ_WRITE: { in GetMode()
61 return os::file::Mode::READWRITE; in GetMode()
63 return os::file::Mode::READONLY; in GetMode()
66 case File::WRITE_ONLY: { in GetMode()
67 return os::file::Mode::WRITEONLY; in GetMode()
77 static uint32_t GetProt(panda_file::File::OpenMode mode) in GetProt()
80 if (mode == File::READ_WRITE) { in GetProt()
114 std::unique_ptr<const File> OpenPandaFileOrZip(std::string_view location, panda_file::File::OpenMod… in OpenPandaFileOrZip()
136 std::unique_ptr<const panda_file::File> OpenPandaFileFromZipFile(ZipArchiveHandle &handle, std::str… in OpenPandaFileFromZipFile()
171 return panda_file::File::OpenFromMemory(std::move(ConstPtr), location); in OpenPandaFileFromZipFile()
175 std::unique_ptr<const panda_file::File> HandleArchive(ZipArchiveHandle &handle, FILE *fp, std::stri… in HandleArchive()
177 panda_file::File::OpenMode open_mode) in HandleArchive()
179 std::unique_ptr<const panda_file::File> file; in HandleArchive() local
182 file = OpenPandaFileFromZipFile(handle, location, entry, archive_filename); in HandleArchive()
185 …file = panda_file::File::OpenUncompressedArchive(fileno(fp), location, entry.GetUncompressedSize(), in HandleArchive()
188 return file; in HandleArchive()
191 std::unique_ptr<const panda_file::File> OpenPandaFile(std::string_view location, std::string_view a… in OpenPandaFile()
192 panda_file::File::OpenMode open_mode) in OpenPandaFile()
194 trace::ScopedTrace scoped_trace("Open panda file " + std::string(location)); in OpenPandaFile()
203 FILE *fp = fopen(std::string(location).c_str(), mode); in OpenPandaFile()
211 LOG(ERROR, PANDAFILE) << "Can't read from file!(magic) " << location; in OpenPandaFile()
215 std::unique_ptr<const panda_file::File> file; in OpenPandaFile() local
249 // check that file is not empty, otherwise crash at CloseArchiveFile in OpenPandaFile()
252 …LOG(ERROR, PANDAFILE) << "Invalid panda file '" << (try_default ? ARCHIVE_FILENAME : archive_filen… in OpenPandaFile()
265 file = HandleArchive(zipfile, fp, location, entry, archive_filename, open_mode); in OpenPandaFile()
273 file = panda_file::File::Open(location, open_mode); in OpenPandaFile()
276 return file; in OpenPandaFile()
279 std::unique_ptr<const File> OpenPandaFileFromMemory(const void *buffer, size_t size) in OpenPandaFileFromMemory()
293 PLOG(ERROR, PANDAFILE) << "Failed to open panda file from memory'"; in OpenPandaFileFromMemory()
298 return panda_file::File::OpenFromMemory(std::move(ptr), std::to_string(hash(mem))); in OpenPandaFileFromMemory()
301 std::unique_ptr<const File> OpenPandaFileFromSecureMemory(uint8_t *buffer, size_t size) in OpenPandaFileFromSecureMemory()
310 PLOG(ERROR, PANDAFILE) << "Failed to open panda file from secure memory'"; in OpenPandaFileFromSecureMemory()
315 return panda_file::File::OpenFromMemory(std::move(ptr), std::to_string(hash(mem))); in OpenPandaFileFromSecureMemory()
326 ClassIdxIterator(const File &file, const Span<const uint32_t> &span, size_t idx) in ClassIdxIterator() argument
327 : file_(file), span_(span), idx_(idx) in ClassIdxIterator()
382 return file_.GetStringData(File::EntityId(id)).data; in operator *()
395 static ClassIdxIterator Begin(const File &file, const Span<const uint32_t> &span) in Begin() argument
397 return ClassIdxIterator(file, span, 0); in Begin()
400 static ClassIdxIterator End(const File &file, const Span<const uint32_t> &span) in End() argument
402 return ClassIdxIterator(file, span, span.Size()); in End()
406 const File &file_;
411 File::File(std::string filename, os::mem::ConstBytePtr &&base) in File() function in panda::panda_file::File
423 File::~File() in ~File()
428 inline std::string VersionToString(const std::array<uint8_t, File::VERSION_SIZE> &array) in VersionToString()
432 for (size_t i = 0; i < File::VERSION_SIZE - 1; ++i) { in VersionToString()
436 ss << static_cast<int>(array[File::VERSION_SIZE - 1]); in VersionToString()
443 inline int CompareVersions(const std::array<uint8_t, File::VERSION_SIZE> &lhs, in CompareVersions()
444 const std::array<uint8_t, File::VERSION_SIZE> &rhs) in CompareVersions()
446 for (size_t i = 0; i < File::VERSION_SIZE; i++) { in CompareVersions()
455 inline bool operator<(const std::array<uint8_t, File::VERSION_SIZE> &lhs, in operator <()
456 const std::array<uint8_t, File::VERSION_SIZE> &rhs) in operator <()
461 inline bool operator>(const std::array<uint8_t, File::VERSION_SIZE> &lhs, in operator >()
462 const std::array<uint8_t, File::VERSION_SIZE> &rhs) in operator >()
468 std::unique_ptr<const File> File::Open(std::string_view filename, OpenMode open_mode) in Open()
470 trace::ScopedTrace scoped_trace("Open panda file " + std::string(filename)); in Open()
471 os::file::Mode mode = GetMode(open_mode); in Open()
472 os::file::File file = os::file::Open(filename, mode); in Open() local
473 if (!file.IsValid()) { in Open()
474 PLOG(ERROR, PANDAFILE) << "Failed to open panda file '" << filename << "'"; in Open()
478 os::file::FileHolder fh_holder(file); in Open()
480 auto res = file.GetFileSize(); in Open()
482 PLOG(ERROR, PANDAFILE) << "Failed to get size of panda file '" << filename << "'"; in Open()
487 if (size < sizeof(File::Header)) { in Open()
488 LOG(ERROR, PANDAFILE) << "Invalid panda file '" << filename << "' - has not header"; in Open()
492 …os::mem::ConstBytePtr ptr = os::mem::MapFile(file, GetProt(open_mode), os::mem::MMAP_FLAG_PRIVATE,… in Open()
494 PLOG(ERROR, PANDAFILE) << "Failed to map panda file '" << filename << "'"; in Open()
502 return std::unique_ptr<File>(new File(filename.data(), std::move(ptr))); in Open()
505 std::unique_ptr<const File> File::OpenUncompressedArchive(int fd, const std::string_view &filename,… in OpenUncompressedArchive()
508 trace::ScopedTrace scoped_trace("Open panda file " + std::string(filename)); in OpenUncompressedArchive()
509 auto file = os::file::File(fd); in OpenUncompressedArchive() local
510 if (!file.IsValid()) { in OpenUncompressedArchive()
511 …PLOG(ERROR, PANDAFILE) << "OpenUncompressedArchive: Failed to open panda file '" << filename << "'… in OpenUncompressedArchive()
515 if (size < sizeof(File::Header)) { in OpenUncompressedArchive()
516 LOG(ERROR, PANDAFILE) << "Invalid panda file size '" << filename << "'"; in OpenUncompressedArchive()
522 … os::mem::MapFile(file, GetProt(open_mode), os::mem::MMAP_FLAG_PRIVATE, size, offset).ToConst(); in OpenUncompressedArchive()
524 PLOG(ERROR, PANDAFILE) << "Failed to map panda file '" << filename << "'"; in OpenUncompressedArchive()
531 return std::unique_ptr<File>(new File(filename.data(), std::move(ptr))); in OpenUncompressedArchive()
546 if (ptr.Get() == nullptr || ptr.GetSize() < sizeof(File::Header)) { in CheckHeader()
547 LOG(ERROR, PANDAFILE) << "Invalid panda file '" << filename << "'"; in CheckHeader()
550 auto header = reinterpret_cast<const File::Header *>(reinterpret_cast<uintptr_t>(ptr.Get())); in CheckHeader()
551 if (header->magic != File::MAGIC) { in CheckHeader()
558 if (header->file_size < sizeof(File::Header) || header->file_size > ptr.GetSize()) { in CheckHeader()
559 LOG(ERROR, PANDAFILE) << "Invalid panda file size " << header->file_size; in CheckHeader()
564 LOG(ERROR, PANDAFILE) << "Invalid panda file foreign_off " << header->foreign_off << in CheckHeader()
570 LOG(ERROR, PANDAFILE) << "Invalid panda file class_idx_off " << header->class_idx_off << in CheckHeader()
576 LOG(ERROR, PANDAFILE) << "Invalid panda file lnp_idx_off " << header->lnp_idx_off << in CheckHeader()
582 …LOG(ERROR, PANDAFILE) << "Invalid panda file literalarray_idx_off " << header->literalarray_idx_of… in CheckHeader()
587 if (!CheckHeaderElementOffset<File::IndexHeader>(header->index_section_off, header->num_indexes, in CheckHeader()
589 … LOG(ERROR, PANDAFILE) << "Invalid panda file index_section_off " << header->index_section_off << in CheckHeader()
597 void CheckFileVersion(const std::array<uint8_t, File::VERSION_SIZE> &file_version, const std::strin… in CheckFileVersion()
608 … LOG(LOG_LEVEL, PANDAFILE) << "Unable to open file '" << filename << "' with abc file version " in CheckFileVersion()
610 …<< ". Minimum supported abc file version on the current system image is " << VersionToString(minVe… in CheckFileVersion()
612 << "or execute the abc file on former version of system image"; in CheckFileVersion()
614 … LOG(LOG_LEVEL, PANDAFILE) << "Unable to open file '" << filename << "' with abc file version " in CheckFileVersion()
616 …<< ". Maximum supported abc file version on the current system image is " << VersionToString(versi… in CheckFileVersion()
619 … LOG(LOG_LEVEL, PANDAFILE) << "Unable to open file '" << filename << "' with abc file version " in CheckFileVersion()
621 … << VersionToString(version) << ", while abc file version is " << VersionToString(file_version) in CheckFileVersion()
630 std::unique_ptr<const File> File::OpenFromMemory(os::mem::ConstBytePtr &&ptr) in OpenFromMemory()
636 return std::unique_ptr<File>(new File("", std::forward<os::mem::ConstBytePtr>(ptr))); in OpenFromMemory()
640 std::unique_ptr<const File> File::OpenFromMemory(os::mem::ConstBytePtr &&ptr, std::string_view file… in OpenFromMemory()
642 trace::ScopedTrace scoped_trace("Open panda file from RAM " + std::string(filename)); in OpenFromMemory()
648 … return std::unique_ptr<File>(new File(filename.data(), std::forward<os::mem::ConstBytePtr>(ptr))); in OpenFromMemory()
651 File::EntityId File::GetClassId(const uint8_t *mutf8_name) const in GetClassId()
673 uint32_t File::CalcFilenameHash(const std::string &filename) in CalcFilenameHash()
678 File::EntityId File::GetLiteralArraysId() const in GetLiteralArraysId()
684 File::EntityId File::GetClassIdFromClassHashTable(const uint8_t *mutf8_name) const in GetClassIdFromClassHashTable()
692 return File::EntityId(); in GetClassIdFromClassHashTable()
697 auto entity_id = File::EntityId(entity_pair->entity_id_offset); in GetClassIdFromClassHashTable()
709 return File::EntityId(); in GetClassIdFromClassHashTable()