use strnul(); optimise

This commit is contained in:
tg 2017-04-29 22:04:31 +00:00
parent f2de19c41f
commit e6395046df
8 changed files with 31 additions and 30 deletions

12
edit.c
View File

@ -28,7 +28,7 @@
#ifndef MKSH_NO_CMDLINE_EDITING #ifndef MKSH_NO_CMDLINE_EDITING
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.334 2017/04/29 14:20:23 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/edit.c,v 1.335 2017/04/29 22:04:26 tg Exp $");
/* /*
* in later versions we might use libtermcap for this, but since external * in later versions we might use libtermcap for this, but since external
@ -747,7 +747,7 @@ x_basename(const char *s, const char *se)
const char *p; const char *p;
if (se == NULL) if (se == NULL)
se = s + strlen(s); se = strnul(s);
if (s == se) if (s == se)
return (0); return (0);
@ -799,7 +799,7 @@ glob_path(int flags, const char *pat, XPtrV *wp, const char *lpath)
while (sp) { while (sp) {
xp = Xstring(xs, xp); xp = Xstring(xs, xp);
if (!(p = cstrchr(sp, MKSH_PATHSEPC))) if (!(p = cstrchr(sp, MKSH_PATHSEPC)))
p = sp + strlen(sp); p = strnul(sp);
pathlen = p - sp; pathlen = p - sp;
if (pathlen) { if (pathlen) {
/* /*
@ -1852,7 +1852,7 @@ x_load_hist(char **hp)
strlcpy(holdbufp, xbuf, LINE); strlcpy(holdbufp, xbuf, LINE);
strlcpy(xbuf, sp, xend - xbuf); strlcpy(xbuf, sp, xend - xbuf);
xbp = xbuf; xbp = xbuf;
xep = xcp = xbuf + strlen(xbuf); xep = xcp = strnul(xbuf);
x_adjust(); x_adjust();
modified = 0; modified = 0;
} }
@ -3055,7 +3055,7 @@ x_version(int c MKSH_A_UNUSED)
strdupx(v, KSH_VERSION, ATEMP); strdupx(v, KSH_VERSION, ATEMP);
xbuf = xbp = xcp = v; xbuf = xbp = xcp = v;
xend = xep = v + strlen(v); xend = xep = strnul(v);
x_redraw('\r'); x_redraw('\r');
x_flush(); x_flush();
@ -3098,7 +3098,7 @@ x_edit_line(int c MKSH_A_UNUSED)
"fc -e ${VISUAL:-${EDITOR:-vi}} --", x_arg); "fc -e ${VISUAL:-${EDITOR:-vi}} --", x_arg);
else else
strlcpy(xbuf, "fc -e ${VISUAL:-${EDITOR:-vi}} --", xend - xbuf); strlcpy(xbuf, "fc -e ${VISUAL:-${EDITOR:-vi}} --", xend - xbuf);
xep = xbuf + strlen(xbuf); xep = strnul(xbuf);
return (x_newline('\n')); return (x_newline('\n'));
} }
#endif #endif

13
eval.c
View File

@ -23,7 +23,7 @@
#include "sh.h" #include "sh.h"
__RCSID("$MirOS: src/bin/mksh/eval.c,v 1.208 2017/04/29 21:49:06 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/eval.c,v 1.209 2017/04/29 22:04:27 tg Exp $");
/* /*
* string expansion * string expansion
@ -1405,7 +1405,7 @@ comsub(Expand *xp, const char *cp, int fn)
if (!herein(io, &name)) { if (!herein(io, &name)) {
xp->str = name; xp->str = name;
/* as $(…) requires, trim trailing newlines */ /* as $(…) requires, trim trailing newlines */
name += strlen(name); name = strnul(name);
while (name > xp->str && name[-1] == '\n') while (name > xp->str && name[-1] == '\n')
--name; --name;
*name = '\0'; *name = '\0';
@ -1655,7 +1655,7 @@ globit(XString *xs, /* dest string */
*np++ = '\0'; *np++ = '\0';
} else { } else {
odirsep = '\0'; /* keep gcc quiet */ odirsep = '\0'; /* keep gcc quiet */
se = sp + strlen(sp); se = strnul(sp);
} }
@ -1669,7 +1669,7 @@ globit(XString *xs, /* dest string */
if (!has_globbing(sp)) { if (!has_globbing(sp)) {
XcheckN(*xs, xp, se - sp + 1); XcheckN(*xs, xp, se - sp + 1);
debunk(xp, sp, Xnleft(*xs, xp)); debunk(xp, sp, Xnleft(*xs, xp));
xp += strlen(xp); xp = strnul(xp);
*xpp = xp; *xpp = xp;
globit(xs, xpp, np, wp, check); globit(xs, xpp, np, wp, check);
} else { } else {
@ -1698,9 +1698,8 @@ globit(XString *xs, /* dest string */
XcheckN(*xs, xp, len); XcheckN(*xs, xp, len);
memcpy(xp, name, len); memcpy(xp, name, len);
*xpp = xp + len - 1; *xpp = xp + len - 1;
globit(xs, xpp, np, wp, globit(xs, xpp, np, wp, (check & GF_MARKDIR) |
(check & GF_MARKDIR) | GF_GLOBBED GF_GLOBBED | (np ? GF_EXCHECK : GF_NONE));
| (np ? GF_EXCHECK : GF_NONE));
xp = Xstring(*xs, xp) + prefix_len; xp = Xstring(*xs, xp) + prefix_len;
} }
closedir(dirp); closedir(dirp);

4
exec.c
View File

@ -23,7 +23,7 @@
#include "sh.h" #include "sh.h"
__RCSID("$MirOS: src/bin/mksh/exec.c,v 1.197 2017/04/28 00:38:29 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/exec.c,v 1.198 2017/04/29 22:04:28 tg Exp $");
#ifndef MKSH_DEFAULT_EXECSHELL #ifndef MKSH_DEFAULT_EXECSHELL
#define MKSH_DEFAULT_EXECSHELL MKSH_UNIXROOT "/bin/sh" #define MKSH_DEFAULT_EXECSHELL MKSH_UNIXROOT "/bin/sh"
@ -1341,7 +1341,7 @@ search_path(const char *name, const char *lpath,
while (sp != NULL) { while (sp != NULL) {
xp = Xstring(xs, xp); xp = Xstring(xs, xp);
if (!(p = cstrchr(sp, MKSH_PATHSEPC))) if (!(p = cstrchr(sp, MKSH_PATHSEPC)))
p = sp + strlen(sp); p = strnul(sp);
if (p != sp) { if (p != sp) {
XcheckN(xs, xp, p - sp); XcheckN(xs, xp, p - sp);
memcpy(xp, sp, p - sp); memcpy(xp, sp, p - sp);

View File

@ -3,7 +3,7 @@
/*- /*-
* Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, * Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
* 2011, 2012, 2014, 2015, 2016 * 2011, 2012, 2014, 2015, 2016, 2017
* mirabilos <m@mirbsd.org> * mirabilos <m@mirbsd.org>
* *
* Provided that these terms and disclaimer and all copyright notices * Provided that these terms and disclaimer and all copyright notices
@ -27,7 +27,7 @@
#include <sys/file.h> #include <sys/file.h>
#endif #endif
__RCSID("$MirOS: src/bin/mksh/histrap.c,v 1.161 2017/04/27 19:33:49 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/histrap.c,v 1.162 2017/04/29 22:04:28 tg Exp $");
Trap sigtraps[ksh_NSIG + 1]; Trap sigtraps[ksh_NSIG + 1];
static struct sigaction Sigact_ign; static struct sigaction Sigact_ign;
@ -629,7 +629,7 @@ histsave(int *lnp, const char *cmd, int svmode, bool ignoredups)
if (svmode == HIST_FLUSH) if (svmode == HIST_FLUSH)
return; return;
ccp = cmd + strlen(cmd); ccp = strnul(cmd);
while (ccp > cmd && ccp[-1] == '\n') while (ccp > cmd && ccp[-1] == '\n')
--ccp; --ccp;
strndupx(c, cmd, ccp - cmd, APERM); strndupx(c, cmd, ccp - cmd, APERM);

10
misc.c
View File

@ -32,7 +32,7 @@
#include <grp.h> #include <grp.h>
#endif #endif
__RCSID("$MirOS: src/bin/mksh/misc.c,v 1.271 2017/04/29 21:49:07 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/misc.c,v 1.272 2017/04/29 22:04:29 tg Exp $");
#define KSH_CHVT_FLAG #define KSH_CHVT_FLAG
#ifdef MKSH_SMALL #ifdef MKSH_SMALL
@ -556,7 +556,7 @@ simplify_gmatch_pattern(const unsigned char *sp)
sp = cp; sp = cp;
simplify_gmatch_pat1a: simplify_gmatch_pat1a:
dp = cp; dp = cp;
se = sp + strlen((const void *)sp); se = strnul(sp);
while ((c = *sp++)) { while ((c = *sp++)) {
if (!ISMAGIC(c)) { if (!ISMAGIC(c)) {
*dp++ = c; *dp++ = c;
@ -628,8 +628,7 @@ gmatchx(const char *s, const char *p, bool isfile)
if (s == NULL || p == NULL) if (s == NULL || p == NULL)
return (0); return (0);
se = s + strlen(s); pe = strnul(p);
pe = p + strlen(p);
/* /*
* isfile is false iff no syntax check has been done on * isfile is false iff no syntax check has been done on
* the pattern. If check fails, just do a strcmp(). * the pattern. If check fails, just do a strcmp().
@ -641,13 +640,14 @@ gmatchx(const char *s, const char *p, bool isfile)
debunk(t, p, len); debunk(t, p, len);
return (!strcmp(t, s)); return (!strcmp(t, s));
} }
se = strnul(s);
/* /*
* since the do_gmatch() engine sucks so much, we must do some * since the do_gmatch() engine sucks so much, we must do some
* pattern simplifications * pattern simplifications
*/ */
pnew = simplify_gmatch_pattern((const unsigned char *)p); pnew = simplify_gmatch_pattern((const unsigned char *)p);
pe = pnew + strlen(pnew); pe = strnul(pnew);
rv = do_gmatch((const unsigned char *)s, (const unsigned char *)se, rv = do_gmatch((const unsigned char *)s, (const unsigned char *)se,
(const unsigned char *)pnew, (const unsigned char *)pe); (const unsigned char *)pnew, (const unsigned char *)pe);

8
os2.c
View File

@ -1,6 +1,8 @@
/*- /*-
* Copyright (c) 2015 * Copyright (c) 2015
* KO Myung-Hun <komh@chollian.net> * KO Myung-Hun <komh@chollian.net>
* Copyright (c) 2017
* mirabilos <m@mirbsd.org>
* *
* Provided that these terms and disclaimer and all copyright notices * Provided that these terms and disclaimer and all copyright notices
* are retained or reproduced in an accompanying document, permission * are retained or reproduced in an accompanying document, permission
@ -28,7 +30,7 @@
#include <unistd.h> #include <unistd.h>
#include <process.h> #include <process.h>
__RCSID("$MirOS: src/bin/mksh/os2.c,v 1.1 2017/04/02 15:00:44 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/os2.c,v 1.2 2017/04/29 22:04:29 tg Exp $");
static char *remove_trailing_dots(char *); static char *remove_trailing_dots(char *);
static int access_stat_ex(int (*)(), const char *, void *); static int access_stat_ex(int (*)(), const char *, void *);
@ -247,9 +249,9 @@ setextlibpath(const char *name, const char *val)
static char * static char *
remove_trailing_dots(char *name) remove_trailing_dots(char *name)
{ {
char *p; char *p = strnul(name);
for (p = name + strlen(name); --p > name && *p == '.'; ) while (--p > name && *p == '.')
/* nothing */; /* nothing */;
if (*p != '.' && *p != '/' && *p != '\\' && *p != ':') if (*p != '.' && *p != '/' && *p != '\\' && *p != ':')

4
sh.h
View File

@ -175,7 +175,7 @@
#endif #endif
#ifdef EXTERN #ifdef EXTERN
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.833 2017/04/29 21:49:07 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/sh.h,v 1.834 2017/04/29 22:04:30 tg Exp $");
#endif #endif
#define MKSH_VERSION "R55 2017/04/27" #define MKSH_VERSION "R55 2017/04/27"
@ -649,7 +649,7 @@ im_sorry_dave(void)
#endif #endif
/* use this ipv strchr(s, 0) but no side effects in s! */ /* use this ipv strchr(s, 0) but no side effects in s! */
#define strnul(s) ((s) + strlen(s)) #define strnul(s) ((s) + strlen((const void *)s))
#define utf_ptradjx(src, dst) do { \ #define utf_ptradjx(src, dst) do { \
(dst) = (src) + utf_ptradj(src); \ (dst) = (src) + utf_ptradj(src); \

4
var.c
View File

@ -28,7 +28,7 @@
#include <sys/sysctl.h> #include <sys/sysctl.h>
#endif #endif
__RCSID("$MirOS: src/bin/mksh/var.c,v 1.216 2017/04/27 19:33:53 tg Exp $"); __RCSID("$MirOS: src/bin/mksh/var.c,v 1.217 2017/04/29 22:04:31 tg Exp $");
/*- /*-
* Variables * Variables
@ -464,7 +464,7 @@ setstr(struct tbl *vq, const char *s, int error_ok)
#ifndef MKSH_SMALL #ifndef MKSH_SMALL
/* debugging */ /* debugging */
if (s >= vq->val.s && if (s >= vq->val.s &&
s <= vq->val.s + strlen(vq->val.s)) { s <= strnul(vq->val.s)) {
internal_errorf( internal_errorf(
"setstr: %s=%s: assigning to self", "setstr: %s=%s: assigning to self",
vq->name, s); vq->name, s);