cc [ flag... ] file... -lsmartcard [ library...] #include <smartcard/scf.h>
SCF_Status_t SCF_Session_freeInfo(SCF_Session_t session, void *value);
SCF_Status_t SCF_Terminal_freeInfo(SCF_Terminal_t terminal, void *value);
SCF_Status_t SCF_Card_freeInfo(SCF_Card_t card, void *value);
card An object that was returned from SCF_Terminal_getCard(3SMARTCARD). This object must be associated with the information value being freed.
session An object that was returned from SCF_Session_getSession(3SMARTCARD). This object must be associated with the information value being freed.
terminal An object that was returned from SCF_Session_getTerminal(3SMARTCARD). This object must be associated with the information value being freed.
value A pointer that was returned from a call to SCF_Session_getInfo(3SMARTCARD), SCF_Terminal_getInfo(3SMARTCARD), or SCF_Card_getInfo(3SMARTCARD).
When information is requested for an object (for example, by using SCF_Session_getInfo()), the result is placed in memory allocated for that request. This memory must eventually be deallocated, or a memory leak will result. The deallocation of memory can occur in one of two ways.
• The simplest method is to allow the smartcard library to automatically deallocate memory when the object associated with the information is closed. For example, when SCF_Card_close(3SMARTCARD) is called, any information obtained from SCF_Card_getInfo() for that card object is deallocated. The application is not required to call SCF_Card_freeInfo() at all.
• If the object persists for a long period of time, the application can explicitly request the information to be deallocated without closing the object, so that memory is not wasted on unneeded storage. Similarly, if an application repeatedly requests information about an object (even the same information), the application can explicitly request deallocation as needed, so that memory usage does not continue to increase until the object is closed. In general, requesting information to be deallocated can be used to reduce runtime memory bloat.
Attempts to access deallocated memory result in undefined behavior.
If the information is successfully deallocated, SCF_STATUS_SUCCESS is returned. Otherwise, an error value is returned.
These functions will fail if:
SCF_STATUS_BADARGS The specified value cannot be deallocated, possibly because of an invalid pointer, a value already deallocated, or because the value is not associated with the specified session, terminal, or card.
SCF_STATUS_BADHANDLE The specified session, terminal, or card has been closed or is invalid.
SCF_STATUS_FAILED An internal error occured.
Example 1: Free information.
char *terminalName; SCF_Status_t status; SCF_Terminal_t myTerminal; /* (...call SCF_Session_getTerminal to open myTerminal...) */ status = SCF_Terminal_getInfo(myTerminal, "name", &terminalName); if (status != SCF_STATUS_SUCCESS) exit(1); printf("The terminal name is %s\n", terminalName); status = SCF_Terminal_freeInfo(myTerminal, terminalName); if (status != SCF_STATUS_SUCCESS) exit(1);
See attributes(5) for descriptions of the following attributes:
|ATTRIBUTE TYPE||ATTRIBUTE VALUE|
libsmartcard(3LIB), SCF_Session_getInfo(3SMARTCARD), SCF_Session_getSession(3SMARTCARD), SCF_Session_getTerminal(3SMARTCARD), SCF_Terminal_getCard(3SMARTCARD), attributes(5)