Module Name: src Committed By: roy Date: Fri Feb 5 12:31:57 UTC 2010
Modified Files: src/lib/libterminfo: term.c term_private.h src/usr.bin/infocmp: infocmp.c src/usr.bin/tic: tic.c Log Message: Store the aliases against the entry, so that infocmp can reproduce them. Handy for creating smaller terminfo databases. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/lib/libterminfo/term.c \ src/lib/libterminfo/term_private.h cvs rdiff -u -r1.2 -r1.3 src/usr.bin/infocmp/infocmp.c cvs rdiff -u -r1.1 -r1.2 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/lib/libterminfo/term.c diff -u src/lib/libterminfo/term.c:1.2 src/lib/libterminfo/term.c:1.3 --- src/lib/libterminfo/term.c:1.2 Fri Feb 5 09:42:21 2010 +++ src/lib/libterminfo/term.c Fri Feb 5 12:31:56 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: term.c,v 1.2 2010/02/05 09:42:21 roy Exp $ */ +/* $NetBSD: term.c,v 1.3 2010/02/05 12:31:56 roy Exp $ */ /* * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: term.c,v 1.2 2010/02/05 09:42:21 roy Exp $"); +__RCSID("$NetBSD: term.c,v 1.3 2010/02/05 12:31:56 roy Exp $"); #include <sys/stat.h> @@ -53,12 +53,14 @@ static int _ti_readterm(TERMINAL *term, char *cap, size_t caplen, int flags) { + uint8_t ver; uint16_t ind, num; size_t len; TERMUSERDEF *ud; - /* Only read version 1 structures */ - if (*cap++ != 1) { + ver = *cap++; + /* Only read version 1 and 2 structures */ + if (ver != 1 && ver != 2) { errno = EINVAL; return -1; } @@ -83,6 +85,18 @@ cap += sizeof(uint16_t); term->name = cap; cap += len; + if (ver == 1) + term->_alias = NULL; + else { + len = le16dec(cap); + cap += sizeof(uint16_t); + if (len == 0) + term->_alias = NULL; + else { + term->_alias = cap; + cap += len; + } + } len = le16dec(cap); cap += sizeof(uint16_t); term->desc = cap; Index: src/lib/libterminfo/term_private.h diff -u src/lib/libterminfo/term_private.h:1.2 src/lib/libterminfo/term_private.h:1.3 --- src/lib/libterminfo/term_private.h:1.2 Wed Feb 3 18:49:23 2010 +++ src/lib/libterminfo/term_private.h Fri Feb 5 12:31:56 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: term_private.h,v 1.2 2010/02/03 18:49:23 snj Exp $ */ +/* $NetBSD: term_private.h,v 1.3 2010/02/05 12:31:56 roy Exp $ */ /* * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -99,6 +99,8 @@ size_t _bufpos; /* A-Z static variables for tparm */ long _snums[26]; + /* aliases of the terminal, | separated */ + char *_alias; } TERMINAL; extern const char * _ti_database; Index: src/usr.bin/infocmp/infocmp.c diff -u src/usr.bin/infocmp/infocmp.c:1.2 src/usr.bin/infocmp/infocmp.c:1.3 --- src/usr.bin/infocmp/infocmp.c:1.2 Fri Feb 5 10:10:04 2010 +++ src/usr.bin/infocmp/infocmp.c Fri Feb 5 12:31:56 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: infocmp.c,v 1.2 2010/02/05 10:10:04 roy Exp $ */ +/* $NetBSD: infocmp.c,v 1.3 2010/02/05 12:31:56 roy Exp $ */ /* * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: infocmp.c,v 1.2 2010/02/05 10:10:04 roy Exp $"); +__RCSID("$NetBSD: infocmp.c,v 1.3 2010/02/05 12:31:56 roy Exp $"); #include <sys/ioctl.h> @@ -721,6 +721,8 @@ if (uflag == 0) printf("# Reconstructed from %s.db\n", _ti_database); printf("%s", t->name); + if (t->_alias != NULL && *t->_alias != '\0') + printf("|%s", t->_alias); if (t->desc != NULL && *t->desc != '\0') printf("|%s", t->desc); printf(",\n"); @@ -750,7 +752,7 @@ } return EXIT_SUCCESS; } - + if (Barg == NULL) unsetenv("TERMINFO"); else Index: src/usr.bin/tic/tic.c diff -u src/usr.bin/tic/tic.c:1.1 src/usr.bin/tic/tic.c:1.2 --- src/usr.bin/tic/tic.c:1.1 Wed Feb 3 15:16:32 2010 +++ src/usr.bin/tic/tic.c Fri Feb 5 12:31:56 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: tic.c,v 1.1 2010/02/03 15:16:32 roy Exp $ */ +/* $NetBSD: tic.c,v 1.2 2010/02/05 12:31:56 roy Exp $ */ /* * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: tic.c,v 1.1 2010/02/03 15:16:32 roy Exp $"); +__RCSID("$NetBSD: tic.c,v 1.2 2010/02/05 12:31:56 roy Exp $"); #include <sys/types.h> @@ -61,6 +61,7 @@ typedef struct tic { char *name; + char *alias; char *desc; TBUF flags; TBUF nums; @@ -239,7 +240,7 @@ static int save_term(DBM *db, TERM *term) { - size_t buflen, len, dlen; + size_t buflen, len, alen, dlen; char *cap; datum key, value; TIC *tic; @@ -247,12 +248,17 @@ scratch.bufpos = 0; tic = &term->tic; len = strlen(tic->name) + 1; + if (tic->alias == NULL) + alen = 0; + else + alen = strlen(tic->alias) + 1; if (tic->desc == NULL) dlen = 0; else dlen = strlen(tic->desc) + 1; buflen = sizeof(char) + sizeof(uint16_t) + len + + //sizeof(uint16_t) + alen + sizeof(uint16_t) + dlen + (sizeof(uint16_t) * 2) + tic->flags.bufpos + (sizeof(uint16_t) * 2) + tic->nums.bufpos + @@ -263,12 +269,18 @@ if (term->type == 'a') *cap++ = 0; else - *cap++ = 1; /* version */ + *cap++ = 2; /* version */ le16enc(cap, len); cap += sizeof(uint16_t); memcpy(cap, tic->name, len); cap += len; if (term->type != 'a') { + le16enc(cap, alen); + cap += sizeof(uint16_t); + if (tic->alias != NULL) { + memcpy(cap, tic->alias, alen); + cap += alen; + } le16enc(cap, dlen); cap += sizeof(uint16_t); if (tic->desc != NULL) { @@ -506,6 +518,11 @@ tic->name = strdup(name); if (tic->name == NULL) err(1, "malloc"); + if (alias != NULL) { + tic->alias = strdup(alias); + if (tic->alias == NULL) + err(1, "malloc"); + } if (desc != NULL) { tic->desc = strdup(desc); if (tic->desc == NULL)