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

[WIP] adapt headers files

parent 37946aa9
No related branches found
No related tags found
No related merge requests found
......@@ -15,17 +15,16 @@
#ifndef SS_CONFIG_H
#define SS_CONFIG_H
#include <66/backup.h>
#include <66/config.h>
#include <66/constants.h>
#include <66/db.h>
#include <66/enum.h>
#include <66/environ.h>
#include <66/graph.h>
#include <66/hpr.h>
#include <66/info.h>
#include <66/parser.h>
#include <66/rc.h>
#include <66/resolve.h>
#include <66/sanitize.h>
#include <66/service.h>
#include <66/ssexec.h>
#include <66/state.h>
......
......@@ -29,8 +29,6 @@
#define SS_MODULE_LEN (sizeof SS_MODULE - 1)
#define SS_SCANDIR "scandir"
#define SS_SCANDIR_LEN (sizeof SS_SCANDIR - 1)
#define SS_TREE "tree"
#define SS_TREE_LEN (sizeof SS_TREE - 1)
#define SS_NOTIFICATION "notification-fd"
#define SS_NOTIFICATION_LEN (sizeof SS_NOTIFICATION - 1)
#define SS_MAXDEATHTALLY "max-death-tally"
......@@ -41,18 +39,11 @@
#define SS_RULES_LEN (sizeof SS_RULES - 1)
#define SS_SVDIRS "/servicedirs"
#define SS_SVDIRS_LEN (sizeof SS_SVDIRS - 1)
#define SS_BACKUP "/backup"
#define SS_BACKUP_LEN (sizeof SS_BACKUP - 1)
#define SS_LIVETREE_INIT "init"
#define SS_LIVETREE_INIT_LEN (sizeof SS_LIVETREE_INIT - 1)
/**service dir*/
#define SS_SVC "/svc"
#define SS_SVC_LEN (sizeof SS_SVC - 1)
#define SS_DB "/db"
#define SS_DB_LEN (sizeof SS_DB - 1)
#define SS_SRC "/source"
#define SS_SRC_LEN (sizeof SS_SRC - 1)
#define SS_MASTER "/Master"
#define SS_MASTER_LEN (sizeof SS_MASTER - 1)
#define SS_CONTENTS "contents"
......@@ -61,24 +52,13 @@
/** logger */
#define SS_LOG "log"
#define SS_LOG_LEN (sizeof SS_LOG - 1)
#define SS_LOG_SUFFIX "-" SS_LOG
#define SS_LOG_SUFFIX "-log"
#define SS_LOG_SUFFIX_LEN (sizeof SS_LOG_SUFFIX - 1)
#define SS_SVSCAN_LOG "/.s6-svscan"
#define SS_SVSCAN_LOG_LEN (sizeof SS_SVSCAN_LOG - 1)
/** pipe */
#define SS_PIPE_NAME "bundle-"
#define SS_PIPE_NAME_LEN (sizeof SS_PIPE_NAME - 1)
/** backup */
#define SS_SYM_DB "bdb"
#define SS_SYM_DB_LEN (sizeof SS_SYM_DB - 1)
#define SS_SYM_SVC "bsvc"
#define SS_SYM_SVC_LEN (sizeof SS_SYM_SVC - 1)
#define SS_SWSRC 0 //switch to source
#define SS_SWBACK 1 //switch to backup
/** environment and data */
#define SS_ENVDIR "/conf"
#define SS_ENVDIR_LEN (sizeof SS_ENVDIR - 1)
......@@ -89,6 +69,18 @@
#define SS_STATE "/state"
#define SS_STATE_LEN (sizeof SS_STATE - 1)
#define SS_STATUS "status"
#define SS_STATUS_LEN (sizeof SS_STATUS - 1)
#define SS_RESOLVE "/.resolve"
#define SS_RESOLVE_LEN (sizeof SS_RESOLVE - 1)
#define SS_FDHOLDER "fdholder"
#define SS_FDHOLDER_LEN (sizeof SS_FDHOLDER - 1)
#define SS_FDHOLDER_PIPENAME "pipe:66-"
#define SS_FDHOLDER_PIPENAME_LEN (sizeof SS_FDHOLDER_PIPENAME - 1)
#define SS_ONESHOTD "oneshotd"
#define SS_ONESHOTD_LEN (sizeof SS_ONESHOTD - 1)
#define SS_VAR_UNEXPORT '!'
......@@ -99,6 +91,7 @@
#define SS_EVENTDIR "/event"
#define SS_EVENTDIR_LEN (sizeof SS_EVENTDIR - 1)
/** boot */
#define SS_BOOT_CONF "init.conf"
#define SS_BOOT_CONF_LEN (sizeof SS_BOOT_CONF - 1)
......@@ -121,6 +114,7 @@
#define SS_BOOT_LOGFIFO_LEN (sizeof SS_BOOT_LOGFIFO - 1)
#define SS_BOOT_SHUTDOWND "66-shutdownd"
#define SS_BOOT_SHUTDOWND_LEN (sizeof SS_BOOT_SHUTDOWND - 1)
/** container */
#define SS_BOOT_CONTAINER 0
#define SS_BOOT_RCINIT_CONTAINER "rc.init.container"
......@@ -138,4 +132,5 @@
#define SS_INSTANCE_NAME 1
#define SS_MAX_PATH_LEN (SS_MAX_PATH + SS_SYSTEM_LEN + SS_SVDIRS_LEN + SS_MAX_TREENAME + SS_MAX_SERVICE_NAME + 63 + 1)
#endif
......@@ -35,7 +35,6 @@ enum enum_main_e
ENUM_BUILD ,
ENUM_MANDATORY ,
ENUM_TIME ,
ENUM_LOGOPTS ,
ENUM_SEED ,
ENUM_ENDOFKEY
} ;
......@@ -60,10 +59,9 @@ enum enum_key_section_main_e
KEY_MAIN_TYPE = 0 ,
KEY_MAIN_VERSION ,
KEY_MAIN_DESCRIPTION ,
KEY_MAIN_CONTENTS ,
KEY_MAIN_DEPENDS ,
KEY_MAIN_REQUIREDBY ,
KEY_MAIN_OPTSDEPS ,
KEY_MAIN_EXTDEPS ,
KEY_MAIN_OPTIONS ,
KEY_MAIN_NOTIFY ,
KEY_MAIN_USER ,
......@@ -106,7 +104,6 @@ enum enum_key_section_logger_e
KEY_LOGGER_TIMESTP ,
KEY_LOGGER_T_FINISH ,
KEY_LOGGER_T_KILL ,
KEY_LOGGER_DEPENDS ,
KEY_LOGGER_ENDOFKEY
} ;
......@@ -129,6 +126,7 @@ enum enum_key_section_regex_e
KEY_REGEX_FILES ,
KEY_REGEX_INFILES ,
KEY_REGEX_ADDSERVICES ,
KEY_REGEX_APPLYTO ,
KEY_REGEX_ENDOFKEY
} ;
......@@ -139,7 +137,6 @@ enum enum_type_e
{
TYPE_CLASSIC = 0 ,
TYPE_BUNDLE ,
TYPE_LONGRUN ,
TYPE_ONESHOT ,
TYPE_MODULE ,
TYPE_ENDOFKEY
......@@ -167,8 +164,6 @@ enum enum_opts_e
{
OPTS_LOGGER = 0 ,
OPTS_ENVIR ,
OPTS_HIERCOPY ,
OPTS_PIPELINE ,
OPTS_ENDOFKEY
} ;
......@@ -178,6 +173,7 @@ typedef enum enum_flags_e enum_flags_t, *enum_flags_t_ref ;
enum enum_flags_e
{
FLAGS_DOWN = 0 ,
FLAGS_EARLIER,
FLAGS_ENDOFKEY
} ;
......@@ -216,17 +212,6 @@ enum enum_time_e
extern char const *enum_str_time[] ;
typedef enum enum_logopts_e enum_logotps_t, *enum_logopts_t_ref ;
enum enum_logopts_e
{
LOGOPTS_PRODUCER = 0 ,
LOGOPTS_CONSUMER ,
LOGOPTS_PIPE ,
LOGOPTS_ENDOFKEY
} ;
extern char const *enum_str_logopts[] ;
typedef enum enum_seed_e enum_seed_t, *enum_seed_t_ref ;
enum enum_seed_e
{
......@@ -294,10 +279,9 @@ static key_description_t const main_section_list[] =
{ .name = &enum_str_key_section_main[KEY_MAIN_TYPE], .id = KEY_MAIN_TYPE, .expected = EXPECT_LINE },
{ .name = &enum_str_key_section_main[KEY_MAIN_VERSION], .id = KEY_MAIN_VERSION, .expected = EXPECT_LINE },
{ .name = &enum_str_key_section_main[KEY_MAIN_DESCRIPTION], .id = KEY_MAIN_DESCRIPTION, .expected = EXPECT_QUOTE },
{ .name = &enum_str_key_section_main[KEY_MAIN_CONTENTS], .id = KEY_MAIN_CONTENTS, .expected = EXPECT_BRACKET },
{ .name = &enum_str_key_section_main[KEY_MAIN_DEPENDS], .id = KEY_MAIN_DEPENDS, .expected = EXPECT_BRACKET },
{ .name = &enum_str_key_section_main[KEY_MAIN_REQUIREDBY], .id = KEY_MAIN_REQUIREDBY, .expected = EXPECT_BRACKET },
{ .name = &enum_str_key_section_main[KEY_MAIN_OPTSDEPS], .id = KEY_MAIN_OPTSDEPS, .expected = EXPECT_BRACKET },
{ .name = &enum_str_key_section_main[KEY_MAIN_EXTDEPS], .id = KEY_MAIN_EXTDEPS, .expected = EXPECT_BRACKET },
{ .name = &enum_str_key_section_main[KEY_MAIN_OPTIONS], .id = KEY_MAIN_OPTIONS, .expected = EXPECT_BRACKET },
{ .name = &enum_str_key_section_main[KEY_MAIN_NOTIFY], .id = KEY_MAIN_NOTIFY, .expected = EXPECT_UINT },
{ .name = &enum_str_key_section_main[KEY_MAIN_USER], .id = KEY_MAIN_USER, .expected = EXPECT_BRACKET },
......@@ -324,17 +308,16 @@ static key_description_t const startstop_section_list[] =
static key_description_t const logger_section_list[] =
{
{ .name = &enum_str_key_section_logger[KEY_LOGGER_DESTINATION], .id = KEY_LOGGER_DESTINATION, .expected = EXPECT_SLASH },
{ .name = &enum_str_key_section_logger[KEY_LOGGER_BUILD], .id = KEY_LOGGER_BUILD, .expected = EXPECT_LINE },
{ .name = &enum_str_key_section_logger[KEY_LOGGER_RUNAS], .id = KEY_LOGGER_RUNAS, .expected = EXPECT_LINE },
{ .name = &enum_str_key_section_logger[KEY_LOGGER_DEPENDS], .id = KEY_LOGGER_DEPENDS, .expected = EXPECT_BRACKET },
{ .name = &enum_str_key_section_logger[KEY_LOGGER_SHEBANG], .id = KEY_LOGGER_SHEBANG, .expected = EXPECT_QUOTE },
{ .name = &enum_str_key_section_logger[KEY_LOGGER_T_FINISH], .id = KEY_LOGGER_T_FINISH, .expected = EXPECT_UINT },
{ .name = &enum_str_key_section_logger[KEY_LOGGER_T_KILL], .id = KEY_LOGGER_T_KILL, .expected = EXPECT_UINT },
{ .name = &enum_str_key_section_logger[KEY_LOGGER_EXEC], .id = KEY_LOGGER_EXEC, .expected = EXPECT_BRACKET },
{ .name = &enum_str_key_section_logger[KEY_LOGGER_DESTINATION], .id = KEY_LOGGER_DESTINATION, .expected = EXPECT_SLASH },
{ .name = &enum_str_key_section_logger[KEY_LOGGER_BACKUP], .id = KEY_LOGGER_BACKUP, .expected = EXPECT_UINT },
{ .name = &enum_str_key_section_logger[KEY_LOGGER_MAXSIZE], .id = KEY_LOGGER_MAXSIZE, .expected = EXPECT_UINT },
{ .name = &enum_str_key_section_logger[KEY_LOGGER_TIMESTP], .id = KEY_LOGGER_TIMESTP, .expected = EXPECT_LINE },
{ .name = &enum_str_key_section_logger[KEY_LOGGER_EXEC], .id = KEY_LOGGER_EXEC, .expected = EXPECT_BRACKET },
{ .name = &enum_str_key_section_logger[KEY_LOGGER_T_FINISH], .id = KEY_LOGGER_T_FINISH, .expected = EXPECT_UINT },
{ .name = &enum_str_key_section_logger[KEY_LOGGER_T_KILL], .id = KEY_LOGGER_T_KILL, .expected = EXPECT_UINT },
{ .name = &enum_str_key_section_logger[KEY_LOGGER_ENDOFKEY] }
} ;
......@@ -374,5 +357,6 @@ static key_all_t const total_list[] =
{ .list = 0 }
} ;
extern char const *get_key_by_key_all(int const idsec, int const key) ;
#endif
......@@ -21,12 +21,13 @@
#include <skalibs/stralloc.h>
#include <66/parser.h>
#include <66/service.h>
extern int env_resolve_conf(stralloc *env,char const *svname,uid_t owner) ;
extern int env_make_symlink(sv_alltype *sv) ;
extern int env_compute(stralloc *result,sv_alltype *sv, uint8_t conf) ;
extern int env_make_symlink(resolve_service_t *res) ;
extern int env_compute(stralloc *result, resolve_service_t *res) ;
extern int env_clean_with_comment(stralloc *sa) ;
extern int env_prepare_for_write(stralloc *name, stralloc *dst, stralloc *contents, sv_alltype *sv,uint8_t conf) ;
extern int env_prepare_for_write(stralloc *dst, stralloc *contents, resolve_service_t *res) ;
/** version function */
extern int env_find_current_version(stralloc *sa,char const *svconf) ;
......
......@@ -19,11 +19,19 @@
#include <oblibs/graph.h>
extern int graph_build_g(graph_t *g, char const *base, char const *treename, uint8_t data_type, uint8_t general) ;
extern int graph_build_tree(graph_t *g,char const *base) ;
extern int graph_build_service(graph_t *g, char const *base, char const *treename, uint8_t general) ;
extern int graph_build_service_bytree(graph_t *g, char const *tree, uint8_t what) ;
#include <66/service.h>
#include <66/ssexec.h>
//extern void graph_build_g(graph_t *graph, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info) ;
extern void graph_build_tree(graph_t *g,char const *base) ;
extern void graph_build_service(graph_t *g, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info, uint32_t flag) ;
extern int graph_compute_dependencies(graph_t *g, char const *vertex, char const *edge, uint8_t requiredby) ;
extern int graph_build_service_bytree(graph_t *g, char const *tree, uint8_t what, uint8_t is_supervised) ;
extern int graph_build_service_bytree_from_src(graph_t *g, char const *src, uint8_t what) ;
extern int graph_add_deps(graph_t *g, char const *vertex, char const *edge, uint8_t requiredby) ;
#endif
......@@ -26,7 +26,7 @@
#define SS_INFO_H
#define INFO_FIELD_MAXLEN 30
#define INFO_NKEY 100
#define INFO_NKEY 150
typedef int info_graph_func(char const *name, char const *obj) ;
typedef info_graph_func *info_graph_func_t_ref ;
......
......@@ -46,7 +46,7 @@ extern void ssexec_enable_cleanup(void) ;
/** main */
extern void start_parser(char const *sv, ssexec_t *info, uint8_t disable_module, char const *directory_forced) ;
extern void parser(char const *sv, char const *dst, ssexec_t *info, uint8_t force, uint8_t conf) ;
extern void parse_service(char const *sv, ssexec_t *info, uint8_t force, uint8_t conf) ;
extern int parse_frontend(char const *sv, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info, uint8_t force, uint8_t conf, unsigned int *residx, char const *forced_directory) ;
extern int parse_dependencies(resolve_service_t *res, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info, uint8_t force,uint8_t conf, char const *forced_directory) ;
......@@ -77,4 +77,7 @@ extern void parse_error(int ierr, int idsec, int idkey) ;
/** module */
extern void parse_module(resolve_service_t *res, resolve_service_t *ares, unsigned int *areslen, ssexec_t *info, uint8_t force) ;
/** resolve */
extern void parse_compute_resolve(resolve_service_t *res, ssexec_t *info) ;
#endif
......@@ -17,52 +17,146 @@
#include <stdint.h>
#include <oblibs/graph.h>
#include <skalibs/stralloc.h>
#include <skalibs/genalloc.h>
#include <skalibs/cdb.h>
#include <skalibs/cdbmake.h>
#include <66/parser.h>
#include <66/ssexec.h>
#include <66/resolve.h>
#include <66/state.h>
/**
*
*
* obsolete functions
*
*
*
* */
typedef struct resolve_service_addon_path_s resolve_service_addon_path_t, *resolve_service_addon_path_t_ref ;
struct resolve_service_addon_path_s
{
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 tree ; // string, /var/lib/66/system/treename
uint32_t status ; //string, /var/lib/66/system/treename/servicedirs/svc/service_name/state/status
} ;
#define RESOLVE_SERVICE_ADDON_PATH_ZERO { 0,0,0,0 }
/** Graph struct */
typedef struct ss_resolve_graph_ndeps_s ss_resolve_graph_ndeps_t ;
struct ss_resolve_graph_ndeps_s
typedef struct resolve_service_addon_dependencies_s resolve_service_addon_dependencies_t, *resolve_service_addon_dependencies_t_ref ;
struct resolve_service_addon_dependencies_s
{
uint32_t idx ;//uint32_t
genalloc ndeps ;//uint32_t
uint32_t depends ; // string
uint32_t requiredby ; // string,
uint32_t optsdeps ; // string, optional dependencies
uint32_t ndepends ; // integer
uint32_t nrequiredby ; // integer
uint32_t noptsdeps ; // integer
} ;
#define RESOLVE_GRAPH_NDEPS_ZERO { 0 , GENALLOC_ZERO }
typedef struct ss_resolve_graph_s ss_resolve_graph_t, *ss_resolve_graph_t_ref ;
struct ss_resolve_graph_s
#define RESOLVE_SERVICE_ADDON_DEPENDENCIES_ZERO { 0,0,0,0,0,0 }
typedef struct resolve_service_addon_timeout_s resolve_service_addon_timeout_t, *resolve_service_addon_timeout_t_ref ;
struct resolve_service_addon_timeout_s
{
genalloc name ;//resolve_service_t
genalloc cp ; //ss_resolve_graph_ndeps_t
genalloc sorted ;//resolve_service_t
uint32_t kill ; // integer
uint32_t finish ; // integer
uint32_t up ; // integer
uint32_t down ; // integer
} ;
#define RESOLVE_GRAPH_ZERO { GENALLOC_ZERO , GENALLOC_ZERO , GENALLOC_ZERO }
typedef enum visit_e visit ;
enum visit_e
#define RESOLVE_SERVICE_ADDON_TIMEOUT_ZERO { 0,0,0,0 }
typedef struct resolve_service_addon_scripts_s resolve_service_addon_scripts_t, *resolve_service_addon_scritps_t_ref ;
struct resolve_service_addon_scripts_s
{
SS_WHITE = 0,
SS_GRAY,
SS_BLACK
uint32_t run ; // string, launch before @execute
uint32_t run_user ; // string, @execute field
uint32_t build ; // string, custom or execline
uint32_t shebang ; // string
uint32_t runas ; // string
} ;
#define RESOLVE_SERVICE_ADDON_SCRIPTS_ZERO { 0,0,0,0,0 }
typedef struct resolve_service_addon_execute_s resolve_service_addon_execute_t, *resolve_service_addon_execute_t_ref ;
struct resolve_service_addon_execute_s
{
resolve_service_addon_scripts_t run ;
resolve_service_addon_scripts_t finish ;
resolve_service_addon_timeout_t timeout ;
uint32_t down ; // integer
uint32_t downsignal ; // integer
} ;
#define RESOLVE_SERVICE_ADDON_EXECUTE_ZERO { \
RESOLVE_SERVICE_ADDON_SCRIPTS_ZERO, \
RESOLVE_SERVICE_ADDON_SCRIPTS_ZERO, \
RESOLVE_SERVICE_ADDON_TIMEOUT_ZERO, \
0, \
0 \
}
typedef struct resolve_service_addon_live_s resolve_service_addon_live_t, *resolve_service_addon_live_t_ref ;
struct resolve_service_addon_live_s
{
uint32_t livedir ; // string, /run/66
uint32_t scandir ; // string, /run/66/state/uid/service_name/scandir/service_name -> /var/lib/66/system/treename/svc/service -> /run/66/scandir/uid
uint32_t statedir ; // string, /run/66/state/uid/service_name/state -> /var/lib/66/system/treename/svc/service/state
uint32_t eventdir ; // string, /run/66/state/uid/service_name/event -> /var/lib/66/system/treename/svc/service/event
uint32_t notifdir ; // string, /run/66/state/uid/service_name/notif -> /var/lib/66/system/treename/svc/service/notif
uint32_t supervisedir ; // string, /run/66/state/uid/service_name/supervise -> /var/lib/66/system/treename/svc/service/supervise
uint32_t fdholderdir ; // string, /run/66/state/uid/service_name/scandir/fdholder
uint32_t oneshotddir ; // string, /run/66/state/uid/service_name/scandir/oneshotd
} ;
#define RESOLVE_SERVICE_ADDON_LIVE_ZERO { 0,0,0,0,0,0,0,0 }
typedef struct resolve_service_addon_logger_s resolve_service_addon_logger_t, *resolve_service_addon_logger_t_ref ;
struct resolve_service_addon_logger_s
{
// logger
uint32_t name ; // string, typically "name-log" or 0 if it's the resolve of the logger
uint32_t destination ; // string
uint32_t backup ; // integer
uint32_t maxsize ; // integer
/** integer, default 3 which mean not touched, in this case the value configured by
* at compilation take precedence */
uint32_t timestamp ;
uint32_t want ; // 1 want, 0 do not want. Want by default
resolve_service_addon_execute_t execute ;
resolve_service_addon_timeout_t timeout ;
} ;
#define RESOLVE_SERVICE_ADDON_LOGGER_ZERO { \
0,0,3,1000000,3,1, \
RESOLVE_SERVICE_ADDON_EXECUTE_ZERO, \
RESOLVE_SERVICE_ADDON_TIMEOUT_ZERO \
}
typedef struct resolve_service_addon_environ_s resolve_service_addon_environ_t, *resolve_service_addon_environ_t_ref ;
struct resolve_service_addon_environ_s
{
uint32_t env ; // string
uint32_t envdir ; // string, /etc/66/conf or /home/user/.66/conf
uint32_t env_overwrite ; // integer, overwrite the environment
} ;
#define RESOLVE_SERVICE_ADDON_ENVIRON_ZERO { 0,0,0 }
typedef struct resolve_service_addon_regex_s resolve_service_addon_regex_t, *resolve_service_addon_regex_t_ref ;
struct resolve_service_addon_regex_s
{
uint32_t configure ; // string
uint32_t directories ; // string
uint32_t files ; // string
uint32_t infiles ; // string
uint32_t ndirectories ; // integer
uint32_t nfiles ; // integer
uint32_t ninfiles ; // integer
} ;
#define DATA_SERVICE 0
#define DATA_SERVICE_MASTER 3
#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 ;
struct resolve_service_s
......@@ -70,80 +164,134 @@ struct resolve_service_s
uint32_t salen ;
stralloc sa ;
uint32_t name ;
uint32_t description ;
uint32_t version ;
uint32_t logger ;
uint32_t logreal ;
uint32_t logassoc ;
uint32_t dstlog ;
uint32_t depends ; // for module -> list of s6-rc service
uint32_t requiredby ;
uint32_t optsdeps ; //optional dependencies
uint32_t extdeps ; //external dependencies
uint32_t contents ; // module -> list of s6-rc and s6 service
uint32_t src ; //frontend source
uint32_t srconf ; //configuration file source
uint32_t live ; //run/66
uint32_t runat ; //livetree->longrun,scandir->svc
uint32_t tree ; //var/lib/66/system/tree
uint32_t treename ;
uint32_t state ; //run/66/state/uid/treename/
uint32_t exec_run ;
uint32_t exec_log_run ;
uint32_t real_exec_run ;
uint32_t real_exec_log_run ;
uint32_t exec_finish ;
uint32_t real_exec_finish ;
uint32_t type ;
uint32_t ndepends ;
uint32_t nrequiredby ;
uint32_t noptsdeps ;
uint32_t nextdeps ;
uint32_t ncontents ;
uint32_t down ;
uint32_t disen ;//disable->0,enable->1
// configuration
uint32_t name ; // string
uint32_t description ; // string
uint32_t version ;// string
uint32_t type ; // integer
uint32_t notify ; // integer
uint32_t maxdeath ; // integer
uint32_t earlier ; // integer
uint32_t hiercopy ; // string
uint32_t intree ; // string
uint32_t ownerstr ; // string
uint32_t owner ; // integer, uid of the owner
uint32_t treename ; // string
uint32_t user ; // string
uint32_t inmodule ; // string, name of the module wich depend on
resolve_service_addon_path_t path ;
resolve_service_addon_dependencies_t dependencies ;
resolve_service_addon_execute_t execute ;
resolve_service_addon_live_t live ;
resolve_service_addon_logger_t logger ;
resolve_service_addon_environ_t environ ;
resolve_service_addon_regex_t regex ;
} ;
#define RESOLVE_SERVICE_ZERO { 0,STRALLOC_ZERO,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
#define RESOLVE_SERVICE_ZERO { 0,STRALLOC_ZERO, \
0,0,0,0,0,5,0,0,0,0,0,0,0,0, \
RESOLVE_SERVICE_ADDON_PATH_ZERO, \
RESOLVE_SERVICE_ADDON_DEPENDENCIES_ZERO, \
RESOLVE_SERVICE_ADDON_EXECUTE_ZERO, \
RESOLVE_SERVICE_ADDON_LIVE_ZERO, \
RESOLVE_SERVICE_ADDON_LOGGER_ZERO, \
RESOLVE_SERVICE_ADDON_ENVIRON_ZERO, \
RESOLVE_SERVICE_ADDON_REGEX_ZERO }
typedef enum resolve_service_enum_e resolve_service_enum_t, *resolve_service_enum_t_ref;
enum resolve_service_enum_e
{
SERVICE_ENUM_NAME = 0,
SERVICE_ENUM_DESCRIPTION,
SERVICE_ENUM_VERSION,
SERVICE_ENUM_LOGGER,
SERVICE_ENUM_LOGREAL,
SERVICE_ENUM_LOGASSOC,
SERVICE_ENUM_DSTLOG,
SERVICE_ENUM_DEPENDS,
SERVICE_ENUM_REQUIREDBY,
SERVICE_ENUM_OPTSDEPS,
SERVICE_ENUM_EXTDEPS,
SERVICE_ENUM_CONTENTS,
SERVICE_ENUM_SRC,
SERVICE_ENUM_SRCONF,
SERVICE_ENUM_LIVE,
SERVICE_ENUM_RUNAT,
SERVICE_ENUM_TREE,
SERVICE_ENUM_TREENAME,
SERVICE_ENUM_STATE,
SERVICE_ENUM_EXEC_RUN,
SERVICE_ENUM_EXEC_LOG_RUN,
SERVICE_ENUM_REAL_EXEC_RUN,
SERVICE_ENUM_REAL_EXEC_LOG_RUN,
SERVICE_ENUM_EXEC_FINISH,
SERVICE_ENUM_REAL_EXEC_FINISH,
SERVICE_ENUM_TYPE,
SERVICE_ENUM_NDEPENDS,
SERVICE_ENUM_NREQUIREDBY,
SERVICE_ENUM_NOPTSDEPS,
SERVICE_ENUM_NEXTDEPS,
SERVICE_ENUM_NCONTENTS,
SERVICE_ENUM_DOWN,
SERVICE_ENUM_DISEN,
SERVICE_ENUM_ENDOFKEY
E_RESOLVE_SERVICE_NAME = 0,
E_RESOLVE_SERVICE_DESCRIPTION,
E_RESOLVE_SERVICE_VERSION,
E_RESOLVE_SERVICE_TYPE,
E_RESOLVE_SERVICE_NOTIFY,
E_RESOLVE_SERVICE_MAXDEATH,
E_RESOLVE_SERVICE_EARLIER,
E_RESOLVE_SERVICE_HIERCOPY,
E_RESOLVE_SERVICE_INTREE,
E_RESOLVE_SERVICE_OWNERSTR,
E_RESOLVE_SERVICE_OWNER,
E_RESOLVE_SERVICE_TREENAME,
E_RESOLVE_SERVICE_USER,
E_RESOLVE_SERVICE_INMODULE,
// path
E_RESOLVE_SERVICE_HOME,
E_RESOLVE_SERVICE_FRONTEND,
E_RESOLVE_SERVICE_TREE,
E_RESOLVE_SERVICE_STATUS,
// dependencies
E_RESOLVE_SERVICE_DEPENDS,
E_RESOLVE_SERVICE_REQUIREDBY,
E_RESOLVE_SERVICE_OPTSDEPS,
E_RESOLVE_SERVICE_NDEPENDS,
E_RESOLVE_SERVICE_NREQUIREDBY,
E_RESOLVE_SERVICE_NOPTSDEPS,
// execute
E_RESOLVE_SERVICE_RUN,
E_RESOLVE_SERVICE_RUN_USER,
E_RESOLVE_SERVICE_RUN_BUILD,
E_RESOLVE_SERVICE_RUN_SHEBANG,
E_RESOLVE_SERVICE_RUN_RUNAS,
E_RESOLVE_SERVICE_FINISH,
E_RESOLVE_SERVICE_FINISH_USER,
E_RESOLVE_SERVICE_FINISH_BUILD,
E_RESOLVE_SERVICE_FINISH_SHEBANG,
E_RESOLVE_SERVICE_FINISH_RUNAS,
E_RESOLVE_SERVICE_TIMEOUTKILL,
E_RESOLVE_SERVICE_TIMEOUTFINISH,
E_RESOLVE_SERVICE_TIMEOUTUP,
E_RESOLVE_SERVICE_TIMEOUTDOWN,
E_RESOLVE_SERVICE_DOWN,
E_RESOLVE_SERVICE_DOWNSIGNAL,
// live
E_RESOLVE_SERVICE_LIVEDIR,
E_RESOLVE_SERVICE_SCANDIR,
E_RESOLVE_SERVICE_STATEDIR,
E_RESOLVE_SERVICE_EVENTDIR,
E_RESOLVE_SERVICE_NOTIFDIR,
E_RESOLVE_SERVICE_SUPERVISEDIR,
E_RESOLVE_SERVICE_FDHOLDERDIR,
E_RESOLVE_SERVICE_ONESHOTDDIR,
// logger
E_RESOLVE_SERVICE_LOGNAME,
E_RESOLVE_SERVICE_LOGDESTINATION,
E_RESOLVE_SERVICE_LOGBACKUP,
E_RESOLVE_SERVICE_LOGMAXSIZE,
E_RESOLVE_SERVICE_LOGTIMESTAMP,
E_RESOLVE_SERVICE_LOGWANT,
E_RESOLVE_SERVICE_LOGRUN,
E_RESOLVE_SERVICE_LOGRUN_USER,
E_RESOLVE_SERVICE_LOGRUN_BUILD,
E_RESOLVE_SERVICE_LOGRUN_SHEBANG,
E_RESOLVE_SERVICE_LOGRUN_RUNAS,
E_RESOLVE_SERVICE_LOGTIMEOUTKILL,
E_RESOLVE_SERVICE_LOGTIMEOUTFINISH,
// environment
E_RESOLVE_SERVICE_ENV,
E_RESOLVE_SERVICE_ENVDIR,
E_RESOLVE_SERVICE_ENV_OVERWRITE,
// regex
E_RESOLVE_SERVICE_REGEX_CONFIGURE,
E_RESOLVE_SERVICE_REGEX_DIRECTORIES,
E_RESOLVE_SERVICE_REGEX_FILES,
E_RESOLVE_SERVICE_REGEX_INFILES,
E_RESOLVE_SERVICE_REGEX_NDIRECTORIES,
E_RESOLVE_SERVICE_REGEX_NFILES,
E_RESOLVE_SERVICE_REGEX_NINFILES,
E_RESOLVE_SERVICE_ENDOFKEY
} ;
typedef struct resolve_service_master_s resolve_service_master_t, *resolve_service_master_t_ref ;
......@@ -156,61 +304,59 @@ struct resolve_service_master_s
uint32_t classic ;
uint32_t bundle ;
uint32_t longrun ;
uint32_t oneshot ;
uint32_t module ;
uint32_t enabled ;
uint32_t disabled ;
uint32_t contents ;
uint32_t nclassic ;
uint32_t nbundle ;
uint32_t nlongrun ;
uint32_t noneshot ;
uint32_t nmodule ;
uint32_t nenabled ;
uint32_t ndisabled ;
uint32_t ncontents ;
} ;
#define RESOLVE_SERVICE_MASTER_ZERO { 0,STRALLOC_ZERO,0,0,0,0,0,0,0,0,0,0,0 }
#define RESOLVE_SERVICE_MASTER_ZERO { 0,STRALLOC_ZERO,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
typedef enum resolve_service_master_enum_e resolve_service_master_enum_t, *resolve_service_master_enum_t_ref;
enum resolve_service_master_enum_e
{
SERVICE_ENUM_MASTER_NAME = 0,
SERVICE_ENUM_MASTER_CLASSIC,
SERVICE_ENUM_MASTER_BUNDLE,
SERVICE_ENUM_MASTER_LONGRUN,
SERVICE_ENUM_MASTER_ONESHOT,
SERVICE_ENUM_MASTER_MODULE,
SERVICE_ENUM_MASTER_NCLASSIC,
SERVICE_ENUM_MASTER_NBUNDLE,
SERVICE_ENUM_MASTER_NLONGRUN,
SERVICE_ENUM_MASTER_NONESHOT,
SERVICE_ENUM_MASTER_NMODULE,
SERVICE_ENUM_MASTER_ENDOFKEY
E_RESOLVE_SERVICE_MASTER_NAME = 0,
E_RESOLVE_SERVICE_MASTER_CLASSIC,
E_RESOLVE_SERVICE_MASTER_BUNDLE,
E_RESOLVE_SERVICE_MASTER_ONESHOT,
E_RESOLVE_SERVICE_MASTER_MODULE,
E_RESOLVE_SERVICE_MASTER_ENABLED,
E_RESOLVE_SERVICE_MASTER_DISABLED,
E_RESOLVE_SERVICE_MASTER_CONTENTS,
E_RESOLVE_SERVICE_MASTER_NCLASSIC,
E_RESOLVE_SERVICE_MASTER_NBUNDLE,
E_RESOLVE_SERVICE_MASTER_NONESHOT,
E_RESOLVE_SERVICE_MASTER_NMODULE,
E_RESOLVE_SERVICE_MASTER_NENABLED,
E_RESOLVE_SERVICE_MASTER_NDISABLED,
E_RESOLVE_SERVICE_MASTER_NCONTENTS,
E_RESOLVE_SERVICE_MASTER_ENDOFKEY
} ;
extern resolve_field_table_t resolve_service_field_table[] ;
extern resolve_field_table_t resolve_service_master_field_table[] ;
extern int service_isenabled(char const *sv) ;
extern int service_isenabledat(stralloc *tree, char const *sv) ;
extern int service_frontend_src(stralloc *sasrc, char const *name, char const *src) ;
extern int service_frontend_path(stralloc *sasrc,char const *sv, uid_t owner,char const *directory_forced) ;
extern int service_endof_dir(char const *dir, char const *name) ;
extern int service_cmp_basedir(char const *dir) ;
extern int service_intree(stralloc *svtree, char const *svname, char const *tree) ;
/**
*
* Resolve API
*
* */
/** Service */
extern int service_cmp_basedir(char const *dir) ;
extern int service_endof_dir(char const *dir, char const *name) ;
extern int service_frontend_path(stralloc *sasrc,char const *sv, uid_t owner,char const *directory_forced) ;
extern int service_frontend_src(stralloc *sasrc, char const *name, char const *src) ;
extern int service_is_g(char *atree, char const *name, uint32_t flag) ;
extern void service_resolve_array_free(resolve_service_t *ares, unsigned int areslen) ;
extern int service_resolve_array_search(resolve_service_t *ares, unsigned int areslen, char const *name) ;
extern int service_resolve_copy(resolve_service_t *dst, resolve_service_t *res) ;
extern int service_resolve_get_field_tosa(stralloc *sa, resolve_service_t *res, resolve_service_enum_t field) ;
extern int service_resolve_modify_field(resolve_service_t *res, resolve_service_enum_t field, char const *data) ;
extern int service_resolve_read_cdb(cdb *c, resolve_service_t *res) ;
extern int service_resolve_setlognwrite(resolve_service_t *sv, char const *dst) ;
extern int service_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *dst) ;
extern int service_resolve_sort_bytype(stralloc *list, char const *src) ;
extern int service_resolve_write(resolve_service_t *res) ;
extern int service_resolve_write_cdb(cdbmaker *c, resolve_service_t *sres) ;
/** Master */
......@@ -222,26 +368,19 @@ extern int service_resolve_master_read_cdb(cdb *c, resolve_service_master_t *tre
extern int service_resolve_master_write(graph_t *graph, char const *dest) ;
extern int service_resolve_master_write_cdb(cdbmaker *c, resolve_service_master_t *mres) ;
/**
*
*
* obsolete function
*
* */
/** 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_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 int service_resolve_add_deps(genalloc *tokeep, resolve_service_t *res, char const *src) ;
extern int service_resolve_add_rdeps(genalloc *tokeep, resolve_service_t *res, char const *src) ;
extern int service_resolve_add_logger(genalloc *ga,char const *src) ;
extern int service_is(ss_state_t *ste, uint32_t flag) ;
/** possible remove of it */
extern int graph_build_service_from_list(char const *const *list, char const *base, graph_t *graph, resolve_service_t *ares, uint8_t requiredby) ;
/** obsolete Graph function */
extern void ss_resolve_graph_ndeps_free(ss_resolve_graph_ndeps_t *graph) ;
extern void ss_resolve_graph_free(ss_resolve_graph_t *graph) ;
extern int ss_resolve_graph_src(ss_resolve_graph_t *graph, char const *dir, unsigned int reverse, unsigned int what) ;
extern int ss_resolve_graph_build(ss_resolve_graph_t *graph,resolve_service_t *res,char const *src,unsigned int reverse) ;
extern int ss_resolve_graph_sort(ss_resolve_graph_t *graph) ;
extern int ss_resolve_dfs(ss_resolve_graph_t *graph, unsigned int idx, visit *c,unsigned int *ename,unsigned int *edeps) ;
extern int ss_resolve_graph_publish(ss_resolve_graph_t *graph,unsigned int reverse) ;
/** SHOULD BE NOT USED */
extern int service_resolve_sort_bytype(stralloc *list, char const *src) ;
#endif
......@@ -15,20 +15,51 @@
#ifndef SS_SSEXEC_H
#define SS_SSEXEC_H
#include <stdint.h>
#include <skalibs/stralloc.h>
#include <skalibs/types.h>
#include <66/config.h>
typedef struct ssexec_s ssexec_t , *ssexec_t_ref ;
struct ssexec_s
{
stralloc base ;
//char base[SS_MAX_SERVICE] ;
//size_t baselen ;
stralloc live ;
//char live[SS_MAX_SERVICE] ;
//size_t livelen ;
stralloc tree ;
stralloc livetree ;
//char tree[SS_MAX_SERVICE] ;
//size_t treelen ;
stralloc scandir ;
//char scandir[SS_MAX_SERVICE] ;
//size_t scandirlen ;
stralloc treename ;
int treeallow ; //1 yes , 0 no
//char treename[SS_MAX_SERVICE] ;
//size_t treenamelen ;
/**
*
* verifier pour les cast entre int et uint8_t
* a son call
*
* */
uint8_t treeallow ; //1 yes , 0 no
uid_t owner ;
char ownerstr[UID_FMT] ;
size_t ownerlen ;
uint32_t timeout ;
char const *prog ;
char const *help ;
......@@ -43,49 +74,50 @@ struct ssexec_s
uint8_t skip_opt_tree ; // tree,treename, treeallow will not be set. Also, trees permissions is not checked.
} ;
#define SSEXEC_ZERO { .base = STRALLOC_ZERO , \
.live = STRALLOC_ZERO , \
.tree = STRALLOC_ZERO , \
.livetree = STRALLOC_ZERO , \
.scandir = STRALLOC_ZERO , \
.treename = STRALLOC_ZERO , \
.treeallow = 0 , \
.owner = 0 , \
.timeout = 0 , \
.prog = 0 , \
.help = 0 , \
.usage = 0 , \
.opt_verbo = 0 , \
.opt_live = 0 , \
.opt_tree = 0 , \
.opt_timeout = 0 , \
.opt_color = 0 , \
#define SSEXEC_ZERO { .base = STRALLOC_ZERO, \
.live = STRALLOC_ZERO, \
.tree = STRALLOC_ZERO, \
.scandir = STRALLOC_ZERO, \
.treename = STRALLOC_ZERO, \
.treeallow = 0, \
.owner = 0, \
.ownerstr = { 0 }, \
.ownerlen = 0, \
.timeout = 0, \
.prog = 0, \
.help = 0, \
.usage = 0, \
.opt_verbo = 0, \
.opt_live = 0, \
.opt_tree = 0, \
.opt_timeout = 0, \
.opt_color = 0, \
.skip_opt_tree = 0 }
typedef int ssexec_func_t(int argc, char const *const *argv, char const *const *envp, ssexec_t *info) ;
typedef int ssexec_func_t(int argc, char const *const *argv, ssexec_t *info) ;
typedef ssexec_func_t *ssexec_func_t_ref ;
extern void ssexec_free(ssexec_t *info) ;
extern ssexec_t const ssexec_zero ;
extern void set_ssinfo(ssexec_t *info) ;
extern ssexec_func_t ssexec_parse ;
extern ssexec_func_t ssexec_init ;
extern ssexec_func_t ssexec_enable ;
extern ssexec_func_t ssexec_disable ;
extern ssexec_func_t ssexec_start ;
extern ssexec_func_t ssexec_stop ;
extern ssexec_func_t ssexec_svctl ;
extern ssexec_func_t ssexec_dbctl ;
extern ssexec_func_t ssexec_env ;
extern ssexec_func_t ssexec_all ;
extern ssexec_func_t ssexec_tree ;
extern char const *usage_parse ;
extern char const *help_parse ;
extern char const *usage_enable ;
extern char const *help_enable ;
extern char const *usage_disable ;
extern char const *help_disable ;
extern char const *usage_dbctl ;
extern char const *help_dbctl ;
extern char const *usage_svctl ;
extern char const *help_svctl ;
extern char const *usage_start ;
......@@ -101,7 +133,9 @@ extern char const *help_all ;
extern char const *usage_tree ;
extern char const *help_tree ;
#define OPTS_INIT "cdb"
#define OPTS_PARSE "fFcmCI"
#define OPTS_PARSE_LEN (sizeof OPTS_PARSE - 1)
#define OPTS_INIT "o:"
#define OPTS_INIT_LEN (sizeof OPTS_INIT - 1)
#define OPTS_ENABLE "fFSI"
#define OPTS_ENABLE_LEN (sizeof OPTS_ENABLE - 1)
......@@ -111,10 +145,8 @@ extern char const *help_tree ;
#define OPTS_START_LEN (sizeof OPTS_START - 1)
#define OPTS_STOP "uXK"
#define OPTS_STOP_LEN (sizeof OPTS_STOP - 1)
#define OPTS_SVCTL "n:urRdXK"
#define OPTS_SVCTL "abqhkti12pcyroduxOw:P"
#define OPTS_SVCTL_LEN (sizeof OPTS_SVCTL - 1)
#define OPTS_DBCTL "udr"
#define OPTS_DBCTL_LEN (sizeof OPTS_DBCTL - 1)
#define OPTS_ENV "c:s:VLr:e:i:"
#define OPTS_ENV_LEN (sizeof OPTS_ENV - 1)
#define OPTS_ALL "f"
......
......@@ -15,70 +15,13 @@
#ifndef SS_SVC_H
#define SS_SVC_H
#include <skalibs/tai.h>
#include <skalibs/stralloc.h>
#include <skalibs/genalloc.h>
#include <s6/ftrigr.h>
#include <66/service.h>
#include <66/ssexec.h>
#include <66/graph.h>
typedef struct ss_resolve_sig_s ss_resolve_sig_t, *ss_resolve_sig_t_ref ;
struct ss_resolve_sig_s
{
resolve_service_t res ;
unsigned int notify ;
unsigned int ndeath;
tain deadline ;
uint16_t ids ;
char *sigtosend ;
int sig ;
int state ;
pid_t pid ;
} ;
#define RESOLVE_SIG_ZERO \
{ \
.res = RESOLVE_SERVICE_ZERO, \
.notify = 0, \
.ndeath = 3, \
.deadline = TAIN_ZERO, \
.ids = 0, \
.sigtosend = 0, \
.sig = 0, \
.state = -1, \
.pid = 0 \
}
typedef enum state_e state_t, *state_t_ref ;
enum state_e
{
SIGUP = 0, // u
SIGRUP , // U - really up
SIGR, // r
SIGRR, // R - really up
SIGDOWN , // d
SIGRDOWN ,// D - really down
SIGX, //X
SIGO , //0
SIGSUP //s supervise
} ;
typedef enum sigactions_e sigactions_t, *sigactions_t_ref ;
enum sigactions_e
{
GOTIT = 0 ,
WAIT ,
DEAD ,
DONE ,
PERM ,
UKNOW
} ;
extern int svc_switch_to(ssexec_t *info,unsigned int where) ;
extern int svc_init(ssexec_t *info,char const *src, genalloc *ga) ;
extern int svc_init_pipe(ftrigr_t *fifo,genalloc *gasv,tain *deadline) ;
extern int svc_send(ssexec_t *info,genalloc *ga,char const *sig,char const *const *envp) ;
extern int svc_unsupervise(ssexec_t *info,genalloc *ga,char const *sig,char const *const *envp) ;
extern int svc_scandir_ok (char const *dir) ;
extern int svc_scandir_send(char const *scandir,char const *signal) ;
extern int svc_send(char const *const *list, unsigned int nservice, char **sig, unsigned int siglen, ssexec_t *info) ;
extern void svc_unsupervise(unsigned int *alist, unsigned int alen, graph_t *g, resolve_service_t *ares, unsigned int areslen) ;
#endif
......@@ -32,8 +32,6 @@
#define YOURGID(passto,owner) yourgid(passto,owner)
/** ss_utils.c file */
extern int scandir_ok (char const *dir) ;
extern int scandir_send_signal(char const *scandir,char const *signal) ;
extern char const *get_userhome(uid_t myuid) ;
extern int youruid(uid_t *passto,char const *owner) ;
extern int yourgid(gid_t *passto,uid_t owner) ;
......@@ -55,5 +53,9 @@ extern int module_path(stralloc *sdir, stralloc *mdir, char const *sv,char const
extern int sa_pointo(stralloc *sa, ssexec_t *info, int type, unsigned int where) ;
extern int create_live_state(ssexec_t *info, char const *treename) ;
extern int create_live_tree(ssexec_t *info) ;
extern void name_isvalid(char const *name) ;
extern int set_ownerhome_stack(char *store) ;
extern int set_ownersysdir_stack(char *base, uid_t owner) ;
#endif
......@@ -22,8 +22,7 @@ extern int write_services(resolve_service_t *res, char const *workdir, uint8_t f
extern void write_classic(resolve_service_t *res, char const *dst, uint8_t force) ;
extern void write_common(resolve_service_t *res, char const *dst) ;
extern void write_environ(char const *name, char const *contents, char const *dst) ;
extern void write_execute_scripts(resolve_service_t *res, resolve_service_addon_scripts_t *scripts, char const *file, char const *dst) ;
extern void write_execute_scripts_user(resolve_service_t *res, resolve_service_addon_scripts_t *scripts, char const *file, char const *dst) ;
extern void write_execute_scripts(char const *file, char const *contents, char const *dst) ;
extern void write_logger(resolve_service_t *res, char const *destination, uint8_t force) ;
extern void write_oneshot(resolve_service_t *res, char const *dst) ;
extern void write_uint(char const *dst, char const *name, uint32_t ui) ;
......
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