X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp-builds.git;a=blobdiff_plain;f=src%2Fdata%2Fpor-file-reader.c;h=cd8b213e8d74062bffd5b6e344a1d29047b7f9a9;hp=461796bf66fee167377740cb35a9f636a2b17d52;hb=8830c95bb9e8d72621787866141a27fc22e8c786;hpb=69c134ad8584c6c0dbbd908ed8ed278e920445a9 diff --git a/src/data/por-file-reader.c b/src/data/por-file-reader.c index 461796bf..cd8b213e 100644 --- a/src/data/por-file-reader.c +++ b/src/data/por-file-reader.c @@ -447,6 +447,28 @@ read_string (struct pfm_reader *r, char *buf) *buf = '\0'; } + +/* Reads a string into BUF, which must have room for 256 + characters. + Returns the number of bytes read. +*/ +static size_t +read_bytes (struct pfm_reader *r, uint8_t *buf) +{ + int n = read_int (r); + if (n < 0 || n > 255) + error (r, _("Bad string length %d."), n); + + while (n-- > 0) + { + *buf++ = r->cc; + advance (r); + } + return n; +} + + + /* Reads a string and returns a copy of it allocated from R's pool. */ static char * @@ -739,9 +761,9 @@ parse_value (struct pfm_reader *r, int width, union value *v) value_init (v, width); if (width > 0) { - char string[256]; - read_string (r, string); - value_copy_str_rpad (v, width, string, ' '); + uint8_t buf[256]; + size_t n_bytes = read_bytes (r, buf); + value_copy_buf_rpad (v, width, buf, n_bytes, ' '); } else v->f = read_float (r); @@ -844,9 +866,9 @@ por_file_casereader_read (struct casereader *reader, void *r_) case_data_rw_idx (c, i)->f = read_float (r); else { - char string[256]; - read_string (r, string); - buf_copy_str_rpad (case_str_rw_idx (c, i), width, string, ' '); + uint8_t buf[256]; + size_t n_bytes = read_bytes (r, buf); + u8_buf_copy_rpad (case_str_rw_idx (c, i), width, buf, n_bytes, ' '); } }