From 9db3cb57b9b87fa081eadb9e1ab3f8d48e5df74f Mon Sep 17 00:00:00 2001 From: tg Date: Thu, 27 Apr 2017 23:33:22 +0000 Subject: [PATCH] allow : and [ in alias names (but forbid [[ explicitly) to make 'enable' completely work again --- funcs.c | 4 +++- mksh.1 | 10 ++++++---- sh.h | 14 +++++++------- shf.c | 6 +++--- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/funcs.c b/funcs.c index 4024563..635220f 100644 --- a/funcs.c +++ b/funcs.c @@ -38,7 +38,7 @@ #endif #endif -__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.346 2017/04/27 23:18:05 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.347 2017/04/27 23:33:18 tg Exp $"); #if HAVE_KILLPG /* @@ -747,6 +747,8 @@ valid_alias_name(const char *cp) { if (ord(*cp) == ord('-')) return (false); + if (ord(cp[0]) == ord('[') && ord(cp[1]) == ord('[') && !cp[2]) + return (false); while (*cp) if (ctype(*cp, C_ALIAS)) ++cp; diff --git a/mksh.1 b/mksh.1 index f28defd..23fc37f 100644 --- a/mksh.1 +++ b/mksh.1 @@ -1,4 +1,4 @@ -.\" $MirOS: src/bin/mksh/mksh.1,v 1.444 2017/04/21 19:08:18 tg Exp $ +.\" $MirOS: src/bin/mksh/mksh.1,v 1.445 2017/04/27 23:33:19 tg Exp $ .\" $OpenBSD: ksh.1,v 1.160 2015/07/04 13:27:04 feinerer Exp $ .\"- .\" Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, @@ -76,7 +76,7 @@ .\" with -mandoc, it might implement .Mx itself, but we want to .\" use our own definition. And .Dd must come *first*, always. .\" -.Dd $Mdocdate: April 21 2017 $ +.Dd $Mdocdate: April 27 2017 $ .\" .\" Check which macro package we use, and do other -mdoc setup. .\" @@ -3069,8 +3069,10 @@ For any name without a value, the existing alias is listed. Any name with a value defines an alias; see .Sx Aliases above. -.Li \&[A\-Za\-z0\-9_!%,.@\-] -are valid in names except they may not begin with a hyphen-minus. +.Li \&[][A\-Za\-z0\-9_!%,.@:\-] +are valid in names, except they may not begin with a hyphen-minus, and +.Ic \&[[ +is not a valid alias name. .Pp When listing aliases, one of two formats is used. Normally, aliases are listed as diff --git a/sh.h b/sh.h index b750b3e..19ba4c5 100644 --- a/sh.h +++ b/sh.h @@ -175,7 +175,7 @@ #endif #ifdef EXTERN -__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.818 2017/04/27 23:12:48 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.819 2017/04/27 23:33:20 tg Exp $"); #endif #define MKSH_VERSION "R55 2017/04/27" @@ -1319,7 +1319,7 @@ EXTERN bool really_exit; #define CiCOLON BIT(26) /* : */ #define CiEQUAL BIT(27) /* = */ #define CiQUEST BIT(28) /* ? */ -#define CiCBRK BIT(29) /* ] */ +#define CiBRACK BIT(29) /* ] */ #define CiUNDER BIT(30) /* _ */ #define CiGRAVE BIT(31) /* ` */ @@ -1332,8 +1332,8 @@ EXTERN char ifs0; /* external types */ -/* !%,-.0‥9@A‥Z_a‥z valid characters in alias name */ -#define C_ALIAS (CiALIAS | CiDIGIT | CiLOWER | CiMINUS | CiOCTAL | CiPERCT | CiUNDER | CiUPPER) +/* !%,-.0‥9:@A‥Z[]_a‥z valid characters in alias names */ +#define C_ALIAS (CiALIAS | CiBRACK | CiCOLON | CiDIGIT | CiLOWER | CiMINUS | CiOCTAL | CiPERCT | CiUNDER | CiUPPER) /* 0‥9A‥Za‥z alphanumerical */ #define C_ALNUM (CiDIGIT | CiLOWER | CiOCTAL | CiUPPER) /* 0‥9A‥Z_a‥z alphanumerical plus underscore (“word character”) */ @@ -1369,7 +1369,7 @@ EXTERN char ifs0; /* a‥z lowercase letters */ #define C_LOWER CiLOWER /* not alnux or dollar separator for motion */ -#define C_MFS (CiALIAS | CiANGLE | CiCBRK | CiCNTRL | CiCOLON | CiCR | CiCURLY | CiEQUAL | CiGRAVE | CiHASH | CiMINUS | CiNL | CiNUL | CiPERCT | CiPLUS | CiQC | CiQCL | CiQCM | CiQCX | CiQUEST | CiSP | CiSPX | CiTAB) +#define C_MFS (CiALIAS | CiANGLE | CiBRACK | CiCNTRL | CiCOLON | CiCR | CiCURLY | CiEQUAL | CiGRAVE | CiHASH | CiMINUS | CiNL | CiNUL | CiPERCT | CiPLUS | CiQC | CiQCL | CiQCM | CiQCX | CiQUEST | CiSP | CiSPX | CiTAB) /* 0‥7 octal digit */ #define C_OCTAL CiOCTAL /* \x20!*+?@ pattern magical operator */ @@ -1377,9 +1377,9 @@ EXTERN char ifs0; /* \x20‥~ POSIX printable characters (graph plus space) */ #define C_PRINT (C_GRAPH | CiSP) /* !"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ POSIX punctuation */ -#define C_PUNCT (CiALIAS | CiANGLE | CiCBRK | CiCOLON | CiCURLY | CiEQUAL | CiGRAVE | CiHASH | CiMINUS | CiPERCT | CiPLUS | CiQC | CiQCL | CiQCM | CiQCX | CiQUEST | CiSS | CiUNDER) +#define C_PUNCT (CiALIAS | CiANGLE | CiBRACK | CiCOLON | CiCURLY | CiEQUAL | CiGRAVE | CiHASH | CiMINUS | CiPERCT | CiPLUS | CiQC | CiQCL | CiQCM | CiQCX | CiQUEST | CiSS | CiUNDER) /* \x09\x0A"#$&'()*;<=>?[\\]`| characters requiring quoting, minus space */ -#define C_QUOTE (CiANGLE | CiCBRK | CiEQUAL | CiGRAVE | CiHASH | CiNL | CiQC | CiQCL | CiQCX | CiQUEST | CiSS | CiTAB) +#define C_QUOTE (CiANGLE | CiBRACK | CiEQUAL | CiGRAVE | CiHASH | CiNL | CiQC | CiQCL | CiQCX | CiQUEST | CiSS | CiTAB) /* 0‥9A‥Fa‥f hexadecimal digit */ #define C_SEDEC (CiDIGIT | CiHEXLT | CiOCTAL) /* \x09‥\x0D\x20 POSIX space class */ diff --git a/shf.c b/shf.c index 685c77a..c6bc45c 100644 --- a/shf.c +++ b/shf.c @@ -25,7 +25,7 @@ #include "sh.h" -__RCSID("$MirOS: src/bin/mksh/shf.c,v 1.83 2017/04/27 23:12:49 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/shf.c,v 1.84 2017/04/27 23:33:22 tg Exp $"); /* flags to shf_emptybuf() */ #define EB_READSW 0x01 /* about to switch to reading */ @@ -1191,8 +1191,8 @@ const uint32_t tpl_ctypes[128] = { /* 0x50 */ CiUPPER, CiUPPER, CiUPPER, CiUPPER, CiUPPER, CiUPPER, CiUPPER, CiUPPER, - CiUPPER, CiUPPER, CiUPPER, CiQCX, - CiQCX, CiCBRK, CiQCM, CiUNDER, + CiUPPER, CiUPPER, CiUPPER, CiQCX | CiBRACK, + CiQCX, CiBRACK, CiQCM, CiUNDER, /* 0x60 */ CiGRAVE, CiLOWER | CiHEXLT, CiLOWER | CiHEXLT, CiLOWER | CiHEXLT,