return Fallback::mb_strrpos( $haystack, $needle, $offset, $encoding );
}
}
+
+// gzdecode function only exists in PHP >= 5.4.0
+// http://php.net/gzdecode
+if ( !function_exists( 'gzdecode' ) ) {
+ /**
+ * @codeCoverageIgnore
+ * @return string
+ */
+ function gzdecode( $data ) {
+ return gzinflate( substr( $data, 10, -8 ) );
+ }
+}
/// @endcond
/**
}
/**
- * @param $a
- * @param $b
+ * @param $a array|string
+ * @param $b array|string
* @return int
*/
function wfArrayDiff2_cmp( $a, $b ) {
- if ( !is_array( $a ) ) {
+ if ( is_string( $a ) && is_string( $b ) ) {
return strcmp( $a, $b );
} elseif ( count( $a ) !== count( $b ) ) {
return count( $a ) < count( $b ) ? -1 : 1;
* Throw a debugging exception. This function previously once exited the process,
* but now throws an exception instead, with similar results.
*
+ * @deprecated since 1.22; just throw an MWException yourself
* @param string $msg message shown when dying.
* @throws MWException
*/
function wfDebugDieBacktrace( $msg = '' ) {
+ wfDeprecated( __FUNCTION__, '1.22' );
throw new MWException( $msg );
}
"\n*" => "\n*", "\r*" => "\r*",
"\n:" => "\n:", "\r:" => "\r:",
"\n " => "\n ", "\r " => "\r ",
+ "\n\n" => "\n ", "\r\n" => " \n",
+ "\n\r" => "\n ", "\r\r" => "\r ",
+ "\n\t" => "\n	", "\r\t" => "\r	", // "\n\t\n" is treated like "\n\n"
+ "\n----" => "\n----", "\r----" => "\r----",
'__' => '__', '://' => '://',
);
wfDebug( "$caller: called wfMkdirParents($dir)\n" );
}
- if ( strval( $dir ) === '' || file_exists( $dir ) ) {
+ if ( strval( $dir ) === '' || ( file_exists( $dir ) && is_dir( $dir ) ) ) {
return true;
}
wfRestoreWarnings();
if ( !$ok ) {
+ //directory may have been created on another request since we last checked
+ if ( is_dir( $dir ) ) {
+ return true;
+ }
+
// PHP doesn't report the path in its warning message, so add our own to aid in diagnosis.
wfLogWarning( sprintf( "failed to mkdir \"%s\" mode 0%o", $dir, $mode ) );
}