File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / standard / uniqid.c
Revision 1.1.1.3 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Jul 22 01:32:05 2013 UTC (11 years ago) by misho
Branches: php, MAIN
CVS tags: v5_4_29p0, v5_4_20p0, v5_4_20, v5_4_17, HEAD
5.4.17

    1: /*
    2:    +----------------------------------------------------------------------+
    3:    | PHP Version 5                                                        |
    4:    +----------------------------------------------------------------------+
    5:    | Copyright (c) 1997-2013 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,v 1.1.1.3 2013/07/22 01:32:05 misho Exp $ */
   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>