pcsc-lite/pcsc-lite-1.6.7-noautostart...

101 lines
2.4 KiB
Diff

diff -up pcsc-lite-1.6.7/src/winscard_clnt.c.noautostart pcsc-lite-1.6.7/src/winscard_clnt.c
--- pcsc-lite-1.6.7/src/winscard_clnt.c.noautostart 2011-02-23 00:20:25.000000000 +0200
+++ pcsc-lite-1.6.7/src/winscard_clnt.c 2011-02-25 17:17:32.201085695 +0200
@@ -444,80 +444,16 @@ LONG SCardEstablishContext(DWORD dwScope
LPCVOID pvReserved2, LPSCARDCONTEXT phContext)
{
LONG rv;
- int daemon_launched = FALSE;
- int retries = 0;
API_TRACE_IN("%ld, %p, %p", dwScope, pvReserved1, pvReserved2)
PROFILE_START
-again:
/* Check if the server is running */
rv = SCardCheckDaemonAvailability();
if (SCARD_E_INVALID_HANDLE == rv)
/* we reconnected to a daemon or we got called from a forked child */
rv = SCardCheckDaemonAvailability();
- if (SCARD_E_NO_SERVICE == rv)
- {
-launch:
- if (daemon_launched)
- {
- retries++;
- if (retries < 50) /* 50 x 100ms = 5 seconds */
- {
- /* give some more time to the server to start */
- SYS_USleep(100*1000); /* 100 ms */
- goto again;
- }
-
- /* the server failed to start (in time) */
- goto end;
- }
- else
- {
- int pid;
-
- pid = fork();
-
- if (pid < 0)
- {
- Log2(PCSC_LOG_CRITICAL, "fork failed: %s", strerror(errno));
- rv = SCARD_F_INTERNAL_ERROR;
- goto end;
- }
-
- if (0 == pid)
- {
- int i, max;
- char *param = getenv("PCSCLITE_PCSCD_ARGS");
-
- /* close all file handles except stdin, stdout and
- * stderr so that pcscd does not confiscate ressources
- * allocated by the application */
- max = sysconf(_SC_OPEN_MAX);
- if (-1 == max)
- max = 1024;
- for (i=3; i<max; i++)
- (void)close(i);
-
- /* son process */
- execl(PCSCD_BINARY, "pcscd", "--auto-exit", param,
- (char *)NULL);
- Log2(PCSC_LOG_CRITICAL, "exec " PCSCD_BINARY " failed: %s",
- strerror(errno));
- exit(1);
- }
-
- /* father process */
- daemon_launched = TRUE;
-
- if (waitpid(pid, NULL, 0) < 0)
- Log2(PCSC_LOG_CRITICAL, "waitpid failed: %s", strerror(errno));
-
- goto again;
- }
- }
-
if (rv != SCARD_S_SUCCESS)
goto end;
@@ -526,15 +462,6 @@ launch:
pvReserved2, phContext);
(void)SCardUnlockThread();
- /* SCardEstablishContextTH may fail if the previous pcscd crashed
- * without cleaning /var/run/pcscd/pcscd.comm */
- if (SCARD_E_NO_SERVICE == rv)
- {
- retries++;
- if (retries <= 1)
- goto launch;
- }
-
end:
PROFILE_END(rv)
API_TRACE_OUT("%ld", *phContext)