afs.c: Avoid noisy log message.
[paraslash.git] / aft.c
diff --git a/aft.c b/aft.c
index 0013b2a..0f15cd2 100644 (file)
--- 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.
  *