+static int update_item(int item_num, char *buf)
+{
+ free(stat_content[item_num]);
+ stat_content[item_num] = para_strdup(buf);
+ print_stat_item(item_num);
+ return 1;
+}
+
+static int read_audiod_pipe(int fd)
+{
+ static char *buf;
+ static int bufsize, loaded;
+ int ret;
+
+ 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;
+ ret = for_each_stat_item(buf, loaded, update_item);
+ if (ret < 0)
+ return ret;
+ loaded = ret;
+ return 1;
+}
+