Skip to content

Commit 7fb5ca5

Browse files
authored
Merge pull request #2 from remicollet/issue-arginfo
Issue arginfo
2 parents 1c91afe + 7086a7e commit 7fb5ca5

File tree

6 files changed

+257
-54
lines changed

6 files changed

+257
-54
lines changed

.gitignore

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# Object files
2+
*.o
3+
*.lo
4+
5+
# Libraries
6+
*.lib
7+
*.a
8+
*.la
9+
10+
# Shared objects (inc. Windows DLLs)
11+
*.dll
12+
*.so
13+
*.so.*
14+
*.dylib
15+
16+
# Executables
17+
*.exe
18+
*.out
19+
*.app
20+
21+
# archives
22+
pcsc-*.tgz
23+
24+
# autotools
25+
.deps
26+
.libs
27+
config.cache
28+
config.guess
29+
config.h
30+
config.h.in
31+
config.log
32+
config.nice
33+
config.status
34+
config.sub
35+
configure
36+
configure.in
37+
conftest
38+
conftest.c
39+
Makefile
40+
Makefile.fragments
41+
Makefile.global
42+
Makefile.objects
43+
acinclude.m4
44+
aclocal.m4
45+
autom4te.cache
46+
build
47+
install-sh
48+
libtool
49+
ltmain.sh
50+
ltmain.sh.backup
51+
missing
52+
mkinstalldirs
53+
modules
54+
run-tests.php
55+
run-tests.log
56+
tmp-php.ini

package.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ http://pear.php.net/dtd/package-2.0.xsd">
4040
<file name="config.w32" role="src" />
4141
<file name="pcsc.c" role="src" />
4242
<file name="php_pcsc.h" role="src" />
43+
<file name="pcsc.stub.php" role="src" />
44+
<file name="pcsc_arginfo.h" role="src" />
45+
<file name="pcsc_legacy_arginfo.h" role="src" />
4346
<file name="TODO" role="doc" />
4447
</dir> <!-- / -->
4548
</contents>

pcsc.c

Lines changed: 6 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -36,59 +36,11 @@ ZEND_DECLARE_MODULE_GLOBALS(pcsc);
3636
#define TRUE 1
3737
#endif
3838

39-
/* arg info for scard_connect (accepts an optional compile-time reference parameter) */
40-
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_connect_arginfo, 0, 0, 2)
41-
ZEND_ARG_INFO(0, context)
42-
ZEND_ARG_INFO(0, reader_name)
43-
ZEND_ARG_INFO(0, preferred_protocol)
44-
ZEND_ARG_INFO(1, active_protocol)
45-
ZEND_END_ARG_INFO()
46-
47-
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_void, 0, 0, 0)
48-
ZEND_END_ARG_INFO()
49-
50-
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_context, 0, 0, 1)
51-
ZEND_ARG_INFO(0, context)
52-
ZEND_END_ARG_INFO()
53-
54-
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_disconnect, 0, 0, 1)
55-
ZEND_ARG_INFO(0, card)
56-
ZEND_ARG_INFO(0, disposition)
57-
ZEND_END_ARG_INFO()
58-
59-
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_transmit, 0, 0, 2)
60-
ZEND_ARG_INFO(0, card)
61-
ZEND_ARG_INFO(0, command)
62-
ZEND_END_ARG_INFO()
63-
64-
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_card, 0, 0, 1)
65-
ZEND_ARG_INFO(0, card)
66-
ZEND_END_ARG_INFO()
67-
68-
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_errstr, 0, 0, 1)
69-
ZEND_ARG_INFO(0, errno)
70-
ZEND_END_ARG_INFO()
71-
72-
/* {{{ pcsc_functions[]
73-
*
74-
* Every user visible function must have an entry in pcsc_functions[].
75-
*/
76-
zend_function_entry pcsc_functions[] = {
77-
PHP_FE(scard_establish_context, php_pcsc_scard_void)
78-
PHP_FE(scard_release_context, php_pcsc_scard_context)
79-
PHP_FE(scard_is_valid_context, php_pcsc_scard_context)
80-
PHP_FE(scard_list_readers, php_pcsc_scard_context)
81-
PHP_FE(scard_connect, php_pcsc_scard_connect_arginfo)
82-
//PHP_FE(scard_reconnect, NULL)
83-
PHP_FE(scard_disconnect, php_pcsc_scard_disconnect)
84-
PHP_FE(scard_transmit, php_pcsc_scard_transmit)
85-
PHP_FE(scard_status, php_pcsc_scard_card)
86-
//PHP_FE(scard_get_status_change, NULL)
87-
PHP_FE(scard_last_errno, php_pcsc_scard_void)
88-
PHP_FE(scard_errstr, php_pcsc_scard_errstr)
89-
PHP_FE_END
90-
};
91-
/* }}} */
39+
#if PHP_VERSION_ID < 80000
40+
#include "pcsc_legacy_arginfo.h"
41+
#else
42+
#include "pcsc_arginfo.h"
43+
#endif
9244

9345
/* {{{ pcsc_module_entry
9446
*/
@@ -97,7 +49,7 @@ zend_module_entry pcsc_module_entry = {
9749
STANDARD_MODULE_HEADER,
9850
#endif
9951
"PC/SC",
100-
pcsc_functions,
52+
ext_functions,
10153
PHP_MINIT(pcsc),
10254
PHP_MSHUTDOWN(pcsc),
10355
NULL,

pcsc.stub.php

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?php
2+
3+
/**
4+
* @generate-function-entries
5+
* @generate-legacy-arginfo
6+
*/
7+
8+
/**
9+
* @return resource|false
10+
*/
11+
function scard_establish_context() {}
12+
13+
/**
14+
* @param resource $context
15+
*/
16+
function scard_release_context($context): bool {}
17+
18+
/**
19+
* @param resource $context
20+
*/
21+
function scard_is_valid_context($context): bool {}
22+
23+
/**
24+
* @param resource $context
25+
*/
26+
function scard_list_readers($context): array|false {}
27+
28+
/**
29+
* @param resource $context
30+
* @return resource|false
31+
*/
32+
function scard_connect($context, string $reader_name, int $preferred_protocol=SCARD_PROTOCOL_T0|SCARD_PROTOCOL_T1, int &$current_protocol=NULL): array|false {}
33+
34+
/**
35+
* @param resource $card
36+
* @return resource|false
37+
*/
38+
function scard_disconnect($card, int $disposition=SCARD_EJECT_CARD): bool {}
39+
40+
/**
41+
* @param resource $card
42+
* @return resource|false
43+
*/
44+
function scard_transmit($card, string $command): string|false {}
45+
46+
/**
47+
* @param resource $card
48+
* @return resource|false
49+
*/
50+
function scard_status($card): array|false {}
51+
52+
function scard_last_errno(): int {}
53+
54+
function scard_errstr(int $errno): string {}
55+

pcsc_arginfo.h

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/* This is a generated file, edit the .stub.php file instead.
2+
* Stub hash: 3e1df1d509b6416c1eb997f61295c26d9ad0fd03 */
3+
4+
ZEND_BEGIN_ARG_INFO_EX(arginfo_scard_establish_context, 0, 0, 0)
5+
ZEND_END_ARG_INFO()
6+
7+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_scard_release_context, 0, 1, _IS_BOOL, 0)
8+
ZEND_ARG_INFO(0, context)
9+
ZEND_END_ARG_INFO()
10+
11+
#define arginfo_scard_is_valid_context arginfo_scard_release_context
12+
13+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_scard_list_readers, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
14+
ZEND_ARG_INFO(0, context)
15+
ZEND_END_ARG_INFO()
16+
17+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_scard_connect, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE)
18+
ZEND_ARG_INFO(0, context)
19+
ZEND_ARG_TYPE_INFO(0, reader_name, IS_STRING, 0)
20+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, preferred_protocol, IS_LONG, 0, "SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1")
21+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(1, current_protocol, IS_LONG, 0, "NULL")
22+
ZEND_END_ARG_INFO()
23+
24+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_scard_disconnect, 0, 1, _IS_BOOL, 0)
25+
ZEND_ARG_INFO(0, card)
26+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, disposition, IS_LONG, 0, "SCARD_EJECT_CARD")
27+
ZEND_END_ARG_INFO()
28+
29+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_scard_transmit, 0, 2, MAY_BE_STRING|MAY_BE_FALSE)
30+
ZEND_ARG_INFO(0, card)
31+
ZEND_ARG_TYPE_INFO(0, command, IS_STRING, 0)
32+
ZEND_END_ARG_INFO()
33+
34+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_scard_status, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
35+
ZEND_ARG_INFO(0, card)
36+
ZEND_END_ARG_INFO()
37+
38+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_scard_last_errno, 0, 0, IS_LONG, 0)
39+
ZEND_END_ARG_INFO()
40+
41+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_scard_errstr, 0, 1, IS_STRING, 0)
42+
ZEND_ARG_TYPE_INFO(0, errno, IS_LONG, 0)
43+
ZEND_END_ARG_INFO()
44+
45+
46+
ZEND_FUNCTION(scard_establish_context);
47+
ZEND_FUNCTION(scard_release_context);
48+
ZEND_FUNCTION(scard_is_valid_context);
49+
ZEND_FUNCTION(scard_list_readers);
50+
ZEND_FUNCTION(scard_connect);
51+
ZEND_FUNCTION(scard_disconnect);
52+
ZEND_FUNCTION(scard_transmit);
53+
ZEND_FUNCTION(scard_status);
54+
ZEND_FUNCTION(scard_last_errno);
55+
ZEND_FUNCTION(scard_errstr);
56+
57+
58+
static const zend_function_entry ext_functions[] = {
59+
ZEND_FE(scard_establish_context, arginfo_scard_establish_context)
60+
ZEND_FE(scard_release_context, arginfo_scard_release_context)
61+
ZEND_FE(scard_is_valid_context, arginfo_scard_is_valid_context)
62+
ZEND_FE(scard_list_readers, arginfo_scard_list_readers)
63+
ZEND_FE(scard_connect, arginfo_scard_connect)
64+
ZEND_FE(scard_disconnect, arginfo_scard_disconnect)
65+
ZEND_FE(scard_transmit, arginfo_scard_transmit)
66+
ZEND_FE(scard_status, arginfo_scard_status)
67+
ZEND_FE(scard_last_errno, arginfo_scard_last_errno)
68+
ZEND_FE(scard_errstr, arginfo_scard_errstr)
69+
ZEND_FE_END
70+
};

pcsc_legacy_arginfo.h

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/* This is a generated file, edit the .stub.php file instead.
2+
* Stub hash: 3e1df1d509b6416c1eb997f61295c26d9ad0fd03 */
3+
4+
ZEND_BEGIN_ARG_INFO_EX(arginfo_scard_establish_context, 0, 0, 0)
5+
ZEND_END_ARG_INFO()
6+
7+
ZEND_BEGIN_ARG_INFO_EX(arginfo_scard_release_context, 0, 0, 1)
8+
ZEND_ARG_INFO(0, context)
9+
ZEND_END_ARG_INFO()
10+
11+
#define arginfo_scard_is_valid_context arginfo_scard_release_context
12+
13+
#define arginfo_scard_list_readers arginfo_scard_release_context
14+
15+
ZEND_BEGIN_ARG_INFO_EX(arginfo_scard_connect, 0, 0, 2)
16+
ZEND_ARG_INFO(0, context)
17+
ZEND_ARG_INFO(0, reader_name)
18+
ZEND_ARG_INFO(0, preferred_protocol)
19+
ZEND_ARG_INFO(1, current_protocol)
20+
ZEND_END_ARG_INFO()
21+
22+
ZEND_BEGIN_ARG_INFO_EX(arginfo_scard_disconnect, 0, 0, 1)
23+
ZEND_ARG_INFO(0, card)
24+
ZEND_ARG_INFO(0, disposition)
25+
ZEND_END_ARG_INFO()
26+
27+
ZEND_BEGIN_ARG_INFO_EX(arginfo_scard_transmit, 0, 0, 2)
28+
ZEND_ARG_INFO(0, card)
29+
ZEND_ARG_INFO(0, command)
30+
ZEND_END_ARG_INFO()
31+
32+
ZEND_BEGIN_ARG_INFO_EX(arginfo_scard_status, 0, 0, 1)
33+
ZEND_ARG_INFO(0, card)
34+
ZEND_END_ARG_INFO()
35+
36+
#define arginfo_scard_last_errno arginfo_scard_establish_context
37+
38+
ZEND_BEGIN_ARG_INFO_EX(arginfo_scard_errstr, 0, 0, 1)
39+
ZEND_ARG_INFO(0, errno)
40+
ZEND_END_ARG_INFO()
41+
42+
43+
ZEND_FUNCTION(scard_establish_context);
44+
ZEND_FUNCTION(scard_release_context);
45+
ZEND_FUNCTION(scard_is_valid_context);
46+
ZEND_FUNCTION(scard_list_readers);
47+
ZEND_FUNCTION(scard_connect);
48+
ZEND_FUNCTION(scard_disconnect);
49+
ZEND_FUNCTION(scard_transmit);
50+
ZEND_FUNCTION(scard_status);
51+
ZEND_FUNCTION(scard_last_errno);
52+
ZEND_FUNCTION(scard_errstr);
53+
54+
55+
static const zend_function_entry ext_functions[] = {
56+
ZEND_FE(scard_establish_context, arginfo_scard_establish_context)
57+
ZEND_FE(scard_release_context, arginfo_scard_release_context)
58+
ZEND_FE(scard_is_valid_context, arginfo_scard_is_valid_context)
59+
ZEND_FE(scard_list_readers, arginfo_scard_list_readers)
60+
ZEND_FE(scard_connect, arginfo_scard_connect)
61+
ZEND_FE(scard_disconnect, arginfo_scard_disconnect)
62+
ZEND_FE(scard_transmit, arginfo_scard_transmit)
63+
ZEND_FE(scard_status, arginfo_scard_status)
64+
ZEND_FE(scard_last_errno, arginfo_scard_last_errno)
65+
ZEND_FE(scard_errstr, arginfo_scard_errstr)
66+
ZEND_FE_END
67+
};

0 commit comments

Comments
 (0)