• Home
  • Raw
  • Download

Lines Matching full:file

4  * you may not use this file except in compliance with the License.
17 #include "file-inl.h"
29 const std::array<uint8_t, File::MAGIC_SIZE> File::MAGIC {'P', 'A', 'N', 'D', 'A', '\0', '\0', '\0'};
31 // Name anonymous maps for perfing tools finding symbol file correctly.
35 os::file::Mode GetMode(panda_file::File::OpenMode open_mode) in GetMode()
38 case File::READ_ONLY: { in GetMode()
39 return os::file::Mode::READONLY; in GetMode()
41 case File::READ_WRITE: { in GetMode()
43 return os::file::Mode::READWRITE; in GetMode()
45 return os::file::Mode::READONLY; in GetMode()
48 case File::WRITE_ONLY: { in GetMode()
49 return os::file::Mode::WRITEONLY; in GetMode()
59 static uint32_t GetProt(panda_file::File::OpenMode mode) in GetProt()
62 if (mode == File::READ_WRITE) { in GetProt()
96 std::unique_ptr<const File> OpenPandaFileOrZip(std::string_view location, panda_file::File::OpenMod… in OpenPandaFileOrZip()
118 std::unique_ptr<const panda_file::File> OpenPandaFileFromZipFile(ZipArchiveHandle &handle, std::str… in OpenPandaFileFromZipFile()
148 return panda_file::File::OpenFromMemory(std::move(ConstPtr), location); in OpenPandaFileFromZipFile()
152 std::unique_ptr<const panda_file::File> HandleArchive(ZipArchiveHandle &handle, FILE *fp, std::stri… in HandleArchive()
154 panda_file::File::OpenMode open_mode) in HandleArchive()
156 std::unique_ptr<const panda_file::File> file; in HandleArchive() local
159 file = OpenPandaFileFromZipFile(handle, location, entry, archive_filename); in HandleArchive()
162file = panda_file::File::OpenUncompressedArchive(fileno(fp), location, entry.GetUncompressedSize(), in HandleArchive()
165 return file; in HandleArchive()
168 std::unique_ptr<const panda_file::File> OpenPandaFileFromZip(FILE *fp, std::string_view location, in OpenPandaFileFromZip()
170 panda_file::File::OpenMode open_mode) in OpenPandaFileFromZip()
196 // check that file is not empty, otherwise crash at CloseArchiveFile in OpenPandaFileFromZip()
199 …LOG(ERROR, PANDAFILE) << "Invalid panda file '" << (try_default ? ARCHIVE_FILENAME : archive_filen… in OpenPandaFileFromZip()
209 std::unique_ptr<const panda_file::File> file = HandleArchive(zipfile, fp, location, entry, in OpenPandaFileFromZip() local
213 return file; in OpenPandaFileFromZip()
216 std::unique_ptr<const panda_file::File> OpenPandaFile(std::string_view location, std::string_view a… in OpenPandaFile()
217 panda_file::File::OpenMode open_mode) in OpenPandaFile()
219 trace::ScopedTrace scoped_trace("Open panda file " + std::string(location)); in OpenPandaFile()
228 FILE *fp = fopen(std::string(location).c_str(), mode); in OpenPandaFile()
236 LOG(ERROR, PANDAFILE) << "Can't read from file!(magic) " << location; in OpenPandaFile()
240 std::unique_ptr<const panda_file::File> file; in OpenPandaFile() local
242 file = OpenPandaFileFromZip(fp, location, archive_filename, open_mode); in OpenPandaFile()
244 file = panda_file::File::Open(location, open_mode); in OpenPandaFile()
247 return file; in OpenPandaFile()
250 std::unique_ptr<const File> OpenPandaFileFromMemory(const void *buffer, size_t size, std::string ta… in OpenPandaFileFromMemory()
275 PLOG(ERROR, PANDAFILE) << "Failed to open panda file from memory'"; in OpenPandaFileFromMemory()
279 return panda_file::File::OpenFromMemory(std::move(ptr), std::to_string(hash(mem))); in OpenPandaFileFromMemory()
282 std::unique_ptr<const File> OpenPandaFileFromSecureMemory(uint8_t *buffer, size_t size) in OpenPandaFileFromSecureMemory()
297 PLOG(ERROR, PANDAFILE) << "Failed to open panda file from secure memory'"; in OpenPandaFileFromSecureMemory()
302 return panda_file::File::OpenFromMemory(std::move(ptr), std::to_string(hash(mem))); in OpenPandaFileFromSecureMemory()
313 FILE *fp = fopen(PROC_SELF_XPM_REGION_PATH, "r"); in CheckSecureMem()
315 … LOG(ERROR, PANDAFILE) << "Can not open xpm proc file, do not check secure memory anymore."; in CheckSecureMem()
316 // No verification is performed when a file fails to be opened. in CheckSecureMem()
323 LOG(ERROR, PANDAFILE) << "Read xpm proc file failed"; in CheckSecureMem()
332 // The check is not performed when the file is already opened. in CheckSecureMem()
361 ClassIdxIterator(const File &file, const Span<const uint32_t> &span, size_t idx) in ClassIdxIterator() argument
362 : file_(file), span_(span), idx_(idx) in ClassIdxIterator()
417 return file_.GetStringData(File::EntityId(id)).data; in operator *()
430 static ClassIdxIterator Begin(const File &file, const Span<const uint32_t> &span) in Begin() argument
432 return ClassIdxIterator(file, span, 0); in Begin()
435 static ClassIdxIterator End(const File &file, const Span<const uint32_t> &span) in End() argument
437 return ClassIdxIterator(file, span, span.Size()); in End()
441 const File &file_;
446 File::File(std::string filename, os::mem::ConstBytePtr &&base) in File() function in panda::panda_file::File
458 File::~File() in ~File()
463 inline std::string VersionToString(const std::array<uint8_t, File::VERSION_SIZE> &array) in VersionToString()
467 for (size_t i = 0; i < File::VERSION_SIZE - 1; ++i) { in VersionToString()
471 ss << static_cast<int>(array[File::VERSION_SIZE - 1]); in VersionToString()
478 inline int CompareVersions(const std::array<uint8_t, File::VERSION_SIZE> &lhs, in CompareVersions()
479 const std::array<uint8_t, File::VERSION_SIZE> &rhs) in CompareVersions()
481 for (size_t i = 0; i < File::VERSION_SIZE; i++) { in CompareVersions()
490 inline bool operator<(const std::array<uint8_t, File::VERSION_SIZE> &lhs, in operator <()
491 const std::array<uint8_t, File::VERSION_SIZE> &rhs) in operator <()
496 inline bool operator>(const std::array<uint8_t, File::VERSION_SIZE> &lhs, in operator >()
497 const std::array<uint8_t, File::VERSION_SIZE> &rhs) in operator >()
503 std::unique_ptr<const File> File::Open(std::string_view filename, OpenMode open_mode) in Open()
505 trace::ScopedTrace scoped_trace("Open panda file " + std::string(filename)); in Open()
506 os::file::Mode mode = GetMode(open_mode); in Open()
507 os::file::File file = os::file::Open(filename, mode); in Open() local
508 if (!file.IsValid()) { in Open()
509 PLOG(ERROR, PANDAFILE) << "Failed to open panda file '" << filename << "'"; in Open()
513 os::file::FileHolder fh_holder(file); in Open()
515 auto res = file.GetFileSize(); in Open()
517 PLOG(ERROR, PANDAFILE) << "Failed to get size of panda file '" << filename << "'"; in Open()
522 if (size < sizeof(File::Header)) { in Open()
523 …LOG(ERROR, PANDAFILE) << "Invalid panda file '" << filename << "' - missing or incomplete header" … in Open()
524 ". Abc file is corrupted"; in Open()
528 …os::mem::ConstBytePtr ptr = os::mem::MapFile(file, GetProt(open_mode), os::mem::MMAP_FLAG_PRIVATE,… in Open()
530 PLOG(ERROR, PANDAFILE) << "Failed to map panda file '" << filename << "'"; in Open()
538 return std::unique_ptr<File>(new File(filename.data(), std::move(ptr))); in Open()
541 std::unique_ptr<const File> File::OpenUncompressedArchive(int fd, const std::string_view &filename,… in OpenUncompressedArchive()
544 trace::ScopedTrace scoped_trace("Open panda file " + std::string(filename)); in OpenUncompressedArchive()
545 auto file = os::file::File(fd); in OpenUncompressedArchive() local
546 if (!file.IsValid()) { in OpenUncompressedArchive()
547 …PLOG(ERROR, PANDAFILE) << "OpenUncompressedArchive: Failed to open panda file '" << filename << "'… in OpenUncompressedArchive()
551 if (size < sizeof(File::Header)) { in OpenUncompressedArchive()
552 …LOG(ERROR, PANDAFILE) << "Invalid panda file size '" << filename << "'" << ". Abc file is corrupte… in OpenUncompressedArchive()
558 … os::mem::MapFile(file, GetProt(open_mode), os::mem::MMAP_FLAG_PRIVATE, size, offset).ToConst(); in OpenUncompressedArchive()
560 PLOG(ERROR, PANDAFILE) << "Failed to map panda file '" << filename << "'"; in OpenUncompressedArchive()
567 return std::unique_ptr<File>(new File(filename.data(), std::move(ptr))); in OpenUncompressedArchive()
582 if (ptr.Get() == nullptr || ptr.GetSize() < sizeof(File::Header)) { in CheckHeader()
583 … LOG(ERROR, PANDAFILE) << "Invalid panda file '" << filename << "'" << ". Abc file is corrupted"; in CheckHeader()
586 auto header = reinterpret_cast<const File::Header *>(reinterpret_cast<uintptr_t>(ptr.Get())); in CheckHeader()
587 if (header->magic != File::MAGIC) { in CheckHeader()
588 LOG(ERROR, PANDAFILE) << "Invalid magic number" << ". Abc file is corrupted"; in CheckHeader()
594 if (header->file_size < sizeof(File::Header) || header->file_size > ptr.GetSize()) { in CheckHeader()
595 …LOG(ERROR, PANDAFILE) << "Invalid panda file size " << header->file_size << ". Abc file is corrupt… in CheckHeader()
600 LOG(ERROR, PANDAFILE) << "Invalid panda file foreign_off " << header->foreign_off << in CheckHeader()
601 " or foreign_size " << header->foreign_size << ". Abc file is corrupted"; in CheckHeader()
606 LOG(ERROR, PANDAFILE) << "Invalid panda file class_idx_off " << header->class_idx_off << in CheckHeader()
607 " or num_classes " << header->num_classes << ". Abc file is corrupted"; in CheckHeader()
612 LOG(ERROR, PANDAFILE) << "Invalid panda file lnp_idx_off " << header->lnp_idx_off << in CheckHeader()
613 " or num_lnps " << header->num_lnps << ". Abc file is corrupted"; in CheckHeader()
619 …LOG(ERROR, PANDAFILE) << "Invalid panda file literalarray_idx_off " << header->literalarray_idx_of… in CheckHeader()
621 ". Abc file is corrupted"; in CheckHeader()
626 …LOG(ERROR, PANDAFILE) << "Invalid panda file literalarray_idx_off " << header->literalarray_idx_of… in CheckHeader()
629 " Abc file is corrupted"; in CheckHeader()
634 if (!CheckHeaderElementOffset<File::IndexHeader>(header->index_section_off, header->num_indexes, in CheckHeader()
636 … LOG(ERROR, PANDAFILE) << "Invalid panda file index_section_off " << header->index_section_off << in CheckHeader()
637 " or num_indexes " << header->num_indexes << ". Abc file is corrupted"; in CheckHeader()
644 void CheckFileVersion(const std::array<uint8_t, File::VERSION_SIZE> &file_version, const std::strin… in CheckFileVersion()
655 … LOG(LOG_LEVEL, PANDAFILE) << "Unable to open file '" << filename << "' with abc file version " in CheckFileVersion()
657 …<< ". Minimum supported abc file version on the current system image is " << VersionToString(minVe… in CheckFileVersion()
659 << "or execute the abc file on former version of system image"; in CheckFileVersion()
661 … LOG(LOG_LEVEL, PANDAFILE) << "Unable to open file '" << filename << "' with abc file version " in CheckFileVersion()
663 …<< ". Maximum supported abc file version on the current system image is " << VersionToString(versi… in CheckFileVersion()
666 … LOG(LOG_LEVEL, PANDAFILE) << "Unable to open file '" << filename << "' with abc file version " in CheckFileVersion()
668 … << VersionToString(version) << ", while abc file version is " << VersionToString(file_version) in CheckFileVersion()
680 LOG(ERROR, PANDAFILE) << "Invalid panda file, data is null"; in GetFileType()
685 if (actualSize < sizeof(File::Header)) { in GetFileType()
686 LOG(ERROR, PANDAFILE) << "Invalid panda file, size=" << actualSize; in GetFileType()
690 auto header = reinterpret_cast<const File::Header *>(data); in GetFileType()
692 …LOG(ERROR, PANDAFILE) << "File actual size [" << actualSize << "] is not equal to Header's fileSiz… in GetFileType()
697 if (File::MAGIC != header->magic) { in GetFileType()
698 LOG(ERROR, PANDAFILE) << "Invalid magic number. Abc file is corrupted"; in GetFileType()
702 if (header->version == File::STATIC_VERSION) { in GetFileType()
709 std::unique_ptr<const File> File::OpenFromMemory(os::mem::ConstBytePtr &&ptr) in OpenFromMemory()
715 return std::unique_ptr<File>(new File("", std::forward<os::mem::ConstBytePtr>(ptr))); in OpenFromMemory()
719 std::unique_ptr<const File> File::OpenFromMemory(os::mem::ConstBytePtr &&ptr, std::string_view file… in OpenFromMemory()
721 trace::ScopedTrace scoped_trace("Open panda file from RAM " + std::string(filename)); in OpenFromMemory()
727 … return std::unique_ptr<File>(new File(filename.data(), std::forward<os::mem::ConstBytePtr>(ptr))); in OpenFromMemory()
730 File::EntityId File::GetClassId(const uint8_t *mutf8_name) const in GetClassId()
752 uint32_t File::CalcFilenameHash(const std::string &filename) in CalcFilenameHash()
757 File::EntityId File::GetLiteralArraysId() const in GetLiteralArraysId()
763 File::EntityId File::GetClassIdFromClassHashTable(const uint8_t *mutf8_name) const in GetClassIdFromClassHashTable()
771 return File::EntityId(); in GetClassIdFromClassHashTable()
776 auto entity_id = File::EntityId(entity_pair->entity_id_offset); in GetClassIdFromClassHashTable()
788 return File::EntityId(); in GetClassIdFromClassHashTable()
792 bool ContainsLiteralArrayInHeader(const std::array<uint8_t, File::VERSION_SIZE> &version) in ContainsLiteralArrayInHeader()
797 bool File::ValidateChecksum(uint32_t *cal_checksum_out) const in ValidateChecksum()
800 LOG(FATAL, PANDAFILE) << "Header pointer is nullptr. Abc file is corrupted"; in ValidateChecksum()
804 constexpr uint32_t FILE_CONTENT_OFFSET = File::MAGIC_SIZE + CHECKSUM_SIZE; in ValidateChecksum()
815 void File::ThrowIfWithCheck(bool cond, const std::string_view& msg, const std::string_view& tag) co… in ThrowIfWithCheck()
822 LOG(FATAL, PANDAFILE) << msg << ", checksum mismatch. The abc file has been corrupted. " in ThrowIfWithCheck()