Annotation of embedaddon/php/ext/standard/microtime.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: Paul Panotzki - Bunyip Information Systems                   |
        !            16:    +----------------------------------------------------------------------+
        !            17:  */
        !            18: 
        !            19: /* $Id: microtime.c 321634 2012-01-01 13:15:04Z felipe $ */
        !            20: 
        !            21: #include "php.h"
        !            22: 
        !            23: #ifdef HAVE_SYS_TYPES_H
        !            24: #include <sys/types.h>
        !            25: #endif
        !            26: #ifdef PHP_WIN32
        !            27: #include "win32/time.h"
        !            28: #elif defined(NETWARE)
        !            29: #include <sys/timeval.h>
        !            30: #include <sys/time.h>
        !            31: #else
        !            32: #include <sys/time.h>
        !            33: #endif
        !            34: #ifdef HAVE_SYS_RESOURCE_H
        !            35: #include <sys/resource.h>
        !            36: #endif
        !            37: #ifdef HAVE_UNISTD_H
        !            38: #include <unistd.h>
        !            39: #endif
        !            40: #include <stdlib.h>
        !            41: #include <string.h>
        !            42: #include <stdio.h>
        !            43: #include <errno.h>
        !            44: 
        !            45: #include "microtime.h"
        !            46: #include "ext/date/php_date.h"
        !            47: 
        !            48: #define NUL  '\0'
        !            49: #define MICRO_IN_SEC 1000000.00
        !            50: #define SEC_IN_MIN 60
        !            51: 
        !            52: #ifdef HAVE_GETTIMEOFDAY
        !            53: static void _php_gettimeofday(INTERNAL_FUNCTION_PARAMETERS, int mode)
        !            54: {
        !            55:        zend_bool get_as_float = 0;
        !            56:        struct timeval tp = {0};
        !            57: 
        !            58:        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &get_as_float) == FAILURE) {
        !            59:                return;
        !            60:        }
        !            61: 
        !            62:        if (gettimeofday(&tp, NULL)) {
        !            63:                RETURN_FALSE;
        !            64:        }
        !            65: 
        !            66:        if (get_as_float) {
        !            67:                RETURN_DOUBLE((double)(tp.tv_sec + tp.tv_usec / MICRO_IN_SEC));
        !            68:        }
        !            69: 
        !            70:        if (mode) {
        !            71:                timelib_time_offset *offset;
        !            72: 
        !            73:                offset = timelib_get_time_zone_info(tp.tv_sec, get_timezone_info(TSRMLS_C));
        !            74:                                
        !            75:                array_init(return_value);
        !            76:                add_assoc_long(return_value, "sec", tp.tv_sec);
        !            77:                add_assoc_long(return_value, "usec", tp.tv_usec);
        !            78: 
        !            79:                add_assoc_long(return_value, "minuteswest", -offset->offset / SEC_IN_MIN);
        !            80:                add_assoc_long(return_value, "dsttime", offset->is_dst);
        !            81: 
        !            82:                timelib_time_offset_dtor(offset);
        !            83:        } else {
        !            84:                char ret[100];
        !            85: 
        !            86:                snprintf(ret, 100, "%.8F %ld", tp.tv_usec / MICRO_IN_SEC, tp.tv_sec);
        !            87:                RETURN_STRING(ret, 1);
        !            88:        }
        !            89: }
        !            90: 
        !            91: /* {{{ proto mixed microtime([bool get_as_float])
        !            92:    Returns either a string or a float containing the current time in seconds and microseconds */
        !            93: PHP_FUNCTION(microtime)
        !            94: {
        !            95:        _php_gettimeofday(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
        !            96: }
        !            97: /* }}} */
        !            98: 
        !            99: /* {{{ proto array gettimeofday([bool get_as_float])
        !           100:    Returns the current time as array */
        !           101: PHP_FUNCTION(gettimeofday)
        !           102: {
        !           103:        _php_gettimeofday(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
        !           104: }
        !           105: #endif
        !           106: /* }}} */
        !           107: 
        !           108: #ifdef HAVE_GETRUSAGE
        !           109: /* {{{ proto array getrusage([int who])
        !           110:    Returns an array of usage statistics */
        !           111: PHP_FUNCTION(getrusage)
        !           112: {
        !           113:        struct rusage usg;
        !           114:        long pwho = 0;
        !           115:        int who = RUSAGE_SELF;
        !           116: 
        !           117:        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &pwho) == FAILURE) {
        !           118:                return;
        !           119:        }
        !           120:        
        !           121:        if (pwho == 1) {
        !           122:                who = RUSAGE_CHILDREN;
        !           123:        }
        !           124: 
        !           125:        memset(&usg, 0, sizeof(struct rusage));
        !           126: 
        !           127:        if (getrusage(who, &usg) == -1) {
        !           128:                RETURN_FALSE;
        !           129:        }
        !           130: 
        !           131:        array_init(return_value);
        !           132: #define PHP_RUSAGE_PARA(a) \
        !           133:                add_assoc_long(return_value, #a, usg.a)
        !           134: #if !defined( _OSD_POSIX) && !defined(__BEOS__) /* BS2000 has only a few fields in the rusage struct */
        !           135:        PHP_RUSAGE_PARA(ru_oublock);
        !           136:        PHP_RUSAGE_PARA(ru_inblock);
        !           137:        PHP_RUSAGE_PARA(ru_msgsnd);
        !           138:        PHP_RUSAGE_PARA(ru_msgrcv);
        !           139:        PHP_RUSAGE_PARA(ru_maxrss);
        !           140:        PHP_RUSAGE_PARA(ru_ixrss);
        !           141:        PHP_RUSAGE_PARA(ru_idrss);
        !           142:        PHP_RUSAGE_PARA(ru_minflt);
        !           143:        PHP_RUSAGE_PARA(ru_majflt);
        !           144:        PHP_RUSAGE_PARA(ru_nsignals);
        !           145:        PHP_RUSAGE_PARA(ru_nvcsw);
        !           146:        PHP_RUSAGE_PARA(ru_nivcsw);
        !           147:        PHP_RUSAGE_PARA(ru_nswap);
        !           148: #endif /*_OSD_POSIX*/
        !           149:        PHP_RUSAGE_PARA(ru_utime.tv_usec);
        !           150:        PHP_RUSAGE_PARA(ru_utime.tv_sec);
        !           151:        PHP_RUSAGE_PARA(ru_stime.tv_usec);
        !           152:        PHP_RUSAGE_PARA(ru_stime.tv_sec);
        !           153: #undef PHP_RUSAGE_PARA
        !           154: }
        !           155: #endif /* HAVE_GETRUSAGE */
        !           156: 
        !           157: /* }}} */
        !           158: 
        !           159: /*
        !           160:  * Local variables:
        !           161:  * tab-width: 4
        !           162:  * c-basic-offset: 4
        !           163:  * End:
        !           164:  * vim600: sw=4 ts=4 fdm=marker
        !           165:  * vim<600: sw=4 ts=4
        !           166:  */

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