From: Jeremy Kerr Date: Sun, 19 Nov 2006 12:06:48 +0000 (+1100) Subject: More error checking - check width of input value - better reporting of value parse... X-Git-Url: https://git.ozlabs.org/?p=bitfield;a=commitdiff_plain;h=dca1f318721180d56499053325f88f9db1140b0a;hp=ffe52a7031a2c5e5fb6566c5ecc091841e2fe45b;ds=sidebyside More error checking - check width of input value - better reporting of value parse errors Signed-off-by: Jeremy Kerr --- diff --git a/bitfield b/bitfield index ae9ab29..32a0405 100644 --- a/bitfield +++ b/bitfield @@ -71,7 +71,8 @@ class bitfield: return a class register: - def __init__(self, name, width): + def __init__(self, id, name, width): + self.id = id self.name = name self.width = width self.fields = [] @@ -158,7 +159,7 @@ def parse_config(bnf, regs, file): raise ConfigurationError(file, "Register %s has no fields" % id) - r = register(name, width) + r = register(id, name, width) for f in fields: r.add_field(f) @@ -210,6 +211,21 @@ def parse_all_configs(configs): def usage(prog): print "Usage: %s <-l> | <-s pattern> | [-n] register [value...]" % prog +def decode_value(reg, value, options): + try: + i = long(value, 0) + except ValueError, e: + print "error: invalid value '%s'" % value + return + + if i > ((1 << reg.width) - 1): + print ("error: value '%s' is too large " + \ + "for %d-bit register '%s'") % (value, reg.width, reg.id) + return + + print reg.decode(i, options.has_key('non_zero')) + + def main(): try: (opts, args) = getopt(sys.argv[1:], "hlns:", \ @@ -269,8 +285,7 @@ def main(): return for value in values: - i = long(value.strip(), 0) - print r.decode(i, options['non-zero']) + decode_value(r, value.strip(), options) return 0