? lib/libc/gen/arc4random.c.diff ? lib/libc/gen/o ? lib/libc/gen/vis_test.pl ? lib/libc/gen/wvis.sh ? lib/libc/gen/x Index: include/vis.h =================================================================== RCS file: /cvsroot/src/include/vis.h,v retrieving revision 1.21 diff -u -p -u -r1.21 vis.h --- include/vis.h 20 Feb 2013 17:01:15 -0000 1.21 +++ include/vis.h 26 Sep 2014 00:23:52 -0000 @@ -63,6 +63,8 @@ #define VIS_NOESCAPE 0x0400 /* don't decode `\' */ #define _VIS_END 0x0800 /* for unvis */ #define VIS_GLOB 0x1000 /* encode glob(3) magic characters */ +#define VIS_SHELL 0x2000 /* encode shell special characters [not glob] */ +#define VIS_META (VIS_WHITE | VIS_GLOB | VIS_SHELL) /* * unvis return codes Index: lib/libc/gen/vis.3 =================================================================== RCS file: /cvsroot/src/lib/libc/gen/vis.3,v retrieving revision 1.39 diff -u -p -u -r1.39 vis.3 --- lib/libc/gen/vis.3 20 Feb 2013 20:05:26 -0000 1.39 +++ lib/libc/gen/vis.3 26 Sep 2014 00:23:52 -0000 @@ -244,6 +244,27 @@ and .Ql # ) recognized by .Xr glob 3 . +.It Dv VIS_SHELL +Also encode the meta characters used by shells (in addition to the glob +characters): +.Ql ( ' , +.Ql ` , +.Ql \*[q] , +.Ql \&; , +.Ql \*[Am] , +.Ql \*[Lt] , +.Ql \*[Gt] , +.Ql \&( , +.Ql \&) , +.Ql \&| , +.Ql \&] , +.Ql \&\\ , +.\" XXX: How do you print a $ +.Ql \e(Do , +.Ql \&! , +.Ql \&^ +and +.Ql ~ ). .It Dv VIS_SP Also encode space. .It Dv VIS_TAB @@ -257,6 +278,13 @@ Synonym for .Dv VIS_TAB \&| .Dv VIS_NL . +.It Dv VIS_META +Synonym for +.Dv VIS_WHITE +\&| +.Dv VIS_GLOB +\&| +.Dv VIS_SHELL . .It Dv VIS_SAFE Only encode .Dq unsafe Index: lib/libc/gen/vis.c =================================================================== RCS file: /cvsroot/src/lib/libc/gen/vis.c,v retrieving revision 1.62 diff -u -p -u -r1.62 vis.c --- lib/libc/gen/vis.c 8 Sep 2014 17:35:01 -0000 1.62 +++ lib/libc/gen/vis.c 26 Sep 2014 00:23:52 -0000 @@ -104,7 +104,10 @@ static wchar_t *do_svis(wchar_t *, wint_ #define xtoa(c) L"0123456789abcdef"[c] #define XTOA(c) L"0123456789ABCDEF"[c] -#define MAXEXTRAS 10 +#define MAXEXTRAS 30 + +static const wchar_t char_shell[] = L"'`\";&<>()|{}]\\$!^~"; +static const wchar_t char_glob[] = L"*?[#"; #if !HAVE_NBTOOL_CONFIG_H #ifndef __NetBSD__ @@ -318,16 +321,21 @@ makeextralist(int flags, const char *src if (mbstowcs(dst, src, len) == (size_t)-1) { size_t i; for (i = 0; i < len; i++) - dst[i] = (wint_t)(u_char)src[i]; + dst[i] = (wchar_t)(u_char)src[i]; d = dst + len; } else d = dst + wcslen(dst); if (flags & VIS_GLOB) { - *d++ = L'*'; - *d++ = L'?'; - *d++ = L'['; - *d++ = L'#'; + for (const wchar_t *s = char_glob; (*d++ = *s++) != '\0';) + continue; + d--; + } + + if (flags & VIS_SHELL) { + for (const wchar_t *s = char_shell; (*d++ = *s++) != '\0';) + continue; + d--; } if (flags & VIS_SP) *d++ = L' ';