PostgreSQL Source Code  git master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
utf8_and_win.c File Reference
#include "postgres.h"
#include "fmgr.h"
#include "mb/pg_wchar.h"
#include "../../Unicode/utf8_to_win1250.map"
#include "../../Unicode/utf8_to_win1251.map"
#include "../../Unicode/utf8_to_win1252.map"
#include "../../Unicode/utf8_to_win1253.map"
#include "../../Unicode/utf8_to_win1254.map"
#include "../../Unicode/utf8_to_win1255.map"
#include "../../Unicode/utf8_to_win1256.map"
#include "../../Unicode/utf8_to_win1257.map"
#include "../../Unicode/utf8_to_win1258.map"
#include "../../Unicode/utf8_to_win866.map"
#include "../../Unicode/utf8_to_win874.map"
#include "../../Unicode/win1250_to_utf8.map"
#include "../../Unicode/win1251_to_utf8.map"
#include "../../Unicode/win1252_to_utf8.map"
#include "../../Unicode/win1253_to_utf8.map"
#include "../../Unicode/win1254_to_utf8.map"
#include "../../Unicode/win1255_to_utf8.map"
#include "../../Unicode/win1256_to_utf8.map"
#include "../../Unicode/win1257_to_utf8.map"
#include "../../Unicode/win866_to_utf8.map"
#include "../../Unicode/win874_to_utf8.map"
#include "../../Unicode/win1258_to_utf8.map"
Include dependency graph for utf8_and_win.c:

Go to the source code of this file.

Data Structures

struct  pg_conv_map
 

Functions

 PG_FUNCTION_INFO_V1 (win_to_utf8)
 
 PG_FUNCTION_INFO_V1 (utf8_to_win)
 
Datum win_to_utf8 (PG_FUNCTION_ARGS)
 
Datum utf8_to_win (PG_FUNCTION_ARGS)
 

Variables

 PG_MODULE_MAGIC
 
static const pg_conv_map maps []
 

Function Documentation

PG_FUNCTION_INFO_V1 ( win_to_utf8  )
PG_FUNCTION_INFO_V1 ( utf8_to_win  )
Datum utf8_to_win ( PG_FUNCTION_ARGS  )

Definition at line 134 of file utf8_and_win.c.

References CHECK_ENCODING_CONVERSION_ARGS, encoding, ereport, errcode(), errmsg(), ERROR, i, lengthof, NULL, PG_GETARG_CSTRING, PG_GETARG_INT32, PG_RETURN_VOID, PG_UTF8, and UtfToLocal().

135 {
136  int encoding = PG_GETARG_INT32(1);
137  unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
138  unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
139  int len = PG_GETARG_INT32(4);
140  int i;
141 
143 
144  for (i = 0; i < lengthof(maps); i++)
145  {
146  if (encoding == maps[i].encoding)
147  {
148  UtfToLocal(src, len, dest,
149  maps[i].map2, maps[i].size2,
150  NULL, 0,
151  NULL,
152  encoding);
153  PG_RETURN_VOID();
154  }
155  }
156 
157  ereport(ERROR,
158  (errcode(ERRCODE_INTERNAL_ERROR),
159  errmsg("unexpected encoding ID %d for WIN character sets",
160  encoding)));
161 
162  PG_RETURN_VOID();
163 }
#define PG_GETARG_INT32(n)
Definition: fmgr.h:225
int errcode(int sqlerrcode)
Definition: elog.c:575
#define lengthof(array)
Definition: c.h:557
void UtfToLocal(const unsigned char *utf, int len, unsigned char *iso, const pg_utf_to_local *map, int mapsize, const pg_utf_to_local_combined *cmap, int cmapsize, utf_local_conversion_func conv_func, int encoding)
Definition: conv.c:390
#define ERROR
Definition: elog.h:43
static const pg_conv_map maps[]
Definition: utf8_and_win.c:65
#define ereport(elevel, rest)
Definition: elog.h:122
static char * encoding
Definition: initdb.c:121
#define PG_RETURN_VOID()
Definition: fmgr.h:293
#define NULL
Definition: c.h:226
#define CHECK_ENCODING_CONVERSION_ARGS(srcencoding, destencoding)
Definition: pg_wchar.h:428
int errmsg(const char *fmt,...)
Definition: elog.c:797
int i
#define PG_GETARG_CSTRING(n)
Definition: fmgr.h:233
Datum win_to_utf8 ( PG_FUNCTION_ARGS  )

Definition at line 102 of file utf8_and_win.c.

References CHECK_ENCODING_CONVERSION_ARGS, encoding, ereport, errcode(), errmsg(), ERROR, i, lengthof, LocalToUtf(), NULL, PG_GETARG_CSTRING, PG_GETARG_INT32, PG_RETURN_VOID, and PG_UTF8.

103 {
104  int encoding = PG_GETARG_INT32(0);
105  unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
106  unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
107  int len = PG_GETARG_INT32(4);
108  int i;
109 
111 
112  for (i = 0; i < lengthof(maps); i++)
113  {
114  if (encoding == maps[i].encoding)
115  {
116  LocalToUtf(src, len, dest,
117  maps[i].map1, maps[i].size1,
118  NULL, 0,
119  NULL,
120  encoding);
121  PG_RETURN_VOID();
122  }
123  }
124 
125  ereport(ERROR,
126  (errcode(ERRCODE_INTERNAL_ERROR),
127  errmsg("unexpected encoding ID %d for WIN character sets",
128  encoding)));
129 
130  PG_RETURN_VOID();
131 }
#define PG_GETARG_INT32(n)
Definition: fmgr.h:225
int errcode(int sqlerrcode)
Definition: elog.c:575
#define lengthof(array)
Definition: c.h:557
#define ERROR
Definition: elog.h:43
void LocalToUtf(const unsigned char *iso, int len, unsigned char *utf, const pg_local_to_utf *map, int mapsize, const pg_local_to_utf_combined *cmap, int cmapsize, utf_local_conversion_func conv_func, int encoding)
Definition: conv.c:576
static const pg_conv_map maps[]
Definition: utf8_and_win.c:65
#define ereport(elevel, rest)
Definition: elog.h:122
static char * encoding
Definition: initdb.c:121
#define PG_RETURN_VOID()
Definition: fmgr.h:293
#define NULL
Definition: c.h:226
#define CHECK_ENCODING_CONVERSION_ARGS(srcencoding, destencoding)
Definition: pg_wchar.h:428
int errmsg(const char *fmt,...)
Definition: elog.c:797
int i
#define PG_GETARG_CSTRING(n)
Definition: fmgr.h:233

Variable Documentation

const pg_conv_map maps[]
static

Definition at line 65 of file utf8_and_win.c.

PG_MODULE_MAGIC

Definition at line 40 of file utf8_and_win.c.