]> sourceware.org Git - lvm2.git/commitdiff
o Test program for dbg_malloc unit.
authorJoe Thornber <thornber@redhat.com>
Tue, 2 Oct 2001 12:27:55 +0000 (12:27 +0000)
committerJoe Thornber <thornber@redhat.com>
Tue, 2 Oct 2001 12:27:55 +0000 (12:27 +0000)
  I'm postfixing test programs with _t, and benchmarks with _b

old-tests/mm/dbg_malloc_t.c [new file with mode: 0644]

diff --git a/old-tests/mm/dbg_malloc_t.c b/old-tests/mm/dbg_malloc_t.c
new file mode 100644 (file)
index 0000000..99831e4
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2001 Sistina Software
+ *
+ * This file is released under the GPL.
+ */
+
+#include "dbg_malloc.h"
+#include "log.h"
+
+#include <stdio.h>
+#include <unistd.h>
+
+
+static void _print_help(FILE *out, const char *prog)
+{
+       fprintf(out, "usage : %s [-hlbufd]\n\n", prog);
+       fprintf(out, "  h : this message\n");
+       fprintf(out, "  l : cause memory leak\n");
+       fprintf(out, "  b : overrun memory block\n");
+       fprintf(out, "  u : underrun memory block\n");
+       fprintf(out, "  f : free random pointer\n");
+       fprintf(out, "  d : free block twice\n");
+}
+
+struct block_list {
+       struct block_list *next;
+       char dummy[9];
+};
+
+static void _leak_memory(void)
+{
+       int i;
+       struct block_list *b, *head, **l = &head;
+
+       /* allocate a list of blocks */
+       for (i = 0; i < 1000; i++) {
+
+               if (!(b = dbg_malloc(sizeof(*b)))) {
+                       log_fatal("Couldn't allocate memory");
+                       exit(1);
+               }
+               
+               b->next = 0;
+               *l = b;
+               l = &b->next;
+       }
+
+       /* free off every other block */
+       for (i = 0, l = head; *l; l = &(*l)->next, i++) {
+               if(i & 0x1)
+                       db_free(b);
+       }
+}
+
+static void _bounds_overrun()
+{
+       char *b;
+
+       /* allocate a block */
+       b = dbg_malloc(534);
+
+       /* overrun */
+       b[534] = 56;
+
+       /* free it, which should trigger the bounds error */
+       dbg_free(b);
+}
+
+static void _bounds_underrun()
+{
+       char *b;
+
+       /* allocate a block */
+       b = dbg_malloc(534);
+
+       /* underrun */
+       *(b - 1) = 56;
+
+       /* free it, which should trigger the bounds error */
+       dbg_free(b);
+}
+
+static void _free_dud()
+{
+       char *b;
+
+       /* allocate a block */
+       b = dbg_malloc(534);
+
+       /* free it, which should trigger the bounds error */
+       dbg_free(b + 100);
+}
+
+static void _free_twice()
+{
+       char *b;
+
+       /* allocate a block */
+       b = dbg_malloc(534);
+
+       /* free it, which should trigger the bounds error */
+       dbg_free(b);
+       dbg_free(b);
+}
+
+int main(int argc, char **argv)
+{
+       char opt;
+
+       init_log();
+       opt = getopt(argc, argv, "hlbufd");
+       switch(opt) {
+       case EOF:
+       case 'h':
+               _print_help(stdout, argv[0]);
+               break;
+
+       case 'l':
+               _leak_memory();
+               break;
+
+       case 'b':
+               _bounds_overrun();
+               break;
+
+       case 'u':
+               _bounds_underrun();
+               break;
+
+       case 'f':
+               _free_dud();
+               break;
+
+       case 'd':
+               _free_twice();
+               break;
+
+       case '?':
+               fprintf(stderr, "Unknown option -%c\n", opt);
+               exit(1);
+       }
+
+       dump_memory();
+       fin_log();
+       return 0;
+}
This page took 0.03476 seconds and 5 git commands to generate.