Age Owner TLA Line data Source code
1 : /*-------------------------------------------------------------------------
2 : *
3 : * EUC_JIS_2004 <--> UTF8
4 : *
5 : * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
6 : * Portions Copyright (c) 1994, Regents of the University of California
7 : *
8 : * IDENTIFICATION
9 : * src/backend/utils/mb/conversion_procs/utf8_and_euc2004/utf8_and_euc2004.c
10 : *
11 : *-------------------------------------------------------------------------
12 : */
13 :
14 : #include "postgres.h"
15 : #include "fmgr.h"
16 : #include "mb/pg_wchar.h"
17 : #include "../../Unicode/euc_jis_2004_to_utf8.map"
18 : #include "../../Unicode/utf8_to_euc_jis_2004.map"
19 :
166 tgl@sss.pgh.pa.us 20 CBC 6 : PG_MODULE_MAGIC_EXT(
21 : .name = "utf8_and_euc2004",
22 : .version = PG_VERSION
23 : );
24 :
6742 ishii@postgresql.org 25 6 : PG_FUNCTION_INFO_V1(euc_jis_2004_to_utf8);
26 6 : PG_FUNCTION_INFO_V1(utf8_to_euc_jis_2004);
27 :
28 : /* ----------
29 : * conv_proc(
30 : * INTEGER, -- source encoding id
31 : * INTEGER, -- destination encoding id
32 : * CSTRING, -- source string (null terminated C string)
33 : * CSTRING, -- destination string (null terminated C string)
34 : * INTEGER, -- source string length
35 : * BOOL -- if true, don't throw an error if conversion fails
36 : * ) returns INTEGER;
37 : *
38 : * Returns the number of bytes successfully converted.
39 : * ----------
40 : */
41 : Datum
42 120 : euc_jis_2004_to_utf8(PG_FUNCTION_ARGS)
43 : {
44 120 : unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
45 120 : unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
46 120 : int len = PG_GETARG_INT32(4);
1621 heikki.linnakangas@i 47 120 : bool noError = PG_GETARG_BOOL(5);
48 : int converted;
49 :
6066 tgl@sss.pgh.pa.us 50 120 : CHECK_ENCODING_CONVERSION_ARGS(PG_EUC_JIS_2004, PG_UTF8);
51 :
1621 heikki.linnakangas@i 52 120 : converted = LocalToUtf(src, len, dest,
53 : &euc_jis_2004_to_unicode_tree,
54 : LUmapEUC_JIS_2004_combined, lengthof(LUmapEUC_JIS_2004_combined),
55 : NULL,
56 : PG_EUC_JIS_2004,
57 : noError);
58 :
59 75 : PG_RETURN_INT32(converted);
60 : }
61 :
62 : Datum
6742 ishii@postgresql.org 63 183 : utf8_to_euc_jis_2004(PG_FUNCTION_ARGS)
64 : {
65 183 : unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
66 183 : unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
67 183 : int len = PG_GETARG_INT32(4);
1621 heikki.linnakangas@i 68 183 : bool noError = PG_GETARG_BOOL(5);
69 : int converted;
70 :
6066 tgl@sss.pgh.pa.us 71 183 : CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_EUC_JIS_2004);
72 :
1621 heikki.linnakangas@i 73 183 : converted = UtfToLocal(src, len, dest,
74 : &euc_jis_2004_from_unicode_tree,
75 : ULmapEUC_JIS_2004_combined, lengthof(ULmapEUC_JIS_2004_combined),
76 : NULL,
77 : PG_EUC_JIS_2004,
78 : noError);
79 :
80 120 : PG_RETURN_INT32(converted);
81 : }
|