Module Name: src Committed By: christos Date: Fri Mar 27 17:42:36 UTC 2020
Modified Files: src/usr.bin/tic: tic.c Log Message: Use the new functions and add more error checking. To generate a diff of this commit: cvs rdiff -u -r1.33 -r1.34 src/usr.bin/tic/tic.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/tic/tic.c diff -u src/usr.bin/tic/tic.c:1.33 src/usr.bin/tic/tic.c:1.34 --- src/usr.bin/tic/tic.c:1.33 Fri Mar 27 11:11:57 2020 +++ src/usr.bin/tic/tic.c Fri Mar 27 13:42:36 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: tic.c,v 1.33 2020/03/27 15:11:57 christos Exp $ */ +/* $NetBSD: tic.c,v 1.34 2020/03/27 17:42:36 christos Exp $ */ /* * Copyright (c) 2009, 2010, 2020 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: tic.c,v 1.33 2020/03/27 15:11:57 christos Exp $"); +__RCSID("$NetBSD: tic.c,v 1.34 2020/03/27 17:42:36 christos Exp $"); #include <sys/types.h> #include <sys/queue.h> @@ -104,12 +104,13 @@ save_term(struct cdbw *db, TERM *term) size_t slen = strlen(term->name) + 1; if (term->base_term != NULL) { - len = (ssize_t)slen + 7; + char *cap; + len = (ssize_t)(1 + sizeof(uint32_t) + sizeof(uint16_t) + slen); buf = emalloc(len); - buf[0] = TERMINFO_ALIAS; - le32enc(buf + 1, term->base_term->id); - le16enc(buf + 5, slen); - memcpy(buf + 7, term->name, slen); + cap = (char *)buf; + *cap++ = TERMINFO_ALIAS; + _ti_encode_32(&cap, term->base_term->id); + _ti_encode_count_str(&cap, term->name, slen); if (cdbw_put(db, term->name, slen, buf, len)) err(1, "cdbw_put"); free(buf); @@ -229,63 +230,47 @@ merge(TIC *rtic, TIC *utic, int flags) cap = utic->flags.buf; for (n = utic->flags.entries; n > 0; n--) { - ind = le16dec(cap); - cap += sizeof(uint16_t); + ind = _ti_decode_16(&cap); flag = *cap++; if (VALID_BOOLEAN(flag) && _ti_find_cap(rtic, &rtic->flags, 'f', ind) == NULL) { - _ti_grow_tbuf(&rtic->flags, sizeof(uint16_t) + 1); - le16enc(rtic->flags.buf + rtic->flags.bufpos, ind); - rtic->flags.bufpos += sizeof(uint16_t); - rtic->flags.buf[rtic->flags.bufpos++] = flag; - rtic->flags.entries++; + if (!_ti_encode_buf_id_flags(&rtic->flags, ind, flag)) + err(1, "encode flag"); } } cap = utic->nums.buf; for (n = utic->nums.entries; n > 0; n--) { - ind = le16dec(cap); - cap += sizeof(uint16_t); - num = _ti_decode_num(utic->rtype, &cap); + ind = _ti_decode_16(&cap); + num = _ti_decode_num(&cap, utic->rtype); if (VALID_NUMERIC(num) && _ti_find_cap(rtic, &rtic->nums, 'n', ind) == NULL) { - grow_tbuf(&rtic->nums, sizeof(uint16_t) + - _ti_numsize(rtic)); - le16enc(rtic->nums.buf + rtic->nums.bufpos, ind); - rtic->nums.bufpos += sizeof(uint16_t); - _ti_encode_num(rtic, &rtic->nums, num); - rtic->nums.entries++; + if (!_ti_encode_buf_id_num(&rtic->nums, ind, num, + _ti_numsize(rtic))) + err(1, "encode num"); } } cap = utic->strs.buf; for (n = utic->strs.entries; n > 0; n--) { - ind = le16dec(cap); - cap += sizeof(uint16_t); - len = le16dec(cap); - cap += sizeof(uint16_t); + ind = _ti_decode_16(&cap); + len = _ti_decode_16(&cap); if (len > 0 && _ti_find_cap(rtic, &rtic->strs, 's', ind) == NULL) { - grow_tbuf(&rtic->strs, (sizeof(uint16_t) * 2) + len); - le16enc(rtic->strs.buf + rtic->strs.bufpos, ind); - rtic->strs.bufpos += sizeof(uint16_t); - le16enc(rtic->strs.buf + rtic->strs.bufpos, len); - rtic->strs.bufpos += sizeof(uint16_t); - memcpy(rtic->strs.buf + rtic->strs.bufpos, - cap, len); - rtic->strs.bufpos += len; - rtic->strs.entries++; + if (!_ti_encode_buf_id_count_str(&rtic->strs, ind, cap, + len)) + err(1, "encode str"); + } cap += len; } cap = utic->extras.buf; for (n = utic->extras.entries; n > 0; n--) { - num = le16dec(cap); - cap += sizeof(uint16_t); + num = _ti_decode_16(&cap); code = cap; cap += num; type = *cap++; @@ -298,13 +283,12 @@ merge(TIC *rtic, TIC *utic, int flags) continue; break; case 'n': - num = _ti_decode_num(utic->rtype, &cap); + num = _ti_decode_num(&cap, utic->rtype); if (!VALID_NUMERIC(num)) continue; break; case 's': - num = le16dec(cap); - cap += sizeof(uint16_t); + num = _ti_decode_16(&cap); str = cap; cap += num; if (num == 0) @@ -320,7 +304,7 @@ static size_t merge_use(int flags) { size_t skipped, merged, memn; - char *cap, *scap; + const char *cap; uint16_t num; TIC *rtic, *utic; TERM *term, *uterm;; @@ -368,10 +352,11 @@ merge_use(int flags) dowarn("%s: use no longer exists - impossible", rtic->name); else { - scap = cap - (4 + sizeof(uint16_t)); + char *scap = __UNCONST( + cap - (4 + sizeof(uint16_t))); cap++; - num = le16dec(cap); - cap += sizeof(uint16_t) + num; + num = _ti_decode_16(&cap); + cap += num; memn = rtic->extras.bufpos - (cap - rtic->extras.buf); memmove(scap, cap, memn);