From 2af896cd1b2ee13f639ba10ef1094a5833ab64bc Mon Sep 17 00:00:00 2001 From: leitner Date: Tue, 24 Sep 2019 21:40:02 +0000 Subject: [PATCH] make taglen calculation yet more obvious --- fmt_asn1tagint.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/fmt_asn1tagint.c b/fmt_asn1tagint.c index 994a0f1..e5428b0 100644 --- a/fmt_asn1tagint.c +++ b/fmt_asn1tagint.c @@ -2,10 +2,8 @@ static size_t tagintlen(unsigned long l) { size_t i; - size_t needed=((sizeof l)*8)/7+1; - for (i=1; i>(i*7))) - break; + for (i=1; l>0x7f; ++i) + l >>= 7; return i; } @@ -30,6 +28,9 @@ size_t fmt_asn1tagint(char* dest,unsigned long l) { int main() { char buf[10]; + assert(tagintlen(0)==1); + assert(tagintlen(127)==1); + assert(tagintlen(128)==2); assert(tagintlen(0xfffffffful)==5); assert(fmt_asn1tagint(buf,0xfffffffful)==5 && !memcmp(buf,"\x8f\xff\xff\xff\x7f",5)); if (sizeof(long)==8) assert(fmt_asn1tagint(buf,0xfffffffffffffffful)==10 && !memcmp(buf,"\x81\xff\xff\xff\xff\xff\xff\xff\xff\x7f",10));