Module Name: src Committed By: christos Date: Sat Mar 12 19:52:48 UTC 2011
Modified Files: src/distrib/sets/lists/base: ad.mips64eb ad.mips64el md.amd64 md.sparc64 shl.mi src/distrib/sets/lists/comp: ad.mips64eb ad.mips64el md.amd64 md.sparc64 mi shl.mi src/include: vis.h src/lib/libc: shlib_version src/lib/libc/compat/gen: Makefile.inc compat_unvis.c src/lib/libc/compat/include: vis.h src/lib/libc/gen: Makefile.inc unvis.3 unvis.c vis.3 vis.c src/lib/libc/include: namespace.h src/tests/lib/libc/gen: t_vis.c Added Files: src/lib/libc/compat/gen: compat___unvis13.c Log Message: Fix various vis/unvis issues: - no need for all the weak symbols - define a new _VIS_END flag for UNVIS_END so that there are no collisions between and vis and unvis flags. - add bound versions of the vis and unvis functions that take the length of the destination buffer. Unlike the OpenBSD ones they return -1 or NULL if the buffer is not large enough, instead of silently truncating. To generate a diff of this commit: cvs rdiff -u -r1.43 -r1.44 src/distrib/sets/lists/base/ad.mips64eb cvs rdiff -u -r1.41 -r1.42 src/distrib/sets/lists/base/ad.mips64el cvs rdiff -u -r1.116 -r1.117 src/distrib/sets/lists/base/md.amd64 cvs rdiff -u -r1.109 -r1.110 src/distrib/sets/lists/base/md.sparc64 cvs rdiff -u -r1.577 -r1.578 src/distrib/sets/lists/base/shl.mi cvs rdiff -u -r1.24 -r1.25 src/distrib/sets/lists/comp/ad.mips64eb \ src/distrib/sets/lists/comp/ad.mips64el cvs rdiff -u -r1.102 -r1.103 src/distrib/sets/lists/comp/md.amd64 cvs rdiff -u -r1.88 -r1.89 src/distrib/sets/lists/comp/md.sparc64 cvs rdiff -u -r1.1597 -r1.1598 src/distrib/sets/lists/comp/mi cvs rdiff -u -r1.162 -r1.163 src/distrib/sets/lists/comp/shl.mi cvs rdiff -u -r1.18 -r1.19 src/include/vis.h cvs rdiff -u -r1.221 -r1.222 src/lib/libc/shlib_version cvs rdiff -u -r1.13 -r1.14 src/lib/libc/compat/gen/Makefile.inc cvs rdiff -u -r0 -r1.1 src/lib/libc/compat/gen/compat___unvis13.c cvs rdiff -u -r1.2 -r1.3 src/lib/libc/compat/gen/compat_unvis.c cvs rdiff -u -r1.1 -r1.2 src/lib/libc/compat/include/vis.h cvs rdiff -u -r1.173 -r1.174 src/lib/libc/gen/Makefile.inc cvs rdiff -u -r1.20 -r1.21 src/lib/libc/gen/unvis.3 cvs rdiff -u -r1.33 -r1.34 src/lib/libc/gen/unvis.c cvs rdiff -u -r1.23 -r1.24 src/lib/libc/gen/vis.3 cvs rdiff -u -r1.43 -r1.44 src/lib/libc/gen/vis.c cvs rdiff -u -r1.146 -r1.147 src/lib/libc/include/namespace.h cvs rdiff -u -r1.1 -r1.2 src/tests/lib/libc/gen/t_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/distrib/sets/lists/base/ad.mips64eb diff -u src/distrib/sets/lists/base/ad.mips64eb:1.43 src/distrib/sets/lists/base/ad.mips64eb:1.44 --- src/distrib/sets/lists/base/ad.mips64eb:1.43 Tue Feb 15 22:42:17 2011 +++ src/distrib/sets/lists/base/ad.mips64eb Sat Mar 12 14:52:45 2011 @@ -1,4 +1,4 @@ -# $NetBSD: ad.mips64eb,v 1.43 2011/02/16 03:42:17 christos Exp $ +# $NetBSD: ad.mips64eb,v 1.44 2011/03/12 19:52:45 christos Exp $ ./libexec/ld.elf_so-64 base-compat-shlib compat,pic ./libexec/ld.elf_so-o32 base-sysutil-bin compat,pic ./usr/lib/64 base-compat-lib @@ -66,7 +66,7 @@ ./usr/lib/64/libbz2.so.1 base-compat-shlib compat,pic ./usr/lib/64/libbz2.so.1.1 base-compat-shlib compat,pic ./usr/lib/64/libc.so.12 base-compat-shlib compat,pic -./usr/lib/64/libc.so.12.176 base-compat-shlib compat,pic +./usr/lib/64/libc.so.12.177 base-compat-shlib compat,pic ./usr/lib/64/libcom_err.so.6 base-compat-shlib compat,pic,kerberos ./usr/lib/64/libcom_err.so.6.0 base-compat-shlib compat,pic,kerberos ./usr/lib/64/libcrypt.so.1 base-compat-shlib compat,pic @@ -333,7 +333,7 @@ ./usr/lib/o32/libbz2.so.1 base-compat-shlib compat,pic ./usr/lib/o32/libbz2.so.1.1 base-compat-shlib compat,pic ./usr/lib/o32/libc.so.12 base-compat-shlib compat,pic -./usr/lib/o32/libc.so.12.176 base-compat-shlib compat,pic +./usr/lib/o32/libc.so.12.177 base-compat-shlib compat,pic ./usr/lib/o32/libcom_err.so.6 base-compat-shlib compat,pic,kerberos ./usr/lib/o32/libcom_err.so.6.0 base-compat-shlib compat,pic,kerberos ./usr/lib/o32/libcrypt.so.1 base-compat-shlib compat,pic Index: src/distrib/sets/lists/base/ad.mips64el diff -u src/distrib/sets/lists/base/ad.mips64el:1.41 src/distrib/sets/lists/base/ad.mips64el:1.42 --- src/distrib/sets/lists/base/ad.mips64el:1.41 Tue Feb 15 22:42:17 2011 +++ src/distrib/sets/lists/base/ad.mips64el Sat Mar 12 14:52:45 2011 @@ -1,4 +1,4 @@ -# $NetBSD: ad.mips64el,v 1.41 2011/02/16 03:42:17 christos Exp $ +# $NetBSD: ad.mips64el,v 1.42 2011/03/12 19:52:45 christos Exp $ ./libexec/ld.elf_so-64 base-compat-shlib compat,pic ./libexec/ld.elf_so-o32 base-sysutil-bin compat,pic ./usr/lib/64 base-compat-lib @@ -66,7 +66,7 @@ ./usr/lib/64/libbz2.so.1 base-compat-shlib compat,pic ./usr/lib/64/libbz2.so.1.1 base-compat-shlib compat,pic ./usr/lib/64/libc.so.12 base-compat-shlib compat,pic -./usr/lib/64/libc.so.12.176 base-compat-shlib compat,pic +./usr/lib/64/libc.so.12.177 base-compat-shlib compat,pic ./usr/lib/64/libcom_err.so.6 base-compat-shlib compat,pic,kerberos ./usr/lib/64/libcom_err.so.6.0 base-compat-shlib compat,pic,kerberos ./usr/lib/64/libcrypt.so.1 base-compat-shlib compat,pic @@ -333,7 +333,7 @@ ./usr/lib/o32/libbz2.so.1 base-compat-shlib compat,pic ./usr/lib/o32/libbz2.so.1.1 base-compat-shlib compat,pic ./usr/lib/o32/libc.so.12 base-compat-shlib compat,pic -./usr/lib/o32/libc.so.12.176 base-compat-shlib compat,pic +./usr/lib/o32/libc.so.12.177 base-compat-shlib compat,pic ./usr/lib/o32/libcom_err.so.6 base-compat-shlib compat,pic,kerberos ./usr/lib/o32/libcom_err.so.6.0 base-compat-shlib compat,pic,kerberos ./usr/lib/o32/libcrypt.so.1 base-compat-shlib compat,pic Index: src/distrib/sets/lists/base/md.amd64 diff -u src/distrib/sets/lists/base/md.amd64:1.116 src/distrib/sets/lists/base/md.amd64:1.117 --- src/distrib/sets/lists/base/md.amd64:1.116 Tue Feb 15 22:42:17 2011 +++ src/distrib/sets/lists/base/md.amd64 Sat Mar 12 14:52:45 2011 @@ -1,4 +1,4 @@ -# $NetBSD: md.amd64,v 1.116 2011/02/16 03:42:17 christos Exp $ +# $NetBSD: md.amd64,v 1.117 2011/03/12 19:52:45 christos Exp $ ./dev/lms0 base-obsolete obsolete ./dev/mms0 base-obsolete obsolete ./libexec/ld.elf_so-i386 base-sys-shlib compat,pic @@ -69,7 +69,7 @@ ./usr/lib/i386/libbz2.so.1 base-compat-shlib compat,pic ./usr/lib/i386/libbz2.so.1.1 base-compat-shlib compat,pic ./usr/lib/i386/libc.so.12 base-compat-shlib compat,pic -./usr/lib/i386/libc.so.12.176 base-compat-shlib compat,pic +./usr/lib/i386/libc.so.12.177 base-compat-shlib compat,pic ./usr/lib/i386/libcom_err.so.6 base-compat-shlib compat,pic,kerberos ./usr/lib/i386/libcom_err.so.6.0 base-compat-shlib compat,pic,kerberos ./usr/lib/i386/libcrypt.so.1 base-compat-shlib compat,pic Index: src/distrib/sets/lists/base/md.sparc64 diff -u src/distrib/sets/lists/base/md.sparc64:1.109 src/distrib/sets/lists/base/md.sparc64:1.110 --- src/distrib/sets/lists/base/md.sparc64:1.109 Tue Feb 15 22:42:17 2011 +++ src/distrib/sets/lists/base/md.sparc64 Sat Mar 12 14:52:45 2011 @@ -1,4 +1,4 @@ -# $NetBSD: md.sparc64,v 1.109 2011/02/16 03:42:17 christos Exp $ +# $NetBSD: md.sparc64,v 1.110 2011/03/12 19:52:45 christos Exp $ ./libexec/ld.elf_so-sparc base-sysutil-bin compat,pic ./sbin/edlabel base-sysutil-root obsolete ./usr/bin/fdformat base-util-bin @@ -67,7 +67,7 @@ ./usr/lib/sparc/libbz2.so.1 base-compat-shlib compat,pic ./usr/lib/sparc/libbz2.so.1.1 base-compat-shlib compat,pic ./usr/lib/sparc/libc.so.12 base-compat-shlib compat,pic -./usr/lib/sparc/libc.so.12.176 base-compat-shlib compat,pic +./usr/lib/sparc/libc.so.12.177 base-compat-shlib compat,pic ./usr/lib/sparc/libcom_err.so.6 base-compat-shlib compat,pic,kerberos ./usr/lib/sparc/libcom_err.so.6.0 base-compat-shlib compat,pic,kerberos ./usr/lib/sparc/libcrypt.so.1 base-compat-shlib compat,pic Index: src/distrib/sets/lists/base/shl.mi diff -u src/distrib/sets/lists/base/shl.mi:1.577 src/distrib/sets/lists/base/shl.mi:1.578 --- src/distrib/sets/lists/base/shl.mi:1.577 Tue Feb 15 22:42:17 2011 +++ src/distrib/sets/lists/base/shl.mi Sat Mar 12 14:52:45 2011 @@ -1,4 +1,4 @@ -# $NetBSD: shl.mi,v 1.577 2011/02/16 03:42:17 christos Exp $ +# $NetBSD: shl.mi,v 1.578 2011/03/12 19:52:45 christos Exp $ # # Note: Don't delete entries from here - mark them as "obsolete" instead, # unless otherwise stated below. @@ -15,7 +15,7 @@ # ./lib/libc.so base-sys-shlib dynamicroot ./lib/libc.so.12 base-sys-shlib dynamicroot -./lib/libc.so.12.176 base-sys-shlib dynamicroot +./lib/libc.so.12.177 base-sys-shlib dynamicroot ./lib/libcrypt.so base-sys-shlib dynamicroot ./lib/libcrypt.so.1 base-sys-shlib dynamicroot ./lib/libcrypt.so.1.0 base-sys-shlib dynamicroot @@ -170,7 +170,7 @@ ./usr/lib/libbz2.so.1.1 base-sys-shlib ./usr/lib/libc.so base-sys-shlib ./usr/lib/libc.so.12 base-sys-shlib -./usr/lib/libc.so.12.176 base-sys-shlib +./usr/lib/libc.so.12.177 base-sys-shlib ./usr/lib/libcdk.so base-obsolete obsolete ./usr/lib/libcom_err.so base-krb5-shlib kerberos ./usr/lib/libcom_err.so.6 base-krb5-shlib kerberos Index: src/distrib/sets/lists/comp/ad.mips64eb diff -u src/distrib/sets/lists/comp/ad.mips64eb:1.24 src/distrib/sets/lists/comp/ad.mips64eb:1.25 --- src/distrib/sets/lists/comp/ad.mips64eb:1.24 Tue Feb 15 22:42:17 2011 +++ src/distrib/sets/lists/comp/ad.mips64eb Sat Mar 12 14:52:46 2011 @@ -1,4 +1,4 @@ -# $NetBSD: ad.mips64eb,v 1.24 2011/02/16 03:42:17 christos Exp $ +# $NetBSD: ad.mips64eb,v 1.25 2011/03/12 19:52:46 christos Exp $ ./usr/bin/elf2aout comp-obsolete obsolete ./usr/bin/elf2ecoff comp-sysutil-bin ./usr/include/mips comp-c-include @@ -1153,7 +1153,7 @@ ./usr/libdata/debug/usr/lib/64/libbluetooth.so.4.2.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/64/libbsdmalloc.so.0.0.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/64/libbz2.so.1.1.debug comp-sys-debug debug,compat -./usr/libdata/debug/usr/lib/64/libc.so.12.176.debug comp-sys-debug debug,compat +./usr/libdata/debug/usr/lib/64/libc.so.12.177.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/64/libcom_err.so.6.0.debug comp-krb5-debug kerberos,debug,compat ./usr/libdata/debug/usr/lib/64/libcrypt.so.1.0.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/64/libcrypto.so.6.1.debug comp-crypto-debug crypto,debug,compat @@ -1345,7 +1345,7 @@ ./usr/libdata/debug/usr/lib/o32/libbluetooth.so.4.2.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/o32/libbsdmalloc.so.0.0.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/o32/libbz2.so.1.1.debug comp-sys-debug debug,compat -./usr/libdata/debug/usr/lib/o32/libc.so.12.176.debug comp-sys-debug debug,compat +./usr/libdata/debug/usr/lib/o32/libc.so.12.177.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/o32/libcom_err.so.6.0.debug comp-krb5-debug kerberos,debug,compat ./usr/libdata/debug/usr/lib/o32/libcrypt.so.1.0.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/o32/libcrypto.so.6.1.debug comp-crypto-debug crypto,debug,compat Index: src/distrib/sets/lists/comp/ad.mips64el diff -u src/distrib/sets/lists/comp/ad.mips64el:1.24 src/distrib/sets/lists/comp/ad.mips64el:1.25 --- src/distrib/sets/lists/comp/ad.mips64el:1.24 Tue Feb 15 22:42:17 2011 +++ src/distrib/sets/lists/comp/ad.mips64el Sat Mar 12 14:52:46 2011 @@ -1,4 +1,4 @@ -# $NetBSD: ad.mips64el,v 1.24 2011/02/16 03:42:17 christos Exp $ +# $NetBSD: ad.mips64el,v 1.25 2011/03/12 19:52:46 christos Exp $ ./usr/bin/elf2aout comp-obsolete obsolete ./usr/bin/elf2ecoff comp-sysutil-bin ./usr/include/mips comp-c-include @@ -1153,7 +1153,7 @@ ./usr/libdata/debug/usr/lib/64/libbluetooth.so.4.2.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/64/libbsdmalloc.so.0.0.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/64/libbz2.so.1.1.debug comp-sys-debug debug,compat -./usr/libdata/debug/usr/lib/64/libc.so.12.176.debug comp-sys-debug debug,compat +./usr/libdata/debug/usr/lib/64/libc.so.12.177.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/64/libcom_err.so.6.0.debug comp-krb5-debug kerberos,debug,compat ./usr/libdata/debug/usr/lib/64/libcrypt.so.1.0.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/64/libcrypto.so.6.1.debug comp-crypto-debug crypto,debug,compat @@ -1345,7 +1345,7 @@ ./usr/libdata/debug/usr/lib/o32/libbluetooth.so.4.2.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/o32/libbsdmalloc.so.0.0.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/o32/libbz2.so.1.1.debug comp-sys-debug debug,compat -./usr/libdata/debug/usr/lib/o32/libc.so.12.176.debug comp-sys-debug debug,compat +./usr/libdata/debug/usr/lib/o32/libc.so.12.177.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/o32/libcom_err.so.6.0.debug comp-krb5-debug kerberos,debug,compat ./usr/libdata/debug/usr/lib/o32/libcrypt.so.1.0.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/o32/libcrypto.so.6.1.debug comp-crypto-debug crypto,debug,compat Index: src/distrib/sets/lists/comp/md.amd64 diff -u src/distrib/sets/lists/comp/md.amd64:1.102 src/distrib/sets/lists/comp/md.amd64:1.103 --- src/distrib/sets/lists/comp/md.amd64:1.102 Tue Feb 15 22:42:18 2011 +++ src/distrib/sets/lists/comp/md.amd64 Sat Mar 12 14:52:46 2011 @@ -1,4 +1,4 @@ -# $NetBSD: md.amd64,v 1.102 2011/02/16 03:42:18 christos Exp $ +# $NetBSD: md.amd64,v 1.103 2011/03/12 19:52:46 christos Exp $ ./usr/include/amd64 comp-c-include ./usr/include/amd64/ansi.h comp-c-include ./usr/include/amd64/aout_machdep.h comp-c-include @@ -932,7 +932,7 @@ ./usr/libdata/debug/usr/lib/i386/libbluetooth.so.4.2.debug comp-compat-shlib compat,pic,debug ./usr/libdata/debug/usr/lib/i386/libbsdmalloc.so.0.0.debug comp-compat-shlib compat,pic,debug ./usr/libdata/debug/usr/lib/i386/libbz2.so.1.1.debug comp-compat-shlib compat,pic,debug -./usr/libdata/debug/usr/lib/i386/libc.so.12.176.debug comp-compat-shlib compat,pic,debug +./usr/libdata/debug/usr/lib/i386/libc.so.12.177.debug comp-compat-shlib compat,pic,debug ./usr/libdata/debug/usr/lib/i386/libcom_err.so.6.0.debug comp-compat-shlib compat,pic,kerberos,debug ./usr/libdata/debug/usr/lib/i386/libcrypt.so.1.0.debug comp-compat-shlib compat,pic,debug ./usr/libdata/debug/usr/lib/i386/libcrypto.so.6.1.debug comp-compat-shlib compat,pic,debug Index: src/distrib/sets/lists/comp/md.sparc64 diff -u src/distrib/sets/lists/comp/md.sparc64:1.88 src/distrib/sets/lists/comp/md.sparc64:1.89 --- src/distrib/sets/lists/comp/md.sparc64:1.88 Tue Feb 15 22:42:18 2011 +++ src/distrib/sets/lists/comp/md.sparc64 Sat Mar 12 14:52:46 2011 @@ -1,4 +1,4 @@ -# $NetBSD: md.sparc64,v 1.88 2011/02/16 03:42:18 christos Exp $ +# $NetBSD: md.sparc64,v 1.89 2011/03/12 19:52:46 christos Exp $ ./usr/include/ieeefp.h comp-c-include ./usr/include/sparc comp-c-include ./usr/include/sparc/_G_config.h comp-obsolete obsolete @@ -693,7 +693,7 @@ ./usr/libdata/debug/usr/lib/sparc/libbluetooth.so.4.2.debug comp-compat-shlib compat,pic,debug ./usr/libdata/debug/usr/lib/sparc/libbsdmalloc.so.0.0.debug comp-compat-shlib compat,pic,debug ./usr/libdata/debug/usr/lib/sparc/libbz2.so.1.1.debug comp-compat-shlib compat,pic,debug -./usr/libdata/debug/usr/lib/sparc/libc.so.12.176.debug comp-compat-shlib compat,pic,debug +./usr/libdata/debug/usr/lib/sparc/libc.so.12.177.debug comp-compat-shlib compat,pic,debug ./usr/libdata/debug/usr/lib/sparc/libcom_err.so.6.0.debug comp-compat-shlib compat,pic,debug ./usr/libdata/debug/usr/lib/sparc/libcrypt.so.1.0.debug comp-compat-shlib compat,pic,debug ./usr/libdata/debug/usr/lib/sparc/libcrypto.so.6.1.debug comp-compat-shlib compat,pic,debug,crypto Index: src/distrib/sets/lists/comp/mi diff -u src/distrib/sets/lists/comp/mi:1.1597 src/distrib/sets/lists/comp/mi:1.1598 --- src/distrib/sets/lists/comp/mi:1.1597 Fri Mar 11 14:50:33 2011 +++ src/distrib/sets/lists/comp/mi Sat Mar 12 14:52:46 2011 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.1597 2011/03/11 19:50:33 jruoho Exp $ +# $NetBSD: mi,v 1.1598 2011/03/12 19:52:46 christos Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -7487,6 +7487,7 @@ ./usr/share/man/cat3/ntoa.0 comp-c-catman .cat ./usr/share/man/cat3/ntohl.0 comp-c-catman .cat ./usr/share/man/cat3/ntohs.0 comp-c-catman .cat +./usr/share/man/cat3/nvis.0 comp-c-catman .cat ./usr/share/man/cat3/offsetof.0 comp-c-catman .cat ./usr/share/man/cat3/offtime.0 comp-c-catman .cat ./usr/share/man/cat3/offtime_r.0 comp-c-catman .cat @@ -8336,6 +8337,7 @@ ./usr/share/man/cat3/snprintb.0 comp-c-catman .cat ./usr/share/man/cat3/snprintb_m.0 comp-c-catman .cat ./usr/share/man/cat3/snprintf.0 comp-c-catman .cat +./usr/share/man/cat3/snvis.0 comp-c-catman .cat ./usr/share/man/cat3/sockaddr_snprintf.0 comp-c-catman .cat ./usr/share/man/cat3/sockatmark.0 comp-c-catman .cat ./usr/share/man/cat3/sprintf.0 comp-c-catman .cat @@ -8389,11 +8391,17 @@ ./usr/share/man/cat3/strncpy.0 comp-c-catman .cat ./usr/share/man/cat3/strndup.0 comp-c-catman .cat ./usr/share/man/cat3/strnlen.0 comp-c-catman .cat +./usr/share/man/cat3/strnunvis.0 comp-c-catman .cat +./usr/share/man/cat3/strnunvisx.0 comp-c-catman .cat +./usr/share/man/cat3/strnvis.0 comp-c-catman .cat +./usr/share/man/cat3/strnvisx.0 comp-c-catman .cat ./usr/share/man/cat3/strpbrk.0 comp-c-catman .cat ./usr/share/man/cat3/strptime.0 comp-c-catman .cat ./usr/share/man/cat3/strrchr.0 comp-c-catman .cat ./usr/share/man/cat3/strsep.0 comp-c-catman .cat ./usr/share/man/cat3/strsignal.0 comp-c-catman .cat +./usr/share/man/cat3/strsnvis.0 comp-c-catman .cat +./usr/share/man/cat3/strsnvisx.0 comp-c-catman .cat ./usr/share/man/cat3/strspn.0 comp-c-catman .cat ./usr/share/man/cat3/strstr.0 comp-c-catman .cat ./usr/share/man/cat3/strsuftoll.0 comp-c-catman .cat @@ -13509,6 +13517,7 @@ ./usr/share/man/html3/ntoa.html comp-c-htmlman html ./usr/share/man/html3/ntohl.html comp-c-htmlman html ./usr/share/man/html3/ntohs.html comp-c-htmlman html +./usr/share/man/html3/nvis.html comp-c-htmlman html ./usr/share/man/html3/offsetof.html comp-c-htmlman html ./usr/share/man/html3/offtime.html comp-c-htmlman html ./usr/share/man/html3/offtime_r.html comp-c-htmlman html @@ -14334,6 +14343,7 @@ ./usr/share/man/html3/snprintb.html comp-c-htmlman html ./usr/share/man/html3/snprintb_m.html comp-c-htmlman html ./usr/share/man/html3/snprintf.html comp-c-htmlman html +./usr/share/man/html3/snvis.html comp-c-htmlman html ./usr/share/man/html3/sockaddr_snprintf.html comp-c-htmlman html ./usr/share/man/html3/sockatmark.html comp-c-htmlman html ./usr/share/man/html3/sprintf.html comp-c-htmlman html @@ -14387,11 +14397,17 @@ ./usr/share/man/html3/strncpy.html comp-c-htmlman html ./usr/share/man/html3/strndup.html comp-c-htmlman html ./usr/share/man/html3/strnlen.html comp-c-htmlman html +./usr/share/man/html3/strnunvis.html comp-c-htmlman html +./usr/share/man/html3/strnunvisx.html comp-c-htmlman html +./usr/share/man/html3/strnvis.html comp-c-htmlman html +./usr/share/man/html3/strnvisx.html comp-c-htmlman html ./usr/share/man/html3/strpbrk.html comp-c-htmlman html ./usr/share/man/html3/strptime.html comp-c-htmlman html ./usr/share/man/html3/strrchr.html comp-c-htmlman html ./usr/share/man/html3/strsep.html comp-c-htmlman html ./usr/share/man/html3/strsignal.html comp-c-htmlman html +./usr/share/man/html3/strsnvis.html comp-c-htmlman html +./usr/share/man/html3/strsnvisx.html comp-c-htmlman html ./usr/share/man/html3/strspn.html comp-c-htmlman html ./usr/share/man/html3/strstr.html comp-c-htmlman html ./usr/share/man/html3/strsuftoll.html comp-c-htmlman html @@ -19523,6 +19539,7 @@ ./usr/share/man/man3/ntoa.3 comp-c-man .man ./usr/share/man/man3/ntohl.3 comp-c-man .man ./usr/share/man/man3/ntohs.3 comp-c-man .man +./usr/share/man/man3/nvis.3 comp-c-man .man ./usr/share/man/man3/offsetof.3 comp-c-man .man ./usr/share/man/man3/offtime.3 comp-c-man .man ./usr/share/man/man3/offtime_r.3 comp-c-man .man @@ -20368,6 +20385,7 @@ ./usr/share/man/man3/snprintb.3 comp-c-man .man ./usr/share/man/man3/snprintb_m.3 comp-c-man .man ./usr/share/man/man3/snprintf.3 comp-c-man .man +./usr/share/man/man3/snvis.3 comp-c-man .man ./usr/share/man/man3/sockaddr_snprintf.3 comp-c-man .man ./usr/share/man/man3/sockatmark.3 comp-c-man .man ./usr/share/man/man3/sprintf.3 comp-c-man .man @@ -20421,11 +20439,17 @@ ./usr/share/man/man3/strncpy.3 comp-c-man .man ./usr/share/man/man3/strndup.3 comp-c-man .man ./usr/share/man/man3/strnlen.3 comp-c-man .man +./usr/share/man/man3/strnunvis.3 comp-c-man .man +./usr/share/man/man3/strnunvisx.3 comp-c-man .man +./usr/share/man/man3/strnvis.3 comp-c-man .man +./usr/share/man/man3/strnvisx.3 comp-c-man .man ./usr/share/man/man3/strpbrk.3 comp-c-man .man ./usr/share/man/man3/strptime.3 comp-c-man .man ./usr/share/man/man3/strrchr.3 comp-c-man .man ./usr/share/man/man3/strsep.3 comp-c-man .man ./usr/share/man/man3/strsignal.3 comp-c-man .man +./usr/share/man/man3/strsnvis.3 comp-c-man .man +./usr/share/man/man3/strsnvisx.3 comp-c-man .man ./usr/share/man/man3/strspn.3 comp-c-man .man ./usr/share/man/man3/strstr.3 comp-c-man .man ./usr/share/man/man3/strsuftoll.3 comp-c-man .man Index: src/distrib/sets/lists/comp/shl.mi diff -u src/distrib/sets/lists/comp/shl.mi:1.162 src/distrib/sets/lists/comp/shl.mi:1.163 --- src/distrib/sets/lists/comp/shl.mi:1.162 Tue Feb 15 22:42:18 2011 +++ src/distrib/sets/lists/comp/shl.mi Sat Mar 12 14:52:47 2011 @@ -1,4 +1,4 @@ -# $NetBSD: shl.mi,v 1.162 2011/02/16 03:42:18 christos Exp $ +# $NetBSD: shl.mi,v 1.163 2011/03/12 19:52:47 christos Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -224,7 +224,7 @@ ./usr/libdata/debug/usr/lib/libbluetooth.so.4.2.debug comp-sys-debug debug ./usr/libdata/debug/usr/lib/libbsdmalloc.so.0.0.debug comp-sys-debug debug ./usr/libdata/debug/usr/lib/libbz2.so.1.1.debug comp-sys-debug debug -./usr/libdata/debug/usr/lib/libc.so.12.176.debug comp-sys-debug debug +./usr/libdata/debug/usr/lib/libc.so.12.177.debug comp-sys-debug debug ./usr/libdata/debug/usr/lib/libcom_err.so.6.0.debug comp-krb5-debug kerberos,debug ./usr/libdata/debug/usr/lib/libcrypt.so.1.0.debug comp-sys-debug debug ./usr/libdata/debug/usr/lib/libcrypto.so.6.1.debug comp-crypto-debug crypto,debug Index: src/include/vis.h diff -u src/include/vis.h:1.18 src/include/vis.h:1.19 --- src/include/vis.h:1.18 Sat Nov 27 14:44:54 2010 +++ src/include/vis.h Sat Mar 12 14:52:45 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: vis.h,v 1.18 2010/11/27 19:44:54 christos Exp $ */ +/* $NetBSD: vis.h,v 1.19 2011/03/12 19:52:45 christos Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -61,6 +61,7 @@ #define VIS_MIMESTYLE 0x100 /* mime-style escape = HEX HEX */ #define VIS_HTTP1866 0x200 /* http-style &#num; or &string; */ #define VIS_NOESCAPE 0x400 /* don't decode `\' */ +#define _VIS_END 0x800 /* for unvis */ /* * unvis return codes @@ -74,21 +75,37 @@ /* * unvis flags */ -#define UNVIS_END 1 /* no more characters */ +#define UNVIS_END _VIS_END /* no more characters */ #include <sys/cdefs.h> __BEGIN_DECLS char *vis(char *, int, int, int); +char *nvis(char *, size_t, int, int, int); + char *svis(char *, int, int, int, const char *); +char *snvis(char *, size_t, int, int, int, const char *); + int strvis(char *, const char *, int); +int strnvis(char *, size_t, const char *, int); + int strsvis(char *, const char *, int, const char *); +int strsnvis(char *, size_t, const char *, int, const char *); + int strvisx(char *, const char *, size_t, int); +int strnvisx(char *, size_t, const char *, size_t, int); + int strsvisx(char *, const char *, size_t, int, const char *); +int strsnvisx(char *, size_t, const char *, size_t, int, const char *); + int strunvis(char *, const char *); +int strnunvis(char *, size_t, const char *); + int strunvisx(char *, const char *, int); +int strnunvisx(char *, size_t, const char *, int); + #ifndef __LIBC12_SOURCE__ -int unvis(char *, int, int *, int) __RENAME(__unvis13); +int unvis(char *, int, int *, int) __RENAME(__unvis50); #endif __END_DECLS Index: src/lib/libc/shlib_version diff -u src/lib/libc/shlib_version:1.221 src/lib/libc/shlib_version:1.222 --- src/lib/libc/shlib_version:1.221 Fri Feb 4 17:07:41 2011 +++ src/lib/libc/shlib_version Sat Mar 12 14:52:47 2011 @@ -1,4 +1,4 @@ -# $NetBSD: shlib_version,v 1.221 2011/02/04 22:07:41 christos Exp $ +# $NetBSD: shlib_version,v 1.222 2011/03/12 19:52:47 christos Exp $ # Remember to update distrib/sets/lists/base/shl.* when changing # # things we wish to do on next major version bump: @@ -31,4 +31,4 @@ # it's insufficient bitwidth to implement all ctype class. # see isblank's comment in ctype.h. major=12 -minor=176 +minor=177 Index: src/lib/libc/compat/gen/Makefile.inc diff -u src/lib/libc/compat/gen/Makefile.inc:1.13 src/lib/libc/compat/gen/Makefile.inc:1.14 --- src/lib/libc/compat/gen/Makefile.inc:1.13 Fri Apr 23 15:04:54 2010 +++ src/lib/libc/compat/gen/Makefile.inc Sat Mar 12 14:52:47 2011 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.inc,v 1.13 2010/04/23 19:04:54 drochner Exp $ +# $NetBSD: Makefile.inc,v 1.14 2011/03/12 19:52:47 christos Exp $ .PATH: ${COMPATDIR}/gen SRCS+=compat_errlist.c compat_fts.c compat___fts13.c compat___fts30.c \ @@ -8,4 +8,5 @@ compat_times.c compat_timezone.c compat_unvis.c compat_utmpx.c \ compat__sys_errlist.c compat__sys_nerr.c compat__sys_siglist.c \ compat_time.c compat_utime.c compat_devname.c compat_alphasort.c \ - compat_getpwent.c compat___fts32.c compat_utmp.c compat___fts50.c + compat_getpwent.c compat___fts32.c compat_utmp.c compat___fts50.c \ + compat___unvis13.c Index: src/lib/libc/compat/gen/compat_unvis.c diff -u src/lib/libc/compat/gen/compat_unvis.c:1.2 src/lib/libc/compat/gen/compat_unvis.c:1.3 --- src/lib/libc/compat/gen/compat_unvis.c:1.2 Fri Mar 9 20:13:14 2007 +++ src/lib/libc/compat/gen/compat_unvis.c Sat Mar 12 14:52:47 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_unvis.c,v 1.2 2007/03/10 01:13:14 hubertf Exp $ */ +/* $NetBSD: compat_unvis.c,v 1.3 2011/03/12 19:52:47 christos Exp $ */ /*- * Copyright (c) 1989, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)unvis.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: compat_unvis.c,v 1.2 2007/03/10 01:13:14 hubertf Exp $"); +__RCSID("$NetBSD: compat_unvis.c,v 1.3 2011/03/12 19:52:47 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -48,10 +48,6 @@ #include <vis.h> #include <compat/include/vis.h> -#ifdef __weak_alias -__weak_alias(unvis,_unvis) -#endif - #ifdef __warn_references __warn_references(unvis, "warning: reference to compatibility unvis(); include <vis.h> for correct reference") @@ -60,5 +56,6 @@ int unvis(char *cp, int c, int *astate, int flag) { - return __unvis13(cp, c, astate, flag); + flag = (flag & ~1) | ((flag & 1) ? UNVIS_END : 0); + return __unvis50(cp, c, astate, flag); } Index: src/lib/libc/compat/include/vis.h diff -u src/lib/libc/compat/include/vis.h:1.1 src/lib/libc/compat/include/vis.h:1.2 --- src/lib/libc/compat/include/vis.h:1.1 Mon Sep 12 21:44:09 2005 +++ src/lib/libc/compat/include/vis.h Sat Mar 12 14:52:47 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: vis.h,v 1.1 2005/09/13 01:44:09 christos Exp $ */ +/* $NetBSD: vis.h,v 1.2 2011/03/12 19:52:47 christos Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -37,6 +37,7 @@ __BEGIN_DECLS int unvis(char *, int, int *, int); int __unvis13(char *, int, int *, int); +int __unvis50(char *, int, int *, int); __END_DECLS #endif /* !_COMPAT_VIS_H_ */ Index: src/lib/libc/gen/Makefile.inc diff -u src/lib/libc/gen/Makefile.inc:1.173 src/lib/libc/gen/Makefile.inc:1.174 --- src/lib/libc/gen/Makefile.inc:1.173 Sun Dec 12 15:22:48 2010 +++ src/lib/libc/gen/Makefile.inc Sat Mar 12 14:52:48 2011 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.inc,v 1.173 2010/12/12 20:22:48 christos Exp $ +# $NetBSD: Makefile.inc,v 1.174 2011/03/12 19:52:48 christos Exp $ # from: @(#)Makefile.inc 8.6 (Berkeley) 5/4/95 # gen sources @@ -155,8 +155,11 @@ syslog.3 vsyslogp.3 syslog.3 vsyslogp_r.3 MLINKS+=ttyname.3 isatty.3 ttyname.3 ttyslot.3 ttyname.3 ttyname_r.3 MLINKS+=unvis.3 strunvis.3 unvis.3 strunvisx.3 +MLINKS+=unvis.3 strnunvis.3 unvis.3 strnunvisx.3 MLINKS+=vis.3 svis.3 vis.3 strvis.3 vis.3 strvisx.3 vis.3 strsvis.3 \ - vis.3 strsvisx.3 + vis.3 strsvisx.3 vis.3 nvis.3 +MLINKS+=vis.3 snvis.3 vis.3 strnvis.3 vis.3 strnvisx.3 vis.3 strsnvis.3 \ + vis.3 strsnvisx.3 CPPFLAGS.ctype_.c+= -I${LIBCDIR}/locale CPPFLAGS.isctype.c+= -I${LIBCDIR}/locale Index: src/lib/libc/gen/unvis.3 diff -u src/lib/libc/gen/unvis.3:1.20 src/lib/libc/gen/unvis.3:1.21 --- src/lib/libc/gen/unvis.3:1.20 Sat Nov 27 20:28:21 2010 +++ src/lib/libc/gen/unvis.3 Sat Mar 12 14:52:48 2011 @@ -1,4 +1,4 @@ -.\" $NetBSD: unvis.3,v 1.20 2010/11/28 01:28:21 wiz Exp $ +.\" $NetBSD: unvis.3,v 1.21 2011/03/12 19:52:48 christos Exp $ .\" .\" Copyright (c) 1989, 1991, 1993 .\" The Regents of the University of California. All rights reserved. @@ -29,7 +29,7 @@ .\" .\" @(#)unvis.3 8.2 (Berkeley) 12/11/93 .\" -.Dd November 27, 2010 +.Dd March 12, 2011 .Dt UNVIS 3 .Os .Sh NAME @@ -45,7 +45,11 @@ .Ft int .Fn strunvis "char *dst" "const char *src" .Ft int +.Fn strnunvis "char *dst" "size_t dlen", "const char *src" +.Ft int .Fn strunvisx "char *dst" "const char *src" "int flag" +.Ft int +.Fn strnunvisx "char *dst" "size_t dlen", "const char *src" "int flag" .Sh DESCRIPTION The .Fn unvis , @@ -191,6 +195,34 @@ if (unvis(\*[Am]out, '\e0', \*[Am]state, UNVIS_END) == UNVIS_VALID) (void)putchar(out); .Ed +.Sh ERRORS +The functions +.Fn strunvis , +.Fn strnunvis , +.Fn strunvisx +and +.Fn strnunvisx +will return +.Dv -1 +on error and set +.Va errno +to: +.Bl -tag -width Er +.It Bq Er EINVAL +An invalid escape sequence was detected, or the decoder is in an unknown state. +.El +.Pp +In addition the functions +.Fn strnunvis +and +.Fn strnunvisx +will can also set +.Va errno +on error to: +.Bl -tag -width Er +.It Bq Er ENOSPC +Not enough space to perform the conversion. +.El .Sh SEE ALSO .Xr unvis 1 , .Xr vis 1 , Index: src/lib/libc/gen/unvis.c diff -u src/lib/libc/gen/unvis.c:1.33 src/lib/libc/gen/unvis.c:1.34 --- src/lib/libc/gen/unvis.c:1.33 Sat Feb 26 20:53:22 2011 +++ src/lib/libc/gen/unvis.c Sat Mar 12 14:52:48 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: unvis.c,v 1.33 2011/02/27 01:53:22 christos Exp $ */ +/* $NetBSD: unvis.c,v 1.34 2011/03/12 19:52:48 christos Exp $ */ /*- * Copyright (c) 1989, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)unvis.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: unvis.c,v 1.33 2011/02/27 01:53:22 christos Exp $"); +__RCSID("$NetBSD: unvis.c,v 1.34 2011/03/12 19:52:48 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -45,10 +45,11 @@ #include <ctype.h> #include <stdint.h> #include <stdio.h> +#include <errno.h> #include <vis.h> #ifdef __weak_alias -__weak_alias(strunvis,_strunvis) +__weak_alias(strnunvisx,_strnunvisx) #endif #if !HAVE_VIS @@ -469,47 +470,76 @@ } /* - * strunvis - decode src into dst + * strnunvisx - decode src into dst * * Number of chars decoded into dst is returned, -1 on error. * Dst is null terminated. */ int -strunvisx(char *dst, const char *src, int flag) +strnunvisx(char *dst, size_t dlen, const char *src, int flag) { char c; - char *start = dst; + char t, *start = dst; int state = 0; _DIAGASSERT(src != NULL); _DIAGASSERT(dst != NULL); +#define CHECKSPACE() \ + do { \ + if (dlen-- == 0) { \ + errno = ENOSPC; \ + return -1; \ + } \ + } while (/*CONSTCOND*/0) while ((c = *src++) != '\0') { again: - switch (unvis(dst, c, &state, flag)) { + switch (unvis(&t, c, &state, flag)) { case UNVIS_VALID: - dst++; + CHECKSPACE(); + *dst++ = t; break; case UNVIS_VALIDPUSH: - dst++; + CHECKSPACE(); + *dst++ = t; goto again; case 0: case UNVIS_NOCHAR: break; + case UNVIS_SYNBAD: + errno = EINVAL; + return -1; default: - return (-1); + _DIAGASSERT(0); + errno = EINVAL; + return -1; } } - if (unvis(dst, c, &state, UNVIS_END) == UNVIS_VALID) - dst++; + if (unvis(&t, c, &state, UNVIS_END) == UNVIS_VALID) { + CHECKSPACE(); + *dst++ = t; + } + CHECKSPACE(); *dst = '\0'; return (int)(dst - start); } int +strunvisx(char *dst, const char *src, int flag) +{ + return strnunvisx(dst, ~0, src, flag); +} + +int strunvis(char *dst, const char *src) { - return strunvisx(dst, src, 0); + return strnunvisx(dst, ~0, src, 0); +} + +int +strnunvis(char *dst, size_t dlen, const char *src) +{ + return strnunvisx(dst, dlen, src, 0); } #endif Index: src/lib/libc/gen/vis.3 diff -u src/lib/libc/gen/vis.3:1.23 src/lib/libc/gen/vis.3:1.24 --- src/lib/libc/gen/vis.3:1.23 Tue Feb 10 18:06:31 2009 +++ src/lib/libc/gen/vis.3 Sat Mar 12 14:52:48 2011 @@ -1,4 +1,4 @@ -.\" $NetBSD: vis.3,v 1.23 2009/02/10 23:06:31 christos Exp $ +.\" $NetBSD: vis.3,v 1.24 2011/03/12 19:52:48 christos Exp $ .\" .\" Copyright (c) 1989, 1991, 1993 .\" The Regents of the University of California. All rights reserved. @@ -29,16 +29,22 @@ .\" .\" @(#)vis.3 8.1 (Berkeley) 6/9/93 .\" -.Dd February 10, 2009 +.Dd March 12, 2011 .Dt VIS 3 .Os .Sh NAME .Nm vis , +.Nm nvis , .Nm strvis , +.Nm strnvis , .Nm strvisx , +.Nm strnvisx , .Nm svis , +.Nm snvis , .Nm strsvis , +.Nm strsnvis , .Nm strsvisx +.Nm strsnvisx .Nd visually encode characters .Sh LIBRARY .Lb libc @@ -46,16 +52,28 @@ .In vis.h .Ft char * .Fn vis "char *dst" "int c" "int flag" "int nextc" +.Ft char * +.Fn nvis "char *dst" "size_t dlen" "int c" "int flag" "int nextc" .Ft int .Fn strvis "char *dst" "const char *src" "int flag" .Ft int +.Fn strnvis "char *dst" "size_t dlen" "const char *src" "int flag" +.Ft int .Fn strvisx "char *dst" "const char *src" "size_t len" "int flag" +.Ft int +.Fn strnvisx "char *dst" "size_t dlen" "const char *src" "size_t len" "int flag" .Ft char * .Fn svis "char *dst" "int c" "int flag" "int nextc" "const char *extra" +.Ft char * +.Fn snvis "char *dst" "size_t dlen" "int c" "int flag" "int nextc" "const char *extra" .Ft int .Fn strsvis "char *dst" "const char *src" "int flag" "const char *extra" .Ft int +.Fn strsnvis "char *dst" "size_t dlen" "const char *src" "int flag" "const char *extra" +.Ft int .Fn strsvisx "char *dst" "const char *src" "size_t len" "int flag" "const char *extra" +.Ft int +.Fn strsnvisx "char *dst" "size_t dlen" "const char *src" "size_t len" "int flag" "const char *extra" .Sh DESCRIPTION The .Fn vis @@ -86,9 +104,11 @@ encoding format (explained below). .Pp The -.Fn strvis +.Fn strvis , +.Fn strnvis , +.Fn strvisx , and -.Fn strvisx +.Fn strnvisx functions copy into .Fa dst a visual representation of @@ -96,14 +116,18 @@ .Fa src . The .Fn strvis -function encodes characters from +and +.Fn strnvis +functions encode characters from .Fa src up to the first .Dv NUL . The .Fn strvisx -function encodes exactly +and +.Fn strnvisx +functions encode exactly .Fa len characters from .Fa src @@ -125,17 +149,42 @@ forms return the number of characters in dst (not including the trailing .Dv NUL ) . +The +.Dq n +versions of the functions also take an additional argument +.Fa dlen +that indicates the length of the +.Fa dst +buffer. +If +.Fa dlen +is not large enough to fix the converted string then the +.Fn strnvis +and +.Fn strnvisx +functions return +.Dv -1 +and set x +.Va errno +to +.Dv ENOSPC . .Pp The functions .Fn svis , +.Fn snvis , .Fn strsvis , +.Fn strsnvis , +.Fn strsvisx , and -.Fn strsvisx +.Fn strsnvisx correspond to .Fn vis , +.Fn nvis , .Fn strvis , -and +.Fn strnvis , .Fn strvisx +and +.Fn strnvisx but have an additional argument .Fa extra , pointing to a @@ -149,17 +198,21 @@ The encoding is a unique, invertible representation composed entirely of graphic characters; it can be decoded back into the original form using the -.Xr unvis 3 -or +.Xr unvis 3 , .Xr strunvis 3 +or +.Xr strnunvis 3 functions. .Pp There are two parameters that can be controlled: the range of characters that are encoded (applies only to .Fn vis , +.Fn nvis , .Fn strvis , +.Fn strnvis , +.Fn strvisx , and -.Fn strvisx ) , +.Fn strnvisx ) , and the type of representation used. By default, all non-graphic characters, except space, tab, and newline are encoded. @@ -191,9 +244,12 @@ .Pp (The above flags have no effect for .Fn svis , +.Fn snvis , .Fn strsvis , -and +.Fn strsnvis , .Fn strsvisx . +and +.Fn strsnvisx . When using these functions, place all graphic characters to be encoded in an array pointed to by .Fa extra . @@ -328,6 +384,31 @@ .Ql M-C ) . With this flag set, the encoding is ambiguous and non-invertible. +.Sh ERRORS +The functions +.Fn nvis +and +.Fn snvis +will return +.Dv NULL +and the functions +.Fn strnvis , +.Fn strnvisx , +.Fn strsnvis , +and +.Fn strsnvisx , +will return +.Dv -1 +when the +.Fa dlen +destination buffer length size is not enough to perform the conversion while +setting +.Va errno +to: +.Bl -tag -width Er +.It Bq Er ENOSPC +The destination buffer size is not large enough to perform the conversion. +.El .Sh SEE ALSO .Xr unvis 1 , .Xr vis 1 , @@ -339,16 +420,26 @@ .Re .Sh HISTORY The -.Fa vis , -.Fa strvis , +.Fn vis , +.Fn strvis , and .Fa strvisx functions first appeared in .Bx 4.4 . The -.Fa svis , -.Fa strsvis , +.Fn svis , +.Fn strsvis , and -.Fa strsvisx +.Fn strsvisx functions appeared in .Nx 1.5 . +The buffer size limited versions of the functions ( +.Fn nvis , +.Fn strnvis , +.Fn strnvisx , +.Fn snvis , +.Fn strsnvis , +and +.Fn strsnvisx ) +appeared in +.Nx 1.6 . Index: src/lib/libc/gen/vis.c diff -u src/lib/libc/gen/vis.c:1.43 src/lib/libc/gen/vis.c:1.44 --- src/lib/libc/gen/vis.c:1.43 Sat Mar 12 00:23:41 2011 +++ src/lib/libc/gen/vis.c Sat Mar 12 14:52:48 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: vis.c,v 1.43 2011/03/12 05:23:41 christos Exp $ */ +/* $NetBSD: vis.c,v 1.44 2011/03/12 19:52:48 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.43 2011/03/12 05:23:41 christos Exp $"); +__RCSID("$NetBSD: vis.c,v 1.44 2011/03/12 19:52:48 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -65,15 +65,11 @@ #include <assert.h> #include <vis.h> +#include <errno.h> #include <stdlib.h> #ifdef __weak_alias -__weak_alias(strsvis,_strsvis) -__weak_alias(strsvisx,_strsvisx) -__weak_alias(strvis,_strvis) __weak_alias(strvisx,_strvisx) -__weak_alias(svis,_svis) -__weak_alias(vis,_vis) #endif #if !HAVE_VIS || !HAVE_SVIS @@ -118,7 +114,7 @@ * This is do_hvis, for HTTP style (RFC 1808) */ static char * -do_hvis(char *dst, size_t *len, int c, int flag, int nextc, const char *extra) +do_hvis(char *dst, size_t *dlen, int c, int flag, int nextc, const char *extra) { if ((isascii(c) && isalnum(c)) @@ -127,12 +123,12 @@ /* extra */ || c == '!' || c == '*' || c == '\'' || c == '(' || c == ')' || c == ',') { - dst = do_svis(dst, len, c, flag, nextc, extra); + dst = do_svis(dst, dlen, c, flag, nextc, extra); } else { - if (len) { - if (*len < 3) + if (dlen) { + if (*dlen < 3) return NULL; - *len -= 3; + *dlen -= 3; } *dst++ = '%'; *dst++ = xtoa(((unsigned int)c >> 4) & 0xf); @@ -147,7 +143,7 @@ * NB: No handling of long lines or CRLF. */ static char * -do_mvis(char *dst, size_t *len, int c, int flag, int nextc, const char *extra) +do_mvis(char *dst, size_t *dlen, int c, int flag, int nextc, const char *extra) { if ((c != '\n') && /* Space at the end of the line */ @@ -156,16 +152,16 @@ (!isspace(c) && (c < 33 || (c > 60 && c < 62) || c > 126)) || /* Specific char to be escaped */ strchr("#$@[\\]^`{|}~", c) != NULL)) { - if (len) { - if (*len < 3) + if (dlen) { + if (*dlen < 3) return NULL; - *len -= 3; + *dlen -= 3; } *dst++ = '='; *dst++ = XTOA(((unsigned int)c >> 4) & 0xf); *dst++ = XTOA((unsigned int)c & 0xf); } else { - dst = do_svis(dst, len, c, flag, nextc, extra); + dst = do_svis(dst, dlen, c, flag, nextc, extra); } return dst; } @@ -180,18 +176,18 @@ * backslash-protected. */ static char * -do_svis(char *dst, size_t *len, int c, int flag, int nextc, const char *extra) +do_svis(char *dst, size_t *dlen, int c, int flag, int nextc, const char *extra) { int isextra; - size_t olen = len ? *len : 0; + size_t odlen = dlen ? *dlen : 0; isextra = strchr(extra, c) != NULL; #define HAVE(x) \ do { \ - if (len) { \ - if (*len < (x)) \ + if (dlen) { \ + if (*dlen < (x)) \ goto out; \ - *len -= (x); \ + *dlen -= (x); \ } \ } while (/*CONSTCOND*/0) if (!isextra && isascii(c) && (isgraph(c) || iswhite(c) || @@ -240,8 +236,8 @@ *dst++ = '\\'; *dst++ = c; return dst; } - if (len) - *len = olen; + if (dlen) + *dlen = odlen; } } if (isextra || ((c & 0177) == ' ') || (flag & VIS_OCTAL)) { @@ -275,7 +271,7 @@ } return dst; out: - *len = olen; + *dlen = odlen; return NULL; } @@ -295,11 +291,11 @@ } /* - * svis - visually encode characters, also encoding the characters + * isnvis - visually encode characters, also encoding the characters * pointed to by `extra' */ -char * -svis(char *dst, int c, int flag, int nextc, const char *extra) +static char * +isnvis(char *dst, size_t *dlen, int c, int flag, int nextc, const char *extra) { char *nextra = NULL; visfun_t f; @@ -308,16 +304,36 @@ _DIAGASSERT(extra != NULL); MAKEEXTRALIST(flag, nextra, extra); if (!nextra) { + if (dlen && *dlen == 0) { + errno = ENOSPC; + return NULL; + } *dst = '\0'; /* can't create nextra, return "" */ return dst; } f = getvisfun(flag); - dst = (*f)(dst, NULL, c, flag, nextc, nextra); + dst = (*f)(dst, dlen, c, flag, nextc, nextra); free(nextra); + if (dst == NULL || (dlen && *dlen == 0)) { + errno = ENOSPC; + return NULL; + } *dst = '\0'; return dst; } +char * +svis(char *dst, int c, int flag, int nextc, const char *extra) +{ + return isnvis(dst, NULL, c, flag, nextc, extra); +} + +char * +snvis(char *dst, size_t dlen, int c, int flag, int nextc, const char *extra) +{ + return isnvis(dst, &dlen, c, flag, nextc, extra); +} + /* * strsvis, strsvisx - visually encode characters from src into dst @@ -334,8 +350,8 @@ * Strsvisx encodes exactly len bytes from src into dst. * This is useful for encoding a block of data. */ -int -strsvis(char *dst, const char *csrc, int flag, const char *extra) +static int +istrsnvis(char *dst, size_t *dlen, const char *csrc, int flag, const char *extra) { int c; char *start; @@ -352,16 +368,37 @@ return 0; } f = getvisfun(flag); - for (start = dst; (c = *src++) != '\0'; /* empty */) - dst = (*f)(dst, NULL, c, flag, *src, nextra); + for (start = dst; (c = *src++) != '\0'; /* empty */) { + dst = (*f)(dst, dlen, c, flag, *src, nextra); + if (dst == NULL) { + errno = ENOSPC; + return -1; + } + } free(nextra); + if (dlen && *dlen == 0) { + errno = ENOSPC; + return -1; + } *dst = '\0'; return (int)(dst - start); } +int +strsvis(char *dst, const char *csrc, int flag, const char *extra) +{ + return istrsnvis(dst, NULL, csrc, flag, extra); +} int -strsvisx(char *dst, const char *csrc, size_t len, int flag, const char *extra) +strsnvis(char *dst, size_t dlen, const char *csrc, int flag, const char *extra) +{ + return istrsnvis(dst, &dlen, csrc, flag, extra); +} + +static int +istrsnvisx(char *dst, size_t *dlen, const char *csrc, size_t len, int flag, + const char *extra) { unsigned char c; char *start; @@ -374,6 +411,10 @@ _DIAGASSERT(extra != NULL); MAKEEXTRALIST(flag, nextra, extra); if (! nextra) { + if (dlen && *dlen == 0) { + errno = ENOSPC; + return -1; + } *dst = '\0'; /* can't create nextra, return "" */ return 0; } @@ -381,20 +422,41 @@ f = getvisfun(flag); for (start = dst; len > 0; len--) { c = *src++; - dst = (*f)(dst, NULL, c, flag, len > 1 ? *src : '\0', nextra); + dst = (*f)(dst, dlen, c, flag, len > 1 ? *src : '\0', nextra); + if (dst == NULL) { + errno = ENOSPC; + return -1; + } } free(nextra); + if (dlen && *dlen == 0) { + errno = ENOSPC; + return -1; + } *dst = '\0'; return (int)(dst - start); } + +int +strsvisx(char *dst, const char *csrc, size_t len, int flag, const char *extra) +{ + return istrsnvisx(dst, NULL, csrc, len, flag, extra); +} + +int +strsnvisx(char *dst, size_t dlen, const char *csrc, size_t len, int flag, + const char *extra) +{ + return istrsnvisx(dst, &dlen, csrc, len, flag, extra); +} #endif #if !HAVE_VIS /* * vis - visually encode characters */ -char * -vis(char *dst, int c, int flag, int nextc) +static char * +invis(char *dst, size_t *dlen, int c, int flag, int nextc) { char *extra = NULL; unsigned char uc = (unsigned char)c; @@ -404,16 +466,36 @@ MAKEEXTRALIST(flag, extra, ""); if (! extra) { + if (dlen && *dlen == 0) { + errno = ENOSPC; + return NULL; + } *dst = '\0'; /* can't create extra, return "" */ return dst; } f = getvisfun(flag); - dst = (*f)(dst, NULL, uc, flag, nextc, extra); + dst = (*f)(dst, dlen, uc, flag, nextc, extra); free(extra); + if (dst == NULL || (dlen && *dlen == 0)) { + errno = ENOSPC; + return NULL; + } *dst = '\0'; return dst; } +char * +vis(char *dst, int c, int flag, int nextc) +{ + return invis(dst, NULL, c, flag, nextc); +} + +char * +nvis(char *dst, size_t dlen, int c, int flag, int nextc) +{ + return invis(dst, &dlen, c, flag, nextc); +} + /* * strvis, strvisx - visually encode characters from src into dst @@ -425,36 +507,68 @@ * Strvisx encodes exactly len bytes from src into dst. * This is useful for encoding a block of data. */ -int -strvis(char *dst, const char *src, int flag) +static int +istrnvis(char *dst, size_t *dlen, const char *src, int flag) { char *extra = NULL; int rv; MAKEEXTRALIST(flag, extra, ""); if (!extra) { + if (dlen && *dlen == 0) { + errno = ENOSPC; + return -1; + } *dst = '\0'; /* can't create extra, return "" */ return 0; } - rv = strsvis(dst, src, flag, extra); + rv = istrsnvis(dst, dlen, src, flag, extra); free(extra); return rv; } +int +strvis(char *dst, const char *src, int flag) +{ + return istrnvis(dst, NULL, src, flag); +} int -strvisx(char *dst, const char *src, size_t len, int flag) +strnvis(char *dst, size_t dlen, const char *src, int flag) +{ + return istrnvis(dst, &dlen, src, flag); +} + +static int +istrnvisx(char *dst, size_t *dlen, const char *src, size_t len, int flag) { char *extra = NULL; int rv; MAKEEXTRALIST(flag, extra, ""); if (!extra) { + if (dlen && *dlen == 0) { + errno = ENOSPC; + return -1; + } *dst = '\0'; /* can't create extra, return "" */ return 0; } - rv = strsvisx(dst, src, len, flag, extra); + rv = istrsnvisx(dst, dlen, src, len, flag, extra); free(extra); return rv; } + +int +strvisx(char *dst, const char *src, size_t len, int flag) +{ + return istrnvisx(dst, NULL, src, len, flag); +} + +int +strnvisx(char *dst, size_t dlen, const char *src, size_t len, int flag) +{ + return istrnvisx(dst, &dlen, src, len, flag); +} + #endif Index: src/lib/libc/include/namespace.h diff -u src/lib/libc/include/namespace.h:1.146 src/lib/libc/include/namespace.h:1.147 --- src/lib/libc/include/namespace.h:1.146 Thu Dec 16 13:38:06 2010 +++ src/lib/libc/include/namespace.h Sat Mar 12 14:52:48 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: namespace.h,v 1.146 2010/12/16 18:38:06 christos Exp $ */ +/* $NetBSD: namespace.h,v 1.147 2011/03/12 19:52:48 christos Exp $ */ /*- * Copyright (c) 1997-2004 The NetBSD Foundation, Inc. @@ -591,11 +591,8 @@ #define strsignal _strsignal #define strsuftoll _strsuftoll #define strsuftollx _strsuftollx -#define strsvis _strsvis -#define strsvisx _strsvisx #define strtok_r _strtok_r -#define strunvis _strunvis -#define strvis _strvis +#define strnunvisx _strnunvisx #define strvisx _strvisx #define svc_auth_reg _svc_auth_reg #define svc_create _svc_create @@ -628,7 +625,6 @@ #define svcudp_bufcreate _svcudp_bufcreate #define svcudp_create _svcudp_create #define svcudp_enablecache _svcudp_enablecache -#define svis _svis #define sysarch _sys_sysarch #define sysctl _sysctl #define sysctlbyname _sysctlbyname @@ -667,7 +663,6 @@ #define ualarm _ualarm #define uname _uname #define unsetenv _unsetenv -#define unvis _unvis #define user_from_uid _user_from_uid #define usleep _usleep #define utime _utime @@ -675,7 +670,6 @@ #define uuid_is_nil _uuid_is_nil #define valloc _valloc #define vdprintf _vdprintf -#define vis _vis #define vdprintf _vdprintf #ifndef vsnprintf #define vsnprintf _vsnprintf Index: src/tests/lib/libc/gen/t_vis.c diff -u src/tests/lib/libc/gen/t_vis.c:1.1 src/tests/lib/libc/gen/t_vis.c:1.2 --- src/tests/lib/libc/gen/t_vis.c:1.1 Tue Dec 28 07:46:15 2010 +++ src/tests/lib/libc/gen/t_vis.c Sat Mar 12 14:52:48 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: t_vis.c,v 1.1 2010/12/28 12:46:15 pgoyette Exp $ */ +/* $NetBSD: t_vis.c,v 1.2 2011/03/12 19:52:48 christos Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -46,9 +46,9 @@ #if 0 /* Not reversible */ VIS_NOSLASH, #endif -#ifdef VIS_HTTPSTYLE - VIS_HTTPSTYLE -#endif + VIS_HTTP1808, + VIS_MIMESTYLE, + VIS_HTTP1866, }; #define SIZE 256 @@ -75,13 +75,7 @@ for (i = 0; i < __arraycount(styles); i++) { strsvisx(visbuf, srcbuf, SIZE, styles[i], ""); - /* - * XXX: The strunvisx api is busted; flags should be - * UNVIS_ flags, buf we follow FreeBSD's lead. This - * needs to be redone, by moving UNVIS_END into the - * VIS_ space, and bump the library/symbol. - */ - strunvisx(dstbuf, visbuf, styles[i] & VIS_HTTPSTYLE); + strunvisx(dstbuf, visbuf, styles[i]); for (j = 0; j < SIZE; j++) if (dstbuf[j] != (char)j) atf_tc_fail_nonfatal("Failed for style %x, " Added files: Index: src/lib/libc/compat/gen/compat___unvis13.c diff -u /dev/null src/lib/libc/compat/gen/compat___unvis13.c:1.1 --- /dev/null Sat Mar 12 14:52:49 2011 +++ src/lib/libc/compat/gen/compat___unvis13.c Sat Mar 12 14:52:47 2011 @@ -0,0 +1,57 @@ +/* $NetBSD: compat___unvis13.c,v 1.1 2011/03/12 19:52:47 christos Exp $ */ + +/*- + * Copyright (c) 2011 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +#if defined(LIBC_SCCS) && !defined(lint) +__RCSID("$NetBSD: compat___unvis13.c,v 1.1 2011/03/12 19:52:47 christos Exp $"); +#endif /* LIBC_SCCS and not lint */ + +#define __LIBC12_SOURCE__ + +#include "namespace.h" +#include <sys/types.h> + +#include <assert.h> +#include <stdio.h> +#include <vis.h> +#include <compat/include/vis.h> + +#ifdef __warn_references +__warn_references(__unvis13, + "warning: reference to compatibility __unvis13(); include <vis.h> for correct reference") +#endif + +int +__unvis13(char *cp, int c, int *astate, int flag) +{ + flag = (flag & ~1) | ((flag & 1) ? UNVIS_END : 0); + return __unvis50(cp, c, astate, flag); +}