X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=test%2Fworm.c;h=f64911c632cf053ee612e642ba41a3d704d7eb71;hp=98f099cb9cb6e94deb2af7b602705a4e9631dc69;hb=4b1ec76cb0a0fa5055909f534b3f928dafc7f7f1;hpb=52aa842907b31bb56fb5133da3f023b45bd4355f diff --git a/test/worm.c b/test/worm.c index 98f099cb..f64911c6 100644 --- a/test/worm.c +++ b/test/worm.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. * + * Copyright (c) 1998-2008,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 * @@ -61,7 +61,7 @@ Options: traces will be dumped. The program stops and waits for one character of input at the beginning and end of the interval. - $Id: worm.c,v 1.60 2010/11/13 20:21:21 tom Exp $ + $Id: worm.c,v 1.62 2012/12/15 18:32:40 tom Exp $ */ #include @@ -201,6 +201,14 @@ static const struct options { }; /* *INDENT-ON* */ +static void +failed(const char *s) +{ + perror(s); + endwin(); + ExitProgram(EXIT_FAILURE); +} + static void cleanup(void) { @@ -391,6 +399,8 @@ update_refs(WINDOW *win) if (last_x != COLS - 1) { for (y = 0; y <= last_y; y++) { refs[y] = typeRealloc(int, (size_t) COLS, refs[y]); + if (!refs[y]) + failed("update_refs"); for (x = last_x + 1; x < COLS; x++) refs[y][x] = 0; } @@ -402,6 +412,8 @@ update_refs(WINDOW *win) refs = typeRealloc(int *, (size_t) LINES, refs); for (y = last_y + 1; y < LINES; y++) { refs[y] = typeMalloc(int, (size_t) COLS); + if (!refs[y]) + failed("update_refs"); for (x = 0; x < COLS; x++) refs[y][x] = 0; } @@ -419,6 +431,7 @@ main(int argc, char *argv[]) struct worm *w; int *ip; bool done = FALSE; + int max_refs; setlocale(LC_ALL, ""); @@ -501,8 +514,9 @@ main(int argc, char *argv[]) } #endif /* A_COLOR */ - refs = typeMalloc(int *, (size_t) LINES); - for (y = 0; y < LINES; y++) { + max_refs = LINES; + refs = typeMalloc(int *, (size_t) max_refs); + for (y = 0; y < max_refs; y++) { refs[y] = typeMalloc(int, (size_t) COLS); for (x = 0; x < COLS; x++) { refs[y][x] = 0; @@ -596,7 +610,7 @@ main(int argc, char *argv[]) Trace(("Cleanup")); cleanup(); #ifdef NO_LEAKS - for (y = 0; y < LINES; y++) { + for (y = 0; y < max_refs; y++) { free(refs[y]); } free(refs);