struct appfwk *appfwk_create()
{
struct appfwk *appfwk = malloc(sizeof * appfwk);
- if (!appfwk)
+ if (appfwk == NULL)
errno = ENOMEM;
else {
appfwk->refcount = 1;
{
assert(appfwk);
if (!--appfwk->refcount) {
+ json_object_put(appfwk->applications.pubarr);
+ json_object_put(appfwk->applications.direct);
+ json_object_put(appfwk->applications.byapp);
while (appfwk->nrroots)
free(appfwk->roots[--appfwk->nrroots]);
free(appfwk->roots);
return af->applications.pubarr ? 0 : appfwk_update_applications(af);
}
-/* regenerate the list of applications */
struct json_object *appfwk_application_list(struct appfwk *af)
{
return appfwk_ensure_applications(af) ? NULL : af->applications.pubarr;
}
+struct json_object *appfwk_get_application(struct appfwk *af, const char *id)
+{
+ struct json_object *result;
+ if (!appfwk_ensure_applications(af) && json_object_object_get_ex(af->applications.direct, id, &result))
+ return result;
+ return NULL;
+}
+
+struct json_object *appfwk_get_application_public(struct appfwk *af, const char *id)
+{
+ struct json_object *result = appfwk_get_application(af, id);
+ return result && json_object_object_get_ex(result, "public", &result) ? result : NULL;
+}
+
+
+
+
+#if defined(TESTAPPFWK)
#include <stdio.h>
int main()
{
printf("byapp = %s\n", json_object_to_json_string_ext(af->applications.byapp, 3));
return 0;
}
+#endif