/*
- Copyright 2016, 2017 IoT.bzh
+ Copyright (C) 2016, 2017, 2018 IoT.bzh
author: José Bollo <jose.bollo@iot.bzh>
* with its given 'closure' and the array descripbing the units.
* Return 0 in case of success or a negative value in case of error.
*/
-static int process_all_units(char *corpus, const struct unitconf *conf, int (*process)(void *closure, const struct generatedesc *desc), void *closure)
+static int process_all_units(char *corpus, const struct unitconf *conf, int (*process)(void *closure, const struct generatedesc *desc), void *closure, struct json_object *jdesc)
{
int rc, rc2;
char *beg, *end, *befbeg, *aftend;
struct generatedesc gdesc;
gdesc.conf = conf;
+ gdesc.desc = jdesc;
gdesc.units = NULL;
gdesc.nunits = 0;
rc = rc2 = 0;
/*
* Clear the unit generator
*/
-void unit_generator_off()
+void unit_generator_close_template()
{
free(template);
template = NULL;
* Initialises the unit generator with the content of the file of path 'filename'.
* Returns 0 in case of success or a negative number in case of error.
*/
-int unit_generator_on(const char *filename)
+int unit_generator_open_template(const char *filename)
{
size_t size;
char *tmp;
int rc;
- unit_generator_off();
+ unit_generator_close_template();
rc = getfile(filename ? : FWK_UNIT_CONF, &template, NULL);
if (!rc) {
size = pack(template, ';');
sprintf(portstr, "%d", conf->port);
return j_add_many_strings_m(jdesc,
"#metadata.install-dir", conf->installdir,
- "#metadata.app-data-dir", "%h/app-data",
"#metadata.icons-dir", conf->icondir,
"#metadata.http-port", portstr,
NULL) ? 0 : -1;
* Applies the object 'jdesc' augmented of meta data coming
* from 'conf' to the current unit generator.
* The current unit generator will be set to the default one if not unit
- * was previously set using the function 'unit_generator_on'.
+ * was previously set using the function 'unit_generator_open_template'.
* The callback function 'process' is then called with the
* unit descriptors array and the expected closure.
* Return what returned process in case of success or a negative
if (rc)
ERROR("can't set the metadata. %m");
else {
- rc = template ? 0 : unit_generator_on(NULL);
+ rc = template ? 0 : unit_generator_open_template(NULL);
if (!rc) {
instance = NULL;
rc = apply_mustach(template, jdesc, &instance, &size);
if (!rc)
- rc = process_all_units(instance, conf, process, closure);
+ rc = process_all_units(instance, conf, process, closure, jdesc);
free(instance);
}
}
return rc;
}
-static int do_send_reload(const struct generatedesc *desc)
-{
- int i;
- int reloadsys, reloadusr;
- const struct unitdesc *u;
-
- reloadsys = reloadusr = 0;
- for (i = 0 ; i < desc->nunits ; i++) {
- u = &desc->units[i];
- if (u->wanted_by != NULL) {
- switch (u->scope) {
- case unitscope_user:
- reloadusr = 1;
- break;
- case unitscope_system:
- reloadsys = 1;
- break;
- default:
- break;
- }
- }
- }
-
- if (reloadusr)
- reloadusr = systemd_daemon_reload(1);
- if (reloadsys)
- reloadsys = systemd_daemon_reload(0);
- return 0;
-}
-
static int do_uninstall_units(void *closure, const struct generatedesc *desc)
{
int rc, rc2;
if (rc2 < 0 && rc == 0)
rc = rc2;
}
- rc2 = do_send_reload(desc);
- if (rc2 < 0 && rc == 0)
- rc = rc2;
return rc;
}
if (rc < 0)
goto error;
}
- rc = do_send_reload(desc);
- if (rc < 0)
- goto error;
return 0;
error:
i = errno;