+
+void
+atom_backend_enumerate_entries (AtomCtx *ctx, AtomEntry *** entries, size_t *len)
+{
+ AtomBackend *backend;
+ backend = atom_backend (ctx);
+ if (backend && backend->enumerate_entries)
+ {
+ backend->enumerate_entries (ctx, entries, len);
+ return;
+ }
+ if (entries)
+ *entries = NULL;
+ if (len)
+ *len = 0;
+}
+
+AtomFeed *
+atom_retrieve_feed (AtomCtx *ctx)
+{
+ AtomFeed *feed;
+ AtomEntry **entries;
+ size_t len;
+ atom_backend_enumerate_entries (ctx, &entries, &len);
+ feed = atom_feed_new ();
+ atom_feed_entry_append_array (feed, entries, len);
+ return feed;
+}
+
+AtomResource *
+atom_retrieve_resource (AtomCtx *ctx, IRI *iri)
+{
+ AtomResource *res;
+ char * path;
+ path = iri_get_path (iri);
+ if (!strcmp (path, "/"))
+ {
+ AtomFeed *feed;
+ feed = atom_retrieve_feed (ctx);
+ if (feed == NULL)
+ return NULL;
+ res = atom_resource_new_from_feed (feed);
+ atom_feed_delete (feed);
+ }
+ else
+ {
+ AtomEntry *entry;
+ entry = atom_retrieve_entry (ctx, iri);
+ if (entry == NULL)
+ return NULL;
+ res = atom_resource_new_from_entry (entry);
+ atom_entry_delete (entry);
+ }
+ return res;
+}