projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ODS reader: Make the destroy method safer.
[pspp]
/
src
/
data
/
datasheet.c
diff --git
a/src/data/datasheet.c
b/src/data/datasheet.c
index ad8333256c0bd2732692d107910c85ae2ef8fb6d..1175e20403eeb0fed73cf95a972beddb860766f8 100644
(file)
--- a/
src/data/datasheet.c
+++ b/
src/data/datasheet.c
@@
-1,5
+1,5
@@
/* PSPP - a program for statistical analysis.
/* PSPP - a program for statistical analysis.
- Copyright (C) 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2007, 2009, 2010, 2011
, 2012
Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-509,15
+509,19
@@
datasheet_resize_column (struct datasheet *ds, size_t column, int new_width,
if (!source_read (&old_col, prow, &src))
{
/* FIXME: back out col changes. */
if (!source_read (&old_col, prow, &src))
{
/* FIXME: back out col changes. */
-
return false
;
+
break
;
}
resize_cb (&src, &dst, resize_cb_aux);
if (!source_write (col, prow, &dst))
{
/* FIXME: back out col changes. */
}
resize_cb (&src, &dst, resize_cb_aux);
if (!source_write (col, prow, &dst))
{
/* FIXME: back out col changes. */
-
return false
;
+
break
;
}
}
}
}
+ value_destroy (&src, old_width);
+ value_destroy (&dst, new_width);
+ if (lrow < n_rows)
+ return false;
release_source (ds, old_col.source);
}
release_source (ds, old_col.source);
}
@@
-926,8
+930,7
@@
axis_hash (const struct axis *axis, struct md4_ctx *ctx)
md4_process_bytes (&size, sizeof size, ctx);
}
md4_process_bytes (&size, sizeof size, ctx);
}
- for (rsn = range_set_first (axis->available); rsn != NULL;
- rsn = range_set_next (axis->available, rsn))
+ RANGE_SET_FOR_EACH (rsn, axis->available)
{
unsigned long int start = range_set_node_get_start (rsn);
unsigned long int end = range_set_node_get_end (rsn);
{
unsigned long int start = range_set_node_get_start (rsn);
unsigned long int end = range_set_node_get_end (rsn);
@@
-978,7
+981,7
@@
static void
axis_make_available (struct axis *axis,
unsigned long int start, unsigned long int width)
{
axis_make_available (struct axis *axis,
unsigned long int start, unsigned long int width)
{
- range_set_
insert
(axis->available, start, width);
+ range_set_
set1
(axis->available, start, width);
}
/* Extends the total physical length of AXIS by WIDTH and returns
}
/* Extends the total physical length of AXIS by WIDTH and returns
@@
-1228,7
+1231,7
@@
source_create_empty (size_t n_bytes)
size_t row_size = n_bytes + 4 * sizeof (void *);
size_t max_memory_rows = settings_get_workspace () / row_size;
source->avail = range_set_create ();
size_t row_size = n_bytes + 4 * sizeof (void *);
size_t max_memory_rows = settings_get_workspace () / row_size;
source->avail = range_set_create ();
- range_set_
insert
(source->avail, 0, n_bytes);
+ range_set_
set1
(source->avail, 0, n_bytes);
source->data = sparse_xarray_create (n_bytes, MAX (max_memory_rows, 4));
source->backing = NULL;
source->backing_rows = 0;
source->data = sparse_xarray_create (n_bytes, MAX (max_memory_rows, 4));
source->backing = NULL;
source->backing_rows = 0;
@@
-1247,7
+1250,7
@@
source_create_casereader (struct casereader *reader)
size_t n_columns;
size_t i;
size_t n_columns;
size_t i;
- range_set_
delete
(source->avail, 0, n_bytes);
+ range_set_
set0
(source->avail, 0, n_bytes);
source->backing = reader;
source->backing_rows = casereader_count_cases (reader);
source->backing = reader;
source->backing_rows = casereader_count_cases (reader);
@@
-1301,7
+1304,7
@@
static void
source_release_column (struct source *source, int ofs, int width)
{
assert (width >= 0);
source_release_column (struct source *source, int ofs, int width)
{
assert (width >= 0);
- range_set_
insert
(source->avail, ofs, width_to_n_bytes (width));
+ range_set_
set1
(source->avail, ofs, width_to_n_bytes (width));
if (source->backing != NULL)
source->n_used--;
}
if (source->backing != NULL)
source->n_used--;
}