issue 2351, fixed a bug that update core by easyinstall is failed.

git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.3.2@11197 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
flyskyko 2012-09-10 10:18:36 +00:00
parent 2c01573625
commit d95707a358

View file

@ -109,6 +109,7 @@ class tar {
// Read Files from archive // Read Files from archive
$tar_length = strlen($this->tar_file); $tar_length = strlen($this->tar_file);
$main_offset = 0; $main_offset = 0;
$flag_longlink = false;
while($main_offset < $tar_length) { while($main_offset < $tar_length) {
// If we read a block of 512 nulls, we are at the end of the archive // If we read a block of 512 nulls, we are at the end of the archive
if(substr($this->tar_file,$main_offset,512) == str_repeat(chr(0),512)) if(substr($this->tar_file,$main_offset,512) == str_repeat(chr(0),512))
@ -141,6 +142,8 @@ class tar {
// Parse Group name // Parse Group name
$file_gname = $this->__parseNullPaddedString(substr($this->tar_file,$main_offset + 297,32)); $file_gname = $this->__parseNullPaddedString(substr($this->tar_file,$main_offset + 297,32));
$file_type = substr($this->tar_file,$main_offset + 156,1);
// Make sure our file is valid // Make sure our file is valid
if($this->__computeUnsignedChecksum(substr($this->tar_file,$main_offset,512)) != $file_chksum) if($this->__computeUnsignedChecksum(substr($this->tar_file,$main_offset,512)) != $file_chksum)
return false; return false;
@ -159,42 +162,67 @@ class tar {
$activeFile["endheader"] = substr($this->tar_file,$main_offset + 500,12); $activeFile["endheader"] = substr($this->tar_file,$main_offset + 500,12);
*/ */
if($file_size > 0) { elseif(strtolower($file_type) == 'l' || $file_name == '././@LongLink')
// Increment number of files {
$this->numFiles++; $flag_longlink = true;
$longlink_name = $file_contents;
}
elseif($file_type == '0') {
// Increment number of files
$this->numFiles++;
// Create us a new file in our array // Create us a new file in our array
$activeFile = &$this->files[]; $activeFile = &$this->files[];
// Asign Values // Asign Values
$activeFile["name"] = $file_name; if($flag_longlink)
$activeFile["mode"] = $file_mode; {
$activeFile["size"] = $file_size; $activeFile["name"] = $longlink_name;
$activeFile["time"] = $file_time; }
$activeFile["user_id"] = $file_uid; else
$activeFile["group_id"] = $file_gid; {
$activeFile["user_name"] = $file_uname; $activeFile["name"] = $file_name;
$activeFile["group_name"] = $file_gname; }
$activeFile["checksum"] = $file_chksum; $activeFile["type"] = $file_type;
$activeFile["file"] = $file_contents; $activeFile["mode"] = $file_mode;
$activeFile["size"] = $file_size;
$activeFile["time"] = $file_time;
$activeFile["user_id"] = $file_uid;
$activeFile["group_id"] = $file_gid;
$activeFile["user_name"] = $file_uname;
$activeFile["group_name"] = $file_gname;
$activeFile["checksum"] = $file_chksum;
$activeFile["file"] = $file_contents;
} else { $flag_longlink = false;
// Increment number of directories
$this->numDirectories++;
// Create a new directory in our array } elseif($file_type == '5') {
$activeDir = &$this->directories[]; // Increment number of directories
$this->numDirectories++;
// Assign values // Create a new directory in our array
$activeDir["name"] = $file_name; $activeDir = &$this->directories[];
$activeDir["mode"] = $file_mode;
$activeDir["time"] = $file_time; // Assign values
$activeDir["user_id"] = $file_uid; if($flag_longlink)
$activeDir["group_id"] = $file_gid; {
$activeDir["user_name"] = $file_uname; $activeDir["name"] = $longlink_name;
$activeDir["group_name"] = $file_gname; }
$activeDir["checksum"] = $file_chksum; else
} {
$activeDir["name"] = $file_name;
}
$activeDir["type"] = $file_type;
$activeDir["mode"] = $file_mode;
$activeDir["time"] = $file_time;
$activeDir["user_id"] = $file_uid;
$activeDir["group_id"] = $file_gid;
$activeDir["user_name"] = $file_uname;
$activeDir["group_name"] = $file_gname;
$activeDir["checksum"] = $file_chksum;
$flag_longlink = false;
}
// Move our offset the number of blocks we have processed // Move our offset the number of blocks we have processed
$main_offset += 512 + (ceil($file_size / 512) * 512); $main_offset += 512 + (ceil($file_size / 512) * 512);