Module Name: src Committed By: joerg Date: Sun Jun 3 23:19:11 UTC 2012
Modified Files: src/distrib/amd64/cdroms: Makefile.cdrom src/distrib/i386/cdroms: Makefile.cdrom src/distrib/sets/lists/base: mi src/distrib/sets/lists/tests: mi src/distrib/sparc64/cdroms/installcd: Makefile src/distrib/sparc64/instfs: list src/lib/libterminfo: Makefile.hash compile.c term.c term_private.h terminfo.5.in src/share/man/man7: hier.7 src/share/terminfo: Makefile src/tests/lib/libcurses: Makefile src/tests/lib/libcurses/director: director.c src/usr.bin/tic: tic.1 tic.c Log Message: Switch terminfo(3) to cdb(5). To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/distrib/amd64/cdroms/Makefile.cdrom cvs rdiff -u -r1.26 -r1.27 src/distrib/i386/cdroms/Makefile.cdrom cvs rdiff -u -r1.995 -r1.996 src/distrib/sets/lists/base/mi cvs rdiff -u -r1.471 -r1.472 src/distrib/sets/lists/tests/mi cvs rdiff -u -r1.14 -r1.15 src/distrib/sparc64/cdroms/installcd/Makefile cvs rdiff -u -r1.24 -r1.25 src/distrib/sparc64/instfs/list cvs rdiff -u -r1.4 -r1.5 src/lib/libterminfo/Makefile.hash cvs rdiff -u -r1.7 -r1.8 src/lib/libterminfo/compile.c cvs rdiff -u -r1.14 -r1.15 src/lib/libterminfo/term.c cvs rdiff -u -r1.9 -r1.10 src/lib/libterminfo/term_private.h cvs rdiff -u -r1.15 -r1.16 src/lib/libterminfo/terminfo.5.in cvs rdiff -u -r1.100 -r1.101 src/share/man/man7/hier.7 cvs rdiff -u -r1.2 -r1.3 src/share/terminfo/Makefile cvs rdiff -u -r1.2 -r1.3 src/tests/lib/libcurses/Makefile cvs rdiff -u -r1.9 -r1.10 src/tests/lib/libcurses/director/director.c cvs rdiff -u -r1.9 -r1.10 src/usr.bin/tic/tic.1 cvs rdiff -u -r1.19 -r1.20 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/distrib/amd64/cdroms/Makefile.cdrom diff -u src/distrib/amd64/cdroms/Makefile.cdrom:1.6 src/distrib/amd64/cdroms/Makefile.cdrom:1.7 --- src/distrib/amd64/cdroms/Makefile.cdrom:1.6 Tue Jun 21 21:49:22 2011 +++ src/distrib/amd64/cdroms/Makefile.cdrom Sun Jun 3 23:19:09 2012 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.cdrom,v 1.6 2011/06/21 21:49:22 joerg Exp $ +# $NetBSD: Makefile.cdrom,v 1.7 2012/06/03 23:19:09 joerg Exp $ .include <bsd.own.mk> @@ -53,7 +53,7 @@ CDRUNTIME+= ./usr/mdec CDRUNTIME+= ./usr/sbin/chroot CDRUNTIME+= ./usr/sbin/installboot CDRUNTIME+= ./usr/sbin/wiconfig -CDRUNTIME+= ./usr/share/misc/terminfo.db +CDRUNTIME+= ./usr/share/misc/terminfo.cdb CDRUNTIME+= ./usr/share/locale image_md_pre: Index: src/distrib/i386/cdroms/Makefile.cdrom diff -u src/distrib/i386/cdroms/Makefile.cdrom:1.26 src/distrib/i386/cdroms/Makefile.cdrom:1.27 --- src/distrib/i386/cdroms/Makefile.cdrom:1.26 Tue Jun 21 21:49:23 2011 +++ src/distrib/i386/cdroms/Makefile.cdrom Sun Jun 3 23:19:09 2012 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.cdrom,v 1.26 2011/06/21 21:49:23 joerg Exp $ +# $NetBSD: Makefile.cdrom,v 1.27 2012/06/03 23:19:09 joerg Exp $ .include <bsd.own.mk> @@ -53,7 +53,7 @@ CDRUNTIME+= ./usr/mdec CDRUNTIME+= ./usr/sbin/chroot CDRUNTIME+= ./usr/sbin/installboot CDRUNTIME+= ./usr/sbin/wiconfig -CDRUNTIME+= ./usr/share/misc/terminfo.db +CDRUNTIME+= ./usr/share/misc/terminfo.cdb CDRUNTIME+= ./usr/share/locale image_md_pre: Index: src/distrib/sets/lists/base/mi diff -u src/distrib/sets/lists/base/mi:1.995 src/distrib/sets/lists/base/mi:1.996 --- src/distrib/sets/lists/base/mi:1.995 Fri Jun 1 13:19:38 2012 +++ src/distrib/sets/lists/base/mi Sun Jun 3 23:19:09 2012 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.995 2012/06/01 13:19:38 nonaka Exp $ +# $NetBSD: mi,v 1.996 2012/06/03 23:19:09 joerg Exp $ # # Note: Don't delete entries from here - mark them as "obsolete" instead, # unless otherwise stated below. @@ -3773,7 +3773,8 @@ ./usr/share/misc/more.help base-obsolete obsolete ./usr/share/misc/nslookup.help base-obsolete obsolete ./usr/share/misc/terminfo base-terminfo-share share -./usr/share/misc/terminfo.db base-terminfo-share share +./usr/share/misc/terminfo.cdb base-terminfo-share share +./usr/share/misc/terminfo.db base-obsolete obsolete ./usr/share/misc/units.lib base-reference-share share ./usr/share/misc/usb_hid_usages base-reference-share share ./usr/share/misc/vgrindefs.db base-groff-share share Index: src/distrib/sets/lists/tests/mi diff -u src/distrib/sets/lists/tests/mi:1.471 src/distrib/sets/lists/tests/mi:1.472 --- src/distrib/sets/lists/tests/mi:1.471 Fri Jun 1 10:52:38 2012 +++ src/distrib/sets/lists/tests/mi Sun Jun 3 23:19:10 2012 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.471 2012/06/01 10:52:38 skrll Exp $ +# $NetBSD: mi,v 1.472 2012/06/03 23:19:10 joerg Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -2510,7 +2510,8 @@ ./usr/tests/lib/libcrypt/t_crypt tests-lib-tests ./usr/tests/lib/libcurses tests-lib-tests ./usr/tests/lib/libcurses/.terminfo.db tests-obsolete obsolete -./usr/tests/lib/libcurses/terminfo.db tests-lib-tests atf +./usr/tests/lib/libcurses/terminfo.cdb tests-lib-tests atf +./usr/tests/lib/libcurses/terminfo.db tests-obsolete obsolete ./usr/tests/lib/libcurses/Atffile tests-lib-tests atf ./usr/tests/lib/libcurses/check_files tests-lib-tests ./usr/tests/lib/libcurses/check_files/addch.chk tests-lib-tests atf Index: src/distrib/sparc64/cdroms/installcd/Makefile diff -u src/distrib/sparc64/cdroms/installcd/Makefile:1.14 src/distrib/sparc64/cdroms/installcd/Makefile:1.15 --- src/distrib/sparc64/cdroms/installcd/Makefile:1.14 Sun Jan 15 22:34:34 2012 +++ src/distrib/sparc64/cdroms/installcd/Makefile Sun Jun 3 23:19:10 2012 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.14 2012/01/15 22:34:34 jmcneill Exp $ +# $NetBSD: Makefile,v 1.15 2012/06/03 23:19:10 joerg Exp $ CDBASE= sparc64cd # gives ${CDBASE}.iso CDRELEASE= true # include $RELEASEDIR/$MACHINE @@ -56,7 +56,7 @@ CDRUNTIME+= ./usr/sbin/chroot CDRUNTIME+= ./usr/sbin/installboot CDRUNTIME+= ./usr/sbin/pppd CDRUNTIME+= ./usr/sbin/wiconfig -CDRUNTIME+= ./usr/share/misc/terminfo.db +CDRUNTIME+= ./usr/share/misc/terminfo.cdb CDRUNTIME+= ./usr/share/locale image_md_pre: Index: src/distrib/sparc64/instfs/list diff -u src/distrib/sparc64/instfs/list:1.24 src/distrib/sparc64/instfs/list:1.25 --- src/distrib/sparc64/instfs/list:1.24 Sun Jul 3 23:11:34 2011 +++ src/distrib/sparc64/instfs/list Sun Jun 3 23:19:10 2012 @@ -1,4 +1,4 @@ -# $NetBSD: list,v 1.24 2011/07/03 23:11:34 tron Exp $ +# $NetBSD: list,v 1.25 2012/06/03 23:19:10 joerg Exp $ SRCDIRS bin sbin libexec external/bsd/less/bin usr.bin usr.sbin @@ -85,7 +85,7 @@ COPY ${NETBSDSRCDIR}/etc/master.passwd e COPY ${NETBSDSRCDIR}/etc/netconfig etc/netconfig COPY ${DISTRIBDIR}/common/protocols etc/protocols COPY ${DISTRIBDIR}/common/services etc/services -COPY ${DESTDIR}/usr/share/misc/terminfo.db usr/share/misc/terminfo.db +COPY ${DESTDIR}/usr/share/misc/terminfo.cdb usr/share/misc/terminfo.cdb # we need the boot block in /usr/mdec + the arch specific extras COPY ${DESTDIR}/usr/mdec/binstall usr/mdec/binstall 555 Index: src/lib/libterminfo/Makefile.hash diff -u src/lib/libterminfo/Makefile.hash:1.4 src/lib/libterminfo/Makefile.hash:1.5 --- src/lib/libterminfo/Makefile.hash:1.4 Thu Nov 3 07:19:39 2011 +++ src/lib/libterminfo/Makefile.hash Sun Jun 3 23:19:10 2012 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.hash,v 1.4 2011/11/03 07:19:39 joerg Exp $ +# $NetBSD: Makefile.hash,v 1.5 2012/06/03 23:19:10 joerg Exp $ SCRIPT_ENV= \ TOOL_AWK=${TOOL_AWK:Q} \ @@ -22,6 +22,8 @@ compiled_terms.c: genterms term.h ${NETB @echo "Generating compiled terminfo descriptions" ${SCRIPT_ENV} ${HOST_SH} ${.ALLSRC} > ${.TARGET} +compiled_terms.c: ${TOOL_TIC} + DPSRCS+= hash.c termcap_hash.c compiled_terms.c CLEANFILES+= hash.c termcap_hash.c compiled_terms.c Index: src/lib/libterminfo/compile.c diff -u src/lib/libterminfo/compile.c:1.7 src/lib/libterminfo/compile.c:1.8 --- src/lib/libterminfo/compile.c:1.7 Fri Jun 1 12:08:40 2012 +++ src/lib/libterminfo/compile.c Sun Jun 3 23:19:10 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: compile.c,v 1.7 2012/06/01 12:08:40 joerg Exp $ */ +/* $NetBSD: compile.c,v 1.8 2012/06/03 23:19:10 joerg Exp $ */ /* * Copyright (c) 2009, 2010, 2011 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: compile.c,v 1.7 2012/06/01 12:08:40 joerg Exp $"); +__RCSID("$NetBSD: compile.c,v 1.8 2012/06/03 23:19:10 joerg Exp $"); #if !HAVE_NBTOOL_CONFIG_H || HAVE_SYS_ENDIAN_H #include <sys/endian.h> @@ -239,12 +239,7 @@ _ti_flatten(uint8_t **buf, const TIC *ti return -1; cap = *buf; - if (alen == 0 && dlen == 0 && tic->flags.bufpos == 0 && - tic->nums.bufpos == 0 && tic->strs.bufpos == 0 && - tic->extras.bufpos == 0) - *cap++ = 0; /* alias */ - else - *cap++ = 2; /* version */ + *cap++ = 1; le16enc(cap, len); cap += sizeof(uint16_t); memcpy(cap, tic->name, len); Index: src/lib/libterminfo/term.c diff -u src/lib/libterminfo/term.c:1.14 src/lib/libterminfo/term.c:1.15 --- src/lib/libterminfo/term.c:1.14 Fri Jun 1 12:02:36 2012 +++ src/lib/libterminfo/term.c Sun Jun 3 23:19:10 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: term.c,v 1.14 2012/06/01 12:02:36 joerg Exp $ */ +/* $NetBSD: term.c,v 1.15 2012/06/03 23:19:10 joerg Exp $ */ /* * Copyright (c) 2009, 2010, 2011 The NetBSD Foundation, Inc. @@ -28,16 +28,16 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: term.c,v 1.14 2012/06/01 12:02:36 joerg Exp $"); +__RCSID("$NetBSD: term.c,v 1.15 2012/06/03 23:19:10 joerg Exp $"); #include <sys/stat.h> #include <assert.h> +#include <cdbr.h> #include <ctype.h> #include <errno.h> #include <fcntl.h> #include <limits.h> -#include <ndbm.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -62,8 +62,8 @@ _ti_readterm(TERMINAL *term, const char TERMUSERDEF *ud; ver = *cap++; - /* Only read version 1 and 2 structures */ - if (ver != 1 && ver != 2) { + /* Only read version 1 structures */ + if (ver != 1) { errno = EINVAL; return -1; } @@ -89,17 +89,13 @@ _ti_readterm(TERMINAL *term, const char cap += sizeof(uint16_t); term->name = cap; cap += len; - if (ver == 1) + len = le16dec(cap); + cap += sizeof(uint16_t); + if (len == 0) term->_alias = NULL; else { - len = le16dec(cap); - cap += sizeof(uint16_t); - if (len == 0) - term->_alias = NULL; - else { - term->_alias = cap; - cap += len; - } + term->_alias = cap; + cap += len; } len = le16dec(cap); cap += sizeof(uint16_t); @@ -215,41 +211,55 @@ _ti_readterm(TERMINAL *term, const char static int _ti_dbgetterm(TERMINAL *term, const char *path, const char *name, int flags) { - DBM *db; - datum dt; - char *p; + struct cdbr *db; + const void *data; + char *db_name; + const uint8_t *data8; + size_t len, klen; int r; - db = dbm_open(path, O_RDONLY, 0644); + if (asprintf(&db_name, "%s.cdb", path) < 0) + return -1; + + db = cdbr_open(db_name, CDBR_DEFAULT); + free(db_name); if (db == NULL) return -1; + + klen = strlen(name) + 1; + if (cdbr_find(db, name, klen, &data, &len) == -1) + goto fail; + data8 = data; + if (len == 0) + goto fail; + /* Check for alias first, fall through to processing normal entries. */ + if (data8[0] == 2) { + if (klen + 7 >= len || le16dec(data8 + 5) != klen) + goto fail; + if (memcmp(data8 + 7, name, klen)) + goto fail; + if (cdbr_get(db, le32dec(data8 + 1), &data, &len)) + goto fail; + data8 = data; + if (data8[0] != 1) + goto fail; + } else if (data8[0] != 1) + goto fail; + else if (klen + 3 >= len || le16dec(data8 + 1) != klen) + goto fail; + else if (memcmp(data8 + 3, name, klen)) + goto fail; + strlcpy(database, path, sizeof(database)); _ti_database = database; - dt.dptr = (void *)__UNCONST(name); - dt.dsize = strlen(name); - dt = dbm_fetch(db, dt); - if (dt.dptr == NULL) { - dbm_close(db); - return 0; - } - for (;;) { - p = (char *)dt.dptr; - if (*p++ != 0) /* not alias */ - break; - dt.dsize = le16dec(p) - 1; - p += sizeof(uint16_t); - dt.dptr = p; - dt = dbm_fetch(db, dt); - if (dt.dptr == NULL) { - dbm_close(db); - return 0; - } - } - - r = _ti_readterm(term, (char *)dt.dptr, dt.dsize, flags); - dbm_close(db); + r = _ti_readterm(term, data, len, flags); + cdbr_close(db); return r; + + fail: + cdbr_close(db); + return 0; } static int Index: src/lib/libterminfo/term_private.h diff -u src/lib/libterminfo/term_private.h:1.9 src/lib/libterminfo/term_private.h:1.10 --- src/lib/libterminfo/term_private.h:1.9 Mon Oct 3 19:18:55 2011 +++ src/lib/libterminfo/term_private.h Sun Jun 3 23:19:10 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: term_private.h,v 1.9 2011/10/03 19:18:55 roy Exp $ */ +/* $NetBSD: term_private.h,v 1.10 2012/06/03 23:19:10 joerg Exp $ */ /* * Copyright (c) 2009, 2010 The NetBSD Foundation, Inc. @@ -42,15 +42,22 @@ * including the null terminator. * The largest capability block we can handle is 65535 bytes. * This means that we exceed the current terminfo defined limits. - * The header is version (char), name. - * version 0 is an alias, and the name refers to the real terminfo. - * version 1 capabilities are defined as so: + * + * Version 1 capabilities are defined as: + * header byte (always 1) + * name * description, * cap length, num flags, index, char, * cap length, num numbers, index, number, * cap length, num strings, index, string, - * cap lelngth, num undefined caps, name, type (char), flag, number, string - * The database itself is created using ndbm(3) and the numbers are + * cap length, num undefined caps, name, type (char), flag, number, string + * + * Version 2 entries are aliases and defined as: + * header byte (always 2) + * 32bit id of the corresponding terminal in the file + * name + * + * The database itself is created using cdbw(3) and the numbers are * always stored as little endian. */ Index: src/lib/libterminfo/terminfo.5.in diff -u src/lib/libterminfo/terminfo.5.in:1.15 src/lib/libterminfo/terminfo.5.in:1.16 --- src/lib/libterminfo/terminfo.5.in:1.15 Thu Mar 10 10:17:19 2011 +++ src/lib/libterminfo/terminfo.5.in Sun Jun 3 23:19:10 2012 @@ -1,4 +1,4 @@ -.\" $NetBSD: terminfo.5.in,v 1.15 2011/03/10 10:17:19 roy Exp $ +.\" $NetBSD: terminfo.5.in,v 1.16 2012/06/03 23:19:10 joerg Exp $ .\" .\" Copyright (c) 2009, 2010, 2011 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -195,10 +195,10 @@ hts=\eEH, ht=^I, .Ed .Ss Fetching Compiled Descriptions This implementation uses hashed databases managed by -.Xr ndbm 3 +.Xr cdb 5 instead of directories. To maintain compatability with other implementations, -.Pa .db +.Pa .cdb is appended to each file checked. .Pp If the environment variable @@ -237,12 +237,12 @@ If a matching description is not found t searched, which currently holds descriptions for ansi, dumb, vt100, vt220, wsvt25, and xterm. .Sh FILES -.Bl -tag -width /usr/share/misc/terminfo.db -compact -.It Pa $HOME/.terminfo.db +.Bl -tag -width /usr/share/misc/terminfo.cdb -compact +.It Pa $HOME/.terminfo.cdb Database of terminal descriptions for personal use. .It Pa /usr/share/misc/terminfo File containing terminal descriptions. -.It Pa /usr/share/misc/terminfo.db +.It Pa /usr/share/misc/terminfo.cdb Database of terminal descriptions. .El .Sh SEE ALSO @@ -250,7 +250,7 @@ Database of terminal descriptions. .Xr tic 1 , .Xr tput 1 , .Xr curses 3 , -.Xr ndbm 3 +.Xr cdb 5 .Sh STANDARDS .Nm complies with the Index: src/share/man/man7/hier.7 diff -u src/share/man/man7/hier.7:1.100 src/share/man/man7/hier.7:1.101 --- src/share/man/man7/hier.7:1.100 Sat Apr 21 12:27:29 2012 +++ src/share/man/man7/hier.7 Sun Jun 3 23:19:10 2012 @@ -1,4 +1,4 @@ -.\" $NetBSD: hier.7,v 1.100 2012/04/21 12:27:29 roy Exp $ +.\" $NetBSD: hier.7,v 1.101 2012/06/03 23:19:10 joerg Exp $ .\" .\" Copyright (c) 1990, 1993, 1994 .\" The Regents of the University of California. All rights reserved. @@ -29,7 +29,7 @@ .\" .\" @(#)hier.7 8.5 (Berkeley) 6/1/94 .\" -.Dd April 5, 2012 +.Dd June 3, 2012 .Dt HIER 7 .Os .Sh NAME @@ -569,12 +569,12 @@ macro package .It Sy misc/ miscellaneous system-wide text files .Pp -.Bl -tag -width "terminfo.db" -compact +.Bl -tag -width "terminfo.cdb" -compact .It Sy terminfo terminal characteristics database; see .Xr terminfo 5 -.It Sy terminfo.db +.It Sy terminfo.cdb database form of terminfo file; see .Xr tic 1 .El Index: src/share/terminfo/Makefile diff -u src/share/terminfo/Makefile:1.2 src/share/terminfo/Makefile:1.3 --- src/share/terminfo/Makefile:1.2 Fri Feb 5 16:34:04 2010 +++ src/share/terminfo/Makefile Sun Jun 3 23:19:11 2012 @@ -1,13 +1,13 @@ -# $NetBSD: Makefile,v 1.2 2010/02/05 16:34:04 roy Exp $ +# $NetBSD: Makefile,v 1.3 2012/06/03 23:19:11 joerg Exp $ # from: @(#)Makefile 8.1 (Berkeley) 6/8/93 -CLEANFILES= terminfo.db -realall: terminfo.db -FILES=terminfo.db terminfo +CLEANFILES= terminfo.cdb +realall: terminfo.cdb +FILES=terminfo.cdb terminfo FILESDIR=${BINDIR}/misc -terminfo.db: terminfo +terminfo.cdb: terminfo ${TOOL_TIC} ${_MKTARGET_CREATE} - ${TOOL_TIC} -ax -o "${.OBJDIR}/terminfo" "${.CURDIR}/terminfo" + ${TOOL_TIC} -ax -o ${.TARGET} "${.CURDIR}/terminfo" .include <bsd.prog.mk> Index: src/tests/lib/libcurses/Makefile diff -u src/tests/lib/libcurses/Makefile:1.2 src/tests/lib/libcurses/Makefile:1.3 --- src/tests/lib/libcurses/Makefile:1.2 Fri Jun 17 16:59:51 2011 +++ src/tests/lib/libcurses/Makefile Sun Jun 3 23:19:11 2012 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.2 2011/06/17 16:59:51 christos Exp $ +# $NetBSD: Makefile,v 1.3 2012/06/03 23:19:11 joerg Exp $ NOMAN= # defined @@ -13,18 +13,18 @@ TERMINFO_DB= terminfo TERMINFODIR= ${TESTSDIR} FILESDIR= ${TESTSDIR} -FILES= ${TERMINFO_DB}.db +FILES= ${TERMINFO_DB}.cdb TESTS_SH= t_curses HOME= ${TESTDIR} -CLEANFILES+= ${TERMINFO_DB}.db +CLEANFILES+= ${TERMINFO_DB}.cdb -realall: ${TERMINFO_DB}.db +realall: ${TERMINFO_DB}.cdb -${TERMINFO_DB}.db: ${TEST_TERMINFO} - ${TOOL_TIC} -o ${TERMINFO_DB} ${.CURDIR}/${TEST_TERMINFO} +${TERMINFO_DB}.cdb: ${TOOL_TIC} ${TEST_TERMINFO} + ${TOOL_TIC} -o ${.TARGET} ${.CURDIR}/${TEST_TERMINFO} .include <bsd.test.mk> #.include <bsd.subdir.mk> Index: src/tests/lib/libcurses/director/director.c diff -u src/tests/lib/libcurses/director/director.c:1.9 src/tests/lib/libcurses/director/director.c:1.10 --- src/tests/lib/libcurses/director/director.c:1.9 Fri Oct 7 13:39:33 2011 +++ src/tests/lib/libcurses/director/director.c Sun Jun 3 23:19:11 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: director.c,v 1.9 2011/10/07 13:39:33 joerg Exp $ */ +/* $NetBSD: director.c,v 1.10 2012/06/03 23:19:11 joerg Exp $ */ /*- * Copyright 2009 Brett Lymn <bl...@netbsd.org> @@ -103,7 +103,7 @@ usage(void) "commandfile\n", getprogname()); fprintf(stderr, " where:\n"); fprintf(stderr, " -v enables verbose test output\n"); - fprintf(stderr, " -T is a directory containing the terminfo.db " + fprintf(stderr, " -T is a directory containing the terminfo.cdb " "file, or a file holding the terminfo description n"); fprintf(stderr, " -s is the path to the slave executable\n"); fprintf(stderr, " -t is value to set TERM to for the test\n"); @@ -200,11 +200,11 @@ main(int argc, char *argv[]) if (S_ISDIR(st.st_mode)) { char tinfo[MAXPATHLEN]; int l = snprintf(tinfo, sizeof(tinfo), "%s/%s", termpath, - "terminfo.db"); + "terminfo.cdb"); if (stat(tinfo, &st) == -1) err(1, "Cannot stat `%s'", tinfo); - if (l >= 3) - tinfo[l - 3] = '\0'; + if (l >= 4) + tinfo[l - 4] = '\0'; if (setenv("TERMINFO", tinfo, 1) != 0) err(1, "Failed to set TERMINFO variable"); } else { Index: src/usr.bin/tic/tic.1 diff -u src/usr.bin/tic/tic.1:1.9 src/usr.bin/tic/tic.1:1.10 --- src/usr.bin/tic/tic.1:1.9 Wed Nov 2 19:21:49 2011 +++ src/usr.bin/tic/tic.1 Sun Jun 3 23:19:11 2012 @@ -1,4 +1,4 @@ -.\" $NetBSD: tic.1,v 1.9 2011/11/02 19:21:49 pgoyette Exp $ +.\" $NetBSD: tic.1,v 1.10 2012/06/03 23:19:11 joerg Exp $ .\" .\" Copyright (c) 2009, 2010 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -27,7 +27,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd February 11, 2010 +.Dd June 3, 2012 .Dt TIC 1 .Os .Sh NAME @@ -45,7 +45,7 @@ The utility compiles .Xr terminfo 5 source into a database for use by other programs. -The created database path name is the same as the source but with .db appended. +The created database path name is the same as the source but with .cdb appended. .Pp The following options are available: .Bl -tag -width Fl @@ -55,9 +55,9 @@ Do not discard commented out capabilitie Only check for errors, don't write the final database. .It Fl o Ar file Write the database to -.Ar file Ns .db +.Ar file instead of -.Ar source Ns .db . +.Ar source Ns .cdb . .It Fl S For .Ar term1 , term2 , ... Index: src/usr.bin/tic/tic.c diff -u src/usr.bin/tic/tic.c:1.19 src/usr.bin/tic/tic.c:1.20 --- src/usr.bin/tic/tic.c:1.19 Fri Jun 1 12:08:40 2012 +++ src/usr.bin/tic/tic.c Sun Jun 3 23:19:11 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: tic.c,v 1.19 2012/06/01 12:08:40 joerg Exp $ */ +/* $NetBSD: tic.c,v 1.20 2012/06/03 23:19:11 joerg Exp $ */ /* * Copyright (c) 2009, 2010 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: tic.c,v 1.19 2012/06/01 12:08:40 joerg Exp $"); +__RCSID("$NetBSD: tic.c,v 1.20 2012/06/03 23:19:11 joerg Exp $"); #include <sys/types.h> #include <sys/queue.h> @@ -41,13 +41,13 @@ __RCSID("$NetBSD: tic.c,v 1.19 2012/06/0 #include <sys/endian.h> #endif +#include <cdbw.h> #include <ctype.h> #include <err.h> #include <errno.h> #include <getopt.h> #include <limits.h> #include <fcntl.h> -#include <ndbm.h> #include <search.h> #include <stdarg.h> #include <stdlib.h> @@ -63,26 +63,18 @@ __RCSID("$NetBSD: tic.c,v 1.19 2012/06/0 through the database as the sequential iterator doesn't work the the data size stored changes N amount which ours will. */ typedef struct term { - SLIST_ENTRY(term) next; + STAILQ_ENTRY(term) next; char *name; - char type; TIC *tic; + uint32_t id; + struct term *base_term; } TERM; -static SLIST_HEAD(, term) terms = SLIST_HEAD_INITIALIZER(terms); +static STAILQ_HEAD(, term) terms = STAILQ_HEAD_INITIALIZER(terms); static int error_exit; static int Sflag; -static char *dbname; static size_t nterm, nalias; -static void -do_unlink(void) -{ - - if (dbname != NULL) - unlink(dbname); -} - static void __printflike(1, 2) dowarn(const char *fmt, ...) { @@ -106,22 +98,32 @@ grow_tbuf(TBUF *tbuf, size_t len) } static int -save_term(DBM *db, TERM *term) +save_term(struct cdbw *db, TERM *term) { uint8_t *buf; ssize_t len; - datum key, value; + size_t slen = strlen(term->name) + 1; + + if (term->base_term != NULL) { + len = (ssize_t)slen + 7; + buf = emalloc(len); + buf[0] = 2; + le32enc(buf + 1, term->base_term->id); + le16enc(buf + 5, slen); + memcpy(buf + 7, term->name, slen); + if (cdbw_put(db, term->name, slen, buf, len)) + err(1, "cdbw_put"); + return 0; + } len = _ti_flatten(&buf, term->tic); if (len == -1) return -1; - key.dptr = term->name; - key.dsize = strlen(term->name); - value.dptr = buf; - value.dsize = len; - if (dbm_store(db, key, value, DBM_REPLACE) == -1) - err(1, "dbm_store"); + if (cdbw_put_data(db, buf, len, &term->id)) + err(1, "cdbw_put_data"); + if (cdbw_put_key(db, term->name, slen, term->id)) + err(1, "cdbw_put_key"); free(buf); return 0; } @@ -138,20 +140,20 @@ find_term(const char *name) } static TERM * -store_term(const char *name, char type) +store_term(const char *name, TERM *base_term) { TERM *term; ENTRY elem; term = ecalloc(1, sizeof(*term)); term->name = estrdup(name); - term->type = type; - SLIST_INSERT_HEAD(&terms, term, next); + STAILQ_INSERT_TAIL(&terms, term, next); elem.key = estrdup(name); elem.data = term; hsearch(elem, ENTER); - if (type == 'a') + term->base_term = base_term; + if (base_term != NULL) nalias++; else nterm++; @@ -185,7 +187,7 @@ process_entry(TBUF *buf, int flags) _ti_freetic(tic); return 0; } - term = store_term(tic->name, 't'); + term = store_term(tic->name, NULL); term->tic = tic; /* Create aliased terms */ @@ -199,9 +201,7 @@ process_entry(TBUF *buf, int flags) dowarn("%s: has alias for already assigned" " term %s", tic->name, p); } else { - term = store_term(p, 'a'); - term->tic = ecalloc(sizeof(*term->tic), 1); - term->tic->name = estrdup(tic->name); + store_term(p, term); } p = e; } @@ -319,8 +319,8 @@ merge_use(int flags) TERM *term, *uterm;; skipped = merged = 0; - SLIST_FOREACH(term, &terms, next) { - if (term->type == 'a') + STAILQ_FOREACH(term, &terms, next) { + if (term->base_term != NULL) continue; rtic = term->tic; while ((cap = _ti_find_extra(&rtic->extras, "use")) != NULL) { @@ -334,8 +334,8 @@ merge_use(int flags) goto remove; } uterm = find_term(cap); - if (uterm != NULL && uterm->type == 'a') - uterm = find_term(uterm->tic->name); + if (uterm != NULL && uterm->base_term != NULL) + uterm = uterm->base_term; if (uterm == NULL) { dowarn("%s: no use record for %s", rtic->name, cap); @@ -403,7 +403,7 @@ print_dump(int argc, char **argv) warnx("%s: no description for terminal", argv[i]); continue; } - if (term->type == 'a') { + if (term->base_term != NULL) { warnx("%s: cannot dump alias", argv[i]); continue; } @@ -444,17 +444,46 @@ print_dump(int argc, char **argv) return n; } +static void +write_database(const char *dbname) +{ + struct cdbw *db; + char *tmp_dbname; + TERM *term; + int fd; + + db = cdbw_open(); + if (db == NULL) + err(1, "cdbw_open failed"); + /* Save the terms */ + STAILQ_FOREACH(term, &terms, next) + save_term(db, term); + + easprintf(&tmp_dbname, "%s.XXXXXX", dbname); + fd = mkstemp(tmp_dbname); + if (fd == -1) + err(1, "creating temporary database %s failed", tmp_dbname); + if (cdbw_output(db, fd, "NetBSD terminfo", cdbw_stable_seeder)) + err(1, "writing temporary database %s failed", tmp_dbname); + if (fchmod(fd, DEFFILEMODE)) + err(1, "fchmod failed"); + if (close(fd)) + err(1, "writing temporary database %s failed", tmp_dbname); + if (rename(tmp_dbname, dbname)) + err(1, "renaming %s to %s failed", tmp_dbname, dbname); + free(tmp_dbname); + cdbw_close(db); +} + int main(int argc, char **argv) { int ch, cflag, sflag, flags; - char *source, *p, *buf, *ofile; + char *source, *dbname, *buf, *ofile; FILE *f; - DBM *db; size_t buflen; ssize_t len; TBUF tbuf; - TERM *term; cflag = sflag = 0; ofile = NULL; @@ -495,23 +524,6 @@ main(int argc, char **argv) f = fopen(source, "r"); if (f == NULL) err(1, "fopen: %s", source); - if (!cflag && !Sflag) { - if (ofile == NULL) - ofile = source; - len = strlen(ofile) + 9; - dbname = emalloc(len + 4); /* For adding .db after open */ - snprintf(dbname, len, "%s.tmp", ofile); - db = dbm_open(dbname, O_CREAT | O_RDWR | O_TRUNC, DEFFILEMODE); - if (db == NULL) - err(1, "dbopen: %s", source); - p = dbname + strlen(dbname); - *p++ = '.'; - *p++ = 'd'; - *p++ = 'b'; - *p++ = '\0'; - atexit(do_unlink); - } else - db = NULL; /* satisfy gcc warning */ hcreate(HASH_SIZE); @@ -557,28 +569,21 @@ main(int argc, char **argv) if (cflag) return error_exit; - /* Save the terms */ - SLIST_FOREACH(term, &terms, next) - save_term(db, term); - - /* done! */ - dbm_close(db); - - /* Rename the tmp db to the real one now */ - easprintf(&p, "%s.db", ofile); - if (rename(dbname, p) == -1) - err(1, "rename"); - free(dbname); - dbname = NULL; + if (ofile == NULL) + easprintf(&dbname, "%s.cdb", source); + else + dbname = ofile; + write_database(dbname); if (sflag != 0) fprintf(stderr, "%zu entries and %zu aliases written to %s\n", - nterm, nalias, p); + nterm, nalias, dbname); #ifdef __VALGRIND__ - free(p); - while ((term = SLIST_FIRST(&terms)) != NULL) { - SLIST_REMOVE_HEAD(&terms, next); + if (ofile == NULL) + free(dbname); + while ((term = STAILQ_FIRST(&terms)) != NULL) { + STAILQ_REMOVE_HEAD(&terms, next); _ti_freetic(term->tic); free(term->name); free(term);