aft.c: Pass struct ls_data pointer to make_status_items().
authorAndre Noll <maan@tuebingen.mpg.de>
Sun, 21 Dec 2014 18:07:40 +0000 (18:07 +0000)
committerAndre Noll <maan@tuebingen.mpg.de>
Mon, 30 Mar 2015 21:40:57 +0000 (21:40 +0000)
We essentially already do that, with each field of the structure
spelled out in the argument list of make_status_items().

aft.c

diff --git a/aft.c b/aft.c
index 8a63329..517c972 100644 (file)
--- a/aft.c
+++ b/aft.c
@@ -1040,17 +1040,8 @@ out:
        return ret;
 }
 
-static int make_status_items(struct audio_file_data *afd,
-               struct afs_info *afsi, char *path, long score,
-               unsigned char *hash)
-{
-       struct ls_data d = {
-               .afhi = afd->afhi,
-               .afsi = *afsi,
-               .path = path,
-               .score = score,
-               .hash = hash
-       };
+static int make_status_items(struct ls_data *d)
+{
        struct ls_options opts = {
                .flags = LS_FLAG_FULL_PATH | LS_FLAG_ADMISSIBLE_ONLY,
                .mode = LS_MODE_VERBOSE,
@@ -1060,7 +1051,7 @@ static int make_status_items(struct audio_file_data *afd,
        int ret;
 
        time(&current_time);
-       ret = print_list_item(&d, &opts, &pb, current_time);
+       ret = print_list_item(d, &opts, &pb, current_time);
        if (ret < 0)
                return ret;
        free(status_items);
@@ -1068,7 +1059,7 @@ static int make_status_items(struct audio_file_data *afd,
        memset(&pb, 0, sizeof(pb));
        pb.max_size = shm_get_shmmax() - 1;
        pb.flags = PBF_SIZE_PREFIX;
-       ret = print_list_item(&d, &opts, &pb, current_time);
+       ret = print_list_item(d, &opts, &pb, current_time);
        if (ret < 0) {
                free(status_items);
                status_items = NULL;
@@ -1093,68 +1084,68 @@ static int make_status_items(struct audio_file_data *afd,
 int open_and_update_audio_file(struct audio_file_data *afd)
 {
        struct osl_row *aft_row;
-       long score;
-       unsigned char *aft_hash, file_hash[HASH_SIZE];
+       unsigned char file_hash[HASH_SIZE];
        struct osl_object afsi_obj;
-       struct afs_info old_afsi, new_afsi;
+       struct afs_info new_afsi;
        int ret;
        struct afsi_change_event_data aced;
        struct osl_object map, chunk_table_obj;
-       char *path;
+       struct ls_data d;
 again:
-       ret = score_get_best(&aft_row, &score);
+       ret = score_get_best(&aft_row, &d.score);
        if (ret < 0)
                return ret;
-       ret = get_hash_of_row(aft_row, &aft_hash);
+       ret = get_hash_of_row(aft_row, &d.hash);
        if (ret < 0)
                return ret;
-       ret = get_audio_file_path_of_row(aft_row, &path);
+       ret = get_audio_file_path_of_row(aft_row, &d.path);
        if (ret < 0)
                return ret;
-       PARA_NOTICE_LOG("%s\n", path);
+       PARA_NOTICE_LOG("%s\n", d.path);
        ret = get_afsi_object_of_row(aft_row, &afsi_obj);
        if (ret < 0)
                return ret;
-       ret = load_afsi(&old_afsi, &afsi_obj);
+       ret = load_afsi(&d.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;
+       d.afhi = afd->afhi;
+       d.afhi.chunk_table = afd->afhi.chunk_table = NULL;
        ret = osl(osl_open_disk_object(audio_file_table, aft_row,
                AFTCOL_CHUNKS, &chunk_table_obj));
        if (ret < 0)
                return ret;
-       ret = mmap_full_file(path, O_RDONLY, &map.data, &map.size, &afd->fd);
+       ret = mmap_full_file(d.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);
+       ret = hash_compare(file_hash, d.hash);
        para_munmap(map.data, map.size);
        if (ret) {
                ret = -E_HASH_MISMATCH;
                goto err;
        }
-       new_afsi = old_afsi;
+       new_afsi = d.afsi;
        new_afsi.num_played++;
        new_afsi.last_played = time(NULL);
        save_afsi(&new_afsi, &afsi_obj); /* in-place update */
 
-       afd->audio_format_id = old_afsi.audio_format_id;
+       afd->audio_format_id = d.afsi.audio_format_id;
        load_chunk_table(&afd->afhi, chunk_table_obj.data);
-       ret = make_status_items(afd, &old_afsi, path, score, file_hash);
+       ret = make_status_items(&d);
        if (ret < 0)
                goto err;
        aced.aft_row = aft_row;
-       aced.old_afsi = &old_afsi;
+       aced.old_afsi = &d.afsi;
        afs_event(AFSI_CHANGE, NULL, &aced);
        ret = save_afd(afd);
 err:
        free(afd->afhi.chunk_table);
        osl_close_disk_object(&chunk_table_obj);
        if (ret < 0) {
-               PARA_ERROR_LOG("%s: %s\n", path, para_strerror(-ret));
+               PARA_ERROR_LOG("%s: %s\n", d.path, para_strerror(-ret));
                ret = score_delete(aft_row);
                if (ret >= 0)
                        goto again;