Introduction
Introduction Statistics Contact Development Disclaimer Help
tex: return a static buffer in ex_pathexpand() - neatvi - [fork] simple vi-type…
git clone git://src.adamsgaard.dk/neatvi
Log
Files
Refs
README
---
commit 2413a868f0ce3e3d67a8732f7174de731c3f7a05
parent 505f0d068cdd0bb059a0d092a2f5fec6a1d7c763
Author: Ali Gholami Rudi <[email protected]>
Date: Thu, 7 Oct 2021 12:47:14 +0330
ex: return a static buffer in ex_pathexpand()
Diffstat:
M ex.c | 36 +++++++++++++----------------…
1 file changed, 15 insertions(+), 21 deletions(-)
---
diff --git a/ex.c b/ex.c
t@@ -114,36 +114,40 @@ char *ex_filetype(void)
return bufs[0].ft;
}
-/* replace % and # in paths and commands with current and alternate path names…
+/* replace % and # with current and alternate path names; returns a static buf…
static char *ex_pathexpand(char *src, int spaceallowed)
{
- struct sbuf *sb = sbuf_make();
- while (*src && *src != '\n' && (spaceallowed || (*src != ' ' && *src !…
+ static char buf[1024];
+ char *dst = buf;
+ char *end = dst + sizeof(buf);
+ while (dst + 1 < end && *src && *src != '\n' &&
+ (spaceallowed || (*src != ' ' && *src != '\t'))) {
if (*src == '%') {
if (!bufs[0].path || !bufs[0].path[0]) {
ex_show("\"%\" is unset\n");
- sbuf_free(sb);
return NULL;
}
- sbuf_str(sb, bufs[0].path);
+ dst += snprintf(dst, end - dst, "%s", bufs[0].path);
src++;
continue;
}
if (*src == '#') {
if (!bufs[1].path || !bufs[1].path[0]) {
ex_show("\"#\" is unset\n");
- sbuf_free(sb);
return NULL;
}
- sbuf_str(sb, bufs[1].path);
+ dst += snprintf(dst, end - dst, "%s", bufs[1].path);
src++;
continue;
}
if (*src == '\\' && src[1])
src++;
- sbuf_chr(sb, *src++);
+ *dst++ = *src++;
}
- return sbuf_done(sb);
+ if (dst + 1 >= end)
+ dst = end - 1;
+ *dst = '\0';
+ return buf;
}
/* the previous search keyword */
t@@ -333,7 +337,6 @@ static int ec_edit(char *loc, char *cmd, char *arg)
return 1;
if (path[0] && bufs_find(path) >= 0) {
bufs_switch(bufs_find(path));
- free(path);
return 0;
}
if (path[0] || !bufs[0].path)
t@@ -354,7 +357,6 @@ static int ec_edit(char *loc, char *cmd, char *arg)
xrow = MAX(0, MIN(xrow, lbuf_len(xb) - 1));
xoff = 0;
xtop = MAX(0, MIN(xtop, lbuf_len(xb) - 1));
- free(path);
return 0;
}
t@@ -376,7 +378,6 @@ static int ec_read(char *loc, char *cmd, char *arg)
obuf = cmd_pipe(ecmd + 1, NULL, 0, 1);
if (obuf)
lbuf_edit(xb, obuf, pos, pos);
- free(ecmd);
free(obuf);
} else {
int fd = open(path, O_RDONLY);
t@@ -420,7 +421,6 @@ static int ec_write(char *loc, char *cmd, char *arg)
ibuf = lbuf_cp(xb, beg, end);
ex_print(NULL);
cmd_pipe(ecmd + 1, ibuf, 1, 0);
- free(ecmd);
free(ibuf);
} else {
int fd;
t@@ -671,16 +671,11 @@ static int ec_exec(char *loc, char *cmd, char *arg)
if (!(ecmd = ex_pathexpand(arg, 1)))
return 1;
if (!loc[0]) {
- int ret;
ex_print(NULL);
- ret = cmd_exec(ecmd);
- free(ecmd);
- return ret;
+ return cmd_exec(ecmd);
}
- if (ex_region(loc, &beg, &end)) {
- free(ecmd);
+ if (ex_region(loc, &beg, &end))
return 1;
- }
text = lbuf_cp(xb, beg, end);
rep = cmd_pipe(ecmd, text, 1, 1);
if (rep)
t@@ -699,7 +694,6 @@ static int ec_make(char *loc, char *cmd, char *arg)
if (!(target = ex_pathexpand(arg, 0)))
return 1;
sprintf(make, "make %s", target);
- free(target);
ex_print(NULL);
if (cmd_exec(make))
return 1;
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.