X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=progs%2Ftic.c;h=717a1fb35126bbb79b2544b03907c2c810d0d933;hp=d96555e9bee6a11dc34018b438d2ced1245e210a;hb=64f44b13d30e0a7bc2921a9d43755423f81564fd;hpb=beb0f0c6911096ee19815bdf2601c4317d80341f diff --git a/progs/tic.c b/progs/tic.c index d96555e9..717a1fb3 100644 --- a/progs/tic.c +++ b/progs/tic.c @@ -46,7 +46,7 @@ #include #include -MODULE_ID("$Id: tic.c,v 1.176 2012/04/29 00:23:38 tom Exp $") +MODULE_ID("$Id: tic.c,v 1.180 2012/12/08 22:17:22 tom Exp $") #define STDIN_NAME "" @@ -108,6 +108,8 @@ free_namelist(char **src) static void cleanup(void) { + int rc; + #if NO_LEAKS free_namelist(namelst); #endif @@ -115,10 +117,12 @@ cleanup(void) fclose(tmp_fp); if (to_remove != 0) { #if HAVE_REMOVE - remove(to_remove); + rc = remove(to_remove); #else - unlink(to_remove); + rc = unlink(to_remove); #endif + if (rc != 0) + perror(to_remove); } } @@ -294,8 +298,10 @@ put_translate(int c) 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'; @@ -374,9 +380,11 @@ open_tempfile(char *filename) _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"); + umask(oldmask); } #else if (tmpnam(filename) != 0) @@ -488,7 +496,8 @@ make_namelist(char *src) } } if (pass == 1) { - dst = typeCalloc(char *, nn + 1); + if ((dst = typeCalloc(char *, nn + 1)) == 0) + failed("make_namelist"); rewind(fp); } } @@ -510,8 +519,10 @@ make_namelist(char *src) 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)) { @@ -550,6 +561,8 @@ valid_db_path(const char *nominal) 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); @@ -1212,6 +1225,11 @@ check_cursor(TERMTYPE *tp) int count; char *list[4]; + /* it is rare to have an insert-line feature without a matching delete */ + ANDMISSING(parm_insert_line, insert_line); + ANDMISSING(parm_delete_line, delete_line); + ANDMISSING(parm_insert_line, parm_delete_line); + /* if we have a parameterized form, then the non-parameterized is easy */ ANDMISSING(parm_down_cursor, cursor_down); ANDMISSING(parm_up_cursor, cursor_up); @@ -1385,6 +1403,12 @@ check_keypad(TERMTYPE *tp) if (*show != '\0') _nc_warning("vt100 keypad map incomplete:%s", show); } + + /* + * These warnings are useful for consistency checks - it is possible that + * there are real terminals with mismatches in these + */ + ANDMISSING(key_ic, key_dc); } static void @@ -1816,6 +1840,9 @@ get_fkey_list(TERMTYPE *tp) 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)) { @@ -1869,6 +1896,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); + if (check == 0) + failed("check_termtype"); + for (j = 0; given[j].keycode; ++j) { const char *a = given[j].value; bool first = TRUE;