Explorar o código

Get completion from data

Serj Kalichev hai 1 ano
pai
achega
8460a297b7
Modificáronse 3 ficheiros con 18 adicións e 4 borrados
  1. 16 2
      pline.c
  2. 1 1
      pline.h
  3. 1 1
      ytree.c

+ 16 - 2
pline.c

@@ -9,6 +9,7 @@
 
 #include <sysrepo.h>
 #include <sysrepo/xpath.h>
+#include <sysrepo/values.h>
 #include <libyang/tree_edit.h>
 
 #include <faux/faux.h>
@@ -572,7 +573,7 @@ void pline_print_type_completions(const struct lysc_type *type)
 }
 
 
-void pline_print_completions(const pline_t *pline)
+void pline_print_completions(const pline_t *pline, sr_session_ctx_t *sess)
 {
 	faux_list_node_t *iter = NULL;
 	pcompl_t *pcompl = NULL;
@@ -582,7 +583,20 @@ void pline_print_completions(const pline_t *pline)
 		struct lysc_type *type = NULL;
 		const struct lysc_node *node = pcompl->node;
 
-//		printf("pcompl.xpath = %s\n", pcompl->xpath ? pcompl->xpath : "NULL");
+		if (pcompl->xpath) {
+			sr_val_t *vals = NULL;
+			size_t val_num = 0;
+			size_t i = 0;
+
+			sr_get_items(sess, pcompl->xpath, 0, 0, &vals, &val_num);
+			for (i = 0; i < val_num; i++) {
+				char *tmp = sr_val_to_str(&vals[i]);
+				if (!tmp)
+					continue;
+				printf("%s\n", tmp);
+				free(tmp);
+			}
+		}
 
 		if (!node)
 			continue;

+ 1 - 1
pline.h

@@ -45,7 +45,7 @@ void pline_free(pline_t *pline);
 pline_t *pline_parse(const struct ly_ctx *ctx, faux_argv_t *argv, uint32_t flags);
 pexpr_t *pline_current_expr(pline_t *pline);
 void pline_debug(pline_t *pline);
-void pline_print_completions(const pline_t *pline);
+void pline_print_completions(const pline_t *pline, sr_session_ctx_t *sess);
 
 //void pline_set_quotes(pline_t *fargv, const char *quotes);
 

+ 1 - 1
ytree.c

@@ -266,7 +266,7 @@ int main(int argc, char **argv)
 	pline = pline_parse(ctx, args, 0);
 	faux_argv_free(args);
 	pline_debug(pline);
-	pline_print_completions(pline);
+	pline_print_completions(pline, sess);
 	pline_free(pline);
 
 //	ppath2path(ctx, "interfaces interface eth0 type");