Annotation of embedaddon/php/ext/standard/uniqid.c, revision 1.1.1.3
1.1 misho 1: /*
2: +----------------------------------------------------------------------+
3: | PHP Version 5 |
4: +----------------------------------------------------------------------+
1.1.1.3 ! misho 5: | Copyright (c) 1997-2013 The PHP Group |
1.1 misho 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:
1.1.1.2 misho 19: /* $Id$ */
1.1 misho 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>