X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-case-file.c;h=156266339fdc8c6c48494f5eecc1dc00ec69f038;hb=e850a37743edb8035b15c4ed313a2b8fdafdc696;hp=9d3e3a14b4c07e5affe31f0834e4dabbfa8fde4c;hpb=f5c108becd49d78f4898cab11352291f5689d24e;p=pspp diff --git a/src/ui/gui/psppire-case-file.c b/src/ui/gui/psppire-case-file.c index 9d3e3a14b4..156266339f 100644 --- a/src/ui/gui/psppire-case-file.c +++ b/src/ui/gui/psppire-case-file.c @@ -32,7 +32,7 @@ #include #include "xalloc.h" -#include "xallocsa.h" +#include "xmalloca.h" /* --- prototypes --- */ static void psppire_case_file_class_init (PsppireCaseFileClass *class); @@ -133,7 +133,8 @@ psppire_case_file_finalize (GObject *object) { PsppireCaseFile *cf = PSPPIRE_CASE_FILE (object); - datasheet_destroy (cf->datasheet); + if ( cf->accessible) + datasheet_destroy (cf->datasheet); G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -142,6 +143,7 @@ static void psppire_case_file_init (PsppireCaseFile *cf) { cf->datasheet = NULL; + cf->accessible = FALSE; } @@ -152,24 +154,17 @@ psppire_case_file_init (PsppireCaseFile *cf) * Creates a new #PsppireCaseFile. */ PsppireCaseFile* -psppire_case_file_new (void) +psppire_case_file_new (struct casereader *reader) { PsppireCaseFile *cf = g_object_new (G_TYPE_PSPPIRE_CASE_FILE, NULL); - cf->datasheet = datasheet_create (NULL); + cf->datasheet = datasheet_create (reader); + cf->accessible = TRUE; return cf; } -void -psppire_case_file_replace_datasheet (PsppireCaseFile *cf, struct datasheet *ds) -{ - cf->datasheet = ds; -} - - - gboolean psppire_case_file_delete_cases (PsppireCaseFile *cf, gint n_cases, gint first) { @@ -234,6 +229,7 @@ inline gint psppire_case_file_get_case_count (const PsppireCaseFile *cf) { g_return_val_if_fail (cf, FALSE); + g_return_val_if_fail (cf->accessible, FALSE); if ( ! cf->datasheet) return 0; @@ -316,7 +312,7 @@ psppire_case_file_data_in (PsppireCaseFile *cf, gint casenum, gint idx, g_return_val_if_fail (idx < datasheet_get_column_cnt (cf->datasheet), FALSE); width = fmt_var_width (fmt); - value = xallocsa (value_cnt_from_width (width) * sizeof *value); + value = xmalloca (value_cnt_from_width (width) * sizeof *value); ok = (datasheet_get_value (cf->datasheet, casenum, idx, value, width) && data_in (input, fmt->type, 0, 0, value, width) && datasheet_put_value (cf->datasheet, casenum, idx, value, width)); @@ -354,6 +350,7 @@ psppire_case_file_insert_values (PsppireCaseFile *cf, { union value *values; g_return_val_if_fail (cf, FALSE); + g_return_val_if_fail (cf->accessible, FALSE); if ( ! cf->datasheet ) cf->datasheet = datasheet_create (NULL); @@ -377,3 +374,14 @@ psppire_case_file_get_case (const PsppireCaseFile *cf, gint casenum, return datasheet_get_row (cf->datasheet, casenum, c); } + + + +struct casereader * +psppire_case_file_make_reader (PsppireCaseFile *cf) +{ + struct casereader *r = datasheet_make_reader (cf->datasheet); + cf->accessible = FALSE; + return r; +} +