You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2006/03/01 16:43:11 UTC
svn commit: r382065 [3/10] - in /incubator/harmony/enhanced/classlib/trunk:
modules/security/make/ modules/security/make/native/linux/
modules/security/make/native/windows/ native-src/ native-src/linux.IA32/
native-src/linux.IA32/archive/ native-src/li...
Added: incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/hyexelibnls.h
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/hyexelibnls.h?rev=382065&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/hyexelibnls.h (added)
+++ incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/hyexelibnls.h Wed Mar 1 07:42:53 2006
@@ -0,0 +1,62 @@
+/* Copyright 1991, 2004 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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.
+ */
+
+#if !defined(hyexelibnls_h)
+#define hyexelibnls_h
+
+#include "hyport.h"
+/* 0x4558454c = EXEL */
+
+#define HYNLS_EXELIB_VERSION__MODULE 0x4558454c
+#define HYNLS_EXELIB_VERSION__ID 50
+#define HYNLS_EXELIB_VERSION HYNLS_EXELIB_VERSION__MODULE, HYNLS_EXELIB_VERSION__ID
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_OUT_OF_MEMORY__MODULE 0x4558454c
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_OUT_OF_MEMORY__ID 51
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_OUT_OF_MEMORY HYNLS_EXELIB_INTERNAL_VM_ERR_OUT_OF_MEMORY__MODULE, HYNLS_EXELIB_INTERNAL_VM_ERR_OUT_OF_MEMORY__ID
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_TO_FIND_JLS__MODULE 0x4558454c
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_TO_FIND_JLS__ID 52
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_TO_FIND_JLS HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_TO_FIND_JLS__MODULE, HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_TO_FIND_JLS__ID
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_BA__MODULE 0x4558454c
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_BA__ID 53
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_BA HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_BA__MODULE, HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_BA__ID
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_JLS_FOR_CLASSNAME__MODULE 0x4558454c
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_JLS_FOR_CLASSNAME__ID 54
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_JLS_FOR_CLASSNAME HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_JLS_FOR_CLASSNAME__MODULE, HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_JLS_FOR_CLASSNAME__ID
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_OUT_OF_MEMORY_CONVERTING__MODULE 0x4558454c
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_OUT_OF_MEMORY_CONVERTING__ID 55
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_OUT_OF_MEMORY_CONVERTING HYNLS_EXELIB_INTERNAL_VM_ERR_OUT_OF_MEMORY_CONVERTING__MODULE, HYNLS_EXELIB_INTERNAL_VM_ERR_OUT_OF_MEMORY_CONVERTING__ID
+#define HYNLS_EXELIB_CLASS_DOES_NOT_IMPL_MAIN__MODULE 0x4558454c
+#define HYNLS_EXELIB_CLASS_DOES_NOT_IMPL_MAIN__ID 56
+#define HYNLS_EXELIB_CLASS_DOES_NOT_IMPL_MAIN HYNLS_EXELIB_CLASS_DOES_NOT_IMPL_MAIN__MODULE, HYNLS_EXELIB_CLASS_DOES_NOT_IMPL_MAIN__ID
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_ARG_ARRAY__MODULE 0x4558454c
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_ARG_ARRAY__ID 57
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_ARG_ARRAY HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_ARG_ARRAY__MODULE, HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_ARG_ARRAY__ID
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_BYTE_ARRAY__MODULE 0x4558454c
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_BYTE_ARRAY__ID 58
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_BYTE_ARRAY HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_BYTE_ARRAY__MODULE, HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_BYTE_ARRAY__ID
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_JLS_FOR_ARG__MODULE 0x4558454c
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_JLS_FOR_ARG__ID 59
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_JLS_FOR_ARG HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_JLS_FOR_ARG__MODULE, HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_JLS_FOR_ARG__ID
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_SET_ARRAY_ELEM__MODULE 0x4558454c
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_SET_ARRAY_ELEM__ID 60
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_SET_ARRAY_ELEM HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_SET_ARRAY_ELEM__MODULE, HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_SET_ARRAY_ELEM__ID
+#define HYNLS_EXELIB_VM_STARTUP_ERR_OUT_OF_MEMORY__MODULE 0x4558454c
+#define HYNLS_EXELIB_VM_STARTUP_ERR_OUT_OF_MEMORY__ID 61
+#define HYNLS_EXELIB_VM_STARTUP_ERR_OUT_OF_MEMORY HYNLS_EXELIB_VM_STARTUP_ERR_OUT_OF_MEMORY__MODULE, HYNLS_EXELIB_VM_STARTUP_ERR_OUT_OF_MEMORY__ID
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_JAVA_VM__MODULE 0x4558454c
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_JAVA_VM__ID 62
+#define HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_JAVA_VM HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_JAVA_VM__MODULE, HYNLS_EXELIB_INTERNAL_VM_ERR_FAILED_CREATE_JAVA_VM__ID
+
+#endif // hyexelibnls_h
Added: incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/launcher_copyright.c
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/launcher_copyright.c?rev=382065&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/launcher_copyright.c (added)
+++ incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/launcher_copyright.c Wed Mar 1 07:42:53 2006
@@ -0,0 +1,19 @@
+/* Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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.
+ */
+
+/* A copyright string included in each DLL and executable */
+
+const char hyCopyright[] =
+ "(c) Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable.";
Added: incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/libhlp.c
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/libhlp.c?rev=382065&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/libhlp.c (added)
+++ incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/libhlp.c Wed Mar 1 07:42:53 2006
@@ -0,0 +1,309 @@
+/* Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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 <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "hyport.h"
+#include "libhlp.h"
+
+#define HY_PATH_SLASH DIR_SEPARATOR
+
+I_32
+main_appendToClassPath (HyPortLibrary * portLib, U_16 sep,
+ HyStringBuffer ** classPath, char *toAppend)
+{
+
+ /* append a separator, first */
+ if (*classPath && (*classPath)->data[strlen ((*classPath)->data)] != sep)
+ {
+ char separator[2];
+ separator[0] = (char) sep;
+ separator[1] = '\0';
+ *classPath = strBufferCat (portLib, *classPath, separator);
+ if (*classPath == NULL)
+ return -1;
+ }
+
+ *classPath = strBufferCat (portLib, *classPath, toAppend);
+ if (*classPath == NULL)
+ return -1;
+
+ return 0;
+}
+
+/* Allocates and retrieves initial value of the classPath. */
+
+I_32
+main_initializeClassPath (HyPortLibrary * portLib,
+ HyStringBuffer ** classPath)
+{
+ PORT_ACCESS_FROM_PORT (portLib);
+ I_32 rc;
+ char *envvars = "CLASSPATH\0classpath\0";
+ char *envvar;
+
+ for (envvar = envvars; *envvar; envvar += strlen (envvar) + 1)
+ {
+ rc = hysysinfo_get_env (envvar, NULL, 0);
+ if (rc > 0)
+ {
+ *classPath = strBufferEnsure (portLib, *classPath, rc);
+ if (*classPath == NULL)
+ return -1;
+ hysysinfo_get_env (envvar,
+ (*classPath)->data + strlen ((*classPath)->data),
+ rc);
+ (*classPath)->remaining -= rc;
+ break;
+ }
+ }
+
+ return 0;
+}
+
+IDATA
+main_initializeJavaHome (HyPortLibrary * portLib,
+ HyStringBuffer ** finalJavaHome, int argc,
+ char **argv)
+{
+ char *javaHome = NULL;
+ char *javaHomeModifiablePart = NULL;
+ char *p;
+ IDATA retval = -1;
+ I_32 rc;
+ UDATA isUpper = TRUE;
+ char *envvars = "JAVA_HOME\0java_home\0";
+ char *envvar;
+
+ PORT_ACCESS_FROM_PORT (portLib);
+
+ for (envvar = envvars; *envvar; envvar += strlen (envvar) + 1)
+ {
+ rc = hysysinfo_get_env (envvar, NULL, 0);
+ if (rc > 0)
+ {
+ *finalJavaHome = strBufferEnsure (portLib, *finalJavaHome, rc);
+ if (*finalJavaHome == NULL)
+ return -1;
+ hysysinfo_get_env (envvar,
+ (*finalJavaHome)->data +
+ strlen ((*finalJavaHome)->data), rc);
+ (*finalJavaHome)->remaining -= rc;
+ return 0;
+ }
+ }
+
+ /* Compute the proper value for the var. */
+
+ if ((argc < 1) || !argv)
+ return -1;
+
+ retval = hysysinfo_get_executable_name (argv[0], &javaHome);
+ if (retval)
+ {
+ /* guess. How about ".."? */
+ *finalJavaHome = strBufferCat (portLib, *finalJavaHome, "..");
+ return 0;
+ }
+
+ javaHomeModifiablePart = javaHome;
+#if defined(WIN32)
+ /* Make sure we don't modify a drive specifier in a pathname. */
+ if ((strlen (javaHome) > 2) && (javaHome[1] == ':'))
+ {
+ javaHomeModifiablePart = javaHome + 2;
+ if (javaHome[2] == HY_PATH_SLASH)
+ javaHomeModifiablePart++;
+ }
+#endif
+
+#if defined(WIN32)
+ /* Make sure we don't modify the root of a UNC pathname. */
+ if ((strlen (javaHome) > 2) && (javaHome[0] == HY_PATH_SLASH)
+ && (javaHome[1] == HY_PATH_SLASH))
+ {
+ javaHomeModifiablePart = javaHome + 2;
+ /* skip over the machine name */
+ while (*javaHomeModifiablePart
+ && (*javaHomeModifiablePart != HY_PATH_SLASH))
+ {
+ javaHomeModifiablePart++;
+ }
+ if (*javaHomeModifiablePart)
+ javaHomeModifiablePart++;
+ /* skip over the share name */
+ while (*javaHomeModifiablePart
+ && (*javaHomeModifiablePart != HY_PATH_SLASH))
+ {
+ javaHomeModifiablePart++;
+ }
+ }
+#endif
+
+ if ((javaHomeModifiablePart == javaHome) && javaHome[0] == HY_PATH_SLASH)
+ {
+ /* make sure we don't modify a root slash. */
+ javaHomeModifiablePart++;
+ }
+
+ /* Note: if sysinfo_get_executable_name claims we were invoked from a root directory, */
+ /* then this code will return that root directory for java.home also. */
+ p = strrchr (javaHomeModifiablePart, HY_PATH_SLASH);
+ if (!p)
+ {
+ javaHomeModifiablePart[0] = '\0'; /* chop off whole thing! */
+ }
+ else
+ {
+ p[0] = '\0'; /* chop off trailing slash and executable name. */
+ p = strrchr (javaHomeModifiablePart, HY_PATH_SLASH);
+ if (!p)
+ {
+ javaHomeModifiablePart[0] = '\0'; /* chop off the rest */
+ }
+ else
+ {
+ p[0] = '\0'; /* chop off trailing slash and deepest subdirectory. */
+ }
+ }
+
+ *finalJavaHome = strBufferCat (portLib, *finalJavaHome, javaHome);
+
+ hymem_free_memory (javaHome);
+
+ return 0;
+}
+
+IDATA
+main_initializeJavaLibraryPath (HyPortLibrary * portLib,
+ HyStringBuffer ** finalJavaLibraryPath,
+ char *argv0)
+{
+#if defined(WIN32)
+#define ENV_PATH "PATH"
+#else
+#define ENV_PATH "LD_LIBRARY_PATH"
+#endif
+
+ HyStringBuffer *javaLibraryPath = NULL;
+ char *exeName = NULL;
+ IDATA rc = -1;
+ char *p;
+ char *envResult;
+ int envSize;
+#define ENV_BUFFER_SIZE 80
+ char envBuffer[ENV_BUFFER_SIZE];
+ char sep[2];
+ PORT_ACCESS_FROM_PORT (portLib);
+
+ sep[0] = (char) hysysinfo_get_classpathSeparator ();
+ sep[1] = '\0';
+
+ if (hysysinfo_get_executable_name (argv0, &exeName))
+ {
+ goto done;
+ }
+ p = strrchr (exeName, HY_PATH_SLASH);
+ if (p)
+ {
+ p[1] = '\0';
+ }
+ else
+ {
+ hymem_free_memory (exeName);
+ exeName = NULL;
+ }
+
+ envSize = hysysinfo_get_env (ENV_PATH, NULL, 0);
+ if (envSize > 0)
+ {
+ if (envSize >= ENV_BUFFER_SIZE)
+ {
+ envResult = hymem_allocate_memory (envSize + 1);
+ if (!envResult)
+ goto done;
+ hysysinfo_get_env (ENV_PATH, envResult, envSize);
+ }
+ else
+ {
+ envSize = -1; /* make it -1 so we don't free the buffer */
+ hysysinfo_get_env (ENV_PATH, envBuffer, ENV_BUFFER_SIZE);
+ envResult = envBuffer;
+ }
+ }
+ else
+ {
+ envResult = NULL;
+ }
+
+ /* Add one to each length to account for the separator character. Add 2 at the end for the "." and NULL terminator */
+
+ if (exeName)
+ {
+ javaLibraryPath = strBufferCat (portLib, javaLibraryPath, exeName);
+ javaLibraryPath = strBufferCat (portLib, javaLibraryPath, sep);
+ }
+ javaLibraryPath = strBufferCat (portLib, javaLibraryPath, ".");
+ if (envResult)
+ {
+ javaLibraryPath = strBufferCat (portLib, javaLibraryPath, sep);
+ javaLibraryPath = strBufferCat (portLib, javaLibraryPath, envResult);
+ if (envSize != -1)
+ {
+ hymem_free_memory (envResult);
+ }
+ }
+
+ rc = 0;
+
+done:
+ if (exeName)
+ {
+ hymem_free_memory (exeName);
+ }
+ *finalJavaLibraryPath = javaLibraryPath;
+ return rc;
+
+}
+
+IDATA
+convertString (JNIEnv * env, HyPortLibrary * hyportLibrary,
+ jclass stringClass, jmethodID stringMid, char *chars,
+ jstring * str)
+{
+ UDATA strLength;
+ jarray bytearray;
+ jstring string;
+
+ strLength = strlen (chars);
+ bytearray = (*env)->NewByteArray (env, strLength);
+ if (((*env)->ExceptionCheck (env)))
+ return 1;
+
+ (*env)->SetByteArrayRegion (env, bytearray, (UDATA) 0, strLength, chars);
+
+ string =
+ (*env)->NewObject (env, stringClass, stringMid, bytearray, (UDATA) 0,
+ strLength);
+ if (!string)
+ return 2;
+
+ (*env)->DeleteLocalRef (env, bytearray);
+
+ *str = string;
+ return 0;
+}
Added: incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/libhlp.h
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/libhlp.h?rev=382065&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/libhlp.h (added)
+++ incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/libhlp.h Wed Mar 1 07:42:53 2006
@@ -0,0 +1,68 @@
+/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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.
+ */
+
+#if !defined(LIBHLP_H)
+#define LIBHLP_H
+#if defined(__cplusplus)
+extern "C"
+{
+#endif
+#include "hycomp.h"
+#include "hyport.h"
+#include "jni.h"
+
+ typedef struct HyStringBuffer
+ {
+ UDATA remaining;
+ U_8 data[4];
+ } HyStringBuffer;
+#define HYSIZEOF_HyStringBuffer 8
+ struct haCmdlineOptions
+ {
+ int argc;
+ char **argv;
+ char **envp;
+ HyPortLibrary *portLibrary;
+ };
+ struct HyPortLibrary;
+ extern HY_CFUNC HyStringBuffer *strBufferCat
+ PROTOTYPE ((struct HyPortLibrary * portLibrary, HyStringBuffer * buffer,
+ const char *string));
+ extern HY_CFUNC char *strBufferData PROTOTYPE ((HyStringBuffer * buffer));
+ struct HyPortLibrary;
+ extern HY_CFUNC HyStringBuffer *strBufferPrepend
+ PROTOTYPE ((struct HyPortLibrary * portLibrary, HyStringBuffer * buffer,
+ char *string));
+ struct HyPortLibrary;
+ extern HY_CFUNC HyStringBuffer *strBufferEnsure
+ PROTOTYPE ((struct HyPortLibrary * portLibrary, HyStringBuffer * buffer,
+ UDATA len));
+ extern HY_CFUNC void dumpVersionInfo PROTOTYPE ((HyPortLibrary * portLib));
+ extern HY_CFUNC int main_runJavaMain
+ PROTOTYPE ((JNIEnv * env, char *mainClassName, int nameIsUTF,
+ int java_argc, char **java_argv,
+ HyPortLibrary * hyportLibrary));
+ extern HY_CFUNC IDATA main_initializeJavaLibraryPath
+ PROTOTYPE ((HyPortLibrary * portLib,
+ HyStringBuffer ** finalJavaLibraryPath, char *argv0));
+ extern HY_CFUNC I_32 main_initializeClassPath
+ PROTOTYPE ((HyPortLibrary * portLib, HyStringBuffer ** classPath));
+ extern HY_CFUNC IDATA main_initializeJavaHome
+ PROTOTYPE ((HyPortLibrary * portLib, HyStringBuffer ** finalJavaHome,
+ int argc, char **argv));
+#if defined(__cplusplus)
+}
+#endif
+#endif /* LIBHLP_H */
Added: incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/strbuf.c
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/strbuf.c?rev=382065&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/strbuf.c (added)
+++ incubator/harmony/enhanced/classlib/trunk/native-src/shared/launcher/strbuf.c Wed Mar 1 07:42:53 2006
@@ -0,0 +1,96 @@
+/* Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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 <string.h>
+
+#include "libhlp.h"
+
+#define MIN_GROWTH 128
+
+HyStringBuffer *
+strBufferCat (struct HyPortLibrary * portLibrary, HyStringBuffer * buffer,
+ const char *string)
+{
+ UDATA len = strlen (string);
+
+ buffer = strBufferEnsure (portLibrary, buffer, len);
+ if (buffer)
+ {
+ strcat (buffer->data, string);
+ buffer->remaining -= len;
+ }
+
+ return buffer;
+}
+
+HyStringBuffer *
+strBufferEnsure (struct HyPortLibrary * portLibrary, HyStringBuffer * buffer,
+ UDATA len)
+{
+
+ if (buffer == NULL)
+ {
+ PORT_ACCESS_FROM_PORT (portLibrary);
+ UDATA newSize = len > MIN_GROWTH ? len : MIN_GROWTH;
+ buffer = hymem_allocate_memory (newSize + 1 + sizeof (UDATA)); /* 1 for null terminator */
+ if (buffer != NULL)
+ {
+ buffer->remaining = newSize;
+ buffer->data[0] = '\0';
+ }
+ return buffer;
+ }
+
+ if (len > buffer->remaining)
+ {
+ PORT_ACCESS_FROM_PORT (portLibrary);
+ UDATA newSize = len > MIN_GROWTH ? len : MIN_GROWTH;
+ HyStringBuffer *new =
+ hymem_allocate_memory (strlen (buffer->data) + newSize +
+ sizeof (UDATA) + 1);
+ if (new)
+ {
+ new->remaining = newSize;
+ strcpy (new->data, buffer->data);
+ }
+ hymem_free_memory (buffer);
+ return new;
+ }
+
+ return buffer;
+}
+
+HyStringBuffer *
+strBufferPrepend (struct HyPortLibrary * portLibrary, HyStringBuffer * buffer,
+ char *string)
+{
+ UDATA len = strlen (string);
+
+ buffer = strBufferEnsure (portLibrary, buffer, len);
+ if (buffer)
+ {
+ memmove (buffer->data + len, buffer->data, strlen (buffer->data) + 1);
+ strncpy (buffer->data, string, len);
+ buffer->remaining -= len;
+ }
+
+ return buffer;
+}
+
+char *
+strBufferData (HyStringBuffer * buffer)
+{
+ return buffer ? buffer->data : NULL;
+}
Propchange: incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Mar 1 07:42:53 2006
@@ -0,0 +1 @@
+*.obj
Added: incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/bigint.h
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/bigint.h?rev=382065&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/bigint.h (added)
+++ incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/bigint.h Wed Mar 1 07:42:53 2006
@@ -0,0 +1,36 @@
+/* Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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.
+ */
+
+#if !defined(bigint_h)
+#define bigint_h
+jlongArray JNICALL Java_com_ibm_oti_util_math_BigInteger_subImpl
+PROTOTYPE ((JNIEnv * env, jclass cls, jlongArray src1, jlongArray src2));
+jlongArray JNICALL Java_com_ibm_oti_util_math_BigInteger_divImpl
+PROTOTYPE ((JNIEnv * env, jclass cls, jlongArray topObject,
+ jlongArray bottomObject));
+jlongArray JNICALL Java_com_ibm_oti_util_math_BigInteger_mulImpl
+PROTOTYPE ((JNIEnv * env, jclass cls, jlongArray src1, jlongArray src2));
+jlongArray JNICALL Java_com_ibm_oti_util_math_BigInteger_negImpl
+PROTOTYPE ((JNIEnv * env, jclass cls, jlongArray src));
+jlongArray JNICALL Java_com_ibm_oti_util_math_BigInteger_addImpl
+PROTOTYPE ((JNIEnv * env, jclass cls, jlongArray src1, jlongArray src2));
+jlongArray JNICALL Java_com_ibm_oti_util_math_BigInteger_remImpl
+PROTOTYPE ((JNIEnv * env, jclass cls, jlongArray topObject,
+ jlongArray bottomObject));
+jlongArray JNICALL Java_com_ibm_oti_util_math_BigInteger_shlImpl
+PROTOTYPE ((JNIEnv * env, jclass cls, jlongArray src, jint shiftval));
+jint JNICALL Java_com_ibm_oti_util_math_BigInteger_compImpl
+PROTOTYPE ((JNIEnv * env, jclass cls, jlongArray src1, jlongArray src2));
+#endif /* bigint_h */
Added: incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/file.c
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/file.c?rev=382065&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/file.c (added)
+++ incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/file.c Wed Mar 1 07:42:53 2006
@@ -0,0 +1,517 @@
+/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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 <string.h>
+#include <ctype.h>
+#include "iohelp.h"
+#include "jclglob.h"
+#include "helpers.h"
+#include "jclprots.h"
+
+jboolean JNICALL
+Java_java_io_File_deleteFileImpl (JNIEnv * env, jobject recv, jbyteArray path)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ I_32 result;
+ jsize length = (*env)->GetArrayLength (env, path);
+ char pathCopy[HyMaxPath];
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+ result = hyfile_unlink (pathCopy);
+ return result == 0;
+}
+
+jboolean JNICALL
+Java_java_io_File_deleteDirImpl (JNIEnv * env, jobject recv, jbyteArray path)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ I_32 result;
+ jsize length = (*env)->GetArrayLength (env, path);
+ char pathCopy[HyMaxPath];
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+ result = hyfile_unlinkdir (pathCopy);
+ return result == 0;
+}
+
+jobject JNICALL
+Java_java_io_File_listImpl (JNIEnv * env, jobject recv, jbyteArray path)
+{
+ struct dirEntry
+ {
+ char pathEntry[HyMaxPath];
+ struct dirEntry *next;
+ } *dirList, *currentEntry;
+
+ PORT_ACCESS_FROM_ENV (env);
+ jsize length = (*env)->GetArrayLength (env, path);
+ char pathCopy[HyMaxPath];
+ char filename[HyMaxPath];
+ I_32 result = 0, index;
+ I_32 numEntries = 0;
+ UDATA findhandle;
+ jarray answer = NULL;
+
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ if (length >= 1 && pathCopy[length - 1] != '\\'
+ && pathCopy[length - 1] != '/')
+ {
+ pathCopy[length] = jclSeparator;
+ length++;
+ }
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+ findhandle = hyfile_findfirst (pathCopy, filename);
+ if (findhandle == (UDATA) - 1)
+ return NULL;
+
+ while (result > -1)
+ {
+ if (strcmp (".", filename) != 0 && (strcmp ("..", filename) != 0))
+ {
+ if (numEntries > 0)
+ {
+ currentEntry->next =
+ (struct dirEntry *) jclmem_allocate_memory (env,
+ sizeof (struct
+ dirEntry));
+ currentEntry = currentEntry->next;
+ }
+ else
+ {
+ dirList =
+ (struct dirEntry *) jclmem_allocate_memory (env,
+ sizeof (struct
+ dirEntry));
+ currentEntry = dirList;
+ }
+ if (currentEntry == NULL)
+ {
+ hyfile_findclose (findhandle);
+ throwNewOutOfMemoryError (env, "");
+ goto cleanup;
+ }
+ strcpy (currentEntry->pathEntry, filename);
+ numEntries++;
+ }
+ result = hyfile_findnext (findhandle, filename);
+ }
+ hyfile_findclose (findhandle);
+
+ if (numEntries == 0)
+ return NULL;
+
+ answer =
+ (*env)->NewObjectArray (env, numEntries,
+ JCL_CACHE_GET (env, CLS_array_of_byte), NULL);
+cleanup:
+ for (index = 0; index < numEntries; index++)
+ {
+ jbyteArray entrypath;
+ jsize entrylen = strlen (dirList->pathEntry);
+ currentEntry = dirList;
+ if (answer)
+ {
+ entrypath = (*env)->NewByteArray (env, entrylen);
+ (*env)->SetByteArrayRegion (env, entrypath, 0, entrylen,
+ (jbyte *) dirList->pathEntry);
+ (*env)->SetObjectArrayElement (env, answer, index, entrypath);
+ (*env)->DeleteLocalRef (env, entrypath);
+ }
+ dirList = dirList->next;
+ jclmem_free_memory (env, currentEntry);
+ }
+ return answer;
+}
+
+jboolean JNICALL
+Java_java_io_File_isDirectoryImpl (JNIEnv * env, jobject recv,
+ jbyteArray path)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ I_32 result;
+ jsize length = (*env)->GetArrayLength (env, path);
+ char pathCopy[HyMaxPath];
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+ result = hyfile_attr (pathCopy);
+ return result == HyIsDir;
+}
+
+jboolean JNICALL
+Java_java_io_File_existsImpl (JNIEnv * env, jobject recv, jbyteArray path)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ I_32 result;
+ char pathCopy[HyMaxPath];
+ jsize length = (*env)->GetArrayLength (env, path);
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+ result = hyfile_attr (pathCopy);
+ return result >= 0;
+}
+
+jboolean JNICALL
+Java_java_io_File_isFileImpl (JNIEnv * env, jobject recv, jbyteArray path)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ I_32 result;
+ jsize length = (*env)->GetArrayLength (env, path);
+ char pathCopy[HyMaxPath];
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+ result = hyfile_attr (pathCopy);
+ return result == HyIsFile;
+}
+
+jlong JNICALL
+Java_java_io_File_lastModifiedImpl (JNIEnv * env, jobject recv,
+ jbyteArray path)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ I_64 result;
+ jsize length = (*env)->GetArrayLength (env, path);
+ char pathCopy[HyMaxPath];
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+ result = hyfile_lastmod (pathCopy);
+ return result;
+}
+
+jlong JNICALL
+Java_java_io_File_lengthImpl (JNIEnv * env, jobject recv, jbyteArray path)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ I_64 result;
+ jsize length = (*env)->GetArrayLength (env, path);
+ char pathCopy[HyMaxPath];
+
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+ result = hyfile_length (pathCopy);
+ if (result < 0)
+ {
+ return 0L;
+ }
+ return result;
+}
+
+jboolean JNICALL
+Java_java_io_File_isAbsoluteImpl (JNIEnv * env, jobject recv, jbyteArray path)
+{
+ I_32 result = 0;
+ jsize length = (*env)->GetArrayLength (env, path);
+ jbyte *lpath = (jbyte *) ((*env)->GetPrimitiveArrayCritical (env, path, 0));
+
+ if (jclSeparator == '/' && length > 0)
+ {
+ result = (lpath[0] == jclSeparator);
+ goto release;
+ }
+ if (length > 1 && lpath[0] == '\\' && lpath[1] == '\\')
+ {
+ result = 1;
+ goto release;
+ }
+ if (length > 2)
+ {
+ if (isalpha (lpath[0]) && lpath[1] == ':'
+ && (lpath[2] == '\\' || lpath[2] == '/'))
+ result = 1;
+ }
+
+release:
+ /* Easier to release in one area than copy the code around */
+ (*env)->ReleasePrimitiveArrayCritical (env, path, lpath, JNI_ABORT);
+ return result;
+}
+
+jboolean JNICALL
+Java_java_io_File_mkdirImpl (JNIEnv * env, jobject recv, jbyteArray path)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ I_32 result;
+ jsize length = (*env)->GetArrayLength (env, path);
+ char pathCopy[HyMaxPath];
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+ result = hyfile_mkdir (pathCopy);
+ return result == 0;
+}
+
+jboolean JNICALL
+Java_java_io_File_renameToImpl (JNIEnv * env, jobject recv,
+ jbyteArray pathExist, jbyteArray pathNew)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ I_32 result;
+ jsize length;
+ char pathExistCopy[HyMaxPath], pathNewCopy[HyMaxPath];
+ length = (*env)->GetArrayLength (env, pathExist);
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, pathExist, 0, length, pathExistCopy));
+ pathExistCopy[length] = '\0';
+ length = (*env)->GetArrayLength (env, pathNew);
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, pathNew, 0, length, pathNewCopy));
+ pathNewCopy[length] = '\0';
+ ioh_convertToPlatform (pathExistCopy);
+ ioh_convertToPlatform (pathNewCopy);
+ result = hyfile_move (pathExistCopy, pathNewCopy);
+ return result == 0;
+}
+
+jobject JNICALL
+Java_java_io_File_getCanonImpl (JNIEnv * env, jobject recv, jbyteArray path)
+{
+ /* This needs work. Currently is does no more or less than VAJ-20 ST implementation
+ * but really should figure out '..', '.', and really resolve references.
+ */
+ jbyteArray answer;
+ jsize answerlen;
+ char pathCopy[HyMaxPath];
+ U_32 length = (U_32) (*env)->GetArrayLength (env, path);
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ (*env)->GetByteArrayRegion (env, path, 0, length, pathCopy);
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+#if defined(WIN32)
+ platformCanonicalPath (pathCopy);
+#endif
+
+ answerlen = strlen (pathCopy);
+ answer = (*env)->NewByteArray (env, answerlen);
+ (*env)->SetByteArrayRegion (env, answer, 0, answerlen, (jbyte *) pathCopy);
+ return answer;
+}
+
+jint JNICALL
+Java_java_io_File_newFileImpl (JNIEnv * env, jobject recv, jbyteArray path)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ I_32 result;
+ IDATA portFD;
+ jsize length = (*env)->GetArrayLength (env, path);
+ char pathCopy[HyMaxPath];
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+
+ /* First check to see if file already exists */
+ result = hyfile_attr (pathCopy);
+ if (result == HyIsDir)
+ return 3;
+ if (result >= 0)
+ return 1;
+
+ /* Now create the file and close it */
+ portFD =
+ hyfile_open (pathCopy, HyOpenCreate | HyOpenWrite | HyOpenTruncate, 0666);
+ if (portFD == -1)
+ return 2;
+ hyfile_close (portFD);
+ return 0;
+}
+
+jobject JNICALL
+Java_java_io_File_rootsImpl (JNIEnv * env, jclass clazz)
+{
+ char rootStrings[HyMaxPath], *rootCopy;
+ I_32 numRoots;
+ I_32 index = 0;
+ jarray answer;
+
+ /**
+ * It is the responsibility of #getPlatformRoots to return a char array
+ * with volume names separated by null with a trailing extra null, so for
+ * Unix it should be '\<null><null>' .
+ */
+ numRoots = getPlatformRoots (rootStrings);
+ if (numRoots == 0)
+ return NULL;
+ rootCopy = rootStrings;
+
+ answer =
+ (*env)->NewObjectArray (env, numRoots,
+ JCL_CACHE_GET (env, CLS_array_of_byte), NULL);
+ if (!answer)
+ {
+ return NULL;
+ }
+ while (TRUE)
+ {
+ jbyteArray rootname;
+ jsize entrylen = strlen (rootCopy);
+ /* Have we hit the second null? */
+ if (entrylen == 0)
+ break;
+ rootname = (*env)->NewByteArray (env, entrylen);
+ (*env)->SetByteArrayRegion (env, rootname, 0, entrylen,
+ (jbyte *) rootCopy);
+ (*env)->SetObjectArrayElement (env, answer, index++, rootname);
+ (*env)->DeleteLocalRef (env, rootname);
+ rootCopy = rootCopy + entrylen + 1;
+ }
+ return answer;
+}
+
+jboolean JNICALL
+Java_java_io_File_isHiddenImpl (JNIEnv * env, jobject recv, jbyteArray path)
+{
+ I_32 result;
+ char pathCopy[HyMaxPath];
+ jsize length = (*env)->GetArrayLength (env, path);
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+ result = getPlatformIsHidden (env, pathCopy);
+ return result;
+}
+
+jboolean JNICALL
+Java_java_io_File_setLastModifiedImpl (JNIEnv * env, jobject recv,
+ jbyteArray path, jlong time)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ I_32 result;
+ jsize length = (*env)->GetArrayLength (env, path);
+ char pathCopy[HyMaxPath];
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+
+ result = setPlatformLastModified (env, pathCopy, (I_64) time);
+
+ return result;
+}
+
+jboolean JNICALL
+Java_java_io_File_setReadOnlyImpl (JNIEnv * env, jobject recv,
+ jbyteArray path)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ jsize length = (*env)->GetArrayLength (env, path);
+ char pathCopy[HyMaxPath];
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+ return setPlatformReadOnly (env, pathCopy);
+}
+
+void JNICALL
+Java_java_io_File_oneTimeInitialization (JNIEnv * env, jclass clazz)
+{
+ jclass arrayClass = (*env)->FindClass (env, "[B");
+ if (arrayClass)
+ {
+ jobject globalRef = (*env)->NewWeakGlobalRef (env, arrayClass);
+ if (globalRef)
+ JCL_CACHE_SET (env, CLS_array_of_byte, globalRef);
+ }
+ return;
+}
+
+jbyteArray JNICALL
+Java_java_io_File_properPathImpl (JNIEnv * env, jobject recv, jbyteArray path)
+{
+ return getPlatformPath (env, path);
+}
+
+jboolean JNICALL
+Java_java_io_File_isReadOnlyImpl (JNIEnv * env, jobject recv, jbyteArray path)
+{
+ I_32 result;
+ char pathCopy[HyMaxPath];
+ jsize length = (*env)->GetArrayLength (env, path);
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+ result = getPlatformIsReadOnly (env, pathCopy);
+ return result;
+}
+
+jboolean JNICALL
+Java_java_io_File_isWriteOnlyImpl (JNIEnv * env, jobject recv,
+ jbyteArray path)
+{
+ I_32 result;
+ char pathCopy[HyMaxPath];
+ jsize length = (*env)->GetArrayLength (env, path);
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+ result = getPlatformIsWriteOnly (env, pathCopy);
+ return result;
+}
+
+jobject JNICALL
+Java_java_io_File_getLinkImpl (JNIEnv * env, jobject recv, jbyteArray path)
+{
+ jbyteArray answer;
+ jsize answerlen;
+ char pathCopy[HyMaxPath];
+ U_32 length = (U_32) (*env)->GetArrayLength (env, path);
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ (*env)->GetByteArrayRegion (env, path, 0, length, pathCopy);
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+ if (platformReadLink (pathCopy))
+ {
+ answerlen = strlen (pathCopy);
+ answer = (*env)->NewByteArray (env, answerlen);
+ (*env)->SetByteArrayRegion (env, answer, 0, answerlen,
+ (jbyte *) pathCopy);
+ }
+ else
+ {
+ answer = path;
+ }
+ return answer;
+}
+
+jboolean JNICALL
+Java_java_io_File_isCaseSensitiveImpl (JNIEnv * env, jclass clazz)
+{
+/* Assume all other platforms ARE case sensitive and add to this list when they prove otherwise */
+#if (defined(WIN32))
+ return FALSE;
+#else
+ return TRUE;
+#endif
+
+}
Added: incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/filedesc.c
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/filedesc.c?rev=382065&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/filedesc.c (added)
+++ incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/filedesc.c Wed Mar 1 07:42:53 2006
@@ -0,0 +1,70 @@
+/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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 "iohelp.h"
+#include "jclglob.h"
+
+jboolean JNICALL
+Java_java_io_FileDescriptor_valid (JNIEnv * env, jobject recv)
+{
+ /**
+ * Currently only answer false if the descriptor is -1. Possibly there
+ * could be an OS check to see if the handle has been invalidated
+ */
+ void *descriptor = getJavaIoFileDescriptorContentsAsPointer (env, recv);
+ return (IDATA) descriptor != -1;
+}
+
+void JNICALL
+Java_java_io_FileDescriptor_sync (JNIEnv * env, jobject recv)
+{
+ /* Cause all unwritten data to be written out to the OS */
+ IDATA descriptor;
+ I_32 syncfailed = 0;
+ PORT_ACCESS_FROM_ENV (env);
+
+ descriptor = (IDATA) getJavaIoFileDescriptorContentsAsPointer (env, recv);
+ if (descriptor == -1)
+ {
+ syncfailed = 1;
+ }
+ if (!syncfailed && (descriptor > 2))
+ {
+ /* Don't attempt to sync stdin, out, or err */
+ syncfailed = hyfile_sync (descriptor) != 0;
+ }
+ if (syncfailed)
+ {
+ /* Find and throw SyncFailedException */
+ jclass exceptionClass = (*env)->FindClass(env, "java/io/SyncFailedException");
+ if (0 == exceptionClass) {
+ /* Just return if we can't load the exception class. */
+ return;
+ }
+ (*env)->ThrowNew(env, exceptionClass, "Failed to Sync File");
+ return;
+ }
+}
+
+void JNICALL
+Java_java_io_FileDescriptor_oneTimeInitialization (JNIEnv * env,
+ jclass fdClazz)
+{
+ jfieldID descriptorFID =
+ (*env)->GetFieldID (env, fdClazz, "descriptor", "J");
+ if (!descriptorFID)
+ return;
+ JCL_CACHE_SET (env, FID_java_io_FileDescriptor_descriptor, descriptorFID);
+}
Added: incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/fileis.c
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/fileis.c?rev=382065&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/fileis.c (added)
+++ incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/fileis.c Wed Mar 1 07:42:53 2006
@@ -0,0 +1,137 @@
+/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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 "iohelp.h"
+#include "jclglob.h"
+
+jlong JNICALL
+Java_java_io_FileInputStream_skip (JNIEnv * env, jobject recv, jlong count)
+{
+ jobject fd;
+ IDATA descriptor;
+ I_64 currentPosition, endOfFile, charsToSkip;
+ PORT_ACCESS_FROM_ENV (env);
+ if (count <= 0)
+ return 0;
+
+ fd =
+ (*env)->GetObjectField (env, recv,
+ JCL_CACHE_GET (env,
+ FID_java_io_FileInputStream_fd));
+ descriptor = (IDATA) getJavaIoFileDescriptorContentsAsPointer (env, fd);
+
+ if (descriptor == -1)
+ {
+ throwJavaIoIOExceptionClosed (env);
+ return 0;
+ }
+
+ currentPosition = hyfile_seek (descriptor, 0, HySeekCur);
+ endOfFile = hyfile_seek (descriptor, 0, HySeekEnd);
+ charsToSkip = (I_64) count > endOfFile
+ || (endOfFile - (I_64) count <
+ currentPosition) ? endOfFile - currentPosition : (I_64) count;
+ hyfile_seek (descriptor, charsToSkip + currentPosition, HySeekSet);
+ return (jlong) charsToSkip;
+}
+
+jint JNICALL
+Java_java_io_FileInputStream_openImpl (JNIEnv * env, jobject recv,
+ jbyteArray path)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ IDATA portFD;
+ jobject fd;
+ jsize length;
+ char pathCopy[HyMaxPath];
+ if (path == NULL)
+ {
+ throwNPException (env, "path is null");
+ return 0;
+ }
+ length = (*env)->GetArrayLength (env, path);
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+
+ /* Now have the filename, open the file using a portlib call */
+ portFD = hyfile_open (pathCopy, (I_32) HyOpenRead, (I_32) 0);
+
+ if (portFD == -1)
+ return 1;
+
+ fd =
+ (*env)->GetObjectField (env, recv,
+ JCL_CACHE_GET (env,
+ FID_java_io_FileInputStream_fd));
+ setJavaIoFileDescriptorContentsAsPointer (env, fd, (void *) portFD);
+ return 0;
+}
+
+jint JNICALL
+Java_java_io_FileInputStream_available (JNIEnv * env, jobject recv)
+{
+ /**
+ * Call the helper. The helper may throw an exception so either
+ * check for -1 or return immediately
+ */
+ return new_ioh_available (env, recv,
+ JCL_CACHE_GET (env,
+ FID_java_io_FileInputStream_fd));
+}
+
+jint JNICALL
+Java_java_io_FileInputStream_readImpl (JNIEnv * env, jobject recv,
+ jbyteArray buffer, jint offset,
+ jint count, jlong descriptor)
+{
+ /**
+ * Call the helper. The helper may throw an exception so this
+ * must return immediately.
+ */
+ return ioh_readbytesImpl (env, recv, buffer, offset, count,
+ (IDATA) descriptor);
+}
+
+jint JNICALL
+Java_java_io_FileInputStream_readByteImpl (JNIEnv * env, jobject recv,
+ jlong descriptor)
+{
+ /**
+ * Call the helper. The helper may throw an exception so this
+ * must return immediately.
+ */
+ return ioh_readcharImpl (env, recv, (IDATA) descriptor);
+}
+
+void JNICALL
+Java_java_io_FileInputStream_oneTimeInitialization (JNIEnv * env,
+ jclass clazz)
+{
+ jfieldID fdFID =
+ (*env)->GetFieldID (env, clazz, "fd", "Ljava/io/FileDescriptor;");
+ if (!fdFID)
+ return;
+ JCL_CACHE_SET (env, FID_java_io_FileInputStream_fd, fdFID);
+}
+
+void JNICALL
+Java_java_io_FileInputStream_closeImpl (JNIEnv * env, jobject recv)
+{
+ /* Call the helper */
+ new_ioh_close (env, recv,
+ JCL_CACHE_GET (env, FID_java_io_FileInputStream_fd));
+}
Added: incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/fileos.c
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/fileos.c?rev=382065&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/fileos.c (added)
+++ incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/fileos.c Wed Mar 1 07:42:53 2006
@@ -0,0 +1,106 @@
+/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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 <string.h>
+#include "iohelp.h"
+#include "jclglob.h"
+
+jint JNICALL
+Java_java_io_FileOutputStream_openImpl (JNIEnv * env, jobject recv,
+ jbyteArray path, jboolean append)
+{
+ jobject fd;
+ I_32 flags =
+ append ==
+ 0 ? HyOpenCreate | HyOpenWrite | HyOpenTruncate : HyOpenWrite |
+ HyOpenCreate;
+ IDATA portFD;
+ PORT_ACCESS_FROM_ENV (env);
+ jsize length;
+ char pathCopy[HyMaxPath];
+
+ if (path == NULL)
+ {
+ throwNPException (env, "path is null");
+ return 0;
+ }
+ length = (*env)->GetArrayLength (env, path);
+ length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;
+ ((*env)->GetByteArrayRegion (env, path, 0, length, pathCopy));
+ pathCopy[length] = '\0';
+ ioh_convertToPlatform (pathCopy);
+
+ /* Now have the filename, open the file using a portlib call */
+ portFD = hyfile_open (pathCopy, flags, 0666);
+
+ if (portFD == -1)
+ {
+ return 1;
+ }
+
+ if (append != 0)
+ {
+ hyfile_seek (portFD, 0, HySeekEnd);
+ }
+
+ fd =
+ (*env)->GetObjectField (env, recv,
+ JCL_CACHE_GET (env,
+ FID_java_io_FileOutputStream_fd));
+ setJavaIoFileDescriptorContentsAsPointer (env, fd, (void *) portFD);
+ return 0;
+}
+
+void JNICALL
+Java_java_io_FileOutputStream_writeImpl (JNIEnv * env, jobject recv,
+ jbyteArray buffer, jint offset,
+ jint count, jlong descriptor)
+{
+ /**
+ * Call the helper. The helper may throw an exception so this
+ * must return immediately.
+ */
+ ioh_writebytesImpl (env, recv, buffer, offset, count, (IDATA) descriptor);
+}
+
+void JNICALL
+Java_java_io_FileOutputStream_writeByteImpl (JNIEnv * env, jobject recv,
+ jint c, jlong descriptor)
+{
+ /**
+ * Call the helper. The helper may throw an exception so this
+ * must return immediately.
+ */
+ ioh_writecharImpl (env, recv, c, (IDATA) descriptor);
+}
+
+void JNICALL
+Java_java_io_FileOutputStream_oneTimeInitialization (JNIEnv * env,
+ jclass clazz)
+{
+ jfieldID fdFID =
+ (*env)->GetFieldID (env, clazz, "fd", "Ljava/io/FileDescriptor;");
+ if (!fdFID)
+ return;
+ JCL_CACHE_SET (env, FID_java_io_FileOutputStream_fd, fdFID);
+}
+
+void JNICALL
+Java_java_io_FileOutputStream_closeImpl (JNIEnv * env, jobject recv)
+{
+ /* Call the helper */
+ new_ioh_close (env, recv,
+ JCL_CACHE_GET (env, FID_java_io_FileOutputStream_fd));
+}
Added: incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/floatbits.c
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/floatbits.c?rev=382065&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/floatbits.c (added)
+++ incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/floatbits.c Wed Mar 1 07:42:53 2006
@@ -0,0 +1,81 @@
+/* Copyright 2004, 2005 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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 <string.h>
+#include <math.h>
+#include "jcl.h"
+#include "fltconst.h"
+
+#define DOUBLE_SIGN_MASK HYCONST64(0x8000000000000000)
+#define DOUBLE_EXPONENT_MASK HYCONST64(0x7FF0000000000000)
+#define DOUBLE_MANTISSA_MASK HYCONST64(0x000FFFFFFFFFFFFF)
+#define DOUBLE_NAN_BITS (DOUBLE_EXPONENT_MASK | HYCONST64(0x0008000000000000))
+
+JNIEXPORT jlong JNICALL
+Java_java_lang_Double_doubleToLongBits (JNIEnv * env, jclass cls,
+ jdouble doubleValue)
+{
+ jlong longValue = *(jlong *) & doubleValue;
+ if ((longValue & DOUBLE_EXPONENT_MASK) == DOUBLE_EXPONENT_MASK)
+ {
+ if (longValue & DOUBLE_MANTISSA_MASK)
+ {
+ return DOUBLE_NAN_BITS;
+ }
+ }
+ return longValue;
+}
+
+JNIEXPORT jlong JNICALL
+Java_java_lang_Double_doubleToRawLongBits (JNIEnv * env, jclass cls,
+ jdouble doubleValue)
+{
+ return *(jlong *) & doubleValue;
+}
+
+JNIEXPORT jdouble JNICALL
+Java_java_lang_Double_longBitsToDouble (JNIEnv * env, jclass cls,
+ jlong longValue)
+{
+ return *(jdouble *) & longValue;
+}
+
+JNIEXPORT jint JNICALL
+Java_java_lang_Float_floatToIntBits (JNIEnv * env, jclass cls,
+ jfloat floatValue)
+{
+ jint intValue = *(jint *) & floatValue;
+ if ((intValue & SINGLE_EXPONENT_MASK) == SINGLE_EXPONENT_MASK)
+ {
+ if (intValue & SINGLE_MANTISSA_MASK)
+ {
+ return SINGLE_NAN_BITS;
+ }
+ }
+ return intValue;
+}
+
+JNIEXPORT jint JNICALL
+Java_java_lang_Float_floatToRawIntBits (JNIEnv * env, jclass cls,
+ jfloat floatValue)
+{
+ return *(jint *) & floatValue;
+}
+
+JNIEXPORT jfloat JNICALL
+Java_java_lang_Float_intBitsToFloat (JNIEnv * env, jclass cls, jint intValue)
+{
+ return *(jfloat *) & intValue;
+}
Added: incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/jclglob.h
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/jclglob.h?rev=382065&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/jclglob.h (added)
+++ incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/jclglob.h Wed Mar 1 07:42:53 2006
@@ -0,0 +1,81 @@
+/* Copyright 2004, 2005 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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.
+ */
+
+#if !defined(jclglob_h)
+#define jclglob_h
+#include "jcl.h"
+extern void *LUNI_JCL_ID_CACHE;
+#define JCL_ID_CACHE LUNI_JCL_ID_CACHE
+typedef struct LUNIJniIDCache
+{
+
+ jfieldID FID_java_io_RandomAccessFile_fd;
+ jfieldID FID_java_io_FileDescriptor_descriptor;
+ jfieldID FID_java_io_FileInputStream_fd;
+ jfieldID FID_java_io_FileOutputStream_fd;
+ jfieldID FID_com_ibm_oti_lang_ProcessInputStream_handle;
+ jfieldID FID_com_ibm_oti_lang_ProcessInputStream_fd;
+ jfieldID FID_com_ibm_oti_lang_ProcessOutputStream_handle;
+ jfieldID FID_com_ibm_oti_lang_ProcessOutputStream_fd;
+ jfieldID FID_com_ibm_oti_lang_SystemProcess_handle;
+ jfieldID FID_java_net_SocketImpl_address;
+ jfieldID FID_java_net_SocketImpl_port;
+ jfieldID FID_java_net_DatagramPacket_length;
+ jfieldID FID_java_net_DatagramPacket_address;
+ jfieldID FID_java_net_DatagramPacket_port;
+ jfieldID FID_java_lang_ClassLoader_vmRef;
+ jfieldID FID_com_ibm_oti_vm_MemorySpace;
+ /* Used by ObjectStreamClass */
+ jmethodID MID_java_lang_reflect_Field_getSignature;
+ jmethodID MID_java_lang_reflect_Method_getSignature;
+ jmethodID MID_java_lang_reflect_Constructor_getSignature;
+ /* Used by shared net helpers */
+ jmethodID MID_java_lang_Boolean_init;
+ jmethodID MID_java_lang_Byte_init;
+ jmethodID MID_java_lang_Integer_init;
+ jmethodID MID_java_net_InetAddress_init_byteArray;
+ jmethodID MID_java_net_InetAddress_init_byteArrayLjava_lang_String;
+ jmethodID MID_java_lang_Thread_yield;
+ jmethodID MID_java_net_InetAddress_getByAddress_Ljava_lang_String_byteArray;
+ jmethodID MID_java_net_InetAddress_getByAddress_byteArray;
+ jmethodID MID_java_net_InetAddress_preferIPv6Addresses;
+ jmethodID MID_java_net_Socket_preferIPv4Stack;
+ jclass CLS_java_lang_Boolean;
+ jclass CLS_java_lang_Byte;
+ jclass CLS_java_lang_Integer;
+ jclass CLS_java_lang_Thread;
+ jclass CLS_java_net_InetAddress;
+ jclass CLS_java_net_Socket;
+ jfieldID FID_java_lang_Boolean_value;
+ jfieldID FID_java_lang_Byte_value;
+ jfieldID FID_java_lang_Integer_value;
+ jfieldID FID_java_net_InetAddress_address;
+ jclass CLS_array_of_byte;
+ /* comm connection port lists */
+ char **realPortArray;
+ char **synthPortArray;
+ int portListLen;
+
+ /* JCL support for IPv6 */
+ jboolean jcl_supports_ipv6;
+} LUNIJniIDCache;
+#define JniIDCache LUNIJniIDCache
+/* Now that the module-specific defines are in place, include the shared file */
+#include "libglob.h"
+/* all UNIX platforms */
+#if defined(LINUX)
+#include "hysignal.h"
+#endif /* UNIX */
+#endif /* jclglob_h */
Added: incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/luni_copyright.c
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/luni_copyright.c?rev=382065&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/luni_copyright.c (added)
+++ incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/luni_copyright.c Wed Mar 1 07:42:53 2006
@@ -0,0 +1,19 @@
+/* Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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.
+ */
+
+/* A copyright string included in each DLL and executable */
+
+const char hyCopyright[] =
+ "(c) Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable.";
Added: incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/nethelp.h
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/nethelp.h?rev=382065&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/nethelp.h (added)
+++ incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/nethelp.h Wed Mar 1 07:42:53 2006
@@ -0,0 +1,40 @@
+/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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.
+ */
+
+#if !defined(nethelp_h)
+#define nethelp_h
+#include "iohelp.h"
+#include "hysocket.h"
+#define JAVASOCKOPT_TCP_NODELAY 1
+#define JAVASOCKOPT_SO_REUSEADDR 4
+#define JAVASOCKOPT_MCAST_ADD_MEMBERSHIP 19
+#define JAVASOCKOPT_MCAST_DROP_MEMBERSHIP 20
+#define JAVASOCKOPT_MCAST_TTL 17
+#define JAVASOCKOPT_SO_KEEPALIVE 8
+#define JAVASOCKOPT_MCAST_TIME_TO_LIVE 10 /* Currently unused */
+#define JAVASOCKOPT_SO_BROADCAST 32
+#define JAVASOCKOPT_SO_BINDADDR 15
+#define JAVASOCKOPT_MCAST_INTERFACE 16
+#define JAVASOCKOPT_SO_LINGER 128
+#define JAVASOCKOPT_SO_REUSEPORT 512
+#define JAVASOCKOPT_SO_SNDBUF 4097
+#define JAVASOCKOPT_SO_RCVBUF 4098
+#define JAVASOCKOPT_SO_RCVTIMEOUT 4102
+#define JAVASOCKOPT_IP_TOS 3
+#define JAVASOCKOPT_IP_MULTICAST_LOOP 18
+#define JAVASOCKOPT_IP_MULTICAST_IF2 31
+#define JAVASOCKOPT_SO_OOBINLINE 4099
+#define JAVASOCKOPT_REUSEADDR_AND_REUSEPORT 10001
+#endif /* nethelp_h */
Added: incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/netif.c
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/netif.c?rev=382065&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/netif.c (added)
+++ incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/netif.c Wed Mar 1 07:42:53 2006
@@ -0,0 +1,214 @@
+/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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 "nethelp.h"
+#include "jclprots.h"
+#include "helpers.h"
+#include "jclglob.h"
+#include "portsock.h"
+
+/**
+ * Answer an array of NetworkInterface objects. One for each network interface within the system
+ *
+ * @param env pointer to the JNI library
+ * @param clazz the class of the object invoking the JNI function
+ *
+ * @return an array of NetworkInterface objects of length 0 or more
+ */
+
+jobjectArray JNICALL
+Java_java_net_NetworkInterface_getNetworkInterfacesImpl (JNIEnv * env,
+ jclass clazz)
+{
+ /* variables to store network interfac edata returned by call to port library */
+ struct hyNetworkInterfaceArray_struct networkInterfaceArray;
+ I_32 result = 0;
+
+ /* variables for class and method objects needed to create bridge to java */
+ jclass networkInterfaceClass = NULL;
+ jclass inetAddressClass = NULL;
+ jclass utilClass = NULL;
+ jmethodID methodID = NULL;
+ jmethodID utilMid = NULL;
+
+ /* JNI objects used to return values from native call */
+ jstring name = NULL;
+ jstring displayName = NULL;
+ jobjectArray addresses = NULL;
+ jobjectArray networkInterfaces = NULL;
+ jbyteArray bytearray = NULL;
+
+ /* jobjects used to build the object arrays returned */
+ jobject currentInterface = NULL;
+ jobject element = NULL;
+
+ /* misc variables needed for looping and determining inetAddress info */
+ U_32 length = 0;
+ I_32 family = 0;
+ U_32 i = 0;
+ U_32 j = 0;
+ U_32 nameLength = 0;
+
+ /* required call if we are going to call port library methods */
+ PORT_ACCESS_FROM_ENV (env);
+
+ /* get the classes and methods that we need for later calls */
+ networkInterfaceClass =
+ (*env)->FindClass (env, "java/net/NetworkInterface");
+ if (networkInterfaceClass == NULL)
+ {
+ throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_NORECOVERY);
+ return NULL;
+ }
+
+ inetAddressClass = (*env)->FindClass (env, "java/net/InetAddress");
+ if (inetAddressClass == NULL)
+ {
+ throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_NORECOVERY);
+ return NULL;
+ }
+
+ methodID =
+ (*env)->GetMethodID (env, networkInterfaceClass, "<init>",
+ "(Ljava/lang/String;Ljava/lang/String;[Ljava/net/InetAddress;I)V");
+ if (methodID == NULL)
+ {
+ throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_NORECOVERY);
+ return NULL;
+ }
+
+ utilClass = (*env)->FindClass (env, "com/ibm/oti/util/Util");
+ if (!utilClass)
+ {
+ return NULL;
+ }
+
+ utilMid =
+ ((*env)->
+ GetStaticMethodID (env, utilClass, "toString",
+ "([BII)Ljava/lang/String;"));
+ if (!utilMid)
+ return NULL;
+
+ result =
+ hysock_get_network_interfaces (&networkInterfaceArray,
+ preferIPv4Stack (env));
+
+ if (result < 0)
+ {
+ /* this means an error occured. The value returned is the socket error that should be returned */
+ throwJavaNetSocketException (env, result);
+ return NULL;
+ }
+
+ /* now loop through the interfaces and extract the information to be returned */
+ for (j = 0; j < networkInterfaceArray.length; j++)
+ {
+ /* set the name and display name and reset the addresses object array */
+ addresses = NULL;
+ name = NULL;
+ displayName = NULL;
+
+ if (networkInterfaceArray.elements[j].name != NULL)
+ {
+ nameLength = strlen (networkInterfaceArray.elements[j].name);
+ bytearray = (*env)->NewByteArray (env, nameLength);
+ if (bytearray == NULL)
+ {
+ /* NewByteArray should have thrown an exception */
+ return NULL;
+ }
+ (*env)->SetByteArrayRegion (env, bytearray, (jint) 0, nameLength,
+ networkInterfaceArray.elements[j].name);
+ name =
+ (*env)->CallStaticObjectMethod (env, utilClass, utilMid,
+ bytearray, (jint) 0, nameLength);
+ if ((*env)->ExceptionCheck (env))
+ {
+ return NULL;
+ }
+ }
+
+ if (networkInterfaceArray.elements[j].displayName != NULL)
+ {
+ nameLength = strlen (networkInterfaceArray.elements[j].displayName);
+ bytearray = (*env)->NewByteArray (env, nameLength);
+ if (bytearray == NULL)
+ {
+ /* NewByteArray should have thrown an exception */
+ return NULL;
+ }
+ (*env)->SetByteArrayRegion (env, bytearray, (jint) 0, nameLength,
+ networkInterfaceArray.elements[j].
+ displayName);
+ displayName =
+ (*env)->CallStaticObjectMethod (env, utilClass, utilMid,
+ bytearray, (jint) 0, nameLength);
+ if ((*env)->ExceptionCheck (env))
+ {
+ return NULL;
+ }
+ }
+
+ /* generate the object with the inet addresses for the itnerface */
+ for (i = 0; i < networkInterfaceArray.elements[j].numberAddresses; i++)
+ {
+ element = newJavaNetInetAddressGenericB (env,
+ networkInterfaceArray.
+ elements[j].addresses[i].
+ addr.bytes,
+ networkInterfaceArray.
+ elements[j].addresses[i].
+ length,
+ networkInterfaceArray.
+ elements[j].addresses[i].
+ scope);
+ if (i == 0)
+ {
+ addresses =
+ (*env)->NewObjectArray (env,
+ networkInterfaceArray.elements[j].
+ numberAddresses, inetAddressClass,
+ element);
+ }
+ else
+ {
+ (*env)->SetObjectArrayElement (env, addresses, i, element);
+ }
+ }
+
+ /* now create the NetworkInterface object for this interface and then add it it ot the arrary that will be returned */
+ currentInterface =
+ (*env)->NewObject (env, networkInterfaceClass, methodID, name,
+ displayName, addresses,
+ networkInterfaceArray.elements[j].index);
+
+ if (j == 0)
+ {
+ networkInterfaces =
+ (*env)->NewObjectArray (env, networkInterfaceArray.length,
+ networkInterfaceClass, currentInterface);
+ }
+ else
+ {
+ (*env)->SetObjectArrayElement (env, networkInterfaces, j,
+ currentInterface);
+ }
+ }
+
+ /* free the memory for the interfaces struct and return the new NetworkInterface List */
+ hysock_free_network_interface_struct (&networkInterfaceArray);
+ return networkInterfaces;
+}
Added: incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/ois.c
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/ois.c?rev=382065&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/ois.c (added)
+++ incubator/harmony/enhanced/classlib/trunk/native-src/shared/luni/ois.c Wed Mar 1 07:42:53 2006
@@ -0,0 +1,217 @@
+/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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 "jni.h"
+
+void JNICALL
+ Java_java_io_ObjectInputStream_setField__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_String_2Z
+ (JNIEnv * env, jclass clazz, jobject targetObject, jobject declaringClass,
+ jobject fieldName, jboolean newValue)
+{
+ const char *fieldNameInC;
+ jfieldID fid;
+ if (targetObject == NULL)
+ return;
+ fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL);
+ fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "Z");
+ (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC);
+
+ /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */
+ if (fid != 0)
+ {
+ (*env)->SetBooleanField (env, targetObject, fid, newValue);
+ }
+}
+
+void JNICALL
+ Java_java_io_ObjectInputStream_setField__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_String_2C
+ (JNIEnv * env, jclass clazz, jobject targetObject, jobject declaringClass,
+ jobject fieldName, jchar newValue)
+{
+ const char *fieldNameInC;
+ jfieldID fid;
+ if (targetObject == NULL)
+ return;
+ fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL);
+ fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "C");
+ (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC);
+
+ /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */
+ if (fid != 0)
+ {
+ (*env)->SetCharField (env, targetObject, fid, newValue);
+ }
+}
+void JNICALL
+ Java_java_io_ObjectInputStream_setField__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_String_2I
+ (JNIEnv * env, jclass clazz, jobject targetObject, jobject declaringClass,
+ jobject fieldName, jint newValue)
+{
+ const char *fieldNameInC;
+ jfieldID fid;
+ if (targetObject == NULL)
+ return;
+ fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL);
+ fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "I");
+ (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC);
+
+ /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */
+ if (fid != 0)
+ {
+ (*env)->SetIntField (env, targetObject, fid, newValue);
+ }
+}
+
+void JNICALL
+ Java_java_io_ObjectInputStream_setField__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_String_2F
+ (JNIEnv * env, jclass clazz, jobject targetObject, jobject declaringClass,
+ jobject fieldName, jfloat newValue)
+{
+ const char *fieldNameInC;
+ jfieldID fid;
+ if (targetObject == NULL)
+ return;
+ fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL);
+ fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "F");
+ (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC);
+
+ /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */
+ if (fid != 0)
+ {
+ (*env)->SetFloatField (env, targetObject, fid, newValue);
+ }
+}
+void JNICALL
+ Java_java_io_ObjectInputStream_setField__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_String_2D
+ (JNIEnv * env, jclass clazz, jobject targetObject, jobject declaringClass,
+ jobject fieldName, jdouble newValue)
+{
+ const char *fieldNameInC;
+ jfieldID fid;
+ if (targetObject == NULL)
+ return;
+ fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL);
+ fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "D");
+ (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC);
+
+ /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */
+ if (fid != 0)
+ {
+ (*env)->SetDoubleField (env, targetObject, fid, newValue);
+ }
+
+}
+void JNICALL
+ Java_java_io_ObjectInputStream_setField__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_String_2S
+ (JNIEnv * env, jclass clazz, jobject targetObject, jobject declaringClass,
+ jobject fieldName, jshort newValue)
+{
+ const char *fieldNameInC;
+ jfieldID fid;
+ if (targetObject == NULL)
+ return;
+ fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL);
+ fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "S");
+ (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC);
+
+ /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */
+ if (fid != 0)
+ {
+ (*env)->SetShortField (env, targetObject, fid, newValue);
+ }
+
+}
+void JNICALL
+ Java_java_io_ObjectInputStream_setField__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_String_2J
+ (JNIEnv * env, jclass clazz, jobject targetObject, jobject declaringClass,
+ jobject fieldName, jlong newValue)
+{
+ const char *fieldNameInC;
+ jfieldID fid;
+ if (targetObject == NULL)
+ return;
+ fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL);
+ fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "J");
+ (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC);
+
+ /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */
+ if (fid != 0)
+ {
+ (*env)->SetLongField (env, targetObject, fid, newValue);
+ }
+}
+jobject JNICALL
+Java_java_io_ObjectInputStream_newInstance (JNIEnv * env, jclass clazz,
+ jobject instantiationClass,
+ jobject constructorClass)
+{
+ jmethodID mid =
+ (*env)->GetMethodID (env, constructorClass, "<init>", "()V");
+
+ if (mid == 0)
+ {
+ /* Cant newInstance,No empty constructor... */
+ return (jobject) 0;
+ }
+ else
+ {
+ return (jobject) (*env)->NewObject (env, instantiationClass, mid); /* Instantiate an object of a given class */
+ }
+
+}
+void JNICALL
+ Java_java_io_ObjectInputStream_setField__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_String_2B
+ (JNIEnv * env, jclass clazz, jobject targetObject, jobject declaringClass,
+ jobject fieldName, jbyte newValue)
+{
+ const char *fieldNameInC;
+ jfieldID fid;
+ if (targetObject == NULL)
+ return;
+ fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL);
+ fid = (*env)->GetFieldID (env, declaringClass, fieldNameInC, "B");
+ (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC);
+
+ /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */
+ if (fid != 0)
+ {
+ (*env)->SetByteField (env, targetObject, fid, newValue);
+ }
+}
+void JNICALL
+Java_java_io_ObjectInputStream_objSetField (JNIEnv * env, jclass clazz,
+ jobject targetObject,
+ jobject declaringClass,
+ jobject fieldName,
+ jobject fieldTypeName,
+ jobject newValue)
+{
+ const char *fieldNameInC, *fieldTypeNameInC;
+ jfieldID fid;
+ if (targetObject == NULL)
+ return;
+ fieldNameInC = (*env)->GetStringUTFChars (env, fieldName, NULL);
+ fieldTypeNameInC = (*env)->GetStringUTFChars (env, fieldTypeName, NULL);
+ fid =
+ (*env)->GetFieldID (env, declaringClass, fieldNameInC, fieldTypeNameInC);
+ (*env)->ReleaseStringUTFChars (env, fieldName, fieldNameInC);
+ (*env)->ReleaseStringUTFChars (env, fieldTypeName, fieldTypeNameInC);
+
+ /* Two options now. Maybe getFieldID caused an exception, or maybe it returned the real value */
+ if (fid != 0)
+ {
+ (*env)->SetObjectField (env, targetObject, fid, newValue);
+ }
+}