Module Name: src Committed By: christos Date: Wed Feb 20 20:27:42 UTC 2013
Modified Files: src/lib/libc/gen: vis.c Log Message: Minor nits, and make it compile in FreeBSD (NBBY needs sys/params.h) To generate a diff of this commit: cvs rdiff -u -r1.58 -r1.59 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.58 src/lib/libc/gen/vis.c:1.59 --- src/lib/libc/gen/vis.c:1.58 Wed Feb 20 14:59:34 2013 +++ src/lib/libc/gen/vis.c Wed Feb 20 15:27:42 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: vis.c,v 1.58 2013/02/20 19:59:34 tron Exp $ */ +/* $NetBSD: vis.c,v 1.59 2013/02/20 20:27:42 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.58 2013/02/20 19:59:34 tron Exp $"); +__RCSID("$NetBSD: vis.c,v 1.59 2013/02/20 20:27:42 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #ifdef __FBSDID __FBSDID("$FreeBSD$"); @@ -66,6 +66,7 @@ __FBSDID("$FreeBSD$"); #include "namespace.h" #include <sys/types.h> +#include <sys/param.h> #include <assert.h> #include <vis.h> @@ -105,7 +106,7 @@ static wchar_t *do_svis(wchar_t *, wint_ #define MAXEXTRAS 10 -#ifdef notyet +#ifndef __NetBSD__ /* * On NetBSD MB_LEN_MAX is currently 32 which does not fit on any integer * integral type and it is probably wrong, since currently the maximum @@ -113,8 +114,19 @@ static wchar_t *do_svis(wchar_t *, wint_ * loops below are using sizeof(uint64_t) - 1 instead of MB_LEN_MAX, and * the assertion is commented out. */ -__CTASSERT(MB_LEN_MAX <= sizeof(uint64_t)) +#ifdef __FreeBSD__ +/* + * On FreeBSD including <sys/systm.h> for CTASSERT only works in kernel + * mode. + */ +#ifndef CTASSERT +#define CTASSERT(x) _CTASSERT(x, __LINE__) +#define _CTASSERT(x, y) __CTASSERT(x, y) +#define __CTASSERT(x, y) typedef char __assert ## y[(x) ? 1 : -1] #endif +#endif /* __FreeBSD__ */ +CTASSERT(MB_LEN_MAX <= sizeof(uint64_t)); +#endif /* !__NetBSD__ */ /* * This is do_hvis, for HTTP style (RFC 1808) @@ -240,7 +252,7 @@ do_mbyte(wchar_t *dst, wint_t c, int fla * This is do_vis, the central code of vis. * dst: Pointer to the destination buffer * c: Character to encode - * flags: Flag word + * flags: Flags word * nextc: The character following 'c' * extra: Pointer to the list of extra characters to be * backslash-protected. @@ -260,13 +272,13 @@ do_svis(wchar_t *dst, wint_t c, int flag /* See comment in istrsenvisx() output loop, below. */ wmsk = 0; - for (i = sizeof(uint64_t) - 1; i >= 0; i--) { + for (i = sizeof(wmsk) - 1; i >= 0; i--) { shft = i * NBBY; - bmsk = (uint64_t)(0xffL << shft); + bmsk = (uint64_t)0xffLL << shft; wmsk |= bmsk; if ((c & wmsk) || i == 0) dst = do_mbyte(dst, (wint_t)( - (unsigned int)(c & bmsk) >> shft), + (uint64_t)(c & bmsk) >> shft), flags, nextc, iswextra); } @@ -370,7 +382,7 @@ istrsenvisx(char *mbdst, size_t *dlen, c dst = pdst; src = psrc; - /* Use caller's multibyte conversion error flags. */ + /* Use caller's multibyte conversion error flag. */ if (cerr_ptr) cerr = *cerr_ptr; @@ -469,18 +481,19 @@ istrsenvisx(char *mbdst, size_t *dlen, c * Conversion error, process as a byte(s) instead. * Examine each byte and higher-order bytes for * data. E.g., - * 0x0000a264 -> a2 64 - * 0x1f00a264 -> 1f 00 a2 64 + * 0x000000000000a264 -> a2 64 + * 0x000000001f00a264 -> 1f 00 a2 64 */ clen = 0; wmsk = 0; - for (i = sizeof(uint64_t) - 1; i >= 0; i--) { + for (i = sizeof(wmsk) - 1; i >= 0; i--) { shft = i * NBBY; - bmsk = (uint64_t)(0xffL << shft); + bmsk = (uint64_t)0xffLL << shft; wmsk |= bmsk; if ((*dst & wmsk) || i == 0) - mbdst[clen++] = (char)((unsigned int) - (*dst & bmsk) >> shft); + mbdst[clen++] = (char)( + (uint64_t)(*dst & bmsk) >> + shft); } cerr = 1; } @@ -498,7 +511,7 @@ istrsenvisx(char *mbdst, size_t *dlen, c /* Terminate the output string. */ *mbdst = '\0'; - /* Pass conversion error flags out. */ + /* Pass conversion error flag out. */ if (cerr_ptr) *cerr_ptr = cerr;