diff options
Diffstat (limited to 'REORG.TODO/malloc/tst-mtrace.c')
-rw-r--r-- | REORG.TODO/malloc/tst-mtrace.c | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/REORG.TODO/malloc/tst-mtrace.c b/REORG.TODO/malloc/tst-mtrace.c new file mode 100644 index 0000000000..2726c68b76 --- /dev/null +++ b/REORG.TODO/malloc/tst-mtrace.c @@ -0,0 +1,105 @@ +/* Test program for mtrace. + Copyright (C) 2000-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <mcheck.h> +#include <paths.h> +#include <search.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + + +static void print (const void *node, VISIT value, int level); + +/* Used for several purposes. */ +static FILE *fp; + + +static int +do_test (void) +{ + void *root = NULL; + size_t linelen = 0; + char *line = NULL; + + /* Enable memory usage tracing. */ + mtrace (); + + /* Perform some operations which definitely will allocate some + memory. */ + fp = fopen (__FILE__, "r"); + if (fp == NULL) + /* Shouldn't happen since this program is executed in the source + directory. */ + abort (); + + while (!feof (fp)) + { + char **p; + char *copy; + ssize_t n = getline (&line, &linelen, fp); + + if (n < 0) + break; + + if (n == 0) + continue; + + copy = strdup (line); + if (copy == NULL) + abort (); + + p = (char **) tsearch (copy, &root, + (int (*)(const void *, const void *))strcmp); + if (*p != copy) + /* This line wasn't added. */ + free (copy); + } + + fclose (fp); + + fp = fopen (_PATH_DEVNULL, "w"); + if (fp != NULL) + { + /* Write something through stdout. */ + twalk (root, print); + + fclose (fp); + } + + /* Free everything. */ + tdestroy (root, free); + + /* Also the line buffer. */ + free (line); + + /* That's it. */ + return 0; +} + + +static void +print (const void *node, VISIT value, int level) +{ + static int cnt; + if (value == postorder || value == leaf) + fprintf (fp, "%3d: %s", ++cnt, *(const char **) node); +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" |