Browse Source

pargv_t: Continuable flag

Serj Kalichev 2 years ago
parent
commit
f4af428e87
3 changed files with 9 additions and 1 deletions
  1. 3 1
      klish/kpargv.h
  2. 5 0
      klish/ksession/kpargv.c
  3. 1 0
      klish/ksession/ksession_parse.c

+ 3 - 1
klish/kpargv.h

@@ -47,13 +47,15 @@ void kpargv_free(kpargv_t *pargv);
 kpargv_status_e kpargv_status(const kpargv_t *pargv);
 bool_t kpargv_set_status(kpargv_t *pargv, kpargv_status_e status);
 const char *kpargv_status_str(const kpargv_t *pargv);
-
 // Level
 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);
+// Continuable
+bool_t kpargv_continuable(const kpargv_t *pargv);
+bool_t kpargv_set_continuable(kpargv_t *pargv, bool_t continuable);
 // Pargs
 faux_list_t *kpargv_pargs(const kpargv_t *pargv);
 ssize_t kpargv_pargs_len(const kpargv_t *pargv);

+ 5 - 0
klish/ksession/kpargv.c

@@ -16,6 +16,7 @@ struct kpargv_s {
 	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)
+	bool_t continuable; // Last argument can be expanded
 };
 
 // Level
@@ -30,6 +31,10 @@ KSET(pargv, size_t, level);
 KGET(pargv, const kentry_t *, command);
 KSET(pargv, const kentry_t *, command);
 
+// Continuable
+KGET_BOOL(pargv, continuable);
+KSET_BOOL(pargv, continuable);
+
 // Pargs
 KGET(pargv, faux_list_t *, pargs);
 KADD_NESTED(pargv, parg);

+ 1 - 0
klish/ksession/ksession_parse.c

@@ -190,6 +190,7 @@ kpargv_t *ksession_parse_line(ksession_t *session, const char *line)
 
 	pargv = kpargv_new();
 	assert(pargv);
+	kpargv_set_continuable(pargv, faux_argv_is_continuable(argv));
 	// Iterate levels of path from higher to lower. Note the reversed
 	// iterator will be used.
 	path = ksession_path(session);