From e1573e95c8c404bc9048d36544b734bc689814ec Mon Sep 17 00:00:00 2001 From: Michael Jennings Date: Fri, 1 Sep 2000 22:14:17 +0000 Subject: [PATCH] Fri Sep 1 15:25:28 PDT 2000 Michael Jennings Okay, everything seems hunky-dorey now. If you have memory debugging turned on, exiting Eterm will give a dump of the leftover allocated memory including where it came from and how much there is. You'll also get a listing of all the remaining Pixmap ID's and GC ID's along with where they were created. I also added some macros to the debugging stuff in libmej.h so that if you pass the --without-debugging option to ./configure, it will optimize out all the ASSERT and REQUIRE goop. This will make it harder to trap bugs before they cause problems, so don't do it if you want to help development, but if speed is critical to you, give it a shot. SVN revision: 3294 --- ChangeLog | 16 +++++++++ configure.in | 1 + libmej/libmej.h | 86 ++++++++++++++++++++++++++++--------------------- libmej/mem.c | 71 ++++++++++++++++++++++++++-------------- libmej/msgs.c | 4 +-- src/command.c | 2 +- src/font.c | 13 ++++---- src/options.c | 3 +- src/pixmap.h | 4 +-- src/term.c | 2 +- src/utmp.c | 20 ++++++------ 11 files changed, 138 insertions(+), 84 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6ce962d..b1858ca 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3859,3 +3859,19 @@ Fri Sep 1 00:39:41 PDT 2000 Michael Jennings a pixmap ID would be a good thing. Sigh. I need sleep. ------------------------------------------------------------------------------- +Fri Sep 1 15:25:28 PDT 2000 Michael Jennings + + Okay, everything seems hunky-dorey now. If you have memory debugging + turned on, exiting Eterm will give a dump of the leftover allocated + memory including where it came from and how much there is. You'll + also get a listing of all the remaining Pixmap ID's and GC ID's along + with where they were created. + + I also added some macros to the debugging stuff in libmej.h so that + if you pass the --without-debugging option to ./configure, it will + optimize out all the ASSERT and REQUIRE goop. This will make it + harder to trap bugs before they cause problems, so don't do it if you + want to help development, but if speed is critical to you, give it a + shot. + +------------------------------------------------------------------------------- diff --git a/configure.in b/configure.in index f1ce45e..211d2c1 100644 --- a/configure.in +++ b/configure.in @@ -177,6 +177,7 @@ AC_ARG_WITH(debugging, [ --with-debugging[=num] enable debugging output, num i AC_DEFINE_UNQUOTED(DEBUG, $withval) else echo "no debugging" + AC_DEFINE_UNQUOTED(DEBUG, 0) fi, echo "4" AC_DEFINE_UNQUOTED(DEBUG, 4) ) diff --git a/libmej/libmej.h b/libmej/libmej.h index 4c17102..7e2174a 100644 --- a/libmej/libmej.h +++ b/libmej/libmej.h @@ -110,49 +110,59 @@ #endif /* A quick and dirty macro to say, "Hi! I got here without crashing!" */ -#define MOO() do { __DEBUG(); fprintf(LIBMEJ_DEBUG_FD, "Moo.\n"); fflush(LIBMEJ_DEBUG_FD); } while (0) +#define MOO() do {__DEBUG(); libmej_dprintf("Moo.\n");} while (0) /* Assertion/abort macros which are quite a bit more useful than assert() and abort(). */ -#if defined(__FILE__) && defined(__LINE__) -# ifdef __GNUC__ -# define ASSERT(x) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed in %s() at %s:%d: %s", __FUNCTION__, __FILE__, __LINE__, #x);} \ - else {print_warning("ASSERT failed in %s() at %s:%d: %s", __FUNCTION__, __FILE__, __LINE__, #x);}}} while (0) -# define ASSERT_RVAL(x, val) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed in %s() at %s:%d: %s", __FUNCTION__, __FILE__, __LINE__, #x);} \ - else {print_warning("ASSERT failed in %s() at %s:%d: %s", __FUNCTION__, __FILE__, __LINE__, #x);} \ - return (val);}} while (0) -# define ASSERT_NOTREACHED() do {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed in %s() at %s:%d: This code should not be reached.", __FUNCTION__, __FILE__, __LINE__);} \ - else {print_warning("ASSERT failed in %s() at %s:%d: This code should not be reached.", __FUNCTION__, __FILE__, __LINE__);} \ - } while (0) -# define ASSERT_NOTREACHED_RVAL(val) do {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed in %s() at %s:%d: This code should not be reached.", __FUNCTION__, __FILE__, __LINE__);} \ - else {print_warning("ASSERT failed in %s() at %s:%d: This code should not be reached.", __FUNCTION__, __FILE__, __LINE__);} \ - return (val);} while (0) -# define ABORT() fatal_error("Aborting in %s() at %s:%d.", __FUNCTION__, __FILE__, __LINE__) +#if DEBUG >= 1 +# if defined(__FILE__) && defined(__LINE__) +# ifdef __GNUC__ +# define ASSERT(x) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed in %s() at %s:%d: %s", __FUNCTION__, __FILE__, __LINE__, #x);} \ + else {print_warning("ASSERT failed in %s() at %s:%d: %s", __FUNCTION__, __FILE__, __LINE__, #x);}}} while (0) +# define ASSERT_RVAL(x, val) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed in %s() at %s:%d: %s", __FUNCTION__, __FILE__, __LINE__, #x);} \ + else {print_warning("ASSERT failed in %s() at %s:%d: %s", __FUNCTION__, __FILE__, __LINE__, #x);} \ + return (val);}} while (0) +# define ASSERT_NOTREACHED() do {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed in %s() at %s:%d: This code should not be reached.", __FUNCTION__, __FILE__, __LINE__);} \ + else {print_warning("ASSERT failed in %s() at %s:%d: This code should not be reached.", __FUNCTION__, __FILE__, __LINE__);} \ + } while (0) +# define ASSERT_NOTREACHED_RVAL(val) do {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed in %s() at %s:%d: This code should not be reached.", __FUNCTION__, __FILE__, __LINE__);} \ + else {print_warning("ASSERT failed in %s() at %s:%d: This code should not be reached.", __FUNCTION__, __FILE__, __LINE__);} \ + return (val);} while (0) +# define ABORT() fatal_error("Aborting in %s() at %s:%d.", __FUNCTION__, __FILE__, __LINE__) +# else +# define ASSERT(x) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed at %s:%d: %s", __FILE__, __LINE__, #x);} \ + else {print_warning("ASSERT failed at %s:%d: %s", __FILE__, __LINE__, #x);}}} while (0) +# define ASSERT_RVAL(x, val) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed at %s:%d: %s", __FILE__, __LINE__, #x);} \ + else {print_warning("ASSERT failed at %s:%d: %s", __FILE__, __LINE__, #x);} \ + return (val);}} while (0) +# define ASSERT_NOTREACHED() do {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed at %s:%d: This code should not be reached.", __FILE__, __LINE__);} \ + else {print_warning("ASSERT failed at %s:%d: This code should not be reached.", __FILE__, __LINE__);} \ + } while (0) +# define ASSERT_NOTREACHED_RVAL(val) do {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed at %s:%d: This code should not be reached.", __FILE__, __LINE__);} \ + else {print_warning("ASSERT failed at %s:%d: This code should not be reached.", __FILE__, __LINE__);} \ + return (val);} while (0) +# define ABORT() fatal_error("Aborting at %s:%d.", __FILE__, __LINE__) +# endif # else -# define ASSERT(x) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed at %s:%d: %s", __FILE__, __LINE__, #x);} \ - else {print_warning("ASSERT failed at %s:%d: %s", __FILE__, __LINE__, #x);}}} while (0) -# define ASSERT_RVAL(x, val) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed at %s:%d: %s", __FILE__, __LINE__, #x);} \ - else {print_warning("ASSERT failed at %s:%d: %s", __FILE__, __LINE__, #x);} \ - return (val);}} while (0) -# define ASSERT_NOTREACHED() do {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed at %s:%d: This code should not be reached.", __FILE__, __LINE__);} \ - else {print_warning("ASSERT failed at %s:%d: This code should not be reached.", __FILE__, __LINE__);} \ - } while (0) -# define ASSERT_NOTREACHED_RVAL(val) do {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed at %s:%d: This code should not be reached.", __FILE__, __LINE__);} \ - else {print_warning("ASSERT failed at %s:%d: This code should not be reached.", __FILE__, __LINE__);} \ - return (val);} while (0) -# define ABORT() fatal_error("Aborting at %s:%d.", __FILE__, __LINE__) +# define ASSERT(x) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed: %s", #x);} \ + else {print_warning("ASSERT failed: %s", #x);}}} while (0) +# define ASSERT_RVAL(x, val) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed: %s", #x);} \ + else {print_warning("ASSERT failed: %s", #x);} return (val);}} while (0) +# define ASSERT_NOTREACHED() return +# define ASSERT_NOTREACHED_RVAL(x) return (x) +# define ABORT() fatal_error("Aborting.\n") # endif +# define REQUIRE(x) do {if (!(x)) {if (DEBUG_LEVEL>=1) {__DEBUG(); libmej_dprintf("REQUIRE failed: %s\n", #x);} return;}} while (0) +# define REQUIRE_RVAL(x, v) do {if (!(x)) {if (DEBUG_LEVEL>=1) {__DEBUG(); libmej_dprintf("REQUIRE failed: %s\n", #x);} return (v);}} while (0) #else -# define ASSERT(x) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed: %s", #x);} \ - else {print_warning("ASSERT failed: %s", #x);}}} while (0) -# define ASSERT_RVAL(x, val) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed: %s", #x);} \ - else {print_warning("ASSERT failed: %s", #x);} return (val);}} while (0) -# define ASSERT_NOTREACHED() return -# define ASSERT_NOTREACHED_RVAL(x) return (x) -# define ABORT() fatal_error("Aborting.\n") +# define ASSERT(x) NOP +# define ASSERT_RVAL(x, val) NOP +# define ASSERT_NOTREACHED() return +# define ASSERT_NOTREACHED_RVAL(val) return (val) +# define ABORT() fatal_error("Aborting.\n") +# define REQUIRE(x) do {if (!(x)) return;} while 0 +# define REQUIRE_RVAL(x, v) do {if (!(x)) return (v);} while 0 #endif -#define REQUIRE(x) do {if (!(x)) {if (DEBUG_LEVEL>=1) {__DEBUG(); libmej_dprintf("REQUIRE failed: %s\n", #x);} return;}} while (0) -#define REQUIRE_RVAL(x, v) do {if (!(x)) {if (DEBUG_LEVEL>=1) {__DEBUG(); libmej_dprintf("REQUIRE failed: %s\n", #x);} return (v);}} while (0) #define NONULL(x) ((x) ? (x) : ("")) /* Macros for printing debugging messages */ @@ -195,9 +205,13 @@ /********************************* MEM GOOP ***********************************/ +#define LIBMEJ_FNAME_LEN 20 + typedef struct ptr_struct { void *ptr; size_t size; + char file[LIBMEJ_FNAME_LEN + 1]; + unsigned long line; } ptr_t; typedef struct memrec_struct { unsigned long cnt; diff --git a/libmej/mem.c b/libmej/mem.c index 0175c70..c959ed3 100644 --- a/libmej/mem.c +++ b/libmej/mem.c @@ -30,7 +30,7 @@ static const char cvs_ident[] = "$Id$"; #include "libmej.h" -static void memrec_add_var(memrec_t *, void *, size_t); +static void memrec_add_var(memrec_t *, const char *, unsigned long, void *, size_t); static void memrec_rem_var(memrec_t *, const char *, const char *, unsigned long, void *); static void memrec_chg_var(memrec_t *, const char *, const char *, unsigned long, void *, void *, size_t); static void memrec_dump_pointers(memrec_t *); @@ -60,7 +60,7 @@ memrec_init(void) } static void -memrec_add_var(memrec_t *memrec, void *ptr, size_t size) +memrec_add_var(memrec_t *memrec, const char *filename, unsigned long line, void *ptr, size_t size) { register ptr_t *p; @@ -70,9 +70,13 @@ memrec_add_var(memrec_t *memrec, void *ptr, size_t size) D_MEM(("Unable to reallocate pointer list -- %s\n", strerror(errno))); } p = memrec->ptrs + memrec->cnt - 1; - D_MEM(("Adding variable of size %lu at %8p. Storing as pointer #%lu at %8p (from %8p).\n", size, ptr, memrec->cnt, p, memrec->ptrs)); + D_MEM(("Adding variable (%8p, %lu bytes) from %s:%lu.\n", ptr, size, filename, line)); + D_MEM(("Storing as pointer #%lu at %8p (from %8p).\n", memrec->cnt, p, memrec->ptrs)); p->ptr = ptr; p->size = size; + strncpy(p->file, filename, LIBMEJ_FNAME_LEN); + p->file[LIBMEJ_FNAME_LEN] = 0; + p->line = line; } static void @@ -93,7 +97,8 @@ memrec_rem_var(memrec_t *memrec, const char *var, const char *filename, unsigned return; } memrec->cnt--; - D_MEM(("Removing variable %s (%8p) of size %lu which is stored at %8p (from %8p)\n", var, ptr, p->size, p, memrec->ptrs)); + D_MEM(("Removing variable %s (%8p) of size %lu\n", var, ptr, p->size)); + D_MEM(("Pointer #%lu is stored at %8p (from %8p)\n", i + 1, p, memrec->ptrs)); memmove(p, p + 1, sizeof(ptr_t) * (memrec->cnt - i)); memrec->ptrs = (ptr_t *) realloc(memrec->ptrs, sizeof(ptr_t) * memrec->cnt); } @@ -115,9 +120,12 @@ memrec_chg_var(memrec_t *memrec, const char *var, const char *filename, unsigned D_MEM(("ERROR: File %s, line %d attempted to realloc variable %s (%8p) which was not allocated with MALLOC/REALLOC\n", filename, line, var, oldp)); return; } - D_MEM(("Changing variable %s (%8p, %lu -> %8p, %lu) stored at %8p (from %8p)\n", var, oldp, p->size, newp, size, p, memrec->ptrs)); + D_MEM(("Changing variable %s (%8p, %lu -> %8p, %lu)\n", var, oldp, p->size, newp, size)); + D_MEM(("Pointer #%lu stored at %8p (from %8p)\n", i + 1, p, memrec->ptrs)); p->ptr = newp; p->size = size; + strncpy(p->file, filename, LIBMEJ_FNAME_LEN); + p->line = line; } static void @@ -129,21 +137,22 @@ memrec_dump_pointers(memrec_t *memrec) unsigned char buff[9]; ASSERT(memrec != NULL); - fprintf(LIBMEJ_DEBUG_FD, "DUMP :: %lu pointers stored.\n", memrec->cnt); - fprintf(LIBMEJ_DEBUG_FD, "DUMP :: Pointer | Address | Size | Offset | 00 01 02 03 04 05 06 07 | ASCII \n"); - fprintf(LIBMEJ_DEBUG_FD, "DUMP :: ---------+----------+--------+---------+-------------------------+---------\n"); + fprintf(LIBMEJ_DEBUG_FD, "PTR: %lu pointers stored.\n", memrec->cnt); + fprintf(LIBMEJ_DEBUG_FD, "PTR: Pointer | Filename | Line | Address | Size | Offset | 00 01 02 03 04 05 06 07 | ASCII \n"); + fprintf(LIBMEJ_DEBUG_FD, "PTR: ---------+----------------------+--------+----------+--------+---------+-------------------------+---------\n"); fflush(LIBMEJ_DEBUG_FD); len = sizeof(ptr_t) * memrec->cnt; memset(buff, 0, sizeof(buff)); /* First, dump the contents of the memrec->ptrs[] array. */ for (p = memrec->ptrs, j = 0; j < len; j += 8) { - fprintf(LIBMEJ_DEBUG_FD, "DUMP :: %07lu | %8p | %06lu | %07x | ", (unsigned long) 0, memrec->ptrs, (unsigned long) (sizeof(ptr_t) * memrec->cnt), (unsigned int) j); + fprintf(LIBMEJ_DEBUG_FD, "PTR: %07lu | %20s | %6lu | %8p | %06lu | %07x | ", (unsigned long) 0, "", (unsigned long) 0, memrec->ptrs, + (unsigned long) (sizeof(ptr_t) * memrec->cnt), (unsigned int) j); /* l is the number of characters we're going to output */ l = ((len - j < 8) ? (len - j) : (8)); /* Copy l bytes (up to 8) from memrec->ptrs[] (p) to buffer */ - memset(buff, 0, sizeof(buff)); memcpy(buff, ((char *) p) + j, l); + buff[l] = 0; for (k = 0; k < l; k++) { fprintf(LIBMEJ_DEBUG_FD, "%02x ", buff[k]); } @@ -162,11 +171,10 @@ memrec_dump_pointers(memrec_t *memrec) /* Add this pointer's size to our total */ total += p->size; for (j = 0; j < p->size; j += 8) { - fprintf(LIBMEJ_DEBUG_FD, "DUMP :: %07lu | %8p | %06lu | %07x | ", i + 1, p->ptr, (unsigned long) p->size, (unsigned int) j); + fprintf(LIBMEJ_DEBUG_FD, "PTR: %07lu | %20s | %6lu | %8p | %06lu | %07x | ", i + 1, NONULL(p->file), p->line, p->ptr, (unsigned long) p->size, (unsigned int) j); /* l is the number of characters we're going to output */ l = ((p->size - j < 8) ? (p->size - j) : (8)); /* Copy l bytes (up to 8) from p->ptr to buffer */ - memset(buff, 0, sizeof(buff)); memcpy(buff, ((char *) p->ptr) + j, l); buff[l] = 0; for (k = 0; k < l; k++) { @@ -182,7 +190,7 @@ memrec_dump_pointers(memrec_t *memrec) fflush(LIBMEJ_DEBUG_FD); } } - fprintf(LIBMEJ_DEBUG_FD, "DUMP :: Total allocated memory: %10lu bytes\n\n", total); + fprintf(LIBMEJ_DEBUG_FD, "PTR: Total allocated memory: %10lu bytes\n", total); fflush(LIBMEJ_DEBUG_FD); } @@ -190,12 +198,24 @@ static void memrec_dump_resources(memrec_t *memrec) { register ptr_t *p; - unsigned long i, j, k, l, total = 0; + unsigned long i, total; unsigned long len; - unsigned char buff[9]; ASSERT(memrec != NULL); + len = memrec->cnt; + fprintf(LIBMEJ_DEBUG_FD, "RES: %lu resources stored.\n", memrec->cnt); + fprintf(LIBMEJ_DEBUG_FD, "RES: Index | Resource ID | Filename | Line | Size \n"); + fprintf(LIBMEJ_DEBUG_FD, "RES: -------+-------------+----------------------+--------+--------\n"); + fflush(LIBMEJ_DEBUG_FD); + for (p = memrec->ptrs, i = 0, total = 0; i < len; i++, p++) { + total += p->size; + fprintf(LIBMEJ_DEBUG_FD, "RES: %5lu | 0x%08x | %20s | %6lu | %6lu\n", i, (unsigned) p->ptr, NONULL(p->file), p->line, (unsigned long) p->size); + /* Flush after every line in case we crash */ + fflush(LIBMEJ_DEBUG_FD); + } + fprintf(LIBMEJ_DEBUG_FD, "RES: Total size: %lu bytes\n", total); + fflush(LIBMEJ_DEBUG_FD); } /******************** MEMORY ALLOCATION INTERFACE ********************/ @@ -211,12 +231,12 @@ libmej_malloc(const char *filename, unsigned long line, size_t size) } #endif - D_MEM(("libmej_malloc(%lu) called at %s:%lu\n", size, filename, line)); + D_MEM(("%lu bytes requested at %s:%lu\n", size, filename, line)); temp = (void *) malloc(size); ASSERT_RVAL(temp != NULL, NULL); if (DEBUG_LEVEL >= DEBUG_MEM) { - memrec_add_var(&malloc_rec, temp, size); + memrec_add_var(&malloc_rec, filename, line, temp, size); } return (temp); } @@ -233,7 +253,7 @@ libmej_realloc(const char *var, const char *filename, unsigned long line, void * } #endif - D_MEM(("libmej_realloc(%lu) called for variable %s (%8p) at %s:%lu\n", size, var, ptr, filename, line)); + D_MEM(("Variable %s (%8p -> %lu) at %s:%lu\n", var, ptr, (unsigned long) size, filename, line)); if (ptr == NULL) { temp = (void *) libmej_malloc(__FILE__, __LINE__, size); } else { @@ -258,11 +278,11 @@ libmej_calloc(const char *filename, unsigned long line, size_t count, size_t siz } #endif - D_MEM(("libmej_calloc(%lu, %lu) called at %s:%lu\n", count, size, filename, line)); + D_MEM(("%lu units of %lu bytes each requested at %s:%lu\n", count, size, filename, line)); temp = (void *) calloc(count, size); ASSERT_RVAL(temp != NULL, NULL); if (DEBUG_LEVEL >= DEBUG_MEM) { - memrec_add_var(&malloc_rec, temp, size * count); + memrec_add_var(&malloc_rec, filename, line, temp, size * count); } return (temp); } @@ -277,7 +297,7 @@ libmej_free(const char *var, const char *filename, unsigned long line, void *ptr } #endif - D_MEM(("libmej_free() called for variable %s (%8p) at %s:%lu\n", var, ptr, filename, line)); + D_MEM(("Variable %s (%8p) at %s:%lu\n", var, ptr, filename, line)); if (ptr) { if (DEBUG_LEVEL >= DEBUG_MEM) { memrec_rem_var(&malloc_rec, var, filename, line, ptr); @@ -294,7 +314,7 @@ libmej_strdup(const char *var, const char *filename, unsigned long line, const c register char *newstr; register size_t len; - D_MEM(("libmej_strdup() called for variable %s (%8p) at %s:%lu\n", var, str, filename, line)); + D_MEM(("Variable %s (%8p) at %s:%lu\n", var, str, filename, line)); len = strlen(str) + 1; /* Copy NUL byte also */ newstr = (char *) libmej_malloc(filename, line, len); @@ -305,6 +325,7 @@ libmej_strdup(const char *var, const char *filename, unsigned long line, const c void libmej_dump_mem_tables(void) { + fprintf(LIBMEJ_DEBUG_FD, "Dumping memory allocation table:\n"); memrec_dump_pointers(&malloc_rec); } @@ -322,7 +343,7 @@ libmej_x_create_pixmap(const char *filename, unsigned long line, Display *d, Dra p = XCreatePixmap(d, win, w, h, depth); ASSERT_RVAL(p != None, None); if (DEBUG_LEVEL >= DEBUG_MEM) { - memrec_add_var(&pixmap_rec, (void *) p, w * h * (depth / 8)); + memrec_add_var(&pixmap_rec, filename, line, (void *) p, w * h * (depth / 8)); } return (p); } @@ -344,6 +365,7 @@ libmej_x_free_pixmap(const char *var, const char *filename, unsigned long line, void libmej_dump_pixmap_tables(void) { + fprintf(LIBMEJ_DEBUG_FD, "Dumping X11 Pixmap allocation table:\n"); memrec_dump_resources(&pixmap_rec); } @@ -361,7 +383,7 @@ libmej_x_create_gc(const char *filename, unsigned long line, Display *d, Drawabl gc = XCreateGC(d, win, mask, gcv); ASSERT_RVAL(gc != None, None); if (DEBUG_LEVEL >= DEBUG_MEM) { - memrec_add_var(&gc_rec, (void *) gc, sizeof(XGCValues)); + memrec_add_var(&gc_rec, filename, line, (void *) gc, sizeof(XGCValues)); } return (gc); } @@ -383,5 +405,6 @@ libmej_x_free_gc(const char *var, const char *filename, unsigned long line, Disp void libmej_dump_gc_tables(void) { + fprintf(LIBMEJ_DEBUG_FD, "Dumping X11 GC allocation table:\n"); memrec_dump_resources(&gc_rec); } diff --git a/libmej/msgs.c b/libmej/msgs.c index e8a4dc9..1e982dd 100644 --- a/libmej/msgs.c +++ b/libmej/msgs.c @@ -36,9 +36,9 @@ libmej_dprintf(const char *format, ...) int n; va_start(args, format); - n = vfprintf(stderr, format, args); + n = vfprintf(LIBMEJ_DEBUG_FD, format, args); va_end(args); - fflush(stderr); + fflush(LIBMEJ_DEBUG_FD); return (n); } diff --git a/src/command.c b/src/command.c index c086aa0..f75131b 100644 --- a/src/command.c +++ b/src/command.c @@ -2736,7 +2736,7 @@ v_writeBig(int f, char *d, int len) } if (v_bufend < v_bufptr + len) { /* still won't fit: get more space */ - /* Don't use Xtlibmej_realloc because an error is not fatal. */ + /* Don't use XtRealloc because an error is not fatal. */ int size = v_bufptr - v_buffer; /* save across realloc */ v_buffer = REALLOC(v_buffer, size + len); diff --git a/src/font.c b/src/font.c index 9ffc298..db89cae 100644 --- a/src/font.c +++ b/src/font.c @@ -62,10 +62,11 @@ static unsigned char get_corner(const char *corner); void eterm_font_add(char ***plist, const char *fontname, unsigned char idx) { - char **flist = *plist; + char **flist; - D_FONT(("eterm_font_add(\"%s\", %u): plist == %8p\n", NONULL(fontname), (unsigned int) idx, plist)); + D_FONT(("Adding \"%s\" at %u (%8p)\n", NONULL(fontname), (unsigned int) idx, plist)); ASSERT(plist != NULL); + flist = *plist; if (idx >= font_cnt) { unsigned char new_size = sizeof(char *) * (idx + 1); @@ -74,17 +75,17 @@ eterm_font_add(char ***plist, const char *fontname, unsigned char idx) { etfonts = (char **) REALLOC(etfonts, new_size); #ifdef MULTI_CHARSET etmfonts = (char **) REALLOC(etmfonts, new_size); - D_FONT((" -> libmej_reallocating fonts lists to a size of %u bytes gives %8p/%8p\n", new_size, etfonts, etmfonts)); + D_FONT((" -> Reallocated font lists: %u bytes at %8p/%8p\n", new_size, etfonts, etmfonts)); #else - D_FONT((" -> libmej_reallocating fonts list to a size of %u bytes gives %8p\n", new_size, etfonts)); + D_FONT((" -> Reallocated font list: %u bytes at %8p\n", new_size, etfonts)); #endif } else { etfonts = (char **) MALLOC(new_size); #ifdef MULTI_CHARSET etmfonts = (char **) MALLOC(new_size); - D_FONT((" -> Allocating fonts lists to a size of %u bytes gives %8p/%8p\n", new_size, etfonts, etmfonts)); + D_FONT((" -> Allocated font lists: %u bytes at %8p/%8p\n", new_size, etfonts, etmfonts)); #else - D_FONT((" -> Allocating fonts list to a size of %u bytes gives %8p\n", new_size, etfonts)); + D_FONT((" -> Allocating font list: %u bytes at %8p\n", new_size, etfonts)); #endif } MEMSET(etfonts + font_cnt, 0, sizeof(char *) * (idx - font_cnt + 1)); diff --git a/src/options.c b/src/options.c index cd48043..e4f913e 100644 --- a/src/options.c +++ b/src/options.c @@ -1228,8 +1228,7 @@ conf_register_context(char *name, ctx_handler_t handler) { } context[ctx_idx].name = STRDUP(name); context[ctx_idx].handler = handler; - D_OPTIONS(("conf_register_context(): Added context \"%s\" with ID %d and handler 0x%08x\n", - context[ctx_idx].name, ctx_idx, context[ctx_idx].handler)); + D_OPTIONS(("Added context \"%s\" with ID %d and handler 0x%08x\n", context[ctx_idx].name, ctx_idx, context[ctx_idx].handler)); return (ctx_idx); } diff --git a/src/pixmap.h b/src/pixmap.h index 7a49d86..72a221e 100644 --- a/src/pixmap.h +++ b/src/pixmap.h @@ -66,9 +66,9 @@ typedef void *Imlib_Color_Modifier; # define IMLIB_FREE_PIXMAP(p) NOP #endif #define LIBMEJ_X_CREATE_PIXMAP(w, h) X_CREATE_PIXMAP(Xdisplay, (TermWin.parent ? TermWin.parent : Xroot), (w), (h), Xdepth) -#define LIBMEJ_X_FREE_PIXMAP(p) X_FREE_PIXMAP(Xdisplay, (p)) +#define LIBMEJ_X_FREE_PIXMAP(p) X_FREE_PIXMAP(Xdisplay, p) #define LIBMEJ_X_CREATE_GC(f, gcv) X_CREATE_GC(Xdisplay, (TermWin.parent ? TermWin.parent : Xroot), (f), (gcv)) -#define LIBMEJ_X_FREE_GC(gc) X_FREE_GC(Xdisplay, (gc)) +#define LIBMEJ_X_FREE_GC(gc) X_FREE_GC(Xdisplay, gc) #define GEOM_LEN 19 diff --git a/src/term.c b/src/term.c index 91f2399..5ca394a 100644 --- a/src/term.c +++ b/src/term.c @@ -177,7 +177,7 @@ get_modifiers(void) } } -/* To handle buffer overflows properly, we must malloc a buffer. libmej_free it when done. */ +/* To handle buffer overflows properly, we must malloc a buffer. Free it when done. */ #ifdef USE_XIM # define LK_RET() do {if (kbuf_alloced) FREE(kbuf); return;} while (0) #else diff --git a/src/utmp.c b/src/utmp.c index 422fac4..4a0b2d2 100644 --- a/src/utmp.c +++ b/src/utmp.c @@ -68,7 +68,7 @@ static const char cvs_ident[] = "$Id$"; # ifdef HAVE_LASTLOG_H # include # endif -# if defined(__libmej_freeBSD__) || defined(__NetBSD__) || defined(__bsdi__) +# if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__bsdi__) # include # endif @@ -83,7 +83,7 @@ static const char cvs_ident[] = "$Id$"; /* don't go off end of ut_id & remember if an entry has been made */ # ifndef HAVE_UTEMPTER -# if defined(USE_SYSV_UTMP) || defined(__libmej_freeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) +# if defined(USE_SYSV_UTMP) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) static char ut_id[5]; /* remember if entry to utmp made */ # else static int utmp_pos; /* BSD position of utmp-stamp */ @@ -274,7 +274,7 @@ remove_utmp_entry(void) # else /* USE_SYSV_UTMP */ /* BSD utmp support */ -# if defined(__libmej_freeBSD__) || defined(__NetBSD__) || defined(__bsdi__) +# if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__bsdi__) /* used to hold the line we are using */ static char ut_line[32]; @@ -322,7 +322,7 @@ b_login(struct utmp *ut) } } -# else /* __libmej_freeBSD__ || NetBSD || BSDI */ +# else /* __FreeBSD__ || NetBSD || BSDI */ static int utmp_pos = 0; /* position of utmp-stamp */ /*----------------------------------------------------------------------* @@ -380,7 +380,7 @@ write_utmp(struct utmp *putmp) return rval; } -# endif /* __libmej_freeBSD__ || NetBSD || BSDI */ +# endif /* __FreeBSD__ || NetBSD || BSDI */ void add_utmp_entry(const char *pty, const char *hostname, int fd) @@ -400,7 +400,7 @@ add_utmp_entry(const char *pty, const char *hostname, int fd) return; } -# if defined(__libmej_freeBSD__) || defined(__NetBSD__) || defined(__bsdi__) +# if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__bsdi__) strncpy(ut_line, pty, 31); strncpy(utmp.ut_line, pty, UT_LINESIZE); @@ -409,7 +409,7 @@ add_utmp_entry(const char *pty, const char *hostname, int fd) utmp.ut_time = time(NULL); b_login(&utmp); -# else /* __libmej_freeBSD__ || NetBSD || BSDI */ +# else /* __FreeBSD__ || NetBSD || BSDI */ strncpy(utmp.ut_line, ut_id, sizeof(utmp.ut_line)); strncpy(utmp.ut_name, pwent->pw_name, sizeof(utmp.ut_name)); strncpy(utmp.ut_host, hostname, sizeof(utmp.ut_host)); @@ -428,10 +428,10 @@ add_utmp_entry(const char *pty, const char *hostname, int fd) void remove_utmp_entry(void) { -# if defined(__libmej_freeBSD__) || defined(__NetBSD__) || defined(__bsdi__) +# if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__bsdi__) logout(ut_line); logwtmp(ut_line, "", ""); -# else /* __libmej_freeBSD__ */ +# else /* __FreeBSD__ */ FILE *fd; privileges(INVOKE); @@ -445,7 +445,7 @@ remove_utmp_entry(void) fclose(fd); } privileges(REVERT); -# endif /* __libmej_freeBSD__ || NetBSD || BSDI */ +# endif /* __FreeBSD__ || NetBSD || BSDI */ } # endif /* USE_SYSV_UTMP */