tag_id3: export tag_id3_load()

This commit is contained in:
Max Kellermann 2012-04-23 22:51:45 +02:00
parent 89377556cd
commit 404fa89937
2 changed files with 41 additions and 19 deletions

View File

@ -541,31 +541,43 @@ tag_id3_riff_aiff_load(FILE *file)
return tag;
}
struct id3_tag *
tag_id3_load(const char *path_fs, GError **error_r)
{
FILE *file = fopen(path_fs, "rb");
if (file == NULL) {
g_set_error(error_r, g_file_error_quark(), errno,
"Failed to open file %s: %s",
path_fs, g_strerror(errno));
return NULL;
}
struct id3_tag *tag = tag_id3_find_from_beginning(file);
if (tag == NULL) {
tag = tag_id3_riff_aiff_load(file);
if (tag == NULL)
tag = tag_id3_find_from_end(file);
}
fclose(file);
return tag;
}
bool
tag_id3_scan(const char *path_fs,
const struct tag_handler *handler, void *handler_ctx)
{
struct id3_tag *tag;
FILE *stream;
GError *error = NULL;
struct id3_tag *tag = tag_id3_load(path_fs, &error);
if (tag == NULL) {
if (error != NULL) {
g_warning("%s", error->message);
g_error_free(error);
}
stream = fopen(path_fs, "rb");
if (!stream) {
g_debug("tag_id3_load: Failed to open file: '%s', %s",
path_fs, g_strerror(errno));
return false;
}
tag = tag_id3_find_from_beginning(stream);
if (tag == NULL)
tag = tag_id3_riff_aiff_load(stream);
if (!tag)
tag = tag_id3_find_from_end(stream);
fclose(stream);
if (!tag)
return false;
scan_id3_tag(tag, handler, handler_ctx);
id3_tag_delete(tag);
return true;

View File

@ -22,6 +22,8 @@
#include "check.h"
#include <glib.h>
#include <stdbool.h>
struct tag_handler;
@ -36,9 +38,17 @@ tag_id3_scan(const char *path_fs,
struct id3_tag;
struct tag *tag_id3_import(struct id3_tag *);
#else
/**
* Loads the ID3 tags from the file into a libid3tag object. The
* return value must be freed with id3_tag_delete().
*
* @return NULL on error or if no ID3 tag was found in the file (no
* GError will be set)
*/
struct id3_tag *
tag_id3_load(const char *path_fs, GError **error_r);
#include <glib.h>
#else
static inline bool
tag_id3_scan(G_GNUC_UNUSED const char *path_fs,