templates\index.tpl

@@ -36,9 +36,9 @@
             <div id="fileList">
                 <table border="0" cellspacing="2" cellpadding="3">
 <?php
 $oddrow = true;
-$preLen = strlen(CbIOHelper::getCommonPathPrefix(array_keys($fileList))) + 1;
+$preLen = strlen(CbIOHelper::getCommonPathPrefix(array_keys($fileList)));

 // Find out which types of errors have been found
 $occuringErrorTypes = array (
     'CPD'        => false,
@@ -70,8 +70,9 @@
 foreach ($fileList as $filename => $f) {
     $tag = $oddrow ? 'odd' : 'even';
     $oddrow = !$oddrow;
     $shortName = substr($filename, $preLen);
+    $shortName = str_replace('\\', '/', $shortName);
     $errors = $f->getErrorCount();
     $warnings = $f->getWarningCount();

     $counts = array_fill_keys($occuringErrorTypes, '');
@@ -80,9 +81,9 @@
         $counts[$issue->foundBy] += 1;
     }

     echo "<tr class='$tag'>";
-    echo "<td><a class='fileLink' href='$shortName.html'>$shortName</a></td>";
+    echo "<td><a class='fileLink' href='./$shortName.html'>$shortName</a></td>";
     echo "<td align='center'><span class='errorCount'>$errors</span></td>";
     echo "<td align='center'><span class='warningCount'>$warnings</span></td>";

     foreach ($counts as $count) {

File.php

@@ -212,9 +212,9 @@
         $first = $first->name();
         $second = $second->name();

         $prefix = CbIOHelper::getCommonPathPrefix(array($first, $second));
-        $prelen = strlen($prefix) + 1;
+        $prelen = strlen($prefix);

         $first = substr($first, $prelen);
         $second = substr($second, $prelen);

Helper\IOHelper.php

@@ -151,9 +151,10 @@
     {
         if (DIRECTORY_SEPARATOR == substr($target, - 1, 1)) {
             $target = substr($target, 0, -1);
         }
-        $dirs = explode('/', $target);
+        $dirs = explode(DIRECTORY_SEPARATOR, $target);
         $path = '';
         foreach ($dirs as $folder) {
             if (!is_dir($path = $path . $folder . DIRECTORY_SEPARATOR)) {
                 mkdir($path);
@@ -246,8 +247,12 @@
         $prefix = dirname(array_shift($filenames));
         foreach ($filenames as $filename) {
             $prefix = self::_getCommonPathPrefix($prefix, $filename);
         }
+
+        if (substr($prefix, -1, 1) !== DIRECTORY_SEPARATOR) {
+            $prefix .= DIRECTORY_SEPARATOR;
+        }
         return $prefix;
     }

     /**
@@ -260,9 +265,10 @@
     {
         if (strpos($path, $currentPrefix . DIRECTORY_SEPARATOR) === 0
                 || $currentPrefix == '/'
                 || $currentPrefix == ''
-                || $currentPrefix == '.') {
+                || $currentPrefix == '.'
+                || preg_match('/^[A-Z]\:\\\\\$/', $currentPrefix) === 1) {
             return $currentPrefix;
         }
         return self::_getCommonPathPrefix(dirname($currentPrefix), $path);
     }

View\ViewAbstract.php

@@ -113,9 +113,10 @@
         if (!$this->_outputDir) {
             throw new Exception("Specified output directory '$outputDir'"
                                 . 'does not exist');
         }
-
+        $this->_outputDir .= DIRECTORY_SEPARATOR;
+
         $this->_ioHelper = $ioHelper;
     }

     /**
@@ -181,10 +182,9 @@
          * In this method, all directories have a trailing DIRECTORY_SEPARATOR.
          * This is important so that $curDir doesn't become empty if we go
          * up to the root directory ('/' on linux)
          */
-        $curDir = CbIOHelper::getCommonPathPrefix(array_keys($fileList))
-            . DIRECTORY_SEPARATOR;
+        $curDir = CbIOHelper::getCommonPathPrefix(array_keys($fileList));
         $preLen = strlen($curDir);

         $ret = '<ul>';
         foreach ($fileList as $name => $file) {
@@ -213,8 +213,9 @@
                 }
                 $curDir = $dir;
             }

+            $name = str_replace('\\', '/', $name);
             $shortName = substr($name, $preLen);
             $fileName  = basename($name);
             $count = '';
             if ($file->getErrorCount() != 0 || $file->getWarningCount() != 0) {