[Libguestfs] [PATCH] php: add arginfo to php bindings

Richard W.M. Jones rjones at redhat.com
Wed Jun 15 21:30:23 UTC 2022


On Wed, Jun 15, 2022 at 05:06:56PM -0400, Geoff Amey wrote:
> Starting with PHP8, arginfo is mandatory for PHP extensions. This patch
> updates the generator for the PHP bindings to generate the arginfo
> structures, using the Zend API macros. Only basic arginfo is added,
> without full documentation of argument and return types, in order to
> ensure compatibility with as many versions of PHP as possible.

Looks good, I have pushed it:

https://github.com/libguestfs/libguestfs/commit/ec27979398b0871c1a3e0e244849f8435c9c9a8d

I made a small change to .gitignore to ignore the new guestfs_php.dep
file.

Thanks,

Rich.

>  generator/php.ml | 37 ++++++++++++++++++++++++++++++++++---
>  1 file changed, 34 insertions(+), 3 deletions(-)
> 
> diff --git a/generator/php.ml b/generator/php.ml
> index 5c7ef48e8..acdc7b877 100644
> --- a/generator/php.ml
> +++ b/generator/php.ml
> @@ -130,6 +130,37 @@ typedef size_t guestfs_string_length;
>  typedef int guestfs_string_length;
>  #endif
>  
> +/* Declare argument info structures */
> +ZEND_BEGIN_ARG_INFO_EX(arginfo_create, 0, 0, 0)
> +ZEND_END_ARG_INFO()
> +
> +ZEND_BEGIN_ARG_INFO_EX(arginfo_last_error, 0, 0, 1)
> +  ZEND_ARG_INFO(0, g)
> +ZEND_END_ARG_INFO()
> +
> +";
> +  List.iter (
> +    fun { name = shortname; style = ret, args, optargs; } ->
> +      let len = List.length args in
> +      pr "ZEND_BEGIN_ARG_INFO_EX(arginfo_%s, 0, 0, %d)\n" shortname (len + 1);
> +      pr "  ZEND_ARG_INFO(0, g)\n";
> +      List.iter (
> +        function
> +        | BufferIn n | Bool n | Int n | Int64 n | OptString n
> +        | Pointer(_, n) | String (_, n) | StringList (_, n) ->
> +          pr "  ZEND_ARG_INFO(0, %s)\n" n
> +        ) args;
> +
> +      List.iter (
> +        function
> +        | OBool n | OInt n | OInt64 n | OString n | OStringList n ->
> +          pr "  ZEND_ARG_INFO(0, %s)\n" n
> +      ) optargs;
> +      pr "ZEND_END_ARG_INFO()\n\n";
> +  ) (actions |> external_functions |> sort);
> +
> +  pr "
> +
>  /* Convert array to list of strings.
>   * http://marc.info/?l=pecl-dev&m=112205192100631&w=2
>   */
> @@ -204,12 +235,12 @@ PHP_MINIT_FUNCTION (guestfs_php)
>  }
>  
>  static zend_function_entry guestfs_php_functions[] = {
> -  PHP_FE (guestfs_create, NULL)
> -  PHP_FE (guestfs_last_error, NULL)
> +  PHP_FE (guestfs_create, arginfo_create)
> +  PHP_FE (guestfs_last_error, arginfo_last_error)
>  ";
>  
>    List.iter (
> -    fun { name } -> pr "  PHP_FE (guestfs_%s, NULL)\n" name
> +    fun { name } -> pr "  PHP_FE (guestfs_%s, arginfo_%s)\n" name name
>    ) (actions |> external_functions |> sort);
>  
>    pr "  { NULL, NULL, NULL }
> -- 
> 2.25.1

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW


More information about the Libguestfs mailing list