コード例 #1
0
ファイル: wchar.c プロジェクト: sunyangkobe/cscd43
static int
pg_sjis_verifier(const unsigned char *s, int len)
{
	int l, mbl;
	unsigned char c1, c2;

	l = mbl = pg_sjis_mblen(s);

	if (len < l)
		return -1;

	if (l == 1)					/* pg_sjis_mblen already verified it */
		return mbl;

	c1 = *s++;
	c2 = *s;
	if (!ISSJISHEAD(c1) || !ISSJISTAIL(c2))
		return -1;
	return mbl;
}
コード例 #2
0
ファイル: utf8_and_sjis_eudc.c プロジェクト: bwtakacy/eudc
				m = c[1] - 0x40;

				if (m >= 0x40)
					m--;

				ucs = 0xe000 + n * 188 + m;

				*dest++ = (ucs >> 12) | 0xe0;
				*dest++ = (ucs & 0x0fc0) >> 6 | 0x80;
				*dest++ = (ucs & 0x003f) | 0x80;
			}
			*dest = '\0';
		}
		else
		{
			clen = (ISSJISHEAD(c[0]) ? 2 : 1);
			sjis_len += clen;
		}
	}

	/* SJIS to UTF8 */
	if (sjis_len > 0)
		DirectFunctionCall5(sjis_to_utf8, PG_SJIS, PG_UTF8,
							CStringGetDatum(p), CStringGetDatum(dest),
							sjis_len);

	if (fallback_character != NULL &&
		fallback_character != (unsigned char*) eudc_fallback_character)
		pfree(fallback_character);

	PG_RETURN_VOID();