+ char *buf = NULL;
+ long unsigned mask = ~0LU;
+
+ if (argc > 1) {
+ mask = 0;
+ for (i = 1; i < argc; i++) {
+ ret = stat_item_valid(argv[i]);
+ if (ret < 0)
+ return ret;
+ mask |= (1 << ret);
+ }
+ }
+ PARA_INFO_LOG("mask: 0x%lx\n", mask);
+ if (mask & (1 << SI_PLAY_TIME)) {
+ struct timeval *t = wstime();
+ char *ts = get_time_string(t);
+ if (ts) {
+ ret = client_write(fd, ts);
+ if (ret < 0)
+ goto out;
+ free(ts);
+ }
+ }
+ if (mask & (1 << SI_AUDIOD_UPTIME)) {
+ char *tmp, *us = uptime_str();
+ tmp = make_message("%s:%s\n",
+ status_item_list[SI_AUDIOD_UPTIME], us);
+ free(us);
+ ret = client_write(fd, tmp);
+ if (ret < 0)
+ goto out;
+ free(tmp);
+ }
+ if (mask & (1 << SI_AUDIOD_STATUS)) {
+ char *s = audiod_status_string();
+ ret = client_write(fd, s);
+ if (ret < 0)
+ goto out;
+ free(s);
+ }
+ if (mask & (1 << SI_DECODER_FLAGS)) {
+ char *df =decoder_flags();
+ ret = client_write(fd, df);
+ if (ret < 0)
+ goto out;
+ free(df);
+ }