summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemi Collet <remi@remirepo.net>2022-02-07 16:59:35 +0100
committerRemi Collet <remi@php.net>2022-02-07 16:59:35 +0100
commite97d954577fe0036e8e3f8ba06a19ba04dc6aef0 (patch)
tree55d41ea6c725b770748311eb9d2246616073311f
parentfa071d556d223882f4bf847701c8d51d3d8e735e (diff)
add fix from https://github.com/eduardok/libsmbclient-php/pull/94
-rw-r--r--.gitignore2
-rw-r--r--REFLECTION111
-rw-r--r--php-smbclient.spec16
-rw-r--r--smbclient-stub.patch881
4 files changed, 964 insertions, 46 deletions
diff --git a/.gitignore b/.gitignore
index 0137d58..b127d9a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,5 @@
clog
-libsmbclient-php-phpunit.xml
+smbclient-phpunit.xml
package-*.xml
*.tgz
*.tar.bz2
diff --git a/REFLECTION b/REFLECTION
index 87e281b..5742b34 100644
--- a/REFLECTION
+++ b/REFLECTION
@@ -38,11 +38,13 @@ Extension [ <persistent> extension #120 smbclient version 1.0.6 ] {
- Parameters [0] {
}
+ - Return [ string ]
}
Function [ <internal:smbclient> function smbclient_library_version ] {
- Parameters [0] {
}
+ - Return [ string ]
}
Function [ <internal:smbclient> function smbclient_state_new ] {
@@ -53,35 +55,38 @@ Extension [ <persistent> extension #120 smbclient version 1.0.6 ] {
- Parameters [4] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <optional> $workgroup = <default> ]
- Parameter #2 [ <optional> $user = <default> ]
- Parameter #3 [ <optional> $password = <default> ]
+ Parameter #1 [ <optional> string $workgroup = null ]
+ Parameter #2 [ <optional> string $user = null ]
+ Parameter #3 [ <optional> string $password = null ]
}
+ - Return [ bool ]
}
Function [ <internal:smbclient> function smbclient_state_errno ] {
- Parameters [1] {
Parameter #0 [ <required> $state ]
}
+ - Return [ int ]
}
Function [ <internal:smbclient> function smbclient_state_free ] {
- Parameters [1] {
Parameter #0 [ <required> $state ]
}
+ - Return [ bool ]
}
Function [ <internal:smbclient> function smbclient_option_get ] {
- Parameters [2] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <required> $option ]
+ Parameter #1 [ <required> int $option ]
}
}
Function [ <internal:smbclient> function smbclient_option_set ] {
- Parameters [3] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <required> $option ]
+ Parameter #1 [ <required> int $option ]
Parameter #2 [ <required> $value ]
}
}
@@ -89,15 +94,16 @@ Extension [ <persistent> extension #120 smbclient version 1.0.6 ] {
- Parameters [3] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <optional> $minproto = <default> ]
- Parameter #2 [ <optional> $maxproto = <default> ]
+ Parameter #1 [ <optional> string $minproto = null ]
+ Parameter #2 [ <optional> string $maxproto = null ]
}
+ - Return [ bool ]
}
Function [ <internal:smbclient> function smbclient_opendir ] {
- Parameters [2] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <required> $path ]
+ Parameter #1 [ <required> string $path ]
}
}
Function [ <internal:smbclient> function smbclient_readdir ] {
@@ -106,6 +112,7 @@ Extension [ <persistent> extension #120 smbclient version 1.0.6 ] {
Parameter #0 [ <required> $state ]
Parameter #1 [ <required> $dir ]
}
+ - Return [ array|false ]
}
Function [ <internal:smbclient> function smbclient_closedir ] {
@@ -113,13 +120,15 @@ Extension [ <persistent> extension #120 smbclient version 1.0.6 ] {
Parameter #0 [ <required> $state ]
Parameter #1 [ <required> $dir ]
}
+ - Return [ bool ]
}
Function [ <internal:smbclient> function smbclient_stat ] {
- Parameters [2] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <required> $path ]
+ Parameter #1 [ <required> string $path ]
}
+ - Return [ array|false ]
}
Function [ <internal:smbclient> function smbclient_fstat ] {
@@ -127,22 +136,23 @@ Extension [ <persistent> extension #120 smbclient version 1.0.6 ] {
Parameter #0 [ <required> $state ]
Parameter #1 [ <required> $file ]
}
+ - Return [ array|false ]
}
Function [ <internal:smbclient> function smbclient_open ] {
- Parameters [4] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <required> $path ]
- Parameter #2 [ <required> $flags ]
- Parameter #3 [ <optional> $mode = <default> ]
+ Parameter #1 [ <required> string $path ]
+ Parameter #2 [ <required> string $flags ]
+ Parameter #3 [ <optional> int $mode = 0666 ]
}
}
Function [ <internal:smbclient> function smbclient_creat ] {
- Parameters [3] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <required> $path ]
- Parameter #2 [ <optional> $mode = <default> ]
+ Parameter #1 [ <required> string $path ]
+ Parameter #2 [ <optional> int $mode = 0666 ]
}
}
Function [ <internal:smbclient> function smbclient_read ] {
@@ -150,8 +160,9 @@ Extension [ <persistent> extension #120 smbclient version 1.0.6 ] {
- Parameters [3] {
Parameter #0 [ <required> $state ]
Parameter #1 [ <required> $file ]
- Parameter #2 [ <required> $count ]
+ Parameter #2 [ <required> int $count ]
}
+ - Return [ string|false ]
}
Function [ <internal:smbclient> function smbclient_close ] {
@@ -159,120 +170,135 @@ Extension [ <persistent> extension #120 smbclient version 1.0.6 ] {
Parameter #0 [ <required> $state ]
Parameter #1 [ <required> $file ]
}
+ - Return [ bool ]
}
Function [ <internal:smbclient> function smbclient_mkdir ] {
- Parameters [3] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <required> $path ]
- Parameter #2 [ <optional> $mode = <default> ]
+ Parameter #1 [ <required> string $path ]
+ Parameter #2 [ <optional> int $mode = 0666 ]
}
+ - Return [ bool ]
}
Function [ <internal:smbclient> function smbclient_rmdir ] {
- Parameters [2] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <required> $path ]
+ Parameter #1 [ <required> string $path ]
}
+ - Return [ bool ]
}
Function [ <internal:smbclient> function smbclient_rename ] {
- Parameters [4] {
Parameter #0 [ <required> $oldstate ]
- Parameter #1 [ <required> $oldpath ]
- Parameter #2 [ <required> $oldstate ]
- Parameter #3 [ <required> $oldpath ]
+ Parameter #1 [ <required> string $oldpath ]
+ Parameter #2 [ <required> $newstate ]
+ Parameter #3 [ <required> string $newpath ]
}
+ - Return [ bool ]
}
Function [ <internal:smbclient> function smbclient_write ] {
- Parameters [4] {
Parameter #0 [ <required> $state ]
Parameter #1 [ <required> $file ]
- Parameter #2 [ <required> $buffer ]
- Parameter #3 [ <optional> $count = <default> ]
+ Parameter #2 [ <required> string $buffer ]
+ Parameter #3 [ <optional> int $count = 0 ]
}
+ - Return [ int|false ]
}
Function [ <internal:smbclient> function smbclient_unlink ] {
- Parameters [2] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <required> $path ]
+ Parameter #1 [ <required> string $path ]
}
+ - Return [ bool ]
}
Function [ <internal:smbclient> function smbclient_lseek ] {
- Parameters [4] {
Parameter #0 [ <required> $state ]
Parameter #1 [ <required> $file ]
- Parameter #2 [ <required> $offset ]
- Parameter #3 [ <required> $whence ]
+ Parameter #2 [ <required> int $offset ]
+ Parameter #3 [ <required> int $whence ]
}
+ - Return [ int|false ]
}
Function [ <internal:smbclient> function smbclient_ftruncate ] {
- Parameters [3] {
Parameter #0 [ <required> $state ]
Parameter #1 [ <required> $file ]
- Parameter #2 [ <required> $offset ]
+ Parameter #2 [ <required> int $offset ]
}
+ - Return [ bool ]
}
Function [ <internal:smbclient> function smbclient_chmod ] {
- Parameters [3] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <required> $path ]
- Parameter #2 [ <optional> $mode = <default> ]
+ Parameter #1 [ <required> string $path ]
+ Parameter #2 [ <required> int $mode ]
}
+ - Return [ bool ]
}
Function [ <internal:smbclient> function smbclient_utimes ] {
- Parameters [4] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <required> $path ]
- Parameter #2 [ <required> $mtime ]
- Parameter #3 [ <required> $atime ]
+ Parameter #1 [ <required> string $path ]
+ Parameter #2 [ <optional> int $mtime = -1 ]
+ Parameter #3 [ <optional> int $atime = -1 ]
}
+ - Return [ bool ]
}
Function [ <internal:smbclient> function smbclient_listxattr ] {
- Parameters [2] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <required> $path ]
+ Parameter #1 [ <required> string $path ]
}
+ - Return [ array|false ]
}
Function [ <internal:smbclient> function smbclient_getxattr ] {
- Parameters [3] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <required> $path ]
- Parameter #2 [ <required> $name ]
+ Parameter #1 [ <required> string $path ]
+ Parameter #2 [ <required> string $name ]
}
+ - Return [ string|false ]
}
Function [ <internal:smbclient> function smbclient_setxattr ] {
- Parameters [5] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <required> $path ]
- Parameter #2 [ <required> $name ]
- Parameter #3 [ <required> $value ]
- Parameter #4 [ <optional> $flags = <default> ]
+ Parameter #1 [ <required> string $path ]
+ Parameter #2 [ <required> string $name ]
+ Parameter #3 [ <required> string $value ]
+ Parameter #4 [ <optional> int $flags = 0 ]
}
+ - Return [ string|false ]
}
Function [ <internal:smbclient> function smbclient_removexattr ] {
- Parameters [3] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <required> $path ]
- Parameter #2 [ <required> $name ]
+ Parameter #1 [ <required> string $path ]
+ Parameter #2 [ <required> string $name ]
}
+ - Return [ bool ]
}
Function [ <internal:smbclient> function smbclient_statvfs ] {
- Parameters [2] {
Parameter #0 [ <required> $state ]
- Parameter #1 [ <required> $path ]
+ Parameter #1 [ <required> string $path ]
}
+ - Return [ array|false ]
}
Function [ <internal:smbclient> function smbclient_fstatvfs ] {
@@ -280,6 +306,7 @@ Extension [ <persistent> extension #120 smbclient version 1.0.6 ] {
Parameter #0 [ <required> $state ]
Parameter #1 [ <required> $file ]
}
+ - Return [ array|false ]
}
}
}
diff --git a/php-smbclient.spec b/php-smbclient.spec
index 4008a72..6a7fcde 100644
--- a/php-smbclient.spec
+++ b/php-smbclient.spec
@@ -1,6 +1,6 @@
# remirepo spec file for php-smbclient
#
-# Copyright (c) 2015-2020 Remi Collet
+# Copyright (c) 2015-2022 Remi Collet
# License: CC-BY-SA
# http://creativecommons.org/licenses/by-sa/4.0/
#
@@ -39,7 +39,7 @@ Version: 1.0.6
%if 0%{?gh_date}
Release: 0.9.%{gh_date}git%{gh_short}%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}}
%else
-Release: 1%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}}
+Release: 6%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}}
%endif
Summary: PHP wrapper for libsmbclient
@@ -52,9 +52,11 @@ Source0: https://github.com/%{gh_owner}/%{gh_project}/archive/%{gh_commit
Source0: https://pecl.php.net/get/%{pecl_name}-%{version}%{?prever}.tgz
%endif
%if %{with_tests}
-Source2: %{gh_project}-phpunit.xml
+Source2: %{pecl_name}-phpunit.xml
%endif
+Patch0: %{pecl_name}-stub.patch
+
BuildRequires: %{?dtsprefix}gcc
BuildRequires: %{?scl_prefix}php-devel
BuildRequires: %{?scl_prefix}php-pear
@@ -101,6 +103,9 @@ Obsoletes: php74-pecl-%{pecl_name} <= %{version}
%if "%{php_version}" > "8.0"
Obsoletes: php80-pecl-%{pecl_name} <= %{version}
%endif
+%if "%{php_version}" > "8.1"
+Obsoletes: php81-pecl-%{pecl_name} <= %{version}
+%endif
%endif
@@ -127,6 +132,8 @@ sed -e 's/role="test"/role="src"/' \
-i package.xml
cd NTS
+%patch0 -p1
+
# Check extension version
ver=$(sed -n '/define PHP_SMBCLIENT_VERSION/{s/.* "//;s/".*$//;p}' php_smbclient.h)
if test "$ver" != "%{version}%{?prever}%{?gh_date:-dev}"; then
@@ -244,6 +251,9 @@ fi
%changelog
+* Mon Feb 7 2022 Remi Collet <remi@remirepo.net> - 1.0.6-6
+- add fix from https://github.com/eduardok/libsmbclient-php/pull/94
+
* Mon Mar 1 2021 Remi Collet <remi@remirepo.net> - 1.0.6-1
- update to 1.0.6
diff --git a/smbclient-stub.patch b/smbclient-stub.patch
new file mode 100644
index 0000000..571ad1f
--- /dev/null
+++ b/smbclient-stub.patch
@@ -0,0 +1,881 @@
+From 4b17fed6363c109ef34baebce1e367acd97a3c13 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@remirepo.net>
+Date: Mon, 7 Feb 2022 16:43:42 +0100
+Subject: [PATCH] generate arginfo from stub - fix smbclient_rename parameters
+ name - fix smbclient_chmod, mode is required - fix smbclient_utimes: mtime
+ and atime are optional
+
+---
+ package.xml | 3 +
+ smbclient.c | 164 +-----------------------
+ smbclient.stub.php | 189 ++++++++++++++++++++++++++++
+ smbclient_arginfo.h | 249 +++++++++++++++++++++++++++++++++++++
+ smbclient_legacy_arginfo.h | 226 +++++++++++++++++++++++++++++++++
+ 5 files changed, 671 insertions(+), 160 deletions(-)
+ create mode 100644 smbclient.stub.php
+ create mode 100644 smbclient_arginfo.h
+ create mode 100644 smbclient_legacy_arginfo.h
+
+diff --git a/smbclient.c b/smbclient.c
+index a63bad4..6b98693 100644
+--- a/smbclient.c
++++ b/smbclient.c
+@@ -147,172 +147,16 @@ hide_password (char *url, int len)
+ astfill(second_colon + 1, at_sign - 1);
+ }
+
+-/* {{{ arginfo */
+-ZEND_BEGIN_ARG_INFO(arginfo_smbclient_void, 0)
+-ZEND_END_ARG_INFO()
+-
+-ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_state_init, 0, 0, 1)
+- ZEND_ARG_INFO(0, state)
+- ZEND_ARG_INFO(0, workgroup)
+- ZEND_ARG_INFO(0, user)
+- ZEND_ARG_INFO(0, password)
+-ZEND_END_ARG_INFO()
+-
+-ZEND_BEGIN_ARG_INFO(arginfo_smbclient_state, 0)
+- ZEND_ARG_INFO(0, state)
+-ZEND_END_ARG_INFO()
+-
+-ZEND_BEGIN_ARG_INFO(arginfo_smbclient_option_get, 0)
+- ZEND_ARG_INFO(0, state)
+- ZEND_ARG_INFO(0, option)
+-ZEND_END_ARG_INFO()
+-
+-ZEND_BEGIN_ARG_INFO(arginfo_smbclient_option_set, 0)
+- ZEND_ARG_INFO(0, state)
+- ZEND_ARG_INFO(0, option)
+- ZEND_ARG_INFO(0, value)
+-ZEND_END_ARG_INFO()
+-
+-#if HAVE_SMBC_SETOPTIONPROTOCOLS
+-ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_client_protocols, 0, 0, 1)
+- ZEND_ARG_INFO(0, state)
+- ZEND_ARG_INFO(0, minproto)
+- ZEND_ARG_INFO(0, maxproto)
+-ZEND_END_ARG_INFO()
+-#endif
+-
+-ZEND_BEGIN_ARG_INFO(arginfo_smbclient_path, 0)
+- ZEND_ARG_INFO(0, state)
+- ZEND_ARG_INFO(0, path)
+-ZEND_END_ARG_INFO()
+-
+-ZEND_BEGIN_ARG_INFO(arginfo_smbclient_rename, 0)
+- ZEND_ARG_INFO(0, oldstate)
+- ZEND_ARG_INFO(0, oldpath)
+- ZEND_ARG_INFO(0, oldstate)
+- ZEND_ARG_INFO(0, oldpath)
+-ZEND_END_ARG_INFO()
+-
+-ZEND_BEGIN_ARG_INFO(arginfo_smbclient_dir, 0)
+- ZEND_ARG_INFO(0, state)
+- ZEND_ARG_INFO(0, dir)
+-ZEND_END_ARG_INFO()
+-
+-ZEND_BEGIN_ARG_INFO(arginfo_smbclient_file, 0)
+- ZEND_ARG_INFO(0, state)
+- ZEND_ARG_INFO(0, file)
+-ZEND_END_ARG_INFO()
+-
+-ZEND_BEGIN_ARG_INFO(arginfo_smbclient_read, 0)
+- ZEND_ARG_INFO(0, state)
+- ZEND_ARG_INFO(0, file)
+- ZEND_ARG_INFO(0, count)
+-ZEND_END_ARG_INFO()
+-
+-ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_open, 0, 0, 3)
+- ZEND_ARG_INFO(0, state)
+- ZEND_ARG_INFO(0, path)
+- ZEND_ARG_INFO(0, flags)
+- ZEND_ARG_INFO(0, mode)
+-ZEND_END_ARG_INFO()
+-
+-ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_creat, 0, 0, 2)
+- ZEND_ARG_INFO(0, state)
+- ZEND_ARG_INFO(0, path)
+- ZEND_ARG_INFO(0, mode)
+-ZEND_END_ARG_INFO()
+-
+-ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_write, 0, 0, 3)
+- ZEND_ARG_INFO(0, state)
+- ZEND_ARG_INFO(0, file)
+- ZEND_ARG_INFO(0, buffer)
+- ZEND_ARG_INFO(0, count)
+-ZEND_END_ARG_INFO()
+-
+-ZEND_BEGIN_ARG_INFO(arginfo_smbclient_lseek, 0)
+- ZEND_ARG_INFO(0, state)
+- ZEND_ARG_INFO(0, file)
+- ZEND_ARG_INFO(0, offset)
+- ZEND_ARG_INFO(0, whence)
+-ZEND_END_ARG_INFO()
+-
+-ZEND_BEGIN_ARG_INFO(arginfo_smbclient_ftruncate, 0)
+- ZEND_ARG_INFO(0, state)
+- ZEND_ARG_INFO(0, file)
+- ZEND_ARG_INFO(0, offset)
+-ZEND_END_ARG_INFO()
+-
+-ZEND_BEGIN_ARG_INFO(arginfo_smbclient_utimes, 0)
+- ZEND_ARG_INFO(0, state)
+- ZEND_ARG_INFO(0, path)
+- ZEND_ARG_INFO(0, mtime)
+- ZEND_ARG_INFO(0, atime)
+-ZEND_END_ARG_INFO()
+-
+-ZEND_BEGIN_ARG_INFO(arginfo_smbclient_getxattr, 0)
+- ZEND_ARG_INFO(0, state)
+- ZEND_ARG_INFO(0, path)
+- ZEND_ARG_INFO(0, name)
+-ZEND_END_ARG_INFO()
+-
+-ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_setxattr, 0, 0, 4)
+- ZEND_ARG_INFO(0, state)
+- ZEND_ARG_INFO(0, path)
+- ZEND_ARG_INFO(0, name)
+- ZEND_ARG_INFO(0, value)
+- ZEND_ARG_INFO(0, flags)
+-ZEND_END_ARG_INFO()
+-
+-/* }}} */
+-
+-static zend_function_entry smbclient_functions[] =
+-{
+- PHP_FE(smbclient_version, arginfo_smbclient_void)
+- PHP_FE(smbclient_library_version, arginfo_smbclient_void)
+- PHP_FE(smbclient_state_new, arginfo_smbclient_void)
+- PHP_FE(smbclient_state_init, arginfo_smbclient_state_init)
+- PHP_FE(smbclient_state_errno, arginfo_smbclient_state)
+- PHP_FE(smbclient_state_free, arginfo_smbclient_state)
+- PHP_FE(smbclient_option_get, arginfo_smbclient_option_get)
+- PHP_FE(smbclient_option_set, arginfo_smbclient_option_set)
+-#if HAVE_SMBC_SETOPTIONPROTOCOLS
+- PHP_FE(smbclient_client_protocols, arginfo_smbclient_client_protocols)
+-#endif
+- PHP_FE(smbclient_opendir, arginfo_smbclient_path)
+- PHP_FE(smbclient_readdir, arginfo_smbclient_dir)
+- PHP_FE(smbclient_closedir, arginfo_smbclient_dir)
+- PHP_FE(smbclient_stat, arginfo_smbclient_path)
+- PHP_FE(smbclient_fstat, arginfo_smbclient_file)
+- PHP_FE(smbclient_open, arginfo_smbclient_open)
+- PHP_FE(smbclient_creat, arginfo_smbclient_creat)
+- PHP_FE(smbclient_read, arginfo_smbclient_read)
+- PHP_FE(smbclient_close, arginfo_smbclient_file)
+- PHP_FE(smbclient_mkdir, arginfo_smbclient_creat)
+- PHP_FE(smbclient_rmdir, arginfo_smbclient_path)
+- PHP_FE(smbclient_rename, arginfo_smbclient_rename)
+- PHP_FE(smbclient_write, arginfo_smbclient_write)
+- PHP_FE(smbclient_unlink, arginfo_smbclient_path)
+- PHP_FE(smbclient_lseek, arginfo_smbclient_lseek)
+- PHP_FE(smbclient_ftruncate, arginfo_smbclient_ftruncate)
+- PHP_FE(smbclient_chmod, arginfo_smbclient_creat)
+- PHP_FE(smbclient_utimes, arginfo_smbclient_utimes)
+- PHP_FE(smbclient_listxattr, arginfo_smbclient_path)
+- PHP_FE(smbclient_getxattr, arginfo_smbclient_getxattr)
+- PHP_FE(smbclient_setxattr, arginfo_smbclient_setxattr)
+- PHP_FE(smbclient_removexattr, arginfo_smbclient_getxattr)
+- PHP_FE(smbclient_statvfs, arginfo_smbclient_path)
+- PHP_FE(smbclient_fstatvfs, arginfo_smbclient_file)
+-#ifdef PHP_FE_END
+- PHP_FE_END
++#if PHP_VERSION_ID < 80000
++#include "smbclient_legacy_arginfo.h"
+ #else
+- {NULL, NULL, NULL}
++#include "smbclient_arginfo.h"
+ #endif
+-};
+
+ zend_module_entry smbclient_module_entry =
+ { STANDARD_MODULE_HEADER
+ , "smbclient" /* name */
+- , smbclient_functions /* functions */
++ , ext_functions /* functions */
+ , PHP_MINIT(smbclient) /* module_startup_func */
+ , PHP_MSHUTDOWN(smbclient) /* module_shutdown_func */
+ , PHP_RINIT(smbclient) /* request_startup_func */
+diff --git a/smbclient.stub.php b/smbclient.stub.php
+new file mode 100644
+index 0000000..65f5fad
+--- /dev/null
++++ b/smbclient.stub.php
+@@ -0,0 +1,189 @@
++<?php
++
++/**
++ * @generate-function-entries
++ * @generate-legacy-arginfo
++ */
++
++function smbclient_version(): string {}
++
++function smbclient_library_version(): string {}
++
++/**
++ * @return false|resource
++ */
++function smbclient_state_new() {}
++
++/**
++ * @param resource $state
++ */
++function smbclient_state_init($state, string $workgroup=null, string $user=null, string $password=null): bool {}
++
++/**
++ * @param resource $state
++ */
++function smbclient_state_errno($state): int {}
++
++/**
++ * @param resource $state
++ */
++function smbclient_state_free($state): bool {}
++
++/**
++ * @param resource $state
++ * @return mixed
++ */
++function smbclient_option_get($state, int $option) {}
++
++/**
++ * @param resource $state
++ * @param mixed $value
++ * @return mixed
++ */
++function smbclient_option_set($state, int $option, $value) {}
++
++
++#if HAVE_SMBC_SETOPTIONPROTOCOLS
++/**
++ * @param resource $state
++ * @param mixed $value
++ * @return mixed
++ */
++function smbclient_client_protocols($state, string $minproto=null, string $maxproto=null): bool {}
++#endif
++
++/**
++ * @param resource $state
++ * @return false|resource
++ */
++function smbclient_opendir($state, string $path) {}
++
++/**
++ * @param resource $state
++ * @param resource $dir
++ */
++function smbclient_readdir($state, $dir): false|array {}
++
++/**
++ * @param resource $state
++ * @param resource $dir
++ */
++function smbclient_closedir($state, $dir): bool {}
++
++/**
++ * @param resource $state
++ * @return false|resource
++ */
++function smbclient_stat($state, string $path): false|array {}
++
++/**
++ * @param resource $state
++ * @param resource $file
++ */
++function smbclient_fstat($state, $file): false|array {}
++
++/**
++ * @param resource $state
++ * @return false|resource
++ */
++function smbclient_open($state, string $path, string $flags, int $mode=0666) {}
++
++/**
++ * @param resource $state
++ * @return false|resource
++ */
++function smbclient_creat($state, string $path, int $mode=0666) {}
++
++/**
++ * @param resource $state
++ * @param resource $file
++ */
++function smbclient_read($state, $file, int $count): false|string {}
++
++/**
++ * @param resource $state
++ * @param resource $file
++ */
++function smbclient_close($state, $file): bool {}
++
++/**
++ * @param resource $state
++ */
++function smbclient_mkdir($state, string $path, int $mode=0666): bool {}
++
++/**
++ * @param resource $state
++ */
++function smbclient_rmdir($state, string $path): bool {}
++
++/**
++ * @param resource $oldstate
++ * @param resource $newstate
++ */
++function smbclient_rename($oldstate, string $oldpath, $newstate, string $newpath): bool {}
++
++/**
++ * @param resource $state
++ * @param resource $file
++ */
++function smbclient_write($state, $file, string $buffer, int $count=0): false|int {}
++
++/**
++ * @param resource $state
++ */
++function smbclient_unlink($state, string $path): bool {}
++
++/**
++ * @param resource $state
++ * @param resource $file
++ */
++function smbclient_lseek($state, $file, int $offset, int $whence): false|int {}
++
++/**
++ * @param resource $state
++ * @param resource $file
++ */
++function smbclient_ftruncate($state, $file, int $offset): bool {}
++
++/**
++ * @param resource $state
++ */
++function smbclient_chmod($state, string $path, int $mode): bool {}
++
++/**
++ * @param resource $state
++ */
++function smbclient_utimes($state, string $path, int $mtime=-1, int $atime=-1): bool {}
++
++/**
++ * @param resource $state
++ */
++function smbclient_listxattr($state, string $path): false|array {}
++
++/**
++ * @param resource $state
++ */
++function smbclient_getxattr($state, string $path, string $name): false|string {}
++
++/**
++ * @param resource $state
++ */
++function smbclient_setxattr($state, string $path, string $name, string $value, int $flags=0): false|string {}
++
++/**
++ * @param resource $state
++ */
++function smbclient_removexattr($state, string $path, string $name): bool {}
++
++/**
++ * @param resource $state
++ * @return false|resource
++ */
++function smbclient_statvfs($state, string $path): false|array {}
++
++/**
++ * @param resource $state
++ * @param resource $file
++ */
++function smbclient_fstatvfs($state, $file): false|array {}
++
+diff --git a/smbclient_arginfo.h b/smbclient_arginfo.h
+new file mode 100644
+index 0000000..c5f091a
+--- /dev/null
++++ b/smbclient_arginfo.h
+@@ -0,0 +1,249 @@
++/* This is a generated file, edit the .stub.php file instead.
++ * Stub hash: 6abe27ac2cfb259cc835af1bafe32bb639c422b1 */
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_smbclient_version, 0, 0, IS_STRING, 0)
++ZEND_END_ARG_INFO()
++
++#define arginfo_smbclient_library_version arginfo_smbclient_version
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_state_new, 0, 0, 0)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_smbclient_state_init, 0, 1, _IS_BOOL, 0)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, workgroup, IS_STRING, 0, "null")
++ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, user, IS_STRING, 0, "null")
++ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, password, IS_STRING, 0, "null")
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_smbclient_state_errno, 0, 1, IS_LONG, 0)
++ ZEND_ARG_INFO(0, state)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_smbclient_state_free, 0, 1, _IS_BOOL, 0)
++ ZEND_ARG_INFO(0, state)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_option_get, 0, 0, 2)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_option_set, 0, 0, 3)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
++ ZEND_ARG_INFO(0, value)
++ZEND_END_ARG_INFO()
++
++#if HAVE_SMBC_SETOPTIONPROTOCOLS
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_smbclient_client_protocols, 0, 1, _IS_BOOL, 0)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, minproto, IS_STRING, 0, "null")
++ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, maxproto, IS_STRING, 0, "null")
++ZEND_END_ARG_INFO()
++#endif
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_opendir, 0, 0, 2)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_smbclient_readdir, 0, 2, MAY_BE_FALSE|MAY_BE_ARRAY)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, dir)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_smbclient_closedir, 0, 2, _IS_BOOL, 0)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, dir)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_smbclient_stat, 0, 2, MAY_BE_FALSE|MAY_BE_ARRAY)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_smbclient_fstat, 0, 2, MAY_BE_FALSE|MAY_BE_ARRAY)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, file)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_open, 0, 0, 3)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
++ ZEND_ARG_TYPE_INFO(0, flags, IS_STRING, 0)
++ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "0666")
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_creat, 0, 0, 2)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
++ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "0666")
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_smbclient_read, 0, 3, MAY_BE_FALSE|MAY_BE_STRING)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, file)
++ ZEND_ARG_TYPE_INFO(0, count, IS_LONG, 0)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_smbclient_close, 0, 2, _IS_BOOL, 0)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, file)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_smbclient_mkdir, 0, 2, _IS_BOOL, 0)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
++ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "0666")
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_smbclient_rmdir, 0, 2, _IS_BOOL, 0)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_smbclient_rename, 0, 4, _IS_BOOL, 0)
++ ZEND_ARG_INFO(0, oldstate)
++ ZEND_ARG_TYPE_INFO(0, oldpath, IS_STRING, 0)
++ ZEND_ARG_INFO(0, newstate)
++ ZEND_ARG_TYPE_INFO(0, newpath, IS_STRING, 0)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_smbclient_write, 0, 3, MAY_BE_FALSE|MAY_BE_LONG)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, file)
++ ZEND_ARG_TYPE_INFO(0, buffer, IS_STRING, 0)
++ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, count, IS_LONG, 0, "0")
++ZEND_END_ARG_INFO()
++
++#define arginfo_smbclient_unlink arginfo_smbclient_rmdir
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_smbclient_lseek, 0, 4, MAY_BE_FALSE|MAY_BE_LONG)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, file)
++ ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
++ ZEND_ARG_TYPE_INFO(0, whence, IS_LONG, 0)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_smbclient_ftruncate, 0, 3, _IS_BOOL, 0)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, file)
++ ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_smbclient_chmod, 0, 3, _IS_BOOL, 0)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
++ ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_smbclient_utimes, 0, 2, _IS_BOOL, 0)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
++ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mtime, IS_LONG, 0, "-1")
++ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, atime, IS_LONG, 0, "-1")
++ZEND_END_ARG_INFO()
++
++#define arginfo_smbclient_listxattr arginfo_smbclient_stat
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_smbclient_getxattr, 0, 3, MAY_BE_FALSE|MAY_BE_STRING)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
++ ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_smbclient_setxattr, 0, 4, MAY_BE_FALSE|MAY_BE_STRING)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
++ ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
++ ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0)
++ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0")
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_smbclient_removexattr, 0, 3, _IS_BOOL, 0)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0)
++ ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
++ZEND_END_ARG_INFO()
++
++#define arginfo_smbclient_statvfs arginfo_smbclient_stat
++
++#define arginfo_smbclient_fstatvfs arginfo_smbclient_fstat
++
++
++ZEND_FUNCTION(smbclient_version);
++ZEND_FUNCTION(smbclient_library_version);
++ZEND_FUNCTION(smbclient_state_new);
++ZEND_FUNCTION(smbclient_state_init);
++ZEND_FUNCTION(smbclient_state_errno);
++ZEND_FUNCTION(smbclient_state_free);
++ZEND_FUNCTION(smbclient_option_get);
++ZEND_FUNCTION(smbclient_option_set);
++#if HAVE_SMBC_SETOPTIONPROTOCOLS
++ZEND_FUNCTION(smbclient_client_protocols);
++#endif
++ZEND_FUNCTION(smbclient_opendir);
++ZEND_FUNCTION(smbclient_readdir);
++ZEND_FUNCTION(smbclient_closedir);
++ZEND_FUNCTION(smbclient_stat);
++ZEND_FUNCTION(smbclient_fstat);
++ZEND_FUNCTION(smbclient_open);
++ZEND_FUNCTION(smbclient_creat);
++ZEND_FUNCTION(smbclient_read);
++ZEND_FUNCTION(smbclient_close);
++ZEND_FUNCTION(smbclient_mkdir);
++ZEND_FUNCTION(smbclient_rmdir);
++ZEND_FUNCTION(smbclient_rename);
++ZEND_FUNCTION(smbclient_write);
++ZEND_FUNCTION(smbclient_unlink);
++ZEND_FUNCTION(smbclient_lseek);
++ZEND_FUNCTION(smbclient_ftruncate);
++ZEND_FUNCTION(smbclient_chmod);
++ZEND_FUNCTION(smbclient_utimes);
++ZEND_FUNCTION(smbclient_listxattr);
++ZEND_FUNCTION(smbclient_getxattr);
++ZEND_FUNCTION(smbclient_setxattr);
++ZEND_FUNCTION(smbclient_removexattr);
++ZEND_FUNCTION(smbclient_statvfs);
++ZEND_FUNCTION(smbclient_fstatvfs);
++
++
++static const zend_function_entry ext_functions[] = {
++ ZEND_FE(smbclient_version, arginfo_smbclient_version)
++ ZEND_FE(smbclient_library_version, arginfo_smbclient_library_version)
++ ZEND_FE(smbclient_state_new, arginfo_smbclient_state_new)
++ ZEND_FE(smbclient_state_init, arginfo_smbclient_state_init)
++ ZEND_FE(smbclient_state_errno, arginfo_smbclient_state_errno)
++ ZEND_FE(smbclient_state_free, arginfo_smbclient_state_free)
++ ZEND_FE(smbclient_option_get, arginfo_smbclient_option_get)
++ ZEND_FE(smbclient_option_set, arginfo_smbclient_option_set)
++#if HAVE_SMBC_SETOPTIONPROTOCOLS
++ ZEND_FE(smbclient_client_protocols, arginfo_smbclient_client_protocols)
++#endif
++ ZEND_FE(smbclient_opendir, arginfo_smbclient_opendir)
++ ZEND_FE(smbclient_readdir, arginfo_smbclient_readdir)
++ ZEND_FE(smbclient_closedir, arginfo_smbclient_closedir)
++ ZEND_FE(smbclient_stat, arginfo_smbclient_stat)
++ ZEND_FE(smbclient_fstat, arginfo_smbclient_fstat)
++ ZEND_FE(smbclient_open, arginfo_smbclient_open)
++ ZEND_FE(smbclient_creat, arginfo_smbclient_creat)
++ ZEND_FE(smbclient_read, arginfo_smbclient_read)
++ ZEND_FE(smbclient_close, arginfo_smbclient_close)
++ ZEND_FE(smbclient_mkdir, arginfo_smbclient_mkdir)
++ ZEND_FE(smbclient_rmdir, arginfo_smbclient_rmdir)
++ ZEND_FE(smbclient_rename, arginfo_smbclient_rename)
++ ZEND_FE(smbclient_write, arginfo_smbclient_write)
++ ZEND_FE(smbclient_unlink, arginfo_smbclient_unlink)
++ ZEND_FE(smbclient_lseek, arginfo_smbclient_lseek)
++ ZEND_FE(smbclient_ftruncate, arginfo_smbclient_ftruncate)
++ ZEND_FE(smbclient_chmod, arginfo_smbclient_chmod)
++ ZEND_FE(smbclient_utimes, arginfo_smbclient_utimes)
++ ZEND_FE(smbclient_listxattr, arginfo_smbclient_listxattr)
++ ZEND_FE(smbclient_getxattr, arginfo_smbclient_getxattr)
++ ZEND_FE(smbclient_setxattr, arginfo_smbclient_setxattr)
++ ZEND_FE(smbclient_removexattr, arginfo_smbclient_removexattr)
++ ZEND_FE(smbclient_statvfs, arginfo_smbclient_statvfs)
++ ZEND_FE(smbclient_fstatvfs, arginfo_smbclient_fstatvfs)
++ ZEND_FE_END
++};
+diff --git a/smbclient_legacy_arginfo.h b/smbclient_legacy_arginfo.h
+new file mode 100644
+index 0000000..dd58e7a
+--- /dev/null
++++ b/smbclient_legacy_arginfo.h
+@@ -0,0 +1,226 @@
++/* This is a generated file, edit the .stub.php file instead.
++ * Stub hash: 6abe27ac2cfb259cc835af1bafe32bb639c422b1 */
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_version, 0, 0, 0)
++ZEND_END_ARG_INFO()
++
++#define arginfo_smbclient_library_version arginfo_smbclient_version
++
++#define arginfo_smbclient_state_new arginfo_smbclient_version
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_state_init, 0, 0, 1)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, workgroup)
++ ZEND_ARG_INFO(0, user)
++ ZEND_ARG_INFO(0, password)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_state_errno, 0, 0, 1)
++ ZEND_ARG_INFO(0, state)
++ZEND_END_ARG_INFO()
++
++#define arginfo_smbclient_state_free arginfo_smbclient_state_errno
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_option_get, 0, 0, 2)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, option)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_option_set, 0, 0, 3)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, option)
++ ZEND_ARG_INFO(0, value)
++ZEND_END_ARG_INFO()
++
++#if HAVE_SMBC_SETOPTIONPROTOCOLS
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_client_protocols, 0, 0, 1)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, minproto)
++ ZEND_ARG_INFO(0, maxproto)
++ZEND_END_ARG_INFO()
++#endif
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_opendir, 0, 0, 2)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, path)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_readdir, 0, 0, 2)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, dir)
++ZEND_END_ARG_INFO()
++
++#define arginfo_smbclient_closedir arginfo_smbclient_readdir
++
++#define arginfo_smbclient_stat arginfo_smbclient_opendir
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_fstat, 0, 0, 2)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, file)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_open, 0, 0, 3)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, path)
++ ZEND_ARG_INFO(0, flags)
++ ZEND_ARG_INFO(0, mode)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_creat, 0, 0, 2)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, path)
++ ZEND_ARG_INFO(0, mode)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_read, 0, 0, 3)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, file)
++ ZEND_ARG_INFO(0, count)
++ZEND_END_ARG_INFO()
++
++#define arginfo_smbclient_close arginfo_smbclient_fstat
++
++#define arginfo_smbclient_mkdir arginfo_smbclient_creat
++
++#define arginfo_smbclient_rmdir arginfo_smbclient_opendir
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_rename, 0, 0, 4)
++ ZEND_ARG_INFO(0, oldstate)
++ ZEND_ARG_INFO(0, oldpath)
++ ZEND_ARG_INFO(0, newstate)
++ ZEND_ARG_INFO(0, newpath)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_write, 0, 0, 3)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, file)
++ ZEND_ARG_INFO(0, buffer)
++ ZEND_ARG_INFO(0, count)
++ZEND_END_ARG_INFO()
++
++#define arginfo_smbclient_unlink arginfo_smbclient_opendir
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_lseek, 0, 0, 4)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, file)
++ ZEND_ARG_INFO(0, offset)
++ ZEND_ARG_INFO(0, whence)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_ftruncate, 0, 0, 3)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, file)
++ ZEND_ARG_INFO(0, offset)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_chmod, 0, 0, 3)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, path)
++ ZEND_ARG_INFO(0, mode)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_utimes, 0, 0, 2)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, path)
++ ZEND_ARG_INFO(0, mtime)
++ ZEND_ARG_INFO(0, atime)
++ZEND_END_ARG_INFO()
++
++#define arginfo_smbclient_listxattr arginfo_smbclient_opendir
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_getxattr, 0, 0, 3)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, path)
++ ZEND_ARG_INFO(0, name)
++ZEND_END_ARG_INFO()
++
++ZEND_BEGIN_ARG_INFO_EX(arginfo_smbclient_setxattr, 0, 0, 4)
++ ZEND_ARG_INFO(0, state)
++ ZEND_ARG_INFO(0, path)
++ ZEND_ARG_INFO(0, name)
++ ZEND_ARG_INFO(0, value)
++ ZEND_ARG_INFO(0, flags)
++ZEND_END_ARG_INFO()
++
++#define arginfo_smbclient_removexattr arginfo_smbclient_getxattr
++
++#define arginfo_smbclient_statvfs arginfo_smbclient_opendir
++
++#define arginfo_smbclient_fstatvfs arginfo_smbclient_fstat
++
++
++ZEND_FUNCTION(smbclient_version);
++ZEND_FUNCTION(smbclient_library_version);
++ZEND_FUNCTION(smbclient_state_new);
++ZEND_FUNCTION(smbclient_state_init);
++ZEND_FUNCTION(smbclient_state_errno);
++ZEND_FUNCTION(smbclient_state_free);
++ZEND_FUNCTION(smbclient_option_get);
++ZEND_FUNCTION(smbclient_option_set);
++#if HAVE_SMBC_SETOPTIONPROTOCOLS
++ZEND_FUNCTION(smbclient_client_protocols);
++#endif
++ZEND_FUNCTION(smbclient_opendir);
++ZEND_FUNCTION(smbclient_readdir);
++ZEND_FUNCTION(smbclient_closedir);
++ZEND_FUNCTION(smbclient_stat);
++ZEND_FUNCTION(smbclient_fstat);
++ZEND_FUNCTION(smbclient_open);
++ZEND_FUNCTION(smbclient_creat);
++ZEND_FUNCTION(smbclient_read);
++ZEND_FUNCTION(smbclient_close);
++ZEND_FUNCTION(smbclient_mkdir);
++ZEND_FUNCTION(smbclient_rmdir);
++ZEND_FUNCTION(smbclient_rename);
++ZEND_FUNCTION(smbclient_write);
++ZEND_FUNCTION(smbclient_unlink);
++ZEND_FUNCTION(smbclient_lseek);
++ZEND_FUNCTION(smbclient_ftruncate);
++ZEND_FUNCTION(smbclient_chmod);
++ZEND_FUNCTION(smbclient_utimes);
++ZEND_FUNCTION(smbclient_listxattr);
++ZEND_FUNCTION(smbclient_getxattr);
++ZEND_FUNCTION(smbclient_setxattr);
++ZEND_FUNCTION(smbclient_removexattr);
++ZEND_FUNCTION(smbclient_statvfs);
++ZEND_FUNCTION(smbclient_fstatvfs);
++
++
++static const zend_function_entry ext_functions[] = {
++ ZEND_FE(smbclient_version, arginfo_smbclient_version)
++ ZEND_FE(smbclient_library_version, arginfo_smbclient_library_version)
++ ZEND_FE(smbclient_state_new, arginfo_smbclient_state_new)
++ ZEND_FE(smbclient_state_init, arginfo_smbclient_state_init)
++ ZEND_FE(smbclient_state_errno, arginfo_smbclient_state_errno)
++ ZEND_FE(smbclient_state_free, arginfo_smbclient_state_free)
++ ZEND_FE(smbclient_option_get, arginfo_smbclient_option_get)
++ ZEND_FE(smbclient_option_set, arginfo_smbclient_option_set)
++#if HAVE_SMBC_SETOPTIONPROTOCOLS
++ ZEND_FE(smbclient_client_protocols, arginfo_smbclient_client_protocols)
++#endif
++ ZEND_FE(smbclient_opendir, arginfo_smbclient_opendir)
++ ZEND_FE(smbclient_readdir, arginfo_smbclient_readdir)
++ ZEND_FE(smbclient_closedir, arginfo_smbclient_closedir)
++ ZEND_FE(smbclient_stat, arginfo_smbclient_stat)
++ ZEND_FE(smbclient_fstat, arginfo_smbclient_fstat)
++ ZEND_FE(smbclient_open, arginfo_smbclient_open)
++ ZEND_FE(smbclient_creat, arginfo_smbclient_creat)
++ ZEND_FE(smbclient_read, arginfo_smbclient_read)
++ ZEND_FE(smbclient_close, arginfo_smbclient_close)
++ ZEND_FE(smbclient_mkdir, arginfo_smbclient_mkdir)
++ ZEND_FE(smbclient_rmdir, arginfo_smbclient_rmdir)
++ ZEND_FE(smbclient_rename, arginfo_smbclient_rename)
++ ZEND_FE(smbclient_write, arginfo_smbclient_write)
++ ZEND_FE(smbclient_unlink, arginfo_smbclient_unlink)
++ ZEND_FE(smbclient_lseek, arginfo_smbclient_lseek)
++ ZEND_FE(smbclient_ftruncate, arginfo_smbclient_ftruncate)
++ ZEND_FE(smbclient_chmod, arginfo_smbclient_chmod)
++ ZEND_FE(smbclient_utimes, arginfo_smbclient_utimes)
++ ZEND_FE(smbclient_listxattr, arginfo_smbclient_listxattr)
++ ZEND_FE(smbclient_getxattr, arginfo_smbclient_getxattr)
++ ZEND_FE(smbclient_setxattr, arginfo_smbclient_setxattr)
++ ZEND_FE(smbclient_removexattr, arginfo_smbclient_removexattr)
++ ZEND_FE(smbclient_statvfs, arginfo_smbclient_statvfs)
++ ZEND_FE(smbclient_fstatvfs, arginfo_smbclient_fstatvfs)
++ ZEND_FE_END
++};