Merge pull request #77361 from jpcerrone/fix_pck_path_inconsistencies
Fix PCK file path inconsistencies
This commit is contained in:
commit
fa971b7b5e
@ -48,7 +48,8 @@ Error PackedData::add_pack(const String &p_path, bool p_replace_files, uint64_t
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PackedData::add_path(const String &p_pkg_path, const String &p_path, uint64_t p_ofs, uint64_t p_size, const uint8_t *p_md5, PackSource *p_src, bool p_replace_files, bool p_encrypted) {
|
void PackedData::add_path(const String &p_pkg_path, const String &p_path, uint64_t p_ofs, uint64_t p_size, const uint8_t *p_md5, PackSource *p_src, bool p_replace_files, bool p_encrypted) {
|
||||||
PathMD5 pmd5(p_path.md5_buffer());
|
String simplified_path = p_path.simplify_path();
|
||||||
|
PathMD5 pmd5(simplified_path.md5_buffer());
|
||||||
|
|
||||||
bool exists = files.has(pmd5);
|
bool exists = files.has(pmd5);
|
||||||
|
|
||||||
@ -68,7 +69,7 @@ void PackedData::add_path(const String &p_pkg_path, const String &p_path, uint64
|
|||||||
|
|
||||||
if (!exists) {
|
if (!exists) {
|
||||||
//search for dir
|
//search for dir
|
||||||
String p = p_path.replace_first("res://", "");
|
String p = simplified_path.replace_first("res://", "");
|
||||||
PackedDir *cd = root;
|
PackedDir *cd = root;
|
||||||
|
|
||||||
if (p.contains("/")) { //in a subdir
|
if (p.contains("/")) { //in a subdir
|
||||||
@ -87,7 +88,7 @@ void PackedData::add_path(const String &p_pkg_path, const String &p_path, uint64
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
String filename = p_path.get_file();
|
String filename = simplified_path.get_file();
|
||||||
// Don't add as a file if the path points to a directory
|
// Don't add as a file if the path points to a directory
|
||||||
if (!filename.is_empty()) {
|
if (!filename.is_empty()) {
|
||||||
cd->files.insert(filename);
|
cd->files.insert(filename);
|
||||||
|
@ -184,7 +184,8 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
Ref<FileAccess> PackedData::try_open_path(const String &p_path) {
|
Ref<FileAccess> PackedData::try_open_path(const String &p_path) {
|
||||||
PathMD5 pmd5(p_path.md5_buffer());
|
String simplified_path = p_path.simplify_path();
|
||||||
|
PathMD5 pmd5(simplified_path.md5_buffer());
|
||||||
HashMap<PathMD5, PackedFile, PathMD5>::Iterator E = files.find(pmd5);
|
HashMap<PathMD5, PackedFile, PathMD5>::Iterator E = files.find(pmd5);
|
||||||
if (!E) {
|
if (!E) {
|
||||||
return nullptr; //not found
|
return nullptr; //not found
|
||||||
@ -197,7 +198,7 @@ Ref<FileAccess> PackedData::try_open_path(const String &p_path) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool PackedData::has_path(const String &p_path) {
|
bool PackedData::has_path(const String &p_path) {
|
||||||
return files.has(PathMD5(p_path.md5_buffer()));
|
return files.has(PathMD5(p_path.simplify_path().md5_buffer()));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PackedData::has_directory(const String &p_path) {
|
bool PackedData::has_directory(const String &p_path) {
|
||||||
|
@ -115,7 +115,9 @@ Error PCKPacker::add_file(const String &p_file, const String &p_src, bool p_encr
|
|||||||
}
|
}
|
||||||
|
|
||||||
File pf;
|
File pf;
|
||||||
pf.path = p_file;
|
// Simplify path here and on every 'files' access so that paths that have extra '/'
|
||||||
|
// symbols in them still match to the MD5 hash for the saved path.
|
||||||
|
pf.path = p_file.simplify_path();
|
||||||
pf.src_path = p_src;
|
pf.src_path = p_src;
|
||||||
pf.ofs = ofs;
|
pf.ofs = ofs;
|
||||||
pf.size = f->get_length();
|
pf.size = f->get_length();
|
||||||
|
Loading…
Reference in New Issue
Block a user