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>