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>