fix 'mksh -U -i' and 'mksh +U -i'
This commit is contained in:
parent
a09f05e77a
commit
fa3acb939b
23
check.t
23
check.t
@ -1,4 +1,4 @@
|
|||||||
# $MirOS: src/bin/mksh/check.t,v 1.345 2009/11/28 14:27:58 tg Exp $
|
# $MirOS: src/bin/mksh/check.t,v 1.346 2009/11/28 15:38:28 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 $
|
||||||
@ -25,7 +25,7 @@
|
|||||||
# http://www.research.att.com/~gsf/public/ifs.sh
|
# http://www.research.att.com/~gsf/public/ifs.sh
|
||||||
|
|
||||||
expected-stdout:
|
expected-stdout:
|
||||||
@(#)MIRBSD KSH R39 2009/11/22
|
@(#)MIRBSD KSH R39 2009/11/28
|
||||||
description:
|
description:
|
||||||
Check version of shell.
|
Check version of shell.
|
||||||
stdin:
|
stdin:
|
||||||
@ -4832,6 +4832,25 @@ expected-stdout:
|
|||||||
expected-stderr-pattern:
|
expected-stderr-pattern:
|
||||||
/(# )*/
|
/(# )*/
|
||||||
---
|
---
|
||||||
|
name: utf8opt-3
|
||||||
|
description:
|
||||||
|
Ensure ±U on the command line is honoured
|
||||||
|
(this test may pass falsely depending on CPPFLAGS)
|
||||||
|
stdin:
|
||||||
|
export i=0
|
||||||
|
code='if [[ $- = *U* ]]; then echo $i on; else echo $i off; fi'
|
||||||
|
let i++; "$__progname" -U -c "$code"
|
||||||
|
let i++; "$__progname" +U -c "$code"
|
||||||
|
let i++; "$__progname" -U -ic "$code"
|
||||||
|
let i++; "$__progname" +U -ic "$code"
|
||||||
|
echo $((++i)) done
|
||||||
|
expected-stdout:
|
||||||
|
1 on
|
||||||
|
2 off
|
||||||
|
3 on
|
||||||
|
4 off
|
||||||
|
5 done
|
||||||
|
---
|
||||||
name: aliases-1
|
name: aliases-1
|
||||||
description:
|
description:
|
||||||
Check if built-in shell aliases are okay
|
Check if built-in shell aliases are okay
|
||||||
|
40
main.c
40
main.c
@ -33,7 +33,7 @@
|
|||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.154 2009/10/30 14:37:42 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.155 2009/11/28 15:38:29 tg Exp $");
|
||||||
|
|
||||||
extern char **environ;
|
extern char **environ;
|
||||||
|
|
||||||
@ -45,6 +45,7 @@ extern gid_t kshgid, kshegid;
|
|||||||
static void reclaim(void);
|
static void reclaim(void);
|
||||||
static void remove_temps(struct temp *);
|
static void remove_temps(struct temp *);
|
||||||
void chvt_reinit(void);
|
void chvt_reinit(void);
|
||||||
|
Source *mksh_init(int, const char *[]);
|
||||||
|
|
||||||
static const char initifs[] = "IFS= \t\n";
|
static const char initifs[] = "IFS= \t\n";
|
||||||
|
|
||||||
@ -99,13 +100,13 @@ chvt_reinit(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
Source *
|
||||||
main(int argc, const char *argv[])
|
mksh_init(int argc, const char *argv[])
|
||||||
{
|
{
|
||||||
int argi, i;
|
int argi, i;
|
||||||
Source *s;
|
Source *s;
|
||||||
struct block *l;
|
struct block *l;
|
||||||
unsigned char restricted, errexit;
|
unsigned char restricted, errexit, utf_flag;
|
||||||
const char **wp;
|
const char **wp;
|
||||||
struct tbl *vp;
|
struct tbl *vp;
|
||||||
struct stat s_stdin;
|
struct stat s_stdin;
|
||||||
@ -140,7 +141,7 @@ main(int argc, const char *argv[])
|
|||||||
|
|
||||||
argi = parse_args(argv, OF_FIRSTTIME, NULL);
|
argi = parse_args(argv, OF_FIRSTTIME, NULL);
|
||||||
if (argi < 0)
|
if (argi < 0)
|
||||||
exit(1);
|
return (NULL);
|
||||||
|
|
||||||
initvar();
|
initvar();
|
||||||
|
|
||||||
@ -305,9 +306,16 @@ main(int argc, const char *argv[])
|
|||||||
#ifndef MKSH_UNEMPLOYED
|
#ifndef MKSH_UNEMPLOYED
|
||||||
Flag(FMONITOR) = 127;
|
Flag(FMONITOR) = 127;
|
||||||
#endif
|
#endif
|
||||||
|
/* this to note if utf-8 mode is set on command line (see below) */
|
||||||
|
UTFMODE = 2;
|
||||||
|
|
||||||
argi = parse_args(argv, OF_CMDLINE, NULL);
|
argi = parse_args(argv, OF_CMDLINE, NULL);
|
||||||
if (argi < 0)
|
if (argi < 0)
|
||||||
exit(1);
|
return (NULL);
|
||||||
|
|
||||||
|
/* process this later only, default to off (hysterical raisins) */
|
||||||
|
utf_flag = UTFMODE;
|
||||||
|
UTFMODE = 0;
|
||||||
|
|
||||||
if (Flag(FCOMMAND)) {
|
if (Flag(FCOMMAND)) {
|
||||||
s = pushs(SSTRING, ATEMP);
|
s = pushs(SSTRING, ATEMP);
|
||||||
@ -355,13 +363,15 @@ main(int argc, const char *argv[])
|
|||||||
|
|
||||||
/* initialise job control */
|
/* initialise job control */
|
||||||
j_init();
|
j_init();
|
||||||
|
/* set: 0/1; unset: 2->0 */
|
||||||
|
UTFMODE = utf_flag & 1;
|
||||||
/* Do this after j_init(), as tty_fd is not initialised until then */
|
/* Do this after j_init(), as tty_fd is not initialised until then */
|
||||||
if (Flag(FTALKING)) {
|
if (Flag(FTALKING)) {
|
||||||
|
if (utf_flag == 2) {
|
||||||
#ifndef MKSH_ASSUME_UTF8
|
#ifndef MKSH_ASSUME_UTF8
|
||||||
#define isuc(x) (((x) != NULL) && \
|
#define isuc(x) (((x) != NULL) && \
|
||||||
(stristr((x), "UTF-8") || stristr((x), "utf8")))
|
(stristr((x), "UTF-8") || stristr((x), "utf8")))
|
||||||
/* Check if we're in a UTF-8 locale */
|
/* Check if we're in a UTF-8 locale */
|
||||||
if (!UTFMODE) {
|
|
||||||
const char *ccp;
|
const char *ccp;
|
||||||
|
|
||||||
#if HAVE_SETLOCALE_CTYPE
|
#if HAVE_SETLOCALE_CTYPE
|
||||||
@ -379,13 +389,13 @@ main(int argc, const char *argv[])
|
|||||||
ccp = str_val(global("LANG"));
|
ccp = str_val(global("LANG"));
|
||||||
#endif
|
#endif
|
||||||
UTFMODE = isuc(ccp);
|
UTFMODE = isuc(ccp);
|
||||||
}
|
|
||||||
#undef isuc
|
#undef isuc
|
||||||
#elif MKSH_ASSUME_UTF8
|
#elif MKSH_ASSUME_UTF8
|
||||||
UTFMODE = 1;
|
UTFMODE = 1;
|
||||||
#else
|
#else
|
||||||
UTFMODE = 0;
|
UTFMODE = 0;
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
x_init();
|
x_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -443,8 +453,18 @@ main(int argc, const char *argv[])
|
|||||||
} else
|
} else
|
||||||
Flag(FTRACKALL) = 1; /* set after ENV */
|
Flag(FTRACKALL) = 1; /* set after ENV */
|
||||||
|
|
||||||
shell(s, true); /* doesn't return */
|
return (s);
|
||||||
return (0);
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, const char *argv[])
|
||||||
|
{
|
||||||
|
Source *s;
|
||||||
|
|
||||||
|
if ((s = mksh_init(argc, argv)))
|
||||||
|
/* doesn’t return */
|
||||||
|
shell(s, true);
|
||||||
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
4
sh.h
4
sh.h
@ -134,9 +134,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef EXTERN
|
#ifdef EXTERN
|
||||||
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.364 2009/11/28 14:28:02 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.365 2009/11/28 15:38:30 tg Exp $");
|
||||||
#endif
|
#endif
|
||||||
#define MKSH_VERSION "R39 2009/11/22"
|
#define MKSH_VERSION "R39 2009/11/28"
|
||||||
|
|
||||||
#ifndef MKSH_INCLUDES_ONLY
|
#ifndef MKSH_INCLUDES_ONLY
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user