X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=aft.c;h=f6d0c4b35a22160317d6d3bac20556208ac2669d;hp=be4d572e22f1517d1f5c3c970d30e6f6671f4158;hb=e65bdaa6b207d5cd409acaa5d0d33fe85dd7a28d;hpb=c41a04fb296e068ebfec78bba9678bf15daea896 diff --git a/aft.c b/aft.c index be4d572e..f6d0c4b3 100644 --- a/aft.c +++ b/aft.c @@ -18,7 +18,6 @@ #include "string.h" #include "afh.h" #include "afs.h" -#include "net.h" #include "fd.h" #include "ipc.h" #include "portable_io.h" @@ -1038,7 +1037,7 @@ static int make_status_items(struct audio_file_data *afd, .flags = LS_FLAG_FULL_PATH | LS_FLAG_ADMISSIBLE_ONLY, .mode = LS_MODE_VERBOSE, }; - struct para_buffer pb = {.max_size = SHMMAX - 1}; + struct para_buffer pb = {.max_size = shm_get_shmmax() - 1}; time_t current_time; int ret; @@ -1049,7 +1048,7 @@ static int make_status_items(struct audio_file_data *afd, free(status_items); status_items = pb.buf; memset(&pb, 0, sizeof(pb)); - pb.max_size = SHMMAX - 1; + pb.max_size = shm_get_shmmax() - 1; pb.flags = PBF_SIZE_PREFIX; ret = print_list_item(&d, &opts, &pb, current_time); if (ret < 0) { @@ -1344,7 +1343,7 @@ static void com_ls_callback(int fd, const struct osl_object *query) { struct ls_options *opts = query->data; char *p, *pattern_start = (char *)query->data + sizeof(*opts); - struct para_buffer b = {.max_size = SHMMAX, + struct para_buffer b = {.max_size = shm_get_shmmax(), .flags = (opts->mode == LS_MODE_PARSER)? PBF_SIZE_PREFIX : 0, .max_size_handler = pass_buffer_as_shm, .private_data = &fd}; int i = 0, ret; @@ -1365,8 +1364,11 @@ static void com_ls_callback(int fd, const struct osl_object *query) prepare_ls_row)); if (ret < 0) goto out; - if (!opts->num_matching_paths) + if (opts->num_matching_paths == 0) { + if (opts->num_patterns > 0) + para_printf(&b, "no matches\n"); goto out; + } ret = sort_matching_paths(opts); if (ret < 0) goto out; @@ -1666,7 +1668,7 @@ static void com_add_callback(int fd, const struct osl_object *query) char afsi_buf[AFSI_SIZE]; uint32_t flags = read_u32(buf + CAB_FLAGS_OFFSET); struct afs_info default_afsi = {.last_played = 0}; - struct para_buffer msg = {.max_size = SHMMAX, + struct para_buffer msg = {.max_size = shm_get_shmmax(), .max_size_handler = pass_buffer_as_shm, .private_data = &fd}; uint16_t afhi_offset, chunks_offset; @@ -1824,7 +1826,7 @@ static void hash_sister_callback(int fd, const struct osl_object *query) static int get_row_pointer_from_result(struct osl_object *result, void *private) { struct osl_row **row = private; - *row = result->data; + *row = *(struct osl_row **)(result->data); return 1; } @@ -2021,8 +2023,6 @@ struct touch_action_data { struct com_touch_options *cto; /** Message buffer. */ struct para_buffer pb; - /** How many audio files matched the given pattern. */ - unsigned num_matches; }; static int touch_audio_file(__a_unused struct osl_table *table, @@ -2069,7 +2069,6 @@ static int touch_audio_file(__a_unused struct osl_table *table, if (tad->cto->amp >= 0) new_afsi.amp = tad->cto->amp; } - tad->num_matches++; save_afsi(&new_afsi, &obj); /* in-place update */ aced.aft_row = row; aced.old_afsi = &old_afsi; @@ -2081,7 +2080,7 @@ static void com_touch_callback(int fd, const struct osl_object *query) { struct touch_action_data tad = {.cto = query->data, .pb = { - .max_size = SHMMAX, + .max_size = shm_get_shmmax(), .private_data = &fd, .max_size_handler = pass_buffer_as_shm } @@ -2101,9 +2100,8 @@ static void com_touch_callback(int fd, const struct osl_object *query) ret = for_each_matching_row(&pmd); if (ret < 0) ret2 = para_printf(&tad.pb, "%s\n", para_strerror(-ret)); - else - if (!tad.num_matches) - ret2 = para_printf(&tad.pb, "no matches\n"); + else if (pmd.num_matches == 0) + ret2 = para_printf(&tad.pb, "no matches\n"); if (ret2 >= 0 && tad.pb.offset) pass_buffer_as_shm(tad.pb.buf, tad.pb.offset, &fd); free(tad.pb.buf); @@ -2199,8 +2197,6 @@ struct com_rm_action_data { uint32_t flags; /** Message buffer. */ struct para_buffer pb; - /** Number of audio files removed. */ - unsigned num_removed; }; static int remove_audio_file(__a_unused struct osl_table *table, @@ -2218,8 +2214,6 @@ static int remove_audio_file(__a_unused struct osl_table *table, ret = osl(osl_del_row(audio_file_table, row)); if (ret < 0) para_printf(&crd->pb, "%s: %s\n", name, para_strerror(-ret)); - else - crd->num_removed++; return ret; } @@ -2227,7 +2221,7 @@ static void com_rm_callback(int fd, const struct osl_object *query) { struct com_rm_action_data crd = {.flags = *(uint32_t *)query->data, .pb = { - .max_size = SHMMAX, + .max_size = shm_get_shmmax(), .private_data = &fd, .max_size_handler = pass_buffer_as_shm } @@ -2249,11 +2243,11 @@ static void com_rm_callback(int fd, const struct osl_object *query) para_printf(&crd.pb, "%s\n", para_strerror(-ret)); return; } - if (!crd.num_removed && !(crd.flags & RM_FLAG_FORCE)) + if ((pmd.num_matches == 0) && !(crd.flags & RM_FLAG_FORCE)) ret = para_printf(&crd.pb, "no matches -- nothing removed\n"); - else { - if (crd.flags & RM_FLAG_VERBOSE) - ret = para_printf(&crd.pb, "removed %u files\n", crd.num_removed); + else if (crd.flags & RM_FLAG_VERBOSE) { + ret = para_printf(&crd.pb, "removed %u files\n", + pmd.num_matches); } if (ret >= 0 && crd.pb.offset) pass_buffer_as_shm(crd.pb.buf, crd.pb.offset, &fd); @@ -2322,8 +2316,6 @@ enum cpsi_flags { struct cpsi_action_data { /** command line flags (see \ref cpsi_flags). */ unsigned flags; - /** Number of audio files changed. */ - unsigned num_copied; /** Message buffer. */ struct para_buffer pb; /** Values are copied from here. */ @@ -2355,7 +2347,6 @@ static int copy_selector_info(__a_unused struct osl_table *table, if (cad->flags & CPSI_FLAG_COPY_ATTRIBUTES) target_afsi.attributes = cad->source_afsi.attributes; save_afsi(&target_afsi, &target_afsi_obj); /* in-place update */ - cad->num_copied++; if (cad->flags & CPSI_FLAG_VERBOSE) { ret = para_printf(&cad->pb, "copied afsi to %s\n", name); if (ret < 0) @@ -2372,7 +2363,7 @@ static void com_cpsi_callback(int fd, const struct osl_object *query) struct cpsi_action_data cad = { .flags = *(unsigned *)query->data, .pb = { - .max_size = SHMMAX, + .max_size = shm_get_shmmax(), .private_data = &fd, .max_size_handler = pass_buffer_as_shm } @@ -2398,9 +2389,9 @@ out: if (ret < 0) para_printf(&cad.pb, "%s\n", para_strerror(-ret)); else if (cad.flags & CPSI_FLAG_VERBOSE) { - if (cad.num_copied) + if (pmd.num_matches > 0) para_printf(&cad.pb, "copied requested afsi from %s " - "to %u files\n", source_path, cad.num_copied); + "to %u files\n", source_path, pmd.num_matches); else para_printf(&cad.pb, "nothing copied\n"); } @@ -2482,6 +2473,8 @@ static void afs_stat_callback(int fd, const struct osl_object *query) * up-to-date afs status items directly. Therefore the usual callback mechanism * is used to pass the status items from the afs process to the command handler * via a shared memory area and a pipe. + * + * \return The return value of the underyling call to \ref send_callback_request(). */ int send_afs_status(struct stream_cipher_context *scc, int parser_friendly) { @@ -2544,7 +2537,7 @@ static int check_audio_file(struct osl_row *row, void *data) void aft_check_callback(int fd, __a_unused 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 }; @@ -2569,10 +2562,6 @@ static void aft_close(void) { osl_close_table(audio_file_table, OSL_MARK_CLEAN); audio_file_table = NULL; - free(status_items); - status_items = NULL; - free(parser_friendly_status_items); - parser_friendly_status_items = NULL; } /**