svn commit: r339827 - head/usr.bin/localedef
Yuri Pankov
yuripv at FreeBSD.org
Sat Oct 27 23:31:43 UTC 2018
Author: yuripv
Date: Sat Oct 27 23:31:42 2018
New Revision: 339827
URL: https://svnweb.freebsd.org/changeset/base/339827
Log:
localedef: define characters in "space" class also as "print", except
for the known conflicts ("control" characters can't be "print"able).
POSIX doesn't explicitly forbid this, and actually includes <space>
character in "print".
PR: 225692
Reviewed by: bapt, cem (previous version), pfg (previous version)
Approved by: kib (mentor)
Differential Revision: https://reviews.freebsd.org/D17467
Modified:
head/usr.bin/localedef/ctype.c
Modified: head/usr.bin/localedef/ctype.c
==============================================================================
--- head/usr.bin/localedef/ctype.c Sat Oct 27 21:24:28 2018 (r339826)
+++ head/usr.bin/localedef/ctype.c Sat Oct 27 23:31:42 2018 (r339827)
@@ -120,7 +120,13 @@ add_ctype_impl(ctype_node_t *ctn)
ctn->ctype |= (_ISDIGIT | _ISGRAPH | _ISPRINT | _ISXDIGIT | _E4);
break;
case T_ISSPACE:
- ctn->ctype |= _ISSPACE;
+ /*
+ * This can be troublesome as <form-feed>, <newline>,
+ * <carriage-return>, <tab>, and <vertical-tab> are defined both
+ * as space and cntrl, and POSIX doesn't allow cntrl/print
+ * combination. We will take care of this in dump_ctype().
+ */
+ ctn->ctype |= (_ISSPACE | _ISPRINT);
break;
case T_ISCNTRL:
ctn->ctype |= _ISCNTRL;
@@ -378,9 +384,15 @@ dump_ctype(void)
ctn->ctype |= _ISPRINT;
/*
- * Finally, POSIX requires that certain combinations
- * are invalid. We don't flag this as a fatal error,
- * but we will warn about.
+ * POSIX requires that certain combinations are invalid.
+ * Try fixing the cases we know about (see add_ctype_impl()).
+ */
+ if ((ctn->ctype & (_ISSPACE|_ISCNTRL)) == (_ISSPACE|_ISCNTRL))
+ ctn->ctype &= ~_ISPRINT;
+
+ /*
+ * Finally, don't flag remaining cases as a fatal error,
+ * and just warn about them.
*/
if ((ctn->ctype & _ISALPHA) &&
(ctn->ctype & (_ISPUNCT|_ISDIGIT)))
More information about the svn-src-all
mailing list