diff options
author | Paul LeoNerd Evans <leonerd@leonerd.org.uk> | 2008-02-10 20:24:25 +0000 |
---|---|---|
committer | Paul LeoNerd Evans <leonerd@leonerd.org.uk> | 2008-02-10 20:24:25 +0000 |
commit | 53b0d0aca9d87361f6add5c1ff8380b8101ffceb (patch) | |
tree | 457baf78672d96890018b7f32cf868df43fce973 | |
parent | 31414eac3bbc40ac10a46a2f5c49ea87b216311a (diff) | |
download | termo-53b0d0aca9d87361f6add5c1ff8380b8101ffceb.tar.gz termo-53b0d0aca9d87361f6add5c1ff8380b8101ffceb.tar.xz termo-53b0d0aca9d87361f6add5c1ff8380b8101ffceb.zip |
More robust eatbytes() that guards against the buffer going negative, because size_t is not signed
-rw-r--r-- | termkey.c | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -188,14 +188,15 @@ int termkey_getwaittime(termkey_t *tk) static inline void eatbytes(termkey_t *tk, size_t count) { - tk->buffstart += count; - tk->buffcount -= count; - - if(tk->buffcount <= 0) { + if(count >= tk->buffcount) { tk->buffstart = 0; tk->buffcount = 0; + return; } + tk->buffstart += count; + tk->buffcount -= count; + size_t halfsize = tk->buffsize / 2; if(tk->buffstart > halfsize) { |