diff -urpN mtree-3.7.20050808.orig/include/vis.h mtree-3.7.20050808-freebsd-vis/include/vis.h --- mtree-3.7.20050808.orig/include/vis.h Sun Oct 17 20:25:31 2004 +++ mtree-3.7.20050808-freebsd-vis/include/vis.h Mon Aug 8 16:47:16 2005 @@ -55,6 +55,7 @@ * other */ #define VIS_NOSLASH 0x40 /* inhibit printing '\' */ +#define VIS_GLOB 0x100 /* encode glob(3) magics and '#' */ /* * unvis return codes diff -urpN mtree-3.7.20050808.orig/lib/libc/gen/vis.3 mtree-3.7.20050808-freebsd-vis/lib/libc/gen/vis.3 --- mtree-3.7.20050808.orig/lib/libc/gen/vis.3 Fri Feb 25 03:12:43 2005 +++ mtree-3.7.20050808-freebsd-vis/lib/libc/gen/vis.3 Mon Aug 8 16:39:02 2005 @@ -27,7 +27,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd June 9, 1993 +.Dd August 8, 2005 .Dt VIS 3 .Os .Sh NAME @@ -163,6 +163,14 @@ except space, tab, and newline are encod The following flags alter this: .Bl -tag -width VIS_WHITEX +.It Dv VIS_GLOB +Also encode magic characters recognized by +.Xr glob 3 +.Ql ( * , +.Ql \&? , +.Ql \&[ ) +and +.Ql # . .It Dv VIS_SP Also encode space. .It Dv VIS_TAB diff -urpN mtree-3.7.20050808.orig/lib/libc/gen/vis.c mtree-3.7.20050808-freebsd-vis/lib/libc/gen/vis.c --- mtree-3.7.20050808.orig/lib/libc/gen/vis.c Fri Mar 25 15:38:47 2005 +++ mtree-3.7.20050808-freebsd-vis/lib/libc/gen/vis.c Mon Aug 8 17:51:28 2005 @@ -37,15 +37,19 @@ static char rcsid[] = "$OpenBSD: vis.c,v #include #include -#define isoctal(c) (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7') -#define isvisible(c) (((u_int)(c) <= UCHAR_MAX && isascii((u_char)(c)) && \ - isgraph((u_char)(c))) || \ - ((flag & VIS_SP) == 0 && (c) == ' ') || \ - ((flag & VIS_TAB) == 0 && (c) == '\t') || \ - ((flag & VIS_NL) == 0 && (c) == '\n') || \ - ((flag & VIS_SAFE) && ((c) == '\b' || \ - (c) == '\007' || (c) == '\r' || \ - isgraph((u_char)(c))))) +#define isoctal(c) \ + (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7') +#define isvisible(c) \ + (((u_int)(c) <= UCHAR_MAX && isascii((u_char)(c))) && \ + (((((c) != '*' && (c) != '?' && (c) != '[' && (c) != '#') || \ + (flag & VIS_GLOB) == 0) && \ + isgraph((u_char)(c))) || \ + ((flag & VIS_SP) == 0 && (c) == ' ') || \ + ((flag & VIS_TAB) == 0 && (c) == '\t') || \ + ((flag & VIS_NL) == 0 && (c) == '\n') || \ + ((flag & VIS_SAFE) && ((c) == '\b' || \ + (c) == '\007' || (c) == '\r' || \ + isgraph((u_char)(c)))))) /* * vis - visually encode characters @@ -105,7 +109,7 @@ vis(char *dst, int c, int flag, int next goto done; } } - if (((c & 0177) == ' ') || (flag & VIS_OCTAL)) { + if (((c & 0177) == ' ') || isgraph(c) || (flag & VIS_OCTAL)) { *dst++ = '\\'; *dst++ = ((u_char)c >> 6 & 07) + '0'; *dst++ = ((u_char)c >> 3 & 07) + '0';