@@ -4361,6 +4361,35 @@ ZEND_METHOD(FFI, string) /* {{{ */
4361
4361
}
4362
4362
/* }}} */
4363
4363
4364
+ ZEND_METHOD (FFI , isNull ) /* {{{ */
4365
+ {
4366
+ zval * zv ;
4367
+ zend_ffi_type * type ;
4368
+ void * ptr = NULL ;
4369
+
4370
+ ZEND_FFI_VALIDATE_API_RESTRICTION ();
4371
+ ZEND_PARSE_PARAMETERS_START (1 , 1 )
4372
+ Z_PARAM_ZVAL (zv );
4373
+ ZEND_PARSE_PARAMETERS_END ();
4374
+
4375
+ ZVAL_DEREF (zv );
4376
+ if (Z_TYPE_P (zv ) == IS_OBJECT && Z_OBJCE_P (zv ) == zend_ffi_cdata_ce ) {
4377
+ zend_ffi_cdata * cdata = (zend_ffi_cdata * )Z_OBJ_P (zv );
4378
+ type = ZEND_FFI_TYPE (cdata -> type );
4379
+ ptr = cdata -> ptr ;
4380
+ } else {
4381
+ zend_wrong_parameter_class_error (1 , "FFI\\CData" , zv );
4382
+ return ;
4383
+ }
4384
+
4385
+ if (type -> kind != ZEND_FFI_TYPE_POINTER ){
4386
+ zend_throw_error (zend_ffi_exception_ce , "FFI\\Cdata is not a pointer" );
4387
+ }
4388
+
4389
+ RETURN_BOOL (* (void * * )ptr == NULL );
4390
+ }
4391
+ /* }}} */
4392
+
4364
4393
ZEND_BEGIN_ARG_INFO_EX (arginfo_func_cdef , 0 , 0 , 0 )
4365
4394
ZEND_ARG_INFO (0 , code )
4366
4395
ZEND_ARG_INFO (0 , lib )
@@ -4437,6 +4466,10 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_func_string, 0, 0, 1)
4437
4466
ZEND_ARG_INFO (0 , size )
4438
4467
ZEND_END_ARG_INFO ()
4439
4468
4469
+ ZEND_BEGIN_ARG_INFO_EX (arginfo_func_isnull , 0 , 0 , 1 )
4470
+ ZEND_ARG_INFO (ZEND_SEND_PREFER_REF , ptr )
4471
+ ZEND_END_ARG_INFO ()
4472
+
4440
4473
static const zend_function_entry zend_ffi_functions [] = {
4441
4474
ZEND_ME (FFI , cdef , arginfo_func_cdef , ZEND_ACC_PUBLIC |ZEND_ACC_STATIC )
4442
4475
ZEND_ME (FFI , load , arginfo_func_load , ZEND_ACC_PUBLIC |ZEND_ACC_STATIC )
@@ -4454,6 +4487,7 @@ static const zend_function_entry zend_ffi_functions[] = {
4454
4487
ZEND_ME (FFI , memcmp , arginfo_func_memcmp , ZEND_ACC_PUBLIC |ZEND_ACC_STATIC )
4455
4488
ZEND_ME (FFI , memset , arginfo_func_memset , ZEND_ACC_PUBLIC |ZEND_ACC_STATIC )
4456
4489
ZEND_ME (FFI , string , arginfo_func_string , ZEND_ACC_PUBLIC |ZEND_ACC_STATIC )
4490
+ ZEND_ME (FFI , isNull , arginfo_func_isnull , ZEND_ACC_PUBLIC |ZEND_ACC_STATIC )
4457
4491
ZEND_FE_END
4458
4492
};
4459
4493
0 commit comments