summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cli_new.c28
-rw-r--r--src/cli_objects.c2
-rw-r--r--src/cli_val.h1
3 files changed, 30 insertions, 1 deletions
diff --git a/src/cli_new.c b/src/cli_new.c
index b66d83c..0b50ccb 100644
--- a/src/cli_new.c
+++ b/src/cli_new.c
@@ -1774,7 +1774,35 @@ void push_path(vtw_path *path, char *segm)
}else
*pp = *cp;
*pp = 0;
+ path->path_len += len;
+ if (path->path_lev == path->path_ends_alloc){
+ path->path_ends_alloc += ENDS_ALLOC;
+ path->path_ends = (int *)my_realloc(path->path_ends,
+ sizeof(int *)*path->path_ends_alloc, "puhs_path 2");
+ }
+ path->path_ends[path->path_lev++] = path->path_len;
+ // push_path_no_escape();
+}
+/**
+ * Version of above that doesn't escape value before stuffing.
+ *
+ **/
+void push_path_no_escape(vtw_path *path, char *segm)
+{
+ int len;
+ char *cp;
+ char *pp;
+
+ for(cp=segm, len=0;*cp;++cp, ++len);
+ warrant_path(path, len + 1);
+ path->path_buf[path->path_len] = '/';
+ path->path_buf[++path->path_len] = 0;
+ for(pp=path->path_buf + path->path_len,cp=segm;
+ *cp;++cp, ++pp) {
+ *pp = *cp;
+ }
+ *pp = 0;
path->path_len += len;
if (path->path_lev == path->path_ends_alloc){
path->path_ends_alloc += ENDS_ALLOC;
diff --git a/src/cli_objects.c b/src/cli_objects.c
index 8f0f6fe..8685c6a 100644
--- a/src/cli_objects.c
+++ b/src/cli_objects.c
@@ -243,7 +243,7 @@ void init_edit()
slashp = strchr(scanp, '/');
if (slashp)
*slashp = 0;
- push_path(&m_path, scanp);
+ push_path_no_escape(&m_path, scanp);
if (slashp) {
*slashp = '/';
scanp = slashp+1;
diff --git a/src/cli_val.h b/src/cli_val.h
index 56f6cee..c9d59a6 100644
--- a/src/cli_val.h
+++ b/src/cli_val.h
@@ -153,6 +153,7 @@ extern void cli_val_done(void);
extern void init_path(vtw_path *path, const char *root);
extern void pop_path(vtw_path *path);
extern void push_path(vtw_path *path, char *segm);
+extern void push_path_no_escape(vtw_path *path, char *segm);
extern void free_def(vtw_def *defp);
extern void free_sorted(vtw_sorted *sortp);
extern void *my_malloc(size_t size, const char *name);