Author: mturk Date: Tue Apr 7 14:14:22 2009 New Revision: 762785 URL: http://svn.apache.org/viewvc?rev=762785&view=rev Log: Initial commit
Added: commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h (with props) commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h (with props) commons/sandbox/runtime/trunk/src/main/native/include/acr_version.h (with props) commons/sandbox/runtime/trunk/src/main/native/include/arch/ commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/ commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h (with props) commons/sandbox/runtime/trunk/src/main/native/os/linux/os.c (with props) commons/sandbox/runtime/trunk/src/main/native/os/win32/os.c (with props) Added: commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h?rev=762785&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h (added) +++ commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h Tue Apr 7 14:14:22 2009 @@ -0,0 +1,343 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _ACR_PRIVATE_H +#define _ACR_PRIVATE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @file acr_private.h + * @brief + * + * ACR private macros and defines + * + */ + +#define ACR_MIN(a, b) ((a) < (b) ? (a) : (b)) +#define ACR_MAX(a, b) ((a) > (b) ? (a) : (b)) + +/* Default buffer sizes */ +#define ACR_SBUFFER_SIZ 512 +#define ACR_SBUFFER_LEN (ACR_SBUFFER_SIZ - 1) + +#define ACR_MBUFFER_SIZ 1024 +#define ACR_MBUFFER_LEN (ACR_MBUFFER_SIZ - 1) + +#define ACR_HBUFFER_SIZ 8192 +#define ACR_HBUFFER_LEN (ACR_HBUFFER_SIZ - 1) + +#define ACR_KBS(N) ((N) * 1024) +#define ACR_KB (1024) +#define ACR_MB (ACR_KB * ACR_KB) +#define ACR_GB (ACR_MB * ACR_KB) +#define ACR_TB (ACR_GB * ACR_KB) + +#define CSTR_TO_JSTRING(V) (*_E)->NewStringUTF(_E, (char *)(V)) +#define WSTR_TO_JSTRING(V) (*_E)->NewString(_E, (jchar *)(V), (jsize)wcslen((jchar *)(V))) +#define ZSTR_TO_JSTRING(V, L) (*_E)->NewString(_E, (jchar *)(V), (L)) + + +#define RETURN_JCSTR(V) \ + if ((V)) return (*_E)->NewStringUTF((_E), (V)); \ + else return NULL + +#define RETURN_JWSTR(V) \ + if ((V)) return (*_E)->NewString((_E), (V), wcslen((V))); \ + else return NULL + + +/* Exception throw helper classes */ +#define THROW_FMARK __FILE__, __LINE__ +#define THROW_NMARK NULL, 0 + + +#define ACR_LOG_EMERG 1 +#define ACR_LOG_ERROR 2 +#define ACR_LOG_NOTICE 3 +#define ACR_LOG_WARN 4 +#define ACR_LOG_INFO 5 +#define ACR_LOG_DEBUG 6 + +#define ACR_FS_UNKNOWN 0 +#define ACR_FS_MSDOS 1 +#define ACR_FS_VFAT 2 +#define ACR_FS_NTFS 3 +#define ACR_FS_ISO9660 4 +#define ACR_FS_EXT2 5 +#define ACR_FS_EXT3 6 +#define ACR_FS_XFS 7 +#define ACR_FS_XIAFS 8 +#define ACR_FS_HPFS 9 +#define ACR_FS_HFS 10 +#define ACR_FS_JFS 11 +#define ACR_FS_ROMFS 12 +#define ACR_FS_UDF 13 +#define ACR_FS_FFS 14 +#define ACR_FS_SFS 15 +#define ACR_FS_NFS 16 +#define ACR_FS_RAMFS 17 +#define ACR_FS_RAISERFS 18 +#define ACR_FS_DEV 19 +#define ACR_FS_PROC 20 +#define ACR_FS_SYSFS 21 +#define ACR_FS_TMPFS 22 +#define ACR_FS_RPC 23 +#define ACR_FS_USBFS 24 +#define ACR_FS_VMHGFS 25 +#define ACR_FS_VMBLOCK 26 +#define ACR_FS_SWAP 27 +#define ACR_FS_NONE 99 + +#define ACR_CASE_SENSITIVE_SEARCH 0x00000001 +#define ACR_CASE_PRESERVED_NAMES 0x00000002 +#define ACR_UNICODE_ON_DISK 0x00000004 +#define ACR_FILE_COMPRESSION 0x00000010 +#define ACR_VOLUME_QUOTAS 0x00000020 +#define ACR_SUPPORTS_SPARSE_FILES 0x00000040 +#define ACR_SUPPORTS_REPARSE_POINTS 0x00000080 +#define ACR_VOLUME_IS_COMPRESSED 0x00008000 +#define ACR_SUPPORTS_ENCRYPTION 0x00020000 +#define ACR_READ_ONLY_VOLUME 0x00080000 + +/* Unix specific options + * XXX: This needs to be revised if Windows changes + * the API for FILE_ and FS_ + */ +#define ACR_READ_WRITE_VOLUME 0x01000000 +#define ACR_SUID_VOLUME 0x02000000 + + +#define ACR_DRIVE_UNKNOWN -1 +#define ACR_DRIVE_NONE 0 +#define ACR_DRIVE_INVALID 1 +#define ACR_DRIVE_REMOVABLE 2 +#define ACR_DRIVE_FIXED 3 +#define ACR_DRIVE_REMOTE 4 +#define ACR_DRIVE_CDROM 5 +#define ACR_DRIVE_RAMDISK 6 +#define ACR_DRIVE_SWAP 7 + +/* Socket TCP states */ +#define ACR_TCP_CLOSED 1 +#define ACR_TCP_LISTENING 2 +#define ACR_TCP_SYN_SENT 3 +#define ACR_TCP_SYN_RCVD 4 +#define ACR_TCP_ESTABLISHED 5 +#define ACR_TCP_FIN_WAIT1 6 +#define ACR_TCP_FIN_WAIT2 7 +#define ACR_TCP_CLOSE_WAIT 8 +#define ACR_TCP_CLOSING 9 +#define ACR_TCP_LAST_ACK 10 +#define ACR_TCP_TIME_WAIT 11 +#define ACR_TCP_DELETE_TCB 12 + +#define ACR_IFO_UP 1 +#define ACR_IFO_DOWN 2 +#define ACR_IFO_TESTING 3 +#define ACR_IFO_UNKNOWN 4 +#define ACR_IFO_DORMANT 5 +#define ACR_IFO_NOTPRESENT 6 +#define ACR_IFO_LLDOWN 7 + +/* Misc macros */ +#define LLT(X) ((acr_ssize_t)(X)) +#define UNREFERENCED(P) (P) = (P) +#define UNREFERENCED_STDARGS _E = _E; _O = _O +#define UNREFERENCED_O _O = _O +#define ACR_JNISTDARGS JNIEnv *_E, jobject _O +#define P2J(P) ((jlong)LLT(P)) +#define J2P(P, T) ((T)LLT((jlong)P)) +#define V2P(T, V) ((T)((T)0 + (V))) +#define V2Z(V) ((V) ? JNI_TRUE : JNI_FALSE) + + +#define IS_JOBJECT_NULL(E, O) \ + (!(O) || ((*(E))->IsSameObject((E), (O), NULL) == JNI_TRUE)) + +#define IS_JOBJECT_VALID(E, O) \ + ((O) && !((*(E))->IsSameObject((E), (O), NULL) == JNI_TRUE)) + + +#define ACR_CLASS_LDEF(CL) \ + int acr_class_##CL##_load(JNIEnv *_E) + +#define ACR_CLASS_UDEF(CL) \ + void sight_class_##CL##_unload(JNIEnv *_E) + +#define ACR_CLASS_LDEC(CL) \ + extern int acr_class_##CL##_load(JNIEnv *); \ + extern int acr_class_##CL##_unload(JNIEnv *) + +#define ACR_CLASS_LRUN(CL) \ + if (acr_class_##CL##_load(_E)) return 1; + + +#define ACR_CLASS_URUN(CL) \ + acr_class_##CL##_unload(_E) + +#define J_DECLARE_CLAZZ static JAVA_C_ID _clazzn +#define J_DECLARE_F_ID(I) static JAVA_F_ID _f##I##n +#define J_DECLARE_M_ID(I) static JAVA_M_ID _m##I##n + +#define J_LOAD_METHOD(I) \ + if (_m##I##n.i == NULL) { \ + _m##I##n.i = (*_E)->GetMethodID(_E, _clazzn.i, _m##I##n.n, \ + _m##I##n.s); \ + if ((*_E)->ExceptionCheck(_E) || _m##I##n.i == NULL) { \ + return 1; \ + } \ + } else (void)(0) + +#define J_LOAD_MLOCAL(I) \ + if (_m##I##n.i == NULL) { \ + _m##I##n.i = (*_E)->GetStaticMethodID(_E, _clazzn.i, _m##I##n.n, \ + _m##I##n.s); \ + if ((*_E)->ExceptionCheck(_E) || _m##I##.i == NULL) { \ + return 1; \ + } \ + } else (void)(0) + +#define J_LOAD_IFIELD(I) \ + if (_f##I##n.i == NULL) { \ + _f##I##n.i = (*_E)->GetFieldID(_E, _clazzn.i, _f##I##n.n, \ + _f##I##n.s); \ + if ((*_E)->ExceptionCheck(_E) || _f##I##n.i == NULL) { \ + return 1; \ + } \ + } else (void)(0) + +#define J_LOAD_SFIELD(I) \ + if (_f##I##n.i == NULL) { \ + _f##I##n.i = (*_E)->GetStaticFieldID(_E, _clazzn.i, _f##I##n.n, \ + _f##I##n.s); \ + if ((*_E)->ExceptionCheck(_E) || _f##I##n.i == NULL) { \ + return 1; \ + } \ + } else (void)(0) + + +#define SET_IFIELD_J(I, O, V) \ + if (_f##I##n.i) { \ + (*_E)->SetLongField(_E, (O), _f##I##n.i, (jlong)(V)); \ + } else (void)(0) + +#define SET_IFIELD_I(I, O, V) \ + if (_f##I##n.i) { \ + (*_E)->SetIntField(_E, (O), _f##I##n.i, (jint)(V)); \ + } else (void)(0) + +#define SET_IFIELD_D(I, O, V) \ + if (_f##I##n.i) { \ + (*_E)->SetDoubleField(_E, (O), _f##I##n.i, (jdouble)(V)); \ + } else (void)(0) + +#define SET_IFIELD_Z(I, O, V) \ + if (_f##I##n.i) { \ + if ((V)) (*_E)->SetBooleanField(_E, (O), _f##I##n.i, JNI_TRUE); \ + else (*_E)->SetBooleanField(_E, (O), _f##I##n.i, JNI_FALSE); \ + } else (void)(0) + +#define SET_IFIELD_S(I, O, V) \ + if (_f##I##n.i && (V)) { \ + jstring _str = (*_E)->NewStringUTF(_E, (V)); \ + (*_E)->SetObjectField(_E, (O), _f##I##n.i, _str); \ + (*_E)->DeleteLocalRef(_E, _str); \ + } else (void)(0) + +#define SET_IFIELD_N(I, O, V) \ + if (_f##I##n.i && (V) && *(V)) { \ + jstring _str = (*_E)->NewStringUTF(_E, (V)); \ + (*_E)->SetObjectField(_E, (O), _f##I##n.i, _str); \ + (*_E)->DeleteLocalRef(_E, _str); \ + } else (void)(0) + +#define SET_IFIELD_W(I, O, V) \ + if (_f##I##n.i && (V)) { \ + jstring _str = (*_E)->NewString(_E, (V), (jsize)wcslen((V))); \ + (*_E)->SetObjectField(_E, (O), _f##I##n.i, _str); \ + (*_E)->DeleteLocalRef(_E, _str); \ + } else (void)(0) + +#define SET_IFIELD_O(I, O, V) \ + if (_f##I##n.i) { \ + (*_E)->SetObjectField(_E, (O), _f##I##n.i, (jobject)(V)); \ + } else (void)(0) + +#define SET_SFIELD_Z(I, V) \ + if (_f##I##n.i) { \ + if ((V)) (*_E)->SetStaticBooleanField(_E, _clazzn.i, _f##I##n.i, JNI_TRUE); \ + else (*_E)->SetStaticBooleanField(_E, _clazzn.i, _f##I##n.i, JNI_FALSE); \ + } else (void)(0) + + +#define CALL_METHOD1(I, O, V) \ + if (_m##I##n.i) { \ + (*_E)->CallVoidMethod(_E, (O), _m##I##n.i, (V), NULL); \ + } else (void)(0) + +#define CALL_METHOD2(I, O, V, X) \ + if (_m##I##n.i) { \ + (*_E)->CallVoidMethod(_E, (O), _m##I##n.i, (V), (X), NULL); \ + } else (void)(0) + +#define CALL_METHOD3(I, O, V, X, Y) \ + if (_m##I##n.i) { \ + (*_E)->CallVoidMethod(_E, (O), _m##I##n.i, (V), (X), (Y), NULL); \ + } else (void)(0) + + +/* Standard Java classes */ +typedef enum { + ACR_CC_OBJECT, + ACR_CC_STRING, + ACR_CC_ZARRAY, + ACR_CC_BARRAY, + ACR_CC_CARRAY, + ACR_CC_IARRAY, + ACR_CC_JARRAY, + ACR_CC_TARRAY, + ACR_CC_OARRAY, + ACR_CC_MAX +} acr_cclass_e; + +typedef enum { + ACR_PROC_U, /* Unknown */ + ACR_PROC_R, /* Running or runnable (on run queue) */ + ACR_PROC_S, /* Interruptible sleep (waiting for an event to complete) */ + ACR_PROC_D, /* Uninterruptible sleep (usually IO) */ + ACR_PROC_Z, /* Defunct ("zombie") process, terminated but not reaped by its parent */ + ACR_PROC_T, /* Stopped, either by a job control signal or because it is being traced. */ + ACR_PROC_W, /* paging */ + ACR_PROC_X /* dead */ + /* XXX : BSD as more */ +} acr_procstate_e; + +#if defined(DEBUG) || defined(_DEBUG) +/* In DEBUG mode always use statistics */ +#ifndef ACR_DO_STATS +#define ACR_DO_STATS 1 +#endif +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _ACR_PRIVATE_H */ Propchange: commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h?rev=762785&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h (added) +++ commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h Tue Apr 7 14:14:22 2009 @@ -0,0 +1,89 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _ACR_TYPES_H +#define _ACR_TYPES_H + +#include "acr.h" +#include <jni.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @file acr_types.h + * @brief + * + * ACR private structures + * + */ + +/* Default buffer sizes */ +#define ACR_STYPE_SIZ 512 +#define ACR_STYPE_LEN (ACR_STYPE_SIZ - 1) + +#define ACR_MTYPE_SIZ 1024 +#define ACR_MTYPE_LEN (ACR_MTYPE_SIZ - 1) + +#define ACR_HTYPE_SIZ 8192 +#define ACR_HTYPE_LEN (ACR_HTYPE_SIZ - 1) + +#define ACR_MAX_PROCESSES 65536 + +typedef struct JAVA_C_ID { + jclass i; + jclass a; + const char *n; +} JAVA_C_ID; + +typedef struct JAVA_M_ID { + jmethodID i; + const char *n; + const char *s; +} JAVA_M_ID; + +typedef struct JAVA_F_ID { + jfieldID i; + const char *n; + const char *s; +} JAVA_F_ID; + +typedef struct acr_callback_t { + jobject object; + jmethodID method; + jint counter; + const char *name; + const char *msig; + void *opaque; +} acr_callback_t; + +#define JSSIZE_MAX 1048576 + +typedef struct acr_str_t { + jsize len; + union { + char *c; + jchar *w; + } str; +} acr_str_t; + + +#ifdef __cplusplus +} +#endif + +#endif /* _ACR_TYPES_H */ Propchange: commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/runtime/trunk/src/main/native/include/acr_version.h URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_version.h?rev=762785&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/include/acr_version.h (added) +++ commons/sandbox/runtime/trunk/src/main/native/include/acr_version.h Tue Apr 7 14:14:22 2009 @@ -0,0 +1,97 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _ACR_VERSION_H +#define _ACR_VERSION_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @file acr_version.h + * @brief + * + * ACR Version + * + * There are several different mechanisms for accessing the version. There + * is a string form, and a set of numbers; in addition, there are constants + * which can be compiled into your application, and you can query the library + * being used for its actual version. + * + * Note that it is possible for an application to detect that it has been + * compiled against a different version of ACR by use of the compile-time + * constants and the use of the run-time query function. + * + * ACR version numbering follows the guidelines specified in: + * + * http://apr.apache.org/versioning.html + */ + +/* The numeric compile-time version constants. These constants are the + * authoritative version numbers for ACR. + */ + +/** major version + * Major API changes that could cause compatibility problems for older + * programs such as structure size changes. No binary compatibility is + * possible across a change in the major version. + */ +#define ACR_MAJOR_VERSION 1 + +/** + * Minor API changes that do not cause binary compatibility problems. + * Should be reset to 0 when upgrading ACR_MAJOR_VERSION + */ +#define ACR_MINOR_VERSION 0 + +/** patch level */ +#define ACR_PATCH_VERSION 2 + +/** + * This symbol is defined for internal, "development" copies of SIGHT. + * This symbol will be #undef'd for releases. + */ +#undef ACR_IS_DEV_VERSION + +/* ACR_STRINGIFY is defined here, and also in apr_general.h, so wrap it */ +#ifndef ACR_STRINGIFY +/** Properly quote a value as a string in the C preprocessor */ +#define ACR_STRINGIFY(n) ACR_STRINGIFY_HELPER(n) +/** Helper macro for APR_STRINGIFY */ +#define ACR_STRINGIFY_HELPER(n) #n +#endif + + +/** The formatted string of APU's version */ +#define ACR_VERSION_STRING \ + ACR_STRINGIFY(ACR_MAJOR_VERSION) "."\ + ACR_STRINGIFY(ACR_MINOR_VERSION) "."\ + ACR_STRINGIFY(ACR_PATCH_VERSION)\ + ACR_IS_DEV_STRING + +/** Internal: string form of the "is dev" flag */ +#ifdef ACR_IS_DEV_VERSION +#define ACR_IS_DEV_STRING "-dev" +#else +#define ACR_IS_DEV_STRING "" +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ACR_VERSION_H */ Propchange: commons/sandbox/runtime/trunk/src/main/native/include/acr_version.h ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h?rev=762785&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h (added) +++ commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h Tue Apr 7 14:14:22 2009 @@ -0,0 +1,316 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _ACR_ARCH_H +#define _ACR_ARCH_H + +#if !defined(PRODUCT_UNDEFINED) +/* Vista Platform SDK definitions */ + +typedef enum +_TCP_TABLE_CLASS { + TCP_TABLE_BASIC_LISTENER, + TCP_TABLE_BASIC_CONNECTIONS, + TCP_TABLE_BASIC_ALL, + TCP_TABLE_OWNER_PID_LISTENER, + TCP_TABLE_OWNER_PID_CONNECTIONS, + TCP_TABLE_OWNER_PID_ALL, + TCP_TABLE_OWNER_MODULE_LISTENER, + TCP_TABLE_OWNER_MODULE_CONNECTIONS, + TCP_TABLE_OWNER_MODULE_ALL +} TCP_TABLE_CLASS, *PTCP_TABLE_CLASS; + +typedef enum +_UDP_TABLE_CLASS { + UDP_TABLE_BASIC, + UDP_TABLE_OWNER_PID, + UDP_TABLE_OWNER_MODULE +} UDP_TABLE_CLASS, *PUDP_TABLE_CLASS; + +#endif /* PRODUCT_UNDEFINED */ + +#define ACR_PLATFORM_CLASS_PATH ACR_CLASS_PATH "platform/windows/" + +#define ACR_JNI_PLATFORM_DECLARE(RT, CL, FN) \ + JNIEXPORT RT JNICALL Java_org_apache_commons_runtime_platform_windows_##CL##_##FN + +typedef enum { + SYSDLL_KERNEL32 = 0, // kernel32 From WinBase.h + SYSDLL_NTDLL = 1, // ntdll From our real kernel + SYSDLL_USER32 = 2, // user32 From WinUser.h + SYSDLL_IPHLPAPI = 3, // iphlpapi From Iphlpapi.h + SYSDLL_JVM = 4, // jvm From our own jvm.dll + SYSDLL_defined = 5 // must define as last idx_ + 1 +} acr_dlltoken_e; + +/* Copied from http://source.winehq.org/source/include/winternl.h */ + +typedef struct _CURDIR +{ + UNICODE_STRING DosPath; + PVOID Handle; +} CURDIR, *PCURDIR; + +typedef struct RTL_DRIVE_LETTER_CURDIR +{ + USHORT Flags; + USHORT Length; + ULONG TimeStamp; + UNICODE_STRING DosPath; +} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR; + +typedef struct tagRTL_BITMAP { + ULONG SizeOfBitMap; /* Number of bits in the bitmap */ + PULONG Buffer; /* Bitmap data, assumed sized to a DWORD boundary */ +} RTL_BITMAP, *PRTL_BITMAP; + +typedef struct _RTL_USER_PROCESS_PARAMETERS +{ + ULONG AllocationSize; + ULONG Size; + ULONG Flags; + ULONG DebugFlags; + HANDLE ConsoleHandle; + ULONG ConsoleFlags; + HANDLE hStdInput; + HANDLE hStdOutput; + HANDLE hStdError; + CURDIR CurrentDirectory; + UNICODE_STRING DllPath; + UNICODE_STRING ImagePathName; + UNICODE_STRING CommandLine; + PWSTR Environment; + ULONG dwX; + ULONG dwY; + ULONG dwXSize; + ULONG dwYSize; + ULONG dwXCountChars; + ULONG dwYCountChars; + ULONG dwFillAttribute; + ULONG dwFlags; + ULONG wShowWindow; + UNICODE_STRING WindowTitle; + UNICODE_STRING Desktop; + UNICODE_STRING ShellInfo; + UNICODE_STRING RuntimeInfo; + RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20]; +} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS; + +typedef struct _PEB_LDR_DATA +{ + ULONG Length; + BOOLEAN Initialized; + PVOID SsHandle; + LIST_ENTRY InLoadOrderModuleList; + LIST_ENTRY InMemoryOrderModuleList; + LIST_ENTRY InInitializationOrderModuleList; +} PEB_LDR_DATA, *PPEB_LDR_DATA; + +/*********************************************************************** + * PEB data structure (472 bytes) + */ +typedef struct _ACR_PEB +{ + BOOLEAN InheritedAddressSpace; /* 00 */ + BOOLEAN ReadImageFileExecOptions; /* 01 */ + BOOLEAN BeingDebugged; /* 02 */ + BOOLEAN SpareBool; /* 03 */ + HANDLE Mutant; /* 04 */ + HMODULE ImageBaseAddress; /* 08 */ + PPEB_LDR_DATA LdrData; /* 0c */ + RTL_USER_PROCESS_PARAMETERS *ProcessParameters; /* 10 */ + PVOID SubSystemData; /* 14 */ + HANDLE ProcessHeap; /* 18 */ + PRTL_CRITICAL_SECTION FastPebLock; /* 1c */ + PVOID /*PPEBLOCKROUTINE*/ FastPebLockRoutine; /* 20 */ + PVOID /*PPEBLOCKROUTINE*/ FastPebUnlockRoutine; /* 24 */ + ULONG EnvironmentUpdateCount; /* 28 */ + PVOID KernelCallbackTable; /* 2c */ + PVOID EventLogSection; /* 30 */ + PVOID EventLog; /* 34 */ + PVOID /*PPEB_FREE_BLOCK*/ FreeList; /* 38 */ + ULONG TlsExpansionCounter; /* 3c */ + PRTL_BITMAP TlsBitmap; /* 40 */ + ULONG TlsBitmapBits[2]; /* 44 */ + PVOID ReadOnlySharedMemoryBase; /* 4c */ + PVOID ReadOnlySharedMemoryHeap; /* 50 */ + PVOID *ReadOnlyStaticServerData; /* 54 */ + PVOID AnsiCodePageData; /* 58 */ + PVOID OemCodePageData; /* 5c */ + PVOID UnicodeCaseTableData; /* 60 */ + ULONG NumberOfProcessors; /* 64 */ + ULONG NtGlobalFlag; /* 68 */ + BYTE Spare2[4]; /* 6c */ + LARGE_INTEGER CriticalSectionTimeout; /* 70 */ + ULONG HeapSegmentReserve; /* 78 */ + ULONG HeapSegmentCommit; /* 7c */ + ULONG HeapDeCommitTotalFreeThreshold; /* 80 */ + ULONG HeapDeCommitFreeBlockThreshold; /* 84 */ + ULONG NumberOfHeaps; /* 88 */ + ULONG MaximumNumberOfHeaps; /* 8c */ + PVOID *ProcessHeaps; /* 90 */ + PVOID GdiSharedHandleTable; /* 94 */ + PVOID ProcessStarterHelper; /* 98 */ + PVOID GdiDCAttributeList; /* 9c */ + PVOID LoaderLock; /* a0 */ + ULONG OSMajorVersion; /* a4 */ + ULONG OSMinorVersion; /* a8 */ + ULONG OSBuildNumber; /* ac */ + ULONG OSPlatformId; /* b0 */ + ULONG ImageSubSystem; /* b4 */ + ULONG ImageSubSystemMajorVersion; /* b8 */ + ULONG ImageSubSystemMinorVersion; /* bc */ + ULONG ImageProcessAffinityMask; /* c0 */ + ULONG GdiHandleBuffer[34]; /* c4 */ + ULONG PostProcessInitRoutine; /* 14c */ + PRTL_BITMAP TlsExpansionBitmap; /* 150 */ + ULONG TlsExpansionBitmapBits[32]; /* 154 */ + ULONG SessionId; /* 1d4 */ +} ACR_PEB, *PACR_PEB; + +#ifdef __cplusplus +extern "C" { +#endif + +extern LPSYSTEM_INFO acr_osinf; +extern LPOSVERSIONINFOEXA acr_osver; +extern UINT64 acr_vmem; + +FARPROC acr_load_dll_func(acr_dlltoken_e, const char *, int); + +/* The acr_load_dll_func call WILL return def if the function cannot be loaded */ + +#define ACR_DECLARE_LATE_DLL_FUNC(lib, rettype, def, \ + calltype, fn, ord, args, names) \ + typedef rettype (calltype *acr_late_fpt_##fn) args; \ + static acr_late_fpt_##fn acr_late_pfn_##fn = NULL; \ + static APR_INLINE rettype acr_late_##fn args \ + { if (!acr_late_pfn_##fn) \ + acr_late_pfn_##fn = (acr_late_fpt_##fn) \ + acr_load_dll_func(lib, #fn, ord); \ + if (acr_late_pfn_##fn) \ + return (*(acr_late_pfn_##fn)) names; \ + else return def; } // + +#define ACR_DECLARE_LATE_DLL_CALL(lib, rettype, \ + calltype, fn, fnx, ord, args, names) \ + typedef rettype (calltype *acr_late_fpt_##fn) args; \ + static acr_late_fpt_##fn acr_late_pfn_##fn = NULL; \ + static APR_INLINE rettype acr_late_##fn args \ + { if (!acr_late_pfn_##fn) \ + acr_late_pfn_##fn = (acr_late_fpt_##fn) \ + acr_load_dll_func(lib, #fn, ord); \ + if (!acr_late_pfn_##fn) \ + acr_late_pfn_##fn = (acr_late_fpt_##fn) \ + acr_load_dll_func(lib, #fnx, ord); \ + if (acr_late_pfn_##fn) \ + (*(acr_late_pfn_##fn)) names; \ + } // + + +#ifdef ACR_WANT_LATE_DLL + +ACR_DECLARE_LATE_DLL_FUNC(SYSDLL_KERNEL32, BOOL, FALSE, + WINAPI, GetSystemTimes, 0, ( + OUT LPFILETIME lpIdleTime, + OUT LPFILETIME lpKernelTime, + OUT LPFILETIME lpUserTime), + (lpIdleTime, lpKernelTime, lpUserTime)); +#undef GetSystemTimes +#define GetSystemTimes acr_late_GetSystemTimes + +ACR_DECLARE_LATE_DLL_FUNC(SYSDLL_KERNEL32, BOOL, FALSE, + WINAPI, IsWow64Process, 0, ( + IN HANDLE hProcess, + OUT PBOOL Wow64Process), + (hProcess, Wow64Process)); +#undef IsWow64Process +#define IsWow64Process acr_late_IsWow64Process + +ACR_DECLARE_LATE_DLL_FUNC(SYSDLL_NTDLL, NTSTATUS, 1, + WINAPI, NtQuerySystemInformation, 0, ( + IN SYSTEM_INFORMATION_CLASS SystemInformationClass, + OUT PVOID SystemInformation, + IN ULONG SystemInformationLength, + OUT PULONG ReturnLength), + (SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength)); +#undef NtQuerySystemInformation +#define NtQuerySystemInformation acr_late_NtQuerySystemInformation + +ACR_DECLARE_LATE_DLL_FUNC(SYSDLL_NTDLL, NTSTATUS, 1, + WINAPI, NtQueryInformationProcess, 0, ( + IN HANDLE ProcessHandle, + IN PROCESSINFOCLASS ProcessInformationClass, + OUT PVOID ProcessInformation, + IN ULONG ProcessInformationLength, + OUT PULONG ReturnLength), + (ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength, ReturnLength)); +#undef NtQueryInformationProcess +#define NtQueryInformationProcess acr_late_NtQueryInformationProcess + +ACR_DECLARE_LATE_DLL_FUNC(SYSDLL_KERNEL32, BOOL, FALSE, + WINAPI, GetPerformanceInfo, 0, ( + PPERFORMACE_INFORMATION pPerformanceInformation, + DWORD cb), + (pPerformanceInformation, cb)); +#undef GetPerformanceInfo +#define GetPerformanceInfo acr_late_GetPerformanceInfo + +ACR_DECLARE_LATE_DLL_FUNC(SYSDLL_IPHLPAPI, DWORD, ERROR_INVALID_FUNCTION, + WINAPI, GetExtendedTcpTable, 0, ( + PVOID pTcpTable, + PDWORD pdwSize, + BOOL bOrder, + ULONG ulAf, + TCP_TABLE_CLASS TableClass, + ULONG Reserved), + (pTcpTable, pdwSize, bOrder, ulAf, TableClass, Reserved)); +#undef GetExtendedTcpTable +#define GetExtendedTcpTable acr_late_GetExtendedTcpTable + +ACR_DECLARE_LATE_DLL_FUNC(SYSDLL_IPHLPAPI, DWORD, ERROR_INVALID_FUNCTION, + WINAPI, GetExtendedUdpTable, 0, ( + PVOID pUdpTable, + PDWORD pdwSize, + BOOL bOrder, + ULONG ulAf, + UDP_TABLE_CLASS TableClass, + ULONG Reserved), + (pUdpTable, pdwSize, bOrder, ulAf, TableClass, Reserved)); +#undef GetExtendedUdpTable +#define GetExtendedUdpTable acr_late_GetExtendedUdpTable + +ACR_DECLARE_LATE_DLL_CALL(SYSDLL_JVM, void, JNICALL, + JVM_DumpAllStacks, + _jvm_dumpallsta...@8, 0, ( + JNIEnv *lpEnv, + jclass jClazz), + (lpEnv, jClazz)); +#undef JVM_DumpAllStacks +#define JVM_DumpAllStacks acr_late_JVM_DumpAllStacks + +#undef ACR_WANT_LATE_DLL +#endif + +#define IS_INVALID_HANDLE(h) (((h) == NULL || (h) == INVALID_HANDLE_VALUE)) +#define ACR_REGS_CPU "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\" +#define ACR_REGS_CPU0 ACR_REGS_CPU "0\\" + +#ifdef __cplusplus +} +#endif + +#endif /* ACR_PRIVATE_H */ Propchange: commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/runtime/trunk/src/main/native/os/linux/os.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/linux/os.c?rev=762785&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/os/linux/os.c (added) +++ commons/sandbox/runtime/trunk/src/main/native/os/linux/os.c Tue Apr 7 14:14:22 2009 @@ -0,0 +1,81 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "acr.h" +#include "acr_private.h" +#include <sys/utsname.h> + +ACR_JNI_EXPORT_DECLARE(jboolean, OS, is)(ACR_JNISTDARGS, jint type) +{ + UNREFERENCED_STDARGS; + if ((type & ACR_OS_UNIX) == ACR_OS_UNIX) + return JNI_TRUE; + else if (type == SIGHT_OS_LINUX) + return JNI_TRUE; + else + return JNI_FALSE; +} + +ACR_JNI_EXPORT_DECLARE(jint, OS, type)(ACR_JNISTDARGS) +{ + UNREFERENCED_STDARGS; + return 5; +} + +ACR_JNI_EXPORT_DECLARE(jstring, OS, getSysname)(ACR_JNISTDARGS) +{ + struct utsname sys; + if (!uname(&sys)) + return CSTR_TO_JSTRING(sys.sysname); + else + return NULL; +} + +ACR_JNI_EXPORT_DECLARE(jstring, OS, getVersion)(ACR_JNISTDARGS) +{ + struct utsname sys; + if (!uname(&sys)) + return CSTR_TO_JSTRING(sys.version); + else + return NULL; +} + +ACR_JNI_EXPORT_DECLARE(jstring, OS, getRelease)(ACR_JNISTDARGS) +{ + struct utsname sys; + if (!uname(&sys)) + return CSTR_TO_JSTRING(sys.release); + else + return NULL; +} + +ACR_JNI_EXPORT_DECLARE(jstring, OS, getMachine)(ACR_JNISTDARGS) +{ + struct utsname sys; + if (!uname(&sys)) + return CSTR_TO_JSTRING(sys.machine); + else + return NULL; +} + +ACR_JNI_EXPORT_DECLAREjstring, OS, getNodename)(ACR_JNISTDARGS) +{ + struct utsname sys; + if (!uname(&sys)) + return CSTR_TO_JSTRING(sys.nodename); + else + return NULL; +} Propchange: commons/sandbox/runtime/trunk/src/main/native/os/linux/os.c ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/runtime/trunk/src/main/native/os/win32/os.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/os.c?rev=762785&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/os/win32/os.c (added) +++ commons/sandbox/runtime/trunk/src/main/native/os/win32/os.c Tue Apr 7 14:14:22 2009 @@ -0,0 +1,124 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "acr.h" +#include "acr_private.h" + +#define ACR_WANT_LATE_DLL +#include "acr_arch.h" + +ACR_JNI_EXPORT_DECLARE(jboolean, OS, is)(ACR_JNISTDARGS, jint type) +{ + UNREFERENCED_STDARGS; +#ifdef _WIN64 + if (type == ACR_OS_WIN64) + return JNI_TRUE; + else +#endif + if ((type & ACR_OS_WINDOWS) == ACR_OS_WINDOWS) + return JNI_TRUE; + else if (type == ACR_OS_WOW64) { + BOOL is = FALSE; + IsWow64Process(GetCurrentProcess(), &is); + return V2Z(is); + } + else + return JNI_FALSE; +} + +ACR_JNI_EXPORT_DECLARE(jstring, OS, getSysname)(ACR_JNISTDARGS) +{ + return CSTR_TO_JSTRING("Windows"); +} + +ACR_JNI_EXPORT_DECLARE(jstring, OS, getVersion)(ACR_JNISTDARGS) +{ + char buf[ACR_SBUFFER_SIZ]; + + if (ACR_osver->dwMajorVersion == 4) { + strcpy(buf, "NT4"); + } + else if (acr_osver->dwMajorVersion == 5) { + if (acr_osver->dwMinorVersion == 0) { + strcpy(buf, "2000"); + } + else if (acr_osver->dwMinorVersion == 2) { + strcpy(buf, "2003"); + } + else { + strcpy(buf, "XP"); + } + } + else if (acr_osver->dwMajorVersion == 6) { + strcpy(buf, "VISTA"); + } + else { + strcpy(buf, "UNKNOWN"); + } + if (acr_osver->szCSDVersion[0]) { + strcat(buf, " ("); + strcat(buf, acr_osver->szCSDVersion); + strcat(buf, ")"); + } + return CSTR_TO_JSTRING(buf); +} + +ACR_JNI_EXPORT_DECLARE(jstring, OS, getRelease)(ACR_JNISTDARGS) +{ + char buf[32]; + + sprintf(buf, "%d.%d.%d", acr_osver->dwMajorVersion, + acr_osver->dwMinorVersion, + acr_osver->dwBuildNumber); + return CSTR_TO_JSTRING(buf); +} + +ACR_JNI_EXPORT_DECLARE(jstring, OS, getMachine)(ACR_JNISTDARGS) +{ + char buf[32]; + + if (acr_osinf->wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) + strcpy(buf, "x86_64"); + else if (acr_osinf->wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64) + strcpy(buf, "ia64"); + else if (acr_osinf->wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL) { + int pl = acr_osinf->wProcessorLevel; + if (pl < 8) + sprintf(buf, "i%d86", acr_osinf->wProcessorLevel); + else { + /* TODO: Figure out the proper names for EMT64 + * and other Intel processors + */ + strcpy(buf, "i786"); + } + } + else + return NULL; + return CSTR_TO_JSTRING(buf); +} + +ACR_JNI_EXPORT_DECLARE(jstring, OS, getNodename)(ACR_JNISTDARGS) +{ + char buf[MAX_COMPUTERNAME_LENGTH + 1] = { 0 }; + DWORD len = MAX_COMPUTERNAME_LENGTH; + + if (GetComputerName(buf, &len)) { + return CSTR_TO_JSTRING(buf); + } + else { + return NULL; + } +} Propchange: commons/sandbox/runtime/trunk/src/main/native/os/win32/os.c ------------------------------------------------------------------------------ svn:eol-style = native