[Pcsclite-cvs-commit] PCSC/doc/example pcsc_demo.c,1.8,1.9

rousseau@haydn.debian.org rousseau@haydn.debian.org


Update of /cvsroot/pcsclite/PCSC/doc/example
In directory haydn:/tmp/cvs-serv10528

Modified Files:
	pcsc_demo.c 
Log Message:
recode the readers enumeration to avoid the use of PCSCLITE_MAX_READERS_CONTEXTS


Index: pcsc_demo.c
===================================================================
RCS file: /cvsroot/pcsclite/PCSC/doc/example/pcsc_demo.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- pcsc_demo.c	18 Mar 2004 07:40:47 -0000	1.8
+++ pcsc_demo.c	31 Mar 2004 09:54:31 -0000	1.9
@@ -36,10 +36,6 @@
 #define FALSE 0
 #endif
 
-#ifndef PCSCLITE_MAX_READERS_CONTEXTS
-#define PCSCLITE_MAX_READERS_CONTEXTS	16
-#endif
-
 /* PCSC error message pretty print */
 #define PCSC_ERROR(rv, text) \
 if (rv != SCARD_S_SUCCESS) \
@@ -58,7 +54,7 @@
 	SCARDCONTEXT hContext;
 	DWORD dwReaders;
 	LPSTR mszReaders;
-	char *ptr, *readers[PCSCLITE_MAX_READERS_CONTEXTS];
+	char *ptr, **readers;
 	int nbReaders;
 	SCARDHANDLE hCard;
 	DWORD dwActiveProtocol, dwReaderLen, dwState, dwProt, dwAtrLen;
@@ -100,15 +96,12 @@
 	if (rv != SCARD_S_SUCCESS)
 		printf("SCardListReader: %lX\n", rv);
 
-	/* Extract readers from the null separated string and get thetotal
-	 * number of readers
-	 */
+	/* Extract readers from the null separated string and get the total
+	 * number of readers */
 	nbReaders = 0;
 	ptr = mszReaders;
 	while ((*ptr != '\0') && (nbReaders < PCSCLITE_MAX_READERS_CONTEXTS))
 	{
-		printf("%d: %s\n", nbReaders, ptr);
-		readers[nbReaders] = ptr;
 		ptr += strlen(ptr)+1;
 		nbReaders++;
 	}
@@ -117,6 +110,25 @@
 	{
 		printf("No reader found\n");
 		goto end;
+	}
+
+	/* allocate the readers table */
+	readers = calloc(nbReaders, sizeof(char *));
+	if (NULL == readers)
+	{
+		printf("Not enough memory for readers[]\n");
+		goto end;
+	}
+
+	/* fill the readers table */
+	nbReaders = 0;
+	ptr = mszReaders;
+	while (*ptr != '\0')
+	{
+		printf("%d: %s\n", nbReaders, ptr);
+		readers[nbReaders] = ptr;
+		ptr += strlen(ptr)+1;
+		nbReaders++;
 	}
 
 	if (argc > 1)