|
6 | 6 | * Portions Copyright (c) 1994, Regents of the University of California |
7 | 7 | * |
8 | 8 | * IDENTIFICATION |
9 | | - * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c,v 1.23 2009/01/29 19:23:40 tgl Exp $ |
| 9 | + * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c,v 1.24 2009/02/10 19:29:39 petere Exp $ |
10 | 10 | * |
11 | 11 | *------------------------------------------------------------------------- |
12 | 12 | */ |
|
16 | 16 | #include "mb/pg_wchar.h" |
17 | 17 | #include "../../Unicode/utf8_to_koi8r.map" |
18 | 18 | #include "../../Unicode/koi8r_to_utf8.map" |
| 19 | +#include "../../Unicode/utf8_to_koi8u.map" |
| 20 | +#include "../../Unicode/koi8u_to_utf8.map" |
19 | 21 |
|
20 | 22 | PG_MODULE_MAGIC; |
21 | 23 |
|
22 | 24 | PG_FUNCTION_INFO_V1(utf8_to_koi8r); |
23 | 25 | PG_FUNCTION_INFO_V1(koi8r_to_utf8); |
24 | 26 |
|
| 27 | +PG_FUNCTION_INFO_V1(utf8_to_koi8u); |
| 28 | +PG_FUNCTION_INFO_V1(koi8u_to_utf8); |
| 29 | + |
25 | 30 | extern Datum utf8_to_koi8r(PG_FUNCTION_ARGS); |
26 | 31 | extern Datum koi8r_to_utf8(PG_FUNCTION_ARGS); |
27 | 32 |
|
| 33 | +extern Datum utf8_to_koi8u(PG_FUNCTION_ARGS); |
| 34 | +extern Datum koi8u_to_utf8(PG_FUNCTION_ARGS); |
| 35 | + |
28 | 36 | /* ---------- |
29 | 37 | * conv_proc( |
30 | 38 | * INTEGER, -- source encoding id |
@@ -65,3 +73,33 @@ koi8r_to_utf8(PG_FUNCTION_ARGS) |
65 | 73 |
|
66 | 74 | PG_RETURN_VOID(); |
67 | 75 | } |
| 76 | + |
| 77 | +Datum |
| 78 | +utf8_to_koi8u(PG_FUNCTION_ARGS) |
| 79 | +{ |
| 80 | + unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2); |
| 81 | + unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); |
| 82 | + int len = PG_GETARG_INT32(4); |
| 83 | + |
| 84 | + CHECK_ENCODING_CONVERSION_ARGS(PG_UTF8, PG_KOI8U); |
| 85 | + |
| 86 | + UtfToLocal(src, dest, ULmapKOI8U, NULL, |
| 87 | + sizeof(ULmapKOI8U) / sizeof(pg_utf_to_local), 0, PG_KOI8U, len); |
| 88 | + |
| 89 | + PG_RETURN_VOID(); |
| 90 | +} |
| 91 | + |
| 92 | +Datum |
| 93 | +koi8u_to_utf8(PG_FUNCTION_ARGS) |
| 94 | +{ |
| 95 | + unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2); |
| 96 | + unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3); |
| 97 | + int len = PG_GETARG_INT32(4); |
| 98 | + |
| 99 | + CHECK_ENCODING_CONVERSION_ARGS(PG_KOI8U, PG_UTF8); |
| 100 | + |
| 101 | + LocalToUtf(src, dest, LUmapKOI8U, NULL, |
| 102 | + sizeof(LUmapKOI8U) / sizeof(pg_local_to_utf), 0, PG_KOI8U, len); |
| 103 | + |
| 104 | + PG_RETURN_VOID(); |
| 105 | +} |
0 commit comments