Ver código fonte

session: Move parse functions to dedicated file

Serj Kalichev 2 anos atrás
pai
commit
0258c102b1

+ 2 - 1
klish/ksession/Makefile.am

@@ -7,4 +7,5 @@ libklish_la_SOURCES += \
 	klish/ksession/kexec.c \
 	klish/ksession/kparg.c \
 	klish/ksession/kpargv.c \
-	klish/ksession/ksession.c
+	klish/ksession/ksession.c \
+	klish/ksession/ksession_parse.c

+ 0 - 28
klish/ksession/ksession.c

@@ -79,31 +79,3 @@ void ksession_free(ksession_t *session)
 
 	free(session);
 }
-
-
-kpargv_t *ksession_parse_line(ksession_t *session, const char *line)
-{
-	const kscheme_t *scheme = ksession_scheme(session);
-	faux_argv_t *argv = NULL;
-
-	assert(session);
-	if (!session)
-		return NULL;
-	assert(line);
-	if (!line)
-		return NULL;
-
-	// Split line to arguments
-	argv = faux_argv_new();
-	assert(argv);
-	if (!argv)
-		return NULL;
-	if (faux_argv_parse(argv, line) <= 0) {
-		faux_argv_free(argv);
-		return NULL;
-	}
-
-	scheme = scheme;
-
-	return NULL;
-}

+ 83 - 0
klish/ksession/ksession_parse.c

@@ -0,0 +1,83 @@
+/** @file ksession_parse.c
+ */
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <faux/argv.h>
+#include <klish/khelper.h>
+#include <klish/kview.h>
+#include <klish/kscheme.h>
+#include <klish/kpath.h>
+#include <klish/kpargv.h>
+#include <klish/ksession.h>
+
+
+static bool_t ksession_parse_arg(kentry_t *current_entry,
+	faux_argv_node_t **argv_iter, kpargv_t *pargv)
+{
+	assert(current_entry);
+	if (!current_entry)
+		return BOOL_FALSE;
+	assert(argv_iter);
+	if (!argv_iter)
+		return BOOL_FALSE;
+	assert(*argv_iter);
+	if (!*argv_iter)
+		return BOOL_FALSE;
+	assert(pargv);
+	if (!pargv)
+		return BOOL_FALSE;
+
+	// Is entry candidate to resolve current arg?
+	// Which entries can't be a candidate:
+	// * container
+	if (!kentry_container(current_entry)) {
+		const char *current_arg = faux_argv_current(*argv_iter);
+
+		current_arg = current_arg;
+	}
+
+	return BOOL_FALSE;
+}
+
+
+kpargv_t *ksession_parse_line(ksession_t *session, const char *line)
+{
+	faux_argv_t *argv = NULL;
+	faux_argv_node_t *argv_iter = NULL;
+	kentry_t *current_entry = NULL;
+	kpargv_t *pargv = NULL;
+
+	assert(session);
+	if (!session)
+		return NULL;
+	assert(line);
+	if (!line)
+		return NULL;
+
+	// Split line to arguments
+	argv = faux_argv_new();
+	assert(argv);
+	if (!argv)
+		return NULL;
+	if (faux_argv_parse(argv, line) <= 0) {
+		faux_argv_free(argv);
+		return NULL;
+	}
+	argv_iter = faux_argv_iter(argv);
+
+	current_entry = klevel_entry(kpath_current(ksession_path(session)));
+	pargv = kpargv_new();
+	assert(pargv);
+
+	ksession_parse_arg(current_entry, &argv_iter, pargv);
+
+	if (kpargv_pargs_is_empty(pargv)) {
+		kpargv_free(pargv);
+		return NULL;
+	}
+
+	return pargv;
+}