Mercurial > hg > octave-lyh
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 +++ b/src/ls-mat5.cc @@ -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 {