diff options
Diffstat (limited to 'cores/arduino')
-rw-r--r-- | cores/arduino/Stream.cpp | 60 |
1 files changed, 32 insertions, 28 deletions
diff --git a/cores/arduino/Stream.cpp b/cores/arduino/Stream.cpp index f007ce9..b31942f 100644 --- a/cores/arduino/Stream.cpp +++ b/cores/arduino/Stream.cpp @@ -254,11 +254,12 @@ String Stream::readStringUntil(char terminator) int Stream::findMulti( struct Stream::MultiTarget *targets, int tCount) { // any zero length target string automatically matches and would make // a mess of the rest of the algorithm. - for (struct MultiTarget *t = targets; t < targets+tCount; ++t) + for (struct MultiTarget *t = targets; t < targets+tCount; ++t) { if (t->len <= 0) return t - targets; + } - while(1) { + while (1) { int c = timedRead(); if (c < 0) return -1; @@ -277,37 +278,40 @@ int Stream::findMulti( struct Stream::MultiTarget *targets, int tCount) { // but it will match the second position so we can't just reset the current // index to 0 when we find a mismatch. if (t->index == 0) - continue; + continue; int origIndex = t->index; do { - --t->index; - // first check if current char works against the new current index - if (c != t->str[t->index]) - continue; - - // if it's the only char then we're good, nothing more to check - if (t->index == 0) { - t->index++; - break; - } - - // otherwise we need to check the rest of the found string - int diff = origIndex - t->index; - size_t i; - for (i = 0; i < t->index; ++i) - if (t->str[i] != t->str[i + diff]) - break; - // if we successfully got through the previous loop then our current - // index is good. - if (i == t->index) { - t->index++; - break; - } - // otherwise we just try the next index + --t->index; + // first check if current char works against the new current index + if (c != t->str[t->index]) + continue; + + // if it's the only char then we're good, nothing more to check + if (t->index == 0) { + t->index++; + break; + } + + // otherwise we need to check the rest of the found string + int diff = origIndex - t->index; + size_t i; + for (i = 0; i < t->index; ++i) { + if (t->str[i] != t->str[i + diff]) + break; + } + + // if we successfully got through the previous loop then our current + // index is good. + if (i == t->index) { + t->index++; + break; + } + + // otherwise we just try the next index } while (t->index); } } // unreachable return -1; -}
\ No newline at end of file +} |