From df29eec72b2b094acca97636c6b91ab2eafc245d Mon Sep 17 00:00:00 2001
From: Andreas Fischer <bantu@owncloud.com>
Date: Sun, 9 Feb 2014 16:16:01 +0100
Subject: [PATCH] Windows exec() implementation.

---
 lib/private/largefilehelper.php | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/lib/private/largefilehelper.php b/lib/private/largefilehelper.php
index 751e60de539..5f5e14aca35 100644
--- a/lib/private/largefilehelper.php
+++ b/lib/private/largefilehelper.php
@@ -92,17 +92,26 @@ class LargeFileHelper {
 	public function getFilesizeViaExec($filename) {
 		if (\OC_Helper::is_function_enabled('exec')) {
 			$os = strtolower(php_uname('s'));
+			$arg = escapeshellarg($filename);
 			$result = '';
 			if (strpos($os, 'linux') !== false) {
-				$result = trim(exec('stat -c %s ' . escapeshellarg($filename)));
+				$result = $this->exec("stat -c %s $arg");
 			} else if (strpos($os, 'bsd') !== false) {
-				$result = trim(exec('stat -f %z ' . escapeshellarg($filename)));
-			}
-
-			if (ctype_digit($result)) {
-				return 0 + $result;
+				$result = $this->exec("stat -f %z $arg");
+			} else if (strpos($os, 'win') !== false) {
+				$result = $this->exec("for %F in ($arg) do @echo %~zF");
+				if (is_null($result)) {
+					// PowerShell
+					$result = $this->exec("(Get-Item $arg).length");
+				}
 			}
+			return $result;
 		}
 		return null;
 	}
+
+	protected function exec($cmd) {
+		$result = trim(exec($cmd));
+		return ctype_digit($result) ? 0 + $result : null;
+	}
 }
-- 
GitLab