diff --git a/usr.bin/expand/expand.1 b/usr.bin/expand/expand.1 index 99d89a0a3af6..812691f348f6 100644 --- a/usr.bin/expand/expand.1 +++ b/usr.bin/expand/expand.1 @@ -95,6 +95,18 @@ are reconverted to maximal strings of tabs. If the option is given, then tabs are inserted whenever they would compress the resultant file by replacing two or more characters. .El +.Sh ENVIRONMENT +The +.Ev LANG , +.Ev LC_ALL +and +.Ev LC_CTYPE +environment variables affect the execution of +.Nm expand +and +.Nm unexpand +as described in +.Xr environ 7 . .Sh STANDARDS The .Nm expand diff --git a/usr.bin/expand/expand.c b/usr.bin/expand/expand.c index f83419df6bbd..e5a63c53215a 100644 --- a/usr.bin/expand/expand.c +++ b/usr.bin/expand/expand.c @@ -47,6 +47,7 @@ static const char rcsid[] = #include #include +#include #include #include #include @@ -69,8 +70,11 @@ main(argc, argv) register int n; int rval; + setlocale(LC_CTYPE, ""); + /* handle obsolete syntax */ - while (argc > 1 && argv[1][0] == '-' && isdigit(argv[1][1])) { + while (argc > 1 && argv[1][0] == '-' && + isdigit((unsigned char)argv[1][1])) { getstops(&argv[1][1]); argc--; argv++; } @@ -140,7 +144,8 @@ main(argc, argv) default: putchar(c); - column++; + if (isprint(c)) + column++; continue; case '\n': @@ -173,7 +178,7 @@ getstops(cp) tabstops[nstops++] = i; if (*cp == 0) break; - if (*cp != ',' && *cp != ' ') + if (*cp != ',' && !isblank((unsigned char)*cp)) errx(1, "bad tab stop spec"); cp++; } diff --git a/usr.bin/unexpand/unexpand.c b/usr.bin/unexpand/unexpand.c index 37ba49c7d239..a1c565990a65 100644 --- a/usr.bin/unexpand/unexpand.c +++ b/usr.bin/unexpand/unexpand.c @@ -48,8 +48,10 @@ static const char sccsid[] = "@(#)unexpand.c 8.1 (Berkeley) 6/6/93"; /* * unexpand - put tabs into a file replacing blanks */ +#include #include #include +#include #include #include #include @@ -71,6 +73,8 @@ main(argc, argv) int ch, failed; char *filename; + setlocale(LC_CTYPE, ""); + nstops = 1; tabstops[0] = 8; while ((ch = getopt(argc, argv, "at:")) != -1) { @@ -176,7 +180,8 @@ tabify() doneline = ocol = dcol = 0; } else if (ch != ' ' || dcol > limit) { putchar(ch); - ocol++, dcol++; + if (isprint(ch)) + ocol++, dcol++; } /* @@ -213,7 +218,7 @@ getstops(cp) tabstops[nstops++] = i; if (*cp == 0) break; - if (*cp != ',' && *cp != ' ') + if (*cp != ',' && !isblank((unsigned char)*cp)) errx(1, "bad tab stop spec"); cp++; }