X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afs.c;h=a2194f3ea3245ecfe0204d35de87f861874ea472;hp=44eeacc9ecd74441d5a444c4d37136f838499db1;hb=60f9b7e82c73870d0fd3c09b5fe1fb61aa38dfd7;hpb=a044e78188411351d798842df1778316c881f5ed diff --git a/afs.c b/afs.c index 44eeacc9..a2194f3e 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. * @@ -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; }