X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fdatasheet.c;h=de59e73fe842f4fa94009d24b626cc9157464306;hb=32bcf82d7525c3e50d63064ff32b1545989836b8;hp=fa24d8ce77014e980cb79e4700ffc63832c5d061;hpb=bd17d2af982332ee1791998361b1ac6731fe14fa;p=pspp diff --git a/src/data/datasheet.c b/src/data/datasheet.c index fa24d8ce77..de59e73fe8 100644 --- a/src/data/datasheet.c +++ b/src/data/datasheet.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 2007, 2009 Free Software Foundation, Inc. + Copyright (C) 2007, 2009, 2010 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 @@ -275,7 +275,7 @@ datasheet_destroy (struct datasheet *ds) const struct caseproto * datasheet_get_proto (const struct datasheet *ds_) { - struct datasheet *ds = (struct datasheet *) ds_; + struct datasheet *ds = CONST_CAST (struct datasheet *, ds_); if (ds->proto == NULL) { size_t i; @@ -360,6 +360,8 @@ datasheet_insert_column (struct datasheet *ds, { struct column *col; + assert (before <= ds->n_columns); + ds->columns = xnrealloc (ds->columns, ds->n_columns + 1, sizeof *ds->columns); insert_element (ds->columns, ds->n_columns, sizeof *ds->columns, before); @@ -382,6 +384,8 @@ datasheet_insert_column (struct datasheet *ds, void datasheet_delete_columns (struct datasheet *ds, size_t start, size_t n) { + assert (start + n <= ds->n_columns); + if (n > 0) { size_t i; @@ -411,6 +415,9 @@ datasheet_move_columns (struct datasheet *ds, size_t old_start, size_t new_start, size_t n) { + assert (old_start + n <= ds->n_columns); + assert (new_start + n <= ds->n_columns); + move_range (ds->columns, ds->n_columns, sizeof *ds->columns, old_start, new_start, n); @@ -548,7 +555,7 @@ datasheet_get_row (const struct datasheet *ds, casenumber row) { size_t n_columns = datasheet_get_n_columns (ds); struct ccase *c = case_create (datasheet_get_proto (ds)); - if (rw_case ((struct datasheet *) ds, OP_READ, + if (rw_case (CONST_CAST (struct datasheet *, ds), OP_READ, row, 0, n_columns, case_data_all_rw (c))) return c; else @@ -582,7 +589,8 @@ datasheet_get_value (const struct datasheet *ds, casenumber row, size_t column, union value *value) { assert (row >= 0); - return rw_case ((struct datasheet *) ds, OP_READ, row, column, 1, value); + return rw_case (CONST_CAST (struct datasheet *, ds), OP_READ, + row, column, 1, value); } /* Stores VALUE into DS in the given ROW and COLUMN. VALUE must