X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Fstr.c;h=225c559d2d32c2e3cb1b51d12a9c75e7a140191a;hb=d0371553a98cd169353bf6d211e375e5ffc3a3bd;hp=6e446f859855ee2ef1b01f4b17f0746ce7f8392a;hpb=1881aaf56cd19765028c365e11ec0c97cc9d0320;p=pspp-builds.git diff --git a/src/libpspp/str.c b/src/libpspp/str.c index 6e446f85..225c559d 100644 --- a/src/libpspp/str.c +++ b/src/libpspp/str.c @@ -19,6 +19,7 @@ #include "str.h" #include +#include #include #include @@ -1217,8 +1218,8 @@ ds_read_config_line (struct string *st, int *line_number, FILE *stream) /* Attempts to read SIZE * CNT bytes from STREAM and append them to ST. - Returns number of bytes actually read. */ -size_t + Returns true if all the requested data was read, false otherwise. */ +bool ds_read_stream (struct string *st, size_t size, size_t cnt, FILE *stream) { if (size != 0) @@ -1227,12 +1228,18 @@ ds_read_stream (struct string *st, size_t size, size_t cnt, FILE *stream) if (size_in_bounds_p (xsum (ds_length (st), try_bytes))) { char *buffer = ds_put_uninit (st, try_bytes); - size_t got_bytes = fread (buffer, size, cnt, stream); + size_t got_bytes = fread (buffer, 1, try_bytes, stream); ds_truncate (st, ds_length (st) - (try_bytes - got_bytes)); - return got_bytes; + return got_bytes == try_bytes; + } + else + { + errno = ENOMEM; + return false; } } - return 0; + else + return true; } /* Concatenates S onto ST. */