X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafm-urun.c;h=8c21b2a4621a89ac928105164838bd3b0ad4db0d;hb=d40fc40da829be0975411f98212c7c46a13712e9;hp=d242df80930bbcebf9c1cf90b16456cb28e42e8c;hpb=1b079c90ed954cca65a7b07d5480e75d46217b85;p=src%2Fapp-framework-main.git diff --git a/src/afm-urun.c b/src/afm-urun.c index d242df8..8c21b2a 100644 --- a/src/afm-urun.c +++ b/src/afm-urun.c @@ -1,5 +1,5 @@ /* - Copyright 2015, 2016, 2017 IoT.bzh + Copyright (C) 2015-2018 IoT.bzh author: José Bollo @@ -40,7 +40,7 @@ static const char key_unit_d_path[] = "-unit-dpath-"; /**************** get appli basis *********************/ -static int get_basis(struct json_object *appli, int *isuser, const char **dpath, int load, int uid) +static int get_basis(struct json_object *appli, int *isuser, const char **dpath, int uid) { char userid[40]; char *dp, *arodot, *nun; @@ -76,12 +76,6 @@ static int get_basis(struct json_object *appli, int *isuser, const char **dpath, return 0; } - /* not here. load it? */ - if (!load) { - errno = ENOENT; - goto error; - } - /* get uname */ if (!j_read_string_at(appli, "unit-name", &uname)) { ERROR("'unit-name' missing in appli description %s", json_object_get_string(appli)); @@ -246,7 +240,7 @@ int afm_urun_once(struct json_object *appli, int uid) int rc, isuser; /* retrieve basis */ - rc = get_basis(appli, &isuser, &udpath, 1, uid); + rc = get_basis(appli, &isuser, &udpath, uid); if (rc < 0) goto error; @@ -280,7 +274,7 @@ int afm_urun_once(struct json_object *appli, int uid) ERROR("can't getpid of %s unit %s for uid %d: %m", uscope, uname, uid); goto error; } - + return rc; error: @@ -352,7 +346,7 @@ struct json_object *afm_urun_list(struct afm_udb *db, int uid) n = json_object_array_length(apps); for (i = 0 ; i < n ; i++) { appli = json_object_array_get_idx(apps, i); - if (appli && get_basis(appli, &isuser, &udpath, 0, uid) >= 0) { + if (appli && get_basis(appli, &isuser, &udpath, uid) >= 0) { pid = systemd_unit_pid_of_dpath(isuser, udpath); if (pid > 0 && j_read_string_at(appli, "id", &id)) { state = systemd_unit_state_of_dpath(isuser, udpath); @@ -404,7 +398,7 @@ struct json_object *afm_urun_state(struct afm_udb *db, int runid, int uid) for (i = 0 ; i < n ; i++) { appli = json_object_array_get_idx(apps, i); if (appli - && get_basis(appli, &isuser, &udpath, 0, uid) >= 0 + && get_basis(appli, &isuser, &udpath, uid) >= 0 && !strcmp(dpath, udpath) && j_read_string_at(appli, "id", &id)) { pid = systemd_unit_pid_of_dpath(isuser, udpath); @@ -418,9 +412,32 @@ struct json_object *afm_urun_state(struct afm_udb *db, int runid, int uid) WARNING("searched runid %d of dpath %s isn't an applications", runid, dpath); end: json_object_put(apps); - free(dpath); + free(dpath); } return result; } +/* + * Search the runid, if any, of the application of 'id' for the user 'uid'. + * Returns the pid (a positive not null number) or -1 in case of error. + */ +int afm_urun_search_runid(struct afm_udb *db, const char *id, int uid) +{ + int isuser, pid; + const char *udpath; + struct json_object *appli; + + appli = afm_udb_get_application_private(db, id, uid); + if (!appli) { + NOTICE("Unknown appid %s", id); + errno = ENOENT; + pid = -1; + } else if (get_basis(appli, &isuser, &udpath, uid) < 0) { + pid = -1; + } else { + pid = systemd_unit_pid_of_dpath(isuser, udpath); + } + return pid; +} +