rhaco

今後rhacoを使おうと思って触ってみる
Windowsだとフォルダ作成でエラーが出てしまう(無条件に頭にスラッシュが付いてしまうので、Windowsだとエラーになってしまうのです。)のでパッチを作ってみました。バージョンは1.1.0です。
ま、Windowsでやるな・・・という話しもありますが。
ソースはPEARのSystem::mkDirからパクりました・・・

@@ -288,22 +288,19 @@
 		$source = FileUtil::parseFilename($source);
 
 		if(!FileUtil::isDir($source)){
-			$paths	= array();
-			$cur	= "";
-			foreach(explode("/",$source) as $path){
-				$cur = (!empty($path)) ? $cur."/".$path : $cur;
-				if(!empty($cur))	$paths[$cur] = $cur;
-			}
-			ksort($paths);
-			foreach($paths as $path){
-				if(!is_dir($path)){
-					$bool = (empty($permission)) ? mkdir($path) : mkdir($path,eval(sprintf("return %04d;",$permission)));
-					if($bool === false){
-						ExceptionTrigger::raise(new PermissionException($path));
-						return false;
-					}
-				}
-			}
+            $path = $source;
+            $dirstack = array();
+            while (!@is_dir($path) && $path != DIRECTORY_SEPARATOR) {
+                array_unshift($dirstack, $path);
+                $path = dirname($path);
+            }
+            while ($path = array_shift($dirstack)) {
+                $bool = (empty($permission)) ? mkdir($path) : mkdir($path,eval(sprintf("return %04d;",$permission)));
+                if($bool === false){
+                    ExceptionTrigger::raise(new PermissionException($path));
+                    return false;
+                }
+            }
 		}
 		if(!empty($permission)) FileUtil::chmod($source,$permission);
 		return true;