Author: mturk
Date: Mon Mar 28 17:30:09 2011
New Revision: 1086303
URL: http://svn.apache.org/viewvc?rev=1086303&view=rev
Log:
Add fast cp1250 conversion
Modified:
commons/sandbox/runtime/trunk/src/main/native/include/acr/clazz.h
commons/sandbox/runtime/trunk/src/main/native/include/acr/error.h
commons/sandbox/runtime/trunk/src/main/native/include/acr/string.h
commons/sandbox/runtime/trunk/src/main/native/include/acr/unsafe.h
commons/sandbox/runtime/trunk/src/main/native/shared/iofd.c
commons/sandbox/runtime/trunk/src/main/native/shared/string.c
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr/clazz.h
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr/clazz.h?rev=1086303&r1=1086302&r2=1086303&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr/clazz.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr/clazz.h Mon Mar
28 17:30:09 2011
@@ -24,7 +24,7 @@
* @file acr_clazz.h
* @brief
*
- * ACR Java Class functions
+ * ACR java.lang.Class functions
*
*/
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr/error.h
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr/error.h?rev=1086303&r1=1086302&r2=1086303&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr/error.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr/error.h Mon Mar
28 17:30:09 2011
@@ -1607,6 +1607,7 @@ ACR_INLINE(DWORD) AcrNetOsError()
#define ACR_THROW(CL, ER) AcrThrowException(_E, (CL), (ER))
#define ACR_THROW_OS_ERROR(CL) AcrThrowException(_E, (CL), ACR_GET_OS_ERROR())
#endif
+#define ACR_THROW_MSG(CL, MS) AcrThrow(_E, (CL), MS)
#ifdef __cplusplus
extern "C" {
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr/string.h
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr/string.h?rev=1086303&r1=1086302&r2=1086303&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr/string.h
(original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr/string.h Mon Mar
28 17:30:09 2011
@@ -23,6 +23,7 @@
#define ACR_CP_DEFAULT 0
#define ACR_CP_ISO8859_1 1
#define ACR_CP_UTF_8 2
+#define ACR_CP_1252 3
#define UTF8_TO_JSTRING(V) AcrNewJavaStringU(_E, (const char *)(V))
#define CSTR_TO_JSTRING(V) AcrNewJavaStringA(_E, (const char *)(V))
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr/unsafe.h
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr/unsafe.h?rev=1086303&r1=1086302&r2=1086303&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr/unsafe.h
(original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr/unsafe.h Mon Mar
28 17:30:09 2011
@@ -28,7 +28,7 @@
*
*/
-#define UNSAFE_OFF_IFIELD(I) \
+#define UNSAFE_IFIELD(I) \
if (_f##I##n.i != 0) { \
_f##I##n.o = AcrUnsafeObjectFieldIdOffset(_E, _clazzn.i, _f##I##n.i); \
} else (void)(0)
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/iofd.c
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/iofd.c?rev=1086303&r1=1086302&r2=1086303&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/iofd.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/iofd.c Mon Mar 28
17:30:09 2011
@@ -74,9 +74,9 @@ ACR_CLASS_CTOR(FileDescriptor)
#if defined(WINDOWS)
J_LOAD_IFIELD(0001);
#endif
- UNSAFE_OFF_IFIELD(0000);
+ UNSAFE_IFIELD(0000);
#if defined(WINDOWS)
- UNSAFE_OFF_IFIELD(0001);
+ UNSAFE_IFIELD(0001);
#endif
_clazzn.u = 1;
return 0;
@@ -92,8 +92,6 @@ AcrGetFileDescriptorFd(JNI_STDARGS)
{
int fd = -1;
- if (IS_JOBJECT_NULL(_E, _O))
- return fd;
if (J4FLD_OFF(0000) != INVALID_FIELD_OFFSET) {
char *oa = *(char **)_O;
if (oa != 0) {
@@ -112,8 +110,6 @@ AcrSetFileDescriptorFd(JNI_STDARGS, int
{
int rc = ACR_EBADF;
- if (IS_JOBJECT_NULL(_E, _O))
- return rc;
if (J4FLD_OFF(0000) != INVALID_FIELD_OFFSET) {
char *oa = *(char **)_O;
if (oa != 0) {
@@ -135,8 +131,6 @@ AcrGetFileDescriptorHandle(JNI_STDARGS)
{
HANDLE fh = INVALID_HANDLE_VALUE;
- if (IS_JOBJECT_NULL(_E, _O))
- return fh;
if (J4FLD_OFF(0001) != INVALID_FIELD_OFFSET) {
char *oa = *(char **)_O;
if (oa != 0) {
@@ -155,8 +149,6 @@ AcrSetFileDescriptorHandle(JNI_STDARGS,
{
int rc = ACR_EBADF;
- if (IS_JOBJECT_NULL(_E, _O))
- return rc;
if (J4FLD_OFF(0001) != INVALID_FIELD_OFFSET) {
char *oa = *(char **)_O;
if (oa != 0) {
@@ -179,7 +171,7 @@ AcrNewFileDescriptor(JNI_STDENV, int fd,
jobject fo;
if (!CLAZZ_LOADED) {
- ACR_SET_OS_ERROR(ACR_EINIT);
+ ACR_THROW_MSG(ACR_EX_EINSTANCE, "FileDescriptor not initialized");
return 0;
}
fo = (*_E)->NewObject(_E, _clazzn.i, J4MID(0001), fd);
@@ -195,3 +187,8 @@ AcrNewFileDescriptor(JNI_STDENV, int fd,
ACR_SET_OS_ERROR(ACR_ENOMEM);
return fo;
}
+
+ACR_IO_EXPORT(jobject, FileDescriptorFactory, new0)(JNI_STDARGS, jint fd,
jlong fh)
+{
+ return AcrNewFileDescriptor(_E, fd, (acr_osd_t)LLT(fh));
+}
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/string.c
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/string.c?rev=1086303&r1=1086302&r2=1086303&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/string.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/string.c Mon Mar 28
17:30:09 2011
@@ -68,6 +68,10 @@ static const char *iso_8859_1_aliases[]
"cp819", "819", "28591", "windows-28591", 0
};
+static const char *cp_1252_aliases[] = {
+ "windows-1250", "cp1250", "1250", 0
+};
+
static const char *utf_8_aliases[] = {
"utf8", "utf-8", "cp1208", "65001", "windows-65001", 0
};
@@ -77,6 +81,41 @@ static const char *us_ascii_aliases[] =
"cp367", "ansi_x3.4-1968", "646", "646us", "windows-20127", 0
};
+static const jchar _cp_1252[256] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x20AC, 0xFFFE, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
+ 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0xFFFE, 0x017D, 0xFFFE,
+ 0xFFFE, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
+ 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0xFFFE, 0x017E, 0x0178,
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
+ 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
+ 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
+ 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
+ 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
+ 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
+ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
+ 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+ 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
+ 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
+};
+
int
acr_native_codepage = -1;
@@ -93,6 +132,10 @@ AcrGetNativeCodePage(const char *cs)
if (strcasecmp(cs, utf_8_aliases[i]) == 0)
return ACR_CP_UTF_8;
}
+ for (i = 0; cp_1252_aliases[i]; i++) {
+ if (strcasecmp(cs, cp_1252_aliases[i]) == 0)
+ return ACR_CP_1252;
+ }
for (i = 0; us_ascii_aliases[i]; i++) {
if (strcasecmp(cs, us_ascii_aliases[i]) == 0)
return ACR_CP_ISO8859_1;
@@ -809,6 +852,36 @@ static jstring new_string_iso_8859_1(JNI
return rs;
}
+static jstring new_string_cp_1252(JNIEnv *_E, const char *s)
+{
+ jstring rs = 0;
+ jsize sl = (jsize)strlen(s);
+
+ if (sl == 0) {
+ return new_string_zerolen(_E);
+ }
+ else if (sl < ACR_MBUFF_SIZ) {
+ jchar cc[ACR_MBUFF_SIZ];
+ jsize i;
+ for (i = 0; i < sl; i++) {
+ cc[i] = _cp_1252[(unsigned char)s[i]];
+ }
+ rs = (*_E)->NewString(_E, cc, sl);
+ }
+ else {
+ jchar *cc;
+ if ((cc = ACR_MALLOC(jchar, sl + 1)) != 0) {
+ size_t i;
+ for (i = 0; i < sl; i++) {
+ cc[i] = _cp_1252[(unsigned char)s[i]];
+ }
+ rs = (*_E)->NewString(_E, cc, sl);
+ AcrFree(cc);
+ }
+ }
+ return rs;
+}
+
static jstring new_string_utf_8(JNIEnv *_E, const char *s)
{
jstring rs = 0;
@@ -975,6 +1048,9 @@ AcrNewJavaStringA(JNIEnv *_E, const char
case ACR_CP_UTF_8:
rv = new_string_utf_8(_E, str);
break;
+ case ACR_CP_1252:
+ rv = new_string_cp_1252(_E, str);
+ break;
default:
rv = new_string_default(_E, str);
break;