Skip to content

Commit 4836660

Browse files
duncan3dccmb69
authored andcommitted
Convert fileinfo functions arginfo to php stubs
We also allow the context for finfo to be null.
1 parent 38c2230 commit 4836660

File tree

3 files changed

+112
-56
lines changed

3 files changed

+112
-56
lines changed

ext/fileinfo/fileinfo.c

Lines changed: 7 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "ext/standard/info.h"
3535
#include "ext/standard/file.h" /* needed for context stuff */
3636
#include "php_fileinfo.h"
37+
#include "fileinfo_arginfo.h"
3738
#include "fopen_wrappers.h" /* needed for is_url */
3839
#include "Zend/zend_exceptions.h"
3940

@@ -108,63 +109,13 @@ PHP_FILEINFO_API zend_object *finfo_objects_new(zend_class_entry *class_type)
108109
}
109110
/* }}} */
110111

111-
/* {{{ arginfo */
112-
ZEND_BEGIN_ARG_INFO_EX(arginfo_finfo_open, 0, 0, 0)
113-
ZEND_ARG_INFO(0, options)
114-
ZEND_ARG_INFO(0, arg)
115-
ZEND_END_ARG_INFO()
116-
117-
ZEND_BEGIN_ARG_INFO_EX(arginfo_finfo_close, 0, 0, 1)
118-
ZEND_ARG_INFO(0, finfo)
119-
ZEND_END_ARG_INFO()
120-
121-
ZEND_BEGIN_ARG_INFO_EX(arginfo_finfo_set_flags, 0, 0, 2)
122-
ZEND_ARG_INFO(0, finfo)
123-
ZEND_ARG_INFO(0, options)
124-
ZEND_END_ARG_INFO()
125-
126-
ZEND_BEGIN_ARG_INFO_EX(arginfo_finfo_method_set_flags, 0, 0, 1)
127-
ZEND_ARG_INFO(0, options)
128-
ZEND_END_ARG_INFO()
129-
130-
ZEND_BEGIN_ARG_INFO_EX(arginfo_finfo_file, 0, 0, 2)
131-
ZEND_ARG_INFO(0, finfo)
132-
ZEND_ARG_INFO(0, filename)
133-
ZEND_ARG_INFO(0, options)
134-
ZEND_ARG_INFO(0, context)
135-
ZEND_END_ARG_INFO()
136-
137-
ZEND_BEGIN_ARG_INFO_EX(arginfo_finfo_method_file, 0, 0, 1)
138-
ZEND_ARG_INFO(0, filename)
139-
ZEND_ARG_INFO(0, options)
140-
ZEND_ARG_INFO(0, context)
141-
ZEND_END_ARG_INFO()
142-
143-
ZEND_BEGIN_ARG_INFO_EX(arginfo_finfo_buffer, 0, 0, 2)
144-
ZEND_ARG_INFO(0, finfo)
145-
ZEND_ARG_INFO(0, string)
146-
ZEND_ARG_INFO(0, options)
147-
ZEND_ARG_INFO(0, context)
148-
ZEND_END_ARG_INFO()
149-
150-
ZEND_BEGIN_ARG_INFO_EX(arginfo_finfo_method_buffer, 0, 0, 1)
151-
ZEND_ARG_INFO(0, string)
152-
ZEND_ARG_INFO(0, options)
153-
ZEND_ARG_INFO(0, context)
154-
ZEND_END_ARG_INFO()
155-
156-
ZEND_BEGIN_ARG_INFO_EX(arginfo_mime_content_type, 0, 0, 1)
157-
ZEND_ARG_INFO(0, string)
158-
ZEND_END_ARG_INFO()
159-
/* }}} */
160-
161112
/* {{{ finfo_class_functions
162113
*/
163114
static const zend_function_entry finfo_class_functions[] = {
164-
ZEND_ME_MAPPING(__construct, finfo_open, arginfo_finfo_open, ZEND_ACC_PUBLIC)
165-
ZEND_ME_MAPPING(set_flags, finfo_set_flags,arginfo_finfo_method_set_flags, ZEND_ACC_PUBLIC)
166-
ZEND_ME_MAPPING(file, finfo_file, arginfo_finfo_method_file, ZEND_ACC_PUBLIC)
167-
ZEND_ME_MAPPING(buffer, finfo_buffer, arginfo_finfo_method_buffer, ZEND_ACC_PUBLIC)
115+
ZEND_ME_MAPPING(__construct, finfo_open, arginfo_class_finfo___construct, ZEND_ACC_PUBLIC)
116+
ZEND_ME_MAPPING(set_flags, finfo_set_flags,arginfo_class_finfo_set_flags, ZEND_ACC_PUBLIC)
117+
ZEND_ME_MAPPING(file, finfo_file, arginfo_class_finfo_file, ZEND_ACC_PUBLIC)
118+
ZEND_ME_MAPPING(buffer, finfo_buffer, arginfo_class_finfo_buffer, ZEND_ACC_PUBLIC)
168119
PHP_FE_END
169120
};
170121
/* }}} */
@@ -470,13 +421,13 @@ static void _php_finfo_get_type(INTERNAL_FUNCTION_PARAMETERS, int mode, int mime
470421
goto common;
471422
}
472423
} else if (object) {
473-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|lr", &buffer, &buffer_len, &options, &zcontext) == FAILURE) {
424+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|lr!", &buffer, &buffer_len, &options, &zcontext) == FAILURE) {
474425
return;
475426
}
476427
FILEINFO_FROM_OBJECT(finfo, object);
477428
magic = finfo->magic;
478429
} else {
479-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|lr", &zfinfo, &buffer, &buffer_len, &options, &zcontext) == FAILURE) {
430+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|lr!", &zfinfo, &buffer, &buffer_len, &options, &zcontext) == FAILURE) {
480431
return;
481432
}
482433
if ((finfo = (php_fileinfo *)zend_fetch_resource(Z_RES_P(zfinfo), "file_info", le_fileinfo)) == NULL) {

ext/fileinfo/fileinfo.stub.php

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
3+
class finfo
4+
{
5+
function __construct(int $options = FILEINFO_NONE, string $arg = "") {}
6+
7+
/**
8+
* @param ?resource $context
9+
* @return string|false
10+
*/
11+
function file(string $file_name, int $options = FILEINFO_NONE, $context = null) {}
12+
13+
/**
14+
* @param ?resource $context
15+
* @return string|false
16+
*/
17+
function buffer(string $string, int $options = FILEINFO_NONE, $context = null) {}
18+
19+
/** @return bool */
20+
function set_flags(int $options) {}
21+
}
22+
23+
/** @return resource|false */
24+
function finfo_open(int $options = FILEINFO_NONE, string $arg = "") {}
25+
26+
/**
27+
* @param resource $finfo
28+
*/
29+
function finfo_close($finfo): bool {}
30+
31+
/**
32+
* @param resource $finfo
33+
*/
34+
function finfo_set_flags($finfo, int $options): bool {}
35+
36+
/**
37+
* @param resource $finfo
38+
* @param ?resource $context
39+
* @return string|false
40+
*/
41+
function finfo_file($finfo, string $file_name, int $options = FILEINFO_NONE, $context = null) {}
42+
43+
/**
44+
* @param resource $finfo
45+
* @param ?resource $context
46+
* @return string|false
47+
*/
48+
function finfo_buffer($finfo, string $string, int $options = FILEINFO_NONE, $context = null) {}
49+
50+
/**
51+
* @param resource|string $filename
52+
* @return string|false
53+
*/
54+
function mime_content_type($filename) {}

ext/fileinfo/fileinfo_arginfo.h

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/* This is a generated file, edit the .stub.php file instead. */
2+
3+
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_finfo___construct, 0, 0, 0)
4+
ZEND_ARG_TYPE_INFO(0, options, IS_LONG, 0)
5+
ZEND_ARG_TYPE_INFO(0, arg, IS_STRING, 0)
6+
ZEND_END_ARG_INFO()
7+
8+
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_finfo_file, 0, 0, 1)
9+
ZEND_ARG_TYPE_INFO(0, file_name, IS_STRING, 0)
10+
ZEND_ARG_TYPE_INFO(0, options, IS_LONG, 0)
11+
ZEND_ARG_INFO(0, context)
12+
ZEND_END_ARG_INFO()
13+
14+
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_finfo_buffer, 0, 0, 1)
15+
ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
16+
ZEND_ARG_TYPE_INFO(0, options, IS_LONG, 0)
17+
ZEND_ARG_INFO(0, context)
18+
ZEND_END_ARG_INFO()
19+
20+
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_finfo_set_flags, 0, 0, 1)
21+
ZEND_ARG_TYPE_INFO(0, options, IS_LONG, 0)
22+
ZEND_END_ARG_INFO()
23+
24+
#define arginfo_finfo_open arginfo_class_finfo___construct
25+
26+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_finfo_close, 0, 1, _IS_BOOL, 0)
27+
ZEND_ARG_INFO(0, finfo)
28+
ZEND_END_ARG_INFO()
29+
30+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_finfo_set_flags, 0, 2, _IS_BOOL, 0)
31+
ZEND_ARG_INFO(0, finfo)
32+
ZEND_ARG_TYPE_INFO(0, options, IS_LONG, 0)
33+
ZEND_END_ARG_INFO()
34+
35+
ZEND_BEGIN_ARG_INFO_EX(arginfo_finfo_file, 0, 0, 2)
36+
ZEND_ARG_INFO(0, finfo)
37+
ZEND_ARG_TYPE_INFO(0, file_name, IS_STRING, 0)
38+
ZEND_ARG_TYPE_INFO(0, options, IS_LONG, 0)
39+
ZEND_ARG_INFO(0, context)
40+
ZEND_END_ARG_INFO()
41+
42+
ZEND_BEGIN_ARG_INFO_EX(arginfo_finfo_buffer, 0, 0, 2)
43+
ZEND_ARG_INFO(0, finfo)
44+
ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
45+
ZEND_ARG_TYPE_INFO(0, options, IS_LONG, 0)
46+
ZEND_ARG_INFO(0, context)
47+
ZEND_END_ARG_INFO()
48+
49+
ZEND_BEGIN_ARG_INFO_EX(arginfo_mime_content_type, 0, 0, 1)
50+
ZEND_ARG_INFO(0, filename)
51+
ZEND_END_ARG_INFO()

0 commit comments

Comments
 (0)