X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=aft.c;h=0f15cd28e96cf726275508faa63b07d4a75e190b;hp=0013b2a2f52ce434a6826bd5a352a996ae28b875;hb=2d8f0c21ac8735fc06d1aa88e7873614392e3042;hpb=3c6314232e6ef8cb8d99dad815e7169d372717c2 diff --git a/aft.c b/aft.c index 0013b2a2..0f15cd28 100644 --- a/aft.c +++ b/aft.c @@ -827,7 +827,7 @@ static int ls_path_compare(const void *a, const void *b) static int sort_matching_paths(struct ls_options *options) { size_t nmemb = options->num_matching_paths; - size_t size = sizeof(uint32_t); + size_t size = sizeof(*options->data_ptr); int (*compar)(const void *, const void *); int i; @@ -1695,6 +1695,54 @@ err: return ret; } +/* TODO: optionally fix problems by removing offending rows */ +static int check_audio_file(struct osl_row *row, void *data) +{ + char *path; + struct para_buffer *pb = data; + struct stat statbuf; + int ret = get_audio_file_path_of_row(row, &path); + struct afs_info afsi; + char *blob_name; + + if (ret < 0) { + para_printf(pb, "%s\n", PARA_STRERROR(-ret)); + return 1; + } + if (stat(path, &statbuf) < 0) + para_printf(pb, "%s: stat error (%s)\n", path, strerror(errno)); + else { + if (!S_ISREG(statbuf.st_mode)) + para_printf(pb, "%s: not a regular file\n", path); + } + ret = get_afsi_of_row(row, &afsi); + if (ret < 0) { + para_printf(pb, "%s: %s\n", path, PARA_STRERROR(-ret)); + return 1; + } + ret = lyr_get_name_by_id(afsi.lyrics_id, &blob_name); + if (ret < 0) + para_printf(pb, "%s lyrics id %u: %s\n", path, afsi.lyrics_id, + PARA_STRERROR(-ret)); + ret = img_get_name_by_id(afsi.image_id, &blob_name); + if (ret < 0) + para_printf(pb, "%s image id %u: %s\n", path, afsi.image_id, + PARA_STRERROR(-ret)); + return 1; +} + +int aft_check_callback(__a_unused const struct osl_object *query, struct osl_object *result) +{ + struct para_buffer pb = {.buf = NULL}; + + para_printf(&pb, "checking audio file table...\n"); + audio_file_loop(&pb, check_audio_file); + result->data = pb.buf; + result->size = pb.size; + return 1; + +} + /** * Close the audio file table. *