summaryrefslogtreecommitdiffstats
path: root/lib/private/files
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2014-05-30 16:13:48 +0200
committerThomas Müller <thomas.mueller@tmit.eu>2014-05-30 16:13:48 +0200
commit31ad1cbdd8884844fb58cd6140fb2a0387ebe5e2 (patch)
tree3981e3c1b7fc001c38971856bbc050b5c041167d /lib/private/files
parent2ba5701b1af3ba37061fa0e5fa85aac7abaabea4 (diff)
parent129d8099b948c0b5c7456af42cf9a618f5f6920d (diff)
downloadnextcloud-server-31ad1cbdd8884844fb58cd6140fb2a0387ebe5e2.tar.gz
nextcloud-server-31ad1cbdd8884844fb58cd6140fb2a0387ebe5e2.zip
Merge pull request #5365 from owncloud/filesize-improvements-32bit
Add LargeFileHelper / Add CURL filesize workaround / Fix some 32-bit filesize issues
Diffstat (limited to 'lib/private/files')
-rw-r--r--lib/private/files/cache/cache.php10
-rw-r--r--lib/private/files/cache/homecache.php6
-rw-r--r--lib/private/files/storage/local.php52
-rw-r--r--lib/private/files/storage/mappedlocal.php52
4 files changed, 29 insertions, 91 deletions
diff --git a/lib/private/files/cache/cache.php b/lib/private/files/cache/cache.php
index 3e4f6dfb132..59963f41e3d 100644
--- a/lib/private/files/cache/cache.php
+++ b/lib/private/files/cache/cache.php
@@ -142,11 +142,11 @@ class Cache {
} else {
//fix types
$data['fileid'] = (int)$data['fileid'];
- $data['size'] = (int)$data['size'];
+ $data['size'] = 0 + $data['size'];
$data['mtime'] = (int)$data['mtime'];
$data['storage_mtime'] = (int)$data['storage_mtime'];
$data['encrypted'] = (bool)$data['encrypted'];
- $data['unencrypted_size'] = (int)$data['unencrypted_size'];
+ $data['unencrypted_size'] = 0 + $data['unencrypted_size'];
$data['storage'] = $this->storageId;
$data['mimetype'] = $this->getMimetype($data['mimetype']);
$data['mimepart'] = $this->getMimetype($data['mimepart']);
@@ -532,9 +532,9 @@ class Cache {
$result = \OC_DB::executeAudited($sql, array($id, $this->getNumericStorageId()));
if ($row = $result->fetchRow()) {
list($sum, $min, $unencryptedSum) = array_values($row);
- $sum = (int)$sum;
- $min = (int)$min;
- $unencryptedSum = (int)$unencryptedSum;
+ $sum = 0 + $sum;
+ $min = 0 + $min;
+ $unencryptedSum = 0 + $unencryptedSum;
if ($min === -1) {
$totalSize = $min;
} else {
diff --git a/lib/private/files/cache/homecache.php b/lib/private/files/cache/homecache.php
index 2326c46e8d0..f61769f0b9b 100644
--- a/lib/private/files/cache/homecache.php
+++ b/lib/private/files/cache/homecache.php
@@ -36,8 +36,10 @@ class HomeCache extends Cache {
$result = \OC_DB::executeAudited($sql, array($id, $this->getNumericStorageId()));
if ($row = $result->fetchRow()) {
list($sum, $unencryptedSum) = array_values($row);
- $totalSize = (int)$sum;
- $unencryptedSize = (int)$unencryptedSum;
+ $totalSize = 0 + $sum;
+ $unencryptedSize = 0 + $unencryptedSum;
+ $entry['size'] += 0;
+ $entry['unencrypted_size'] += 0;
if ($entry['size'] !== $totalSize) {
$this->update($id, array('size' => $totalSize));
}
diff --git a/lib/private/files/storage/local.php b/lib/private/files/storage/local.php
index 943c4163088..e33747bbd52 100644
--- a/lib/private/files/storage/local.php
+++ b/lib/private/files/storage/local.php
@@ -89,11 +89,10 @@ if (\OC_Util::runningOnWindows()) {
public function stat($path) {
$fullPath = $this->datadir . $path;
$statResult = stat($fullPath);
-
- if ($statResult['size'] < 0) {
- $size = self::getFileSizeFromOS($fullPath);
- $statResult['size'] = $size;
- $statResult[7] = $size;
+ if (PHP_INT_SIZE === 4 && !$this->is_dir($path)) {
+ $filesize = $this->filesize($path);
+ $statResult['size'] = $filesize;
+ $statResult[7] = $filesize;
}
return $statResult;
}
@@ -109,15 +108,13 @@ if (\OC_Util::runningOnWindows()) {
public function filesize($path) {
if ($this->is_dir($path)) {
return 0;
- } else {
- $fullPath = $this->datadir . $path;
- $fileSize = filesize($fullPath);
- if ($fileSize < 0) {
- return self::getFileSizeFromOS($fullPath);
- }
-
- return $fileSize;
}
+ $fullPath = $this->datadir . $path;
+ if (PHP_INT_SIZE === 4) {
+ $helper = new \OC\LargeFileHelper;
+ return $helper->getFilesize($fullPath);
+ }
+ return filesize($fullPath);
}
public function isReadable($path) {
@@ -220,35 +217,6 @@ if (\OC_Util::runningOnWindows()) {
return $return;
}
- /**
- * @param string $fullPath
- */
- private static function getFileSizeFromOS($fullPath) {
- $name = strtolower(php_uname('s'));
- // Windows OS: we use COM to access the filesystem
- if (strpos($name, 'win') !== false) {
- if (class_exists('COM')) {
- $fsobj = new \COM("Scripting.FileSystemObject");
- $f = $fsobj->GetFile($fullPath);
- return $f->Size;
- }
- } else if (strpos($name, 'bsd') !== false) {
- if (\OC_Helper::is_function_enabled('exec')) {
- return (float)exec('stat -f %z ' . escapeshellarg($fullPath));
- }
- } else if (strpos($name, 'linux') !== false) {
- if (\OC_Helper::is_function_enabled('exec')) {
- return (float)exec('stat -c %s ' . escapeshellarg($fullPath));
- }
- } else {
- \OC_Log::write('core',
- 'Unable to determine file size of "' . $fullPath . '". Unknown OS: ' . $name,
- \OC_Log::ERROR);
- }
-
- return 0;
- }
-
public function hash($type, $path, $raw = false) {
return hash_file($type, $this->datadir . $path, $raw);
}
diff --git a/lib/private/files/storage/mappedlocal.php b/lib/private/files/storage/mappedlocal.php
index 3ebdcf9538f..ea4deaa66e8 100644
--- a/lib/private/files/storage/mappedlocal.php
+++ b/lib/private/files/storage/mappedlocal.php
@@ -111,11 +111,10 @@ class MappedLocal extends \OC\Files\Storage\Common {
public function stat($path) {
$fullPath = $this->buildPath($path);
$statResult = stat($fullPath);
-
- if ($statResult['size'] < 0) {
- $size = self::getFileSizeFromOS($fullPath);
- $statResult['size'] = $size;
- $statResult[7] = $size;
+ if (PHP_INT_SIZE === 4 && !$this->is_dir($path)) {
+ $filesize = $this->filesize($path);
+ $statResult['size'] = $filesize;
+ $statResult[7] = $filesize;
}
return $statResult;
}
@@ -131,15 +130,13 @@ class MappedLocal extends \OC\Files\Storage\Common {
public function filesize($path) {
if ($this->is_dir($path)) {
return 0;
- } else {
- $fullPath = $this->buildPath($path);
- $fileSize = filesize($fullPath);
- if ($fileSize < 0) {
- return self::getFileSizeFromOS($fullPath);
- }
-
- return $fileSize;
}
+ $fullPath = $this->buildPath($path);
+ if (PHP_INT_SIZE === 4) {
+ $helper = new \OC\LargeFileHelper;
+ return $helper->getFilesize($fullPath);
+ }
+ return filesize($fullPath);
}
public function isReadable($path) {
@@ -294,35 +291,6 @@ class MappedLocal extends \OC\Files\Storage\Common {
return $return;
}
- /**
- * @param string $fullPath
- */
- private static function getFileSizeFromOS($fullPath) {
- $name = strtolower(php_uname('s'));
- // Windows OS: we use COM to access the filesystem
- if (strpos($name, 'win') !== false) {
- if (class_exists('COM')) {
- $fsobj = new \COM("Scripting.FileSystemObject");
- $f = $fsobj->GetFile($fullPath);
- return $f->Size;
- }
- } else if (strpos($name, 'bsd') !== false) {
- if (\OC_Helper::is_function_enabled('exec')) {
- return (float)exec('stat -f %z ' . escapeshellarg($fullPath));
- }
- } else if (strpos($name, 'linux') !== false) {
- if (\OC_Helper::is_function_enabled('exec')) {
- return (float)exec('stat -c %s ' . escapeshellarg($fullPath));
- }
- } else {
- \OC_Log::write('core',
- 'Unable to determine file size of "' . $fullPath . '". Unknown OS: ' . $name,
- \OC_Log::ERROR);
- }
-
- return 0;
- }
-
public function hash($type, $path, $raw = false) {
return hash_file($type, $this->buildPath($path), $raw);
}