The code works like follow (N = bit_len):

        N       -1      %4      2<<     -1      ~ (binary)
        --------------------------------------------------
        1       0       0       2       1       1111 1110
        2       1       1       4       3       1111 1100
        3       2       2       8       7       1111 1000
        4       3       3       16      15      1111 0000
        5       4       0       2       1       1111 1110
        6       5       1       4       3       1111 1100
        7       6       2       8       7       1111 1000
        8       7       3       16      15      1111 0000
        ...     ...     ...     ...     ...     ...

Signed-off-by: Michael Roth <mr...@nessie.de>
---
 src/svf/svf.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/svf/svf.c b/src/svf/svf.c
index 276a374..54e2a26 100644
--- a/src/svf/svf.c
+++ b/src/svf/svf.c
@@ -685,7 +685,7 @@ static int svf_copy_hexstring_to_binary(char *str, uint8_t 
**bin, int orig_bit_l
                str_len--;
 
        // check valid
-       if (str_len > 0 || (ch & ~((1 << (4 - (bit_len % 4))) - 1)) != 0)
+       if (str_len > 0 || (ch & ~((2 << ((bit_len - 1) % 4)) - 1)) != 0)
        {
                LOG_ERROR("value execede length");
                return ERROR_FAIL;
-- 
1.6.4.4

_______________________________________________
Openocd-development mailing list
Openocd-development@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to