mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 18:03:56 -04:00
fix extract issues
This commit is contained in:
parent
a257cbbfba
commit
e816ad0599
@ -44,7 +44,7 @@ FileSpec::
|
|||||||
FileSpec() {
|
FileSpec() {
|
||||||
_size = 0;
|
_size = 0;
|
||||||
_timestamp = 0;
|
_timestamp = 0;
|
||||||
memset(_hash, 0, sizeof(_hash));
|
memset(_hash, 0, hash_size);
|
||||||
_got_hash = false;
|
_got_hash = false;
|
||||||
_actual_file = NULL;
|
_actual_file = NULL;
|
||||||
}
|
}
|
||||||
@ -61,7 +61,7 @@ FileSpec(const FileSpec ©) :
|
|||||||
_timestamp(copy._timestamp),
|
_timestamp(copy._timestamp),
|
||||||
_got_hash(copy._got_hash)
|
_got_hash(copy._got_hash)
|
||||||
{
|
{
|
||||||
memcpy(_hash, copy._hash, sizeof(_hash));
|
memcpy(_hash, copy._hash, hash_size);
|
||||||
_actual_file = NULL;
|
_actual_file = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,8 +74,8 @@ void FileSpec::
|
|||||||
operator = (const FileSpec ©) {
|
operator = (const FileSpec ©) {
|
||||||
_filename = copy._filename;
|
_filename = copy._filename;
|
||||||
_size = copy._size;
|
_size = copy._size;
|
||||||
_timestamp = copy._size;
|
_timestamp = copy._timestamp;
|
||||||
memcpy(_hash, copy._hash, sizeof(_hash));
|
memcpy(_hash, copy._hash, hash_size);
|
||||||
_got_hash = copy._got_hash;
|
_got_hash = copy._got_hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ check_hash(const string &pathname) const {
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
bool FileSpec::
|
bool FileSpec::
|
||||||
read_hash(const string &pathname) {
|
read_hash(const string &pathname) {
|
||||||
memset(_hash, 0, sizeof(_hash));
|
memset(_hash, 0, hash_size);
|
||||||
|
|
||||||
ifstream stream(pathname.c_str(), ios::in | ios::binary);
|
ifstream stream(pathname.c_str(), ios::in | ios::binary);
|
||||||
if (!stream) {
|
if (!stream) {
|
||||||
|
@ -19,16 +19,8 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <sys/utime.h>
|
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
#define stat _stat
|
|
||||||
#define utime _utime
|
|
||||||
#define utimbuf _utimbuf
|
|
||||||
|
|
||||||
#else
|
|
||||||
#include <utime.h>
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// This sequence of bytes begins each Multifile to identify it as a
|
// This sequence of bytes begins each Multifile to identify it as a
|
||||||
@ -103,7 +95,8 @@ extract_all(const string &to_dir, P3DPackage *package,
|
|||||||
Subfiles::iterator si;
|
Subfiles::iterator si;
|
||||||
for (si = _subfiles.begin(); si != _subfiles.end(); ++si) {
|
for (si = _subfiles.begin(); si != _subfiles.end(); ++si) {
|
||||||
const Subfile &s = (*si);
|
const Subfile &s = (*si);
|
||||||
if (package != NULL && !package->is_extractable(s._filename)) {
|
FileSpec file;
|
||||||
|
if (package != NULL && !package->is_extractable(file, s._filename)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,15 +114,16 @@ extract_all(const string &to_dir, P3DPackage *package,
|
|||||||
if (!extract_subfile(out, s)) {
|
if (!extract_subfile(out, s)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the timestamp according to the multifile.
|
|
||||||
out.close();
|
out.close();
|
||||||
utimbuf utb;
|
|
||||||
utb.actime = time(NULL);
|
|
||||||
utb.modtime = s._timestamp;
|
|
||||||
utime(output_pathname.c_str(), &utb);
|
|
||||||
|
|
||||||
// Be sure to execute permissions on the file, in case it's a
|
// Check that the file was extracted correctly (and also set the
|
||||||
|
// correct timestamp).
|
||||||
|
if (!file.full_verify(to_dir)) {
|
||||||
|
nout << "After extracting, " << s._filename << " is still incorrect.\n";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Be sure to set execute permissions on the file, in case it's a
|
||||||
// program or something.
|
// program or something.
|
||||||
chmod(output_pathname.c_str(), 0555);
|
chmod(output_pathname.c_str(), 0555);
|
||||||
|
|
||||||
|
@ -810,6 +810,10 @@ build_install_plans(TiXmlDocument *doc) {
|
|||||||
(this, new_file, source_file, target_file);
|
(this, new_file, source_file, target_file);
|
||||||
plan.push_back(step);
|
plan.push_back(step);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Unpack the uncompressed archive.
|
||||||
|
step = new InstallStepUnpackArchive(this, _unpack_size);
|
||||||
|
plan.push_back(step);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1052,13 +1056,15 @@ start_download(P3DPackage::DownloadType dtype, const string &urlbase,
|
|||||||
// Function: P3DPackage::is_extractable
|
// Function: P3DPackage::is_extractable
|
||||||
// Access: Private
|
// Access: Private
|
||||||
// Description: Returns true if the name file is on the extract list,
|
// Description: Returns true if the name file is on the extract list,
|
||||||
// false otherwise.
|
// false otherwise. If true, fills in the FileSpec with
|
||||||
|
// the file's information.
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
bool P3DPackage::
|
bool P3DPackage::
|
||||||
is_extractable(const string &filename) const {
|
is_extractable(FileSpec &file, const string &filename) const {
|
||||||
Extracts::const_iterator ei;
|
Extracts::const_iterator ei;
|
||||||
for (ei = _extracts.begin(); ei != _extracts.end(); ++ei) {
|
for (ei = _extracts.begin(); ei != _extracts.end(); ++ei) {
|
||||||
if ((*ei).get_filename() == filename) {
|
if ((*ei).get_filename() == filename) {
|
||||||
|
file = (*ei);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -207,7 +207,7 @@ private:
|
|||||||
Download *start_download(DownloadType dtype, const string &urlbase,
|
Download *start_download(DownloadType dtype, const string &urlbase,
|
||||||
const string &pathname, const FileSpec &file_spec);
|
const string &pathname, const FileSpec &file_spec);
|
||||||
|
|
||||||
bool is_extractable(const string &filename) const;
|
bool is_extractable(FileSpec &file, const string &filename) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
P3DHost *_host;
|
P3DHost *_host;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user