diff src/ls-mat5.cc @ 6292:3588fc904484

[project @ 2007-02-09 08:33:42 by jwe]
author jwe
date Fri, 09 Feb 2007 08:33:42 +0000
parents a1754033bc6c
children 0fcce0872e02
line wrap: on
line diff
--- a/src/ls-mat5.cc	Fri Feb 09 05:14:51 2007 +0000
+++ b/src/ls-mat5.cc	Fri Feb 09 08:33:42 2007 +0000
@@ -717,7 +717,7 @@
 
     case MAT_FILE_STRUCT_CLASS:
       {
-	Octave_map m;
+	Octave_map m (dim_vector (1, 1));
 	int32_t fn_type;
 	int32_t fn_len;
 	int32_t field_name_length;
@@ -729,7 +729,7 @@
 	// space.
 	if (read_mat5_tag (is, swap, fn_type, fn_len) || fn_type != miINT32)
 	  {
-	    error ("load: invalid field name subelement");
+	    error ("load: invalid field name length subelement");
 	    goto data_read_error;
 	  }
 
@@ -749,37 +749,40 @@
 
 	octave_idx_type n_fields = fn_len/field_name_length;
 
-	fn_len = PAD (fn_len);
+	if (n_fields > 0)
+	  {
+	    fn_len = PAD (fn_len);
 
-	OCTAVE_LOCAL_BUFFER (char, elname, fn_len);
+	    OCTAVE_LOCAL_BUFFER (char, elname, fn_len);
 
-	if (! is.read (elname, fn_len))
-	  goto data_read_error;
+	    if (! is.read (elname, fn_len))
+	      goto data_read_error;
 
-	std::vector<Cell> elt (n_fields);
+	    std::vector<Cell> elt (n_fields);
+
+	    for (octave_idx_type i = 0; i < n_fields; i++)
+	      elt[i] = Cell (dims);
 
-	for (octave_idx_type i = 0; i < n_fields; i++)
-	  elt[i] = Cell (dims);
+	    octave_idx_type n = dims.numel ();
 
-	octave_idx_type n = dims.numel ();
+	    // fields subelements
+	    for (octave_idx_type j = 0; j < n; j++)
+	      {
+		for (octave_idx_type i = 0; i < n_fields; i++)
+		  {
+		    octave_value fieldtc;
+		    read_mat5_binary_element (is, filename, swap, global,
+					      fieldtc); 
+		    elt[i](j) = fieldtc;
+		  }
+	      }
 
-	// fields subelements
-	for (octave_idx_type j = 0; j < n; j++)
-	  {
 	    for (octave_idx_type i = 0; i < n_fields; i++)
 	      {
-		octave_value fieldtc;
-		read_mat5_binary_element (is, filename, swap, global, fieldtc);
-		elt[i](j) = fieldtc;
-	      }
+		const char *key = elname + i*field_name_length;
 
-	  }
-
-	for (octave_idx_type i = 0; i < n_fields; i++)
-	  {
-	    const char *key = elname + i*field_name_length;
-
-	    m.assign (key, elt[i]);
+		m.assign (key, elt[i]);
+	      }
 	  }
 
 	tc = m;
@@ -1007,7 +1010,7 @@
 {
   int32_t temp;
 
-  if (bytes <= 4)
+  if (bytes > 0 && bytes <= 4)
     temp = (bytes << 16) + type;
   else
     {