Displays operations ranges more concisely. E.g. { 0x8901-0x8930 } instead of { 0x8901 0x8902 0x8903 0x8904 80x8905 0x0806 ... 0x8930 } --- checkpolicy/test/dispol.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/checkpolicy/test/dispol.c b/checkpolicy/test/dispol.c index 133759f..157361a 100644 --- a/checkpolicy/test/dispol.c +++ b/checkpolicy/test/dispol.c @@ -55,23 +55,50 @@ int render_access_mask(uint32_t mask, avtab_key_t * key, policydb_t * p, } #define operation_perm_test(x, p) (1 & (p[x >> 5] >> (x & 0x1f))) +#define next_bit_in_range(i, p) \ + ((i + 1 < sizeof(p)*8) && operation_perm_test((i + 1), p)) int render_operations(avtab_operations_t *ops, avtab_key_t * key, FILE * fp) { uint16_t value; - unsigned int bit = 0; + uint16_t low_bit; + uint16_t low_value; + unsigned int bit; + unsigned int in_range = 0; fprintf(fp, "{ "); for (bit = 0; bit < sizeof(ops->perms)*8; bit++) { if (!operation_perm_test(bit, ops->perms)) continue; + + if (in_range && next_bit_in_range(bit, ops->perms)) { + /* continue until high value found */ + continue; + } else if (next_bit_in_range(bit, ops->perms)) { + /* low value */ + low_bit = bit; + in_range = 1; + continue; + } + if (key->specified & AVTAB_OPNUM) { value = ops->type<<8 | bit; - fprintf(fp, "0x%hx ", value); + low_value = ops->type<<8 | low_bit; + if (in_range) + fprintf(fp, "0x%hx-0x%hx ", low_value, value); + else + fprintf(fp, "0x%hx ", value); } else if (key->specified & AVTAB_OPTYPE) { value = bit << 8; - fprintf(fp, "0x%hx-0x%hx ", value, value|0xff); + low_value = low_bit << 8; + if (in_range) + fprintf(fp, "0x%hx-0x%hx ", low_value, (uint16_t) (value|0xff)); + else + fprintf(fp, "0x%hx-0x%hx ", value, (uint16_t) (value|0xff)); + } + if (in_range) + in_range = 0; } fprintf(fp, "}"); return 0; -- 2.2.0.rc0.207.ga3a616c _______________________________________________ Selinux mailing list Selinux@xxxxxxxxxxxxx To unsubscribe, send email to Selinux-leave@xxxxxxxxxxxxx. To get help, send an email containing "help" to Selinux-request@xxxxxxxxxxxxx.