call afreeall(AEDIT) upon close; related to LP#1106116
This commit is contained in:
parent
1da94d6159
commit
cb93db360d
89
edit.c
89
edit.c
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
* Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
||||||
* 2011, 2012
|
* 2011, 2012, 2013
|
||||||
* Thorsten Glaser <tg@mirbsd.org>
|
* Thorsten Glaser <tg@mirbsd.org>
|
||||||
*
|
*
|
||||||
* Provided that these terms and disclaimer and all copyright notices
|
* Provided that these terms and disclaimer and all copyright notices
|
||||||
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
#ifndef MKSH_NO_CMDLINE_EDITING
|
#ifndef MKSH_NO_CMDLINE_EDITING
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.261 2013/02/10 17:18:47 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.262 2013/02/10 17:38:13 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
|
||||||
@ -82,7 +82,6 @@ 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 *, size_t);
|
||||||
static void x_init_emacs(void);
|
|
||||||
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 *, size_t);
|
||||||
@ -107,21 +106,6 @@ static int x_e_rebuildline(const char *);
|
|||||||
|
|
||||||
/* +++ generic editing functions +++ */
|
/* +++ generic editing functions +++ */
|
||||||
|
|
||||||
/* Called from main */
|
|
||||||
void
|
|
||||||
x_init(void)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Set edchars to -2 to force initial binding, except
|
|
||||||
* we need default values for some deficient systems…
|
|
||||||
*/
|
|
||||||
edchars.erase = edchars.kill = edchars.intr = edchars.quit =
|
|
||||||
edchars.eof = -2;
|
|
||||||
/* ^W */
|
|
||||||
edchars.werase = 027;
|
|
||||||
x_init_emacs();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* read an edited command line
|
* read an edited command line
|
||||||
*/
|
*/
|
||||||
@ -2585,32 +2569,6 @@ x_bind(const char *a1, const char *a2,
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
x_init_emacs(void)
|
|
||||||
{
|
|
||||||
int i, j;
|
|
||||||
|
|
||||||
ainit(AEDIT);
|
|
||||||
x_nextcmd = -1;
|
|
||||||
|
|
||||||
x_tab = alloc2(X_NTABS, sizeof(*x_tab), AEDIT);
|
|
||||||
for (j = 0; j < X_TABSZ; j++)
|
|
||||||
x_tab[0][j] = XFUNC_insert;
|
|
||||||
for (i = 1; i < X_NTABS; i++)
|
|
||||||
for (j = 0; j < X_TABSZ; j++)
|
|
||||||
x_tab[i][j] = XFUNC_error;
|
|
||||||
for (i = 0; i < (int)NELEM(x_defbindings); i++)
|
|
||||||
x_tab[x_defbindings[i].xdb_tab][x_defbindings[i].xdb_char]
|
|
||||||
= x_defbindings[i].xdb_func;
|
|
||||||
|
|
||||||
#ifndef MKSH_SMALL
|
|
||||||
x_atab = alloc2(X_NTABS, sizeof(*x_atab), AEDIT);
|
|
||||||
for (i = 1; i < X_NTABS; i++)
|
|
||||||
for (j = 0; j < X_TABSZ; j++)
|
|
||||||
x_atab[i][j] = NULL;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
bind_if_not_bound(int p, int k, int func)
|
bind_if_not_bound(int p, int k, int func)
|
||||||
{
|
{
|
||||||
@ -5451,4 +5409,47 @@ vi_macro_reset(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* !MKSH_S_NOVI */
|
#endif /* !MKSH_S_NOVI */
|
||||||
|
|
||||||
|
/* called from main.c */
|
||||||
|
void
|
||||||
|
x_init(void)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set edchars to -2 to force initial binding, except
|
||||||
|
* we need default values for some deficient systems…
|
||||||
|
*/
|
||||||
|
edchars.erase = edchars.kill = edchars.intr = edchars.quit =
|
||||||
|
edchars.eof = -2;
|
||||||
|
/* ^W */
|
||||||
|
edchars.werase = 027;
|
||||||
|
|
||||||
|
/* initialise Emacs command line editing mode */
|
||||||
|
ainit(AEDIT);
|
||||||
|
x_nextcmd = -1;
|
||||||
|
|
||||||
|
x_tab = alloc2(X_NTABS, sizeof(*x_tab), AEDIT);
|
||||||
|
for (j = 0; j < X_TABSZ; j++)
|
||||||
|
x_tab[0][j] = XFUNC_insert;
|
||||||
|
for (i = 1; i < X_NTABS; i++)
|
||||||
|
for (j = 0; j < X_TABSZ; j++)
|
||||||
|
x_tab[i][j] = XFUNC_error;
|
||||||
|
for (i = 0; i < (int)NELEM(x_defbindings); i++)
|
||||||
|
x_tab[x_defbindings[i].xdb_tab][x_defbindings[i].xdb_char]
|
||||||
|
= x_defbindings[i].xdb_func;
|
||||||
|
|
||||||
|
#ifndef MKSH_SMALL
|
||||||
|
x_atab = alloc2(X_NTABS, sizeof(*x_atab), AEDIT);
|
||||||
|
for (i = 1; i < X_NTABS; i++)
|
||||||
|
for (j = 0; j < X_TABSZ; j++)
|
||||||
|
x_atab[i][j] = NULL;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
x_done(void)
|
||||||
|
{
|
||||||
|
afreeall(AEDIT);
|
||||||
|
}
|
||||||
#endif /* !MKSH_NO_CMDLINE_EDITING */
|
#endif /* !MKSH_NO_CMDLINE_EDITING */
|
||||||
|
9
main.c
9
main.c
@ -34,7 +34,7 @@
|
|||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.252 2013/01/06 18:44:07 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.253 2013/02/10 17:38:14 tg Exp $");
|
||||||
|
|
||||||
extern char **environ;
|
extern char **environ;
|
||||||
|
|
||||||
@ -998,6 +998,13 @@ quitenv(struct shf *shf)
|
|||||||
if (shf)
|
if (shf)
|
||||||
shf_close(shf);
|
shf_close(shf);
|
||||||
reclaim();
|
reclaim();
|
||||||
|
#ifdef DEBUG
|
||||||
|
#ifndef MKSH_NO_CMDLINE_EDITING
|
||||||
|
if (Flag(FTALKING))
|
||||||
|
x_done();
|
||||||
|
#endif
|
||||||
|
// afreeall(APERM);
|
||||||
|
#endif
|
||||||
exit(exstat & 0xFF);
|
exit(exstat & 0xFF);
|
||||||
}
|
}
|
||||||
if (shf)
|
if (shf)
|
||||||
|
3
sh.h
3
sh.h
@ -164,7 +164,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef EXTERN
|
#ifdef EXTERN
|
||||||
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.629 2013/02/10 17:18:49 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.630 2013/02/10 17:38:15 tg Exp $");
|
||||||
#endif
|
#endif
|
||||||
#define MKSH_VERSION "R41 2013/01/19"
|
#define MKSH_VERSION "R41 2013/01/19"
|
||||||
|
|
||||||
@ -1674,6 +1674,7 @@ int x_bind(const char *, const char *, bool, bool);
|
|||||||
int x_bind(const char *, const char *, bool);
|
int x_bind(const char *, const char *, bool);
|
||||||
#endif
|
#endif
|
||||||
void x_init(void);
|
void x_init(void);
|
||||||
|
void x_done(void);
|
||||||
int x_read(char *, size_t);
|
int x_read(char *, size_t);
|
||||||
#endif
|
#endif
|
||||||
void x_mkraw(int, mksh_ttyst *, bool);
|
void x_mkraw(int, mksh_ttyst *, bool);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user