From 50902fbb4b4ce4d1c3185c61a6c46fb06848ad74 Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Mon, 18 Apr 2005 18:33:34 +0000
Subject: [PATCH] Fix ODGetCodeIfLongest().  Was returning NO_MATCH if there
 was any code longer than the one in the buffer currently.

---
 src/odoors/ODGetIn.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/odoors/ODGetIn.c b/src/odoors/ODGetIn.c
index 70db99fd71..10be7f40f0 100644
--- a/src/odoors/ODGetIn.c
+++ b/src/odoors/ODGetIn.c
@@ -443,26 +443,30 @@ static int ODHaveStartOfSequence(WORD wFlags)
 static int ODGetCodeIfLongest(WORD wFlags)
 {
    int CurrLen=0;
-   int seqlen;
+   int seqlen1;
+   int seqlen2;
    int i;
    int retval=NO_MATCH;;
 
    if(wFlags & GETIN_RAW)
       return(NO_MATCH);
+   seqlen1=strlen(szCurrentSequence);
    for(i = 0; i < DIM(aKeySequences); ++i) {
       if((wFlags & GETIN_RAWCTRL) && aKeySequences[i].bIsControlKey) {
          continue;
       }
-      seqlen=strlen(aKeySequences[i].pszSequence);
-      if(seqlen>CurrLen) {
-         if(CurrLen==0) {
-            if(strncmp(aKeySequences[i].pszSequence, szCurrentSequence, seqlen)==0) {
+      seqlen2=strlen(aKeySequences[i].pszSequence);
+      if(seqlen2>CurrLen) {
+         if(seqlen2<=seqlen1) {	/* The sequence would be completed in buffer */
+            if(strncmp(aKeySequences[i].pszSequence, szCurrentSequence, seqlen2)==0) {
                retval=i;
                CurrLen=seqlen;
             }
          }
-         else {
-            return(NO_MATCH);
+         else {		/* Possible partial sequence */
+            if(strncmp(aKeySequences[i].pszSequence, szCurrentSequence, seqlen1)==0) {
+               return(NO_MATCH);
+            }
          }
       }
    }
-- 
GitLab