From c5580572a15003e3c2fb1d9cbd7c2baafe14bb5a Mon Sep 17 00:00:00 2001 From: donncha Date: Fri, 7 Jul 2006 14:37:58 +0000 Subject: WP Merge git-svn-id: http://svn.automattic.com/wordpress-mu/trunk@643 7be80a69-a1ef-0310-a953-fb0f7c49ff36 --- wp-includes/gettext.php | 19 ++++++++----------- wp-includes/streams.php | 11 +++++++++-- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/wp-includes/gettext.php b/wp-includes/gettext.php index ad605cf..cd08044 100644 --- a/wp-includes/gettext.php +++ b/wp-includes/gettext.php @@ -61,15 +61,12 @@ class gettext_reader { * @return Integer from the Stream */ function readint() { - $stream = $this->STREAM->read(4); if ($this->BYTEORDER == 0) { // low endian - $unpacked = unpack('V',$stream); - return array_shift($unpacked); + return array_shift(unpack('V', $this->STREAM->read(4))); } else { // big endian - $unpacked = unpack('N',$stream); - return array_shift($unpacked); + return array_shift(unpack('N', $this->STREAM->read(4))); } } @@ -97,7 +94,7 @@ class gettext_reader { */ function gettext_reader($Reader, $enable_cache = true) { // If there isn't a StreamReader, turn on short circuit mode. - if (! $Reader) { + if (! $Reader || isset($Reader->error) ) { $this->short_circuit = true; return; } @@ -105,16 +102,16 @@ class gettext_reader { // Caching can be turned off $this->enable_cache = $enable_cache; - // $MAGIC1 = (int)0x950412de; //bug in PHP 5 + // $MAGIC1 = (int)0x950412de; //bug in PHP 5.0.2, see https://savannah.nongnu.org/bugs/?func=detailitem&item_id=10565 $MAGIC1 = (int) - 1794895138; // $MAGIC2 = (int)0xde120495; //bug $MAGIC2 = (int) - 569244523; $this->STREAM = $Reader; $magic = $this->readint(); - if ($magic == $MAGIC1) { + if ($magic == ($MAGIC1 & 0xFFFFFFFF)) { // to make sure it works for 64-bit platforms $this->BYTEORDER = 0; - } elseif ($magic == $MAGIC2) { + } elseif ($magic == ($MAGIC2 & 0xFFFFFFFF)) { $this->BYTEORDER = 1; } else { $this->error = 1; // not MO file @@ -282,7 +279,7 @@ class gettext_reader { } else { $header = $this->get_translation_string(0); } - if (eregi("plural-forms: (.*)\n", $header, $regs)) + if (eregi("plural-forms: ([^\n]*)\n", $header, $regs)) $expr = $regs[1]; else $expr = "nplurals=2; plural=n == 1 ? 0 : 1;"; @@ -308,7 +305,7 @@ class gettext_reader { $plural = 0; eval("$string"); - if ($plural >= $total) $plural = 0; + if ($plural >= $total) $plural = $total - 1; return $plural; } diff --git a/wp-includes/streams.php b/wp-includes/streams.php index c69841e..8cf1c48 100644 --- a/wp-includes/streams.php +++ b/wp-includes/streams.php @@ -105,7 +105,14 @@ class FileReader { function read($bytes) { if ($bytes) { fseek($this->_fd, $this->_pos); - $data = fread($this->_fd, $bytes); + + // PHP 5.1.1 does not read more than 8192 bytes in one fread() + // the discussions at PHP Bugs suggest it's the intended behaviour + while ($bytes > 0) { + $chunk = fread($this->_fd, $bytes); + $data .= $chunk; + $bytes -= strlen($chunk); + } $this->_pos = ftell($this->_fd); return $data; @@ -156,4 +163,4 @@ class CachedFileReader extends StringReader { } -?> \ No newline at end of file +?> -- cgit