]> ncurses.scripts.mit.edu Git - ncurses.git/commitdiff
ncurses 5.9 - patch 20120204
authorThomas E. Dickey <dickey@invisible-island.net>
Sun, 5 Feb 2012 01:59:13 +0000 (01:59 +0000)
committerThomas E. Dickey <dickey@invisible-island.net>
Sun, 5 Feb 2012 01:59:13 +0000 (01:59 +0000)
+ improved tic -D option, avoid making target directory and provide
  better diagnostics.

NEWS
dist.mk
man/tic.1m
progs/tic.c
test/movewindow.c

diff --git a/NEWS b/NEWS
index 810327f232876f376e8218394af28e47b42ba5b1..4518a4c46e6692a023943c137bf36c4181e03185 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -25,7 +25,7 @@
 -- sale, use or other dealings in this Software without prior written        --
 -- authorization.                                                            --
 -------------------------------------------------------------------------------
 -- sale, use or other dealings in this Software without prior written        --
 -- authorization.                                                            --
 -------------------------------------------------------------------------------
--- $Id: NEWS,v 1.1853 2012/01/29 01:47:05 tom Exp $
+-- $Id: NEWS,v 1.1854 2012/02/04 22:25:57 tom Exp $
 -------------------------------------------------------------------------------
 
 This is a log of changes that ncurses has gone through since Zeyd started
 -------------------------------------------------------------------------------
 
 This is a log of changes that ncurses has gone through since Zeyd started
@@ -45,6 +45,10 @@ See the AUTHORS file for the corresponding full names.
 Changes through 1.9.9e did not credit all contributions;
 it is not possible to add this information.
 
 Changes through 1.9.9e did not credit all contributions;
 it is not possible to add this information.
 
+20120204
+       + improved tic -D option, avoid making target directory and provide
+         better diagnostics.
+
 20120128
        + add mach-gnu (Debian #614316, patch by Samuel Thibault)
        + add mach-gnu-color, tweaks to mach-gnu terminfo -TD
 20120128
        + add mach-gnu (Debian #614316, patch by Samuel Thibault)
        + add mach-gnu-color, tweaks to mach-gnu terminfo -TD
@@ -58,7 +62,7 @@ it is not possible to add this information.
        + amend fix intended to separate fixups for acsc to allow "tic -cv" to
          give verbose warnings (cf:  20110730). 
        + modify misc/gen-edit.sh to make the location of the tabset directory
        + amend fix intended to separate fixups for acsc to allow "tic -cv" to
          give verbose warnings (cf:  20110730). 
        + modify misc/gen-edit.sh to make the location of the tabset directory
-         consistent with misc/Makefile.in, i.., using ${datadir}/tabset
+         consistent with misc/Makefile.in, i.e., using ${datadir}/tabset
          (Debian #653435, patch by Sven Joachim).
 
 20120121
          (Debian #653435, patch by Sven Joachim).
 
 20120121
diff --git a/dist.mk b/dist.mk
index 5fcec1b555b5529b4799fc904f7e9b8ad2e2ccb1..a4bc0b5435e02a9e65f7ef4289a1da401b7cb861 100644 (file)
--- a/dist.mk
+++ b/dist.mk
@@ -25,7 +25,7 @@
 # use or other dealings in this Software without prior written               #
 # authorization.                                                             #
 ##############################################################################
 # use or other dealings in this Software without prior written               #
 # authorization.                                                             #
 ##############################################################################
-# $Id: dist.mk,v 1.855 2012/01/28 15:26:26 tom Exp $
+# $Id: dist.mk,v 1.856 2012/02/04 16:54:39 tom Exp $
 # Makefile for creating ncurses distributions.
 #
 # This only needs to be used directly as a makefile by developers, but
 # Makefile for creating ncurses distributions.
 #
 # This only needs to be used directly as a makefile by developers, but
@@ -37,7 +37,7 @@ SHELL = /bin/sh
 # These define the major/minor/patch versions of ncurses.
 NCURSES_MAJOR = 5
 NCURSES_MINOR = 9
 # These define the major/minor/patch versions of ncurses.
 NCURSES_MAJOR = 5
 NCURSES_MINOR = 9
-NCURSES_PATCH = 20120128
+NCURSES_PATCH = 20120204
 
 # We don't append the patch to the version, since this only applies to releases
 VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)
 
 # We don't append the patch to the version, since this only applies to releases
 VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)
index 57c9b8a182ee174d3f0743d3a0b8e0188c308ad9..580abf40ee9b4885c4ff88fa63bd076208512a6c 100644 (file)
@@ -1,5 +1,5 @@
 .\"***************************************************************************
 .\"***************************************************************************
-.\" Copyright (c) 1998-2010,2011 Free Software Foundation, Inc.              *
+.\" Copyright (c) 1998-2011,2012 Free Software Foundation, Inc.              *
 .\"                                                                          *
 .\" Permission is hereby granted, free of charge, to any person obtaining a  *
 .\" copy of this software and associated documentation files (the            *
 .\"                                                                          *
 .\" Permission is hereby granted, free of charge, to any person obtaining a  *
 .\" copy of this software and associated documentation files (the            *
@@ -26,7 +26,7 @@
 .\" authorization.                                                           *
 .\"***************************************************************************
 .\"
 .\" authorization.                                                           *
 .\"***************************************************************************
 .\"
-.\" $Id: tic.1m,v 1.53 2011/12/17 23:13:19 tom Exp $
+.\" $Id: tic.1m,v 1.54 2012/02/04 23:09:43 tom Exp $
 .TH @TIC@ 1M ""
 .ds n 5
 .ds d @TERMINFO@
 .TH @TIC@ 1M ""
 .ds n 5
 .ds d @TERMINFO@
@@ -74,7 +74,8 @@ the library routines in \fBncurses\fR(3X).
 .PP
 As described in \fBterm\fR(\*n), the database may be either a directory
 tree (one file per terminal entry) or a hashed database (one record per entry).
 .PP
 As described in \fBterm\fR(\*n), the database may be either a directory
 tree (one file per terminal entry) or a hashed database (one record per entry).
-The \fB@TIC@\fR writes only one type of entry, depending on how it was built:
+The \fB@TIC@\fR command writes only one type of entry,
+depending on how it was built:
 .bP
 For directory trees, the top-level directory, e.g., /usr/share/terminfo,
 specifies the location of the database.
 .bP
 For directory trees, the top-level directory, e.g., /usr/share/terminfo,
 specifies the location of the database.
@@ -87,14 +88,20 @@ then that is used.
 The default name for the hashed database is the same as the
 default directory name (only adding a ".db" suffix).
 .PP
 The default name for the hashed database is the same as the
 default directory name (only adding a ".db" suffix).
 .PP
+In either case (directory or hashed database),
+\fB@TIC@\fP will create the container if it does not exist.
+For a directory, this would be the "terminfo" leaf,
+versus a "terminfo.db" file.
+.PP
 The results are normally placed in the system terminfo database \fB\*d\fR.
 The results are normally placed in the system terminfo database \fB\*d\fR.
-The compiled terminal description can be placed in a different terminfo database.
+The compiled terminal description can be placed
+in a different terminfo database.
 There are two ways to achieve this:
 .bP
 There are two ways to achieve this:
 .bP
-First, you may override the system default by setting the variable
-\fBTERMINFO\fR in your shell environment to a valid database
-location, e.g., an existing directory (for directory trees) or
-valid location for a hashed database.
+First, you may override the system default either by
+using the \fB\-o\fP option,
+or by setting the variable \fBTERMINFO\fR
+in your shell environment to a valid database location.
 .bP
 Secondly, if \fB@TIC@\fR cannot write in \fI\*d\fR
 or the location specified using your TERMINFO variable,
 .bP
 Secondly, if \fB@TIC@\fR cannot write in \fI\*d\fR
 or the location specified using your TERMINFO variable,
@@ -103,9 +110,15 @@ it looks for the directory \fI$HOME/.terminfo\fR
 if that location exists, the entry is placed there.
 .PP
 Libraries that read terminfo entries are expected to check for
 if that location exists, the entry is placed there.
 .PP
 Libraries that read terminfo entries are expected to check for
+.bP
 a location specified with the TERMINFO variable first,
 a location specified with the TERMINFO variable first,
-look at \fI$HOME/.terminfo\fR if TERMINFO is not set, and
-finally look in \fI\*d\fR.
+.bP
+look in \fI$HOME/.terminfo\fR if TERMINFO is not set, next
+.bP
+directories listed in the TERMINFO_DIRS symbol, and
+.bP
+finally look in the system terminfo database (\fI\*d\fR).
+.SS OPTIONS
 .TP
 \fB\-0\fR
 restricts the output to a single line
 .TP
 \fB\-0\fR
 restricts the output to a single line
@@ -265,6 +278,7 @@ it will infer its type (boolean, number or string) from the syntax and
 make an extended table entry for that.
 User-defined capability strings
 whose name begins with ``k'' are treated as function keys.
 make an extended table entry for that.
 User-defined capability strings
 whose name begins with ``k'' are treated as function keys.
+.SS PARAMETERS
 .TP
 \fIfile\fR
 contains one or more \fBterminfo\fR terminal descriptions in source
 .TP
 \fIfile\fR
 contains one or more \fBterminfo\fR terminal descriptions in source
@@ -296,6 +310,7 @@ List of tokens encountered by scanner
 All values computed in construction of the hash table
 .LP
 If the debug level \fIn\fR is not given, it is taken to be one.
 All values computed in construction of the hash table
 .LP
 If the debug level \fIn\fR is not given, it is taken to be one.
+.SS PROCESSING
 .PP
 All but one of the capabilities recognized by \fB@TIC@\fR are documented
 in \fBterminfo\fR(\*n).
 .PP
 All but one of the capabilities recognized by \fB@TIC@\fR are documented
 in \fBterminfo\fR(\*n).
@@ -318,9 +333,6 @@ capabilities in \fIentry\fR_\fIname\fR_\fI2\fR must also appear in
 \fBentry_name_1\fR before \fBuse=\fR for these capabilities to be
 canceled in \fBentry_name_1\fR.
 .PP
 \fBentry_name_1\fR before \fBuse=\fR for these capabilities to be
 canceled in \fBentry_name_1\fR.
 .PP
-If the environment variable \fBTERMINFO\fR is set, the compiled
-results are placed there instead of \fB\*d\fR.
-.PP
 Total compiled entries cannot exceed 4096 bytes.
 The name field cannot
 exceed 512 bytes.
 Total compiled entries cannot exceed 4096 bytes.
 The name field cannot
 exceed 512 bytes.
index 04ab3e528aba3ea7f971d08ceaa2eaf8e47092be..aa38840e7d9030a82f55070f5f7534b4b0be8c28 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
 /****************************************************************************
- * Copyright (c) 1998-2010,2011 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
 #include <sys/stat.h>
 
 #include <dump_entry.h>
 #include <sys/stat.h>
 
 #include <dump_entry.h>
+#include <hashed_db.h>
 #include <transform.h>
 
 #include <transform.h>
 
-MODULE_ID("$Id: tic.c,v 1.157 2011/12/31 21:11:59 tom Exp $")
+MODULE_ID("$Id: tic.c,v 1.160 2012/02/05 01:39:39 tom Exp $")
 
 const char *_nc_progname = "tic";
 
 
 const char *_nc_progname = "tic";
 
@@ -476,25 +477,107 @@ open_tempfile(char *name)
     return result;
 }
 
     return result;
 }
 
+static const char *
+valid_db_path(const char *nominal)
+{
+    struct stat sb;
+#if USE_HASHED_DB
+    char suffix[] = DBM_SUFFIX;
+    size_t need = strlen(nominal) + sizeof(suffix);
+    char *result = malloc(need);
+
+    strcpy(result, nominal);
+    if (strcmp(result + need - sizeof(suffix), suffix)) {
+       strcat(result, suffix);
+    }
+#else
+    char *result = strdup(nominal);
+#endif
+
+    DEBUG(1, ("** stat(%s)", result));
+    if (stat(result, &sb) >= 0) {
+#if USE_HASHED_DB
+       if (!S_ISREG(sb.st_mode)
+           || access(result, R_OK | W_OK) != 0) {
+           DEBUG(1, ("...not a writable file"));
+           free(result);
+           result = 0;
+       }
+#else
+       if (!S_ISDIR(sb.st_mode)
+           || access(result, R_OK | W_OK | X_OK) != 0) {
+           DEBUG(1, ("...not a writable directory"));
+           free(result);
+           result = 0;
+       }
+#endif
+    } else {
+       /* check if parent is directory and is writable */
+       unsigned leaf = _nc_pathlast(result);
+
+       DEBUG(1, ("...not found"));
+       if (leaf) {
+           char save = result[leaf];
+           result[leaf] = 0;
+           if (stat(result, &sb) >= 0
+               && S_ISDIR(sb.st_mode)
+               && access(result, R_OK | W_OK | X_OK) == 0) {
+               result[leaf] = save;
+           } else {
+               DEBUG(1, ("...parent directory %s is not writable", result));
+               free(result);
+               result = 0;
+           }
+       } else {
+           DEBUG(1, ("... no parent directory"));
+           free(result);
+           result = 0;
+       }
+    }
+    return result;
+}
+
 /*
 /*
- * Show the databases that tic knows about.  The location to which it writes is
- * always the first one.  If that is not writable, then tic errors out before
- * reaching this function.
+ * Show the databases to which tic could write.  The location to which it
+ * writes is always the first one.  If none are writable, print an error
+ * message.
  */
 static void
  */
 static void
-show_databases(void)
+show_databases(const char *outdir)
 {
 {
-    DBDIRS state;
-    int offset;
-    const char *path;
+    bool specific = (outdir != 0) || getenv("TERMINFO") != 0;
+    const char *result;
+    const char *tried = 0;
+
+    if (outdir == 0) {
+       outdir = _nc_tic_dir(0);
+    }
+    if ((result = valid_db_path(outdir)) != 0) {
+       printf("%s\n", result);
+    } else {
+       tried = outdir;
+    }
 
 
-    _nc_first_db(&state, &offset);
-    while ((path = _nc_next_db(&state, &offset)) != 0) {
-       printf("%s\n", path);
+    if ((outdir = _nc_home_terminfo())) {
+       if ((result = valid_db_path(outdir)) != 0) {
+           printf("%s\n", result);
+       } else if (!specific) {
+           tried = outdir;
+       }
+    }
+
+    /*
+     * If we can write in neither location, give an error message.
+     */
+    if (tried) {
+       fflush(stdout);
+       fprintf(stderr, "%s: %s (no permission)\n", _nc_progname, tried);
+       ExitProgram(EXIT_FAILURE);
     }
     }
-    _nc_last_db();
 }
 
 }
 
+#define VtoTrace(opt) (unsigned) ((opt > 0) ? opt : (opt == 0))
+
 int
 main(int argc, char *argv[])
 {
 int
 main(int argc, char *argv[])
 {
@@ -586,8 +669,9 @@ main(int argc, char *argv[])
            sortmode = S_TERMCAP;
            break;
        case 'D':
            sortmode = S_TERMCAP;
            break;
        case 'D':
-           _nc_set_writedir(outdir);
-           show_databases();
+           debug_level = VtoTrace(v_opt);
+           set_trace_level(debug_level);
+           show_databases(outdir);
            ExitProgram(EXIT_SUCCESS);
            break;
        case 'I':
            ExitProgram(EXIT_SUCCESS);
            break;
        case 'I':
@@ -665,7 +749,7 @@ main(int argc, char *argv[])
        last_opt = this_opt;
     }
 
        last_opt = this_opt;
     }
 
-    debug_level = (unsigned) ((v_opt > 0) ? v_opt : (v_opt == 0));
+    debug_level = VtoTrace(v_opt);
     set_trace_level(debug_level);
 
     if (_nc_tracing) {
     set_trace_level(debug_level);
 
     if (_nc_tracing) {
@@ -685,7 +769,8 @@ main(int argc, char *argv[])
      */
     if (namelst && (!infodump && !capdump)) {
        (void) fprintf(stderr,
      */
     if (namelst && (!infodump && !capdump)) {
        (void) fprintf(stderr,
-                      "Sorry, -e can't be used without -I or -C\n");
+                      "%s: Sorry, -e can't be used without -I or -C\n",
+                      _nc_progname);
        cleanup(namelst);
        ExitProgram(EXIT_FAILURE);
     }
        cleanup(namelst);
        ExitProgram(EXIT_FAILURE);
     }
index 8fc0a716882b9e2b4a6ae2fcd7e3a70e1cff0015..7905a9356b7b493019874066edf1bf118e8363aa 100644 (file)
@@ -26,7 +26,7 @@
  * authorization.                                                           *
  ****************************************************************************/
 /*
  * authorization.                                                           *
  ****************************************************************************/
 /*
- * $Id: movewindow.c,v 1.33 2012/01/15 00:30:35 tom Exp $
+ * $Id: movewindow.c,v 1.34 2012/02/05 01:16:47 tom Exp $
  *
  * Demonstrate move functions for windows and derived windows from the curses
  * library.
  *
  * Demonstrate move functions for windows and derived windows from the curses
  * library.
@@ -492,9 +492,6 @@ move_derwin(WINDOW *win)
                                     max_line, max_col,
                                     TRUE,
                                     &more)) != 0) {
                                     max_line, max_col,
                                     TRUE,
                                     &more)) != 0) {
-               int y0, x0;
-
-               getbegyx(parent, y0, x0);
                if (mvderwin(win, tmp->y, tmp->x) != ERR) {
                    refresh_all(win);
                    doupdate();
                if (mvderwin(win, tmp->y, tmp->x) != ERR) {
                    refresh_all(win);
                    doupdate();