Put the filename in more of the exceptions thrown
authorAaron Schulz <aaron@users.mediawiki.org>
Wed, 15 Feb 2012 20:06:47 +0000 (20:06 +0000)
committerAaron Schulz <aaron@users.mediawiki.org>
Wed, 15 Feb 2012 20:06:47 +0000 (20:06 +0000)
includes/Cdb_PHP.php

index e1e6d28..4f72f5f 100644 (file)
@@ -82,6 +82,9 @@ class CdbFunctions {
  * CDB reader class
  */
 class CdbReader_PHP extends CdbReader {
+       /** The filename */
+       var $fileName;
+
        /** The file handle */
        var $handle;
 
@@ -110,9 +113,10 @@ class CdbReader_PHP extends CdbReader {
         * @param $fileName string
         */
        function __construct( $fileName ) {
+               $this->fileName = $fileName;
                $this->handle = fopen( $fileName, 'rb' );
                if ( !$this->handle ) {
-                       throw new MWException( 'Unable to open CDB file "' . $fileName . '"' );
+                       throw new MWException( 'Unable to open CDB file "' . $this->fileName . '".' );
                }
                $this->findStart();
        }
@@ -160,7 +164,8 @@ class CdbReader_PHP extends CdbReader {
        protected function read( $length, $pos ) {
                if ( fseek( $this->handle, $pos ) == -1 ) {
                        // This can easily happen if the internal pointers are incorrect
-                       throw new MWException( __METHOD__.': seek failed, file may be corrupted.' );
+                       throw new MWException( 
+                               'Seek failed, file "' . $this->fileName . '" may be corrupted.' );
                }
 
                if ( $length == 0 ) {
@@ -169,7 +174,8 @@ class CdbReader_PHP extends CdbReader {
 
                $buf = fread( $this->handle, $length );
                if ( $buf === false || strlen( $buf ) !== $length ) {
-                       throw new MWException( __METHOD__.': read from CDB file failed, file may be corrupted' );
+                       throw new MWException(
+                               'Read from CDB file failed, file "' . $this->fileName . '" may be corrupted.' );
                }
                return $buf;
        }
@@ -182,7 +188,8 @@ class CdbReader_PHP extends CdbReader {
        protected function unpack31( $s ) {
                $data = unpack( 'V', $s );
                if ( $data[1] > 0x7fffffff ) {
-                       throw new MWException( __METHOD__.': error in CDB file, integer too big' );
+                       throw new MWException( 
+                               'Error in CDB file "' . $this->fileName . '", integer too big.' );
                }
                return $data[1];
        }
@@ -270,13 +277,15 @@ 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( 'Unable to open CDB file for write "' . $fileName . '"' );
+                       throw new MWException(
+                               '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( __METHOD__.': fseek failed' );
+                       throw new MWException(
+                               'fseek failed in file "' . $this->tmpFileName . '".' );
                }
        }
 
@@ -326,7 +335,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.' );
+                       throw new MWException( 'Error writing to CDB file "'.$this->tmpFileName.'".' );
                }
        }
 
@@ -337,7 +346,8 @@ class CdbWriter_PHP extends CdbWriter {
        protected function posplus( $len ) {
                $newpos = $this->pos + $len;
                if ( $newpos > 0x7fffffff ) {
-                       throw new MWException( 'A value in the CDB file is too large' );
+                       throw new MWException( 
+                               'A value in the CDB file "'.$this->tmpFileName.'" is too large.' );
                }
                $this->pos = $newpos;
        }
@@ -366,10 +376,10 @@ class CdbWriter_PHP extends CdbWriter {
         */
        protected function addbegin( $keylen, $datalen ) {
                if ( $keylen > 0x7fffffff ) {
-                       throw new MWException( __METHOD__.': key length too long' );
+                       throw new MWException( 'Key length too long in file "'.$this->tmpFileName.'".' );
                }
                if ( $datalen > 0x7fffffff ) {
-                       throw new MWException( __METHOD__.': data length too long' );
+                       throw new MWException( 'Data length too long in file "'.$this->tmpFileName.'".' );
                }
                $buf = pack( 'VV', $keylen, $datalen );
                $this->write( $buf );
@@ -444,7 +454,7 @@ 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( __METHOD__.': Error rewinding to start of file' );
+                       throw new MWException( 'Error rewinding to start of file "'.$this->tmpFileName.'".' );
                }
                $this->write( $final );
        }