Commit 22bcf1c3ea1eb2879d8f2271bb372acc8b14adda
authorcyrozap <cyrozap@gmail.com>
Tue, 14 Oct 2014 04:57:11 +0000 (00:57 -0400)
committercyrozap <cyrozap@gmail.com>
Tue, 14 Oct 2014 04:57:11 +0000 (00:57 -0400)
Without this fix, the output to the buffer would be limited to maxlen/2 bytes
instead of maxlen. It is obvious from the implementation that the latter
behavior is the expected one, so the function has been altered to reflect that.

simavr/sim/sim_hex.c

index 0c4f24f5a6c2d763312dd063fe69f3ad9cb29348..69ef0e12c6978f6323956bf8c587b220aea1efc5 100644 (file)
@@ -51,7 +51,7 @@ int read_hex_string(const char * src, uint8_t * buffer, int maxlen)
     uint8_t * dst = buffer;
     int ls = 0;
     uint8_t b = 0;
-    while (*src && maxlen--) {
+    while (*src && maxlen) {
         char c = *src++;
         switch (c) {
             case 'a' ... 'f':   b = (b << 4) | (c - 'a' + 0xa); break;
@@ -66,6 +66,7 @@ int read_hex_string(const char * src, uint8_t * buffer, int maxlen)
         }
         if (ls & 1) {
             *dst++ = b; b = 0;
+            maxlen--;
         }
         ls++;
     }