Skip to content

Commit

Permalink
php: add arginfo to php bindings
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Geoff Amey authored and rwmjones committed Jun 15, 2022
1 parent 8fc4d16 commit ec27979
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -325,6 +325,7 @@ Makefile.in
/php/extension/configure.in
/php/extension/env
/php/extension/guestfs_php.c
/php/extension/guestfs_php.dep
/php/extension/install-sh
/php/extension/libtool
/php/extension/ltmain.sh
Expand Down
37 changes: 34 additions & 3 deletions generator/php.ml
Expand Up @@ -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
*/
Expand Down Expand Up @@ -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 }
Expand Down

0 comments on commit ec27979

Please sign in to comment.