In article <20110310101719.721f217...@cvs.netbsd.org>, Roy Marples <source-changes-d@NetBSD.org> wrote: >-=-=-=-=-=- > >Module Name: src >Committed By: roy >Date: Thu Mar 10 10:17:19 UTC 2011 > >Modified Files: > src/lib/libterminfo: termcap.c terminfo.5.in > >Log Message: >Add support for translating the following termcap commands into terminfo: > %B %D %r %2 %3 %d %+ %> %. >Fixes PR bin/44692. > >
Instead of: if (l + 30 > len) goto elen; *ip++ = '%'; *ip++ = 'p'; *ip++ = '0' + p; strcpy(ip, "%{10}%/%{16}%*%p"); ip += 16; *ip++ = '0' + p; strcpy(ip, "%{10}%m%+"); ip += 9; l += 29; nop = 1; I would put everything in a single format and adjust it: static const char fmt[] = "%p0%{10}%/%{16}%*%p0%{10}%m%+"; if (l + sizeof(fmt) > len) goto elen; memcpy(ip, fmt, sizeof(fmt) - 1); ip[2] += p; ip[19] += p; ip += sizeof(fmt) - 1; l += sizeof(fmt) - 1; nop = 1; I could do all of it the same way assuming that I would encode all characters in a consistent \000 sequence... christos