Blame src/utils.c

Packit 9f0df5
/*
Packit 9f0df5
    utils.c:
Packit 9f0df5
    Copyright (C) 2003-2008   Ludovic Rousseau
Packit 9f0df5
Packit 9f0df5
    This library is free software; you can redistribute it and/or
Packit 9f0df5
    modify it under the terms of the GNU Lesser General Public
Packit 9f0df5
    License as published by the Free Software Foundation; either
Packit 9f0df5
    version 2.1 of the License, or (at your option) any later version.
Packit 9f0df5
Packit 9f0df5
    This library is distributed in the hope that it will be useful,
Packit 9f0df5
    but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 9f0df5
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 9f0df5
    Lesser General Public License for more details.
Packit 9f0df5
Packit 9f0df5
	You should have received a copy of the GNU Lesser General Public License
Packit 9f0df5
	along with this library; if not, write to the Free Software Foundation,
Packit 9f0df5
	Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Packit 9f0df5
*/
Packit 9f0df5
Packit 9f0df5
#include <pcsclite.h>
Packit 9f0df5
Packit 9f0df5
#include <config.h>
Packit 9f0df5
#include "ccid.h"
Packit 9f0df5
#include "defs.h"
Packit 9f0df5
#include "ccid_ifdhandler.h"
Packit 9f0df5
#include "utils.h"
Packit 9f0df5
#include "debug.h"
Packit 9f0df5
Packit 9f0df5
int ReaderIndex[CCID_DRIVER_MAX_READERS];
Packit 9f0df5
Packit 9f0df5
void InitReaderIndex(void)
Packit 9f0df5
{
Packit 9f0df5
	int i;
Packit 9f0df5
Packit 9f0df5
	for (i=0; i
Packit 9f0df5
		ReaderIndex[i] = -1;
Packit 9f0df5
} /* InitReaderIndex */
Packit 9f0df5
Packit 9f0df5
int GetNewReaderIndex(const int Lun)
Packit 9f0df5
{
Packit 9f0df5
	int i;
Packit 9f0df5
Packit 9f0df5
	/* check that Lun is NOT already used */
Packit 9f0df5
	for (i=0; i
Packit 9f0df5
		if (Lun == ReaderIndex[i])
Packit 9f0df5
			break;
Packit 9f0df5
Packit 9f0df5
	if (i < CCID_DRIVER_MAX_READERS)
Packit 9f0df5
	{
Packit 9f0df5
		DEBUG_CRITICAL2("Lun: %d is already used", Lun);
Packit 9f0df5
		return -1;
Packit 9f0df5
	}
Packit 9f0df5
Packit 9f0df5
	for (i=0; i
Packit 9f0df5
		if (-1 == ReaderIndex[i])
Packit 9f0df5
		{
Packit 9f0df5
			ReaderIndex[i] = Lun;
Packit 9f0df5
			return i;
Packit 9f0df5
		}
Packit 9f0df5
Packit 9f0df5
	DEBUG_CRITICAL("ReaderIndex[] is full");
Packit 9f0df5
	return -1;
Packit 9f0df5
} /* GetReaderIndex */
Packit 9f0df5
Packit 9f0df5
int LunToReaderIndex(const int Lun)
Packit 9f0df5
{
Packit 9f0df5
	int i;
Packit 9f0df5
Packit 9f0df5
	for (i=0; i
Packit 9f0df5
		if (Lun == ReaderIndex[i])
Packit 9f0df5
			return i;
Packit 9f0df5
Packit 9f0df5
	DEBUG_CRITICAL2("Lun: %X not found", Lun);
Packit 9f0df5
	return -1;
Packit 9f0df5
} /* LunToReaderIndex */
Packit 9f0df5
Packit 9f0df5
void ReleaseReaderIndex(const int index)
Packit 9f0df5
{
Packit 9f0df5
	ReaderIndex[index] = -1;
Packit 9f0df5
} /* ReleaseReaderIndex */
Packit 9f0df5