}
/**
- * Read from stdin, and send the result to the parent process.
+ * Read data from a file descriptor, and send it to the afs process.
*
+ * \param fd File descriptor to read data from.
* \param arg_obj Pointer to the arguments to \a f.
* \param f The callback function.
* \param max_len Don't read more than that many bytes from stdin.
*
* This function is used by commands that wish to let para_server store
* arbitrary data specified by the user (for instance the add_blob family of
- * commands). First, at most \a max_len bytes are read from stdin, the result
+ * commands). First, at most \a max_len bytes are read from \a fd, the result
* is concatenated with the buffer given by \a arg_obj, and the combined buffer
* is made available to the parent process via shared memory.
*
if (!FD_ISSET(st->fd, &s->rfds))
return;
st->signum = para_next_signal();
- PARA_NOTICE_LOG("caught signal %d\n", st->signum);
t->ret = 1;
if (st->signum == SIGUSR1)
return; /* ignore SIGUSR1 */
+ PARA_NOTICE_LOG("caught signal %d\n", st->signum);
t->ret = -E_SIGNAL_CAUGHT;
unregister_tasks();
}
enum com_check_flags {
CHECK_AFT = 1,
- CHECK_MOODS_TABLE = 8,
- CHECK_PLAYLISTS = 16
+ CHECK_MOODS = 2,
+ CHECK_PLAYLISTS = 4
};
int com_check(int fd, int argc, char * const * const argv)
flags |= CHECK_PLAYLISTS;
continue;
}
+ if (!strcmp(arg, "-m")) {
+ flags |= CHECK_MOODS;
+ continue;
+ }
return -E_AFS_SYNTAX;
}
if (i < argc)
return ret;
}
}
+ if (flags & CHECK_PLAYLISTS) {
+ ret = send_callback_request(playlist_check_callback, NULL, &result);
+ if (ret < 0)
+ return ret;
+ if (ret > 0) {
+ ret = send_buffer(fd, (char *) result.data);
+ free(result.data);
+ if (ret < 0)
+ return ret;
+ }
+ }
return 1;
}