Browse Source

Change prototype for ksession_parse_line()

Serj Kalichev 2 years ago
parent
commit
ead67e46ec
4 changed files with 18 additions and 23 deletions
  1. 3 4
      bin/klishd/klishd.c
  2. 1 3
      klish/ksession.h
  3. 5 0
      klish/ksession/kpargv.c
  4. 9 16
      klish/ksession/ksession_parse.c

+ 3 - 4
bin/klishd/klishd.c

@@ -176,7 +176,6 @@ int main(int argc, char **argv)
 
 	// Parsing
 	{
-	kpargv_status_e pstatus = KPARSE_NONE;
 	char *s = NULL;
 	const char *line = "cmd o1 m7 o2 e1";
 	kpargv_t *pargv = NULL;
@@ -184,8 +183,8 @@ int main(int argc, char **argv)
 	
 	session = ksession_new(scheme, "/lowview");
 	kpath_push(ksession_path(session), klevel_new(kscheme_find_entry_by_path(scheme, "/main")));
-	pstatus = ksession_parse_line(session, line, &pargv);
-	switch (pstatus) {
+	pargv = ksession_parse_line(session, line);
+	switch (kpargv_status(pargv)) {
 	case KPARSE_NONE:
 		s = "None";
 		break;
@@ -208,7 +207,7 @@ int main(int argc, char **argv)
 		s = "Error";
 		break;
 	}
-	printf("Line '%s': %s\n", line, s);
+	printf("Level: %lu, Line '%s': %s\n", kpargv_level(pargv), line, s);
 
 	if (pargv) {
 		kparg_t *parg = NULL;

+ 1 - 3
klish/ksession.h

@@ -23,9 +23,7 @@ void ksession_free(ksession_t *session);
 const kscheme_t *ksession_scheme(const ksession_t *session);
 kpath_t *ksession_path(const ksession_t *session);
 
-kpargv_status_e ksession_parse_line(ksession_t *session, const char *line,
-	kpargv_t **parsed_argv);
-
+kpargv_t *ksession_parse_line(ksession_t *session, const char *line);
 
 C_DECL_END
 

+ 5 - 0
klish/ksession/kpargv.c

@@ -58,6 +58,11 @@ kpargv_t *kpargv_new()
 	if (!pargv)
 		return NULL;
 
+	// Initialization
+	pargv->status = KPARSE_NONE;
+	pargv->level = 0;
+	pargv->command = NULL;
+
 	// Parsed arguments list
 	pargv->pargs = faux_list_new(FAUX_LIST_UNSORTED, FAUX_LIST_NONUNIQUE,
 		NULL, kpargv_pargs_kcompare, (void (*)(void *))kparg_free);

+ 9 - 16
klish/ksession/ksession_parse.c

@@ -156,8 +156,7 @@ static kpargv_status_e ksession_parse_arg(kentry_t *current_entry,
 }
 
 
-kpargv_status_e ksession_parse_line(ksession_t *session, const char *line,
-	kpargv_t **parsed_argv)
+kpargv_t *ksession_parse_line(ksession_t *session, const char *line)
 {
 	faux_argv_t *argv = NULL;
 	faux_argv_node_t *argv_iter = NULL;
@@ -168,23 +167,21 @@ kpargv_status_e ksession_parse_line(ksession_t *session, const char *line,
 	size_t level_found = 0; // Level where command was found
 	kpath_t *path = NULL;
 
-	if (parsed_argv)
-		*parsed_argv = NULL;
 	assert(session);
 	if (!session)
-		return KPARSE_ERROR;
+		return NULL;
 	assert(line);
 	if (!line)
-		return KPARSE_ERROR;
+		return NULL;
 
 	// Split line to arguments
 	argv = faux_argv_new();
 	assert(argv);
 	if (!argv)
-		return KPARSE_ERROR;
+		return NULL;
 	if (faux_argv_parse(argv, line) < 0) {
 		faux_argv_free(argv);
-		return KPARSE_ERROR;
+		return NULL;
 	}
 	argv_iter = faux_argv_iter(argv);
 
@@ -214,14 +211,10 @@ kpargv_status_e ksession_parse_line(ksession_t *session, const char *line,
 	} else if (KPARSE_NOTFOUND == pstatus)
 			pstatus = KPARSE_ILLEGAL; // Unknown command
 
-	if (kpargv_pargs_is_empty(pargv)) {
-		kpargv_free(pargv);
-		pargv = NULL;
-	}
-	*parsed_argv = pargv;
+	kpargv_set_status(pargv, pstatus);
+	kpargv_set_level(pargv, level_found);
 
 	faux_argv_free(argv);
-if (pargv)
-printf("Level: %lu\n", level_found);
-	return pstatus;
+
+	return pargv;
 }