Print this page
2964 need POSIX 2008 locale object support
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
Approved by: TBD

*** 1,6 **** --- 1,7 ---- /* + * Copyright 2013 Garrett D'Amore <garrett@damore.org> * Copyright (c) 2004 Tim J. Robbins. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions
*** 26,49 **** #include "lint.h" #include "runetype.h" #include <wchar.h> #include <wctype.h> ! wint_t ! __nextwctype(wint_t wc, wctype_t wct) { size_t lim; ! _RuneRange *rr = &_CurrentRuneLocale->__runetype_ext; ! _RuneEntry *base, *re; int noinc; noinc = 0; if (wc < _CACHED_RUNES) { wc++; while (wc < _CACHED_RUNES) { ! if (_CurrentRuneLocale->__runetype[wc] & wct) return (wc); wc++; } wc--; } --- 27,62 ---- #include "lint.h" #include "runetype.h" #include <wchar.h> #include <wctype.h> + #include "localeimpl.h" ! /* ! * nextwctype, while exposed on *BSD/MacOS X, is considered "consolidation ! * private" for illumos. Hence, we keep the _l version static for now. ! * If we decide to make this public, just remove the static keyword and ! * put it in the headers and mapfile. (Should fix up the underscore prefix ! * to __nextwctype() as well.) ! */ ! static wint_t ! nextwctype_l(wint_t wc, wctype_t wct, locale_t loc) { size_t lim; ! const _RuneLocale *rl; ! const _RuneRange *rr; ! const _RuneEntry *base, *re; int noinc; + rl = loc->runelocale; + rr = &rl->__runetype_ext; + noinc = 0; if (wc < _CACHED_RUNES) { wc++; while (wc < _CACHED_RUNES) { ! if (rl->__runetype[wc] & wct) return (wc); wc++; } wc--; }
*** 83,88 **** --- 96,110 ---- return (wc); } else if (re->__map & wct) return (wc); } return (-1); + } + + /* + * External, but consolidation private routine. + */ + wint_t + __nextwctype(wint_t wc, wctype_t wct) + { + return (nextwctype_l(wc, wct, uselocale(NULL))); }