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,
int ret;
time(¤t_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);
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;
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;