Module Name: src Committed By: christos Date: Sat May 23 14:01:08 UTC 2015
Modified Files: src/lib/libc/gen: vis.c Log Message: Grr need to deal with isgraph(3). Is there a better way? To generate a diff of this commit: cvs rdiff -u -r1.67 -r1.68 src/lib/libc/gen/vis.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libc/gen/vis.c diff -u src/lib/libc/gen/vis.c:1.67 src/lib/libc/gen/vis.c:1.68 --- src/lib/libc/gen/vis.c:1.67 Sat May 23 07:47:56 2015 +++ src/lib/libc/gen/vis.c Sat May 23 10:01:07 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: vis.c,v 1.67 2015/05/23 11:47:56 christos Exp $ */ +/* $NetBSD: vis.c,v 1.68 2015/05/23 14:01:07 christos Exp $ */ /*- * Copyright (c) 1989, 1993 @@ -57,7 +57,7 @@ #include <sys/cdefs.h> #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: vis.c,v 1.67 2015/05/23 11:47:56 christos Exp $"); +__RCSID("$NetBSD: vis.c,v 1.68 2015/05/23 14:01:07 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #ifdef __FBSDID __FBSDID("$FreeBSD$"); @@ -97,6 +97,25 @@ static wchar_t *do_svis(wchar_t *, wint_ #undef BELL #define BELL L'\a' + +#if defined(__NetBSD__) && defined(_CTYPE_G) +#define iscgraph(c) ((int)((_C_ctype_tab_ + 1)[(c)] & _CTYPE_G)) +#else +static int +iscgraph(int c) { + int rv; + char *ol; + + ol = setlocale(LC_CTYPE, "C"); + rv = isgraph(c); + if (ol) + setlocale(LC_CTYPE, ol); + return rv; +} +#endif + +#define ISGRAPH(flags, c) \ + (((flags) & VIS_NOLOCALE) ? iscgraph(c) : iswgraph(c)) #define iswoctal(c) (((u_char)(c)) >= L'0' && ((u_char)(c)) <= L'7') #define iswwhite(c) (c == L' ' || c == L'\t' || c == L'\n') @@ -232,7 +251,7 @@ do_mbyte(wchar_t *dst, wint_t c, int fla case L'$': /* vis(1) -l */ break; default: - if (iswgraph(c) && !iswoctal(c)) { + if (ISGRAPH(flags, c) && !iswoctal(c)) { *dst++ = L'\\'; *dst++ = c; return dst; @@ -284,7 +303,7 @@ do_svis(wchar_t *dst, wint_t c, int flag uint64_t bmsk, wmsk; iswextra = wcschr(extra, c) != NULL; - if (!iswextra && (iswgraph(c) || iswwhite(c) || + if (!iswextra && (ISGRAPH(flags, c) || iswwhite(c) || ((flags & VIS_SAFE) && iswsafe(c)))) { *dst++ = c; return dst;