X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=progs%2Ftic.c;h=4d265eb1fed5a1ee55ce48ab6ba3338c232c30a8;hp=ed77db9eb7721dc7392f0d11fbd89bbe986aee5e;hb=7087871f804c061d339994964269f3c20e88f547;hpb=e0881a7f395769f2ec89b8fa8c21c4292c1de7b5 diff --git a/progs/tic.c b/progs/tic.c index ed77db9e..4d265eb1 100644 --- a/progs/tic.c +++ b/progs/tic.c @@ -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 * @@ -46,7 +46,7 @@ #include #include -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 "" @@ -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) @@ -388,13 +396,17 @@ open_tempfile(char *filename) static FILE * copy_input(FILE *source, const char *filename, char *alt_file) { + char my_altfile[PATH_MAX]; FILE *result = 0; - FILE *target = open_tempfile(alt_file); + FILE *target = 0; int ch; + if (alt_file == 0) + alt_file = my_altfile; + 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); @@ -420,7 +432,7 @@ copy_input(FILE *source, const char *filename, char *alt_file) */ result = fopen(alt_file, "r+"); fclose(target); - to_remove = alt_file; + to_remove = strdup(alt_file); } return result; } @@ -488,7 +500,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 +523,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)) { @@ -541,7 +556,7 @@ matches(char **needle, const char *haystack) return (code); } -static const char * +static char * 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); + if (result == 0) + failed("valid_db_path"); _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; - const char *result; + char *result; 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); + free(result); } 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); + free(result); } else if (!specific) { tried = outdir; } @@ -1437,6 +1456,7 @@ uses_SGR_39_49(const char *value) static void check_screen(TERMTYPE *tp) { +#if NCURSES_XNAMES 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"); } } +#endif } /* @@ -1827,6 +1848,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)) { @@ -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); + if (check == 0) + failed("check_termtype"); + for (j = 0; given[j].keycode; ++j) { const char *a = given[j].value; bool first = TRUE;