X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;ds=sidebyside;f=afs.c;h=d5da1e557ee3d2df242ced8fff3c2991e803967c;hb=2cf578ff33b17cea17bfd52e2c084efa970faad4;hp=44eeacc9ecd74441d5a444c4d37136f838499db1;hpb=a044e78188411351d798842df1778316c881f5ed;p=paraslash.git diff --git a/afs.c b/afs.c index 44eeacc9..d5da1e55 100644 --- a/afs.c +++ b/afs.c @@ -366,8 +366,9 @@ static int fd2buf(int fd, unsigned max_size, struct osl_object *obj) } /** - * 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. @@ -375,7 +376,7 @@ static int fd2buf(int fd, unsigned max_size, struct osl_object *obj) * * 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. * @@ -475,7 +476,7 @@ static enum play_mode init_admissible_files(void) given_playlist = "given_playlist"; if (given_mood) { - ret = mood_open(given_mood); + ret = change_current_mood(given_mood); if (ret >= 0) { if (given_playlist) PARA_WARNING_LOG("ignoring playlist %s\n", @@ -488,10 +489,10 @@ static enum play_mode init_admissible_files(void) if (ret >= 0) return PLAY_MODE_PLAYLIST; } - ret = mood_open(NULL); /* open first available mood */ + ret = change_current_mood(NULL); /* open first available mood */ if (ret >= 0) return PLAY_MODE_MOOD; - mood_open(""); /* open dummy mood, always successful */ + change_current_mood(""); /* open dummy mood, always successful */ return PLAY_MODE_MOOD; } @@ -532,7 +533,7 @@ static void close_afs_tables(enum osl_close_flags flags) PARA_NOTICE_LOG("closing afs_tables\n"); score_shutdown(flags); attribute_shutdown(flags); - mood_close(); + close_current_mood(); playlist_close(); moods_shutdown(flags); playlists_shutdown(flags); @@ -555,10 +556,10 @@ static void signal_post_select(struct sched *s, struct task *t) 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(); } @@ -860,8 +861,8 @@ int com_init(int fd, int argc, char * const * const argv) 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) @@ -886,6 +887,10 @@ 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) @@ -903,5 +908,16 @@ int com_check(int fd, int argc, char * const * const argv) 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; }