diff --git a/src/66/66-inservice.c b/src/66/66-inservice.c index a208f26d67943ca5ace9a2f28698bb6630aa86d9..51385731a902c5d24e846ffbfc8e0000c8ee0a35 100644 --- a/src/66/66-inservice.c +++ b/src/66/66-inservice.c @@ -55,7 +55,7 @@ static unsigned int nlog = 20 ; static stralloc src = STRALLOC_ZERO ; static wchar_t const field_suffix[] = L" :" ; -static char fields[ENDOFKEY][INFO_FIELD_MAXLEN] = {{ 0 }} ; +static char fields[INFO_NKEY][INFO_FIELD_MAXLEN] = {{ 0 }} ; static void info_display_string(char const *str) ; static void info_display_name(char const *field, ss_resolve_t *res) ; static void info_display_intree(char const *field, ss_resolve_t *res) ; @@ -209,7 +209,7 @@ static void info_get_status(ss_resolve_t *res) pid_t pid ; - if (res->type == CLASSIC || res->type == LONGRUN) + if (res->type == TYPE_CLASSIC || res->type == TYPE_LONGRUN) { r = s6_svc_ok(res->sa.s + res->runat) ; if (r != 1) @@ -257,7 +257,7 @@ static void info_display_status(char const *field,ss_resolve_t *res) static void info_display_type(char const *field,ss_resolve_t *res) { if (NOFIELD) info_display_field_name(field) ; - info_display_string(get_keybyid(res->type)) ; + info_display_string(get_key_by_enum(ENUM_TYPE,res->type)) ; } static void info_display_description(char const *field,ss_resolve_t *res) @@ -455,7 +455,7 @@ static void info_display_envfile(char const *field,ss_resolve_t *res) static void info_display_logname(char const *field,ss_resolve_t *res) { if (NOFIELD) info_display_field_name(field) ; - if (res->type == CLASSIC || res->type == LONGRUN) + if (res->type == TYPE_CLASSIC || res->type == TYPE_LONGRUN) { if (res->logger) { @@ -474,7 +474,7 @@ static void info_display_logname(char const *field,ss_resolve_t *res) static void info_display_logdst(char const *field,ss_resolve_t *res) { if (NOFIELD) info_display_field_name(field) ; - if (res->type == CLASSIC || res->type == LONGRUN) + if (res->type == TYPE_CLASSIC || res->type == TYPE_LONGRUN) { if (res->logger) { @@ -493,7 +493,7 @@ static void info_display_logdst(char const *field,ss_resolve_t *res) static void info_display_logfile(char const *field,ss_resolve_t *res) { if (NOFIELD) info_display_field_name(field) ; - if (res->type == CLASSIC || res->type == LONGRUN) + if (res->type == TYPE_CLASSIC || res->type == TYPE_LONGRUN) { if (res->logger) { diff --git a/src/66/66-intree.c b/src/66/66-intree.c index 2c8ca6a1911670a541dc685c76eeca8d55a4c9b7..5b6609ad8112cc3c94d5414dbee257adc3d3c888 100644 --- a/src/66/66-intree.c +++ b/src/66/66-intree.c @@ -52,7 +52,7 @@ static stralloc live = STRALLOC_ZERO ; static stralloc src = STRALLOC_ZERO ; static wchar_t const field_suffix[] = L" :" ; -static char fields[ENDOFKEY][INFO_FIELD_MAXLEN] = {{ 0 }} ; +static char fields[INFO_NKEY][INFO_FIELD_MAXLEN] = {{ 0 }} ; static void info_display_name(char const *field,char const *treename) ; static void info_display_init(char const *field,char const *treename) ; static void info_display_order(char const *field,char const *treename) ; @@ -325,7 +325,7 @@ static void info_display_symlink(char const *field, char const *treename) int db, svc ; size_t typelen ; char type[UINT_FMT] ; - typelen = uint_fmt(type, BUNDLE) ; + typelen = uint_fmt(type, TYPE_BUNDLE) ; type[typelen] = 0 ; char cmd[typelen + 6 + 1] ; @@ -334,7 +334,7 @@ static void info_display_symlink(char const *field, char const *treename) db = backup_cmd_switcher(VERBOSITY,cmd,&info) ; if (db < 0) log_dieusys(LOG_EXIT_SYS,"find realpath of symlink for db of tree: ",info.treename.s) ; - typelen = uint_fmt(type, CLASSIC) ; + typelen = uint_fmt(type, TYPE_CLASSIC) ; type[typelen] = 0 ; auto_strings(cmd,"-t",type," -b") ; diff --git a/src/66/66-tree.c b/src/66/66-tree.c index be8e656b68499534587bad42539160f13a24c03e..6138f1610bde30d4ca31672cd529291063f5e7d3 100644 --- a/src/66/66-tree.c +++ b/src/66/66-tree.c @@ -213,7 +213,7 @@ void create_tree(char const *tree,char const *treename) res.description = ss_resolve_add_string(&res,"inner bundle - do not use it") ; res.tree = ss_resolve_add_string(&res,dst) ; res.treename = ss_resolve_add_string(&res,treename) ; - res.type = BUNDLE ; + res.type = TYPE_BUNDLE ; res.disen = 1 ; auto_create(dst,SS_SVDIRS,newlen,0755) ; diff --git a/src/include/66/enum.h b/src/include/66/enum.h index 690f46ce43382d24d172fd1050dc86349b6fec1a..1affd15733ab89075ce373ffd44524a868e4027d 100644 --- a/src/include/66/enum.h +++ b/src/include/66/enum.h @@ -15,99 +15,203 @@ #ifndef SS_ENUM_H #define SS_ENUM_H - #include <sys/types.h> +#define ENUM_START 0 + +typedef enum enum_main_e enum_main_t, *enum_main_t_ref ; +enum enum_main_e +{ + ENUM_SECTION = 0 , + ENUM_KEY , + ENUM_TYPE , + ENUM_EXPECTED , + ENUM_OPTS , + ENUM_FLAGS , + ENUM_BUILD , + ENUM_MANDATORY , + ENUM_TIME , + ENUM_LOGOPTS , + ENUM_ENDOFKEY +} ; + +typedef enum enum_section_e enum_section_t, *enum_section_t_ref ; +enum enum_section_e +{ + SECTION_MAIN = 0 , + SECTION_START , + SECTION_STOP , + SECTION_LOG , + SECTION_ENV , + SECTION_ENDOFKEY +} ; + +extern char const *enum_str_section[] ; + +typedef enum enum_key_e enum_key_t, *enum_key_t_ref ; +enum enum_key_e +{ + KEY_TYPE = 0 , + KEY_NAME , + KEY_DESCRIPTION , + KEY_CONTENTS , + KEY_DEPENDS , + KEY_OPTSDEPS , + KEY_EXTDEPS , + KEY_OPTIONS , + KEY_NOTIFY , + KEY_USER , + KEY_BUILD , + KEY_SIGNAL , + KEY_FLAGS , + KEY_RUNAS , + KEY_SHEBANG , + KEY_T_FINISH , + KEY_T_KILL , + KEY_T_UP , + KEY_T_DOWN , + KEY_DEATH , + KEY_HIERCOPY , + KEY_EXEC , + KEY_DESTINATION , + KEY_BACKUP , + KEY_MAXSIZE , + KEY_TIMESTP , + KEY_ENVAL , + KEY_ENDOFKEY +} ; + +extern char const *enum_str_key[] ; + +typedef enum enum_type_e enum_type_t, *enum_type_t_ref ; +enum enum_type_e +{ + TYPE_MODULES = 0 , + TYPE_CLASSIC , + TYPE_BUNDLE , + TYPE_LONGRUN , + TYPE_ONESHOT , + TYPE_ENDOFKEY + +} ; + +extern char const *enum_str_type[] ; + +typedef enum enum_expected_e enum_expected_t, *enum_expected_t_ref ; +enum enum_expected_e +{ + EXPECT_LINE = 0 , + EXPECT_BRACKET , + EXPECT_UINT , + EXPECT_SLASH , + EXPECT_QUOTE , + EXPECT_KEYVAL , + EXPECT_ENDOFKEY +} ; + +extern char const *enum_str_expected[] ; + +typedef enum enum_opts_e enum_opts_t, *enum_opts_t_ref ; +enum enum_opts_e +{ + OPTS_LOGGER = 0 , + OPTS_ENVIR , + OPTS_HIERCOPY , + OPTS_PIPELINE , + OPTS_ENDOFKEY +} ; + +extern char const *enum_str_opts[] ; + +typedef enum enum_flags_e enum_flags_t, *enum_flags_t_ref ; +enum enum_flags_e +{ + FLAGS_DOWN = 0 , + FLAGS_NOSETSID , + FLAGS_ENDOFKEY +} ; + +extern char const *enum_str_flags[] ; + +typedef enum enum_build_e enum_build_t, *enum_build_t_ref ; +enum enum_build_e +{ + BUILD_AUTO = 0 , + BUILD_CUSTOM , + BUILD_ENDOFKEY +} ; + +extern char const *enum_str_build[] ; + +typedef enum enum_mandatory_e enum_mandatory_t, *enum_mandatory_t_ref ; +enum enum_mandatory_e +{ + MANDATORY_NEED = 0 , + MANDATORY_OPTS , + MANDATORY_BUNDLE , + MANDATORY_CUSTOM , + MANDATORY_ENDOFKEY +} ; -typedef enum key_enum_e key_enum_t, *key_enum_t_ref ; -enum key_enum_e -{ - //Section - MAIN = 0 , - START , - STOP , - LOG , - ENV , - //Main - TYPE ,// = 5 - NAME , - DESCRIPTION , - CONTENTS , - DEPENDS , - OPTSDEPS , - EXTDEPS , - OPTIONS , - NOTIFY , - USER , - PRODUCER , - CONSUMER , - BUILD , - SIGNAL , - FLAGS , - RUNAS , - SHEBANG , - T_KILL , - T_FINISH , - T_UP , - T_DOWN , - DEATH , - HIERCOPY , - EXEC , - DESTINATION , - BACKUP , - MAXSIZE , - TIMESTP , - ENVAL , - //Service type - CLASSIC, // = 34 - BUNDLE , - LONGRUN , - ONESHOT , - //Key expected - LINE , // = 38 - BRACKET , - UINT , - SLASH , - QUOTE , - KEYVAL , - //Options - LOGGER , // = 44 - PIPELINE , - //Flags - DOWN , // = 46 - NOSETSID , - ENVIR , - //Build - AUTO , // = 49 - CUSTOM , - //Mandatory - NEED , // = 51 - OPTS , - //Time - TAI , // = 53 - ISO , - NONE , - ENDOFKEY -} ; -#define PIPELINE_NAME "pipeline-name" - -extern int const key_enum_el ; -extern int const key_enum_section_el ; - -extern int const key_enum_main_el ; -extern int const key_enum_svtype_el ; -extern int const key_enum_expect_el ; -extern int const key_enum_options_el ; -extern int const key_enum_flags_el ; -extern int const key_enum_build_el ; -extern int const key_enum_mandatory_el ; -extern int const key_enum_time_el ; +extern char const *enum_str_mandatory[] ; + +typedef enum enum_time_e enum_time_t, *enum_time_t_ref ; +enum enum_time_e +{ + TIME_TAI = 0 , + TIME_ISO , + TIME_NONE , + TIME_ENDOFKEY +} ; + +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 struct enum_all_enum_s enum_all_enum_t, *enum_all_enum_t_ref ; +struct enum_all_enum_s +{ + int const enum_all ; + char const **str ; +} ; + +extern ssize_t get_enum_by_key_one(char const *str, int const e) ; +extern ssize_t get_enum_by_key(char const *str) ; +extern char const *get_key_by_enum(int const e, int const key) ; +extern enum_all_enum_t enum_all[] ; + +typedef enum actions_e actions_t, *actions_t_ref ; +enum actions_e +{ + ACTION_COMMON = 0 , + ACTION_EXECRUN , + ACTION_EXECFINISH , + ACTION_EXECLOG , + ACTION_EXECUP , + ACTION_EXECDOWN, + ACTION_ENVIRON, + ACTION_SKIP +} ; + +unsigned char const actions[SECTION_ENDOFKEY][TYPE_ENDOFKEY] ; +unsigned char const states[SECTION_ENDOFKEY][TYPE_ENDOFKEY] ; typedef struct key_description_s key_description_t ; struct key_description_s { - char const *name ; - key_enum_t const expected ; - key_enum_t const mandatory ; + char const **name ; + int const id ; + int const expected ; + int const mandatory ; } ; typedef struct key_all_s key_all_t ; @@ -118,56 +222,56 @@ struct key_all_s static key_description_t const main_section_list[] = { - { .name = "@type", .expected = LINE, .mandatory = NEED }, - { .name = "@name", .expected = LINE, .mandatory = OPTS }, - { .name = "@description", .expected = QUOTE, .mandatory = OPTS }, - { .name = "@depends", .expected = BRACKET, .mandatory = OPTS }, - { .name = "@optsdepends", .expected = BRACKET, .mandatory = OPTS }, - { .name = "@extdepends", .expected = BRACKET, .mandatory = OPTS }, - { .name = "@contents", .expected = BRACKET, .mandatory = BUNDLE }, - { .name = "@options", .expected = BRACKET, .mandatory = OPTS }, - { .name = "@flags", .expected = BRACKET, .mandatory = OPTS }, - { .name = "@notify", .expected = UINT, .mandatory = OPTS }, - { .name = "@user", .expected = BRACKET, .mandatory = NEED }, - { .name = "@timeout-finish", .expected = UINT, .mandatory = OPTS }, - { .name = "@timeout-kill", .expected = UINT, .mandatory = OPTS }, - { .name = "@timeout-up", .expected = UINT, .mandatory = OPTS }, - { .name = "@timeout-down", .expected = UINT, .mandatory = OPTS }, - { .name = "@maxdeath", .expected = UINT, .mandatory = OPTS }, - { .name = "@down-signal", .expected = UINT, .mandatory = OPTS }, - { .name = "@hiercopy", .expected = BRACKET, .mandatory = OPTS }, - { .name = 0 } + { .name = &enum_str_key[KEY_TYPE], .id = KEY_TYPE, .expected = EXPECT_LINE, .mandatory = MANDATORY_NEED }, + { .name = &enum_str_key[KEY_NAME], .id = KEY_NAME, .expected = EXPECT_LINE, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_DESCRIPTION], .id = KEY_DESCRIPTION, .expected = EXPECT_QUOTE, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_DEPENDS], .id = KEY_DEPENDS, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_OPTSDEPS], .id = KEY_OPTSDEPS, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_EXTDEPS], .id = KEY_EXTDEPS, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_CONTENTS], .id = KEY_CONTENTS, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_BUNDLE }, + { .name = &enum_str_key[KEY_OPTIONS], .id = KEY_OPTIONS, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_FLAGS], .id = KEY_FLAGS, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_NOTIFY], .id = KEY_NOTIFY, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_USER], .id = KEY_USER, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_NEED }, + { .name = &enum_str_key[KEY_T_FINISH], .id = KEY_T_FINISH, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_T_KILL], .id = KEY_T_KILL, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_T_UP], .id = KEY_T_UP, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_T_DOWN], .id = KEY_T_DOWN, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_DEATH], .id = KEY_DEATH, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_SIGNAL], .id = KEY_SIGNAL, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_HIERCOPY], .id = KEY_HIERCOPY, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_ENDOFKEY] } } ; static key_description_t const startstop_section_list[] = { - { .name = "@build", .expected = LINE, .mandatory = NEED }, - { .name = "@runas", .expected = LINE, .mandatory = OPTS }, - { .name = "@shebang", .expected = QUOTE, .mandatory = CUSTOM }, - { .name = "@execute", .expected = BRACKET, .mandatory = NEED }, - { .name = 0 } + { .name = &enum_str_key[KEY_BUILD], .id = KEY_BUILD, .expected = EXPECT_LINE, .mandatory = MANDATORY_NEED }, + { .name = &enum_str_key[KEY_RUNAS], .id = KEY_RUNAS, .expected = EXPECT_LINE, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_SHEBANG], .id = KEY_SHEBANG, .expected = EXPECT_QUOTE, .mandatory = MANDATORY_CUSTOM }, + { .name = &enum_str_key[KEY_EXEC], .id = KEY_EXEC, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_NEED }, + { .name = &enum_str_key[KEY_ENDOFKEY] } } ; static key_description_t const logger_section_list[] = { - { .name = "@destination", .expected = SLASH, .mandatory = CUSTOM }, - { .name = "@build", .expected = LINE, .mandatory = NEED }, - { .name = "@runas", .expected = LINE, .mandatory = OPTS }, - { .name = "@depends", .expected = BRACKET, .mandatory = OPTS }, - { .name = "@shebang", .expected = QUOTE, .mandatory = CUSTOM }, - { .name = "@timeout-finish", .expected = UINT, .mandatory = OPTS }, - { .name = "@timeout-kill", .expected = UINT, .mandatory = OPTS }, - { .name = "@backup", .expected = UINT, .mandatory = OPTS }, - { .name = "@maxsize", .expected = UINT, .mandatory = OPTS }, - { .name = "@timestamp", .expected = LINE, .mandatory = OPTS }, - { .name = "@execute", .expected = BRACKET, .mandatory = CUSTOM }, - { .name = 0 } + { .name = &enum_str_key[KEY_DESTINATION], .id = KEY_DESTINATION, .expected = EXPECT_SLASH, .mandatory = MANDATORY_CUSTOM }, + { .name = &enum_str_key[KEY_BUILD], .id = KEY_BUILD, .expected = EXPECT_LINE, .mandatory = MANDATORY_NEED }, + { .name = &enum_str_key[KEY_RUNAS], .id = KEY_RUNAS, .expected = EXPECT_LINE, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_DEPENDS], .id = KEY_DEPENDS, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_SHEBANG], .id = KEY_SHEBANG, .expected = EXPECT_QUOTE, .mandatory = MANDATORY_CUSTOM }, + { .name = &enum_str_key[KEY_T_FINISH], .id = KEY_T_FINISH, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_T_KILL], .id = KEY_T_KILL, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_BACKUP], .id = KEY_BACKUP, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_MAXSIZE], .id = KEY_MAXSIZE, .expected = EXPECT_UINT, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_TIMESTP], .id = KEY_TIMESTP, .expected = EXPECT_LINE, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_key[KEY_EXEC], .id = KEY_EXEC, .expected = EXPECT_BRACKET, .mandatory = MANDATORY_CUSTOM }, + { .name = &enum_str_key[KEY_ENDOFKEY] } } ; static key_description_t const environment_section_list[] = { - { .name = "environment", .expected = KEYVAL, .mandatory = OPTS }, - { .name = 0 } + { .name = &enum_str_section[SECTION_ENV], .id = SECTION_ENV, .expected = EXPECT_KEYVAL, .mandatory = MANDATORY_OPTS }, + { .name = &enum_str_section[SECTION_ENDOFKEY] } } ; static int const total_list_el[6] = { 19, 5, 5, 12, 2, 0 } ; @@ -182,12 +286,5 @@ static key_all_t const total_list[] = { .list = 0 } } ; -/** Compare @str with function @func on @key_el enum table - * @Return the index of the table - * @Return -1 on fail*/ -extern ssize_t get_enumbyid(char const *str,key_enum_t key_el) ; - -/**@Return the string of the @key */ -extern char const *get_keybyid(key_enum_t key) ; #endif diff --git a/src/include/66/info.h b/src/include/66/info.h index d4368f33d41be3378be5487f5ca65aa0edef353f..18b80e708319561d6833acfcf086160840ac86b1 100644 --- a/src/include/66/info.h +++ b/src/include/66/info.h @@ -25,6 +25,7 @@ #define SS_INFO_H #define INFO_FIELD_MAXLEN 30 +#define INFO_NKEY 100 typedef struct depth_s depth_t ; struct depth_s diff --git a/src/include/66/parser.h b/src/include/66/parser.h index 753ade1b6fb4cd478c9b5651ac58d4b4a183e850..3c5ba0c4305dc4c4f6e4f564f3c83506937657d1 100644 --- a/src/include/66/parser.h +++ b/src/include/66/parser.h @@ -36,19 +36,6 @@ extern stralloc deps ; //extern genalloc gadeps ; extern genalloc gasv ; -typedef enum actions_e actions_t, *actions_t_ref ; -enum actions_e -{ - COMMON = 0 , - EXECRUN , - EXECFINISH , - EXECLOG , - EXECUP , - EXECDOWN, - ENVIRON, - SKIP -} ; - /**struct for run and finish file*/ typedef struct sv_exec_s sv_exec,*sv_exec_ref ; struct sv_exec_s @@ -260,7 +247,7 @@ extern void section_free(section_t *sec) ; extern void freed_parser(void) ; /** enable phase */ extern void start_parser(stralloc *list,ssexec_t *info, unsigned int *nbsv,uint8_t FORCE) ; -extern int parser(sv_alltype *service,stralloc *src,char const *svname) ; +extern int parser(sv_alltype *service,stralloc *src,char const *svname,int svtype) ; extern int parse_service_check_enabled(ssexec_t *info, char const *svname,uint8_t force,uint8_t *exist) ; extern int parse_service_before(ssexec_t *info, stralloc *parsed_list, stralloc *opts_deps_list, char const *sv,unsigned int *nbsv, stralloc *sasv,uint8_t force,uint8_t *exist) ; extern int parse_service_deps(ssexec_t *info,stralloc *parsed_list, stralloc *opts_deps_list, sv_alltype *sv_before, char const *sv,unsigned int *nbsv,stralloc *sasv,uint8_t force) ; @@ -268,7 +255,7 @@ extern int parse_service_opts_deps(ssexec_t *info,stralloc *parsed_list,stralloc extern int parse_add_service(stralloc *parsed_list,sv_alltype *sv_before,char const *service,unsigned int *nbsv,uid_t owner) ; /** split */ extern int section_get_range(section_t *sasection,stralloc *src) ; -extern int key_get_range(genalloc *ga, section_t *sasection,int *svtype) ; +extern int key_get_range(genalloc *ga, section_t *sasection) ; extern int get_mandatory(genalloc *nocheck,int idsec,int idkey) ; extern int nocheck_toservice(keynocheck *nocheck,int svtype, sv_alltype *service) ; /** store */ diff --git a/src/include/66/utils.h b/src/include/66/utils.h index 946656a15c004539e807500023ef73261417c29d..e201caa18354d08fc88fc69588ef05b59e57f7bf 100644 --- a/src/include/66/utils.h +++ b/src/include/66/utils.h @@ -46,6 +46,6 @@ extern int set_livestate(stralloc *live,uid_t owner) ; extern int read_svfile(stralloc *sasv,char const *name,char const *src) ; extern int instance_check(char const *svname) ; extern int instance_splitname(stralloc *sa,char const *name,int len,int what) ; -//extern int instance_change_name(stralloc *sa,char const *template,char const *copy) ; -extern int instance_create(stralloc *sasv,char const *svname, char const *regex, char const *src, int len) ; +extern int instance_create(stralloc *sasv,char const *svname, char const *regex, int len) ; +extern int get_svtype(sv_alltype *sv_before, char const *contents) ; #endif diff --git a/src/lib66/backup_cmd_switcher.c b/src/lib66/backup_cmd_switcher.c index 2e2d852d2f0568bf3892ef5450ea0e52e42f5989..92481716a887c00b881cb0ff9f3dbdc54c69bad3 100644 --- a/src/lib66/backup_cmd_switcher.c +++ b/src/lib66/backup_cmd_switcher.c @@ -72,7 +72,7 @@ int backup_switcher(int argc, char const *const *argv,ssexec_t *info) if (argc < 1) return -1 ; if ((!change && !back) || !type) return -1 ; - if (type < CLASSIC || type > ONESHOT) + if (type < TYPE_CLASSIC || type > TYPE_ONESHOT) log_warn_return(LOG_EXIT_LESSONE,"unknown type for backup_switcher") ; tree = *argv ; @@ -82,7 +82,7 @@ int backup_switcher(int argc, char const *const *argv,ssexec_t *info) //base.len-- ; size_t psymlen ; char *psym = NULL ; - if (type == CLASSIC) + if (type == TYPE_CLASSIC) { psym = SS_SYM_SVC ; psymlen = SS_SYM_SVC_LEN ; @@ -130,7 +130,7 @@ int backup_switcher(int argc, char const *const *argv,ssexec_t *info) char *psrc = NULL ; char *pback = NULL ; - if (type == CLASSIC) + if (type == TYPE_CLASSIC) { psrc = SS_SVC ; psrclen = SS_SVC_LEN ; diff --git a/src/lib66/backup_make_new.c b/src/lib66/backup_make_new.c index 54546e5db7f89d90b0b88802a38ef5eabc40c027..15506330c9a202689cb8f429b0578701a7723a3d 100644 --- a/src/lib66/backup_make_new.c +++ b/src/lib66/backup_make_new.c @@ -39,7 +39,7 @@ int backup_make_new(ssexec_t *info, unsigned int type) size_t typelen ; char *ptype = NULL ; - if (type == CLASSIC) + if (type == TYPE_CLASSIC) { ptype = SS_SVC ; typelen = SS_SVC_LEN ; diff --git a/src/lib66/backup_realpath_sym.c b/src/lib66/backup_realpath_sym.c index e08537d51df43157f20445bab031987346775872..20d5b779c2d0974508906c171405410f47bc408a 100644 --- a/src/lib66/backup_realpath_sym.c +++ b/src/lib66/backup_realpath_sym.c @@ -33,7 +33,7 @@ int backup_realpath_sym(stralloc *sa, ssexec_t *info,unsigned int type) size_t typelen ; char *ptype = 0 ; - if (type == CLASSIC) + if (type == TYPE_CLASSIC) { ptype = SS_SYM_SVC ; typelen = SS_SYM_SVC_LEN; diff --git a/src/lib66/db_switch_to.c b/src/lib66/db_switch_to.c index af407fdf53d3b488c677465db647d3385cfe5359..1a48d1a1ba8609f3eff63ca327b2919f53f54fac 100644 --- a/src/lib66/db_switch_to.c +++ b/src/lib66/db_switch_to.c @@ -35,7 +35,7 @@ int db_switch_to(ssexec_t *info, char const *const *envp,unsigned int where) stralloc db = STRALLOC_ZERO ; char type[UINT_FMT] ; - size_t typelen = uint_fmt(type, BUNDLE) ; + size_t typelen = uint_fmt(type, TYPE_BUNDLE) ; type[typelen] = 0 ; size_t cmdlen ; @@ -56,7 +56,7 @@ int db_switch_to(ssexec_t *info, char const *const *envp,unsigned int where) if (!r && where) { log_trace("make a backup of db service for: ",info->treename.s) ; - if (!backup_make_new(info,LONGRUN)) + if (!backup_make_new(info,TYPE_LONGRUN)) { log_warnusys("make a backup of db service for: ",info->treename.s) ; goto err ; @@ -72,7 +72,7 @@ int db_switch_to(ssexec_t *info, char const *const *envp,unsigned int where) } if (db_ok(info->livetree.s, info->treename.s)) { - if (!backup_realpath_sym(&db,info,LONGRUN)) + if (!backup_realpath_sym(&db,info,TYPE_LONGRUN)) { log_warnusys("find path of db: ",db.s) ; goto err ; @@ -106,7 +106,7 @@ int db_switch_to(ssexec_t *info, char const *const *envp,unsigned int where) if (db_ok(info->livetree.s,info->treename.s)) { - if (!backup_realpath_sym(&db,info,LONGRUN)) + if (!backup_realpath_sym(&db,info,TYPE_LONGRUN)) { log_warnusys("find path of db: ",db.s) ; goto err ; @@ -126,7 +126,7 @@ int db_switch_to(ssexec_t *info, char const *const *envp,unsigned int where) } } log_trace("make a backup of db service for: ",info->treename.s) ; - if (!backup_make_new(info,LONGRUN)) + if (!backup_make_new(info,TYPE_LONGRUN)) { log_warnusys("make a backup of db service for: ",info->treename.s) ; goto err ; diff --git a/src/lib66/get_enum.c b/src/lib66/get_enum.c index b15f899dcbd0f35d27a3a00a553d5920fa074fce..93d600b272d798254ca0f03bdceee3e35d48dbc7 100644 --- a/src/lib66/get_enum.c +++ b/src/lib66/get_enum.c @@ -14,100 +14,168 @@ #include <66/enum.h> -#include <sys/types.h> +#include <stddef.h> #include <oblibs/string.h> -char const *get_keybyid(key_enum_t key) +char const *enum_str_section[] = { + "main" , + "start" , + "stop" , + "logger" , + "environment" , + 0 +} ; + +char const *enum_str_key[] = { + "@type" , + "@name" , + "@description" , + "@contents" , + "@depends" , + "@optsdepends" , + "@extdepends" , + "@options" , + "@notify" , + "@user" , + "@build" , + "@down-signal" , + "@flags" , + "@runas" , + "@shebang" , + "@timeout-finish" , + "@timeout-kill" , + "@timeout-up" , + "@timeout-down" , + "@maxdeath" , + "@hiercopy" , + "@execute" , + "@destination" , + "@backup" , + "@maxsize" , + "@timestamp" , + "@enval" , + 0 +} ; + +char const *enum_str_type[] = { + "modules" , + "classic" , + "bundle" , + "longrun" , + "oneshot" , + 0 +} ; + +char const *enum_str_expected[] = { + "line" , + "bracket" , + "uint" , + "slash" , + "quote" , + "keyval" , + 0 +} ; + +char const *enum_str_opts[] = { + "log" , + "env" , + "hiercopy" , + "pipeline" , + 0 +} ; + +char const *enum_str_flags[] = { + "down" , + "nosetsid" , + 0 +} ; + +char const *enum_str_build[] = { + "auto" , + "custom" , + 0 +} ; + +char const *enum_str_mandatory[] = { + "need" , + "opts" , + "bundle" , + "custom" , + 0 +} ; + +char const *enum_str_time[] = { + "tai" , + "iso" , + "none" , + 0 +} ; + +char const *enum_str_logopts[] = { + "producer-for" , + "consumer-for" , + "pipeline-name" , + 0 +} ; + +enum_all_enum_t enum_all[] = { + + [ENUM_SECTION] = { .enum_all = SECTION_ENDOFKEY - ENUM_START, .str = enum_str_section } , + [ENUM_KEY] = { .enum_all = KEY_ENDOFKEY - ENUM_START, .str = enum_str_key } , + [ENUM_TYPE] = { .enum_all = TYPE_ENDOFKEY - ENUM_START, .str = enum_str_type } , + [ENUM_EXPECTED] = { .enum_all = EXPECT_ENDOFKEY - ENUM_START, .str = enum_str_expected } , + [ENUM_OPTS] = { .enum_all = OPTS_ENDOFKEY- ENUM_START , .str = enum_str_opts } , + [ENUM_FLAGS] = { .enum_all = FLAGS_ENDOFKEY - ENUM_START , .str = enum_str_flags } , + [ENUM_BUILD] = { .enum_all = BUILD_ENDOFKEY - ENUM_START , .str = enum_str_build } , + [ENUM_MANDATORY] = { .enum_all = MANDATORY_ENDOFKEY - ENUM_START , .str = enum_str_mandatory } , + [ENUM_TIME] = { .enum_all = TIME_ENDOFKEY - ENUM_START , .str = enum_str_time } , + [ENUM_LOGOPTS] = { .enum_all = LOGOPTS_ENDOFKEY - ENUM_START , .str = enum_str_logopts } , + [ENUM_ENDOFKEY] = { 0 } + +} ; + +unsigned char const actions[SECTION_ENDOFKEY][TYPE_ENDOFKEY] = { + // MODULES >CLASSIC, BUNDLE, LONGRUN, ONESHOT + { ACTION_SKIP, ACTION_COMMON, ACTION_COMMON, ACTION_COMMON, ACTION_COMMON }, // main + { ACTION_SKIP, ACTION_EXECRUN, ACTION_SKIP, ACTION_EXECRUN, ACTION_EXECUP }, // start + { ACTION_SKIP, ACTION_EXECFINISH, ACTION_SKIP, ACTION_EXECFINISH, ACTION_EXECDOWN }, // stop + { ACTION_SKIP, ACTION_EXECLOG, ACTION_SKIP, ACTION_EXECLOG, ACTION_SKIP }, // log + { ACTION_SKIP, ACTION_ENVIRON, ACTION_SKIP, ACTION_ENVIRON, ACTION_ENVIRON }, // env +} ; + +unsigned char const states[SECTION_ENDOFKEY][TYPE_ENDOFKEY] = { + // MODULES CLASSIC, BUNDLE, LONGRUN, ONESHOT + { ACTION_SKIP, SECTION_START, ACTION_SKIP, SECTION_START, SECTION_START }, // main + { ACTION_SKIP, SECTION_STOP, ACTION_SKIP, SECTION_STOP, SECTION_STOP }, // start + { ACTION_SKIP, SECTION_LOG, ACTION_SKIP, SECTION_LOG, SECTION_LOG }, // stop + { ACTION_SKIP, SECTION_ENV, ACTION_SKIP, SECTION_ENV, SECTION_ENV }, // log + { ACTION_SKIP, ACTION_SKIP, ACTION_SKIP, ACTION_SKIP, ACTION_SKIP }, // env +} ; + +ssize_t get_enum_by_key_one(char const *str, int const e) { - //Section - return (key == MAIN) ? "main" : - (key == START) ? "start" : - (key == STOP) ? "stop" : - (key == LOG) ? "logger" : - (key == ENV) ? "environment" : - //Main - (key == TYPE ) ? "@type" : - (key == NAME ) ? "@name" : - (key == DESCRIPTION ) ? "@description" : - (key == CONTENTS ) ? "@contents" : - (key == DEPENDS ) ? "@depends" : - (key == OPTSDEPS ) ? "@optsdepends" : - (key == EXTDEPS ) ? "@extdepends" : - (key == OPTIONS ) ? "@options" : - (key == NOTIFY ) ? "@notify" : - (key == USER ) ? "@user" : - (key == BUILD ) ? "@build" : - (key == SIGNAL) ? "@down-signal" : - (key == FLAGS ) ? "@flags" : - (key == RUNAS ) ? "@runas" : - (key == SHEBANG ) ? "@shebang" : - (key == T_FINISH ) ? "@timeout-finish" : - (key == T_KILL ) ? "@timeout-kill" : - (key == T_UP ) ? "@timeout-up" : - (key == T_DOWN ) ? "@timeout-down" : - (key == DEATH) ? "@maxdeath" : - (key == HIERCOPY) ? "@hiercopy" : - (key == EXEC ) ? "@execute" : - (key == DESTINATION ) ? "@destination" : - (key == BACKUP ) ? "@backup" : - (key == MAXSIZE ) ? "@maxsize" : - (key == TIMESTP ) ? "@timestamp" : - //Service type - (key == CLASSIC ) ? "classic" : - (key == BUNDLE ) ? "bundle" : - (key == LONGRUN ) ? "longrun" : - (key == ONESHOT ) ? "oneshot" : - //Key expected - (key == LINE ) ? "line" : - (key == BRACKET ) ? "bracket" : - (key == UINT ) ? "uint" : - (key == SLASH ) ? "slash" : - (key == QUOTE ) ? "quote" : - //Options - (key == LOGGER ) ? "log" : - (key == ENVIR ) ? "env" : - (key == HIERCOPY ) ? "hiercopy" : - (key == PIPELINE ) ? "pipeline" : - //Flags - (key == DOWN ) ? "down" : - (key == NOSETSID ) ? "nosetsid" : - //Build - (key == AUTO ) ? "auto" : - (key == CUSTOM ) ? "custom" : - //Mandatory - (key == NEED ) ? "need" : - (key == OPTS ) ? "opts" : - //Time - (key == TAI ) ? "tai" : - (key == ISO ) ? "iso" : - (key == NONE ) ? "none" : - //logger - (key == PRODUCER ) ? "producer-for" : - (key == CONSUMER ) ? "consumer-for" : - "unknown" ; + int i = 0 ; + enum_all_enum_t *key = enum_all ; + for(; i < key[e].enum_all;i++) + if(obstr_equal(str,key[e].str[i])) + return i ; + + return -1 ; } -ssize_t get_enumbyid(char const *str, key_enum_t key_el) +ssize_t get_enum_by_key(char const *str) { - key_enum_t i = 0 ; + int i = 0, ret ; - for (;i<key_el;i++) - if(obstr_equal(str,get_keybyid(i))) return i ; - + for (;i<ENUM_ENDOFKEY;i++) + { + ret = get_enum_by_key_one(str,i) ; + if (ret >= 0) return ret ; + } return -1 ; } - -int const key_enum_el = ENDOFKEY - MAIN ; -int const key_enum_section_el = TYPE - MAIN ; - -int const key_enum_main_el = CLASSIC - TYPE ; -int const key_enum_svtype_el = LINE - CLASSIC ; -int const key_enum_expect_el = LOGGER - LINE ; -int const key_enum_options_el = DOWN - LOGGER ; -int const key_enum_flags_el = AUTO - DOWN ; -int const key_enum_build_el = NEED - AUTO ; -int const key_enum_mandatory_el = TAI - NEED ; -int const key_enum_time_el = PRODUCER - TAI ; -int const key_enum_logger_el = ENDOFKEY - PRODUCER ; - +char const *get_key_by_enum(int const e, int const key) +{ + return enum_all[e].str[key] ; +} diff --git a/src/lib66/instance.c b/src/lib66/instance.c index d8367c99e17fe2ce54491da52fbe35a1f2c103c2..c573711ddf50b8159b9c7f5f1df264521c736b53 100644 --- a/src/lib66/instance.c +++ b/src/lib66/instance.c @@ -61,7 +61,7 @@ int instance_splitname(stralloc *sa,char const *name,int len,int what) return 1 ; } -int instance_create(stralloc *sasv,char const *svname, char const *regex, char const *src, int len) +int instance_create(stralloc *sasv,char const *svname, char const *regex, int len) { char const *copy ; size_t tlen = len + 1 ; @@ -72,18 +72,17 @@ int instance_create(stralloc *sasv,char const *svname, char const *regex, char c memcpy(template,svname,tlen) ; template[tlen] = 0 ; + if (!auto_stra(&tmp,sasv->s)) goto err ; + copy = svname + tlen ; - if (!file_readputsa(&tmp,src,template)) { - log_warnusys("open: ",src,template) ; - goto err ; - } if (!sastr_replace_all(&tmp,regex,copy)){ - log_warnusys("replace instance character at: ",src,template) ; + log_warnusys("replace instance character for service: ",svname) ; goto err ; } if (!stralloc_copy(sasv,&tmp)) goto err ; stralloc_free(&tmp) ; + return 1 ; err: stralloc_free(&tmp) ; diff --git a/src/lib66/parser.c b/src/lib66/parser.c index 7b1fc6768545cd96c297d1ecaf04402e465bcf9e..f83e52633ac59f19c25040a233252df69871b948 100644 --- a/src/lib66/parser.c +++ b/src/lib66/parser.c @@ -33,9 +33,9 @@ #include <66/parser.h> -int parser(sv_alltype *service,stralloc *src,char const *svname) +int parser(sv_alltype *service,stralloc *src,char const *svname,int svtype) { - int r , svtype = -1 ; + int r ; size_t i = 0 ; section_t sasection = SECTION_ZERO ; genalloc ganocheck = GENALLOC_ZERO ; @@ -46,22 +46,17 @@ int parser(sv_alltype *service,stralloc *src,char const *svname) log_warnu("parse section of service file: ",svname) ; goto err ; } - if (!sasection.idx[MAIN]) + if (!sasection.idx[SECTION_MAIN]) { log_warn("missing section [main] in service file: ", svname) ; goto err ; } - if (!key_get_range(&ganocheck,&sasection,&svtype)) goto err ; - if (svtype < 0) - { - log_warn("invalid value for key: ",get_keybyid(TYPE)," in service file: ",svname) ; - goto err ; - } - if (svtype != BUNDLE && !sasection.idx[START]) + if (svtype != TYPE_BUNDLE && !sasection.idx[SECTION_START]) { log_warn("missing section [start] in service file: ", svname) ; goto err ; } + if (!key_get_range(&ganocheck,&sasection)) goto err ; if (!genalloc_len(keynocheck,&ganocheck)){ log_warn("empty service file: ",svname) ; goto err ; @@ -69,7 +64,7 @@ int parser(sv_alltype *service,stralloc *src,char const *svname) for (i = 0;i < genalloc_len(keynocheck,&ganocheck);i++) { uint32_t idsec = genalloc_s(keynocheck,&ganocheck)[i].idsec ; - for (unsigned int j = 0;j < total_list_el[idsec] && total_list[idsec].list > 0;j++) + for (unsigned int j = 0;j < total_list_el[idsec] && *total_list[idsec].list[j].name;j++) { if (!get_mandatory(&ganocheck,idsec,j)) { @@ -86,7 +81,7 @@ int parser(sv_alltype *service,stralloc *src,char const *svname) goto err ; } } - if ((service->opts[1]) && (svtype == LONGRUN)) + if ((service->opts[1]) && (svtype == TYPE_LONGRUN)) { if (!add_pipe(service, &deps)) { diff --git a/src/lib66/parser_enabled.c b/src/lib66/parser_enabled.c index e4a756d32c077e665c62848ce9e8a7433e3d2a3c..3ba79d8c30c95e5e0edaeecb1de418546d191145 100644 --- a/src/lib66/parser_enabled.c +++ b/src/lib66/parser_enabled.c @@ -104,7 +104,7 @@ int parse_service_deps(ssexec_t *info,stralloc *parsed_list,stralloc *tree_list, for (;nid; id += strlen(deps.s + id) + 1, nid--) { newsv.len = 0 ; - if (sv_before->cname.itype != BUNDLE) + if (sv_before->cname.itype != TYPE_BUNDLE) { log_trace("Service : ",sv, " depends on : ",deps.s+id) ; }else log_trace("Bundle : ",sv, " contents : ",deps.s+id," as service") ; @@ -137,7 +137,7 @@ int parse_service_opts_deps(ssexec_t *info,stralloc *parsed_list,stralloc *tree_ unsigned int idref = sv_before->cname.idopts ; unsigned int nref = sv_before->cname.nopts ; - if (mandatory == EXTDEPS) { + if (mandatory == KEY_EXTDEPS) { idref = sv_before->cname.idext ; nref = sv_before->cname.next ; ext = 1 ; @@ -231,19 +231,24 @@ int parse_service_before(ssexec_t *info,stralloc *parsed_list,stralloc *tree_lis sv_alltype sv_before = SV_ALLTYPE_ZERO ; sasv->len = 0 ; + if (!read_svfile(sasv,svname,svsrc)) return 0 ; + + if (!get_svtype(&sv_before,sasv->s)) + log_warn_return (LOG_EXIT_ZERO,"invalid value for key: ",get_key_by_enum(ENUM_KEY,KEY_TYPE)," in service file: ",svsrc,"/",svname) ; + insta = instance_check(svname) ; if (!insta) log_warn_return(LOG_EXIT_ZERO, "invalid instance name: ",svname) ; if (insta > 0) { - if (!instance_create(sasv,svname,SS_INSTANCE,svsrc,insta)) + if (!instance_create(sasv,svname,SS_INSTANCE,insta)) log_warn_return(LOG_EXIT_ZERO,"create instance service: ",svname) ; /** ensure that we have an empty line at the end of the string*/ if (!stralloc_cats(sasv,"\n")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; if (!stralloc_0(sasv)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; - }else if (!read_svfile(sasv,svname,svsrc)) return 0 ; + } memcpy(svpath,svsrc,svsrclen) ; memcpy(svpath + svsrclen,svname,svnamelen) ; @@ -257,7 +262,7 @@ int parse_service_before(ssexec_t *info,stralloc *parsed_list,stralloc *tree_lis goto freed ; } - if (!parser(&sv_before,sasv,svname)) return 0 ; + if (!parser(&sv_before,sasv,svname,sv_before.cname.itype)) return 0 ; /** keep the name set by user * uniquely for instantiated service @@ -291,11 +296,11 @@ int parse_service_before(ssexec_t *info,stralloc *parsed_list,stralloc *tree_lis add: if (!parse_add_service(parsed_list,&sv_before,svpath,nbsv,info->owner)) return 0 ; - if ((sv_before.cname.itype > CLASSIC && force > 1) || !(*exist)) + if ((sv_before.cname.itype > TYPE_CLASSIC && force > 1) || !(*exist)) { if (!parse_service_deps(info,parsed_list,tree_list,&sv_before,sv,nbsv,sasv,force)) return 0 ; - if (!parse_service_opts_deps(info,parsed_list,tree_list,&sv_before,sv,nbsv,sasv,force,OPTSDEPS)) return 0 ; - if (!parse_service_opts_deps(info,parsed_list,tree_list,&sv_before,sv,nbsv,sasv,force,EXTDEPS)) return 0 ; + if (!parse_service_opts_deps(info,parsed_list,tree_list,&sv_before,sv,nbsv,sasv,force,KEY_OPTSDEPS)) return 0 ; + if (!parse_service_opts_deps(info,parsed_list,tree_list,&sv_before,sv,nbsv,sasv,force,KEY_EXTDEPS)) return 0 ; } freed: return 1 ; diff --git a/src/lib66/parser_utils.c b/src/lib66/parser_utils.c index 1a4aa6eb19386286f33bec52cd79fe461190fda0..e37b42ff6d94822e2bef9983a7f9fa660aec12a9 100644 --- a/src/lib66/parser_utils.c +++ b/src/lib66/parser_utils.c @@ -153,7 +153,7 @@ int section_get_range(section_t *sasection,stralloc *src) if(secname.len && n) { skip = section_get_skip(cp.s,pos,MILL_GET_SECTION_NAME.inner.nline) ; - id = get_enumbyid(secname.s,key_enum_section_el) ; + id = get_enum_by_key(secname.s) ; section_setsa(id,&psasection,sasection) ; if (skip) sasection->idx[id] = 1 ; } @@ -204,7 +204,7 @@ int section_get_range(section_t *sasection,stralloc *src) return 0 ; } -int key_get_range(genalloc *ga, section_t *sasection,int *svtype) +int key_get_range(genalloc *ga, section_t *sasection) { int r ; size_t pos = 0, fakepos = 0 ; @@ -213,21 +213,21 @@ int key_get_range(genalloc *ga, section_t *sasection,int *svtype) stralloc_ref psasection ; key_all_t const *list = total_list ; - for (int i = 0 ; i < key_enum_section_el ; i++) + for (int i = 0 ; i < SECTION_ENDOFKEY ; i++) { if (sasection->idx[i]) { - if (i == ENV) + if (i == SECTION_ENV) { pos = 0 ; keynocheck nocheck = KEYNOCHECK_ZERO ; nocheck.idsec = i ; - nocheck.idkey = ENVAL ; - nocheck.expected = KEYVAL ; - nocheck.mandatory = OPTS ; + nocheck.idkey = KEY_ENVAL ; + nocheck.expected = EXPECT_KEYVAL ; + nocheck.mandatory = MANDATORY_OPTS ; section_setsa(i,&psasection,sasection) ; if (!stralloc_cats(&nocheck.val,psasection->s+1)) goto err ;//+1 remove the first '\n' - if (!environ_get_clean_env(&nocheck.val)) { log_warnu("parse section: ",get_keybyid(i)) ; goto err ; } + if (!environ_get_clean_env(&nocheck.val)) { log_warnu("parse section: ",get_key_by_enum(ENUM_SECTION,i)) ; goto err ; } if (!stralloc_cats(&nocheck.val,"\n") || !stralloc_0(&nocheck.val)) goto err ; nocheck.val.len-- ; @@ -256,16 +256,16 @@ int key_get_range(genalloc *ga, section_t *sasection,int *svtype) for (int j = 0 ; j < total_list_el[i]; j++) { found = 0 ; - if (list[i].list[j].name && obstr_equal(sakey.s,list[i].list[j].name)) + if (*list[i].list[j].name && obstr_equal(sakey.s,*list[i].list[j].name)) { nocheck.idsec = i ; - nocheck.idkey = get_enumbyid(sakey.s,key_enum_el) ; + nocheck.idkey = list[i].list[j].id ; nocheck.expected = list[i].list[j].expected ; nocheck.mandatory = list[i].list[j].mandatory ; found = 1 ; switch(list[i].list[j].expected) { - case QUOTE: + case EXPECT_QUOTE: if (!sastr_get_double_quote(&nocheck.val)) { parse_err(6,&nocheck) ; @@ -273,7 +273,7 @@ int key_get_range(genalloc *ga, section_t *sasection,int *svtype) } if (!stralloc_0(&nocheck.val)) goto err ; break ; - case BRACKET: + case EXPECT_BRACKET: if (!parse_bracket(&nocheck.val,&pos)) { parse_err(6,&nocheck) ; @@ -285,9 +285,9 @@ int key_get_range(genalloc *ga, section_t *sasection,int *svtype) goto err ; } break ; - case LINE: - case UINT: - case SLASH: + case EXPECT_LINE: + case EXPECT_UINT: + case EXPECT_SLASH: if (!parse_line(&nocheck.val,&pos)) { parse_err(7,&nocheck) ; @@ -298,7 +298,6 @@ int key_get_range(genalloc *ga, section_t *sasection,int *svtype) parse_err(9,&nocheck) ; goto err ; } - if (!i && !j) (*svtype) = get_enumbyid(nocheck.val.s,key_enum_el) ; break ; default: return 0 ; @@ -309,7 +308,7 @@ int key_get_range(genalloc *ga, section_t *sasection,int *svtype) } if (!found && r >=0) { - log_warn("unknown key: ",sakey.s," : in section: ",get_keybyid(sasection->idx[i])) ; + log_warn("unknown key: ",sakey.s," : in section: ",get_key_by_enum(ENUM_SECTION,i)) ; keynocheck_free(&nocheck) ; goto err ; } @@ -338,15 +337,16 @@ int get_mandatory(genalloc *nocheck,int idsec,int idkey) bkey = -1 ; countidsec = 0 ; + switch(list[idsec].list[idkey].mandatory){ - case NEED: + case MANDATORY_NEED: for (unsigned int j = 0;j < genalloc_len(keynocheck,nocheck);j++) { if (genalloc_s(keynocheck,nocheck)[j].idsec == idsec) { countidsec++ ; - if (genalloc_s(keynocheck,nocheck)[j].idkey == get_enumbyid(list[idsec].list[idkey].name,key_enum_el)) + if (genalloc_s(keynocheck,nocheck)[j].idkey == get_enum_by_key(*list[idsec].list[idkey].name)) { count++ ; break ; @@ -354,23 +354,23 @@ int get_mandatory(genalloc *nocheck,int idsec,int idkey) } } if ((!count) && (countidsec)) - log_warn_return(LOG_EXIT_ZERO,"mandatory key: ",list[idsec].list[idkey].name," not found on section: ",get_keybyid(idsec)) ; + log_warn_return(LOG_EXIT_ZERO,"mandatory key: ",*list[idsec].list[idsec].name," not found on section: ",get_key_by_enum(ENUM_SECTION,idsec)) ; break ; - case CUSTOM: + case MANDATORY_CUSTOM: for (unsigned int j = 0;j < genalloc_len(keynocheck,nocheck);j++) { if (genalloc_s(keynocheck,nocheck)[j].idsec == idsec) { countidsec++ ; - if (genalloc_s(keynocheck,nocheck)[j].idkey == BUILD) + if (genalloc_s(keynocheck,nocheck)[j].idkey == KEY_BUILD) { bkey = j ; } - if (genalloc_s(keynocheck,nocheck)[j].idkey == get_enumbyid(list[idsec].list[idkey].name,key_enum_el)) + if (genalloc_s(keynocheck,nocheck)[j].idkey == get_enum_by_key(*list[idsec].list[idkey].name)) { count++ ; break ; @@ -379,22 +379,22 @@ int get_mandatory(genalloc *nocheck,int idsec,int idkey) } if ((!count) && (countidsec) && bkey>=0) { - if (obstr_equal(genalloc_s(keynocheck,nocheck)[bkey].val.s,get_keybyid(CUSTOM))) - log_warn_return(LOG_EXIT_ZERO,"custom build asked on section: ",get_keybyid(idsec)," -- key: ",list[idsec].list[idkey].name," must be set") ; + if (obstr_equal(genalloc_s(keynocheck,nocheck)[bkey].val.s,get_key_by_enum(ENUM_BUILD,BUILD_CUSTOM))) + log_warn_return(LOG_EXIT_ZERO,"custom build asked on section: ",get_key_by_enum(ENUM_SECTION,idsec)," -- key: ",*list[idsec].list[idkey].name," must be set") ; } break ; - case BUNDLE: + case MANDATORY_BUNDLE: for (unsigned int j = 0;j < genalloc_len(keynocheck,nocheck);j++) { if (genalloc_s(keynocheck,nocheck)[j].idsec == idsec) { countidsec++ ; - if (genalloc_s(keynocheck,nocheck)[j].idkey == TYPE) + if (genalloc_s(keynocheck,nocheck)[j].idkey == KEY_TYPE) { bkey = j; } - if (genalloc_s(keynocheck,nocheck)[j].idkey == get_enumbyid(list[idsec].list[idkey].name,key_enum_el)) + if (genalloc_s(keynocheck,nocheck)[j].idkey == get_enum_by_key(*list[idsec].list[idkey].name)) { count++ ; } @@ -402,22 +402,23 @@ int get_mandatory(genalloc *nocheck,int idsec,int idkey) } if ((!count) && (countidsec) && bkey>=0) { - if (obstr_equal(genalloc_s(keynocheck,nocheck)[bkey].val.s,get_keybyid(BUNDLE))) + if (obstr_equal(genalloc_s(keynocheck,nocheck)[bkey].val.s,get_key_by_enum(ENUM_TYPE,TYPE_BUNDLE))) log_warn_return(LOG_EXIT_ZERO,"bundle type detected -- key @contents must be set") ; } break ; /** only pass through here to check if flags env was asked * and the corresponding section exist*/ - case OPTS: + case MANDATORY_OPTS: + for (unsigned int j = 0;j < genalloc_len(keynocheck,nocheck);j++) { - if (genalloc_s(keynocheck,nocheck)[j].idsec == ENV) + if (genalloc_s(keynocheck,nocheck)[j].idsec == SECTION_ENV) count++ ; - if (genalloc_s(keynocheck,nocheck)[j].idsec == MAIN) + if (genalloc_s(keynocheck,nocheck)[j].idsec == SECTION_MAIN) { - if (genalloc_s(keynocheck,nocheck)[j].idkey == OPTIONS) + if (genalloc_s(keynocheck,nocheck)[j].idkey == KEY_OPTIONS) { bkey = j; } @@ -428,7 +429,7 @@ int get_mandatory(genalloc *nocheck,int idsec,int idkey) if (!sastr_clean_string(&sa,genalloc_s(keynocheck,nocheck)[bkey].val.s)) log_warnu_return(LOG_EXIT_ZERO,"clean value of: ",sa.s) ; - r = sastr_cmp(&sa,get_keybyid(ENVIR)) ; + r = sastr_cmp(&sa,get_key_by_enum(ENUM_OPTS,OPTS_ENVIR)) ; if ((r >= 0) && (!count)) log_warn_return(LOG_EXIT_ZERO,"options env was asked -- section environment must be set") ; } @@ -442,77 +443,61 @@ int get_mandatory(genalloc *nocheck,int idsec,int idkey) int nocheck_toservice(keynocheck *nocheck,int svtype, sv_alltype *service) { - static unsigned char const actions[5][4] = { - //c->CLASSIC, BUNDLE, LONGRUN, ONESHOT - { COMMON, COMMON, COMMON, COMMON }, // main - { EXECRUN, SKIP, EXECRUN, EXECUP }, // start - { EXECFINISH, SKIP, EXECFINISH, EXECDOWN }, // stop - { EXECLOG, SKIP, EXECLOG, SKIP }, // log - { ENVIRON, SKIP, ENVIRON, ENVIRON }, // env - } ; - static unsigned char const states[5][4] = { - //c->CLASSIC, BUNDLE, LONGRUN, ONESHOT - { START, SKIP, START, START }, // main - { STOP, SKIP, STOP, STOP }, // start - { LOG, SKIP, LOG, LOG }, // stop - { ENV, SKIP, ENV, ENV }, // log - { SKIP, SKIP, SKIP, SKIP }, // env - - } ; int p ; p = svtype ; - int state = 0 ; + int ste = 0 ; - while (state < 6) + while (ste < 6) { - unsigned int c = p - CLASSIC; - unsigned int action = actions[state][c] ; - state = states[state][c] ; + unsigned int c = p - 0 ; + + unsigned int action = actions[ste][c] ; + ste = states[ste][c] ; switch (action) { - case COMMON: + case ACTION_COMMON: if (!nocheck->idsec) if (!keep_common(service,nocheck,svtype)) return 0 ; break ; - case EXECRUN: + case ACTION_EXECRUN: if (nocheck->idsec == 1) if (!keep_runfinish(&service->type.classic_longrun.run,nocheck)) return 0 ; break ; - case EXECFINISH: + case ACTION_EXECFINISH: if (nocheck->idsec == 2) if (!keep_runfinish(&service->type.classic_longrun.finish,nocheck)) return 0 ; break ; - case EXECLOG: + case ACTION_EXECLOG: if (nocheck->idsec == 3) if (!keep_logger(&service->type.classic_longrun.log,nocheck)) return 0 ; break ; - case EXECUP: + case ACTION_EXECUP: if (nocheck->idsec == 1) if (!keep_runfinish(&service->type.oneshot.up,nocheck)) return 0 ; break ; - case EXECDOWN: + case ACTION_EXECDOWN: if (nocheck->idsec == 2) if (!keep_runfinish(&service->type.oneshot.down,nocheck)) return 0 ; break ; - case ENVIRON: + case ACTION_ENVIRON: if (nocheck->idsec == 4) if (!keep_common(service,nocheck,svtype)) return 0 ; break ; - case SKIP: + case ACTION_SKIP: break ; default: log_warn_return(LOG_EXIT_ZERO,"unknown action") ; } @@ -531,49 +516,49 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype) char *chval = nocheck->val.s ; switch(nocheck->idkey){ - case TYPE: + case KEY_TYPE: r = get_enum(chval,nocheck) ; - if (!r) return 0 ; + if (r == -1) return 0 ; service->cname.itype = r ; break ; - case NAME: + case KEY_NAME: service->cname.name = keep.len ; if (!stralloc_catb(&keep,chval,*chlen + 1)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; break ; - case DESCRIPTION: + case KEY_DESCRIPTION: service->cname.description = keep.len ; if (!stralloc_catb(&keep,chval,*chlen + 1)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; break ; - case OPTIONS: + case KEY_OPTIONS: if (!get_clean_val(nocheck)) return 0 ; for (;pos < *chlen; pos += strlen(chval + pos)+1) { r = get_enum(chval + pos,nocheck) ; - if (!r) return 0 ; - if (svtype == CLASSIC || svtype == LONGRUN) + if (r == -1) return 0 ; + if (svtype == TYPE_CLASSIC || svtype == TYPE_LONGRUN) { - if (r == LOGGER) + if (r == OPTS_LOGGER) service->opts[0] = 1 ;/**0 means not enabled*/ - else if (svtype == LONGRUN && r == PIPELINE) + else if (svtype == TYPE_LONGRUN && r == OPTS_PIPELINE) service->opts[1] = 1 ; } - if (r == ENVIR) + if (r == OPTS_ENVIR) service->opts[2] = 1 ; } break ; - case FLAGS: + case KEY_FLAGS: if (!get_clean_val(nocheck)) return 0 ; for (;pos < *chlen; pos += strlen(chval + pos)+1) { r = get_enum(chval + pos,nocheck) ; - if (!r) return 0 ; - if (r == DOWN) + if (r == -1) return 0 ; + if (r == FLAGS_DOWN) service->flags[0] = 1 ;/**0 means not enabled*/ - if (r == NOSETSID) + if (r == FLAGS_NOSETSID) service->flags[1] = 1 ; } break ; - case USER: + case KEY_USER: if (!get_clean_val(nocheck)) return 0 ; { uid_t owner = MYUID ; @@ -607,7 +592,7 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype) } } break ; - case HIERCOPY: + case KEY_HIERCOPY: if (!get_clean_val(nocheck)) return 0 ; { unsigned int idx = 0 ; @@ -621,9 +606,9 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype) } } break ; - case DEPENDS: - if ((service->cname.itype == CLASSIC) || (service->cname.itype == BUNDLE)) - log_warn_return(LOG_EXIT_ZERO,"key: ",get_keybyid(nocheck->idkey),": is not valid for type ",get_keybyid(service->cname.itype)) ; + case KEY_DEPENDS: + if ((service->cname.itype == TYPE_CLASSIC) || (service->cname.itype == TYPE_BUNDLE)) + log_warn_return(LOG_EXIT_ZERO,"key: ",get_key_by_enum(ENUM_KEY,nocheck->idkey),": is not valid for type ",get_key_by_enum(ENUM_TYPE,service->cname.itype)) ; if (!get_clean_val(nocheck)) return 0 ; service->cname.idga = deps.len ; @@ -633,9 +618,9 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype) service->cname.nga++ ; } break ; - case OPTSDEPS: - if ((service->cname.itype == CLASSIC) || (service->cname.itype == BUNDLE)) - log_warn_return(LOG_EXIT_ZERO,"key: ",get_keybyid(nocheck->idkey),": is not valid for type ",get_keybyid(service->cname.itype)) ; + case KEY_OPTSDEPS: + if ((service->cname.itype == TYPE_CLASSIC) || (service->cname.itype == TYPE_BUNDLE)) + log_warn_return(LOG_EXIT_ZERO,"key: ",get_key_by_enum(ENUM_KEY,nocheck->idkey),": is not valid for type ",get_key_by_enum(ENUM_TYPE,service->cname.itype)) ; if (!get_clean_val(nocheck)) return 0 ; service->cname.idopts = deps.len ; for (;pos < *chlen; pos += strlen(chval + pos)+1) @@ -644,9 +629,9 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype) service->cname.nopts++ ; } break ; - case EXTDEPS: - if ((service->cname.itype == CLASSIC) || (service->cname.itype == BUNDLE)) - log_warn_return(LOG_EXIT_ZERO,"key: ",get_keybyid(nocheck->idkey),": is not valid for type ",get_keybyid(service->cname.itype)) ; + case KEY_EXTDEPS: + if ((service->cname.itype == TYPE_CLASSIC) || (service->cname.itype == TYPE_BUNDLE)) + log_warn_return(LOG_EXIT_ZERO,"key: ",get_key_by_enum(ENUM_KEY,nocheck->idkey),": is not valid for type ",get_key_by_enum(ENUM_TYPE,service->cname.itype)) ; if (!get_clean_val(nocheck)) return 0 ; service->cname.idext = deps.len ; for (;pos < *chlen; pos += strlen(chval + pos)+1) @@ -655,9 +640,9 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype) service->cname.next++ ; } break ; - case CONTENTS: - if (service->cname.itype != BUNDLE) - log_warn_return(LOG_EXIT_ZERO,"key: ",get_keybyid(nocheck->idkey),": is not valid for type ",get_keybyid(service->cname.itype)) ; + case KEY_CONTENTS: + if (service->cname.itype != TYPE_BUNDLE) + log_warn_return(LOG_EXIT_ZERO,"key: ",get_key_by_enum(ENUM_KEY,nocheck->idkey),": is not valid for type ",get_key_by_enum(ENUM_TYPE,service->cname.itype)) ; if (!get_clean_val(nocheck)) return 0 ; service->cname.idga = deps.len ; @@ -667,19 +652,19 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype) service->cname.nga++ ; } break ; - case T_KILL: - case T_FINISH: - case T_UP: - case T_DOWN: + case KEY_T_KILL: + case KEY_T_FINISH: + case KEY_T_UP: + case KEY_T_DOWN: if (!get_timeout(nocheck,(uint32_t *)service->timeout)) return 0 ; break ; - case DEATH: + case KEY_DEATH: if (!get_uint(nocheck,&service->death)) return 0 ; break ; - case NOTIFY: + case KEY_NOTIFY: if (!get_uint(nocheck,&service->notification)) return 0 ; break ; - case ENVAL: + case KEY_ENVAL: if (!environ_clean_nline(&nocheck->val)) log_warnu_return(LOG_EXIT_ZERO,"clean environment value: ",chval) ; @@ -687,14 +672,14 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype) if (!stralloc_copy(&service->saenv,&nocheck->val)) log_warnu_return(LOG_EXIT_ZERO,"store environment value: ",chval) ; break ; - case SIGNAL: + case KEY_SIGNAL: if (!sig0_scan(chval,&service->signal)) { parse_err(3,nocheck) ; return 0 ; } break ; - default: log_warn_return(LOG_EXIT_ZERO,"unknown key: ",get_keybyid(nocheck->idkey)) ; + default: log_warn_return(LOG_EXIT_ZERO,"unknown key: ",get_key_by_enum(ENUM_KEY,nocheck->idkey)) ; } @@ -706,20 +691,20 @@ int keep_runfinish(sv_exec *exec,keynocheck *nocheck) int r = 0 ; size_t *chlen = &nocheck->val.len ; char *chval = nocheck->val.s ; - + switch(nocheck->idkey) { - case BUILD: + case KEY_BUILD: r = get_enum(chval,nocheck) ; - if (!r) return 0 ; + if (r == -1) return 0 ; exec->build = r ; break ; - case RUNAS: + case KEY_RUNAS: if (!check_valid_runas(nocheck)) return 0 ; exec->runas = keep.len ; if (!stralloc_catb(&keep,chval,*chlen + 1)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; break ; - case SHEBANG: + case KEY_SHEBANG: if (chval[0] != '/') { parse_err(4,nocheck) ; @@ -728,11 +713,11 @@ int keep_runfinish(sv_exec *exec,keynocheck *nocheck) exec->shebang = keep.len ; if (!stralloc_catb(&keep,chval,*chlen + 1)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; break ; - case EXEC: + case KEY_EXEC: exec->exec = keep.len ; if (!stralloc_catb(&keep,chval,*chlen + 1)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; break ; - default: log_warn_return(LOG_EXIT_ZERO,"unknown key: ",get_keybyid(nocheck->idkey)) ; + default: log_warn_return(LOG_EXIT_ZERO,"unknown key: ",get_key_by_enum(ENUM_KEY,nocheck->idkey)) ; } return 1 ; } @@ -744,13 +729,13 @@ int keep_logger(sv_execlog *log,keynocheck *nocheck) char *chval = nocheck->val.s ; switch(nocheck->idkey){ - case BUILD: + case KEY_BUILD: if (!keep_runfinish(&log->run,nocheck)) return 0 ; break ; - case RUNAS: + case KEY_RUNAS: if (!keep_runfinish(&log->run,nocheck)) return 0 ; break ; - case DEPENDS: + case KEY_DEPENDS: if (!get_clean_val(nocheck)) return 0 ; log->idga = deps.len ; for (;pos < *chlen; pos += strlen(chval + pos) + 1) @@ -759,17 +744,17 @@ int keep_logger(sv_execlog *log,keynocheck *nocheck) log->nga++ ; } break ; - case SHEBANG: + case KEY_SHEBANG: if (!keep_runfinish(&log->run,nocheck)) return 0 ; break ; - case EXEC: + case KEY_EXEC: if (!keep_runfinish(&log->run,nocheck)) return 0 ; break ; - case T_KILL: - case T_FINISH: + case KEY_T_KILL: + case KEY_T_FINISH: if (!get_timeout(nocheck,(uint32_t *)log->timeout)) return 0 ; break ; - case DESTINATION: + case KEY_DESTINATION: if (chval[0] != '/') { parse_err(4,nocheck) ; @@ -778,18 +763,18 @@ int keep_logger(sv_execlog *log,keynocheck *nocheck) log->destination = keep.len ; if (!stralloc_catb(&keep,chval,*chlen + 1)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; break ; - case BACKUP: + case KEY_BACKUP: if (!get_uint(nocheck,&log->backup)) return 0 ; break ; - case MAXSIZE: + case KEY_MAXSIZE: if (!get_uint(nocheck,&log->maxsize)) return 0 ; break ; - case TIMESTP: + case KEY_TIMESTP: r = get_enum(chval,nocheck) ; - if (!r) return 0 ; + if (r == -1) return 0 ; log->timestamp = r ; break ; - default: log_warn_return(LOG_EXIT_ZERO,"unknown key: ",get_keybyid(nocheck->idkey)) ; + default: log_warn_return(LOG_EXIT_ZERO,"unknown key: ",get_key_by_enum(ENUM_KEY,nocheck->idkey)) ; } return 1 ; } @@ -883,11 +868,11 @@ void section_setsa(int id, stralloc_ref *p,section_t *sa) { switch(id) { - case MAIN: *p = &sa->main ; break ; - case START: *p = &sa->start ; break ; - case STOP: *p = &sa->stop ; break ; - case LOG: *p = &sa->logger ; break ; - case ENV: *p = &sa->environment ; break ; + case SECTION_MAIN: *p = &sa->main ; break ; + case SECTION_START: *p = &sa->start ; break ; + case SECTION_STOP: *p = &sa->stop ; break ; + case SECTION_LOG: *p = &sa->logger ; break ; + case SECTION_ENV: *p = &sa->environment ; break ; default: break ; } } @@ -909,9 +894,9 @@ int section_get_skip(char const *s,size_t pos,int nline) return 1 ; } -int section_get_id(stralloc *secname, char const *string,size_t *pos,int *id) +int section_get_id(stralloc *secname, char const *str,size_t *pos,int *id) { - size_t len = strlen(string) ; + size_t len = strlen(str) ; size_t newpos = 0 ; (*id) = -1 ; @@ -919,42 +904,42 @@ int section_get_id(stralloc *secname, char const *string,size_t *pos,int *id) { secname->len = 0 ; newpos = 0 ; - if (mill_element(secname,string+(*pos),&MILL_GET_SECTION_NAME,&newpos) == -1) return 0 ; + if (mill_element(secname,str+(*pos),&MILL_GET_SECTION_NAME,&newpos) == -1) return 0 ; if (secname->len) { if (!stralloc_0(secname)) return 0 ; - (*id) = get_enumbyid(secname->s,key_enum_section_el) ; + (*id) = get_enum_by_key(secname->s) ; } (*pos) += newpos ; } return 1 ; } -int key_get_next_id(stralloc *sa, char const *string,size_t *pos) +int key_get_next_id(stralloc *sa, char const *str,size_t *pos) { - if (!string) return 0 ; + if (!str) return 0 ; int r = 0 ; - size_t newpos = 0, len = strlen(string) ; + size_t newpos = 0, len = strlen(str) ; stralloc kp = STRALLOC_ZERO ; wild_zero_all(&MILL_GET_AROBASE_KEY) ; wild_zero_all(&MILL_FIRST_BRACKET) ; int id = -1 ; - r = mill_element(&kp,string,&MILL_FIRST_BRACKET,&newpos) ; + r = mill_element(&kp,str,&MILL_FIRST_BRACKET,&newpos) ; if (r == -1 || !r) goto err ; *pos = newpos ; while (id == -1 && newpos < len) { kp.len = 0 ; - r = mill_element(&kp,string,&MILL_GET_AROBASE_KEY,&newpos) ; + r = mill_element(&kp,str,&MILL_GET_AROBASE_KEY,&newpos) ; if (r == -1) goto err ; if (!stralloc_0(&kp)) goto err ; - id = get_enumbyid(kp.s,key_enum_el) ; + id = get_enum_by_key(kp.s) ; //May confusing in case of instantiated service //if (id == -1 && kp.len > 1) log_warn("unknown key: ",kp.s,": at parenthesis parse") ; } - newpos = get_rlen_until(string,')',newpos) ; + newpos = get_rlen_until(str,')',newpos) ; if (newpos == -1) goto err ; - if (!stralloc_catb(sa,string+*pos,newpos - *pos)) goto err ; + if (!stralloc_catb(sa,str+*pos,newpos - *pos)) goto err ; *pos = newpos + 1 ; //+1 remove the last ')' stralloc_free(&kp) ; return 1 ; @@ -973,13 +958,13 @@ int get_clean_val(keynocheck *ch) return 1 ; } -int get_enum(char const *string, keynocheck *ch) +int get_enum(char const *str, keynocheck *ch) { - int r = get_enumbyid(string,key_enum_el) ; + int r = get_enum_by_key(str) ; if (r == -1) { parse_err(0,ch) ; - return 0 ; + return -1 ; } return r ; } @@ -987,10 +972,10 @@ int get_enum(char const *string, keynocheck *ch) int get_timeout(keynocheck *ch,uint32_t *ui) { int time = 0 ; - if (ch->idkey == T_KILL) time = 0 ; - else if (ch->idkey == T_FINISH) time = 1 ; - else if (ch->idkey == T_UP) time = 2 ; - else if (ch->idkey == T_DOWN) time = 3 ; + if (ch->idkey == KEY_T_KILL) time = 0 ; + else if (ch->idkey == KEY_T_FINISH) time = 1 ; + else if (ch->idkey == KEY_T_UP) time = 2 ; + else if (ch->idkey == KEY_T_DOWN) time = 3 ; if (scan_timeout(ch->val.s,ui,time) == -1) { parse_err(3,ch) ; @@ -1021,41 +1006,63 @@ int check_valid_runas(keynocheck *ch) return 1 ; } +int get_svtype(sv_alltype *sv_before, char const *contents) +{ + stralloc sa = STRALLOC_ZERO ; + + if (!auto_stra(&sa,contents)) goto err ; + + if (!environ_get_val_of_key(&sa,get_key_by_enum(ENUM_KEY,KEY_TYPE))) goto err ; + + if (!sastr_clean_element(&sa)) goto err ; + sv_before->cname.itype = get_enum_by_key(sa.s) ; + + if (sv_before->cname.itype == -1) goto err ; + + stralloc_free(&sa) ; + return 1 ; + err: + stralloc_free(&sa) ; + return 0 ; +} + void parse_err(int ierr,keynocheck *check) { int idsec = check->idsec ; int idkey = check->idkey ; + char const *section = get_key_by_enum(ENUM_SECTION,idsec) ; + char const *key = get_key_by_enum(ENUM_KEY,idkey) ; switch(ierr) { case 0: - log_warn("invalid value for key: ",get_keybyid(idkey),": in section: ",get_keybyid(idsec)) ; + log_warn("invalid value for key: ",key,": in section: ",section) ; break ; case 1: - log_warn("multiple definition of key: ",get_keybyid(idkey),": in section: ",get_keybyid(idsec)) ; + log_warn("multiple definition of key: ",key,": in section: ",section) ; break ; case 2: - log_warn("same value for key: ",get_keybyid(idkey),": in section: ",get_keybyid(idsec)) ; + log_warn("same value for key: ",key,": in section: ",section) ; break ; case 3: - log_warn("key: ",get_keybyid(idkey),": must be an integrer value in section: ",get_keybyid(idsec)) ; + log_warn("key: ",key,": must be an integrer value in section: ",section) ; break ; case 4: - log_warn("key: ",get_keybyid(idkey),": must be an absolute path in section: ",get_keybyid(idsec)) ; + log_warn("key: ",key,": must be an absolute path in section: ",section) ; break ; case 5: - log_warn("key: ",get_keybyid(idkey),": must be set in section: ",get_keybyid(idsec)) ; + log_warn("key: ",key,": must be set in section: ",section) ; break ; case 6: - log_warn("invalid format of key: ",get_keybyid(idkey),": in section: ",get_keybyid(idsec)) ; + log_warn("invalid format of key: ",key,": in section: ",section) ; break ; case 7: - log_warnu("parse key: ",get_keybyid(idkey),": in section: ",get_keybyid(idsec)) ; + log_warnu("parse key: ",key,": in section: ",section) ; break ; case 8: - log_warnu("clean value of key: ",get_keybyid(idkey),": in section: ",get_keybyid(idsec)) ; + log_warnu("clean value of key: ",key,": in section: ",section) ; break ; case 9: - log_warn("empty value of key: ",get_keybyid(idkey),": in section: ",get_keybyid(idsec)) ; + log_warn("empty value of key: ",key,": in section: ",section) ; break ; default: log_warn("unknown parse_err number") ; diff --git a/src/lib66/parser_write.c b/src/lib66/parser_write.c index 0f0f3473f7a3b2da76f0fa22fed6531c0c9037f0..e41bc374610d0ee1f61a02ad781f9639651dcd5a 100644 --- a/src/lib66/parser_write.c +++ b/src/lib66/parser_write.c @@ -60,7 +60,7 @@ int write_services(ssexec_t *info,sv_alltype *sv, char const *workdir, uint8_t f if (ss_resolve_check(workdir,name)) { if (!ss_resolve_read(&res,workdir,name)) log_dieusys(LOG_EXIT_SYS,"read resolve file of: ",name) ; - if (res.type != type && res.disen) log_die(LOG_EXIT_SYS,"Detection of incompatible type format for: ",name," -- current: ",get_keybyid(type)," previous: ",get_keybyid(res.type)) ; + if (res.type != type && res.disen) log_die(LOG_EXIT_SYS,"Detection of incompatible type format for: ",name," -- current: ",get_key_by_enum(ENUM_TYPE,type)," previous: ",get_key_by_enum(ENUM_TYPE,res.type)) ; } ss_resolve_free(&res) ; } @@ -70,7 +70,7 @@ int write_services(ssexec_t *info,sv_alltype *sv, char const *workdir, uint8_t f memcpy(wname,workdir,workdirlen) ; wnamelen = workdirlen ; - if (type == CLASSIC) + if (type == TYPE_CLASSIC) { memcpy(wname + wnamelen, SS_SVC, SS_SVC_LEN) ; memcpy(wname + wnamelen + SS_SVC_LEN, "/", 1) ; @@ -111,27 +111,27 @@ int write_services(ssexec_t *info,sv_alltype *sv, char const *workdir, uint8_t f switch(type) { - case CLASSIC: + case TYPE_CLASSIC: if (!write_classic(sv, wname, force, conf)) log_warnu_return(LOG_EXIT_ZERO,"write: ",wname) ; break ; - case LONGRUN: + case TYPE_LONGRUN: if (!write_longrun(sv, wname, force, conf)) log_warnu_return(LOG_EXIT_ZERO,"write: ",wname) ; break ; - case ONESHOT: + case TYPE_ONESHOT: if (!write_oneshot(sv, wname, conf)) log_warnu_return(LOG_EXIT_ZERO,"write: ",wname) ; break ; - case BUNDLE: + case TYPE_BUNDLE: if (!write_bundle(sv, wname)) log_warnu_return(LOG_EXIT_ZERO,"write: ",wname) ; break ; - default: log_warn_return(LOG_EXIT_ZERO,"unkown type: ", get_keybyid(sv->cname.itype)) ; + default: log_warn_return(LOG_EXIT_ZERO,"unkown type: ", get_key_by_enum(ENUM_TYPE,sv->cname.itype)) ; } return 1 ; @@ -322,7 +322,7 @@ int write_logger(sv_alltype *sv, sv_execlog *log,char const *name, char const *d log_warnu_return(LOG_EXIT_ZERO,"write: ",ddst.s,"/dependencies") ; } - if (sv->cname.itype > CLASSIC) + if (sv->cname.itype > TYPE_CLASSIC) { if (!file_write_unsafe(ddst.s,"type","longrun",7)) log_warnusys_return(LOG_EXIT_ZERO,"write: ",ddst.s,"/type") ; @@ -331,11 +331,11 @@ int write_logger(sv_alltype *sv, sv_execlog *log,char const *name, char const *d /**logger section may not be set * pick auto by default*/ if (!logbuild) - logbuild=AUTO ; + logbuild=BUILD_AUTO ; switch(logbuild) { - case AUTO: + case BUILD_AUTO: /** uid */ if (!stralloc_cats(&shebang, "#!" EXECLINE_SHEBANGPREFIX "execlineb -P\n") || !stralloc_0(&shebang)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; @@ -369,8 +369,8 @@ int write_logger(sv_alltype *sv, sv_execlog *log,char const *name, char const *d } if (!stralloc_0(&destlog)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; - if (log->timestamp == ISO) timestamp = "T" ; - else if (log->timestamp == NONE) timestamp = "" ; + if (log->timestamp == TIME_ISO) timestamp = "T" ; + else if (log->timestamp == TIME_NONE) timestamp = "" ; if (log->backup > 0) { @@ -394,7 +394,7 @@ int write_logger(sv_alltype *sv, sv_execlog *log,char const *name, char const *d !stralloc_cats(&exec,S6_BINPREFIX "s6-log -d3 " "n") || !stralloc_cats(&exec,pback) || !stralloc_cats(&exec," ")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; - if (log->timestamp < NONE) + if (log->timestamp < TIME_NONE) { if (!stralloc_cats(&exec,timestamp) || !stralloc_cats(&exec," ")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; @@ -413,7 +413,7 @@ int write_logger(sv_alltype *sv, sv_execlog *log,char const *name, char const *d if (!file_write_unsafe(ddst.s,SS_NOTIFICATION,"3\n",2)) log_warnusys_return(LOG_EXIT_ZERO,"write: ",ddst.s,"/" SS_NOTIFICATION) ; - if (sv->cname.itype == CLASSIC) + if (sv->cname.itype == TYPE_CLASSIC) { ddst.len-- ; if (!stralloc_cats(&ddst,"/run") || @@ -423,11 +423,11 @@ int write_logger(sv_alltype *sv, sv_execlog *log,char const *name, char const *d log_warnusys_return(LOG_EXIT_ZERO,"chmod ", ddst.s) ; } break; - case CUSTOM: + case BUILD_CUSTOM: if (!write_exec(sv, &log->run,"run",ddst.s,mode)) log_warnu_return(LOG_EXIT_ZERO,"write: ",ddst.s,"/run") ; break; - default: log_warn_return(LOG_EXIT_ZERO,"unknown build value: ",get_keybyid(logbuild)) ; + default: log_warn_return(LOG_EXIT_ZERO,"unknown build value: ",get_key_by_enum(ENUM_BUILD,logbuild)) ; } r = scan_mode(destlog.s,S_IFDIR) ; @@ -476,12 +476,12 @@ int write_consprod(sv_alltype *sv,char const *prodname,char const *consname,char char pipefile[consdstlen + 1 + consnamelen + 1 + 1] ; /**producer-for*/ - if (!file_write_unsafe(consfile,get_keybyid(CONSUMER),prodname,strlen(prodname))) - log_warnu_return(LOG_EXIT_ZERO,"write: ",consfile,get_keybyid(CONSUMER)) ; + if (!file_write_unsafe(consfile,get_key_by_enum(ENUM_LOGOPTS,LOGOPTS_CONSUMER),prodname,strlen(prodname))) + log_warnu_return(LOG_EXIT_ZERO,"write: ",consfile,get_key_by_enum(ENUM_LOGOPTS,LOGOPTS_CONSUMER)) ; /**consumer-for*/ - if (!file_write_unsafe(prodfile,get_keybyid(PRODUCER),consname,strlen(consname))) - log_warnu_return(LOG_EXIT_ZERO,"write: ",prodfile,get_keybyid(PRODUCER)) ; + if (!file_write_unsafe(prodfile,get_key_by_enum(ENUM_LOGOPTS,LOGOPTS_PRODUCER),consname,strlen(consname))) + log_warnu_return(LOG_EXIT_ZERO,"write: ",prodfile,get_key_by_enum(ENUM_LOGOPTS,LOGOPTS_PRODUCER)) ; /**pipeline**/ if (sv->opts[1]) @@ -496,8 +496,8 @@ int write_consprod(sv_alltype *sv,char const *prodname,char const *consname,char memcpy(pipename,deps.s+sv->pipeline,len) ; pipename[len] = 0 ; - if (!file_write_unsafe(pipefile,PIPELINE_NAME,pipename,len)) - log_warnu_return(LOG_EXIT_ZERO,"write: ",pipefile,PIPELINE_NAME) ; + if (!file_write_unsafe(pipefile,get_key_by_enum(ENUM_LOGOPTS,LOGOPTS_PIPE),pipename,len)) + log_warnu_return(LOG_EXIT_ZERO,"write: ",pipefile,get_key_by_enum(ENUM_LOGOPTS,LOGOPTS_PIPE)) ; } return 1 ; @@ -552,9 +552,9 @@ int write_common(sv_alltype *sv, char const *dst,uint8_t conf) } /** type file*/ - if (sv->cname.itype > CLASSIC) + if (sv->cname.itype > TYPE_CLASSIC) { - if (!file_write_unsafe(dst,"type",get_keybyid(sv->cname.itype),strlen(get_keybyid(sv->cname.itype)))) + if (!file_write_unsafe(dst,"type",get_key_by_enum(ENUM_TYPE,sv->cname.itype),strlen(get_key_by_enum(ENUM_TYPE,sv->cname.itype)))) log_warnusys_return(LOG_EXIT_ZERO,"write type file") ; } /** max-death-tally */ @@ -592,6 +592,7 @@ int write_common(sv_alltype *sv, char const *dst,uint8_t conf) stralloc salist = STRALLOC_ZERO ; //merge config from upstream to sysadmin if (!file_readputsa(&salist,dst,name)) log_warnusys_return(LOG_EXIT_ZERO,"read: ",dst,name) ; + if (!env_merge_conf(dst,name,&salist,&sv->saenv,conf)) log_warnu_return(LOG_EXIT_ZERO,"merge environment file") ; @@ -649,7 +650,7 @@ int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,mo switch (exec->build) { - case AUTO: + case BUILD_AUTO: /** uid */ if ((!owner && exec->runas)) { @@ -658,7 +659,7 @@ int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,mo !stralloc_cats(&ui,"\n")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; } /** environment */ - if (sv->opts[2] && (exec->build == AUTO)) + if (sv->opts[2] && (exec->build == BUILD_AUTO)) { if (!stralloc_cats(&env,SS_BINPREFIX "execl-envfile ") || !stralloc_cats(&env,keep.s + sv->srconf) || @@ -666,13 +667,13 @@ int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,mo !stralloc_cats(&env,"\n")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; } /** shebang */ - if (type != ONESHOT) + if (type != TYPE_ONESHOT) { if (!stralloc_cats(&shebang, "#!" EXECLINE_SHEBANGPREFIX "execlineb -P\n")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; } break ; - case CUSTOM: - if (type != ONESHOT) + case BUILD_CUSTOM: + if (type != TYPE_ONESHOT) { if (!stralloc_cats(&shebang, "#!") || !stralloc_cats(&shebang, keep.s+exec->shebang) || @@ -684,7 +685,7 @@ int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,mo !stralloc_cats(&shebang," \"")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; } break ; - default: log_warn(LOG_EXIT_ZERO,"unknown ", get_keybyid(exec->build)," build type") ; + default: log_warn(LOG_EXIT_ZERO,"unknown ", get_key_by_enum(ENUM_BUILD,exec->build)," build type") ; break ; } /** close uid */ @@ -695,7 +696,7 @@ int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,mo if (!stralloc_0(&shebang)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; /** close command */ if (!stralloc_cats(&runuser, keep.s+exec->exec)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; - if ((type == ONESHOT) && (exec->build == CUSTOM)) + if ((type == TYPE_ONESHOT) && (exec->build == BUILD_CUSTOM)) { if (!stralloc_cats(&runuser," \"")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; } @@ -704,7 +705,7 @@ int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,mo /** build the file*/ if (!stralloc_cats(&execute,shebang.s)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; - if (exec->build == AUTO) + if (exec->build == BUILD_AUTO) { if (!stralloc_cats(&execute,EXECLINE_BINPREFIX "fdmove -c 2 1\n")) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; } diff --git a/src/lib66/rc_manage.c b/src/lib66/rc_manage.c index 4331e94b31e787c3a9ce7fb930ed7f6e8eadb2ee..9cf1517db76365714b74dca8aa608ccf7cd95313 100644 --- a/src/lib66/rc_manage.c +++ b/src/lib66/rc_manage.c @@ -58,7 +58,7 @@ int rc_manage(ssexec_t *info,genalloc *ga) memcpy(live + info->livetree.len + 1,info->treename.s,info->treename.len) ; live[info->livetree.len + 1 + info->treename.len] = 0 ; - if (!ss_resolve_pointo(&sares,info,LONGRUN,SS_RESOLVE_SRC)) + if (!ss_resolve_pointo(&sares,info,TYPE_LONGRUN,SS_RESOLVE_SRC)) { log_warnusys("set revolve pointer to source") ; goto err ; @@ -77,7 +77,7 @@ int rc_manage(ssexec_t *info,genalloc *ga) char const *runat = string + genalloc_s(ss_resolve_t,ga)[i].runat ; int type = genalloc_s(ss_resolve_t,ga)[i].type ; //do not try to copy a bundle or oneshot, this is already done. - if (type != LONGRUN) continue ; + if (type != TYPE_LONGRUN) continue ; sares.len = newlen ; if (!stralloc_cats(&sares,name)) goto err ; if (!stralloc_0(&sares)) goto err ; diff --git a/src/lib66/resolve.c b/src/lib66/resolve.c index 8714e6f406a011eb27bd75d8141cc3d29dee2792..e307b332566fb0c00bc12fb928509655caa27a56 100644 --- a/src/lib66/resolve.c +++ b/src/lib66/resolve.c @@ -96,7 +96,7 @@ int ss_resolve_pointo(stralloc *sa,ssexec_t *info,unsigned int type, unsigned in if (type && where) { - if (type == CLASSIC) + if (type == TYPE_CLASSIC) { if (!stralloc_cats(&tmp,SS_SVC)) goto err ; } @@ -536,7 +536,7 @@ int ss_resolve_setlognwrite(ss_resolve_t *sv, char const *dst,ssexec_t *info) size_t runlen = strlen(string + sv->runat) ; char live[runlen + 4 + 1] ; memcpy(live,string + sv->runat,runlen) ; - if (sv->type >= BUNDLE) + if (sv->type >= TYPE_BUNDLE) { memcpy(live + runlen,"-log",4) ; }else memcpy(live + runlen,"/log",4) ; @@ -631,7 +631,7 @@ int ss_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *dst) if (services->flags[0]) res.down = 1 ; res.disen = 1 ; - if (res.type == CLASSIC) + if (res.type == TYPE_CLASSIC) { memcpy(stmp,info->scandir.s,info->scandir.len) ; @@ -640,7 +640,7 @@ int ss_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *dst) stmp[info->scandir.len + 1 + namelen] = 0 ; res.runat = ss_resolve_add_string(&res,stmp) ; } - else if (res.type >= BUNDLE) + else if (res.type >= TYPE_BUNDLE) { memcpy(stmp,info->livetree.s,info->livetree.len) ; stmp[info->livetree.len] = '/' ; @@ -707,7 +707,7 @@ int ss_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *dst) logname[namelen + SS_LOG_SUFFIX_LEN] = 0 ; memcpy(logreal,name,namelen) ; - if (res.type == CLASSIC) + if (res.type == TYPE_CLASSIC) { memcpy(logreal + namelen,"/log",SS_LOG_SUFFIX_LEN) ; } @@ -721,8 +721,8 @@ int ss_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *dst) if (!stralloc_cats(&ndeps,res.sa.s + res.logger)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; if (!stralloc_0(&ndeps)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ; res.deps = ss_resolve_add_string(&res,ndeps.s) ; - if (res.type == CLASSIC) res.ndeps = 1 ; - else if (res.type == LONGRUN) res.ndeps += 1 ; + if (res.type == TYPE_CLASSIC) res.ndeps = 1 ; + else if (res.type == TYPE_LONGRUN) res.ndeps += 1 ; // destination of the logger if (!services->type.classic_longrun.log.destination) { @@ -880,7 +880,7 @@ int ss_resolve_add_rdeps(genalloc *tokeep, ss_resolve_t *res, char const *src) memcpy(s + srclen,SS_RESOLVE,SS_RESOLVE_LEN) ; s[srclen + SS_RESOLVE_LEN] = 0 ; - if (res->type == CLASSIC) type = 0 ; + if (res->type == TYPE_CLASSIC) type = 0 ; else type = 1 ; if (!sastr_dir_get(&nsv,s,SS_MASTER+1,S_IFREG)) goto err ; @@ -889,7 +889,7 @@ int ss_resolve_add_rdeps(genalloc *tokeep, ss_resolve_t *res, char const *src) { if (!ss_resolve_append(tokeep,res)) goto err ; } - if (res->type == BUNDLE && res->ndeps) + if (res->type == TYPE_BUNDLE && res->ndeps) { if (!sastr_clean_string(&tmp,res->sa.s + res->deps)) goto err ; ss_resolve_t dres = RESOLVE_ZERO ; @@ -917,7 +917,7 @@ int ss_resolve_add_rdeps(genalloc *tokeep, ss_resolve_t *res, char const *src) if (!ss_resolve_read(&dres,src,dname)) goto err ; - if (dres.type == CLASSIC) dtype = 0 ; + if (dres.type == TYPE_CLASSIC) dtype = 0 ; else dtype = 1 ; if (ss_state_check(dres.sa.s + dres.state,dname)) @@ -926,10 +926,10 @@ int ss_resolve_add_rdeps(genalloc *tokeep, ss_resolve_t *res, char const *src) if (dtype != type || (!dres.disen && !sta.unsupervise)){ ss_resolve_free(&dres) ; continue ; } } else if (dtype != type || (!dres.disen)){ ss_resolve_free(&dres) ; continue ; } - if (dres.type == BUNDLE && !dres.ndeps){ ss_resolve_free(&dres) ; continue ; } + if (dres.type == TYPE_BUNDLE && !dres.ndeps){ ss_resolve_free(&dres) ; continue ; } if (!ss_resolve_cmp(tokeep,dname)) { - if (dres.ndeps)// || (dres.type == BUNDLE && dres.ndeps) || ) + if (dres.ndeps)// || (dres.type == TYPE_BUNDLE && dres.ndeps) || ) { if (!sastr_clean_string(&tmp,dres.sa.s + dres.deps)) goto err ; for (c = 0 ; c < tmp.len ; c += strlen(tmp.s + c) + 1) @@ -1147,7 +1147,7 @@ int ss_resolve_write_master(ssexec_t *info,ss_resolve_graph_t *graph,char const res.treename = ss_resolve_add_string(&res,info->treename.s) ; res.tree = ss_resolve_add_string(&res,info->tree.s) ; res.live = ss_resolve_add_string(&res,info->live.s) ; - res.type = BUNDLE ; + res.type = TYPE_BUNDLE ; res.deps = ss_resolve_add_string(&res,inres.s) ; res.ndeps = genalloc_len(ss_resolve_t,&graph->sorted) ; res.runat = ss_resolve_add_string(&res,runat) ; diff --git a/src/lib66/ss_info_utils.c b/src/lib66/ss_info_utils.c index 729203ecd6db4acd051cf7973ee49776fdbcbd2b..b7eba041d245425ce88569d3fdc68282b1c7265e 100644 --- a/src/lib66/ss_info_utils.c +++ b/src/lib66/ss_info_utils.c @@ -195,7 +195,7 @@ void info_graph_display(ss_resolve_t *res, depth_t *depth, int last, int padding { s6_svstatus_t status = S6_SVSTATUS_ZERO ; char *name = res->sa.s + res->name ; - if (res->type == CLASSIC || res->type == LONGRUN) + if (res->type == TYPE_CLASSIC || res->type == TYPE_LONGRUN) { s6_svstatus_read(res->sa.s + res->runat ,&status) ; } @@ -216,7 +216,7 @@ void info_graph_display(ss_resolve_t *res, depth_t *depth, int last, int padding depth = depth->next ; } - if (!bprintf(buffer_1,"%*s%*s%s(%s%i%s,%s%s%s,%s) %s",level == 1 ? padding : 0,"", style->indent * (depth->level - level), "", tip, status.pid ? log_color->valid : log_color->off,status.pid ? status.pid : 0,log_color->off, res->disen ? log_color->off : log_color->error, res->disen ? "Enabled" : "Disabled",log_color->off,get_keybyid(res->type), name)) return ; + if (!bprintf(buffer_1,"%*s%*s%s(%s%i%s,%s%s%s,%s) %s",level == 1 ? padding : 0,"", style->indent * (depth->level - level), "", tip, status.pid ? log_color->valid : log_color->off,status.pid ? status.pid : 0,log_color->off, res->disen ? log_color->off : log_color->error, res->disen ? "Enabled" : "Disabled",log_color->off,get_key_by_enum(ENUM_TYPE,res->type), name)) return ; if (buffer_putsflush(buffer_1,"\n") < 0) return ; } diff --git a/src/lib66/ssexec_dbctl.c b/src/lib66/ssexec_dbctl.c index 87e045f610f7bdb5f9e14b970b6ab3008ab86e88..d8f49ba1017d3cfbd9cbbf17436a97aa129d74db 100644 --- a/src/lib66/ssexec_dbctl.c +++ b/src/lib66/ssexec_dbctl.c @@ -57,7 +57,7 @@ static void rebuild_list(ss_resolve_graph_t *graph,ssexec_t *info, int what) if (sta.init) log_die(LOG_EXIT_SYS,"unitialized service: ",name) ; int type = genalloc_s(ss_resolve_t,&graph->sorted)[i].type ; - if (type == LONGRUN && genalloc_s(ss_resolve_t,&graph->sorted)[i].disen) + if (type == TYPE_LONGRUN && genalloc_s(ss_resolve_t,&graph->sorted)[i].disen) { if (!s6_svstatus_read(runat,&status)) log_dieusys(LOG_EXIT_SYS,"read status of: ",runat) ; isup = status.pid && !status.flagfinishing ; @@ -113,7 +113,7 @@ static int check_status(genalloc *gares,ssexec_t *info,int signal) /** do not touch the Master resolve file*/ if (obstr_equal(name,SS_MASTER + 1)) continue ; /** only check longrun service */ - if (pres->type == LONGRUN) + if (pres->type == TYPE_LONGRUN) { if (!s6_svstatus_read(pres->sa.s + pres->runat,&status)) log_dieusys(LOG_EXIT_SYS,"read status of: ",pres->sa.s + pres->runat) ; else if (up) @@ -151,7 +151,7 @@ static int check_status(genalloc *gares,ssexec_t *info,int signal) ss_state_setflag(&sta,SS_FLAGS_RELOAD,SS_FLAGS_FALSE) ; ss_state_setflag(&sta,SS_FLAGS_INIT,SS_FLAGS_FALSE) ; // ss_state_setflag(&sta,SS_FLAGS_UNSUPERVISE,SS_FLAGS_FALSE) ; - if (pres->type == BUNDLE || pres->type == ONESHOT) + if (pres->type == TYPE_BUNDLE || pres->type == TYPE_ONESHOT) { if (up) ss_state_setflag(&sta,SS_FLAGS_STATE,SS_FLAGS_TRUE) ; else ss_state_setflag(&sta,SS_FLAGS_STATE,SS_FLAGS_FALSE) ; @@ -278,7 +278,7 @@ int ssexec_dbctl(int argc, char const *const *argv,char const *const *envp,ssexe char const *name = *argv ; if (!ss_resolve_check(sares.s,name)) log_diesys(LOG_EXIT_SYS,"unknown service: ",name) ; if (!ss_resolve_read(&res,sares.s,name)) log_dieusys(LOG_EXIT_SYS,"read resolve file of: ",name) ; - if (res.type == CLASSIC) log_die(LOG_EXIT_SYS,name," has type classic") ; + if (res.type == TYPE_CLASSIC) log_die(LOG_EXIT_SYS,name," has type classic") ; if (!ss_resolve_append(&gares,&res)) log_dieusys(LOG_EXIT_SYS,"append services selection with: ", name) ; } } diff --git a/src/lib66/ssexec_disable.c b/src/lib66/ssexec_disable.c index bc5fce669066bcb72c60e2d0f33dba9bb698ff50..e8b5c72da186760c9d3dc79694ecdb0724cd02fd 100644 --- a/src/lib66/ssexec_disable.c +++ b/src/lib66/ssexec_disable.c @@ -57,7 +57,7 @@ int svc_remove(genalloc *tostop,ss_resolve_t *res, char const *src,ssexec_t *inf goto err ; } if (!stralloc_cats(&dst,src)) goto err ; - if (cp.type == CLASSIC) + if (cp.type == TYPE_CLASSIC) { if (!stralloc_cats(&dst,SS_SVC)) goto err ; } @@ -199,7 +199,7 @@ int ssexec_disable(int argc, char const *const *argv,char const *const *envp,sse if (!svc_remove(&tostop,pres,workdir.s,info)) log_dieusys_nclean(LOG_EXIT_SYS,&cleanup,"remove",name," directory service") ; - if (res.type == CLASSIC) nclassic++ ; + if (res.type == TYPE_CLASSIC) nclassic++ ; else nlongrun++ ; } diff --git a/src/lib66/ssexec_enable.c b/src/lib66/ssexec_enable.c index 027e8d485969b45d2229a466abf0ef7fadfa6d8c..ab1523924331bee66c20f2890ecb799fcbf0feb8 100644 --- a/src/lib66/ssexec_enable.c +++ b/src/lib66/ssexec_enable.c @@ -105,7 +105,7 @@ void start_write(stralloc *tostart,unsigned int *nclassic,unsigned int *nlongrun log_trace("Service written successfully: ", name) ; if (sastr_cmp(tostart,name) == -1) { - if (sv->cname.itype == CLASSIC) (*nclassic)++ ; + if (sv->cname.itype == TYPE_CLASSIC) (*nclassic)++ ; else (*nlongrun)++ ; if (!sastr_add_string(tostart,name)) log_dieusys_nclean(LOG_EXIT_SYS,&cleanup,"stralloc") ; diff --git a/src/lib66/ssexec_start.c b/src/lib66/ssexec_start.c index 66d6e1e2ca5844e5803f83813ce74049e24767d1..b67210ac21e0cf5fc7afebc494b5f2f07e489631 100644 --- a/src/lib66/ssexec_start.c +++ b/src/lib66/ssexec_start.c @@ -49,7 +49,7 @@ int svc_sanitize(ssexec_t *info, char const *const *envp) unsigned int reverse = 0 ; int r ; stralloc sares = STRALLOC_ZERO ; - if (!ss_resolve_pointo(&sares,info,CLASSIC,SS_RESOLVE_SRC)) + if (!ss_resolve_pointo(&sares,info,TYPE_CLASSIC,SS_RESOLVE_SRC)) { log_warnu("set revolve pointer to source") ; goto err; @@ -284,7 +284,7 @@ int ssexec_start(int argc, char const *const *argv,char const *const *envp,ssexe if (sta.init){ reload = 0 ; init = 1 ; } append: - if (pres->type == CLASSIC) + if (pres->type == TYPE_CLASSIC) { if (reload) { diff --git a/src/lib66/ssexec_stop.c b/src/lib66/ssexec_stop.c index f53580915c31f654610a6b250f1e4f21d03ca19b..e883b460015090c3dbb0cf3fc37f253379cb3e4f 100644 --- a/src/lib66/ssexec_stop.c +++ b/src/lib66/ssexec_stop.c @@ -189,7 +189,7 @@ int ssexec_stop(int argc, char const *const *argv,char const *const *envp,ssexec if (UNSUP) unsup = 1 ; if (sta.unsupervise) unsup = 1 ; append: - if (pres->type == CLASSIC) + if (pres->type == TYPE_CLASSIC) { if (unsup) { diff --git a/src/lib66/ssexec_svctl.c b/src/lib66/ssexec_svctl.c index f8bc86f665fefcb91905018c36996dcdbe108536..58f562fe2c3dabe35f30832138bb6d4ebb6e2f4d 100644 --- a/src/lib66/ssexec_svctl.c +++ b/src/lib66/ssexec_svctl.c @@ -98,7 +98,7 @@ int handle_signal_svc(ss_resolve_sig_t *sv_signal) else return 0 ; } -static unsigned char const actions[9][9] = +static unsigned char const svctl_actions[9][9] = { //signal receive: // c->u U r/u R/U d D x O s @@ -170,7 +170,7 @@ int handle_case(stralloc *sa, ss_resolve_sig_t *svc) for (;i < sa->len ; i++) { p = chtenum[(unsigned char)sa->s[i]] ; - unsigned char action = actions[state][p] ; + unsigned char action = svctl_actions[state][p] ; switch (action) { @@ -516,7 +516,7 @@ int ssexec_svctl(int argc, char const *const *argv,char const *const *envp,ssexe logname = get_rstrlen_until(name,SS_LOG_SUFFIX) ; if (!ss_resolve_check(sares.s,name)) log_diesys(LOG_EXIT_SYS,"unknown service: ",name) ; if (!ss_resolve_read(&res,sares.s,name)) log_dieusys(LOG_EXIT_SYS,"read resolve file of: ",name) ; - if (res.type >= BUNDLE) log_die(LOG_EXIT_SYS,name," has type ",get_keybyid(res.type)) ; + if (res.type >= TYPE_BUNDLE) log_die(LOG_EXIT_SYS,name," has type ",get_key_by_enum(ENUM_TYPE,res.type)) ; if (SIGNAL == SIGR && logname < 0) reverse = 1 ; if (!ss_resolve_graph_build(&graph,&res,sares.s,reverse)) log_dieusys(LOG_EXIT_SYS,"build services graph") ; } diff --git a/src/lib66/svc_switch_to.c b/src/lib66/svc_switch_to.c index 3339cb34c4cf2ae99df497ce78ea17054f596523..565cc531dfbad1e2f6de48dbf9e5105b31ed0b05 100644 --- a/src/lib66/svc_switch_to.c +++ b/src/lib66/svc_switch_to.c @@ -31,7 +31,7 @@ int svc_switch_to(ssexec_t *info,unsigned int where) int r ; char type[UINT_FMT] ; - size_t typelen = uint_fmt(type, CLASSIC) ; + size_t typelen = uint_fmt(type, TYPE_CLASSIC) ; type[typelen] = 0 ; size_t cmdlen ; char cmd[typelen + 6 + 1] ; @@ -49,7 +49,7 @@ int svc_switch_to(ssexec_t *info,unsigned int where) if (!r && where) { log_trace("make a backup of svc service for: ",info->treename.s) ; - if (!backup_make_new(info,CLASSIC)) + if (!backup_make_new(info,TYPE_CLASSIC)) log_warnusys_return(LOG_EXIT_ZERO,"make a backup of svc service for: ",info->treename.s) ; log_trace("switch svc symlink of tree: ",info->treename.s," to backup") ; @@ -73,7 +73,7 @@ int svc_switch_to(ssexec_t *info,unsigned int where) } log_trace("make a backup of svc service for: ",info->treename.s) ; - if (!backup_make_new(info,CLASSIC)) + if (!backup_make_new(info,TYPE_CLASSIC)) log_warnusys_return(LOG_EXIT_ZERO,"make a backup of svc service for: ",info->treename.s) ; } return 1 ; diff --git a/src/lib66/tree_copy_tmp.c b/src/lib66/tree_copy_tmp.c index e4911e54cd562b686728a14582b6a24bfa518333..0088a58df4d7b61fd3664466f7bd318b8cc834ec 100644 --- a/src/lib66/tree_copy_tmp.c +++ b/src/lib66/tree_copy_tmp.c @@ -65,12 +65,12 @@ int tree_copy_tmp(char const *workdir, ssexec_t *info) /** svc */ if (rm_rf(svdir) < 0) { - if (!ss_resolve_pointo(&saresolve,info,CLASSIC,SS_RESOLVE_SRC)) + if (!ss_resolve_pointo(&saresolve,info,TYPE_CLASSIC,SS_RESOLVE_SRC)) { err(&e,0,saresolve.s,swap.s,svdir) ; goto err ; } - if (!ss_resolve_pointo(&swap,info,CLASSIC,SS_RESOLVE_BACK)) + if (!ss_resolve_pointo(&swap,info,TYPE_CLASSIC,SS_RESOLVE_BACK)) { err(&e,1,saresolve.s,swap.s,svdir) ; goto err ; @@ -89,12 +89,12 @@ int tree_copy_tmp(char const *workdir, ssexec_t *info) svdir[svdirlen + SS_DB_LEN] = 0 ; if (rm_rf(svdir) < 0) { - if (!ss_resolve_pointo(&saresolve,info,LONGRUN,SS_RESOLVE_SRC)) + if (!ss_resolve_pointo(&saresolve,info,TYPE_LONGRUN,SS_RESOLVE_SRC)) { err(&e,0,saresolve.s,swap.s,svdir) ; goto err ; } - if (!ss_resolve_pointo(&swap,info,LONGRUN,SS_RESOLVE_BACK)) + if (!ss_resolve_pointo(&swap,info,TYPE_LONGRUN,SS_RESOLVE_BACK)) { err(&e,1,saresolve.s,swap.s,svdir) ; goto err ;