revamped KeyRing functions: stricter checks

This commit is contained in:
marschap
2005-05-20 08:04:21 +00:00
parent d48ed1f8ed
commit 7c6d32223b
+13 -18
View File
@@ -41,8 +41,8 @@ int ReceiveBufferTailPeek;
#define KEYRINGSIZE 16 #define KEYRINGSIZE 16
unsigned char KeyRing[KEYRINGSIZE]; unsigned char KeyRing[KEYRINGSIZE];
int KeyHead; int KeyHead = 0;
int KeyTail; int KeyTail = 0;
/*-OK-----------------------------------------------------------------------*/ /*-OK-----------------------------------------------------------------------*/
void EmptyKeyRing(void) void EmptyKeyRing(void)
@@ -51,32 +51,27 @@ void EmptyKeyRing(void)
} }
/*-OK-----------------------------------------------------------------------*/ /*-OK-----------------------------------------------------------------------*/
int AddKeyToKeyRing(unsigned char key) { int AddKeyToKeyRing(unsigned char key)
int oldhead; {
if (((KeyHead + 1) % KEYRINGSIZE) != (KeyTail % KEYRINGSIZE)) {
/* printf("We add key: %d\n", key); */ /* printf("We add key: %d\n", key); */
oldhead=KeyHead; KeyRing[KeyHead % KEYRINGSIZE] = key;
KeyHead++; KeyHead = (KeyHead + 1) % KEYRINGSIZE;
if (KeyHead==KEYRINGSIZE) KeyHead=0;
if (KeyHead!=KeyTail) {
KeyRing[oldhead]=key;
return 1; return 1;
} }
/* We have a KeyRing overflow */ /* KeyRing overflow: do not accept extra key */
/* We do not accept extra key */
KeyHead=oldhead;
return 0; return 0;
} }
/*-OK-----------------------------------------------------------------------*/ /*-OK-----------------------------------------------------------------------*/
unsigned char GetKeyFromKeyRing(void) { unsigned char GetKeyFromKeyRing(void)
{
int retval = 0; int retval = 0;
if (KeyHead!=KeyTail) { if ((KeyHead % KEYRINGSIZE) != (KeyTail % KEYRINGSIZE )) {
retval=KeyRing[KeyTail]; retval = KeyRing[KeyTail % KEYRINGSIZE];
KeyTail++; KeyTail = (KeyTail + 1) % KEYRINGSIZE;
if (KeyTail==KEYRINGSIZE) KeyTail=0;
} }
/* if (retval) printf("We remove key: %d\n", retval); */ /* if (retval) printf("We remove key: %d\n", retval); */