- if (loaded >= sizeof(buf)) /* overflow */
- return 0;
- ret = read(fd, buf + loaded, sizeof(buf) - loaded);
+ if (loaded >= bufsize) {
+ if (bufsize > 1000 * 1000) {
+ loaded = 0;
+ return 0;
+ }
+ bufsize += bufsize + 1000;
+ buf = para_realloc(buf, bufsize);
+ }
+ assert(loaded < bufsize);
+ ret = read(fd, buf + loaded, bufsize - loaded);