mbsrtowcs.c (129179) | mbsrtowcs.c (132497) |
---|---|
1/*- 2 * Copyright (c) 2002-2004 Tim J. Robbins. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2002-2004 Tim J. Robbins. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> |
28__FBSDID("$FreeBSD: head/lib/libc/locale/mbsrtowcs.c 129179 2004-05-13 11:20:27Z tjr $"); | 28__FBSDID("$FreeBSD: head/lib/libc/locale/mbsrtowcs.c 132497 2004-07-21 10:54:57Z tjr $"); |
29 30#include <errno.h> 31#include <limits.h> 32#include <stdlib.h> 33#include <wchar.h> 34#include "mblocal.h" 35 36size_t 37mbsrtowcs(wchar_t * __restrict dst, const char ** __restrict src, size_t len, 38 mbstate_t * __restrict ps) 39{ 40 static mbstate_t mbs; 41 42 if (ps == NULL) 43 ps = &mbs; | 29 30#include <errno.h> 31#include <limits.h> 32#include <stdlib.h> 33#include <wchar.h> 34#include "mblocal.h" 35 36size_t 37mbsrtowcs(wchar_t * __restrict dst, const char ** __restrict src, size_t len, 38 mbstate_t * __restrict ps) 39{ 40 static mbstate_t mbs; 41 42 if (ps == NULL) 43 ps = &mbs; |
44 return (__mbsrtowcs(dst, src, len, ps)); | 44 return (__mbsnrtowcs(dst, src, SIZE_T_MAX, len, ps)); |
45} | 45} |
46 47size_t 48__mbsrtowcs_std(wchar_t * __restrict dst, const char ** __restrict src, 49 size_t len, mbstate_t * __restrict ps) 50{ 51 const char *s; 52 size_t nchr; 53 wchar_t wc; 54 int nb; 55 56 s = *src; 57 nchr = 0; 58 59 if (dst == NULL) { 60 for (;;) { 61 if ((nb = (int)__mbrtowc(&wc, s, MB_CUR_MAX, ps)) < 0) 62 /* Invalid sequence - mbrtowc() sets errno. */ 63 return ((size_t)-1); 64 else if (nb == 0) 65 return (nchr); 66 s += nb; 67 nchr++; 68 } 69 /*NOTREACHED*/ 70 } 71 72 while (len-- > 0) { 73 if ((nb = (int)__mbrtowc(dst, s, MB_CUR_MAX, ps)) < 0) { 74 *src = s; 75 return ((size_t)-1); 76 } else if (nb == 0) { 77 *src = NULL; 78 return (nchr); 79 } 80 s += nb; 81 nchr++; 82 dst++; 83 } 84 *src = s; 85 return (nchr); 86} | |