Annotation of embedaddon/php/ext/standard/uniqid.c, revision 1.1

1.1     ! misho       1: /*
        !             2:    +----------------------------------------------------------------------+
        !             3:    | PHP Version 5                                                        |
        !             4:    +----------------------------------------------------------------------+
        !             5:    | Copyright (c) 1997-2012 The PHP Group                                |
        !             6:    +----------------------------------------------------------------------+
        !             7:    | This source file is subject to version 3.01 of the PHP license,      |
        !             8:    | that is bundled with this package in the file LICENSE, and is        |
        !             9:    | available through the world-wide-web at the following url:           |
        !            10:    | http://www.php.net/license/3_01.txt                                  |
        !            11:    | If you did not receive a copy of the PHP license and are unable to   |
        !            12:    | obtain it through the world-wide-web, please send a note to          |
        !            13:    | license@php.net so we can mail you a copy immediately.               |
        !            14:    +----------------------------------------------------------------------+
        !            15:    | Author: Stig Sæther Bakken <ssb@php.net>                             |
        !            16:    +----------------------------------------------------------------------+
        !            17:  */
        !            18: 
        !            19: /* $Id: uniqid.c 321634 2012-01-01 13:15:04Z felipe $ */
        !            20: 
        !            21: #include "php.h"
        !            22: 
        !            23: #include <stdlib.h>
        !            24: #if HAVE_UNISTD_H
        !            25: #include <unistd.h>
        !            26: #endif
        !            27: 
        !            28: #include <string.h>
        !            29: #include <errno.h>
        !            30: 
        !            31: #include <stdio.h>
        !            32: #ifdef PHP_WIN32
        !            33: #include "win32/time.h"
        !            34: #else
        !            35: #include <sys/time.h>
        !            36: #endif
        !            37: 
        !            38: #include "php_lcg.h"
        !            39: #include "uniqid.h"
        !            40: 
        !            41: /* {{{ proto string uniqid([string prefix [, bool more_entropy]])
        !            42:    Generates a unique ID */
        !            43: #ifdef HAVE_GETTIMEOFDAY
        !            44: PHP_FUNCTION(uniqid)
        !            45: {
        !            46:        char *prefix = "";
        !            47: #if defined(__CYGWIN__)
        !            48:        zend_bool more_entropy = 1;
        !            49: #else
        !            50:        zend_bool more_entropy = 0;
        !            51: #endif
        !            52:        char *uniqid;
        !            53:        int sec, usec, prefix_len = 0;
        !            54:        struct timeval tv;
        !            55: 
        !            56:        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sb", &prefix, &prefix_len,
        !            57:                                                          &more_entropy)) {
        !            58:                return;
        !            59:        }
        !            60: 
        !            61: #if HAVE_USLEEP && !defined(PHP_WIN32)
        !            62:        if (!more_entropy) {
        !            63: #if defined(__CYGWIN__)
        !            64:                php_error_docref(NULL TSRMLS_CC, E_WARNING, "You must use 'more entropy' under CYGWIN");
        !            65:                RETURN_FALSE;
        !            66: #else
        !            67:                usleep(1);
        !            68: #endif
        !            69:        }
        !            70: #endif
        !            71:        gettimeofday((struct timeval *) &tv, (struct timezone *) NULL);
        !            72:        sec = (int) tv.tv_sec;
        !            73:        usec = (int) (tv.tv_usec % 0x100000);
        !            74: 
        !            75:        /* The max value usec can have is 0xF423F, so we use only five hex
        !            76:         * digits for usecs.
        !            77:         */
        !            78:        if (more_entropy) {
        !            79:                spprintf(&uniqid, 0, "%s%08x%05x%.8F", prefix, sec, usec, php_combined_lcg(TSRMLS_C) * 10);
        !            80:        } else {
        !            81:                spprintf(&uniqid, 0, "%s%08x%05x", prefix, sec, usec);
        !            82:        }
        !            83: 
        !            84:        RETURN_STRING(uniqid, 0);
        !            85: }
        !            86: #endif
        !            87: /* }}} */
        !            88: 
        !            89: /*
        !            90:  * Local variables:
        !            91:  * tab-width: 4
        !            92:  * c-basic-offset: 4
        !            93:  * End:
        !            94:  * vim600: sw=4 ts=4 fdm=marker
        !            95:  * vim<600: sw=4 ts=4
        !            96:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>