Skip to content
Snippets Groups Projects
Commit ba37fcfe authored by Eric Vidal's avatar Eric Vidal :speech_balloon:
Browse files

add directory servicedir and modify general directory of service file.

Do not write the resolve file itself.
move contents and ncontents from regex to dependencies addon struct
parent 9d72e5ee
No related branches found
No related tags found
No related merge requests found
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include <66/ssexec.h> #include <66/ssexec.h>
#include <66/resolve.h> #include <66/resolve.h>
#include <66/state.h> #include <66/utils.h>
typedef struct resolve_service_addon_path_s resolve_service_addon_path_t, *resolve_service_addon_path_t_ref ; typedef struct resolve_service_addon_path_s resolve_service_addon_path_t, *resolve_service_addon_path_t_ref ;
struct resolve_service_addon_path_s struct resolve_service_addon_path_s
...@@ -33,9 +33,10 @@ struct resolve_service_addon_path_s ...@@ -33,9 +33,10 @@ struct resolve_service_addon_path_s
uint32_t home ; // string, /var/lib/66 or /home/user/.66 uint32_t home ; // string, /var/lib/66 or /home/user/.66
uint32_t frontend ; // string, /home/<user>/.66/service or /etc/66/service or /usr/lib/66/service uint32_t frontend ; // string, /home/<user>/.66/service or /etc/66/service or /usr/lib/66/service
uint32_t status ; //string, /var/lib/66/system/service/svc/service_name/state/status uint32_t status ; //string, /var/lib/66/system/service/svc/service_name/state/status
uint32_t servicedir ; //string, /var/lib/66/system/service/svc/service_name or for module /var/lib/66/system/service/svc/module_name/svc/service_name
} ; } ;
#define RESOLVE_SERVICE_ADDON_PATH_ZERO { 0,0,0 } #define RESOLVE_SERVICE_ADDON_PATH_ZERO { 0,0,0,0 }
typedef struct resolve_service_addon_dependencies_s resolve_service_addon_dependencies_t, *resolve_service_addon_dependencies_t_ref ; typedef struct resolve_service_addon_dependencies_s resolve_service_addon_dependencies_t, *resolve_service_addon_dependencies_t_ref ;
struct resolve_service_addon_dependencies_s struct resolve_service_addon_dependencies_s
...@@ -43,13 +44,15 @@ struct resolve_service_addon_dependencies_s ...@@ -43,13 +44,15 @@ struct resolve_service_addon_dependencies_s
uint32_t depends ; // string uint32_t depends ; // string
uint32_t requiredby ; // string, uint32_t requiredby ; // string,
uint32_t optsdeps ; // string, optional dependencies uint32_t optsdeps ; // string, optional dependencies
uint32_t contents ; // string
uint32_t ndepends ; // integer uint32_t ndepends ; // integer
uint32_t nrequiredby ; // integer uint32_t nrequiredby ; // integer
uint32_t noptsdeps ; // integer uint32_t noptsdeps ; // integer
uint32_t ncontents ; // integer
} ; } ;
#define RESOLVE_SERVICE_ADDON_DEPENDENCIES_ZERO { 0,0,0,0,0,0 } #define RESOLVE_SERVICE_ADDON_DEPENDENCIES_ZERO { 0,0,0,0,0,0,0,0 }
typedef struct resolve_service_addon_timeout_s resolve_service_addon_timeout_t, *resolve_service_addon_timeout_t_ref ; typedef struct resolve_service_addon_timeout_s resolve_service_addon_timeout_t, *resolve_service_addon_timeout_t_ref ;
struct resolve_service_addon_timeout_s struct resolve_service_addon_timeout_s
...@@ -148,15 +151,14 @@ struct resolve_service_addon_regex_s ...@@ -148,15 +151,14 @@ struct resolve_service_addon_regex_s
uint32_t directories ; // string uint32_t directories ; // string
uint32_t files ; // string uint32_t files ; // string
uint32_t infiles ; // string uint32_t infiles ; // string
uint32_t contents ; // string
uint32_t ndirectories ; // integer uint32_t ndirectories ; // integer
uint32_t nfiles ; // integer uint32_t nfiles ; // integer
uint32_t ninfiles ; // integer uint32_t ninfiles ; // integer
uint32_t ncontents ; // integer
} ; } ;
#define RESOLVE_SERVICE_ADDON_REGEX_ZERO { 0,0,0,0,0,0,0,0,0 } #define RESOLVE_SERVICE_ADDON_REGEX_ZERO { 0,0,0,0,0,0,0 }
typedef struct resolve_service_s resolve_service_t, *resolve_service_t_ref ; typedef struct resolve_service_s resolve_service_t, *resolve_service_t_ref ;
...@@ -225,14 +227,17 @@ enum resolve_service_enum_e ...@@ -225,14 +227,17 @@ enum resolve_service_enum_e
E_RESOLVE_SERVICE_HOME, E_RESOLVE_SERVICE_HOME,
E_RESOLVE_SERVICE_FRONTEND, E_RESOLVE_SERVICE_FRONTEND,
E_RESOLVE_SERVICE_STATUS, E_RESOLVE_SERVICE_STATUS,
E_RESOLVE_SERVICE_SERVICEDIR,
// dependencies // dependencies
E_RESOLVE_SERVICE_DEPENDS, E_RESOLVE_SERVICE_DEPENDS,
E_RESOLVE_SERVICE_REQUIREDBY, E_RESOLVE_SERVICE_REQUIREDBY,
E_RESOLVE_SERVICE_OPTSDEPS, E_RESOLVE_SERVICE_OPTSDEPS,
E_RESOLVE_SERVICE_CONTENTS,
E_RESOLVE_SERVICE_NDEPENDS, E_RESOLVE_SERVICE_NDEPENDS,
E_RESOLVE_SERVICE_NREQUIREDBY, E_RESOLVE_SERVICE_NREQUIREDBY,
E_RESOLVE_SERVICE_NOPTSDEPS, E_RESOLVE_SERVICE_NOPTSDEPS,
E_RESOLVE_SERVICE_NCONTENTS,
// execute // execute
E_RESOLVE_SERVICE_RUN, E_RESOLVE_SERVICE_RUN,
...@@ -287,11 +292,9 @@ enum resolve_service_enum_e ...@@ -287,11 +292,9 @@ enum resolve_service_enum_e
E_RESOLVE_SERVICE_REGEX_DIRECTORIES, E_RESOLVE_SERVICE_REGEX_DIRECTORIES,
E_RESOLVE_SERVICE_REGEX_FILES, E_RESOLVE_SERVICE_REGEX_FILES,
E_RESOLVE_SERVICE_REGEX_INFILES, E_RESOLVE_SERVICE_REGEX_INFILES,
E_RESOLVE_SERVICE_REGEX_CONTENTS,
E_RESOLVE_SERVICE_REGEX_NDIRECTORIES, E_RESOLVE_SERVICE_REGEX_NDIRECTORIES,
E_RESOLVE_SERVICE_REGEX_NFILES, E_RESOLVE_SERVICE_REGEX_NFILES,
E_RESOLVE_SERVICE_REGEX_NINFILES, E_RESOLVE_SERVICE_REGEX_NINFILES,
E_RESOLVE_SERVICE_REGEX_NCONTENTS,
E_RESOLVE_SERVICE_ENDOFKEY E_RESOLVE_SERVICE_ENDOFKEY
} ; } ;
...@@ -311,20 +314,16 @@ extern int service_resolve_modify_field(resolve_service_t *res, resolve_service_ ...@@ -311,20 +314,16 @@ extern int service_resolve_modify_field(resolve_service_t *res, resolve_service_
extern int service_resolve_read_cdb(cdb *c, resolve_service_t *res) ; extern int service_resolve_read_cdb(cdb *c, resolve_service_t *res) ;
extern int service_resolve_write(resolve_service_t *res) ; extern int service_resolve_write(resolve_service_t *res) ;
extern int service_resolve_write_cdb(cdbmaker *c, resolve_service_t *sres) ; extern int service_resolve_write_cdb(cdbmaker *c, resolve_service_t *sres) ;
extern void service_enable_disable(graph_t *g, char const *base, char const *sv, uint8_t action) ; extern void service_enable_disable(graph_t *g, resolve_service_t *res, resolve_service_t *ares, unsigned int areslen, uint8_t action, visit_t *visit) ;
/* avoid circular dependencies by prototyping the ss_state_t instead
* of calling the state.h header file*/
typedef struct ss_state_s ss_state_t, *ss_state_t_ref ;
extern int service_is(ss_state_t *ste, uint32_t flag) ;
/** Graph */ /** Graph */
extern void service_graph_g(char const *alist, size_t alen, graph_t *graph, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info, uint32_t flag) ; extern void service_graph_g(char const *alist, size_t alen, graph_t *graph, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info, uint32_t flag) ;
extern void service_graph_collect(graph_t *g, char const *alist, size_t alen, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info, uint32_t flag) ; extern void service_graph_collect(graph_t *g, char const *alist, size_t alen, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info, uint32_t flag) ;
extern void service_graph_build(graph_t *g, resolve_service_t *ares, unsigned int areslen, uint32_t flag) ; extern void service_graph_build(graph_t *g, resolve_service_t *ares, unsigned int areslen, uint32_t flag) ;
extern int service_is(ss_state_t *ste, uint32_t flag) ;
/** SHOULD BE NOT USED */
extern int service_resolve_sort_bytype(stralloc *list, char const *src) ;
#endif #endif
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <oblibs/log.h> #include <oblibs/log.h>
#include <oblibs/string.h> #include <oblibs/string.h>
#include <oblibs/directory.h>
#include <skalibs/types.h> #include <skalibs/types.h>
#include <skalibs/stralloc.h> #include <skalibs/stralloc.h>
...@@ -26,41 +27,86 @@ ...@@ -26,41 +27,86 @@
#include <66/resolve.h> #include <66/resolve.h>
#include <66/state.h> #include <66/state.h>
#include <66/ssexec.h> #include <66/ssexec.h>
#include <66/parser.h> #include <66/parse.h>
#include <66/utils.h> #include <66/utils.h>
#include <66/service.h> #include <66/service.h>
#include <66/sanitize.h>
#include <s6/config.h> #include <s6/config.h>
#ifndef FAKELEN #ifndef FAKELEN
#define FAKELEN strlen(run) #define FAKELEN strlen(run)
#endif #endif
static uint32_t compute_scan_dir(resolve_wrapper_t_ref wres, ssexec_t *info, char const *service) static uint32_t compute_servicedir(resolve_wrapper_t_ref wres, ssexec_t *info)
{
resolve_service_t_ref res = (resolve_service_t *)wres->obj ;
char *name = res->sa.s + res->name ;
size_t namelen = strlen(name) ;
char dir[info->base.len + SS_SYSTEM_LEN + SS_SERVICE_LEN + SS_SVC_LEN + 1 + namelen + 1] ;
auto_strings(dir, info->base.s, SS_SYSTEM, SS_SERVICE, SS_SVC, "/", name) ;
return resolve_add_string(wres, dir) ;
}
static uint32_t compute_status(resolve_wrapper_t_ref wres, ssexec_t *info)
{
resolve_service_t_ref res = (resolve_service_t *)wres->obj ;
char *name = res->sa.s + res->name ;
size_t namelen = strlen(name) ;
char dir[info->base.len + SS_SYSTEM_LEN + SS_SERVICE_LEN + SS_SVC_LEN + 1 + namelen + SS_STATE_LEN + 1 + SS_STATUS_LEN + 1] ;
auto_strings(dir, info->base.s, SS_SYSTEM, SS_SERVICE, SS_SVC, "/", name, SS_STATE, "/", SS_STATUS) ;
return resolve_add_string(wres, dir) ;
}
static uint32_t compute_scan_dir(resolve_wrapper_t_ref wres, ssexec_t *info)
{ {
log_flow() ; log_flow() ;
size_t servicelen = strlen(service) ; resolve_service_t_ref res = (resolve_service_t *)wres->obj ;
char *name = res->sa.s + res->name ;
size_t namelen = strlen(name) ;
char tmp[info->live.len + SS_STATE_LEN + 1 + info->ownerlen + 1 + servicelen + 1 + SS_SCANDIR_LEN + 1 + servicelen + 1] ; char dir[info->live.len + SS_STATE_LEN + 1 + info->ownerlen + 1 + namelen + 1 + SS_SCANDIR_LEN + 1 + namelen + 1] ;
auto_strings(tmp, info->live.s, SS_STATE + 1, "/", info->ownerstr, "/", service, "/", SS_SCANDIR, "/", service) ;
return resolve_add_string(wres, tmp) ; auto_strings(dir, info->live.s, SS_STATE + 1, "/", info->ownerstr, "/", name, "/", SS_SCANDIR, "/", name) ;
return resolve_add_string(wres, dir) ;
}
static uint32_t compute_state_dir(resolve_wrapper_t_ref wres, ssexec_t *info, char const *folder)
{
log_flow() ;
resolve_service_t_ref res = (resolve_service_t *)wres->obj ;
char *name = res->sa.s + res->name ;
size_t namelen = strlen(name) ;
size_t folderlen = strlen(folder) ;
char dir[info->live.len + SS_STATE_LEN + 1 + info->ownerlen + 1 + namelen + 1 + folderlen + 1] ;
auto_strings(dir, info->live.s, SS_STATE + 1, "/", info->ownerstr, "/", name, "/", folder) ;
return resolve_add_string(wres, dir) ;
} }
static uint32_t compute_state_dir(resolve_wrapper_t_ref wres, ssexec_t *info, char const *service, char const *folder) static uint32_t compute_pipe_service(resolve_wrapper_t_ref wres, ssexec_t *info, char const *service, char const *name)
{ {
log_flow() ; log_flow() ;
size_t servicelen = strlen(service) ; size_t servicelen = strlen(service) ;
size_t folderlen = strlen(folder) ; size_t namelen = strlen(name) ;
char tmp[info->live.len + SS_STATE_LEN + 1 + info->ownerlen + 1 + servicelen + 1 + folderlen + 1] ; char tmp[info->live.len + SS_STATE_LEN + 1 + info->ownerlen + 1 + servicelen + 1 + SS_SCANDIR_LEN + 1 + namelen + 1] ;
auto_strings(tmp, info->live.s, SS_STATE + 1, "/", info->ownerstr, "/", service, "/", folder) ; auto_strings(tmp, info->live.s, SS_STATE + 1, "/", info->ownerstr, "/", service, "/", SS_SCANDIR, "/", name) ;
return resolve_add_string(wres, tmp) ; return resolve_add_string(wres, tmp) ;
} }
static uint32_t compute_log_dir(resolve_wrapper_t_ref wres, resolve_service_t *res) static uint32_t compute_log_dir(resolve_wrapper_t_ref wres, resolve_service_t *res)
...@@ -68,7 +114,7 @@ static uint32_t compute_log_dir(resolve_wrapper_t_ref wres, resolve_service_t *r ...@@ -68,7 +114,7 @@ static uint32_t compute_log_dir(resolve_wrapper_t_ref wres, resolve_service_t *r
log_flow() ; log_flow() ;
size_t namelen = strlen(res->sa.s + res->name) ; size_t namelen = strlen(res->sa.s + res->name) ;
size_t syslen = res->owner ? strlen(res->sa.s + res->path.home) + strlen(SS_LOGGER_USERDIR) : strlen(SS_LOGGER_SYSDIR) ; size_t syslen = res->owner ? strlen(res->sa.s + res->path.home) + strlen(SS_LOGGER_USERDIR) + strlen(SS_USER_DIR) : strlen(SS_LOGGER_SYSDIR) ;
size_t dstlen = res->logger.destination ? strlen(res->sa.s + res->logger.destination) : strlen(SS_LOGGER_SYSDIR) ; size_t dstlen = res->logger.destination ? strlen(res->sa.s + res->logger.destination) : strlen(SS_LOGGER_SYSDIR) ;
char dstlog[syslen + dstlen + namelen + 1] ; char dstlog[syslen + dstlen + namelen + 1] ;
...@@ -91,20 +137,6 @@ static uint32_t compute_log_dir(resolve_wrapper_t_ref wres, resolve_service_t *r ...@@ -91,20 +137,6 @@ static uint32_t compute_log_dir(resolve_wrapper_t_ref wres, resolve_service_t *r
return resolve_add_string(wres, dstlog) ; return resolve_add_string(wres, dstlog) ;
} }
static uint32_t compute_pipe_service(resolve_wrapper_t_ref wres, ssexec_t *info, char const *service, char const *name)
{
log_flow() ;
size_t servicelen = strlen(service) ;
size_t namelen = strlen(name) ;
char tmp[info->live.len + SS_STATE_LEN + 1 + info->ownerlen + 1 + servicelen + 1 + SS_SCANDIR_LEN + 1 + namelen + 1] ;
auto_strings(tmp, info->live.s, SS_STATE + 1, "/", info->ownerstr, "/", service, "/", SS_SCANDIR, "/", name) ;
return resolve_add_string(wres, tmp) ;
}
/** /**
* @!runorfinish -> finish, @runorfinish -> run * @!runorfinish -> finish, @runorfinish -> run
* */ * */
...@@ -303,7 +335,7 @@ static void compute_log_script(resolve_service_t *res) ...@@ -303,7 +335,7 @@ static void compute_log_script(resolve_service_t *res)
free(wres) ; free(wres) ;
} }
static void compute_log(resolve_service_t *res, ssexec_t *info) static void compute_log(resolve_service_t *res, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info)
{ {
log_flow() ; log_flow() ;
...@@ -323,7 +355,6 @@ static void compute_log(resolve_service_t *res, ssexec_t *info) ...@@ -323,7 +355,6 @@ static void compute_log(resolve_service_t *res, ssexec_t *info)
auto_strings(description, str + res->name, " logger") ; auto_strings(description, str + res->name, " logger") ;
lres.name = resolve_add_string(wres, name) ; lres.name = resolve_add_string(wres, name) ;
lres.description = resolve_add_string(wres, description) ; lres.description = resolve_add_string(wres, description) ;
lres.version = resolve_add_string(wres, str + res->version) ; lres.version = resolve_add_string(wres, str + res->version) ;
lres.type = res->type ; lres.type = res->type ;
...@@ -337,16 +368,13 @@ static void compute_log(resolve_service_t *res, ssexec_t *info) ...@@ -337,16 +368,13 @@ static void compute_log(resolve_service_t *res, ssexec_t *info)
lres.owner = res->owner ; lres.owner = res->owner ;
lres.treename = resolve_add_string(wres, str + res->treename) ; lres.treename = resolve_add_string(wres, str + res->treename) ;
lres.user = resolve_add_string(wres, str + res->user) ; lres.user = resolve_add_string(wres, str + res->user) ;
if (res->inmodule)
lres.inmodule = resolve_add_string(wres, str + res->inmodule) ;
lres.path.home = resolve_add_string(wres, str + res->path.home) ; lres.path.home = resolve_add_string(wres, str + res->path.home) ;
lres.path.frontend = resolve_add_string(wres, str + res->path.frontend) ; lres.path.frontend = resolve_add_string(wres, str + res->path.frontend) ;
lres.path.servicedir = compute_servicedir(wres, info) ;
{ lres.path.status = compute_status(wres, info) ;
char status[strlen(res->sa.s + res->path.home) + SS_SYSTEM_LEN + SS_SERVICE_LEN + SS_SVC_LEN + 1 + strlen(name) + SS_STATE_LEN + 1 + SS_STATUS_LEN + 1] ;
auto_strings(status, res->sa.s + res->path.home, SS_SYSTEM, SS_SYSTEM, SS_SVC, "/", name, SS_STATE, "/" SS_STATUS) ;
lres.path.status = resolve_add_string(wres, status) ;
}
lres.dependencies.requiredby = resolve_add_string(wres, str + res->name) ; lres.dependencies.requiredby = resolve_add_string(wres, str + res->name) ;
lres.dependencies.nrequiredby = 1 ; lres.dependencies.nrequiredby = 1 ;
...@@ -360,14 +388,20 @@ static void compute_log(resolve_service_t *res, ssexec_t *info) ...@@ -360,14 +388,20 @@ static void compute_log(resolve_service_t *res, ssexec_t *info)
lres.execute.downsignal = res->logger.execute.downsignal ; lres.execute.downsignal = res->logger.execute.downsignal ;
lres.live.livedir = resolve_add_string(wres, info->live.s) ; lres.live.livedir = resolve_add_string(wres, info->live.s) ;
lres.live.scandir = compute_scan_dir(wres, info, name) ; lres.live.scandir = compute_scan_dir(wres, info) ;
lres.live.statedir = compute_state_dir(wres, info, name, "state") ; lres.live.statedir = compute_state_dir(wres, info, "state") ;
lres.live.eventdir = compute_state_dir(wres, info, name, "event") ; lres.live.eventdir = compute_state_dir(wres, info, "event") ;
lres.live.notifdir = compute_state_dir(wres, info, name, "notif") ; lres.live.notifdir = compute_state_dir(wres, info, "notif") ;
lres.live.supervisedir = compute_state_dir(wres, info, name, "supervise") ; lres.live.supervisedir = compute_state_dir(wres, info, "supervise") ;
lres.live.fdholderdir = compute_pipe_service(wres, info, name, SS_FDHOLDER) ; lres.live.fdholderdir = compute_pipe_service(wres, info, name, SS_FDHOLDER) ;
lres.live.oneshotddir = compute_pipe_service(wres, info, name, SS_ONESHOTD) ; lres.live.oneshotddir = compute_pipe_service(wres, info, name, SS_ONESHOTD) ;
lres.logger.destination = resolve_add_string(wres, str + res->logger.destination) ;
lres.logger.backup = res->logger.backup ;
lres.logger.maxsize = res->logger.maxsize ;
lres.logger.timestamp = res->logger.timestamp ;
lres.logger.want = 0 ;
// oneshot do not use fdholder daemon // oneshot do not use fdholder daemon
if (res->type == TYPE_CLASSIC) { if (res->type == TYPE_CLASSIC) {
...@@ -377,24 +411,28 @@ static void compute_log(resolve_service_t *res, ssexec_t *info) ...@@ -377,24 +411,28 @@ static void compute_log(resolve_service_t *res, ssexec_t *info)
lres.execute.run.runas = resolve_add_string(wres, res->sa.s + res->logger.execute.run.runas) ; lres.execute.run.runas = resolve_add_string(wres, res->sa.s + res->logger.execute.run.runas) ;
} }
if (!service_resolve_write(&lres)) if (service_resolve_array_search(ares, *areslen, name) < 0) {
log_dieu(LOG_EXIT_SYS, "write resolve file of service: ", name) ; if (*areslen >= SS_MAX_SERVICE)
log_die(LOG_EXIT_SYS, "too many services to parse -- compile again 66 changing the --max-service options") ;
ares[(*areslen)++] = lres ;
}
resolve_free(wres) ; free(wres) ;
} }
void parse_compute_resolve(resolve_service_t *res, ssexec_t *info) void parse_compute_resolve(unsigned int idx, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info)
{ {
log_flow() ; log_flow() ;
resolve_service_t_ref res = &ares[idx] ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, res) ; resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, res) ;
char name[strlen(res->sa.s + res->name) + 1] ; char name[strlen(res->sa.s + res->name) + 1] ;
char status[info->base.len + SS_SYSTEM_LEN + SS_SERVICE_LEN + SS_SVC_LEN + 1 + strlen(name) + SS_STATE_LEN + 1 + SS_STATUS_LEN + 1] ;
auto_strings(name, res->sa.s + res->name) ; auto_strings(name, res->sa.s + res->name) ;
auto_strings(status, info->base.s, SS_SYSTEM, SS_SERVICE, SS_SVC, "/", name, SS_STATE, "/", SS_STATUS) ;
res->path.status = resolve_add_string(wres, status) ; res->path.status = compute_status(wres, info) ;
res->path.servicedir = compute_servicedir(wres, info) ;
res->path.home = resolve_add_string(wres, info->base.s) ; res->path.home = resolve_add_string(wres, info->base.s) ;
...@@ -430,7 +468,7 @@ void parse_compute_resolve(resolve_service_t *res, ssexec_t *info) ...@@ -430,7 +468,7 @@ void parse_compute_resolve(resolve_service_t *res, ssexec_t *info)
* *
* /run/66/scandir/uid/ * /run/66/scandir/uid/
* */ * */
res->live.scandir = compute_scan_dir(wres, info, name) ; res->live.scandir = compute_scan_dir(wres, info) ;
/* state */ /* state */
/** /**
...@@ -441,16 +479,16 @@ void parse_compute_resolve(resolve_service_t *res, ssexec_t *info) ...@@ -441,16 +479,16 @@ void parse_compute_resolve(resolve_service_t *res, ssexec_t *info)
* /run/66/state/uid/service_name/event * /run/66/state/uid/service_name/event
* /run/66/state/uid/service_name/supervise * /run/66/state/uid/service_name/supervise
* */ * */
res->live.statedir = compute_state_dir(wres, info, name, "state") ; res->live.statedir = compute_state_dir(wres, info, "state") ;
/* event */ /* event */
res->live.eventdir = compute_state_dir(wres, info, name, "event") ; res->live.eventdir = compute_state_dir(wres, info, "event") ;
/* notif */ /* notif */
res->live.notifdir = compute_state_dir(wres, info, name, "notif") ; res->live.notifdir = compute_state_dir(wres, info, "notif") ;
/* supervise */ /* supervise */
res->live.supervisedir = compute_state_dir(wres, info, name, "supervise") ; res->live.supervisedir = compute_state_dir(wres, info, "supervise") ;
/* fdholder */ /* fdholder */
res->live.fdholderdir = compute_pipe_service(wres, info, name, SS_FDHOLDER) ; res->live.fdholderdir = compute_pipe_service(wres, info, name, SS_FDHOLDER) ;
...@@ -458,9 +496,10 @@ void parse_compute_resolve(resolve_service_t *res, ssexec_t *info) ...@@ -458,9 +496,10 @@ void parse_compute_resolve(resolve_service_t *res, ssexec_t *info)
/* oneshotd */ /* oneshotd */
res->live.oneshotddir = compute_pipe_service(wres, info, name, SS_ONESHOTD) ; res->live.oneshotddir = compute_pipe_service(wres, info, name, SS_ONESHOTD) ;
if (res->logger.want && res->type != TYPE_MODULE && res->type != TYPE_BUNDLE) { if (res->logger.want && (res->type == TYPE_CLASSIC || res->type == TYPE_ONESHOT)) {
size_t namelen = strlen(name) ; size_t namelen = strlen(name) ;
char logname[namelen + SS_LOG_SUFFIX_LEN + 1] ; char logname[namelen + SS_LOG_SUFFIX_LEN + 1] ;
auto_strings(logname, name, SS_LOG_SUFFIX) ; auto_strings(logname, name, SS_LOG_SUFFIX) ;
...@@ -469,16 +508,24 @@ void parse_compute_resolve(resolve_service_t *res, ssexec_t *info) ...@@ -469,16 +508,24 @@ void parse_compute_resolve(resolve_service_t *res, ssexec_t *info)
res->logger.destination = compute_log_dir(wres, res) ; res->logger.destination = compute_log_dir(wres, res) ;
if (res->type != TYPE_ONESHOT) { if (res->type == TYPE_CLASSIC) {
/** the logger is not a service with oneshot type */ /** the logger is not a service with oneshot type */
char buf[strlen(res->sa.s + res->dependencies.depends) + 1 + strlen(res->sa.s + res->logger.name) + 1] ; if (res->dependencies.ndepends) {
auto_strings(buf, res->sa.s + res->dependencies.depends, " ", res->sa.s + res->logger.name) ;
char buf[strlen(res->sa.s + res->dependencies.depends) + 1 + strlen(res->sa.s + res->logger.name) + 1] ;
auto_strings(buf, res->sa.s + res->dependencies.depends, " ", res->sa.s + res->logger.name) ;
res->dependencies.depends = resolve_add_string(wres, buf) ;
} else {
res->dependencies.depends = resolve_add_string(wres, res->sa.s + res->logger.name) ;
res->dependencies.depends = resolve_add_string(wres, buf) ; }
res->dependencies.ndepends++ ; res->dependencies.ndepends++ ;
compute_log(res, info) ; compute_log(res, ares, areslen, info) ;
} }
} }
...@@ -514,8 +561,5 @@ void parse_compute_resolve(resolve_service_t *res, ssexec_t *info) ...@@ -514,8 +561,5 @@ void parse_compute_resolve(resolve_service_t *res, ssexec_t *info)
} }
} }
if (!service_resolve_write(res))
log_dieu(LOG_EXIT_SYS, "write resolve file of service: ", name) ;
free(wres) ; free(wres) ;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment