X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/1f2f436a38f7ae2d39a943ad2898d8fed4ed2e58..refs/heads/master:/locale/FreeBSD/ascii.c?ds=sidebyside diff --git a/locale/FreeBSD/ascii.c b/locale/FreeBSD/ascii.c index 7006e01..4c910ea 100644 --- a/locale/FreeBSD/ascii.c +++ b/locale/FreeBSD/ascii.c @@ -6,6 +6,11 @@ * This code is derived from software contributed to Berkeley by * Paul Borman at Krystal Technologies. * + * Copyright (c) 2011 The FreeBSD Foundation + * All rights reserved. + * Portions of this software were developed by David Chisnall + * under sponsorship from the FreeBSD Foundation. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -32,7 +37,7 @@ */ #include -__FBSDID("$FreeBSD: src/lib/libc/locale/ascii.c,v 1.1 2008/01/21 23:48:12 ache Exp $"); +__FBSDID("$FreeBSD$"); #include #include @@ -45,33 +50,32 @@ __FBSDID("$FreeBSD: src/lib/libc/locale/ascii.c,v 1.1 2008/01/21 23:48:12 ache E #include "mblocal.h" static size_t _ascii_mbrtowc(wchar_t * __restrict, const char * __restrict, - size_t, mbstate_t * __restrict); -static int _ascii_mbsinit(const mbstate_t *); + size_t, mbstate_t * __restrict, locale_t); +static int _ascii_mbsinit(const mbstate_t *, locale_t); static size_t _ascii_mbsnrtowcs(wchar_t * __restrict dst, const char ** __restrict src, size_t nms, size_t len, - mbstate_t * __restrict ps __unused); + mbstate_t * __restrict ps __unused, locale_t); static size_t _ascii_wcrtomb(char * __restrict, wchar_t, - mbstate_t * __restrict); + mbstate_t * __restrict, locale_t); static size_t _ascii_wcsnrtombs(char * __restrict, const wchar_t ** __restrict, - size_t, size_t, mbstate_t * __restrict); + size_t, size_t, mbstate_t * __restrict, locale_t); int -_ascii_init(_RuneLocale *rl) +_ascii_init(struct __xlocale_st_runelocale *xrl) { - __mbrtowc = _ascii_mbrtowc; - __mbsinit = _ascii_mbsinit; - __mbsnrtowcs = _ascii_mbsnrtowcs; - __wcrtomb = _ascii_wcrtomb; - __wcsnrtombs = _ascii_wcsnrtombs; - _CurrentRuneLocale = rl; - __mb_cur_max = 1; - __mb_sb_limit = 128; + xrl->__mbrtowc = _ascii_mbrtowc; + xrl->__mbsinit = _ascii_mbsinit; + xrl->__mbsnrtowcs = _ascii_mbsnrtowcs; + xrl->__wcrtomb = _ascii_wcrtomb; + xrl->__wcsnrtombs = _ascii_wcsnrtombs; + xrl->__mb_cur_max = 1; + xrl->__mb_sb_limit = 128; return(0); } static int -_ascii_mbsinit(const mbstate_t *ps __unused) +_ascii_mbsinit(const mbstate_t *ps __unused, locale_t loc __unused) { /* @@ -83,7 +87,7 @@ _ascii_mbsinit(const mbstate_t *ps __unused) static size_t _ascii_mbrtowc(wchar_t * __restrict pwc, const char * __restrict s, size_t n, - mbstate_t * __restrict ps __unused) + mbstate_t * __restrict ps __unused, locale_t loc __unused) { if (s == NULL) @@ -103,7 +107,7 @@ _ascii_mbrtowc(wchar_t * __restrict pwc, const char * __restrict s, size_t n, static size_t _ascii_wcrtomb(char * __restrict s, wchar_t wc, - mbstate_t * __restrict ps __unused) + mbstate_t * __restrict ps __unused, locale_t loc __unused) { if (s == NULL) @@ -119,7 +123,7 @@ _ascii_wcrtomb(char * __restrict s, wchar_t wc, static size_t _ascii_mbsnrtowcs(wchar_t * __restrict dst, const char ** __restrict src, - size_t nms, size_t len, mbstate_t * __restrict ps __unused) + size_t nms, size_t len, mbstate_t * __restrict ps __unused, locale_t loc __unused) { const char *s; size_t nchr; @@ -138,6 +142,7 @@ _ascii_mbsnrtowcs(wchar_t * __restrict dst, const char ** __restrict src, nchr = 0; while (len-- > 0 && nms-- > 0) { if (*s & 0x80) { + *src = s; errno = EILSEQ; return ((size_t)-1); } @@ -153,7 +158,7 @@ _ascii_mbsnrtowcs(wchar_t * __restrict dst, const char ** __restrict src, static size_t _ascii_wcsnrtombs(char * __restrict dst, const wchar_t ** __restrict src, - size_t nwc, size_t len, mbstate_t * __restrict ps __unused) + size_t nwc, size_t len, mbstate_t * __restrict ps __unused, locale_t loc __unused) { const wchar_t *s; size_t nchr; @@ -172,6 +177,7 @@ _ascii_wcsnrtombs(char * __restrict dst, const wchar_t ** __restrict src, nchr = 0; while (len-- > 0 && nwc-- > 0) { if (*s < 0 || *s > 127) { + *src = s; errno = EILSEQ; return ((size_t)-1); }