]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - progs/tic.c
ncurses 5.9 - patch 20130727
[ncurses.git] / progs / tic.c
index ed77db9eb7721dc7392f0d11fbd89bbe986aee5e..4d265eb1fed5a1ee55ce48ab6ba3338c232c30a8 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
 /****************************************************************************
- * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2012,2013 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            *
@@ -46,7 +46,7 @@
 #include <hashed_db.h>
 #include <transform.h>
 
 #include <hashed_db.h>
 #include <transform.h>
 
-MODULE_ID("$Id: tic.c,v 1.177 2012/06/02 17:19:31 tom Exp $")
+MODULE_ID("$Id: tic.c,v 1.186 2013/06/08 16:50:47 tom Exp $")
 
 #define STDIN_NAME "<stdin>"
 
 
 #define STDIN_NAME "<stdin>"
 
@@ -108,6 +108,8 @@ free_namelist(char **src)
 static void
 cleanup(void)
 {
 static void
 cleanup(void)
 {
+    int rc;
+
 #if NO_LEAKS
     free_namelist(namelst);
 #endif
 #if NO_LEAKS
     free_namelist(namelst);
 #endif
@@ -115,10 +117,12 @@ cleanup(void)
        fclose(tmp_fp);
     if (to_remove != 0) {
 #if HAVE_REMOVE
        fclose(tmp_fp);
     if (to_remove != 0) {
 #if HAVE_REMOVE
-       remove(to_remove);
+       rc = remove(to_remove);
 #else
 #else
-       unlink(to_remove);
+       rc = unlink(to_remove);
 #endif
 #endif
+       if (rc != 0)
+           perror(to_remove);
     }
 }
 
     }
 }
 
@@ -294,8 +298,10 @@ put_translate(int c)
     if (in_name) {
        if (used + 1 >= have) {
            have += 132;
     if (in_name) {
        if (used + 1 >= have) {
            have += 132;
-           namebuf = typeRealloc(char, have, namebuf);
-           suffix = typeRealloc(char, have, suffix);
+           if ((namebuf = typeRealloc(char, have, namebuf)) == 0)
+                 failed("put_translate namebuf");
+           if ((suffix = typeRealloc(char, have, suffix)) == 0)
+                 failed("put_translate suffix");
        }
        if (c == '\n' || c == '@') {
            namebuf[used++] = '\0';
        }
        if (c == '\n' || c == '@') {
            namebuf[used++] = '\0';
@@ -374,9 +380,11 @@ open_tempfile(char *filename)
     _nc_STRCPY(filename, "/tmp/XXXXXX", PATH_MAX);
 #if HAVE_MKSTEMP
     {
     _nc_STRCPY(filename, "/tmp/XXXXXX", PATH_MAX);
 #if HAVE_MKSTEMP
     {
+       int oldmask = umask(077);
        int fd = mkstemp(filename);
        if (fd >= 0)
            result = fdopen(fd, "w");
        int fd = mkstemp(filename);
        if (fd >= 0)
            result = fdopen(fd, "w");
+       umask(oldmask);
     }
 #else
     if (tmpnam(filename) != 0)
     }
 #else
     if (tmpnam(filename) != 0)
@@ -388,13 +396,17 @@ open_tempfile(char *filename)
 static FILE *
 copy_input(FILE *source, const char *filename, char *alt_file)
 {
 static FILE *
 copy_input(FILE *source, const char *filename, char *alt_file)
 {
+    char my_altfile[PATH_MAX];
     FILE *result = 0;
     FILE *result = 0;
-    FILE *target = open_tempfile(alt_file);
+    FILE *target = 0;
     int ch;
 
     int ch;
 
+    if (alt_file == 0)
+       alt_file = my_altfile;
+
     if (source == 0) {
        failed("copy_input (source)");
     if (source == 0) {
        failed("copy_input (source)");
-    } else if (target == 0) {
+    } else if ((target = open_tempfile(alt_file)) == 0) {
        failed("copy_input (target)");
     } else {
        clearerr(source);
        failed("copy_input (target)");
     } else {
        clearerr(source);
@@ -420,7 +432,7 @@ copy_input(FILE *source, const char *filename, char *alt_file)
         */
        result = fopen(alt_file, "r+");
        fclose(target);
         */
        result = fopen(alt_file, "r+");
        fclose(target);
-       to_remove = alt_file;
+       to_remove = strdup(alt_file);
     }
     return result;
 }
     }
     return result;
 }
@@ -488,7 +500,8 @@ make_namelist(char *src)
                }
            }
            if (pass == 1) {
                }
            }
            if (pass == 1) {
-               dst = typeCalloc(char *, nn + 1);
+               if ((dst = typeCalloc(char *, nn + 1)) == 0)
+                     failed("make_namelist");
                rewind(fp);
            }
        }
                rewind(fp);
            }
        }
@@ -510,8 +523,10 @@ make_namelist(char *src)
                if (mark == '\0')
                    break;
            }
                if (mark == '\0')
                    break;
            }
-           if (pass == 1)
-               dst = typeCalloc(char *, nn + 1);
+           if (pass == 1) {
+               if ((dst = typeCalloc(char *, nn + 1)) == 0)
+                     failed("make_namelist");
+           }
        }
     }
     if (showsummary && (dst != 0)) {
        }
     }
     if (showsummary && (dst != 0)) {
@@ -541,7 +556,7 @@ matches(char **needle, const char *haystack)
     return (code);
 }
 
     return (code);
 }
 
-static const char *
+static char *
 valid_db_path(const char *nominal)
 {
     struct stat sb;
 valid_db_path(const char *nominal)
 {
     struct stat sb;
@@ -550,6 +565,8 @@ valid_db_path(const char *nominal)
     size_t need = strlen(nominal) + sizeof(suffix);
     char *result = malloc(need);
 
     size_t need = strlen(nominal) + sizeof(suffix);
     char *result = malloc(need);
 
+    if (result == 0)
+       failed("valid_db_path");
     _nc_STRCPY(result, nominal, need);
     if (strcmp(result + need - sizeof(suffix), suffix)) {
        _nc_STRCAT(result, suffix, need);
     _nc_STRCPY(result, nominal, need);
     if (strcmp(result + need - sizeof(suffix), suffix)) {
        _nc_STRCAT(result, suffix, need);
@@ -610,7 +627,7 @@ static void
 show_databases(const char *outdir)
 {
     bool specific = (outdir != 0) || getenv("TERMINFO") != 0;
 show_databases(const char *outdir)
 {
     bool specific = (outdir != 0) || getenv("TERMINFO") != 0;
-    const char *result;
+    char *result;
     const char *tried = 0;
 
     if (outdir == 0) {
     const char *tried = 0;
 
     if (outdir == 0) {
@@ -618,6 +635,7 @@ show_databases(const char *outdir)
     }
     if ((result = valid_db_path(outdir)) != 0) {
        printf("%s\n", result);
     }
     if ((result = valid_db_path(outdir)) != 0) {
        printf("%s\n", result);
+       free(result);
     } else {
        tried = outdir;
     }
     } else {
        tried = outdir;
     }
@@ -625,6 +643,7 @@ show_databases(const char *outdir)
     if ((outdir = _nc_home_terminfo())) {
        if ((result = valid_db_path(outdir)) != 0) {
            printf("%s\n", result);
     if ((outdir = _nc_home_terminfo())) {
        if ((result = valid_db_path(outdir)) != 0) {
            printf("%s\n", result);
+           free(result);
        } else if (!specific) {
            tried = outdir;
        }
        } else if (!specific) {
            tried = outdir;
        }
@@ -1437,6 +1456,7 @@ uses_SGR_39_49(const char *value)
 static void
 check_screen(TERMTYPE *tp)
 {
 static void
 check_screen(TERMTYPE *tp)
 {
+#if NCURSES_XNAMES
     if (_nc_user_definable) {
        int have_XT = tigetflag("XT");
        int have_XM = tigetflag("XM");
     if (_nc_user_definable) {
        int have_XT = tigetflag("XT");
        int have_XM = tigetflag("XM");
@@ -1488,6 +1508,7 @@ check_screen(TERMTYPE *tp)
                _nc_warning("Expected XT to be set, given kmous");
        }
     }
                _nc_warning("Expected XT to be set, given kmous");
        }
     }
+#endif
 }
 
 /*
 }
 
 /*
@@ -1827,6 +1848,9 @@ get_fkey_list(TERMTYPE *tp)
     int used = 0;
     int j;
 
     int used = 0;
     int j;
 
+    if (result == 0)
+       failed("get_fkey_list");
+
     for (j = 0; all_fkeys[j].code; j++) {
        char *a = tp->Strings[all_fkeys[j].offset];
        if (VALID_STRING(a)) {
     for (j = 0; all_fkeys[j].code; j++) {
        char *a = tp->Strings[all_fkeys[j].offset];
        if (VALID_STRING(a)) {
@@ -1880,6 +1904,9 @@ check_termtype(TERMTYPE *tp, bool literal)
        char *check = calloc((size_t) (NUM_STRINGS(tp) + 1), sizeof(char));
        NAME_VALUE *given = get_fkey_list(tp);
 
        char *check = calloc((size_t) (NUM_STRINGS(tp) + 1), sizeof(char));
        NAME_VALUE *given = get_fkey_list(tp);
 
+       if (check == 0)
+           failed("check_termtype");
+
        for (j = 0; given[j].keycode; ++j) {
            const char *a = given[j].value;
            bool first = TRUE;
        for (j = 0; given[j].keycode; ++j) {
            const char *a = given[j].value;
            bool first = TRUE;