]> git.saurik.com Git - apple/libc.git/blame - locale/runedepreciated.c
Libc-391.4.3.tar.gz
[apple/libc.git] / locale / runedepreciated.c
CommitLineData
3d9156a7
A
1/*
2 * Copyright (c) 2004 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24#include "xlocale_private.h"
25
26#include <string.h>
27#include <rune.h>
28#include <stdlib.h>
29#include <wchar.h>
30#include "runedepreciated.h"
31
32__private_extern__ const char __rune_depreciated_msg[] = "\
33%s and other functions prototyped in rune.h are depreciated in favor of\n\
34the ISO C99 extended multibyte and wide character facilities and should not\n\
35be used in new applications.\n\
36";
37
38__private_extern__ rune_t
39__sgetrune(const char *string, size_t n, char const **result)
40{
41 wchar_t wc;
42 size_t converted = mbrtowc(&wc, string, n, NULL);
43 __darwin_rune_t invalid_rune = __current_locale()->__lc_ctype->_CurrentRuneLocale.__invalid_rune;
44
45 switch (converted) {
46 case (size_t)-2: /* incomplete */
47 if (result)
48 *result = string;
49 return invalid_rune;
50 case (size_t)-1: /* invalid */
51 if (result)
52 *result = string + 1;
53 return invalid_rune;
54 case (size_t)0: /* null wide character */
55 {
56 int i;
57
58 for (i = 1; i < n; i++)
59 if (mbrtowc(&wc, string, n, NULL) == (size_t)0)
60 break;
61 if (result)
62 *result = string + i;
63 return (rune_t)0;
64 }
65 default:
66 if (result)
67 *result = string + converted;
68 return (rune_t)wc;
69 }
70 /* NOTREACHED */
71}
72
73__private_extern__ int
74__sputrune(rune_t rune, char *string, size_t n, char **result)
75{
76 char buf[MB_CUR_MAX];
77 size_t converted = wcrtomb(buf, rune, NULL);
78
79 if (converted < 0) {
80 if (result)
81 *result = string;
82 } else if (n >= converted) {
83 if (string)
84 bcopy(buf, string, converted);
85 if (result)
86 *result = string + converted;
87 } else if (result)
88 *result = NULL;
89 return (converted < 0 ? 0 : converted);
90}
91
92__private_extern__ rune_t
93sgetrune(const char *string, size_t n, char const **result)
94{
95 static int warn_depreciated = 1;
96
97 if (warn_depreciated) {
98 warn_depreciated = 0;
99 fprintf(stderr, __rune_depreciated_msg, "sgetrune");
100 }
101 return __sgetrune(string, n, result);
102}
103
104__private_extern__ int
105sputrune(rune_t rune, char *string, size_t n, char **result)
106{
107 static int warn_depreciated = 1;
108
109 if (warn_depreciated) {
110 warn_depreciated = 0;
111 fprintf(stderr, __rune_depreciated_msg, "sputrune");
112 }
113 return __sputrune(rune, string, n, result);
114}