diff options
author | David A. Mellis <d.mellis@arduino.cc> | 2012-01-02 13:49:59 -0500 |
---|---|---|
committer | David A. Mellis <d.mellis@arduino.cc> | 2012-01-02 13:49:59 -0500 |
commit | 3b962be2730265dd27220b801fc9bceb92220977 (patch) | |
tree | efc7ef7d83e58bc21f0ba0d11c3a945e4dcb86f9 /cores/arduino | |
parent | 95b51c7728619fb9a718e15d13d99cb371905ad9 (diff) |
Fixing findUntil() problem with repeated initial characters. (Jeffery.zksun)
http://code.google.com/p/arduino/issues/detail?id=768
Diffstat (limited to 'cores/arduino')
-rw-r--r-- | cores/arduino/Stream.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/cores/arduino/Stream.cpp b/cores/arduino/Stream.cpp index 5fad8dd..3d5b905 100644 --- a/cores/arduino/Stream.cpp +++ b/cores/arduino/Stream.cpp @@ -99,25 +99,27 @@ bool Stream::findUntil(char *target, size_t targetLen, char *terminator, size_t size_t index = 0; // maximum target string length is 64k bytes! size_t termIndex = 0; int c; - + if( *target == 0) - return true; // return true if target is a null string + return true; // return true if target is a null string while( (c = timedRead()) > 0){ + + if(c != target[index]) + index = 0; // reset index if any char does not match + if( c == target[index]){ - //////Serial.print("found "); Serial.write(c); Serial.print("index now"); Serial.println(index+1); + //////Serial.print("found "); Serial.write(c); Serial.print("index now"); Serial.println(index+1); if(++index >= targetLen){ // return true if all chars in the target match return true; } } - else{ - index = 0; // reset index if any char does not match - } + if(termLen > 0 && c == terminator[termIndex]){ - if(++termIndex >= termLen) - return false; // return false if terminate string found before target string + if(++termIndex >= termLen) + return false; // return false if terminate string found before target string } else - termIndex = 0; + termIndex = 0; } return false; } |