Browse Source

The kentry_t is not constant now.

It's necessary to store udata within kentry_t structure.
Serj Kalichev 4 months ago
parent
commit
8b9f3d1508

+ 2 - 2
klish/kcontext.h

@@ -114,7 +114,7 @@ int kcontext_printf(const kcontext_t *context, const char *fmt, ...);
 
 // Wrappers
 kparg_t *kcontext_candidate_parg(const kcontext_t *context);
-const kentry_t *kcontext_candidate_entry(const kcontext_t *context);
+kentry_t *kcontext_candidate_entry(const kcontext_t *context);
 const char *kcontext_candidate_value(const kcontext_t *context);
 const kaction_t *kcontext_action(const kcontext_t *context);
 const char *kcontext_script(const kcontext_t *context);
@@ -122,7 +122,7 @@ bool_t kcontext_named_udata_new(kcontext_t *context,
 	const char *name, void *data, kudata_data_free_fn free_fn);
 void *kcontext_named_udata(const kcontext_t *context, const char *name);
 void *kcontext_udata(const kcontext_t *context);
-const kentry_t *kcontext_command(const kcontext_t *context);
+kentry_t *kcontext_command(const kcontext_t *context);
 
 
 C_DECL_END

+ 5 - 5
klish/kpargv.h

@@ -43,10 +43,10 @@ C_DECL_BEGIN
 
 // Parg
 
-kparg_t *kparg_new(const kentry_t *entry, const char *value);
+kparg_t *kparg_new(kentry_t *entry, const char *value);
 void kparg_free(kparg_t *parg);
 
-const kentry_t *kparg_entry(const kparg_t *parg);
+kentry_t *kparg_entry(const kparg_t *parg);
 bool_t kparg_set_value(kparg_t *parg, const char *value);
 const char *kparg_value(const kparg_t *parg);
 
@@ -64,8 +64,8 @@ const char *kpargv_status_str(const kpargv_t *pargv);
 size_t kpargv_level(const kpargv_t *pargv);
 bool_t kpargv_set_level(kpargv_t *pargv, size_t level);
 // Command
-const kentry_t *kpargv_command(const kpargv_t *pargv);
-bool_t kpargv_set_command(kpargv_t *pargv, const kentry_t *command);
+kentry_t *kpargv_command(const kpargv_t *pargv);
+bool_t kpargv_set_command(kpargv_t *pargv, kentry_t *command);
 // Continuable
 bool_t kpargv_continuable(const kpargv_t *pargv);
 bool_t kpargv_set_continuable(kpargv_t *pargv, bool_t continuable);
@@ -101,7 +101,7 @@ bool_t kpargv_add_completions(kpargv_t *pargv, const kentry_t *completion);
 ssize_t kpargv_completions_len(const kpargv_t *pargv);
 bool_t kpargv_completions_is_empty(const kpargv_t *pargv);
 kpargv_completions_node_t *kpargv_completions_iter(const kpargv_t *pargv);
-const kentry_t *kpargv_completions_each(kpargv_completions_node_t **iter);
+kentry_t *kpargv_completions_each(kpargv_completions_node_t **iter);
 
 // Debug
 bool_t kpargv_debug(const kpargv_t *pargv);

+ 2 - 2
klish/kpath.h

@@ -19,10 +19,10 @@ C_DECL_BEGIN
 
 // Level
 
-klevel_t *klevel_new(const kentry_t *entry);
+klevel_t *klevel_new(kentry_t *entry);
 void klevel_free(klevel_t *level);
 
-const kentry_t *klevel_entry(const klevel_t *level);
+kentry_t *klevel_entry(const klevel_t *level);
 klevel_t *klevel_clone(const klevel_t *level);
 bool_t klevel_is_equal(const klevel_t *f, const klevel_t *s);
 

+ 2 - 2
klish/ksession/kcontext.c

@@ -200,7 +200,7 @@ kparg_t *kcontext_candidate_parg(const kcontext_t *context)
 }
 
 
-const kentry_t *kcontext_candidate_entry(const kcontext_t *context)
+kentry_t *kcontext_candidate_entry(const kcontext_t *context)
 {
 	kparg_t *parg = NULL;
 
@@ -299,7 +299,7 @@ void *kcontext_udata(const kcontext_t *context)
 }
 
 
-const kentry_t *kcontext_command(const kcontext_t *context)
+kentry_t *kcontext_command(const kcontext_t *context)
 {
 	kpargv_t *pargv = NULL;
 

+ 3 - 3
klish/ksession/klevel.c

@@ -11,15 +11,15 @@
 #include <klish/kentry.h>
 
 struct klevel_s {
-	const kentry_t *entry;
+	kentry_t *entry;
 };
 
 
 // ENTRY
-KGET(level, const kentry_t *, entry);
+KGET(level, kentry_t *, entry);
 
 
-klevel_t *klevel_new(const kentry_t *entry)
+klevel_t *klevel_new(kentry_t *entry)
 {
 	klevel_t *level = NULL;
 

+ 3 - 3
klish/ksession/kparg.c

@@ -15,20 +15,20 @@
 
 
 struct kparg_s {
-	const kentry_t *entry;
+	kentry_t *entry;
 	char *value;
 };
 
 
 // Entry
-KGET(parg, const kentry_t *, entry);
+KGET(parg, kentry_t *, entry);
 
 // Value
 KSET_STR(parg, value);
 KGET_STR(parg, value);
 
 
-kparg_t *kparg_new(const kentry_t *entry, const char *value)
+kparg_t *kparg_new(kentry_t *entry, const char *value)
 {
 	kparg_t *parg = NULL;
 

+ 4 - 4
klish/ksession/kpargv.c

@@ -18,7 +18,7 @@ struct kpargv_s {
 	faux_list_t *completions;
 	kpargv_status_e status; // Parse status
 	size_t level; // Number of path's level where command was found
-	const kentry_t *command; // ENTRY that consider as command (has ACTIONs)
+	kentry_t *command; // ENTRY that consider as command (has ACTIONs)
 	bool_t continuable; // Last argument can be expanded
 	kpargv_purpose_e purpose; // Exec/Completion/Help
 	char *last_arg;
@@ -34,8 +34,8 @@ KGET(pargv, size_t, level);
 KSET(pargv, size_t, level);
 
 // Command
-KGET(pargv, const kentry_t *, command);
-KSET(pargv, const kentry_t *, command);
+KGET(pargv, kentry_t *, command);
+KSET(pargv, kentry_t *, command);
 
 // Continuable
 KGET_BOOL(pargv, continuable);
@@ -69,7 +69,7 @@ KADD_NESTED(pargv, const kentry_t *, completions);
 KNESTED_LEN(pargv, completions);
 KNESTED_IS_EMPTY(pargv, completions);
 KNESTED_ITER(pargv, completions);
-KNESTED_EACH(pargv, const kentry_t *, completions);
+KNESTED_EACH(pargv, kentry_t *, completions);
 
 
 static int kpargv_completions_compare(const void *first, const void *second)

+ 1 - 1
klish/ksession/ksession.c

@@ -75,7 +75,7 @@ KSET_BOOL(session, isatty_stderr);
 ksession_t *ksession_new(kscheme_t *scheme, const char *starting_entry)
 {
 	ksession_t *session = NULL;
-	const kentry_t *entry = NULL;
+	kentry_t *entry = NULL;
 	klevel_t *level = NULL;
 
 	assert(scheme);

+ 8 - 8
klish/ksession/ksession_parse.c

@@ -31,7 +31,7 @@ static bool_t ksession_validate_arg(ksession_t *session, kpargv_t *pargv)
 {
 	char *out = NULL;
 	int retcode = -1;
-	const kentry_t *ptype_entry = NULL;
+	kentry_t *ptype_entry = NULL;
 	kparg_t *candidate = NULL;
 
 	assert(session);
@@ -64,10 +64,10 @@ static bool_t ksession_validate_arg(ksession_t *session, kpargv_t *pargv)
 
 
 static kpargv_status_e ksession_parse_arg(ksession_t *session,
-	const kentry_t *current_entry, faux_argv_node_t **argv_iter,
+	kentry_t *current_entry, faux_argv_node_t **argv_iter,
 	kpargv_t *pargv, bool_t entry_is_command, bool_t is_filter)
 {
-	const kentry_t *entry = current_entry;
+	kentry_t *entry = current_entry;
 	kentry_mode_e mode = KENTRY_MODE_NONE;
 	kpargv_status_e retcode = KPARSE_NONE; // For ENTRY itself
 	kpargv_status_e rc = KPARSE_NONE; // For nested ENTRYs
@@ -184,7 +184,7 @@ static kpargv_status_e ksession_parse_arg(ksession_t *session,
 	// 'min'/'max'.
 	if (KENTRY_MODE_SWITCH == mode) {
 		kentry_entrys_node_t *iter = kentry_entrys_iter(entry);
-		const kentry_t *nested = NULL;
+		kentry_t *nested = NULL;
 
 //if (kentry_purpose(entry) == KENTRY_PURPOSE_COMMON)
 //fprintf(stderr, "SWITCH: name=%s, arg %s\n", kentry_name(entry),
@@ -221,7 +221,7 @@ static kpargv_status_e ksession_parse_arg(ksession_t *session,
 	} else if (KENTRY_MODE_SEQUENCE == mode) {
 		kentry_entrys_node_t *iter = kentry_entrys_iter(entry);
 		kentry_entrys_node_t *saved_iter = iter;
-		const kentry_t *nested = NULL;
+		kentry_t *nested = NULL;
 		kpargv_t *cur_level_pargv = kpargv_new();
 
 		while ((nested = kentry_entrys_each(&iter))) {
@@ -355,7 +355,7 @@ kpargv_t *ksession_parse_line(ksession_t *session, const faux_argv_t *argv,
 	levels_iterr = kpath_iterr(path);
 	level_found = kpath_len(path) - 1; // Levels begin with '0'
 	while ((level = kpath_eachr(&levels_iterr))) {
-		const kentry_t *current_entry = klevel_entry(level);
+		kentry_t *current_entry = klevel_entry(level);
 		// Ignore entries with non-COMMON purpose. These entries are for
 		// special processing and will be ignored here.
 		if (kentry_purpose(current_entry) != KENTRY_PURPOSE_COMMON)
@@ -669,7 +669,7 @@ kexec_t *ksession_parse_for_exec(ksession_t *session, const char *raw_line,
 }
 
 
-kexec_t *ksession_parse_for_local_exec(ksession_t *session, const kentry_t *entry,
+kexec_t *ksession_parse_for_local_exec(ksession_t *session, kentry_t *entry,
 	const kpargv_t *parent_pargv, const kcontext_t *parent_context,
 	const kexec_t *parent_exec)
 {
@@ -823,7 +823,7 @@ static bool_t action_stdout_ev(faux_eloop_t *eloop, faux_eloop_type_e type,
 }
 
 
-bool_t ksession_exec_locally(ksession_t *session, const kentry_t *entry,
+bool_t ksession_exec_locally(ksession_t *session, kentry_t *entry,
 	kpargv_t *parent_pargv, const kcontext_t *parent_context,
 	const kexec_t *parent_exec, int *retcode, char **out)
 {

+ 2 - 2
klish/ksession_parse.h

@@ -20,10 +20,10 @@ kpargv_t *ksession_parse_for_hint(ksession_t *session,
 	const char *raw_line, kpargv_purpose_e purpose);
 kexec_t *ksession_parse_for_exec(ksession_t *session, const char *raw_line,
 	faux_error_t *error);
-kexec_t *ksession_parse_for_local_exec(ksession_t *session, const kentry_t *entry,
+kexec_t *ksession_parse_for_local_exec(ksession_t *session, kentry_t *entry,
 	const kpargv_t *parent_pargv, const kcontext_t *parent_context,
 	const kexec_t *parent_exec);
-bool_t ksession_exec_locally(ksession_t *session, const kentry_t *entry,
+bool_t ksession_exec_locally(ksession_t *session, kentry_t *entry,
 	kpargv_t *parent_pargv, const kcontext_t *parent_context,
 	const kexec_t *parent_exec, int *retcode, char **out);
 

+ 7 - 7
klish/ktp/ktpd_session.c

@@ -590,8 +590,8 @@ static bool_t ktpd_session_log(ktpd_session_t *ktpd, const kexec_t *exec)
 
 	iter = kexec_contexts_iter(exec);
 	while ((context = kexec_contexts_each(&iter))) {
-		const kentry_t *entry = kcontext_command(context);
-		const kentry_t *log_entry = NULL;
+		kentry_t *entry = kcontext_command(context);
+		kentry_t *log_entry = NULL;
 		int rc = -1;
 
 		if (!entry)
@@ -673,7 +673,7 @@ static bool_t ktpd_session_process_completion(ktpd_session_t *ktpd, faux_msg_t *
 
 	// Fill msg with possible completions
 	if (!kpargv_completions_is_empty(pargv)) {
-		const kentry_t *candidate = NULL;
+		kentry_t *candidate = NULL;
 		kpargv_completions_node_t *citer = kpargv_completions_iter(pargv);
 		faux_list_node_t *compl_iter = NULL;
 		faux_list_t *completions = NULL;
@@ -683,7 +683,7 @@ static bool_t ktpd_session_process_completion(ktpd_session_t *ktpd, faux_msg_t *
 			compl_compare, compl_kcompare,
 			(void (*)(void *))faux_str_free);
 		while ((candidate = kpargv_completions_each(&citer))) {
-			const kentry_t *completion = NULL;
+			kentry_t *completion = NULL;
 			kparg_t *parg = NULL;
 			int rc = -1;
 			char *out = NULL;
@@ -816,7 +816,7 @@ static bool_t ktpd_session_process_help(ktpd_session_t *ktpd, faux_msg_t *msg)
 
 	// Fill msg with possible help messages
 	if (!kpargv_completions_is_empty(pargv)) {
-		const kentry_t *candidate = NULL;
+		kentry_t *candidate = NULL;
 		kpargv_completions_node_t *citer = kpargv_completions_iter(pargv);
 		faux_list_node_t *help_iter = NULL;
 		faux_list_t *help_list = NULL;
@@ -825,8 +825,8 @@ static bool_t ktpd_session_process_help(ktpd_session_t *ktpd, faux_msg_t *msg)
 		help_list = faux_list_new(FAUX_LIST_SORTED, FAUX_LIST_UNIQUE,
 			help_compare, NULL, help_free);
 		while ((candidate = kpargv_completions_each(&citer))) {
-			const kentry_t *help = NULL;
-			const kentry_t *ptype = NULL;
+			kentry_t *help = NULL;
+			kentry_t *ptype = NULL;
 
 			// Get PTYPE of parameter
 			ptype = kentry_nested_by_purpose(candidate,