uint64_t s_zval_to_uint64()

in php_memcached.c [596:627]


uint64_t s_zval_to_uint64 (zval *cas)
{
	switch (Z_TYPE_P (cas)) {
		case IS_LONG:
			return (uint64_t) zval_get_long (cas);
		break;

		case IS_DOUBLE:
			if (Z_DVAL_P (cas) < 0.0)
				return 0;

			return (uint64_t) zval_get_double (cas);
		break;

		case IS_STRING:
		{
			uint64_t val;
			char *end;

			errno = 0;
			val = (uint64_t) strtoull (Z_STRVAL_P (cas), &end, 0);

			if (*end || (errno == ERANGE && val == UINT64_MAX) || (errno != 0 && val == 0)) {
				php_error_docref(NULL, E_ERROR, "Failed to unmarshall cas token");
				return 0;
			}
			return val;
		}
		break;
	}
	return 0;
}