@@ -51,22 +51,12 @@ typedef struct _finfo_object {
5151 zend_object zo ;
5252} finfo_object ;
5353
54- #define FILEINFO_DECLARE_INIT_OBJECT (object ) \
55- zval *object = getThis();
56-
5754static inline finfo_object * php_finfo_fetch_object (zend_object * obj ) {
5855 return (finfo_object * )((char * )(obj ) - XtOffsetOf (finfo_object , zo ));
5956}
6057
6158#define Z_FINFO_P (zv ) php_finfo_fetch_object(Z_OBJ_P((zv)))
6259
63- #define FILEINFO_REGISTER_OBJECT (_object , _ptr ) \
64- { \
65- finfo_object *obj; \
66- obj = Z_FINFO_P(_object); \
67- obj->ptr = _ptr; \
68- }
69-
7060#define FILEINFO_FROM_OBJECT (finfo , object ) \
7161{ \
7262 finfo_object *obj = Z_FINFO_P(object); \
@@ -112,20 +102,6 @@ PHP_FILEINFO_API zend_object *finfo_objects_new(zend_class_entry *class_type)
112102 options, magic_errno(magic), magic_error(magic)); \
113103 RETURN_FALSE; \
114104 }
115-
116- /* True global resources - no need for thread safety here */
117- static int le_fileinfo ;
118- /* }}} */
119-
120- void finfo_resource_destructor (zend_resource * rsrc ) /* {{{ */
121- {
122- if (rsrc -> ptr ) {
123- php_fileinfo * finfo = (php_fileinfo * ) rsrc -> ptr ;
124- magic_close (finfo -> magic );
125- efree (rsrc -> ptr );
126- rsrc -> ptr = NULL ;
127- }
128- }
129105/* }}} */
130106
131107/* {{{ PHP_MINIT_FUNCTION */
@@ -144,8 +120,6 @@ PHP_MINIT_FUNCTION(finfo)
144120 finfo_object_handlers .free_obj = finfo_objects_free ;
145121 finfo_object_handlers .clone_obj = NULL ;
146122
147- le_fileinfo = zend_register_list_destructors_ex (finfo_resource_destructor , NULL , "file_info" , module_number );
148-
149123 REGISTER_LONG_CONSTANT ("FILEINFO_NONE" , MAGIC_NONE , CONST_CS |CONST_PERSISTENT );
150124 REGISTER_LONG_CONSTANT ("FILEINFO_SYMLINK" , MAGIC_SYMLINK , CONST_CS |CONST_PERSISTENT );
151125 REGISTER_LONG_CONSTANT ("FILEINFO_MIME" , MAGIC_MIME , CONST_CS |CONST_PERSISTENT );
@@ -204,14 +178,14 @@ PHP_MINFO_FUNCTION(fileinfo)
204178}
205179/* }}} */
206180
207- /* {{{ Create a new fileinfo resource . */
181+ /* {{{ Construct a new fileinfo object . */
208182PHP_FUNCTION (finfo_open )
209183{
210184 zend_long options = MAGIC_NONE ;
211185 char * file = NULL ;
212186 size_t file_len = 0 ;
213187 php_fileinfo * finfo ;
214- FILEINFO_DECLARE_INIT_OBJECT ( object )
188+ zval * object = getThis ();
215189 char resolved_path [MAXPATHLEN ];
216190 zend_error_handling zeh ;
217191
@@ -287,30 +261,28 @@ PHP_FUNCTION(finfo_open)
287261 }
288262
289263 if (object ) {
264+ finfo_object * obj ;
290265 zend_restore_error_handling (& zeh );
291- FILEINFO_REGISTER_OBJECT (object , finfo );
266+ obj = Z_FINFO_P (object );
267+ obj -> ptr = finfo ;
292268 } else {
293- RETURN_RES (zend_register_resource (finfo , le_fileinfo ));
269+ zend_object * zobj = finfo_objects_new (finfo_class_entry );
270+ finfo_object * obj = php_finfo_fetch_object (zobj );
271+ obj -> ptr = finfo ;
272+ RETURN_OBJ (zobj );
294273 }
295274}
296275/* }}} */
297276
298- /* {{{ Close fileinfo resource . */
277+ /* {{{ Close fileinfo object - a NOP . */
299278PHP_FUNCTION (finfo_close )
300279{
301- php_fileinfo * finfo ;
302- zval * zfinfo ;
303-
304- if (zend_parse_parameters (ZEND_NUM_ARGS (), "r" , & zfinfo ) == FAILURE ) {
305- RETURN_THROWS ();
306- }
280+ zval * self ;
307281
308- if (( finfo = ( php_fileinfo * ) zend_fetch_resource ( Z_RES_P ( zfinfo ) , "file_info " , le_fileinfo )) == NULL ) {
282+ if (zend_parse_parameters ( ZEND_NUM_ARGS () , "O " , & self , finfo_class_entry ) == FAILURE ) {
309283 RETURN_THROWS ();
310284 }
311285
312- zend_list_close (Z_RES_P (zfinfo ));
313-
314286 RETURN_TRUE ;
315287}
316288/* }}} */
@@ -320,22 +292,12 @@ PHP_FUNCTION(finfo_set_flags)
320292{
321293 zend_long options ;
322294 php_fileinfo * finfo ;
323- zval * zfinfo ;
324- FILEINFO_DECLARE_INIT_OBJECT (object )
295+ zval * self ;
325296
326- if (object ) {
327- if (zend_parse_parameters (ZEND_NUM_ARGS (), "l" , & options ) == FAILURE ) {
328- RETURN_THROWS ();
329- }
330- FILEINFO_FROM_OBJECT (finfo , object );
331- } else {
332- if (zend_parse_parameters (ZEND_NUM_ARGS (), "rl" , & zfinfo , & options ) == FAILURE ) {
333- RETURN_THROWS ();
334- }
335- if ((finfo = (php_fileinfo * )zend_fetch_resource (Z_RES_P (zfinfo ), "file_info" , le_fileinfo )) == NULL ) {
336- RETURN_THROWS ();
337- }
297+ if (zend_parse_method_parameters (ZEND_NUM_ARGS (), getThis (), "Ol" , & self , finfo_class_entry , & options ) == FAILURE ) {
298+ RETURN_THROWS ();
338299 }
300+ FILEINFO_FROM_OBJECT (finfo , self );
339301
340302 FINFO_SET_OPTION (finfo -> magic , options )
341303 finfo -> options = options ;
@@ -354,12 +316,10 @@ static void _php_finfo_get_type(INTERNAL_FUNCTION_PARAMETERS, int mode, int mime
354316 char * ret_val = NULL , * buffer = NULL ;
355317 size_t buffer_len ;
356318 php_fileinfo * finfo = NULL ;
357- zval * zfinfo , * zcontext = NULL ;
319+ zval * zcontext = NULL ;
358320 zval * what ;
359321 char mime_directory [] = "directory" ;
360-
361322 struct magic_set * magic = NULL ;
362- FILEINFO_DECLARE_INIT_OBJECT (object )
363323
364324 if (mimetype_emu ) {
365325
@@ -389,19 +349,12 @@ static void _php_finfo_get_type(INTERNAL_FUNCTION_PARAMETERS, int mode, int mime
389349 php_error_docref (NULL , E_WARNING , "Failed to load magic database" );
390350 goto common ;
391351 }
392- } else if (object ) {
393- if (zend_parse_parameters (ZEND_NUM_ARGS (), "s|lr!" , & buffer , & buffer_len , & options , & zcontext ) == FAILURE ) {
394- RETURN_THROWS ();
395- }
396- FILEINFO_FROM_OBJECT (finfo , object );
397- magic = finfo -> magic ;
398352 } else {
399- if (zend_parse_parameters (ZEND_NUM_ARGS (), "rs|lr!" , & zfinfo , & buffer , & buffer_len , & options , & zcontext ) == FAILURE ) {
400- RETURN_THROWS ();
401- }
402- if ((finfo = (php_fileinfo * )zend_fetch_resource (Z_RES_P (zfinfo ), "file_info" , le_fileinfo )) == NULL ) {
353+ zval * self ;
354+ if (zend_parse_method_parameters (ZEND_NUM_ARGS (), getThis (), "Os|lr!" , & self , finfo_class_entry , & buffer , & buffer_len , & options , & zcontext ) == FAILURE ) {
403355 RETURN_THROWS ();
404356 }
357+ FILEINFO_FROM_OBJECT (finfo , self );
405358 magic = finfo -> magic ;
406359 }
407360
0 commit comments