- char portstr[30];
-
- sprintf(portstr, "%d", port);
- return j_add_many_strings_m(jdesc,
- "#metadata.install-dir", installdir,
- "#metadata.app-data-dir", "%h/app-data",
- "#metadata.icons-dir", icondir,
- "#metadata.http-port", portstr,
- NULL) ? 0 : -1;
+ int rc;
+ int i;
+ char path[PATH_MAX + 1], target[PATH_MAX + 1];
+ const struct unitdesc *u;
+
+ i = 0;
+ while (i < desc->nunits) {
+ u = &desc->units[i];
+ rc = check_unit_desc(u, 1);
+ if (!rc) {
+ rc = get_unit_path(path, sizeof path, u);
+ if (rc >= 0) {
+ rc = putfile(path, u->content, u->content_length);
+ if (rc >= 0 && u->wanted_by != NULL) {
+ rc = get_wants_path(path, sizeof path, u);
+ if (rc >= 0) {
+ rc = get_wants_target(target, sizeof target, u);
+ if (rc >= 0) {
+ unlink(path); /* TODO? check? */
+ rc = symlink(target, path);
+ }
+ }
+ }
+ i++;
+ }
+ }
+ if (rc < 0)
+ goto error;
+ }
+ rc = do_send_reload(desc);
+ if (rc < 0)
+ goto error;
+ return 0;
+error:
+ i = errno;
+ do_uninstall_units(closure, desc);
+ errno = i;
+ return rc;