Hi, The sign of a BIGNUM is irrelevant when inspecting its bit representation. Also, the construct
if (BN_is_negative(v)) BN_set_negative(v, 0); was already redundant since a mere BN_set_negative(v, 0); would have been enough to do the same thing. In any case, none of this is necessary. Index: inout.c =================================================================== RCS file: /cvs/src/usr.bin/dc/inout.c,v retrieving revision 1.20 diff -u -p -r1.20 inout.c --- inout.c 26 Feb 2017 11:29:55 -0000 1.20 +++ inout.c 26 Oct 2017 04:44:01 -0000 @@ -390,22 +390,14 @@ print_value(FILE *f, const struct value void print_ascii(FILE *f, const struct number *n) { - BIGNUM *v; int numbits, i, ch; - v = BN_dup(n->number); - bn_checkp(v); - - if (BN_is_negative(v)) - BN_set_negative(v, 0); - - numbits = BN_num_bytes(v) * 8; + numbits = BN_num_bytes(n->number) * 8; while (numbits > 0) { ch = 0; for (i = 0; i < 8; i++) - ch |= BN_is_bit_set(v, numbits-i-1) << (7 - i); + ch |= BN_is_bit_set(n->number, numbits-i-1) << (7 - i); (void)putc(ch, f); numbits -= 8; } - BN_free(v); } Regards, kshe