X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afs.c;h=ff3c95fe03853b0aaa80d873ea75748a10bf73d2;hp=0464eb77de8918f8b38d5a41c5a792212a271c5f;hb=53077ea78f01e197e84529ae42558af5c3a68429;hpb=e6cab9cf4badec449aebef40d47078201a52f48a diff --git a/afs.c b/afs.c index 0464eb77..ff3c95fe 100644 --- a/afs.c +++ b/afs.c @@ -9,7 +9,6 @@ #include #include #include -#include #include #include "server.cmdline.h" @@ -20,9 +19,6 @@ #include "afh.h" #include "afs.h" #include "server.h" -#include /* readdir() */ -#include -#include #include "net.h" #include "ipc.h" #include "list.h" @@ -290,6 +286,9 @@ out: * command. This function allows to pass such a structure together with a list * of further arguments (often a list of audio files) to the parent process. * + * \return The return value of the underlying call to \ref + * send_callback_request(). + * * \sa send_standard_callback_request(), send_callback_request(). */ int send_option_arg_callback_request(struct osl_object *options, @@ -364,7 +363,10 @@ static int action_if_pattern_matches(struct osl_row *row, void *data) continue; if (ret) return -E_FNMATCH; - return pmd->action(pmd->table, row, name, pmd->data); + ret = pmd->action(pmd->table, row, name, pmd->data); + if (ret >= 0) + pmd->num_matches++; + return ret; } return 1; } @@ -541,7 +543,7 @@ static int activate_mood_or_playlist(char *arg, int *num_admissible) static void com_select_callback(int fd, const struct osl_object *query) { struct para_buffer pb = { - .max_size = SHMMAX, + .max_size = shm_get_shmmax(), .private_data = &fd, .max_size_handler = pass_buffer_as_shm }; @@ -581,22 +583,22 @@ out: * Result handler for sending data to the para_client process. * * \param result The data to be sent. - * \param private Pointer to rc4 context. + * \param private Pointer to the context. * - * \return The return value of the underlying call to rc4_send_bin_buffer(). + * \return The return value of the underlying call to sc_send_bin_buffer(). * - * \sa \ref callback_result_handler, \ref rc4_send_bin_buffer(). + * \sa \ref callback_result_handler, \ref sc_send_bin_buffer(). */ -int rc4_send_result(struct osl_object *result, void *private) +int sc_send_result(struct osl_object *result, void *private) { - struct rc4_context *rc4c = private; + struct stream_cipher_context *scc = private; if (!result->size) return 1; - return rc4_send_bin_buffer(rc4c, result->data, result->size); + return sc_send_bin_buffer(scc, result->data, result->size); } -int com_select(struct rc4_context *rc4c, int argc, char * const * const argv) +int com_select(struct stream_cipher_context *scc, int argc, char * const * const argv) { struct osl_object query; @@ -605,7 +607,7 @@ int com_select(struct rc4_context *rc4c, int argc, char * const * const argv) query.data = argv[1]; query.size = strlen(argv[1]) + 1; return send_callback_request(com_select_callback, &query, - &rc4_send_result, rc4c); + &sc_send_result, scc); } static void init_admissible_files(char *arg) @@ -728,11 +730,11 @@ static void afs_signal_post_select(struct sched *s, struct task *t) } PARA_EMERG_LOG("terminating on signal %d\n", signum); shutdown: - sched_shutdown(); + sched_shutdown(s); t->error = -E_AFS_SIGNAL; } -static void register_signal_task(void) +static void register_signal_task(struct sched *s) { struct signal_task *st = &signal_task_struct; @@ -746,7 +748,7 @@ static void register_signal_task(void) st->task.pre_select = signal_pre_select; st->task.post_select = afs_signal_post_select; sprintf(st->task.status, "signal task"); - register_task(&st->task); + register_task(s, &st->task); } static struct list_head afs_client_list; @@ -907,7 +909,7 @@ static void command_post_select(struct sched *s, struct task *t) ret = execute_server_command(&s->rfds); if (ret < 0) { PARA_EMERG_LOG("%s\n", para_strerror(-ret)); - sched_shutdown(); + sched_shutdown(s); return; } /* Check the list of connected clients. */ @@ -942,7 +944,7 @@ static void command_post_select(struct sched *s, struct task *t) para_list_add(&client->node, &afs_client_list); } -static void register_command_task(uint32_t cookie) +static void register_command_task(uint32_t cookie, struct sched *s) { struct command_task *ct = &command_task_struct; ct->fd = setup_command_socket_or_die(); @@ -951,7 +953,7 @@ static void register_command_task(uint32_t cookie) ct->task.pre_select = command_pre_select; ct->task.post_select = command_post_select; sprintf(ct->task.status, "afs command task"); - register_task(&ct->task); + register_task(s, &ct->task); } /** @@ -965,7 +967,7 @@ __noreturn void afs_init(uint32_t cookie, int socket_fd) static struct sched s; int i, ret; - register_signal_task(); + register_signal_task(&s); INIT_LIST_HEAD(&afs_client_list); for (i = 0; i < NUM_AFS_TABLES; i++) afs_tables[i].init(&afs_tables[i]); @@ -979,7 +981,7 @@ __noreturn void afs_init(uint32_t cookie, int socket_fd) PARA_INFO_LOG("server_socket: %d, afs_socket_cookie: %u\n", server_socket, (unsigned) cookie); init_admissible_files(conf.afs_initial_mode_arg); - register_command_task(cookie); + register_command_task(cookie, &s); s.default_timeout.tv_sec = 0; s.default_timeout.tv_usec = 999 * 1000; ret = schedule(&s); @@ -1019,7 +1021,7 @@ out: free(pb.buf); } -int com_init(struct rc4_context *rc4c, int argc, char * const * const argv) +int com_init(struct stream_cipher_context *scc, int argc, char * const * const argv) { int i, j, ret; uint32_t table_mask = (1 << (NUM_AFS_TABLES + 1)) - 1; @@ -1045,9 +1047,9 @@ int com_init(struct rc4_context *rc4c, int argc, char * const * const argv) } } ret = send_callback_request(create_tables_callback, &query, - rc4_send_result, rc4c); + sc_send_result, scc); if (ret < 0) - return rc4_send_va_buffer(rc4c, "%s\n", para_strerror(-ret)); + return sc_send_va_buffer(scc, "%s\n", para_strerror(-ret)); return ret; } @@ -1065,7 +1067,7 @@ enum com_check_flags { CHECK_PLAYLISTS = 4 }; -int com_check(struct rc4_context *rc4c, int argc, char * const * const argv) +int com_check(struct stream_cipher_context *scc, int argc, char * const * const argv) { unsigned flags = 0; int i, ret; @@ -1098,19 +1100,19 @@ int com_check(struct rc4_context *rc4c, int argc, char * const * const argv) flags = ~0U; if (flags & CHECK_AFT) { ret = send_callback_request(aft_check_callback, NULL, - rc4_send_result, rc4c); + sc_send_result, scc); if (ret < 0) return ret; } if (flags & CHECK_PLAYLISTS) { ret = send_callback_request(playlist_check_callback, - NULL, rc4_send_result, rc4c); + NULL, sc_send_result, scc); if (ret < 0) return ret; } if (flags & CHECK_MOODS) { ret = send_callback_request(mood_check_callback, NULL, - rc4_send_result, rc4c); + sc_send_result, scc); if (ret < 0) return ret; } @@ -1150,9 +1152,10 @@ void afs_event(enum afs_events event, struct para_buffer *pb, * \param pb Unused. * \param data Unused. * - * This table does not honor events. + * \return The images table does not honor events, so this handler always + * returns success. */ -int images_event_handler(__a_unused enum afs_events event, +__a_const int images_event_handler(__a_unused enum afs_events event, __a_unused struct para_buffer *pb, __a_unused void *data) { return 1; @@ -1165,9 +1168,10 @@ int images_event_handler(__a_unused enum afs_events event, * \param pb Unused. * \param data Unused. * - * This table does not honor events. + * \return The lyrics table does not honor events, so this handler always + * returns success. */ -int lyrics_event_handler(__a_unused enum afs_events event, +__a_const int lyrics_event_handler(__a_unused enum afs_events event, __a_unused struct para_buffer *pb, __a_unused void *data) { return 1;