Fix some memory leaks
[pspp] / src / data / spreadsheet-reader.c
index e34fcb38faa8045e216ffc99bc0c2e179b437f8f..882cfac9cc02f501e02dfa8d5f7555da0fc8b7ae 100644 (file)
 
 #include "spreadsheet-reader.h"
 
+#include "gnumeric-reader.h"
+#include "ods-reader.h"
+
 #include <libpspp/str.h>
 #include <stdio.h>
 #include <string.h>
-
+#include <gl/xalloc.h>
+#include <gl/c-xvasprintf.h>
+#include <stdlib.h>
 
 struct spreadsheet * 
 spreadsheet_open (const char *filename)
 {
   struct spreadsheet *ss = NULL;
 
-  ss = gnumeric_probe (filename);
+  ss = ods_probe (filename, true);
   
   return ss;
 }
 
 void 
-spreadsheet_close (struct spreadsheet *spreadsheet)
+spreadsheet_close (UNUSED struct spreadsheet *spreadsheet)
 {
 }
 
@@ -107,7 +112,7 @@ int_to_ps26 (int i)
   i -= lower;
   i += base;
 
-  ret = malloc (exp);
+  ret = xmalloc (exp + 1);
 
   exp = 0;
   do
@@ -126,9 +131,18 @@ int_to_ps26 (int i)
 char *
 create_cell_ref (int col0, int row0, int coli, int rowi)
 {
-  char *cs0 =  int_to_ps26 (col0);
-  char *csi =  int_to_ps26 (coli);
-  char *s =  c_xasprintf ("%s%d:%s%ld",
+  char *cs0 ;
+  char *csi ;
+  char *s ;
+
+  if ( col0 < 0) return NULL;
+  if ( rowi < 0) return NULL;
+  if ( coli < 0) return NULL;
+  if ( row0 < 0) return NULL;
+
+  cs0 =  int_to_ps26 (col0);
+  csi =  int_to_ps26 (coli);
+  s =  c_xasprintf ("%s%d:%s%d",
                         cs0, row0 + 1,
                         csi, rowi + 1);
   free (cs0);