(bug 33471) compare detectProtocol to 'https'
[lhc/web/wiklou.git] / includes / Cdb_PHP.php
index 4f72f5f..02be65f 100644 (file)
@@ -6,6 +6,21 @@
  *    * Exception thrown if sizes or offsets are between 2GB and 4GB
  *    * Some variables renamed
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  */
 
@@ -277,15 +292,14 @@ class CdbWriter_PHP extends CdbWriter {
                $this->tmpFileName = $fileName . '.tmp.' . mt_rand( 0, 0x7fffffff );
                $this->handle = fopen( $this->tmpFileName, 'wb' );
                if ( !$this->handle ) {
-                       throw new MWException(
+                       $this->throwException(
                                'Unable to open CDB file "' . $this->tmpFileName . '" for write.' );
                }
                $this->hplist = array();
                $this->numentries = 0;
                $this->pos = 2048; // leaving space for the pointer array, 256 * 8
                if ( fseek( $this->handle, $this->pos ) == -1 ) {
-                       throw new MWException(
-                               'fseek failed in file "' . $this->tmpFileName . '".' );
+                       $this->throwException( 'fseek failed in file "' . $this->tmpFileName . '".' );
                }
        }
 
@@ -323,7 +337,7 @@ class CdbWriter_PHP extends CdbWriter {
                        unlink( $this->realFileName );
                }
                if ( !rename( $this->tmpFileName, $this->realFileName ) ) {
-                       throw new MWException( 'Unable to move the new CDB file into place.' );
+                       $this->throwException( 'Unable to move the new CDB file into place.' );
                }
                unset( $this->handle );
        }
@@ -335,7 +349,7 @@ class CdbWriter_PHP extends CdbWriter {
        protected function write( $buf ) {
                $len = fwrite( $this->handle, $buf );
                if ( $len !== strlen( $buf ) ) {
-                       throw new MWException( 'Error writing to CDB file "'.$this->tmpFileName.'".' );
+                       $this->throwException( 'Error writing to CDB file "'.$this->tmpFileName.'".' );
                }
        }
 
@@ -346,7 +360,7 @@ class CdbWriter_PHP extends CdbWriter {
        protected function posplus( $len ) {
                $newpos = $this->pos + $len;
                if ( $newpos > 0x7fffffff ) {
-                       throw new MWException( 
+                       $this->throwException(
                                'A value in the CDB file "'.$this->tmpFileName.'" is too large.' );
                }
                $this->pos = $newpos;
@@ -376,10 +390,10 @@ class CdbWriter_PHP extends CdbWriter {
         */
        protected function addbegin( $keylen, $datalen ) {
                if ( $keylen > 0x7fffffff ) {
-                       throw new MWException( 'Key length too long in file "'.$this->tmpFileName.'".' );
+                       $this->throwException( 'Key length too long in file "'.$this->tmpFileName.'".' );
                }
                if ( $datalen > 0x7fffffff ) {
-                       throw new MWException( 'Data length too long in file "'.$this->tmpFileName.'".' );
+                       $this->throwException( 'Data length too long in file "'.$this->tmpFileName.'".' );
                }
                $buf = pack( 'VV', $keylen, $datalen );
                $this->write( $buf );
@@ -454,8 +468,22 @@ class CdbWriter_PHP extends CdbWriter {
                // Write the pointer array at the start of the file
                rewind( $this->handle );
                if ( ftell( $this->handle ) != 0 ) {
-                       throw new MWException( 'Error rewinding to start of file "'.$this->tmpFileName.'".' );
+                       $this->throwException( 'Error rewinding to start of file "'.$this->tmpFileName.'".' );
                }
                $this->write( $final );
        }
+
+       /**
+        * Clean up the temp file and throw an exception
+        * 
+        * @param $msg string
+        * @throws MWException
+        */
+       protected function throwException( $msg ) {
+               if ( $this->handle ) {
+                       fclose( $this->handle );
+                       unlink( $this->tmpFileName );
+               }
+               throw new MWException( $msg );
+       }
 }