malloc bug fixes

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@424 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Linas Vepstas 1998-01-13 21:29:14 +00:00
parent 75c1407b95
commit 87e2ac2d97

View File

@ -68,6 +68,11 @@ xaccInitTable (Table * table, int tile_rows, int tile_cols)
table->num_tile_cols = tile_cols; table->num_tile_cols = tile_cols;
/* create an empty table */ /* create an empty table */
if (0 == num_phys_rows) {
table->entries = NULL;
return;
}
table->entries = (char ***) malloc (num_phys_rows * sizeof (char **)); table->entries = (char ***) malloc (num_phys_rows * sizeof (char **));
for (i=0; i<num_phys_rows; i++) { for (i=0; i<num_phys_rows; i++) {
table->entries[i] = (char **) malloc (num_phys_cols * sizeof (char *)); table->entries[i] = (char **) malloc (num_phys_cols * sizeof (char *));
@ -367,12 +372,9 @@ modifyCB (Widget mw, XtPointer cd, XtPointer cb)
} else { } else {
/* update data. bounds check done earlier */ /* update data. bounds check done earlier */
free (table->entries[row][col]); free (table->entries[row][col]);
table->entries[row][col] = strdup (newval); table->entries[row][col] = newval;
} }
} }
/* ==================================================== */ /* ==================================================== */
@ -385,6 +387,7 @@ leaveCB (Widget mw, XtPointer cd, XtPointer cb)
int row, col; int row, col;
int rel_row, rel_col; int rel_row, rel_col;
const char * (*leave) (struct _SingleCell *, const char *); const char * (*leave) (struct _SingleCell *, const char *);
char * newval;
table = (Table *) cd; table = (Table *) cd;
arr = table->cursor; arr = table->cursor;
@ -411,12 +414,14 @@ leaveCB (Widget mw, XtPointer cd, XtPointer cb)
val = cbs->value; val = cbs->value;
retval = leave (arr->cells[rel_row][rel_col], val); retval = leave (arr->cells[rel_row][rel_col], val);
if (NULL == retval) retval = ""; newval = (char *) retval;
if (val == retval) newval = strdup (retval);
if (NULL == retval) newval = strdup ("");
/* save whatever was returned */ /* save whatever was returned */
if (table->entries[row][col]) free (table->entries[row][col]); if (table->entries[row][col]) free (table->entries[row][col]);
table->entries[row][col] = (char *) retval; table->entries[row][col] = newval;
cbs->value = strdup (retval); cbs->value = strdup (newval);
} else { } else {
if (table->entries[row][col]) free (table->entries[row][col]); if (table->entries[row][col]) free (table->entries[row][col]);
table->entries[row][col] = strdup (cbs->value); table->entries[row][col] = strdup (cbs->value);