in progress (compiles)
[src/app-framework-main.git] / src / appfwk.c
index 0ede96a..a8ae6c8 100644 (file)
@@ -43,7 +43,7 @@ struct appfwk {
 struct appfwk *appfwk_create()
 {
        struct appfwk *appfwk = malloc(sizeof * appfwk);
-       if (!appfwk)
+       if (appfwk == NULL)
                errno = ENOMEM;
        else {
                appfwk->refcount = 1;
@@ -66,6 +66,9 @@ void appfwk_unref(struct appfwk *appfwk)
 {
        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);
@@ -325,12 +328,29 @@ int appfwk_ensure_applications(struct appfwk *af)
        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()
 {
@@ -342,4 +362,5 @@ printf("direct = %s\n", json_object_to_json_string_ext(af->applications.direct,
 printf("byapp = %s\n", json_object_to_json_string_ext(af->applications.byapp, 3));
 return 0;
 }
+#endif