struct song * directory_lookup_song(struct directory *directory, const char *uri) { char *duplicated, *base; struct song *song; assert(directory != NULL); assert(uri != NULL); duplicated = g_strdup(uri); base = strrchr(duplicated, '/'); if (base != NULL) { *base++ = 0; directory = directory_lookup_directory(directory, duplicated); if (directory == NULL) { g_free(duplicated); return NULL; } } else base = duplicated; song = songvec_find(&directory->songs, base); assert(song == NULL || song->parent == directory); g_free(duplicated); return song; }
G_GNUC_PURE static const struct directory * simple_db_lookup_directory(const struct simple_db *db, const char *uri) { assert(db != NULL); assert(db->root != NULL); assert(uri != NULL); return directory_lookup_directory(db->root, uri); }