+ return CMD_OK;
+} /* cmd_status_t cmd_parse_listval */
+
+#define free_everything_and_return(status) \
+ do { \
+ for (size_t j = 0; j < number; j++) { \
+ sfree(names[j]); \
+ names[j] = NULL; \
+ } \
+ sfree(names); \
+ sfree(times); \
+ return status; \
+ } while (0)
+
+#define print_to_socket(fh, ...) \
+ do { \
+ if (fprintf(fh, __VA_ARGS__) < 0) { \
+ char errbuf[1024]; \
+ WARNING("handle_listval: failed to write to socket #%i: %s", fileno(fh), \
+ sstrerror(errno, errbuf, sizeof(errbuf))); \
+ free_everything_and_return(CMD_ERROR); \
+ } \
+ fflush(fh); \
+ } while (0)
+
+cmd_status_t cmd_handle_listval(FILE *fh, char *buffer) {
+ cmd_error_handler_t err = {cmd_error_fh, fh};
+ cmd_status_t status;
+ cmd_t cmd;
+