static int read_audiod_pipe(int fd)
{
- static char buf[8192];
- static int loaded;
+ static char *buf;
+ static int bufsize, loaded;
int ret;
- 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);
if (ret <= 0)
return ret;
loaded += ret;