X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=aft.c;h=a73537c74446b3cdb49e405f7918701d837a8e8f;hp=377740d132b831d126e0015f241ed65095c2e661;hb=9aa1f3d69c0aa335b3026581defbc09eb2c4efb4;hpb=282a5e463090205ef8a12f50a9ecf6498b860e88 diff --git a/aft.c b/aft.c index 377740d1..a73537c7 100644 --- a/aft.c +++ b/aft.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2013 Andre Noll + * Copyright (C) 2007 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -72,6 +72,20 @@ enum ls_listing_mode { LS_MODE_PARSER, }; +/* Data about one audio file. Needed for ls and stat output. */ +struct ls_data { + /* Usual audio format handler information. */ + struct afh_info afhi; + /* Audio file selector information. */ + struct afs_info afsi; + /* The full path of the audio file. */ + char *path; + /* The score value (if -a was given). */ + long score; + /* The hash value of the audio file data. */ + unsigned char *hash; +}; + /** The flags accepted by the ls command. */ enum ls_flags { /** -p */ @@ -87,10 +101,9 @@ enum ls_flags { /** * The size of the individual output fields of the ls command. * - * These depend on the actual content being listed. If, for instance only files - * with duration less than an hour are being listed, then the duration with is - * made smaller because then the duration is listed as mm:ss rather than - * hh:mm:ss. + * These depend on the content being listed. For example, if each listed file + * is shorter than an hour, the duration format is set to mm:ss. Otherwise it + * is set to hh:mm:ss. */ struct ls_widths { /** size of the score field. */ @@ -163,7 +176,7 @@ enum afsi_offsets { AFSI_SIZE = 32 }; -/** +/* * Convert a struct afs_info to an osl object. * * \param afsi Pointer to the audio file info to be converted. @@ -171,7 +184,7 @@ enum afsi_offsets { * * \sa load_afsi(). */ -void save_afsi(struct afs_info *afsi, struct osl_object *obj) +static void save_afsi(struct afs_info *afsi, struct osl_object *obj) { char *buf = obj->data; @@ -186,17 +199,17 @@ void save_afsi(struct afs_info *afsi, struct osl_object *obj) memset(buf + AFSI_AUDIO_FORMAT_UNUSED_OFFSET, 0, 2); } -/** - * Get the audio file selector info struct stored in an osl object. +/* + * Get the audio file selector info struct stored in an osl object. * * \param afsi Points to the audio_file info structure to be filled in. * \param obj The osl object holding the data. * - * \return Positive on success, negative on errors. Possible errors: \p E_BAD_AFS. + * \return Standard. * * \sa save_afsi(). */ -int load_afsi(struct afs_info *afsi, struct osl_object *obj) +static int load_afsi(struct afs_info *afsi, struct osl_object *obj) { char *buf = obj->data; if (obj->size < AFSI_SIZE) @@ -493,15 +506,16 @@ static int aft_get_row_of_hash(unsigned char *hash, struct osl_row **row) return osl(osl_get_row(audio_file_table, AFTCOL_HASH, &obj, row)); } -/** - * Get the osl object holding the audio file selector info of a row. +/* + * Get the audio file selector info object of a row. * * \param row Pointer to a row in the audio file table. * \param obj Result pointer. * * \return Standard. */ -int get_afsi_object_of_row(const struct osl_row *row, struct osl_object *obj) +static int get_afsi_object_of_row(const struct osl_row *row, + struct osl_object *obj) { return osl(osl_get_object(audio_file_table, row, AFTCOL_AFSI, obj)); } @@ -541,15 +555,15 @@ int get_afsi_of_row(const struct osl_row *row, struct afs_info *afsi) return load_afsi(afsi, &obj); } -/** +/* * Get the audio file selector info, given the path of an audio table. * * \param path The full path of the audio file. * \param afsi Result pointer. * - * \return Positive on success, negative on errors. + * \return Standard. */ -int get_afsi_of_path(const char *path, struct afs_info *afsi) +static int get_afsi_of_path(const char *path, struct afs_info *afsi) { struct osl_object obj; int ret = get_afsi_object_of_path(path, &obj); @@ -755,7 +769,6 @@ static void get_duration_buf(int seconds, char *buf, struct ls_options *opts) } } - static int write_attribute_items(struct para_buffer *b, const char *att_bitmap, struct afs_info *afsi) { @@ -830,8 +843,8 @@ static int print_chunk_table(struct ls_data *d, struct para_buffer *b) ret = aft_get_row_of_hash(d->hash, &aft_row); if (ret < 0) return ret; - ret = osl_open_disk_object(audio_file_table, aft_row, - AFTCOL_CHUNKS, &chunk_table_obj); + ret = osl(osl_open_disk_object(audio_file_table, aft_row, + AFTCOL_CHUNKS, &chunk_table_obj)); if (ret < 0) return ret; ret = para_printf(b, "%s\n" @@ -1106,12 +1119,11 @@ int open_and_update_audio_file(struct osl_row *aft_row, long score, if (ret < 0) return ret; afd->afhi.chunk_table = NULL; - ret = osl_open_disk_object(audio_file_table, aft_row, - AFTCOL_CHUNKS, &chunk_table_obj); + ret = osl(osl_open_disk_object(audio_file_table, aft_row, + AFTCOL_CHUNKS, &chunk_table_obj)); if (ret < 0) - goto err; - ret = mmap_full_file(path, O_RDONLY, &map.data, - &map.size, &afd->fd); + return ret; + ret = mmap_full_file(path, O_RDONLY, &map.data, &map.size, &afd->fd); if (ret < 0) goto err; hash_function(map.data, map.size, file_hash); @@ -1718,10 +1730,11 @@ static void com_add_callback(int fd, const struct osl_object *query) struct osl_object obj; if (pb) { /* hs trumps pb, remove pb */ if (flags & ADD_FLAG_VERBOSE) { - ret = para_printf(&msg, "removing path brother\n"); + ret = para_printf(&msg, "removing %s\n", path); if (ret < 0) goto out; } + afs_event(AUDIO_FILE_REMOVE, &msg, pb); ret = osl(osl_del_row(audio_file_table, pb)); if (ret < 0) goto out; @@ -2006,7 +2019,6 @@ int com_add(struct command_context *cc) free(path); } return 1; - } /** @@ -2408,13 +2420,12 @@ static void com_cpsi_callback(int fd, const struct osl_object *query) out: if (ret < 0) para_printf(&cad.pb, "%s\n", para_strerror(-ret)); - else if (cad.flags & CPSI_FLAG_VERBOSE) { - if (pmd.num_matches > 0) + else if (pmd.num_matches > 0) { + if (cad.flags & CPSI_FLAG_VERBOSE) para_printf(&cad.pb, "copied requested afsi from %s " "to %u files\n", source_path, pmd.num_matches); - else - para_printf(&cad.pb, "nothing copied\n"); - } + } else + para_printf(&cad.pb, "no matches - nothing copied\n"); if (cad.pb.offset) pass_buffer_as_shm(fd, SBD_OUTPUT, cad.pb.buf, cad.pb.offset); free(cad.pb.buf); @@ -2596,7 +2607,7 @@ static void afs_stat_callback(int fd, const struct osl_object *query) * 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(). + * \return The return value of the underlying call to \ref send_callback_request(). */ int send_afs_status(struct command_context *cc, int parser_friendly) { @@ -2747,7 +2758,7 @@ static int aft_event_handler(enum afs_events event, struct para_buffer *pb, { int ret; - switch(event) { + switch (event) { case ATTRIBUTE_REMOVE: { const struct rmatt_event_data *red = data; ret = para_printf(pb, "clearing attribute %s (bit %u) from all "