# HG changeset patch # User jwe # Date 1171010022 0 # Node ID 3588fc9044842547c0e5f5997ae2953eed5058d7 # Parent 6110e7d4e4c4ca2dda17bd0fe65c4f99c6922367 [project @ 2007-02-09 08:33:42 by jwe] diff -r 6110e7d4e4c4 -r 3588fc904484 src/ChangeLog --- a/src/ChangeLog Fri Feb 09 05:14:51 2007 +0000 +++ b/src/ChangeLog Fri Feb 09 08:33:42 2007 +0000 @@ -1,3 +1,14 @@ +2007-02-09 John W. Eaton + + * ls-mat5.cc (read_mat5_binary_element): Don't attempt to read + fieldnames if there are no fields. + (write_mat5_tag): Don't use small data element format if bytes == 0. + + * ls-mat5.cc (read_mat5_binary_element): Always create a structure + that is at least 1x1. + * ov-struct.cc (octave_struct::load_ascii, + octave_struct::load_binary, octave_struct::load_hdf5): Likewise. + 2007-02-08 Michael Goffioul * DLD-FUNCTIONS/__glpk__.cc: Include glplib.h if glpk.h does not. diff -r 6110e7d4e4c4 -r 3588fc904484 src/ls-mat5.cc --- 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 elt (n_fields); + std::vector 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 { diff -r 6110e7d4e4c4 -r 3588fc904484 src/ov-struct.cc --- a/src/ov-struct.cc Fri Feb 09 05:14:51 2007 +0000 +++ b/src/ov-struct.cc Fri Feb 09 08:33:42 2007 +0000 @@ -1087,7 +1087,7 @@ } } else if (len == 0 ) - map = Octave_map (); + map = Octave_map (dim_vector (1, 1)); else panic_impossible (); } @@ -1177,7 +1177,7 @@ } } else if (len == 0 ) - map = Octave_map (); + map = Octave_map (dim_vector (1, 1)); else panic_impossible (); @@ -1224,7 +1224,7 @@ hdf5_callback_data dsub; herr_t retval2 = 0; - Octave_map m; + Octave_map m (dim_vector (1, 1)); int current_item = 0; #ifdef HAVE_H5GGET_NUM_OBJS hsize_t num_obj = 0;