Skip to content

Commit

Permalink
libpcscspy.c: symplify code
Browse files Browse the repository at this point in the history
Use macro and typedef() to aoid functions prototype repetitions.
  • Loading branch information
LudovicRousseau committed Apr 27, 2024
1 parent 79162f5 commit 3e2c5c8
Showing 1 changed file with 105 additions and 91 deletions.
196 changes: 105 additions & 91 deletions src/spy/libpcscspy.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,43 +33,10 @@

#define DEBUG

/* function prototypes */

#define p_SCardEstablishContext(fct) LONG(fct)(DWORD dwScope, LPCVOID pvReserved1, LPCVOID pvReserved2, LPSCARDCONTEXT phContext)

#define p_SCardReleaseContext(fct) LONG(fct)(SCARDCONTEXT hContext)

#define p_SCardIsValidContext(fct) LONG(fct) (SCARDCONTEXT hContext)

#define p_SCardConnect(fct) LONG(fct) (SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode, DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol)

#define p_SCardReconnect(fct) LONG(fct) (SCARDHANDLE hCard, DWORD dwShareMode, DWORD dwPreferredProtocols, DWORD dwInitialization, LPDWORD pdwActiveProtocol)

#define p_SCardDisconnect(fct) LONG(fct) (SCARDHANDLE hCard, DWORD dwDisposition)

#define p_SCardBeginTransaction(fct) LONG(fct) (SCARDHANDLE hCard)

#define p_SCardEndTransaction(fct) LONG(fct) (SCARDHANDLE hCard, DWORD dwDisposition)

#define p_SCardStatus(fct) LONG(fct) (SCARDHANDLE hCard, LPSTR mszReaderName, LPDWORD pcchReaderLen, LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen)

#define p_SCardGetStatusChange(fct) LONG(fct) (SCARDCONTEXT hContext, DWORD dwTimeout, LPSCARD_READERSTATE rgReaderStates, DWORD cReaders)

#define p_SCardControl(fct) LONG(fct) (SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID pbSendBuffer, DWORD cbSendLength, LPVOID pbRecvBuffer, DWORD cbRecvLength, LPDWORD lpBytesReturned)

#define p_SCardTransmit(fct) LONG(fct) (SCARDHANDLE hCard, const SCARD_IO_REQUEST * pioSendPci, LPCBYTE pbSendBuffer, DWORD cbSendLength, SCARD_IO_REQUEST * pioRecvPci, LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength)

#define p_SCardListReaderGroups(fct) LONG(fct) (SCARDCONTEXT hContext, LPSTR mszGroups, LPDWORD pcchGroups)

#define p_SCardListReaders(fct) LONG(fct) (SCARDCONTEXT hContext, LPCSTR mszGroups, LPSTR mszReaders, LPDWORD pcchReaders)

#define p_SCardFreeMemory(fct) LONG(fct) (SCARDCONTEXT hContext, LPCVOID pvMem)

#define p_SCardCancel(fct) LONG(fct) (SCARDCONTEXT hContext)

#define p_SCardGetAttrib(fct) LONG(fct) (SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE pbAttr, LPDWORD pcbAttrLen)

#define p_SCardSetAttrib(fct) LONG(fct) (SCARDHANDLE hCard, DWORD dwAttrId, LPCBYTE pbAttr, DWORD cbAttrLen)
#define DLSYM_DECLARE(symbol) \
typeof(symbol)* symbol
#define DLSYM_SET_VALUE(symbol) \
.symbol = (typeof(symbol)(*))internal_error

/* fake function to just return en error code */
static LONG internal_error(void)
Expand All @@ -82,44 +49,44 @@ static LONG internal_error(void)
/* contains pointers to real functions */
static struct
{
p_SCardEstablishContext(*SCardEstablishContext);
p_SCardReleaseContext(*SCardReleaseContext);
p_SCardIsValidContext(*SCardIsValidContext);
p_SCardConnect(*SCardConnect);
p_SCardReconnect(*SCardReconnect);
p_SCardDisconnect(*SCardDisconnect);
p_SCardBeginTransaction(*SCardBeginTransaction);
p_SCardEndTransaction(*SCardEndTransaction);
p_SCardStatus(*SCardStatus);
p_SCardGetStatusChange(*SCardGetStatusChange);
p_SCardControl(*SCardControl);
p_SCardTransmit(*SCardTransmit);
p_SCardListReaderGroups(*SCardListReaderGroups);
p_SCardListReaders(*SCardListReaders);
p_SCardFreeMemory(*SCardFreeMemory);
p_SCardCancel(*SCardCancel);
p_SCardGetAttrib(*SCardGetAttrib);
p_SCardSetAttrib(*SCardSetAttrib);
DLSYM_DECLARE(SCardEstablishContext);
DLSYM_DECLARE(SCardReleaseContext);
DLSYM_DECLARE(SCardIsValidContext);
DLSYM_DECLARE(SCardConnect);
DLSYM_DECLARE(SCardReconnect);
DLSYM_DECLARE(SCardDisconnect);
DLSYM_DECLARE(SCardBeginTransaction);
DLSYM_DECLARE(SCardEndTransaction);
DLSYM_DECLARE(SCardStatus);
DLSYM_DECLARE(SCardGetStatusChange);
DLSYM_DECLARE(SCardControl);
DLSYM_DECLARE(SCardTransmit);
DLSYM_DECLARE(SCardListReaderGroups);
DLSYM_DECLARE(SCardListReaders);
DLSYM_DECLARE(SCardFreeMemory);
DLSYM_DECLARE(SCardCancel);
DLSYM_DECLARE(SCardGetAttrib);
DLSYM_DECLARE(SCardSetAttrib);
} spy = {
/* initialized with the fake internal_error() function */
.SCardEstablishContext = (p_SCardEstablishContext(*))internal_error,
.SCardReleaseContext = (p_SCardReleaseContext(*))internal_error,
.SCardIsValidContext = (p_SCardIsValidContext(*))internal_error,
.SCardConnect = (p_SCardConnect(*))internal_error,
.SCardReconnect = (p_SCardReconnect(*))internal_error,
.SCardDisconnect = (p_SCardDisconnect(*))internal_error,
.SCardBeginTransaction = (p_SCardBeginTransaction(*))internal_error,
.SCardEndTransaction = (p_SCardEndTransaction(*))internal_error,
.SCardStatus = (p_SCardStatus(*))internal_error,
.SCardGetStatusChange = (p_SCardGetStatusChange(*))internal_error,
.SCardControl = (p_SCardControl(*))internal_error,
.SCardTransmit = (p_SCardTransmit(*))internal_error,
.SCardListReaderGroups = (p_SCardListReaderGroups(*))internal_error,
.SCardListReaders = (p_SCardListReaders(*))internal_error,
.SCardFreeMemory = (p_SCardFreeMemory(*))internal_error,
.SCardCancel = (p_SCardCancel(*))internal_error,
.SCardGetAttrib = (p_SCardGetAttrib(*))internal_error,
.SCardSetAttrib = (p_SCardSetAttrib(*))internal_error,
DLSYM_SET_VALUE(SCardEstablishContext),
DLSYM_SET_VALUE(SCardReleaseContext),
DLSYM_SET_VALUE(SCardIsValidContext),
DLSYM_SET_VALUE(SCardConnect),
DLSYM_SET_VALUE(SCardReconnect),
DLSYM_SET_VALUE(SCardDisconnect),
DLSYM_SET_VALUE(SCardBeginTransaction),
DLSYM_SET_VALUE(SCardEndTransaction),
DLSYM_SET_VALUE(SCardStatus),
DLSYM_SET_VALUE(SCardGetStatusChange),
DLSYM_SET_VALUE(SCardControl),
DLSYM_SET_VALUE(SCardTransmit),
DLSYM_SET_VALUE(SCardListReaderGroups),
DLSYM_SET_VALUE(SCardListReaders),
DLSYM_SET_VALUE(SCardFreeMemory),
DLSYM_SET_VALUE(SCardCancel),
DLSYM_SET_VALUE(SCardGetAttrib),
DLSYM_SET_VALUE(SCardSetAttrib)
};
#pragma GCC diagnostic pop

Expand Down Expand Up @@ -369,7 +336,10 @@ static LONG load_lib(void)


/* exported functions */
PCSC_API p_SCardEstablishContext(SCardEstablishContext)
PCSC_API LONG SCardEstablishContext(DWORD dwScope,
LPCVOID pvReserved1,
LPCVOID pvReserved2,
LPSCARDCONTEXT phContext)
{
LONG rv;
static int init = 0;
Expand Down Expand Up @@ -408,7 +378,7 @@ PCSC_API p_SCardEstablishContext(SCardEstablishContext)
return rv;
}

PCSC_API p_SCardReleaseContext(SCardReleaseContext)
PCSC_API LONG SCardReleaseContext(SCARDCONTEXT hContext)
{
LONG rv;

Expand All @@ -419,7 +389,7 @@ PCSC_API p_SCardReleaseContext(SCardReleaseContext)
return rv;
}

PCSC_API p_SCardIsValidContext(SCardIsValidContext)
PCSC_API LONG SCardIsValidContext(SCARDCONTEXT hContext)
{
LONG rv;

Expand All @@ -430,7 +400,12 @@ PCSC_API p_SCardIsValidContext(SCardIsValidContext)
return rv;
}

PCSC_API p_SCardConnect(SCardConnect)
PCSC_API LONG SCardConnect(SCARDCONTEXT hContext,
LPCSTR szReader,
DWORD dwShareMode,
DWORD dwPreferredProtocols,
LPSCARDHANDLE phCard,
LPDWORD pdwActiveProtocol)
{
LONG rv;

Expand All @@ -449,7 +424,11 @@ PCSC_API p_SCardConnect(SCardConnect)
return rv;
}

PCSC_API p_SCardReconnect(SCardReconnect)
PCSC_API LONG SCardReconnect(SCARDHANDLE hCard,
DWORD dwShareMode,
DWORD dwPreferredProtocols,
DWORD dwInitialization,
LPDWORD pdwActiveProtocol)
{
LONG rv;

Expand All @@ -465,7 +444,8 @@ PCSC_API p_SCardReconnect(SCardReconnect)
return rv;
}

PCSC_API p_SCardDisconnect(SCardDisconnect)
PCSC_API LONG SCardDisconnect(SCARDHANDLE hCard,
DWORD dwDisposition)
{
LONG rv;

Expand All @@ -477,7 +457,7 @@ PCSC_API p_SCardDisconnect(SCardDisconnect)
return rv;
}

PCSC_API p_SCardBeginTransaction(SCardBeginTransaction)
PCSC_API LONG SCardBeginTransaction(SCARDHANDLE hCard)
{
LONG rv;

Expand All @@ -488,7 +468,8 @@ PCSC_API p_SCardBeginTransaction(SCardBeginTransaction)
return rv;
}

PCSC_API p_SCardEndTransaction(SCardEndTransaction)
PCSC_API LONG SCardEndTransaction(SCARDHANDLE hCard,
DWORD dwDisposition)
{
LONG rv;

Expand All @@ -500,7 +481,13 @@ PCSC_API p_SCardEndTransaction(SCardEndTransaction)
return rv;
}

PCSC_API p_SCardStatus(SCardStatus)
PCSC_API LONG SCardStatus(SCARDHANDLE hCard,
LPSTR mszReaderName,
LPDWORD pcchReaderLen,
LPDWORD pdwState,
LPDWORD pdwProtocol,
LPBYTE pbAtr,
LPDWORD pcbAtrLen)
{
LONG rv;
int autoallocate_ReaderName = 0, autoallocate_Atr = 0;
Expand Down Expand Up @@ -537,7 +524,10 @@ PCSC_API p_SCardStatus(SCardStatus)
return rv;
}

PCSC_API p_SCardGetStatusChange(SCardGetStatusChange)
PCSC_API LONG SCardGetStatusChange(SCARDCONTEXT hContext,
DWORD dwTimeout,
SCARD_READERSTATE *rgReaderStates,
DWORD cReaders)
{
LONG rv;

Expand All @@ -553,7 +543,13 @@ PCSC_API p_SCardGetStatusChange(SCardGetStatusChange)
return rv;
}

PCSC_API p_SCardControl(SCardControl)
PCSC_API LONG SCardControl(SCARDHANDLE hCard,
DWORD dwControlCode,
LPCVOID pbSendBuffer,
DWORD cbSendLength,
LPVOID pbRecvBuffer,
DWORD cbRecvLength,
LPDWORD lpBytesReturned)
{
LONG rv;

Expand All @@ -571,7 +567,13 @@ PCSC_API p_SCardControl(SCardControl)
return rv;
}

PCSC_API p_SCardTransmit(SCardTransmit)
PCSC_API LONG SCardTransmit(SCARDHANDLE hCard,
const SCARD_IO_REQUEST *pioSendPci,
LPCBYTE pbSendBuffer,
DWORD cbSendLength,
SCARD_IO_REQUEST *pioRecvPci,
LPBYTE pbRecvBuffer,
LPDWORD pcbRecvLength)
{
LONG rv;

Expand Down Expand Up @@ -608,7 +610,9 @@ PCSC_API p_SCardTransmit(SCardTransmit)
return rv;
}

PCSC_API p_SCardListReaderGroups(SCardListReaderGroups)
PCSC_API LONG SCardListReaderGroups(SCARDCONTEXT hContext,
LPSTR mszGroups,
LPDWORD pcchGroups)
{
LONG rv;
int autoallocate = 0;
Expand All @@ -628,7 +632,10 @@ PCSC_API p_SCardListReaderGroups(SCardListReaderGroups)
return rv;
}

PCSC_API p_SCardListReaders(SCardListReaders)
PCSC_API LONG SCardListReaders(SCARDCONTEXT hContext,
LPCSTR mszGroups,
LPSTR mszReaders,
LPDWORD pcchReaders)
{
LONG rv;
int autoallocate = 0;
Expand All @@ -648,7 +655,8 @@ PCSC_API p_SCardListReaders(SCardListReaders)
return rv;
}

PCSC_API p_SCardFreeMemory(SCardFreeMemory)
PCSC_API LONG SCardFreeMemory(SCARDCONTEXT hContext,
LPCVOID pvMem)
{
LONG rv;

Expand All @@ -660,7 +668,7 @@ PCSC_API p_SCardFreeMemory(SCardFreeMemory)
return rv;
}

PCSC_API p_SCardCancel(SCardCancel)
PCSC_API LONG SCardCancel(SCARDCONTEXT hContext)
{
LONG rv;

Expand All @@ -671,7 +679,10 @@ PCSC_API p_SCardCancel(SCardCancel)
return rv;
}

PCSC_API p_SCardGetAttrib(SCardGetAttrib)
PCSC_API LONG SCardGetAttrib(SCARDHANDLE hCard,
DWORD dwAttrId,
LPBYTE pbAttr,
LPDWORD pcbAttrLen)
{
LONG rv;
int autoallocate = 0;
Expand Down Expand Up @@ -700,7 +711,10 @@ PCSC_API p_SCardGetAttrib(SCardGetAttrib)
return rv;
}

PCSC_API p_SCardSetAttrib(SCardSetAttrib)
PCSC_API LONG SCardSetAttrib(SCARDHANDLE hCard,
DWORD dwAttrId,
LPCBYTE pbAttr,
DWORD cbAttrLen)
{
LONG rv;

Expand Down

0 comments on commit 3e2c5c8

Please sign in to comment.