* add libvirt_list_active_storagepools & libvirt_list_inactive_storagepools * modified EXTRA_DIST for necessary files * generate libvirt-php.spec from .in file * bug fix for memeory leak --- Makefile.am | 2 +- configure.ac | 1 + libvirt-php.spec | 82 -------------------------- libvirt-php.spec.in | 82 ++++++++++++++++++++++++++ src/Makefile.am | 2 +- src/libvirt.c | 159 ++++++++++++++++++++++++++++++++++++++++++++++---- src/libvirt_php.h | 2 + tools/Makefile.am | 2 + 8 files changed, 235 insertions(+), 97 deletions(-) delete mode 100644 libvirt-php.spec create mode 100644 libvirt-php.spec.in diff --git a/Makefile.am b/Makefile.am index 2e73743..45f396b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,3 +1,3 @@ SUBDIRS = tools src docs -EXTRA_DIST = libvirt-php.spec +EXTRA_DIST = libvirt-php.spec.in diff --git a/configure.ac b/configure.ac index f79317d..8d81b9d 100644 --- a/configure.ac +++ b/configure.ac @@ -110,4 +110,5 @@ fi AC_SUBST([PHPIZE]) AC_SUBST([PHPCONFIG]) AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_FILES([$PACKAGE.spec]) AC_OUTPUT diff --git a/libvirt-php.spec b/libvirt-php.spec deleted file mode 100644 index 51a9add..0000000 --- a/libvirt-php.spec +++ /dev/null @@ -1,82 +0,0 @@ -%define req_libvirt_version 0.6.2 - -%if 0%{?suse_version} -%define php_confdir %{_sysconfdir}/php5/conf.d -%define php_extdir %{_libdir}/php5/extensions -%else -%define php_confdir %{_sysconfdir}/php.d -%define php_extdir %{_libdir}/php/modules -%endif - -Name: libvirt-php -Version: 0.4 -Release: 1%{?dist}%{?extra_release} -Summary: PHP language binding for Libvirt - -%if 0%{?suse_version} -Group: Development/Libraries/PHP -%else -Group: Development/Libraries -%endif -License: PHP -URL: http://libvirt.org/ -Source0: http://libvirt.org/sources/libvirt-php-%{version}.tar.gz -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root - -BuildRequires: php-devel -BuildRequires: libvirt-devel >= %{req_libvirt_version} -BuildRequires: libxml2-devel -%if 0%{?suse_version} -BuildRequires: xhtml-dtd -%else -BuildRequires: xhtml1-dtds -%endif -Requires: libvirt >= %{req_libvirt_version} -%if 0%{?suse_version} -Requires: php5 -%else -Requires: php -%endif - -%description -PHP language bindings for Libvirt API. -For more details see: http://phplibvirt.cybersales.cz/ http://www.libvirt.org/ http://www.php.net/ - -%package -n libvirt-php-doc -Summary: Document of libvirt-php -Group: Development/Libraries/PHP -Requires: libvirt-php = %{version} - -%description -n libvirt-php-doc -PHP language bindings for Libvirt API. -For more details see: http://phplibvirt.cybersales.cz/ http://www.libvirt.org/ http://www.php.net/ - -This package contain the document for libvirt-php. - -%prep -%setup -q -n libvirt-php-%{version} - -%build -%configure -./configure --with-html-dir=%{_datadir}/doc --with-html-subdir=%{name}-%{version}/html -make %{?_smp_mflags} - -%install -make install DESTDIR=%{buildroot} - -%clean -rm -rf %{buildroot} - -%files -%defattr(-,root,root,-) -%{php_extdir}/libvirt-php.so -%config(noreplace) %{php_confdir}/libvirt-php.ini - -%files -n libvirt-php-doc -%defattr(-,root,root,-) -%doc -%dir %{_datadir}/doc/%{name}-%{version} -%{_datadir}/doc/%{name}-%{version}/html - -%changelog - diff --git a/libvirt-php.spec.in b/libvirt-php.spec.in new file mode 100644 index 0000000..465532c --- /dev/null +++ b/libvirt-php.spec.in @@ -0,0 +1,82 @@ +%define req_libvirt_version 0.6.2 + +%if 0%{?suse_version} +%define php_confdir %{_sysconfdir}/php5/conf.d +%define php_extdir %{_libdir}/php5/extensions +%else +%define php_confdir %{_sysconfdir}/php.d +%define php_extdir %{_libdir}/php/modules +%endif + +Name: @PACKAGE@ +Version: @VERSION@ +Release: 1%{?dist}%{?extra_release} +Summary: PHP language binding for Libvirt + +%if 0%{?suse_version} +Group: Development/Libraries/PHP +%else +Group: Development/Libraries +%endif +License: PHP +URL: http://libvirt.org/ +Source0: http://libvirt.org/sources/libvirt-php-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root + +BuildRequires: php-devel +BuildRequires: libvirt-devel >= %{req_libvirt_version} +BuildRequires: libxml2-devel +%if 0%{?suse_version} +BuildRequires: xhtml-dtd +%else +BuildRequires: xhtml1-dtds +%endif +Requires: libvirt >= %{req_libvirt_version} +%if 0%{?suse_version} +Requires: php5 +%else +Requires: php +%endif + +%description +PHP language bindings for Libvirt API. +For more details see: http://phplibvirt.cybersales.cz/ http://www.libvirt.org/ http://www.php.net/ + +%package -n libvirt-php-doc +Summary: Document of libvirt-php +Group: Development/Libraries/PHP +Requires: libvirt-php = %{version} + +%description -n libvirt-php-doc +PHP language bindings for Libvirt API. +For more details see: http://phplibvirt.cybersales.cz/ http://www.libvirt.org/ http://www.php.net/ + +This package contain the document for libvirt-php. + +%prep +%setup -q -n libvirt-php-%{version} + +%build +%configure +./configure --with-html-dir=%{_datadir}/doc --with-html-subdir=%{name}-%{version}/html +make %{?_smp_mflags} + +%install +make install DESTDIR=%{buildroot} + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root,-) +%{php_extdir}/libvirt-php.so +%config(noreplace) %{php_confdir}/libvirt-php.ini + +%files -n libvirt-php-doc +%defattr(-,root,root,-) +%doc +%dir %{_datadir}/doc/%{name}-%{version} +%{_datadir}/doc/%{name}-%{version}/html + +%changelog + diff --git a/src/Makefile.am b/src/Makefile.am index d301ae2..9c7101d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -3,7 +3,7 @@ PHPEDIR=$(shell php-config --extension-dir) PHPCDIR=$(shell php-config --configure-options | sed -n 's|.*--with-config-file-scan-dir=\([^ ]*\).*|\1|p') DEFINES=-DHAVE_CONFIG_H -EXTRA_DIST = libvirt.c php_libvirt.h +EXTRA_DIST = libvirt.c libvirt_php.h all-am: build clean-temp diff --git a/src/libvirt.c b/src/libvirt.c index 9293224..230aff2 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -109,6 +109,8 @@ static function_entry libvirt_functions[] = { PHP_FE(libvirt_list_nodedevs, NULL) PHP_FE(libvirt_list_networks,NULL) PHP_FE(libvirt_list_storagepools,NULL) + PHP_FE(libvirt_list_active_storagepools,NULL) + PHP_FE(libvirt_list_inactive_storagepools,NULL) PHP_FE(libvirt_storagepool_list_volumes,NULL) PHP_FE(libvirt_list_active_domains, NULL) PHP_FE(libvirt_list_active_domain_ids, NULL) @@ -1994,10 +1996,11 @@ PHP_FUNCTION(libvirt_storagepool_get_info) array_init(return_value); // @todo: fix the long long returns + LONGLONG_INIT add_assoc_long(return_value, "state", (long)poolInfo.state); - add_assoc_long(return_value, "capacity", poolInfo.capacity); - add_assoc_long(return_value, "allocation", poolInfo.allocation); - add_assoc_long(return_value, "available", poolInfo.available); + LONGLONG_ASSOC(return_value, "capacity", poolInfo.capacity); + LONGLONG_ASSOC(return_value, "allocation", poolInfo.allocation); + LONGLONG_ASSOC(return_value, "available", poolInfo.available); } /* @@ -2426,18 +2429,110 @@ PHP_FUNCTION(libvirt_list_storagepools) names=emalloc(expectedcount*sizeof(char *)); count=virConnectListStoragePools(conn->conn,names,expectedcount); - if ((count != expectedcount) || (count<0)) RETURN_FALSE; + if ((count != expectedcount) || (count<0)) + { + efree (names); + RETURN_FALSE; + } + array_init(return_value); for (i=0;i<count;i++) { add_next_index_string(return_value, names[i],1); free(names[i]); } + efree(names); + + + expectedcount = virConnectNumOfDefinedStoragePools (conn->conn); + names= emalloc (expectedcount * sizeof(char *)); + count = virConnectListDefinedStoragePools (conn->conn, names, expectedcount); + if ((count != expectedcount) || (count < 0)) + { + efree (names); + RETURN_FALSE; + } + + for (i = 0; i < count; i++) + { + add_next_index_string (return_value, names[i], 1); + free (names[i]); + } + efree (names); +} +/* + Function name: libvirt_list_active_storagepools + Description: Function is used to list active storage pools on the connection + Arguments: @res [resource]: libvirt connection resource + Returns: libvirt storagepool names array for the connection +*/ +PHP_FUNCTION(libvirt_list_active_storagepools) +{ + php_libvirt_connection *conn=NULL; + zval *zconn; + int count=-1; + int expectedcount=-1; + char **names; + int i; + + GET_CONNECTION_FROM_ARGS("r",&zconn); + + expectedcount=virConnectNumOfStoragePools(conn->conn); + + names=emalloc(expectedcount*sizeof(char *)); + count=virConnectListStoragePools(conn->conn,names,expectedcount); + + if ((count != expectedcount) || (count<0)) + { + efree (names); + RETURN_FALSE; + } + array_init(return_value); + for (i=0;i<count;i++) + { + add_next_index_string(return_value, names[i],1); + free(names[i]); + } efree(names); } /* + Function name: libvirt_list_inactive_storagepools + Description: Function is used to list inactive storage pools on the connection + Arguments: @res [resource]: libvirt connection resource + Returns: libvirt storagepool names array for the connection +*/ +PHP_FUNCTION(libvirt_list_inactive_storagepools) +{ + php_libvirt_connection *conn=NULL; + zval *zconn; + int count=-1; + int expectedcount=-1; + char **names; + int i; + + GET_CONNECTION_FROM_ARGS("r",&zconn); + + expectedcount = virConnectNumOfDefinedStoragePools (conn->conn); + names= emalloc (expectedcount * sizeof(char *)); + count = virConnectListDefinedStoragePools (conn->conn, names, expectedcount); + if ((count != expectedcount) || (count < 0)) + { + efree (names); + RETURN_FALSE; + } + + array_init(return_value); + for (i = 0; i < count; i++) + { + add_next_index_string (return_value, names[i], 1); + free (names[i]); + } + efree (names); +} + +/* Function name: libvirt_list_domains Description: Function is used to list domains on the connection Arguments: @res [resource]: libvirt connection resource @@ -2513,7 +2608,11 @@ PHP_FUNCTION(libvirt_list_domain_resources) ids=emalloc(sizeof(int)*expectedcount); count=virConnectListDomains (conn->conn,ids,expectedcount); - if ((count != expectedcount) || (count<0)) RETURN_FALSE; + if ((count != expectedcount) || (count<0)) + { + efree (ids); + RETURN_FALSE; + } array_init(return_value); for (i=0;i<count;i++) { @@ -2535,7 +2634,11 @@ PHP_FUNCTION(libvirt_list_domain_resources) expectedcount=virConnectNumOfDefinedDomains (conn->conn); names=emalloc(expectedcount*sizeof(char *)); count=virConnectListDefinedDomains (conn->conn,names ,expectedcount); - if ((count != expectedcount) || (count<0)) RETURN_FALSE; + if ((count != expectedcount) || (count<0)) + { + efree (names); + RETURN_FALSE; + } for (i=0;i<count;i++) { domain=virDomainLookupByName (conn->conn,names[i]); @@ -2576,7 +2679,11 @@ PHP_FUNCTION(libvirt_list_active_domain_ids) ids=emalloc(sizeof(int)*expectedcount); count=virConnectListDomains (conn->conn,ids,expectedcount); - if ((count != expectedcount) || (count<0)) RETURN_FALSE; + if ((count != expectedcount) || (count<0)) + { + efree (ids); + RETURN_FALSE; + } array_init(return_value); for (i=0;i<count;i++) { @@ -2608,7 +2715,12 @@ PHP_FUNCTION(libvirt_list_active_domains) ids=emalloc(sizeof(int)*expectedcount); count=virConnectListDomains (conn->conn,ids,expectedcount); - if ((count != expectedcount) || (count<0)) RETURN_FALSE; + if ((count != expectedcount) || (count<0)) + { + efree (ids); + RETURN_FALSE; + } + array_init(return_value); for (i=0;i<count;i++) { @@ -2616,7 +2728,12 @@ PHP_FUNCTION(libvirt_list_active_domains) if (domain!=NULL) { name=virDomainGetName(domain); - if (name==NULL) RETURN_FALSE; + if (name==NULL) + { + efree (ids); + RETURN_FALSE; + } + add_next_index_string(return_value, name, 1); } } @@ -2645,7 +2762,11 @@ PHP_FUNCTION(libvirt_list_inactive_domains) names=emalloc(expectedcount*sizeof(char *)); count=virConnectListDefinedDomains (conn->conn,names ,expectedcount); - if ((count != expectedcount) || (count<0)) RETURN_FALSE; + if ((count != expectedcount) || (count<0)) + { + efree (names); + RETURN_FALSE; + } for (i=0;i<count;i++) { add_next_index_string(return_value, names[i],1); @@ -2678,7 +2799,11 @@ PHP_FUNCTION(libvirt_list_networks) expectedcount=virConnectNumOfNetworks(conn->conn); names=emalloc(expectedcount*sizeof(char *)); count=virConnectListNetworks(conn->conn,names,expectedcount); - if ((count != expectedcount) || (count<0)) RETURN_FALSE; + if ((count != expectedcount) || (count<0)) + { + efree (names); + RETURN_FALSE; + } for (i=0;i<count;i++) { @@ -2694,7 +2819,11 @@ PHP_FUNCTION(libvirt_list_networks) expectedcount=virConnectNumOfDefinedNetworks(conn->conn); names=emalloc(expectedcount*sizeof(char *)); count=virConnectListDefinedNetworks(conn->conn,names,expectedcount); - if ((count != expectedcount) || (count<0)) RETURN_FALSE; + if ((count != expectedcount) || (count<0)) + { + efree (names); + RETURN_FALSE; + } for (i=0;i<count;i++) { @@ -2732,7 +2861,11 @@ PHP_FUNCTION(libvirt_list_nodedevs) expectedcount=virNodeNumOfDevices(conn->conn, cap, 0); names=emalloc(expectedcount*sizeof(char *)); count=virNodeListDevices(conn->conn, cap, names, expectedcount, 0); - if ((count != expectedcount) || (count<0)) RETURN_FALSE; + if ((count != expectedcount) || (count<0)) + { + efree (names); + RETURN_FALSE; + } array_init(return_value); for (i=0;i<count;i++) diff --git a/src/libvirt_php.h b/src/libvirt_php.h index 8667217..3cdc305 100644 --- a/src/libvirt_php.h +++ b/src/libvirt_php.h @@ -168,6 +168,8 @@ PHP_FUNCTION(libvirt_list_active_domains); PHP_FUNCTION(libvirt_list_active_domain_ids); PHP_FUNCTION(libvirt_list_inactive_domains); PHP_FUNCTION(libvirt_list_storagepools); +PHP_FUNCTION(libvirt_list_active_storagepools); +PHP_FUNCTION(libvirt_list_inactive_storagepools); PHP_FUNCTION(libvirt_version); PHP_FUNCTION(libvirt_check_version); diff --git a/tools/Makefile.am b/tools/Makefile.am index b334717..e508371 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -1,3 +1,5 @@ +EXTRA_DIST = generate-api-docs.c + all-am: $(CC) -Wall -o generate-api-docs generate-api-docs.c ./generate-api-docs ../src/libvirt.c ../docs/api-reference.html.in -- 1.7.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list