-/* PSPP - a program for statistical analysis.
+/* pspp - a program for statistical analysis.
Copyright (C) 2007, 2009, 2010, 2013 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
bool ok = true;
if (reader != NULL)
{
- // reader->class->destroy (reader, reader->aux);
- // ok = taint_destroy (reader->taint);
- // caseproto_unref (reader->proto);
- // free (reader);
+ reader->class->destroy (reader, reader->aux);
+ ok = taint_destroy (reader->taint);
+ caseproto_unref (reader->proto);
+ free (reader);
}
return ok;
}
casereader_count_cases__ (const struct casereader *reader,
casenumber max_cases)
{
- struct casereader *clone = casereader_clone (reader);
- casenumber n_cases = casereader_advance (clone, max_cases);
+ struct casereader *clone;
+ casenumber n_cases;
+
+ /* This seems to avoid a bug in Gcc 4.4.5 where, upon
+ return from this function, the stack appeared corrupt,
+ and the program returned to the wrong address. Oddly
+ the problem only manifested itself when used in conjunction
+ with the ODS reader, in code such as:
+
+ GET DATA /TYPE=ODS ....
+ LIST.
+ */
#if (__GNUC__ == 4 ) && (__GNUC_MINOR__ == 4)
- // volatile int x = 1;
+ volatile int x = 1; x++;
#endif
- // casereader_destroy (clone);
+
+ clone = casereader_clone (reader);
+ n_cases = casereader_advance (clone, max_cases);
+ casereader_destroy (clone);
return n_cases;
}