struct _atom_backend
{
AtomEntry * (*retrieve_entry) (AtomCtx *, AtomID *);
- void (*enumerate_entries) (AtomCtx *, AtomEntry ***, size_t *);
+ void (*enumerate_entries) (AtomCtx *, char ***, AtomEntry ***, size_t *);
int (*is_feed) (AtomCtx *, AtomID *);
};
void
atom_backend_enumerate_entries_set (AtomBackend *backend,
void enumerate_entries (AtomCtx *,
- AtomEntry ***, size_t*))
+ char ***,
+ AtomEntry ***,
+ size_t *))
{
backend->enumerate_entries = enumerate_entries;
}
}
void
-atom_backend_enumerate_entries (AtomCtx *ctx, AtomEntry *** entries, size_t *len)
+atom_backend_enumerate_entries (AtomCtx *ctx, char *** reqs,
+ AtomEntry *** entries, size_t *len)
{
AtomBackend *backend;
+ char **rreqs = NULL;
+ AtomEntry **rentries = NULL;
+ size_t rlen = 0;
+ int i;
backend = atom_backend (ctx);
if (backend && backend->enumerate_entries)
{
- backend->enumerate_entries (ctx, entries, len);
- return;
+ backend->enumerate_entries (ctx, &rreqs, &rentries, &rlen);
+ }
+ if (reqs)
+ {
+ *reqs = rreqs;
+ }
+ else
+ {
+ for (i = 0; i < rlen; i++)
+ g_free (rreqs[i]);
+ g_free (rreqs);
}
if (entries)
- *entries = NULL;
+ {
+ *entries = rentries;
+ }
+ else
+ {
+ for (i = 0; i < rlen; i++)
+ atom_entry_delete (rentries[i]);
+ g_free (rentries);
+ }
if (len)
- *len = 0;
+ *len = rlen;
}
int
AtomFeed *feed;
AtomEntry **entries;
size_t len;
- atom_backend_enumerate_entries (ctx, &entries, &len);
+ atom_backend_enumerate_entries (ctx, NULL, &entries, &len);
if (atom_error_get (ctx) != NULL)
return NULL;
feed = atom_feed_new ();
atom_feed_entry_append_array (feed, entries, len);
+ g_free (entries);
return feed;
}
res = atom_resource_new_from_feed (feed);
atom_feed_delete (feed);
}
- else if (atom_error_get (ctx) != NULL)
+ else if (atom_error_get (ctx) == NULL)
{
AtomEntry *entry;
entry = atom_retrieve_entry (ctx, id);