Merge pull request #1 from remicollet/issue-fix

For PHP 8
This commit is contained in:
Johannes Findeisen 2021-02-09 17:47:35 +01:00 committed by GitHub
commit 1c91afe164
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

67
pcsc.c
View file

@ -1,8 +1,6 @@
/*
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2006 The PHP Group |
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@ -46,24 +44,49 @@ ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_connect_arginfo, 0, 0, 2)
ZEND_ARG_INFO(1, active_protocol)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_void, 0, 0, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_context, 0, 0, 1)
ZEND_ARG_INFO(0, context)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_disconnect, 0, 0, 1)
ZEND_ARG_INFO(0, card)
ZEND_ARG_INFO(0, disposition)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_transmit, 0, 0, 2)
ZEND_ARG_INFO(0, card)
ZEND_ARG_INFO(0, command)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_card, 0, 0, 1)
ZEND_ARG_INFO(0, card)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_errstr, 0, 0, 1)
ZEND_ARG_INFO(0, errno)
ZEND_END_ARG_INFO()
/* {{{ pcsc_functions[]
*
* Every user visible function must have an entry in pcsc_functions[].
*/
zend_function_entry pcsc_functions[] = {
PHP_FE(scard_establish_context, NULL)
PHP_FE(scard_release_context, NULL)
PHP_FE(scard_is_valid_context, NULL)
PHP_FE(scard_list_readers, NULL)
PHP_FE(scard_establish_context, php_pcsc_scard_void)
PHP_FE(scard_release_context, php_pcsc_scard_context)
PHP_FE(scard_is_valid_context, php_pcsc_scard_context)
PHP_FE(scard_list_readers, php_pcsc_scard_context)
PHP_FE(scard_connect, php_pcsc_scard_connect_arginfo)
//PHP_FE(scard_reconnect, NULL)
PHP_FE(scard_disconnect, NULL)
PHP_FE(scard_transmit, NULL)
PHP_FE(scard_status, NULL)
PHP_FE(scard_disconnect, php_pcsc_scard_disconnect)
PHP_FE(scard_transmit, php_pcsc_scard_transmit)
PHP_FE(scard_status, php_pcsc_scard_card)
//PHP_FE(scard_get_status_change, NULL)
PHP_FE(scard_last_errno, NULL)
PHP_FE(scard_errstr, NULL)
{NULL, NULL, NULL}
PHP_FE(scard_last_errno, php_pcsc_scard_void)
PHP_FE(scard_errstr, php_pcsc_scard_errstr)
PHP_FE_END
};
/* }}} */
@ -102,13 +125,13 @@ static void php_pcsc_ctx_res_dtor(zend_resource *rsrc) {
context=(SCARDCONTEXT)rsrc->ptr;
rc = SCardIsValidContext(context);
if (rc != SCARD_S_SUCCESS) {
php_error_docref(NULL, E_WARNING, "PC/SC context dtor: SCardIsValidContext returned %s (0x%x)", php_pcsc_error_to_string(rc), rc);
php_error_docref(NULL, E_WARNING, "PC/SC context dtor: SCardIsValidContext returned %s (0x%lx)", php_pcsc_error_to_string(rc), rc);
return;
}
rc = SCardReleaseContext(context);
if (rc != SCARD_S_SUCCESS) {
php_error_docref(NULL, E_WARNING, "PC/SC context dtor: SCardReleaseContext returned %s (0x%x)", php_pcsc_error_to_string(rc), rc);
php_error_docref(NULL, E_WARNING, "PC/SC context dtor: SCardReleaseContext returned %s (0x%lx)", php_pcsc_error_to_string(rc), rc);
return;
}
return;
@ -127,7 +150,7 @@ static void php_pcsc_conn_res_dtor(zend_resource *rsrc) {
rc = SCardDisconnect(hCard, SCARD_LEAVE_CARD);
if (rc != SCARD_S_SUCCESS) {
php_error_docref(NULL, E_WARNING, "PC/SC connection dtor: SCardDisconnect returned %s (0x%x)", php_pcsc_error_to_string(rc), rc);
php_error_docref(NULL, E_WARNING, "PC/SC connection dtor: SCardDisconnect returned %s (0x%lx)", php_pcsc_error_to_string(rc), rc);
}
}
@ -502,6 +525,10 @@ PHP_FUNCTION(scard_establish_context)
SCARDCONTEXT scard_context = 0;
LONG rc = 0;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
rc = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &scard_context);
if (rc != SCARD_S_SUCCESS)
{
@ -539,7 +566,6 @@ PHP_FUNCTION(scard_is_valid_context)
Invalidate the PC/SC context */
PHP_FUNCTION(scard_release_context)
{
LONG rc = 0;
zval* ctx_res;
SCARDCONTEXT context;
@ -547,6 +573,7 @@ PHP_FUNCTION(scard_release_context)
RETURN_NULL();
}
ZEND_FETCH_RESOURCE(context, SCARDCONTEXT, &ctx_res, -1, PHP_PCSC_CTX_RES_NAME, le_pcsc_ctx_res);
(void)context;
zend_hash_index_del(&EG(regular_list), Z_RES_HANDLE_P(ctx_res));
RETURN_TRUE;
@ -669,7 +696,7 @@ PHP_FUNCTION(scard_transmit)
SCARD_IO_REQUEST *recvPci = NULL;
BYTE *sendBuffer;
BYTE *recvBuffer;
DWORD sendLen, recvLen;
DWORD sendLen = 0, recvLen;
LONG rc;
char *apdu;
size_t apduLen;
@ -734,7 +761,6 @@ PHP_FUNCTION(scard_status)
{
zval* conn_res;
SCARDHANDLE hCard = 0;
char *strReader = NULL;
DWORD dwProtocol, dwState;
BYTE atrBuffer[32];
DWORD atrLen;
@ -799,6 +825,9 @@ PHP_FUNCTION(scard_status)
Retrieve last error code */
PHP_FUNCTION(scard_last_errno)
{
if (zend_parse_parameters_none() == FAILURE) {
return;
}
RETURN_LONG(PCSC_G(last_errno));
}
/* }}} */