[libvirt] [libvirt-php PATCH 09/35] adapt add_assoc_string_ex

Michal Privoznik mprivozn at redhat.com
Tue Apr 12 15:13:31 UTC 2016


On 09.04.2016 00:08, Neal Gompa wrote:
> From: Remi Collet <fedora at famillecollet.com>
> 
> ---
>  src/libvirt-php.c | 299 ++++++++++++++++++------------------------------------
>  1 file changed, 99 insertions(+), 200 deletions(-)
> 
> diff --git a/src/libvirt-php.c b/src/libvirt-php.c
> index d37fd6f..0459bb9 100644
> --- a/src/libvirt-php.c
> +++ b/src/libvirt-php.c
> @@ -58,6 +58,7 @@ const char *features_binaries[] = { NULL };
>  #if PHP_MAJOR_VERSION >= 7
>  typedef size_t strsize_t;
>  
> +#define VIRT_COPY_OPT
>  #define VIRT_FETCH_RESOURCE(_state, _type, _zval, _name, _le) \
>  	if ((_state = (_type)zend_fetch_resource(Z_RES_P(*_zval), _name, _le)) == NULL) { \
>  		RETURN_FALSE; \
> @@ -68,6 +69,8 @@ typedef int strsize_t;
>  typedef long zend_long;
>  typedef unsigned long zend_ulong;
>  
> +#define VIRT_COPY_OPT ,1
> +
>  #define VIRT_FETCH_RESOURCE(_state, _type, _zval, _name, _le) \
>  	ZEND_FETCH_RESOURCE(_state, _type, _zval, -1, _name, _le);
>  
> @@ -1995,7 +1998,7 @@ if ((snapshot==NULL) || (snapshot->snapshot==NULL)) RETURN_FALSE;\
>  #define LONGLONG_ASSOC(out,key,in) \
>      if (LIBVIRT_G(longlong_to_string_ini)) { \
>          snprintf(tmpnumber,63,"%llu",in); \
> -        add_assoc_string_ex(out,key,strlen(key)+1,tmpnumber,1); \
> +        add_assoc_string_ex(out,key,strlen(key)+1,tmpnumber VIRT_COPY_OPT); \
>      } \
>  else \
>  { \
> @@ -2059,11 +2062,7 @@ static int libvirt_virConnectCredType[] = {
>  PHP_FUNCTION(libvirt_get_last_error)
>  {
>      if (LIBVIRT_G (last_error) == NULL) RETURN_NULL();
> -#if PHP_MAJOR_VERSION >= 7
> -    RETURN_STRING(LIBVIRT_G (last_error));
> -#else
> -    RETURN_STRING(LIBVIRT_G (last_error),1);
> -#endif
> +    RETURN_STRING(LIBVIRT_G (last_error) VIRT_COPY_OPT);

I'm afraid, this will not fly. While preprocessing this code, my
compiler tries to expand RETURN_STRING() macro first (with VIRT_COPY_OPT
still not expanded). Therefore it finds an argument missing and produces
an compilation error.
What we can do here is create a wrapper over RETURN_STRING, e.g.
VIR_RETURN_STRING() that will behave differently for PHP7 and the rest.

Unfortunately, this is where I have to stop the review as it's getting
hairy and I gotta run. Sorry.

Michal




More information about the libvir-list mailing list