Merge "jquery.makeCollapsible: events for collapsing/expanding, tests"
[lhc/web/wiklou.git] / includes / UIDGenerator.php
index db8ad9d..b042d8c 100644 (file)
@@ -39,7 +39,7 @@ class UIDGenerator {
        /** @var Array */
        protected $fileHandles = array(); // cache file handles
 
-       const QUICK_RAND = 1; // get randomness from fast and unsecure sources
+       const QUICK_RAND = 1; // get randomness from fast and insecure sources
 
        protected function __construct() {
                $idFile = wfTempDir() . '/mw-' . __CLASS__ . '-UID-nodeid';
@@ -49,15 +49,16 @@ class UIDGenerator {
                        wfSuppressWarnings();
                        if ( wfIsWindows() ) {
                                // http://technet.microsoft.com/en-us/library/bb490913.aspx
-                               $csv    = trim( `getmac /NH /FO CSV` );
-                               $line   = substr( $csv, 0, strcspn( $csv, "\n" ) );
-                               $info   = str_getcsv( $line );
-                               $nodeId = count( $info ) ? str_replace( '-', '', $info[0] ) : '';
+                               $csv = trim( wfShellExec( 'getmac /NH /FO CSV' ) );
+                               $line = substr( $csv, 0, strcspn( $csv, "\n" ) );
+                               $info = str_getcsv( $line );
+                               $nodeId = isset( $info[0] ) ? str_replace( '-', '', $info[0] ) : '';
                        } elseif ( is_executable( '/sbin/ifconfig' ) ) { // Linux/BSD/Solaris/OS X
                                // See http://linux.die.net/man/8/ifconfig
                                $m = array();
-                               preg_match( '/\s([0-9a-f]{2}(:[0-9a-f]{2}){5})\s/', `/sbin/ifconfig -a`, $m );
-                               $nodeId = count( $m ) ? str_replace( ':', '', $m[1] ) : '';
+                               preg_match( '/\s([0-9a-f]{2}(:[0-9a-f]{2}){5})\s/',
+                                       wfShellExec( '/sbin/ifconfig -a' ), $m );
+                               $nodeId = isset( $m[1] ) ? str_replace( ':', '', $m[1] ) : '';
                        }
                        wfRestoreWarnings();
                        if ( !preg_match( '/^[0-9a-f]{12}$/i', $nodeId ) ) {
@@ -109,7 +110,7 @@ class UIDGenerator {
        }
 
        /**
-        * @param $time array (UIDGenerator::millitime(), clock sequence)
+        * @param array $time (UIDGenerator::millitime(), clock sequence)
         * @return string 88 bits
         */
        protected function getTimestampedID88( array $info ) {
@@ -151,7 +152,7 @@ class UIDGenerator {
        }
 
        /**
-        * @param $info array (UIDGenerator::milltime(), counter, clock sequence)
+        * @param array $info (UIDGenerator::millitime(), counter, clock sequence)
         * @return string 128 bits
         */
        protected function getTimestampedID128( array $info ) {
@@ -213,7 +214,7 @@ class UIDGenerator {
         * than any previous (time,counter) value for the given clock sequence.
         * This is useful for making UIDs sequential on a per-node bases.
         *
-        * @param $lockFile string Name of a local lock file
+        * @param string $lockFile Name of a local lock file
         * @param $clockSeqSize integer The number of possible clock sequence values
         * @param $counterSize integer The number of possible counter values
         * @return Array (result of UIDGenerator::millitime(), counter, clock sequence)
@@ -225,7 +226,7 @@ class UIDGenerator {
                        $handle = $this->fileHandles[$lockFile];
                } else {
                        $handle = fopen( $this->$lockFile, 'cb+' );
-                       $this->fileHandles[$lockFile] = $handle ? $handle : null; // cache
+                       $this->fileHandles[$lockFile] = $handle ?: null; // cache
                }
                // Acquire the UID lock file
                if ( $handle === false ) {
@@ -238,9 +239,9 @@ class UIDGenerator {
                $data = explode( ' ', fgets( $handle ) ); // "<clk seq> <sec> <msec> <counter> <offset>"
                $clockChanged = false; // clock set back significantly?
                if ( count( $data ) == 5 ) { // last UID info already initialized
-                       $clkSeq = (int)$data[0] % $clockSeqSize;
-                       $prevTime = array( (int)$data[1], (int)$data[2] );
-                       $offset = (int)$data[4] % $counterSize; // random counter offset
+                       $clkSeq = (int) $data[0] % $clockSeqSize;
+                       $prevTime = array( (int) $data[1], (int) $data[2] );
+                       $offset = (int) $data[4] % $counterSize; // random counter offset
                        $counter = 0; // counter for UIDs with the same timestamp
                        // Delay until the clock reaches the time of the last ID.
                        // This detects any microtime() drift among processes.
@@ -250,7 +251,7 @@ class UIDGenerator {
                                $time = self::millitime();
                        } elseif ( $time == $prevTime ) {
                                // Bump the counter if there are timestamp collisions
-                               $counter = (int)$data[3] % $counterSize;
+                               $counter = (int) $data[3] % $counterSize;
                                if ( ++$counter >= $counterSize ) { // sanity (starts at 0)
                                        flock( $handle, LOCK_UN ); // abort
                                        throw new MWException( "Counter overflow for timestamp value." );
@@ -294,7 +295,7 @@ class UIDGenerator {
         * Wait till the current timestamp reaches $time and return the current
         * timestamp. This returns false if it would have to wait more than 10ms.
         *
-        * @param $time array Result of UIDGenerator::millitime()
+        * @param array $time Result of UIDGenerator::millitime()
         * @return Array|bool UIDGenerator::millitime() result or false
         */
        protected function timeWaitUntil( array $time ) {
@@ -309,7 +310,7 @@ class UIDGenerator {
        }
 
        /**
-        * @param $time array Result of UIDGenerator::millitime()
+        * @param array $time Result of UIDGenerator::millitime()
         * @return string 46 MSBs of "milliseconds since epoch" in binary (rolls over in 4201)
         */
        protected function millisecondsSinceEpochBinary( array $time ) {
@@ -319,7 +320,7 @@ class UIDGenerator {
                        $id_bin = str_pad( decbin( $ts % pow( 2, 46 ) ), 46, '0', STR_PAD_LEFT );
                } elseif ( extension_loaded( 'gmp' ) ) {
                        $ts = gmp_mod( // wrap around
-                               gmp_add( gmp_mul( (string)$sec, (string)1000 ), (string)$msec ),
+                               gmp_add( gmp_mul( (string) $sec, (string) 1000 ), (string) $msec ),
                                gmp_pow( '2', '46' )
                        );
                        $id_bin = str_pad( gmp_strval( $ts, 2 ), 46, '0', STR_PAD_LEFT );
@@ -340,7 +341,7 @@ class UIDGenerator {
         */
        protected static function millitime() {
                list( $msec, $sec ) = explode( ' ', microtime() );
-               return array( (int)$sec, (int)( $msec * 1000 ) );
+               return array( (int) $sec, (int) ( $msec * 1000 ) );
        }
 
        function __destruct() {