Fri Sep 1 00:39:41 PDT 2000 Michael Jennings <mej@eterm.org>

That should fix the crashes.  Somehow I managed to temporarily forget
	about pointer arithmetic.  And somehow I thought trying to dereference
	a pixmap ID would be a good thing.  Sigh.  I need sleep.


SVN revision: 3292
This commit is contained in:
Michael Jennings 2000-09-01 07:23:08 +00:00
parent cdbb53b4bf
commit f1bf2bfb54
4 changed files with 41 additions and 25 deletions

View File

@ -3852,3 +3852,10 @@ Thu Aug 31 23:02:10 PDT 2000 Michael Jennings <mej@eterm.org>
libmej using the existing allocation tracking routines.
-------------------------------------------------------------------------------
Fri Sep 1 00:39:41 PDT 2000 Michael Jennings <mej@eterm.org>
That should fix the crashes. Somehow I managed to temporarily forget
about pointer arithmetic. And somehow I thought trying to dereference
a pixmap ID would be a good thing. Sigh. I need sleep.
-------------------------------------------------------------------------------

View File

@ -33,7 +33,8 @@ static const char cvs_ident[] = "$Id$";
static void memrec_add_var(memrec_t *, 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(memrec_t *);
static void memrec_dump_pointers(memrec_t *);
static void memrec_dump_resources(memrec_t *);
/*
* These're added for a pretty obvious reason -- they're implemented towards
@ -68,8 +69,8 @@ memrec_add_var(memrec_t *memrec, void *ptr, size_t size)
if ((memrec->ptrs = (ptr_t *) realloc(memrec->ptrs, sizeof(ptr_t) * memrec->cnt)) == NULL) {
D_MEM(("Unable to reallocate pointer list -- %s\n", strerror(errno)));
}
D_MEM(("Adding variable of size %lu at %8p\n", size, ptr));
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));
p->ptr = ptr;
p->size = size;
}
@ -92,7 +93,7 @@ memrec_rem_var(memrec_t *memrec, const char *var, const char *filename, unsigned
return;
}
memrec->cnt--;
D_MEM(("Removing variable of size %lu at %8p\n", p->size, p->ptr));
D_MEM(("Removing variable %s (%8p) of size %lu which is stored at %8p (from %8p)\n", var, ptr, p->size, 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);
}
@ -114,13 +115,13 @@ 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 of %lu bytes at %8p to one of %lu bytes at %8p\n", p->size, p->ptr, size, newp));
D_MEM(("Changing variable %s (%8p, %lu -> %8p, %lu) stored at %8p (from %8p)\n", var, oldp, p->size, newp, size, p, memrec->ptrs));
p->ptr = newp;
p->size = size;
}
static void
memrec_dump(memrec_t *memrec)
memrec_dump_pointers(memrec_t *memrec)
{
register ptr_t *p;
unsigned long i, j, k, l, total = 0;
@ -136,12 +137,13 @@ memrec_dump(memrec_t *memrec)
memset(buff, 0, sizeof(buff));
/* First, dump the contents of the memrec->ptrs[] array. */
for (p = memrec->ptrs, j = 0; j < len; p++, j += 8) {
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);
/* 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 */
memcpy(buff, p + j, l);
memset(buff, 0, sizeof(buff));
memcpy(buff, ((char *) p) + j, l);
for (k = 0; k < l; k++) {
fprintf(LIBMEJ_DEBUG_FD, "%02x ", buff[k]);
}
@ -156,7 +158,7 @@ memrec_dump(memrec_t *memrec)
}
/* Now print out each pointer and its contents. */
for (p = memrec->ptrs, i = 0; i < memrec->cnt; p++, i++) {
for (i = 0; i < memrec->cnt; p++, i++) {
/* Add this pointer's size to our total */
total += p->size;
for (j = 0; j < p->size; j += 8) {
@ -164,7 +166,9 @@ memrec_dump(memrec_t *memrec)
/* 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 */
memcpy(buff, p->ptr + j, l);
memset(buff, 0, sizeof(buff));
memcpy(buff, ((char *) p->ptr) + j, l);
buff[l] = 0;
for (k = 0; k < l; k++) {
fprintf(LIBMEJ_DEBUG_FD, "%02x ", buff[k]);
}
@ -182,6 +186,18 @@ memrec_dump(memrec_t *memrec)
fflush(LIBMEJ_DEBUG_FD);
}
static void
memrec_dump_resources(memrec_t *memrec)
{
register ptr_t *p;
unsigned long i, j, k, l, total = 0;
unsigned long len;
unsigned char buff[9];
ASSERT(memrec != NULL);
}
/******************** MEMORY ALLOCATION INTERFACE ********************/
void *
libmej_malloc(const char *filename, unsigned long line, size_t size)
@ -289,7 +305,7 @@ libmej_strdup(const char *var, const char *filename, unsigned long line, const c
void
libmej_dump_mem_tables(void)
{
memrec_dump(&malloc_rec);
memrec_dump_pointers(&malloc_rec);
}
@ -328,7 +344,7 @@ libmej_x_free_pixmap(const char *var, const char *filename, unsigned long line,
void
libmej_dump_pixmap_tables(void)
{
memrec_dump(&pixmap_rec);
memrec_dump_resources(&pixmap_rec);
}
@ -367,5 +383,5 @@ libmej_x_free_gc(const char *var, const char *filename, unsigned long line, Disp
void
libmej_dump_gc_tables(void)
{
memrec_dump(&gc_rec);
memrec_dump_resources(&gc_rec);
}

View File

@ -252,6 +252,7 @@ safe_print_string(char *str, unsigned long len)
if (n + 2 >= rb_size) {
rb_size *= 2;
ret_buff = (char *) REALLOC(ret_buff, rb_size + 1);
p = ret_buff + n;
}
if (*str < ' ') {
*p++ = '^';

View File

@ -1579,7 +1579,7 @@ shell_expand(char *s)
register char *pbuff = s, *tmp1;
register unsigned long j, k, l = 0;
char new[CONFIG_BUFF];
unsigned char eval_escape = 1, eval_var = 1, eval_exec = 1, eval_func = 1, in_single = 0, in_double = 0;
unsigned char in_single = 0, in_double = 0;
unsigned long cnt1 = 0, cnt2 = 0;
const unsigned long max = CONFIG_BUFF - 1;
char *Command, *Output, *EnvVar;
@ -1594,7 +1594,7 @@ shell_expand(char *s)
switch (*pbuff) {
case '~':
D_OPTIONS(("Tilde detected.\n"));
if (eval_var) {
if (!in_single && !in_double) {
strncpy(new + j, getenv("HOME"), max - j);
cnt1 = strlen(getenv("HOME")) - 1;
cnt2 = max - j - 1;
@ -1605,7 +1605,7 @@ shell_expand(char *s)
break;
case '\\':
D_OPTIONS(("Escape sequence detected.\n"));
if (eval_escape || (in_single && *(pbuff + 1) == '\'')) {
if (!in_single || (in_single && *(pbuff + 1) == '\'')) {
switch (tolower(*(++pbuff))) {
case 'n':
new[j] = '\n';
@ -1699,7 +1699,7 @@ shell_expand(char *s)
case '`':
#ifdef ALLOW_BACKQUOTE_EXEC
D_OPTIONS(("Backquotes detected. Evaluating expression.\n"));
if (eval_exec) {
if (!in_single) {
Command = (char *) MALLOC(CONFIG_BUFF);
l = 0;
for (pbuff++; *pbuff && *pbuff != '`' && l < max; pbuff++, l++) {
@ -1733,7 +1733,7 @@ shell_expand(char *s)
break;
case '$':
D_OPTIONS(("Environment variable detected. Evaluating.\n"));
if (eval_var) {
if (!in_single) {
EnvVar = (char *) MALLOC(128);
switch (*(++pbuff)) {
case '{':
@ -1776,16 +1776,8 @@ shell_expand(char *s)
case '\'':
D_OPTIONS(("Single quotes detected.\n"));
if (in_single) {
eval_var = 1;
eval_exec = 1;
eval_func = 1;
eval_escape = 1;
in_single = 0;
} else {
eval_var = 0;
eval_exec = 0;
eval_func = 0;
eval_escape = 0;
in_single = 1;
}
new[j] = *pbuff;