xref: /titanic_41/usr/src/lib/libbc/libc/gen/common/wctomb.c (revision ac88567a7a5bb7f01cf22cf366bc9d6203e24d7a)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 1991 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 /*
28  * wctomb
29  */
30 
31 #pragma ident	"%Z%%M%	%I%	%E% SMI"
32 
33 #if !defined(lint) && defined(SCCSIDS)
34 static  char *sccsid = "%Z%%M% %I%     %E% SMI";
35 #endif
36 
37 #include <sys/types.h>
38 #include "codeset.h"
39 #include "mbextern.h"
40 
41 int
42 wctomb(s, pwc)
43 	char *s;
44 	wchar_t  pwc;
45 {
46 	char *handle;		/* handle */
47 	int (*p)();
48 	int ret;
49 
50 	switch (_code_set_info.code_id) {
51 	case CODESET_NONE:
52 		/*
53 		 * Default code set,
54 		 */
55 		if (s == NULL)
56 			return (0);	/* No state dependency */
57 		else {
58 			*s = (char) (pwc & 0x00ff);
59 			return (1);
60 		}
61 	case CODESET_EUC:
62 		/*
63 		 * EUC code set
64 		 */
65 		if (s == NULL)
66 			return (0);	/* No state dependecy */
67 		return(_wctomb_euc(s, pwc));
68 		break;
69 
70 	case CODESET_XCCS:
71 		/*
72 		 * XCCS code set
73 		 */
74 		if (s == 0)
75 			return (0);	/* No state dependecy */
76 		return(_wctomb_xccs(s, pwc));
77 		break;
78 
79 	case CODESET_ISO2022:
80 		/*
81 		 * ISO family
82 		 */
83 		if (s == 0)
84 			return (1);	/* State dependant */
85 		return(_wctomb_iso(s, pwc));
86 		break;
87 
88 	default:
89 		/*
90 		 * User defined code set
91 		 */
92 		 handle = _ml_open_library();
93 		 if (handle == (char *)NULL)
94 			return(ERROR_NO_LIB);	/* No user library */
95 		 p = (int (*)()) dlsym(handle, "_wctomb");
96 		 if (p == (int (*)()) NULL)
97 			return(ERROR_NO_SYM);
98 		 ret = (*p)(s, pwc);
99 		 return (ret);
100 		 break;
101 	}
102 	/* NOTREACHED */
103 }
104