static PHP_METHOD(HttpMessageParser, stream)
{
	php_http_message_parser_object_t *parser_obj;
	zend_error_handling zeh;
	zval *zmsg, *zstream;
	php_stream *s;
	zend_long flags;

	php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "rlz", &zstream, &flags, &zmsg), invalid_arg, return);

	zend_replace_error_handling(EH_THROW, php_http_exception_unexpected_val_class_entry, &zeh);
	php_stream_from_zval(s, zstream);
	zend_restore_error_handling(&zeh);

	parser_obj = PHP_HTTP_OBJ(NULL, getThis());
	RETVAL_LONG(php_http_message_parser_parse_stream(parser_obj->parser, &parser_obj->buffer, s, flags, &parser_obj->parser->message));

	ZVAL_DEREF(zmsg);
	zval_dtor(zmsg);
	ZVAL_NULL(zmsg);
	if (parser_obj->parser->message) {
		php_http_message_t *msg_cpy = php_http_message_copy(parser_obj->parser->message, NULL);
		php_http_message_object_t *msg_obj = php_http_message_object_new_ex(php_http_message_class_entry, msg_cpy);
		ZVAL_OBJ(zmsg, &msg_obj->zo);
	}
}
示例#2
0
文件: type.c 项目: krakjoe/jitfu
PHP_METHOD(Type, dump) {
	zval *zoutput = NULL;
	php_jit_type_t *ptype;
	php_stream *pstream = NULL;

	JIT_WIN32_NOT_IMPLEMENTED();

	if (php_jit_parameters("|r", &zoutput) != SUCCESS) {
		php_jit_exception("unexpected parameters, expected ([resource output = STDOUT])");
		return;
	}

	ptype = PHP_JIT_FETCH_TYPE(getThis());
	
	if (!zoutput) {
		jit_dump_type(stdout, ptype->type);
		return;
	}
	
	php_stream_from_zval(pstream, zoutput);
	
	if (php_stream_can_cast(pstream, PHP_STREAM_AS_STDIO|PHP_STREAM_CAST_TRY_HARD) == SUCCESS) {
		FILE *stdio;
		if (php_stream_cast(pstream, PHP_STREAM_AS_STDIO, (void**)&stdio, 0) == SUCCESS) {
			jit_dump_type(stdio, ptype->type);
		}
	}
}