fix core dump

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@1022 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Linas Vepstas 1998-08-22 22:42:44 +00:00
parent 133918f416
commit 3dd3a1a1f4
2 changed files with 27 additions and 5 deletions

View File

@ -636,6 +636,11 @@ xaccInitSplitRegister (SplitRegister *reg, int type)
void
xaccConfigSplitRegister (SplitRegister *reg, int newtype)
{
if (!reg) return;
/* before reconfiguring, clean up any messy state that may be lying about */
xaccVerifyCursorPosition (reg->table, -1, -1);
reg->type = newtype;
configLayout (reg);
configCursors (reg);

View File

@ -576,14 +576,31 @@ void
xaccVerifyCursorPosition (Table *table, int phys_row, int phys_col)
{
int virt_row, virt_col;
int do_commit = 0;
/* compute the virtual position */
if (!table) return;
/* Someone may be trying to intentionally invalidate the cursor,
* in which case the physical addresses could be out of bounds.
* For example, in order to unmap it in preparation for a reconfig.
* So, if the specified location is out of bounds, then
* the cursor MUST be moved.
*/
if ((0 > phys_row) || (0 > phys_col)) do_commit = 1;
if (phys_row >= table->num_phys_rows) do_commit = 1;
if (phys_col >= table->num_phys_cols) do_commit = 1;
/* Hmm, phys position is valid. Check the virtual position. */
if (!do_commit) {
virt_row = table->locators[phys_row][phys_col]->virt_row;
virt_col = table->locators[phys_row][phys_col]->virt_col;
if ((virt_row != table->current_cursor_virt_row) ||
(virt_col != table->current_cursor_virt_col)) {
(virt_col != table->current_cursor_virt_col)) do_commit = 1;
}
if (do_commit) {
/* before leaving the current virtual position,
* commit any edits that have been accumulated
* in the cursor */