X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=test%2Fpadview.c;h=868dbfeda2142abe051f7fa96df96e0b317afab8;hp=7bc136d51fb8aa0a0def3c4a2012418d79356510;hb=1ddfa997c0965852dbdc738aa6d92c0cd0975f3b;hpb=9193d076200365eeb5ff932acdbbdcc5e452292c diff --git a/test/padview.c b/test/padview.c index 7bc136d5..868dbfed 100644 --- a/test/padview.c +++ b/test/padview.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 2017,2019 Free Software Foundation, Inc. * + * Copyright 2019-2021,2022 Thomas E. Dickey * + * Copyright 2017 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 * @@ -28,7 +29,7 @@ /* * clone of view.c, using pads * - * $Id: padview.c,v 1.14 2019/07/13 20:41:47 tom Exp $ + * $Id: padview.c,v 1.19 2022/05/15 14:36:23 tom Exp $ */ #include @@ -40,10 +41,11 @@ #if HAVE_NEWPAD -static void finish(int sig) GCC_NORETURN; +static GCC_NORETURN void finish(int sig); #define my_pair 1 +static WINDOW *global_pad; static int shift = 0; static bool try_color = FALSE; @@ -54,7 +56,7 @@ static int num_lines; static bool n_option = FALSE; #endif -static void usage(void) GCC_NORETURN; +static GCC_NORETURN void usage(void); static void failed(const char *msg) @@ -68,6 +70,8 @@ static void finish(int sig) { endwin(); + if (global_pad != NULL) + delwin(global_pad); ExitProgram(sig != 0 ? EXIT_FAILURE : EXIT_SUCCESS); } @@ -143,9 +147,12 @@ read_file(const char *filename) } len = fread(my_blob, sizeof(char), (size_t) sb.st_size, fp); - my_blob[sb.st_size] = '\0'; fclose(fp); + if (len > (size_t) sb.st_size) + len = (size_t) sb.st_size; + my_blob[len] = '\0'; + for (pass = 0; pass < 2; ++pass) { char *base = my_blob; k = 0; @@ -159,12 +166,19 @@ read_file(const char *filename) ++k; } } + if (base != (my_blob + j)) { + if (pass) + my_vec[k] = base; + ++k; + } num_lines = k; - if (base != (my_blob + j)) - ++num_lines; - if (!pass && - ((my_vec = typeCalloc(char *, (size_t) k + 2)) == 0)) { - failed("cannot allocate line-vector #1"); + if (pass == 0) { + if (((my_vec = typeCalloc(char *, (size_t) k + 2)) == 0)) { + failed("cannot allocate line-vector #1"); + } + } else { + if (my_vec[0] == NULL) + my_vec[0] = my_blob; } } @@ -324,11 +338,11 @@ main(int argc, char *argv[]) int tvalue = (int) strtol(optarg, &next, 0); if (tvalue < 0 || (next != 0 && *next != 0)) usage(); - trace((unsigned) tvalue); + curses_trace((unsigned) tvalue); } break; case 't': - trace(TRACE_CALLS); + curses_trace(TRACE_CALLS); break; #endif default: @@ -361,7 +375,8 @@ main(int argc, char *argv[]) * Do this after starting color, otherwise the pad's background will be * uncolored after the ncurses 6.1.20181208 fixes. */ - my_pad = read_file(fname = argv[optind]); + global_pad = + my_pad = read_file(fname = argv[optind]); my_row = 0; while (!done) {