From 75e7f758f8f2873f5c00430d5a6046b95d49cecd Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Mon, 25 May 2009 23:02:50 +0200 Subject: [PATCH] aft: Make make_status_items() static. Move its single caller, open_and_update_audio_file(), below make_status_items and get rid of the declaration in afs.h. --- afs.h | 2 +- aft.c | 177 +++++++++++++++++++++++++++++----------------------------- 2 files changed, 89 insertions(+), 90 deletions(-) diff --git a/afs.h b/afs.h index 267cc8d3..bcc36309 100644 --- a/afs.h +++ b/afs.h @@ -117,7 +117,7 @@ struct ls_data { /** The sha1 hash of audio file. */ HASH_TYPE *hash; }; -int make_status_items(struct ls_data *d, struct para_buffer *pb); + void make_empty_status_items(char *buf); /** At most that many bytes will be passed from afs to para_server. */ diff --git a/aft.c b/aft.c index 62dedbf2..6c7f6664 100644 --- a/aft.c +++ b/aft.c @@ -627,94 +627,6 @@ int load_afd(int shmid, struct audio_file_data *afd) return 1; } -/** - * Mmap the given audio file and update statistics. - * - * \param aft_row Determines the audio file to be opened and updated. - * \param score The score of the audio file. - * \param afd Result pointer. - * - * On success, the numplayed field of the audio file selector info is increased - * and the lastplayed time is set to the current time. Finally, the score of - * the audio file is updated. - * - * \return Positive shmid on success, negative on errors. - */ -int open_and_update_audio_file(struct osl_row *aft_row, long score, - struct audio_file_data *afd) -{ - HASH_TYPE *aft_hash, file_hash[HASH_SIZE]; - struct osl_object afsi_obj; - struct afs_info old_afsi, new_afsi; - int ret = get_hash_of_row(aft_row, &aft_hash); - struct afsi_change_event_data aced; - struct osl_object map, chunk_table_obj; - char *path; - - if (ret < 0) - return ret; - ret = get_audio_file_path_of_row(aft_row, &path); - if (ret < 0) - return ret; - ret = get_afsi_object_of_row(aft_row, &afsi_obj); - if (ret < 0) - return ret; - ret = load_afsi(&old_afsi, &afsi_obj); - if (ret < 0) - return ret; - ret = get_afhi_of_row(aft_row, &afd->afhi); - 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); - if (ret < 0) - goto err; - 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); - ret = hash_compare(file_hash, aft_hash); - para_munmap(map.data, map.size); - if (ret) { - ret = -E_HASH_MISMATCH; - goto err; - } - new_afsi = old_afsi; - new_afsi.num_played++; - new_afsi.last_played = time(NULL); - save_afsi(&new_afsi, &afsi_obj); /* in-place update */ - - load_chunk_table(&afd->afhi, chunk_table_obj.data); - { - struct ls_data d = { - .afhi = afd->afhi, /* struct copy */ - .afsi = old_afsi, - .path = path, - .score = score, - .hash = file_hash - }; - struct para_buffer pb = {.max_size = VERBOSE_LS_OUTPUT_SIZE - 1}; - ret = make_status_items(&d, &pb); /* frees info string */ - afd->afhi.info_string = NULL; - if (ret < 0) - goto err; - strncpy(afd->verbose_ls_output, pb.buf, VERBOSE_LS_OUTPUT_SIZE); - afd->verbose_ls_output[VERBOSE_LS_OUTPUT_SIZE - 1] = '\0'; - free(pb.buf); - } - aced.aft_row = aft_row; - aced.old_afsi = &old_afsi; - afs_event(AFSI_CHANGE, NULL, &aced); - ret = save_afd(afd); -err: - free(afd->afhi.chunk_table); - free(afd->afhi.info_string); - osl_close_disk_object(&chunk_table_obj); - return ret; -} - static int get_local_time(uint64_t *seconds, char *buf, size_t size, time_t current_time, enum ls_listing_mode lm) { @@ -1068,7 +980,7 @@ void make_empty_status_items(char *buf) ); } -int make_status_items(struct ls_data *d, struct para_buffer *pb) +static int make_status_items(struct ls_data *d, struct para_buffer *pb) { struct ls_options opts = { .flags = LS_FLAG_FULL_PATH | LS_FLAG_ADMISSIBLE_ONLY, @@ -1080,6 +992,93 @@ int make_status_items(struct ls_data *d, struct para_buffer *pb) return print_list_item(d, &opts, pb, current_time); } +/** + * Mmap the given audio file and update statistics. + * + * \param aft_row Determines the audio file to be opened and updated. + * \param score The score of the audio file. + * \param afd Result pointer. + * + * On success, the numplayed field of the audio file selector info is increased + * and the lastplayed time is set to the current time. Finally, the score of + * the audio file is updated. + * + * \return Positive shmid on success, negative on errors. + */ +int open_and_update_audio_file(struct osl_row *aft_row, long score, + struct audio_file_data *afd) +{ + HASH_TYPE *aft_hash, file_hash[HASH_SIZE]; + struct osl_object afsi_obj; + struct afs_info old_afsi, new_afsi; + int ret = get_hash_of_row(aft_row, &aft_hash); + struct afsi_change_event_data aced; + struct osl_object map, chunk_table_obj; + char *path; + + if (ret < 0) + return ret; + ret = get_audio_file_path_of_row(aft_row, &path); + if (ret < 0) + return ret; + ret = get_afsi_object_of_row(aft_row, &afsi_obj); + if (ret < 0) + return ret; + ret = load_afsi(&old_afsi, &afsi_obj); + if (ret < 0) + return ret; + ret = get_afhi_of_row(aft_row, &afd->afhi); + 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); + if (ret < 0) + goto err; + 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); + ret = hash_compare(file_hash, aft_hash); + para_munmap(map.data, map.size); + if (ret) { + ret = -E_HASH_MISMATCH; + goto err; + } + new_afsi = old_afsi; + new_afsi.num_played++; + new_afsi.last_played = time(NULL); + save_afsi(&new_afsi, &afsi_obj); /* in-place update */ + + load_chunk_table(&afd->afhi, chunk_table_obj.data); + { + struct ls_data d = { + .afhi = afd->afhi, /* struct copy */ + .afsi = old_afsi, + .path = path, + .score = score, + .hash = file_hash + }; + struct para_buffer pb = {.max_size = VERBOSE_LS_OUTPUT_SIZE - 1}; + ret = make_status_items(&d, &pb); /* frees info string */ + afd->afhi.info_string = NULL; + if (ret < 0) + goto err; + strncpy(afd->verbose_ls_output, pb.buf, VERBOSE_LS_OUTPUT_SIZE); + afd->verbose_ls_output[VERBOSE_LS_OUTPUT_SIZE - 1] = '\0'; + free(pb.buf); + } + aced.aft_row = aft_row; + aced.old_afsi = &old_afsi; + afs_event(AFSI_CHANGE, NULL, &aced); + ret = save_afd(afd); +err: + free(afd->afhi.chunk_table); + free(afd->afhi.info_string); + osl_close_disk_object(&chunk_table_obj); + return ret; +} static int ls_audio_format_compare(const void *a, const void *b) { -- 2.39.5