reduce amount of .bss memory needed; initialise via AEDIT at x_init
or even first run of x_vi
This commit is contained in:
parent
1d487d9163
commit
c10e5bd237
6
Build.sh
6
Build.sh
@ -1,5 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.644 2013/07/25 17:01:03 tg Exp $'
|
srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.645 2013/08/10 13:44:25 tg Exp $'
|
||||||
#-
|
#-
|
||||||
# Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
# Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
||||||
# 2011, 2012, 2013
|
# 2011, 2012, 2013
|
||||||
@ -1598,7 +1598,7 @@ else
|
|||||||
#define EXTERN
|
#define EXTERN
|
||||||
#define MKSH_INCLUDES_ONLY
|
#define MKSH_INCLUDES_ONLY
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
__RCSID("$MirOS: src/bin/mksh/Build.sh,v 1.644 2013/07/25 17:01:03 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/Build.sh,v 1.645 2013/08/10 13:44:25 tg Exp $");
|
||||||
int main(void) { printf("Hello, World!\n"); return (0); }
|
int main(void) { printf("Hello, World!\n"); return (0); }
|
||||||
EOF
|
EOF
|
||||||
case $cm in
|
case $cm in
|
||||||
@ -2113,7 +2113,7 @@ addsrcs USE_PRINTF_BUILTIN printf.c
|
|||||||
test 1 = "$USE_PRINTF_BUILTIN" && add_cppflags -DMKSH_PRINTF_BUILTIN
|
test 1 = "$USE_PRINTF_BUILTIN" && add_cppflags -DMKSH_PRINTF_BUILTIN
|
||||||
test 1 = "$HAVE_CAN_VERB" && CFLAGS="$CFLAGS -verbose"
|
test 1 = "$HAVE_CAN_VERB" && CFLAGS="$CFLAGS -verbose"
|
||||||
test -n "$LDSTATIC" && add_cppflags -DMKSH_OPTSTATIC
|
test -n "$LDSTATIC" && add_cppflags -DMKSH_OPTSTATIC
|
||||||
add_cppflags -DMKSH_BUILD_R=471
|
add_cppflags -DMKSH_BUILD_R=481
|
||||||
|
|
||||||
$e $bi$me: Finished configuration testing, now producing output.$ao
|
$e $bi$me: Finished configuration testing, now producing output.$ao
|
||||||
|
|
||||||
|
4
Makefile
4
Makefile
@ -1,4 +1,4 @@
|
|||||||
# $MirOS: src/bin/mksh/Makefile,v 1.123 2013/07/21 18:47:15 tg Exp $
|
# $MirOS: src/bin/mksh/Makefile,v 1.124 2013/08/10 13:44:26 tg Exp $
|
||||||
#-
|
#-
|
||||||
# Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
# Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
||||||
# 2011, 2012, 2013
|
# 2011, 2012, 2013
|
||||||
@ -54,7 +54,7 @@ CPPFLAGS+= -DMKSH_ASSUME_UTF8 -DMKSH_DISABLE_DEPRECATED \
|
|||||||
-DHAVE_SETGROUPS=1 -DHAVE_STRERROR=0 -DHAVE_STRSIGNAL=0 \
|
-DHAVE_SETGROUPS=1 -DHAVE_STRERROR=0 -DHAVE_STRSIGNAL=0 \
|
||||||
-DHAVE_STRLCPY=1 -DHAVE_FLOCK_DECL=1 -DHAVE_REVOKE_DECL=1 \
|
-DHAVE_STRLCPY=1 -DHAVE_FLOCK_DECL=1 -DHAVE_REVOKE_DECL=1 \
|
||||||
-DHAVE_SYS_ERRLIST_DECL=1 -DHAVE_SYS_SIGLIST_DECL=1 \
|
-DHAVE_SYS_ERRLIST_DECL=1 -DHAVE_SYS_SIGLIST_DECL=1 \
|
||||||
-DHAVE_PERSISTENT_HISTORY=1 -DMKSH_BUILD_R=471
|
-DHAVE_PERSISTENT_HISTORY=1 -DMKSH_BUILD_R=481
|
||||||
CPPFLAGS+= -D${${PROG:L}_tf:C/(Mir${MAN:E}{0,1}){2}/4/:S/x/mksh_BUILD/:U}
|
CPPFLAGS+= -D${${PROG:L}_tf:C/(Mir${MAN:E}{0,1}){2}/4/:S/x/mksh_BUILD/:U}
|
||||||
COPTS+= -std=c99 -Wall
|
COPTS+= -std=c99 -Wall
|
||||||
.endif
|
.endif
|
||||||
|
6
check.t
6
check.t
@ -1,4 +1,4 @@
|
|||||||
# $MirOS: src/bin/mksh/check.t,v 1.625 2013/07/26 20:33:35 tg Exp $
|
# $MirOS: src/bin/mksh/check.t,v 1.626 2013/08/10 13:44:27 tg Exp $
|
||||||
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
|
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
|
||||||
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
|
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
|
||||||
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
|
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
|
||||||
@ -31,7 +31,7 @@
|
|||||||
# http://www.freebsd.org/cgi/cvsweb.cgi/src/tools/regression/bin/test/regress.sh?rev=HEAD
|
# http://www.freebsd.org/cgi/cvsweb.cgi/src/tools/regression/bin/test/regress.sh?rev=HEAD
|
||||||
|
|
||||||
expected-stdout:
|
expected-stdout:
|
||||||
@(#)MIRBSD KSH R47 2013/07/26
|
@(#)MIRBSD KSH R47 2013/08/10
|
||||||
description:
|
description:
|
||||||
Check version of shell.
|
Check version of shell.
|
||||||
stdin:
|
stdin:
|
||||||
@ -40,7 +40,7 @@ name: KSH_VERSION
|
|||||||
category: shell:legacy-no
|
category: shell:legacy-no
|
||||||
---
|
---
|
||||||
expected-stdout:
|
expected-stdout:
|
||||||
@(#)LEGACY KSH R47 2013/07/26
|
@(#)LEGACY KSH R47 2013/08/10
|
||||||
description:
|
description:
|
||||||
Check version of legacy shell.
|
Check version of legacy shell.
|
||||||
stdin:
|
stdin:
|
||||||
|
134
edit.c
134
edit.c
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
#ifndef MKSH_NO_CMDLINE_EDITING
|
#ifndef MKSH_NO_CMDLINE_EDITING
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.268 2013/07/26 20:33:37 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.269 2013/08/10 13:44:29 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
|
||||||
@ -66,7 +66,7 @@ static X_chars edchars;
|
|||||||
static char editmode;
|
static char editmode;
|
||||||
static int xx_cols; /* for Emacs mode */
|
static int xx_cols; /* for Emacs mode */
|
||||||
static int modified; /* buffer has been "modified" */
|
static int modified; /* buffer has been "modified" */
|
||||||
static char holdbuf[LINE]; /* place to hold last edit buffer */
|
static char *holdbufp; /* place to hold last edit buffer */
|
||||||
|
|
||||||
static int x_getc(void);
|
static int x_getc(void);
|
||||||
static void x_putcf(int);
|
static void x_putcf(int);
|
||||||
@ -81,10 +81,10 @@ static char *x_glob_hlp_tilde_and_rem_qchar(char *, bool);
|
|||||||
static int x_basename(const char *, const char *);
|
static int x_basename(const char *, const char *);
|
||||||
static void x_free_words(int, char **);
|
static void x_free_words(int, char **);
|
||||||
static int x_escape(const char *, size_t, int (*)(const char *, size_t));
|
static int x_escape(const char *, size_t, int (*)(const char *, size_t));
|
||||||
static int x_emacs(char *, size_t);
|
static int x_emacs(char *);
|
||||||
static void x_init_prompt(void);
|
static void x_init_prompt(void);
|
||||||
#if !MKSH_S_NOVI
|
#if !MKSH_S_NOVI
|
||||||
static int x_vi(char *, size_t);
|
static int x_vi(char *);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define x_flush() shf_flush(shl_out)
|
#define x_flush() shf_flush(shl_out)
|
||||||
@ -110,17 +110,17 @@ static int x_e_rebuildline(const char *);
|
|||||||
* read an edited command line
|
* read an edited command line
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
x_read(char *buf, size_t len)
|
x_read(char *buf)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
x_mode(true);
|
x_mode(true);
|
||||||
modified = 1;
|
modified = 1;
|
||||||
if (Flag(FEMACS) || Flag(FGMACS))
|
if (Flag(FEMACS) || Flag(FGMACS))
|
||||||
i = x_emacs(buf, len);
|
i = x_emacs(buf);
|
||||||
#if !MKSH_S_NOVI
|
#if !MKSH_S_NOVI
|
||||||
else if (Flag(FVI))
|
else if (Flag(FVI))
|
||||||
i = x_vi(buf, len);
|
i = x_vi(buf);
|
||||||
#endif
|
#endif
|
||||||
else
|
else
|
||||||
/* internal error */
|
/* internal error */
|
||||||
@ -1181,12 +1181,13 @@ x_init_prompt(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_emacs(char *buf, size_t len)
|
x_emacs(char *buf)
|
||||||
{
|
{
|
||||||
int c, i;
|
int c, i;
|
||||||
unsigned char f;
|
unsigned char f;
|
||||||
|
|
||||||
xbp = xbuf = buf; xend = buf + len;
|
xbp = xbuf = buf;
|
||||||
|
xend = buf + LINE;
|
||||||
xlp = xcp = xep = buf;
|
xlp = xcp = xep = buf;
|
||||||
*xcp = 0;
|
*xcp = 0;
|
||||||
xlp_valid = true;
|
xlp_valid = true;
|
||||||
@ -1821,7 +1822,7 @@ x_load_hist(char **hp)
|
|||||||
char *sp = NULL;
|
char *sp = NULL;
|
||||||
|
|
||||||
if (hp == histptr + 1) {
|
if (hp == histptr + 1) {
|
||||||
sp = holdbuf;
|
sp = holdbufp;
|
||||||
modified = 0;
|
modified = 0;
|
||||||
} else if (hp < history || hp > histptr) {
|
} else if (hp < history || hp > histptr) {
|
||||||
x_e_putc2(7);
|
x_e_putc2(7);
|
||||||
@ -1832,7 +1833,7 @@ x_load_hist(char **hp)
|
|||||||
x_histp = hp;
|
x_histp = hp;
|
||||||
oldsize = x_size_str(xbuf);
|
oldsize = x_size_str(xbuf);
|
||||||
if (modified)
|
if (modified)
|
||||||
strlcpy(holdbuf, xbuf, sizeof(holdbuf));
|
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 = xbuf + strlen(xbuf);
|
||||||
@ -3360,9 +3361,9 @@ static void yank_range(int, int);
|
|||||||
static int bracktype(int);
|
static int bracktype(int);
|
||||||
static void save_cbuf(void);
|
static void save_cbuf(void);
|
||||||
static void restore_cbuf(void);
|
static void restore_cbuf(void);
|
||||||
static int putbuf(const char *, ssize_t, int);
|
static int putbuf(const char *, ssize_t, bool);
|
||||||
static void del_range(int, int);
|
static void del_range(int, int);
|
||||||
static int findch(int, int, int, int);
|
static int findch(int, int, bool, bool);
|
||||||
static int forwword(int);
|
static int forwword(int);
|
||||||
static int backword(int);
|
static int backword(int);
|
||||||
static int endword(int);
|
static int endword(int);
|
||||||
@ -3460,24 +3461,22 @@ static const unsigned char classify[128] = {
|
|||||||
#define VVERSION 10 /* <ESC> ^V */
|
#define VVERSION 10 /* <ESC> ^V */
|
||||||
#define VPREFIX2 11 /* ^[[ and ^[O in insert mode */
|
#define VPREFIX2 11 /* ^[[ and ^[O in insert mode */
|
||||||
|
|
||||||
static char undocbuf[LINE];
|
|
||||||
|
|
||||||
static struct edstate *save_edstate(struct edstate *old);
|
static struct edstate *save_edstate(struct edstate *old);
|
||||||
static void restore_edstate(struct edstate *old, struct edstate *news);
|
static void restore_edstate(struct edstate *old, struct edstate *news);
|
||||||
static void free_edstate(struct edstate *old);
|
static void free_edstate(struct edstate *old);
|
||||||
|
|
||||||
static struct edstate ebuf;
|
static struct edstate ebuf;
|
||||||
static struct edstate undobuf = { undocbuf, 0, LINE, 0, 0 };
|
static struct edstate undobuf;
|
||||||
|
|
||||||
static struct edstate *es; /* current editor state */
|
static struct edstate *es; /* current editor state */
|
||||||
static struct edstate *undo;
|
static struct edstate *undo;
|
||||||
|
|
||||||
static char ibuf[LINE]; /* input buffer */
|
static char *ibuf; /* input buffer */
|
||||||
static int first_insert; /* set when starting in insert mode */
|
static bool first_insert; /* set when starting in insert mode */
|
||||||
static int saved_inslen; /* saved inslen for first insert */
|
static int saved_inslen; /* saved inslen for first insert */
|
||||||
static int inslen; /* length of input buffer */
|
static int inslen; /* length of input buffer */
|
||||||
static int srchlen; /* length of current search pattern */
|
static int srchlen; /* length of current search pattern */
|
||||||
static char ybuf[LINE]; /* yank buffer */
|
static char *ybuf; /* yank buffer */
|
||||||
static int yanklen; /* length of yank buffer */
|
static int yanklen; /* length of yank buffer */
|
||||||
static int fsavecmd = ' '; /* last find command */
|
static int fsavecmd = ' '; /* last find command */
|
||||||
static int fsavech; /* character to find */
|
static int fsavech; /* character to find */
|
||||||
@ -3485,7 +3484,7 @@ static char lastcmd[MAXVICMD]; /* last non-move command */
|
|||||||
static int lastac; /* argcnt for lastcmd */
|
static int lastac; /* argcnt for lastcmd */
|
||||||
static int lastsearch = ' '; /* last search command */
|
static int lastsearch = ' '; /* last search command */
|
||||||
static char srchpat[SRCHLEN]; /* last search pattern */
|
static char srchpat[SRCHLEN]; /* last search pattern */
|
||||||
static int insert; /* non-zero in insert mode */
|
static int insert; /* <>0 in insert mode */
|
||||||
static int hnum; /* position in history */
|
static int hnum; /* position in history */
|
||||||
static int ohnum; /* history line copied (after mod) */
|
static int ohnum; /* history line copied (after mod) */
|
||||||
static int hlast; /* 1 past last position in history */
|
static int hlast; /* 1 past last position in history */
|
||||||
@ -3511,7 +3510,7 @@ static enum expand_mode {
|
|||||||
} expanded;
|
} expanded;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x_vi(char *buf, size_t len)
|
x_vi(char *buf)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
@ -3519,26 +3518,29 @@ x_vi(char *buf, size_t len)
|
|||||||
ohnum = hnum = hlast = histnum(-1) + 1;
|
ohnum = hnum = hlast = histnum(-1) + 1;
|
||||||
insert = INSERT;
|
insert = INSERT;
|
||||||
saved_inslen = inslen;
|
saved_inslen = inslen;
|
||||||
first_insert = 1;
|
first_insert = true;
|
||||||
inslen = 0;
|
inslen = 0;
|
||||||
vi_macro_reset();
|
vi_macro_reset();
|
||||||
|
|
||||||
|
ebuf.cbuf = buf;
|
||||||
|
if (undobuf.cbuf == NULL) {
|
||||||
|
ibuf = alloc(LINE, AEDIT);
|
||||||
|
ybuf = alloc(LINE, AEDIT);
|
||||||
|
undobuf.cbuf = alloc(LINE, AEDIT);
|
||||||
|
}
|
||||||
|
undobuf.cbufsize = ebuf.cbufsize = LINE;
|
||||||
|
undobuf.linelen = ebuf.linelen = 0;
|
||||||
|
undobuf.cursor = ebuf.cursor = 0;
|
||||||
|
undobuf.winleft = ebuf.winleft = 0;
|
||||||
es = &ebuf;
|
es = &ebuf;
|
||||||
es->cbuf = buf;
|
|
||||||
undo = &undobuf;
|
undo = &undobuf;
|
||||||
undo->cbufsize = es->cbufsize = len > LINE ? LINE : len;
|
|
||||||
|
|
||||||
es->linelen = undo->linelen = 0;
|
|
||||||
es->cursor = undo->cursor = 0;
|
|
||||||
es->winleft = undo->winleft = 0;
|
|
||||||
|
|
||||||
x_init_prompt();
|
x_init_prompt();
|
||||||
x_col = pwidth;
|
x_col = pwidth;
|
||||||
|
|
||||||
if (!wbuf_len || wbuf_len != x_cols - 3) {
|
if (wbuf_len != x_cols - 3 && ((wbuf_len = x_cols - 3))) {
|
||||||
wbuf_len = x_cols - 3;
|
wbuf[0] = aresize(wbuf[0], wbuf_len, AEDIT);
|
||||||
wbuf[0] = aresize(wbuf[0], wbuf_len, APERM);
|
wbuf[1] = aresize(wbuf[1], wbuf_len, AEDIT);
|
||||||
wbuf[1] = aresize(wbuf[1], wbuf_len, APERM);
|
|
||||||
}
|
}
|
||||||
if (wbuf_len) {
|
if (wbuf_len) {
|
||||||
memset(wbuf[0], ' ', wbuf_len);
|
memset(wbuf[0], ' ', wbuf_len);
|
||||||
@ -3595,11 +3597,11 @@ x_vi(char *buf, size_t len)
|
|||||||
x_putc('\n');
|
x_putc('\n');
|
||||||
x_flush();
|
x_flush();
|
||||||
|
|
||||||
if (c == -1 || (ssize_t)len <= es->linelen)
|
if (c == -1 || (ssize_t)LINE <= es->linelen)
|
||||||
return (-1);
|
return (-1);
|
||||||
|
|
||||||
if (es->cbuf != buf)
|
if (es->cbuf != buf)
|
||||||
memmove(buf, es->cbuf, es->linelen);
|
memcpy(buf, es->cbuf, es->linelen);
|
||||||
|
|
||||||
buf[es->linelen++] = '\n';
|
buf[es->linelen++] = '\n';
|
||||||
|
|
||||||
@ -3650,10 +3652,8 @@ vi_hook(int ch)
|
|||||||
save_cbuf();
|
save_cbuf();
|
||||||
es->cursor = 0;
|
es->cursor = 0;
|
||||||
es->linelen = 0;
|
es->linelen = 0;
|
||||||
if (ch == '/') {
|
if (putbuf(ch == '/' ? "/" : "?", 1,
|
||||||
if (putbuf("/", 1, 0) != 0)
|
false) != 0)
|
||||||
return (-1);
|
|
||||||
} else if (putbuf("?", 1, 0) != 0)
|
|
||||||
return (-1);
|
return (-1);
|
||||||
refresh(0);
|
refresh(0);
|
||||||
}
|
}
|
||||||
@ -3662,7 +3662,7 @@ vi_hook(int ch)
|
|||||||
es->cursor = 0;
|
es->cursor = 0;
|
||||||
es->linelen = 0;
|
es->linelen = 0;
|
||||||
putbuf(KSH_VERSION,
|
putbuf(KSH_VERSION,
|
||||||
strlen(KSH_VERSION), 0);
|
strlen(KSH_VERSION), false);
|
||||||
refresh(0);
|
refresh(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3993,7 +3993,7 @@ vi_insert(int ch)
|
|||||||
case Ctrl('['):
|
case Ctrl('['):
|
||||||
expanded = NONE;
|
expanded = NONE;
|
||||||
if (first_insert) {
|
if (first_insert) {
|
||||||
first_insert = 0;
|
first_insert = false;
|
||||||
if (inslen == 0) {
|
if (inslen == 0) {
|
||||||
inslen = saved_inslen;
|
inslen = saved_inslen;
|
||||||
return (redo_insert(0));
|
return (redo_insert(0));
|
||||||
@ -4105,12 +4105,12 @@ vi_cmd(int argcnt, const char *cmd)
|
|||||||
* at this point, it's fairly reasonable that
|
* at this point, it's fairly reasonable that
|
||||||
* nlen + olen + 2 doesn't overflow
|
* nlen + olen + 2 doesn't overflow
|
||||||
*/
|
*/
|
||||||
nbuf = alloc(nlen + 1 + olen, APERM);
|
nbuf = alloc(nlen + 1 + olen, AEDIT);
|
||||||
memcpy(nbuf, ap->val.s, nlen);
|
memcpy(nbuf, ap->val.s, nlen);
|
||||||
nbuf[nlen++] = cmd[1];
|
nbuf[nlen++] = cmd[1];
|
||||||
if (macro.p) {
|
if (macro.p) {
|
||||||
memcpy(nbuf + nlen, macro.p, olen);
|
memcpy(nbuf + nlen, macro.p, olen);
|
||||||
afree(macro.buf, APERM);
|
afree(macro.buf, AEDIT);
|
||||||
nlen += olen;
|
nlen += olen;
|
||||||
} else {
|
} else {
|
||||||
nbuf[nlen++] = '\0';
|
nbuf[nlen++] = '\0';
|
||||||
@ -4195,7 +4195,8 @@ vi_cmd(int argcnt, const char *cmd)
|
|||||||
hnum = hlast;
|
hnum = hlast;
|
||||||
if (es->linelen != 0)
|
if (es->linelen != 0)
|
||||||
es->cursor++;
|
es->cursor++;
|
||||||
while (putbuf(ybuf, yanklen, 0) == 0 && --argcnt > 0)
|
while (putbuf(ybuf, yanklen, false) == 0 &&
|
||||||
|
--argcnt > 0)
|
||||||
;
|
;
|
||||||
if (es->cursor != 0)
|
if (es->cursor != 0)
|
||||||
es->cursor--;
|
es->cursor--;
|
||||||
@ -4207,7 +4208,8 @@ vi_cmd(int argcnt, const char *cmd)
|
|||||||
modified = 1;
|
modified = 1;
|
||||||
hnum = hlast;
|
hnum = hlast;
|
||||||
any = 0;
|
any = 0;
|
||||||
while (putbuf(ybuf, yanklen, 0) == 0 && --argcnt > 0)
|
while (putbuf(ybuf, yanklen, false) == 0 &&
|
||||||
|
--argcnt > 0)
|
||||||
any = 1;
|
any = 1;
|
||||||
if (any && es->cursor != 0)
|
if (any && es->cursor != 0)
|
||||||
es->cursor--;
|
es->cursor--;
|
||||||
@ -4458,8 +4460,8 @@ vi_cmd(int argcnt, const char *cmd)
|
|||||||
argcnt++;
|
argcnt++;
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
if (putbuf(" ", 1, 0) != 0 ||
|
if (putbuf(" ", 1, false) != 0 ||
|
||||||
putbuf(sp, argcnt, 0) != 0) {
|
putbuf(sp, argcnt, false) != 0) {
|
||||||
if (es->cursor != 0)
|
if (es->cursor != 0)
|
||||||
es->cursor--;
|
es->cursor--;
|
||||||
return (-1);
|
return (-1);
|
||||||
@ -4602,7 +4604,8 @@ domove(int argcnt, const char *cmd, int sub)
|
|||||||
t = fsavecmd > 'a';
|
t = fsavecmd > 'a';
|
||||||
if (*cmd == ',')
|
if (*cmd == ',')
|
||||||
t = !t;
|
t = !t;
|
||||||
if ((ncursor = findch(fsavech, argcnt, t, i)) < 0)
|
if ((ncursor = findch(fsavech, argcnt, tobool(t),
|
||||||
|
tobool(i))) < 0)
|
||||||
return (-1);
|
return (-1);
|
||||||
if (sub && t)
|
if (sub && t)
|
||||||
ncursor++;
|
ncursor++;
|
||||||
@ -4702,7 +4705,7 @@ static int
|
|||||||
redo_insert(int count)
|
redo_insert(int count)
|
||||||
{
|
{
|
||||||
while (count-- > 0)
|
while (count-- > 0)
|
||||||
if (putbuf(ibuf, inslen, insert == REPLACE) != 0)
|
if (putbuf(ibuf, inslen, tobool(insert == REPLACE)) != 0)
|
||||||
return (-1);
|
return (-1);
|
||||||
if (es->cursor > 0)
|
if (es->cursor > 0)
|
||||||
es->cursor--;
|
es->cursor--;
|
||||||
@ -4753,9 +4756,9 @@ bracktype(int ch)
|
|||||||
static void
|
static void
|
||||||
save_cbuf(void)
|
save_cbuf(void)
|
||||||
{
|
{
|
||||||
memmove(holdbuf, es->cbuf, es->linelen);
|
memmove(holdbufp, es->cbuf, es->linelen);
|
||||||
holdlen = es->linelen;
|
holdlen = es->linelen;
|
||||||
holdbuf[holdlen] = '\0';
|
holdbufp[holdlen] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -4763,7 +4766,7 @@ restore_cbuf(void)
|
|||||||
{
|
{
|
||||||
es->cursor = 0;
|
es->cursor = 0;
|
||||||
es->linelen = holdlen;
|
es->linelen = holdlen;
|
||||||
memmove(es->cbuf, holdbuf, holdlen);
|
memmove(es->cbuf, holdbufp, holdlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return a new edstate */
|
/* return a new edstate */
|
||||||
@ -4772,8 +4775,8 @@ save_edstate(struct edstate *old)
|
|||||||
{
|
{
|
||||||
struct edstate *news;
|
struct edstate *news;
|
||||||
|
|
||||||
news = alloc(sizeof(struct edstate), APERM);
|
news = alloc(sizeof(struct edstate), AEDIT);
|
||||||
news->cbuf = alloc(old->cbufsize, APERM);
|
news->cbuf = alloc(old->cbufsize, AEDIT);
|
||||||
memcpy(news->cbuf, old->cbuf, old->linelen);
|
memcpy(news->cbuf, old->cbuf, old->linelen);
|
||||||
news->cbufsize = old->cbufsize;
|
news->cbufsize = old->cbufsize;
|
||||||
news->linelen = old->linelen;
|
news->linelen = old->linelen;
|
||||||
@ -4795,8 +4798,8 @@ restore_edstate(struct edstate *news, struct edstate *old)
|
|||||||
static void
|
static void
|
||||||
free_edstate(struct edstate *old)
|
free_edstate(struct edstate *old)
|
||||||
{
|
{
|
||||||
afree(old->cbuf, APERM);
|
afree(old->cbuf, AEDIT);
|
||||||
afree(old, APERM);
|
afree(old, AEDIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -4805,11 +4808,11 @@ free_edstate(struct edstate *old)
|
|||||||
static int
|
static int
|
||||||
x_vi_putbuf(const char *s, size_t len)
|
x_vi_putbuf(const char *s, size_t len)
|
||||||
{
|
{
|
||||||
return (putbuf(s, len, 0));
|
return (putbuf(s, len, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
putbuf(const char *buf, ssize_t len, int repl)
|
putbuf(const char *buf, ssize_t len, bool repl)
|
||||||
{
|
{
|
||||||
if (len == 0)
|
if (len == 0)
|
||||||
return (0);
|
return (0);
|
||||||
@ -4839,7 +4842,7 @@ del_range(int a, int b)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
findch(int ch, int cnt, int forw, int incl)
|
findch(int ch, int cnt, bool forw, bool incl)
|
||||||
{
|
{
|
||||||
int ncursor;
|
int ncursor;
|
||||||
|
|
||||||
@ -5035,8 +5038,8 @@ grabsearch(int save, int start, int fwd, const char *pat)
|
|||||||
start--;
|
start--;
|
||||||
anchored = *pat == '^' ? (++pat, 1) : 0;
|
anchored = *pat == '^' ? (++pat, 1) : 0;
|
||||||
if ((hist = findhist(start, fwd, pat, anchored)) < 0) {
|
if ((hist = findhist(start, fwd, pat, anchored)) < 0) {
|
||||||
/* (start != 0 && fwd && match(holdbuf, pat) >= 0) */
|
/* (start != 0 && fwd && match(holdbufp, pat) >= 0) */
|
||||||
if (start != 0 && fwd && strcmp(holdbuf, pat) >= 0) {
|
if (start != 0 && fwd && strcmp(holdbufp, pat) >= 0) {
|
||||||
restore_cbuf();
|
restore_cbuf();
|
||||||
return (0);
|
return (0);
|
||||||
} else
|
} else
|
||||||
@ -5275,7 +5278,7 @@ expand_word(int cmd)
|
|||||||
rval = -1;
|
rval = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (++i < nwords && putbuf(" ", 1, 0) != 0) {
|
if (++i < nwords && putbuf(" ", 1, false) != 0) {
|
||||||
rval = -1;
|
rval = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -5393,7 +5396,7 @@ complete_word(int cmd, int count)
|
|||||||
*/
|
*/
|
||||||
if (match_len > 0 && match[match_len - 1] != '/' &&
|
if (match_len > 0 && match[match_len - 1] != '/' &&
|
||||||
!(flags & XCF_IS_NOSPACE))
|
!(flags & XCF_IS_NOSPACE))
|
||||||
rval = putbuf(" ", 1, 0);
|
rval = putbuf(" ", 1, false);
|
||||||
}
|
}
|
||||||
x_free_words(nwords, words);
|
x_free_words(nwords, words);
|
||||||
|
|
||||||
@ -5450,7 +5453,7 @@ static void
|
|||||||
vi_macro_reset(void)
|
vi_macro_reset(void)
|
||||||
{
|
{
|
||||||
if (macro.p) {
|
if (macro.p) {
|
||||||
afree(macro.buf, APERM);
|
afree(macro.buf, AEDIT);
|
||||||
memset((char *)¯o, 0, sizeof(macro));
|
memset((char *)¯o, 0, sizeof(macro));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5471,8 +5474,11 @@ x_init(void)
|
|||||||
/* ^W */
|
/* ^W */
|
||||||
edchars.werase = 027;
|
edchars.werase = 027;
|
||||||
|
|
||||||
/* initialise Emacs command line editing mode */
|
/* command line editing specific memory allocation */
|
||||||
ainit(AEDIT);
|
ainit(AEDIT);
|
||||||
|
holdbufp = alloc(LINE, AEDIT);
|
||||||
|
|
||||||
|
/* initialise Emacs command line editing mode */
|
||||||
x_nextcmd = -1;
|
x_nextcmd = -1;
|
||||||
|
|
||||||
x_tab = alloc2(X_NTABS, sizeof(*x_tab), AEDIT);
|
x_tab = alloc2(X_NTABS, sizeof(*x_tab), AEDIT);
|
||||||
|
4
lex.c
4
lex.c
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/lex.c,v 1.187 2013/07/26 20:33:38 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/lex.c,v 1.188 2013/08/10 13:44:31 tg Exp $");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* states while lexing word
|
* states while lexing word
|
||||||
@ -1387,7 +1387,7 @@ getsc_line(Source *s)
|
|||||||
Flag(FEMACS) || Flag(FGMACS))) {
|
Flag(FEMACS) || Flag(FGMACS))) {
|
||||||
int nread;
|
int nread;
|
||||||
|
|
||||||
nread = x_read(xp, LINE);
|
nread = x_read(xp);
|
||||||
if (nread < 0)
|
if (nread < 0)
|
||||||
/* read error */
|
/* read error */
|
||||||
nread = 0;
|
nread = 0;
|
||||||
|
20
mksh.1
20
mksh.1
@ -1,4 +1,4 @@
|
|||||||
.\" $MirOS: src/bin/mksh/mksh.1,v 1.318 2013/07/21 18:47:21 tg Exp $
|
.\" $MirOS: src/bin/mksh/mksh.1,v 1.319 2013/08/10 13:44:31 tg Exp $
|
||||||
.\" $OpenBSD: ksh.1,v 1.147 2013/06/13 19:43:09 millert Exp $
|
.\" $OpenBSD: ksh.1,v 1.147 2013/06/13 19:43:09 millert Exp $
|
||||||
.\"-
|
.\"-
|
||||||
.\" Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
|
.\" Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
|
||||||
@ -74,7 +74,7 @@
|
|||||||
.\" with -mandoc, it might implement .Mx itself, but we want to
|
.\" with -mandoc, it might implement .Mx itself, but we want to
|
||||||
.\" use our own definition. And .Dd must come *first*, always.
|
.\" use our own definition. And .Dd must come *first*, always.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: July 21 2013 $
|
.Dd $Mdocdate: August 10 2013 $
|
||||||
.\"
|
.\"
|
||||||
.\" Check which macro package we use, and do other -mdoc setup.
|
.\" Check which macro package we use, and do other -mdoc setup.
|
||||||
.\"
|
.\"
|
||||||
@ -6367,6 +6367,17 @@ all contributors, such as the Debian and OpenBSD projects.
|
|||||||
.\" Open Source licence.
|
.\" Open Source licence.
|
||||||
.\"
|
.\"
|
||||||
See the documentation, CVS, and web site for details.
|
See the documentation, CVS, and web site for details.
|
||||||
|
.Pp
|
||||||
|
The BSD daemon is Copyright \(co Marshall Kirk McKusick.
|
||||||
|
The complete legalese is at:
|
||||||
|
.Pa https://www.mirbsd.org/TaC\-mksh.txt
|
||||||
|
.\"
|
||||||
|
.\" This boils down to: feel free to use mksh.ico as application icon
|
||||||
|
.\" or shortcut for mksh or mksh/Win32; distro patches are ok (but we
|
||||||
|
.\" request they amend $KSH_VERSION when modifying mksh). Authors are
|
||||||
|
.\" Marshall Kirk McKusick (UCB), Rick Collette (ekkoBSD), Thorsten
|
||||||
|
.\" Glaser, Benny Siegert (MirBSD), Michael Langguth (mksh/Win32).
|
||||||
|
.\"
|
||||||
.Sh CAVEATS
|
.Sh CAVEATS
|
||||||
.Nm
|
.Nm
|
||||||
only supports the Unicode BMP (Basic Multilingual Plane).
|
only supports the Unicode BMP (Basic Multilingual Plane).
|
||||||
@ -6381,7 +6392,8 @@ This can cause issues with a
|
|||||||
to suddenly point to a local variable by accident; fixing this is hard.
|
to suddenly point to a local variable by accident; fixing this is hard.
|
||||||
.Pp
|
.Pp
|
||||||
The parts of a pipeline, like below, are executed in subshells.
|
The parts of a pipeline, like below, are executed in subshells.
|
||||||
Thus, variable assignments inside them fail.
|
Thus, variable assignments inside them are not visible in the
|
||||||
|
surrounding execution environment.
|
||||||
Use co-processes instead.
|
Use co-processes instead.
|
||||||
.Bd -literal -offset indent
|
.Bd -literal -offset indent
|
||||||
foo \*(Ba bar \*(Ba read baz # will not change $baz
|
foo \*(Ba bar \*(Ba read baz # will not change $baz
|
||||||
@ -6408,7 +6420,7 @@ $ /bin/sleep 666 && echo fubar
|
|||||||
.Ed
|
.Ed
|
||||||
.Pp
|
.Pp
|
||||||
This document attempts to describe
|
This document attempts to describe
|
||||||
.Nm mksh\ R47
|
.Nm mksh\ R48
|
||||||
and up,
|
and up,
|
||||||
compiled without any options impacting functionality, such as
|
compiled without any options impacting functionality, such as
|
||||||
.Dv MKSH_SMALL ,
|
.Dv MKSH_SMALL ,
|
||||||
|
10
sh.h
10
sh.h
@ -164,9 +164,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef EXTERN
|
#ifdef EXTERN
|
||||||
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.663 2013/07/26 20:33:39 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.664 2013/08/10 13:44:33 tg Exp $");
|
||||||
#endif
|
#endif
|
||||||
#define MKSH_VERSION "R47 2013/07/26"
|
#define MKSH_VERSION "R47 2013/08/10"
|
||||||
|
|
||||||
/* arithmetic types: C implementation */
|
/* arithmetic types: C implementation */
|
||||||
#if !HAVE_CAN_INTTYPES
|
#if !HAVE_CAN_INTTYPES
|
||||||
@ -518,7 +518,7 @@ char *ucstrstr(char *, const char *);
|
|||||||
#define mkssert(e) do { } while (/* CONSTCOND */ 0)
|
#define mkssert(e) do { } while (/* CONSTCOND */ 0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (!defined(MKSH_BUILDMAKEFILE4BSD) && !defined(MKSH_BUILDSH)) || (MKSH_BUILD_R != 471)
|
#if (!defined(MKSH_BUILDMAKEFILE4BSD) && !defined(MKSH_BUILDSH)) || (MKSH_BUILD_R != 481)
|
||||||
#error Must run Build.sh to compile this.
|
#error Must run Build.sh to compile this.
|
||||||
extern void thiswillneverbedefinedIhope(void);
|
extern void thiswillneverbedefinedIhope(void);
|
||||||
int
|
int
|
||||||
@ -991,7 +991,7 @@ EXTERN uint32_t builtin_flag;
|
|||||||
EXTERN char *current_wd;
|
EXTERN char *current_wd;
|
||||||
|
|
||||||
/* input line size */
|
/* input line size */
|
||||||
#define LINE 4096
|
#define LINE (4096 - ALLOC_SIZE)
|
||||||
/*
|
/*
|
||||||
* Minimum required space to work with on a line - if the prompt leaves
|
* Minimum required space to work with on a line - if the prompt leaves
|
||||||
* less space than this on a line, the prompt is truncated.
|
* less space than this on a line, the prompt is truncated.
|
||||||
@ -1683,7 +1683,7 @@ void x_init(void);
|
|||||||
#ifdef DEBUG_LEAKS
|
#ifdef DEBUG_LEAKS
|
||||||
void x_done(void);
|
void x_done(void);
|
||||||
#endif
|
#endif
|
||||||
int x_read(char *, size_t);
|
int x_read(char *);
|
||||||
#endif
|
#endif
|
||||||
void x_mkraw(int, mksh_ttyst *, bool);
|
void x_mkraw(int, mksh_ttyst *, bool);
|
||||||
/* eval.c */
|
/* eval.c */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user