X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=aft.c;h=93c96cb49c8e01bd3e5259e380d413d047f92344;hp=13e237484a1367cd21d41b18dd2670c15104b421;hb=35726e230f83270ef01000fc57328101a8b0d89f;hpb=a6e79f02b6eab623425686f8f3cab5bc942e77d4 diff --git a/aft.c b/aft.c index 13e23748..93c96cb4 100644 --- a/aft.c +++ b/aft.c @@ -110,16 +110,27 @@ struct ls_data { HASH_TYPE *hash; }; +/** Data passed from the ls command handler to its callback function. */ struct ls_options { + /** The given command line flags. */ unsigned flags; + /** The sorting method given at the command line. */ enum ls_sorting_method sorting; + /** The given listing mode (short, long, verbose, mbox). */ enum ls_listing_mode mode; + /** The arguments passed to the ls command. */ char **patterns; + /** Number of non-option arguments. */ int num_patterns; + /** Used for long listing mode to align the output fields. */ struct ls_widths widths; + /** Size of the \a data array. */ uint32_t array_size; + /** Number of used entries in the data array. */ uint32_t num_matching_paths; + /** Array of matching entries. */ struct ls_data *data; + /** Used to sort the array. */ struct ls_data **data_ptr; }; @@ -312,12 +323,18 @@ enum afhi_offsets { AFHI_BITRATE_OFFSET = 4, /** Position of the frequency. */ AFHI_FREQUENCY_OFFSET = 8, + /** Location of the audio file header. */ + AFHI_HEADER_OFFSET_OFFSET = 12, + /* Length of the audio file header. Zero means: No header. */ + AFHI_HEADER_LEN_OFFSET = 16, /** Number of channels is stored here. */ - AFHI_CHANNELS_OFFSET = 12, + AFHI_CHANNELS_OFFSET = 20, + /** EOF timeout in ms. */ + AFHI_EOF_OFFSET = 21, /** The tag info position. */ - AFHI_INFO_STRING_OFFSET = 13, + AFHI_INFO_STRING_OFFSET = 23, /** Minimal on-disk size of a valid afhi struct. */ - MIN_AFHI_SIZE = 14 + MIN_AFHI_SIZE = 24 }; static unsigned sizeof_afhi_buf(const struct afh_info *afhi) @@ -335,7 +352,10 @@ static void save_afhi(struct afh_info *afhi, char *buf) afhi->seconds_total); write_u32(buf + AFHI_BITRATE_OFFSET, afhi->bitrate); write_u32(buf + AFHI_FREQUENCY_OFFSET, afhi->frequency); + write_u32(buf + AFHI_HEADER_OFFSET_OFFSET, afhi->header_offset); + write_u32(buf + AFHI_HEADER_LEN_OFFSET, afhi->header_len); write_u8(buf + AFHI_CHANNELS_OFFSET, afhi->channels); + write_u16(buf + AFHI_EOF_OFFSET, tv2ms(&afhi->eof_tv)); strcpy(buf + AFHI_INFO_STRING_OFFSET, afhi->info_string); /* OK */ PARA_DEBUG_LOG("last byte written: %p\n", buf + AFHI_INFO_STRING_OFFSET + strlen(afhi->info_string)); } @@ -346,6 +366,9 @@ static void load_afhi(const char *buf, struct afh_info *afhi) afhi->bitrate = read_u32(buf + AFHI_BITRATE_OFFSET); afhi->frequency = read_u32(buf + AFHI_FREQUENCY_OFFSET); afhi->channels = read_u8(buf + AFHI_CHANNELS_OFFSET); + afhi->header_offset = read_u32(buf + AFHI_HEADER_OFFSET_OFFSET); + afhi->header_len = read_u32(buf + AFHI_HEADER_LEN_OFFSET); + ms2tv(read_u16(buf + AFHI_EOF_OFFSET), &afhi->eof_tv); strcpy(afhi->info_string, buf + AFHI_INFO_STRING_OFFSET); } @@ -708,8 +731,9 @@ int open_and_update_audio_file(struct osl_row *aft_row, struct audio_file_data * ret = get_attribute_text(&afd->afsi.attributes, " ", &tmp); if (ret < 0) goto err; - tmp[sizeof(afd->attributes_string) - 1] = '\0'; - strcpy(afd->attributes_string, tmp); /* OK */ + assert(tmp); + strncpy(afd->attributes_string, tmp, sizeof(afd->attributes_string)); + afd->attributes_string[sizeof(afd->attributes_string) - 1] = '\0'; free(tmp); aced.aft_row = aft_row; @@ -919,7 +943,7 @@ static int print_list_item(struct ls_data *d, struct ls_options *opts, "Received: from\nTo: bar\nFrom: a\n" "Subject: %s\n\n" /* path */ "%s%s%s" /* score */ - "%s" + "%s\n" /* attributes */ "hash: %s\n" "image_id: %s\n" "lyrics_id: %s\n" @@ -1210,12 +1234,8 @@ out: } /* - * TODO: flags -h (sort by hash) -lm (list in mbox format) - * - * long list: list hash, attributes as (xx--x-x-), file size, lastplayed - * full list: list everything, including afsi, afhi, atts as clear text - * - * */ + * TODO: flags -h (sort by hash) + */ int com_ls(int fd, int argc, char * const * const argv) { int i, ret; @@ -1571,8 +1591,11 @@ out: return 1; } +/** Used by com_add(). */ struct private_add_data { + /** The socket file descriptor. */ int fd; + /** The given add flags. */ uint32_t flags; }; @@ -1779,16 +1802,25 @@ enum touch_flags { TOUCH_FLAG_VERBOSE = 2 }; +/** Options used by com_touch(). */ struct com_touch_options { + /** New num_played value. */ int32_t num_played; + /** New last played count. */ int64_t last_played; + /** new lyrics id. */ int32_t lyrics_id; + /** new image id. */ int32_t image_id; + /** command line flags (see \ref touch_flags). */ unsigned flags; }; +/** Data passed to the action handler of com_touch(). */ struct touch_action_data { + /** Command line options (see \ref com_touch_options). */ struct com_touch_options *cto; + /** Message buffer. */ struct para_buffer pb; }; @@ -1933,22 +1965,30 @@ int com_touch(int fd, int argc, char * const * const argv) return ret; } +/** Flags for com_rm(). */ enum rm_flags { + /** -v */ RM_FLAG_VERBOSE = 1, + /** -f */ RM_FLAG_FORCE = 2, + /** -p */ RM_FLAG_FNM_PATHNAME = 4 }; -struct com_rm_data { +/** Data passed to the action handler of com_rm(). */ +struct com_rm_action_data { + /** Command line flags ((see \ref rm_flags). */ 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, struct osl_row *row, const char *name, void *data) { - struct com_rm_data *crd = data; + struct com_rm_action_data *crd = data; int ret; if (crd->flags & RM_FLAG_VERBOSE) @@ -1965,7 +2005,7 @@ static int remove_audio_file(__a_unused struct osl_table *table, static int com_rm_callback(const struct osl_object *query, __a_unused struct osl_object *result) { - struct com_rm_data crd = {.flags = *(uint32_t *)query->data}; + struct com_rm_action_data crd = {.flags = *(uint32_t *)query->data}; int ret; struct pattern_match_data pmd = { .table = audio_file_table, @@ -2057,10 +2097,15 @@ enum cpsi_flags { CPSI_FLAG_VERBOSE = 32, }; +/** Data passed to the action handler of com_cpsi(). */ 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. */ struct afs_info source_afsi; }; @@ -2254,7 +2299,7 @@ int aft_check_callback(__a_unused const struct osl_object *query, struct osl_obj /** * Close the audio file table. * - * \param flags Ususal flags that are passed to osl_close_table(). + * \param flags Usual flags that are passed to osl_close_table(). * * \sa osl_close_table(). */