diff options
Diffstat (limited to 'libjava/classpath/native/jni/java-io')
-rw-r--r-- | libjava/classpath/native/jni/java-io/.cvsignore | 8 | ||||
-rw-r--r-- | libjava/classpath/native/jni/java-io/Makefile.am | 3 | ||||
-rw-r--r-- | libjava/classpath/native/jni/java-io/Makefile.in | 18 | ||||
-rw-r--r-- | libjava/classpath/native/jni/java-io/java_io_VMFile.c | 213 |
4 files changed, 130 insertions, 112 deletions
diff --git a/libjava/classpath/native/jni/java-io/.cvsignore b/libjava/classpath/native/jni/java-io/.cvsignore new file mode 100644 index 00000000000..e9f2658a694 --- /dev/null +++ b/libjava/classpath/native/jni/java-io/.cvsignore @@ -0,0 +1,8 @@ +*.o +*.a +*.lo +*.la +.libs +.deps +Makefile +Makefile.in diff --git a/libjava/classpath/native/jni/java-io/Makefile.am b/libjava/classpath/native/jni/java-io/Makefile.am index ac7cf287247..637c74c61f3 100644 --- a/libjava/classpath/native/jni/java-io/Makefile.am +++ b/libjava/classpath/native/jni/java-io/Makefile.am @@ -4,7 +4,8 @@ libjavaio_la_SOURCES = java_io_VMFile.c \ java_io_VMObjectInputStream.c \ java_io_VMObjectStreamClass.c -libjavaio_la_LIBADD = $(top_builddir)/native/jni/classpath/jcl.lo +libjavaio_la_LIBADD = $(top_builddir)/native/jni/classpath/jcl.lo \ + $(top_builddir)/native/jni/native-lib/libclasspathnative.la AM_LDFLAGS = @CLASSPATH_MODULE@ AM_CPPFLAGS = @CLASSPATH_INCLUDES@ diff --git a/libjava/classpath/native/jni/java-io/Makefile.in b/libjava/classpath/native/jni/java-io/Makefile.in index bf8d17a71a7..88f39846aa9 100644 --- a/libjava/classpath/native/jni/java-io/Makefile.in +++ b/libjava/classpath/native/jni/java-io/Makefile.in @@ -42,12 +42,14 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../../config/depstand.m4 \ $(top_srcdir)/../../config/lead-dot.m4 \ + $(top_srcdir)/../../config/no-executables.m4 \ $(top_srcdir)/../../libtool.m4 $(top_srcdir)/m4/acattribute.m4 \ $(top_srcdir)/m4/accross.m4 $(top_srcdir)/m4/acinclude.m4 \ $(top_srcdir)/m4/ax_create_stdint_h.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ - $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ - $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.ac + $(top_srcdir)/m4/gcc_attribute.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/pkg.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -63,7 +65,8 @@ am__installdirs = "$(DESTDIR)$(nativeexeclibdir)" nativeexeclibLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(nativeexeclib_LTLIBRARIES) libjavaio_la_DEPENDENCIES = \ - $(top_builddir)/native/jni/classpath/jcl.lo + $(top_builddir)/native/jni/classpath/jcl.lo \ + $(top_builddir)/native/jni/native-lib/libclasspathnative.la am_libjavaio_la_OBJECTS = java_io_VMFile.lo \ java_io_VMObjectInputStream.lo java_io_VMObjectStreamClass.lo libjavaio_la_OBJECTS = $(am_libjavaio_la_OBJECTS) @@ -185,6 +188,8 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@ +JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@ +JAVA_MAINTAINER_MODE_TRUE = @JAVA_MAINTAINER_MODE_TRUE@ JAY = @JAY@ JAY_SKELETON = @JAY_SKELETON@ JIKES = @JIKES@ @@ -306,14 +311,15 @@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -toolexeclibdir = @toolexeclibdir@ vm_classes = @vm_classes@ nativeexeclib_LTLIBRARIES = libjavaio.la libjavaio_la_SOURCES = java_io_VMFile.c \ java_io_VMObjectInputStream.c \ java_io_VMObjectStreamClass.c -libjavaio_la_LIBADD = $(top_builddir)/native/jni/classpath/jcl.lo +libjavaio_la_LIBADD = $(top_builddir)/native/jni/classpath/jcl.lo \ + $(top_builddir)/native/jni/native-lib/libclasspathnative.la + AM_LDFLAGS = @CLASSPATH_MODULE@ AM_CPPFLAGS = @CLASSPATH_INCLUDES@ AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@ diff --git a/libjava/classpath/native/jni/java-io/java_io_VMFile.c b/libjava/classpath/native/jni/java-io/java_io_VMFile.c index 7a3fdaf43a8..de1320b0cab 100644 --- a/libjava/classpath/native/jni/java-io/java_io_VMFile.c +++ b/libjava/classpath/native/jni/java-io/java_io_VMFile.c @@ -38,17 +38,20 @@ exception statement from your version. */ /* do not move; needed here because of some macro definitions */ #include <config.h> +#include <assert.h> #include <stdio.h> #include <stdlib.h> +#if defined (HAVE_LSTAT) && defined (HAVE_READLINK) +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#endif + #include <jni.h> #include <jcl.h> - -#include "target_native.h" -#ifndef WITHOUT_FILESYSTEM -#include "target_native_file.h" -#endif -#include "target_native_math_int.h" +#include "cpio.h" +#include "cpnative.h" #include "java_io_VMFile.h" @@ -75,26 +78,25 @@ Java_java_io_VMFile_create (JNIEnv * env, filename = JCL_jstring_to_cstring (env, name); if (filename == NULL) { - return (0); + return 0; } - TARGET_NATIVE_FILE_OPEN_CREATE (filename, fd, result); - if (result != TARGET_NATIVE_OK) + result = cpio_openFile (filename, &fd, CPFILE_FLAG_CREATE|CPFILE_FLAG_WRITE, CPFILE_PERMISSION_NORMAL); + if (result != CPNATIVE_OK) { - /* XXX ??? NYI */ - if (errno != EEXIST) + if (result != EEXIST) JCL_ThrowException (env, "java/io/IOException", - TARGET_NATIVE_LAST_ERROR_STRING ()); + cpnative_getErrorString (result)); JCL_free_cstring (env, name, filename); - return (0); + return 0; } - TARGET_NATIVE_FILE_CLOSE (fd, result); + cpio_closeFile (fd); JCL_free_cstring (env, name, filename); - return (1); + return 1; #else /* not WITHOUT_FILESYSTEM */ - return (0); + return 0; #endif /* not WITHOUT_FILESYSTEM */ } @@ -123,22 +125,20 @@ Java_java_io_VMFile_canRead (JNIEnv * env, filename = (*env)->GetStringUTFChars (env, name, 0); if (filename == NULL) { - return (0); + return 0; } /* The lazy man's way out. We actually do open the file for reading briefly to verify it can be done */ - TARGET_NATIVE_FILE_OPEN_READ (filename, fd, result); + result = cpio_openFile (filename, &fd, CPFILE_FLAG_READ, 0); (*env)->ReleaseStringUTFChars (env, name, filename); - if (result != TARGET_NATIVE_OK) - { - return (0); - } - TARGET_NATIVE_FILE_CLOSE (fd, result); + if (result != CPNATIVE_OK) + return 0; + cpio_closeFile (fd); - return (1); + return 1; #else /* not WITHOUT_FILESYSTEM */ - return (0); + return 0; #endif /* not WITHOUT_FILESYSTEM */ } @@ -167,22 +167,22 @@ Java_java_io_VMFile_canWrite (JNIEnv * env, filename = (*env)->GetStringUTFChars (env, name, 0); if (filename == NULL) { - return (0); + return 0; } /* The lazy man's way out. We actually do open the file for writing briefly to verify it can be done */ - TARGET_NATIVE_FILE_OPEN_READWRITE (filename, fd, result); + result = cpio_openFile (filename, &fd, CPFILE_FLAG_READWRITE, 0); (*env)->ReleaseStringUTFChars (env, name, filename); - if (result != TARGET_NATIVE_OK) + if (result != CPNATIVE_OK) { - return (0); + return 0; } - TARGET_NATIVE_FILE_CLOSE (fd, result); + cpio_closeFile (fd); - return (1); + return 1; #else /* not WITHOUT_FILESYSTEM */ - return (0); + return 0; #endif /* not WITHOUT_FILESYSTEM */ } @@ -210,15 +210,15 @@ Java_java_io_VMFile_setReadOnly (JNIEnv * env, filename = (*env)->GetStringUTFChars (env, name, 0); if (filename == NULL) { - return (0); + return 0; } - TARGET_NATIVE_FILE_SET_MODE_READONLY (filename, result); + result = cpio_setFileReadonly (filename); (*env)->ReleaseStringUTFChars (env, name, filename); - return ((result == TARGET_NATIVE_OK) ? 1 : 0); + return result == CPNATIVE_OK ? 1 : 0; #else /* not WITHOUT_FILESYSTEM */ - return (0); + return 0; #endif /* not WITHOUT_FILESYSTEM */ } @@ -246,15 +246,15 @@ Java_java_io_VMFile_exists (JNIEnv * env, filename = (*env)->GetStringUTFChars (env, name, 0); if (filename == NULL) { - return (0); + return 0; } - TARGET_NATIVE_FILE_EXISTS (filename, result); + result = cpio_isFileExists (filename); (*env)->ReleaseStringUTFChars (env, name, filename); - return ((result == TARGET_NATIVE_OK) ? 1 : 0); + return result == CPNATIVE_OK ? 1 : 0; #else /* not WITHOUT_FILESYSTEM */ - return (0); + return 0; #endif /* not WITHOUT_FILESYSTEM */ } @@ -277,21 +277,22 @@ Java_java_io_VMFile_isFile (JNIEnv * env, #ifndef WITHOUT_FILESYSTEM const char *filename; int result; + jint entryType; /* Don't use the JCL convert function because it throws an exception on failure */ filename = (*env)->GetStringUTFChars (env, name, 0); if (filename == NULL) { - return (0); + return 0; } - TARGET_NATIVE_FILE_IS_FILE (filename, result); + result = cpio_checkType (filename, &entryType); (*env)->ReleaseStringUTFChars (env, name, filename); - return ((result == TARGET_NATIVE_OK) ? 1 : 0); + return result == CPNATIVE_OK && entryType == CPFILE_FILE ? 1 : 0; #else /* not WITHOUT_FILESYSTEM */ - return (0); + return 0; #endif /* not WITHOUT_FILESYSTEM */ } @@ -313,21 +314,22 @@ Java_java_io_VMFile_isDirectory (JNIEnv * env, #ifndef WITHOUT_FILESYSTEM const char *filename; int result; + jint entryType; /* Don't use the JCL convert function because it throws an exception on failure */ filename = (*env)->GetStringUTFChars (env, name, 0); if (filename == NULL) { - return (0); + return 0; } - - TARGET_NATIVE_FILE_IS_DIRECTORY (filename, result); + + result = cpio_checkType (filename, &entryType); (*env)->ReleaseStringUTFChars (env, name, filename); - return ((result == TARGET_NATIVE_OK) ? 1 : 0); + return result == CPNATIVE_OK && entryType == CPFILE_DIRECTORY ? 1 : 0; #else /* not WITHOUT_FILESYSTEM */ - return (0); + return 0; #endif /* not WITHOUT_FILESYSTEM */ } @@ -356,29 +358,26 @@ Java_java_io_VMFile_length (JNIEnv * env, on failure */ filename = (*env)->GetStringUTFChars (env, name, 0); if (filename == NULL) - { - return (TARGET_NATIVE_MATH_INT_INT64_CONST_0); - } + return 0; /* open file for reading, get size and close file */ - TARGET_NATIVE_FILE_OPEN_READ (filename, tmpfd, result); - if (result != TARGET_NATIVE_OK) - { - return (TARGET_NATIVE_MATH_INT_INT64_CONST_0); - } - TARGET_NATIVE_FILE_SIZE (tmpfd, length, result); - if (result != TARGET_NATIVE_OK) + result = cpio_openFile (filename, &tmpfd, CPFILE_FLAG_READ, 0); + if (result != CPNATIVE_OK) + return 0; + + result = cpio_getFileSize (tmpfd, &length); + if (result != CPNATIVE_OK) { - TARGET_NATIVE_FILE_CLOSE (tmpfd, result); - return (TARGET_NATIVE_MATH_INT_INT64_CONST_0); + cpio_closeFile (tmpfd); + return 0; } - TARGET_NATIVE_FILE_CLOSE (tmpfd, result); + + result = cpio_closeFile (tmpfd); (*env)->ReleaseStringUTFChars (env, name, filename); - return ((result == - TARGET_NATIVE_OK) ? length : TARGET_NATIVE_MATH_INT_INT64_CONST_0); + return result == CPNATIVE_OK ? length : 0; #else /* not WITHOUT_FILESYSTEM */ - return (TARGET_NATIVE_MATH_INT_INT64_CONST_0); + return 0; #endif /* not WITHOUT_FILESYSTEM */ } @@ -407,16 +406,15 @@ Java_java_io_VMFile_lastModified (JNIEnv * env, filename = (*env)->GetStringUTFChars (env, name, 0); if (filename == NULL) { - return (TARGET_NATIVE_MATH_INT_INT64_CONST_0); + return 0; } - TARGET_NATIVE_FILE_GET_LAST_MODIFIED (filename, mtime, result); + result = cpio_getModificationTime (filename, &mtime); (*env)->ReleaseStringUTFChars (env, name, filename); - return ((result == - TARGET_NATIVE_OK) ? mtime : TARGET_NATIVE_MATH_INT_INT64_CONST_0); + return result == CPNATIVE_OK ? mtime : 0; #else /* not WITHOUT_FILESYSTEM */ - return (TARGET_NATIVE_MATH_INT_INT64_CONST_0); + return 0; #endif /* not WITHOUT_FILESYSTEM */ } @@ -444,15 +442,15 @@ Java_java_io_VMFile_setLastModified (JNIEnv * env, filename = (*env)->GetStringUTFChars (env, name, 0); if (filename == NULL) { - return (0); + return 0; } - TARGET_NATIVE_FILE_SET_LAST_MODIFIED (filename, newtime, result); + result = cpio_setModificationTime (filename, newtime); (*env)->ReleaseStringUTFChars (env, name, filename); - return ((result == TARGET_NATIVE_OK) ? 1 : 0); + return result == CPNATIVE_OK ? 1 : 0; #else /* not WITHOUT_FILESYSTEM */ - return (0); + return 0; #endif /* not WITHOUT_FILESYSTEM */ } @@ -481,15 +479,15 @@ Java_java_io_VMFile_delete (JNIEnv * env, filename = (*env)->GetStringUTFChars (env, name, 0); if (filename == NULL) { - return (0); + return 0; } - TARGET_NATIVE_FILE_DELETE (filename, result); + result = cpio_removeFile (filename); (*env)->ReleaseStringUTFChars (env, name, filename); - return ((result == TARGET_NATIVE_OK) ? 1 : 0); + return result == CPNATIVE_OK ? 1 : 0; #else /* not WITHOUT_FILESYSTEM */ - return (0); + return 0; #endif /* not WITHOUT_FILESYSTEM */ } @@ -517,15 +515,15 @@ Java_java_io_VMFile_mkdir (JNIEnv * env, pathname = (*env)->GetStringUTFChars (env, name, 0); if (pathname == NULL) { - return (0); + return 0; } - TARGET_NATIVE_FILE_MAKE_DIR (pathname, result); + result = cpio_mkdir (pathname); (*env)->ReleaseStringUTFChars (env, name, pathname); - return ((result == TARGET_NATIVE_OK) ? 1 : 0); + return (result == CPNATIVE_OK) ? 1 : 0; #else /* not WITHOUT_FILESYSTEM */ - return (0); + return 0; #endif /* not WITHOUT_FILESYSTEM */ } @@ -553,23 +551,23 @@ Java_java_io_VMFile_renameTo (JNIEnv * env, old_filename = (*env)->GetStringUTFChars (env, t, 0); if (old_filename == NULL) { - return (0); + return 0; } new_filename = (*env)->GetStringUTFChars (env, d, 0); if (new_filename == NULL) { (*env)->ReleaseStringUTFChars (env, t, old_filename); - return (0); + return 0; } - TARGET_NATIVE_FILE_RENAME (old_filename, new_filename, result); + result = cpio_rename (old_filename, new_filename); (*env)->ReleaseStringUTFChars (env, d, new_filename); (*env)->ReleaseStringUTFChars (env, t, old_filename); - return ((result == TARGET_NATIVE_OK) ? 1 : 0); + return (result == CPNATIVE_OK) ? 1 : 0; #else /* not WITHOUT_FILESYSTEM */ - return (0); + return 0; #endif /* not WITHOUT_FILESYSTEM */ } @@ -595,7 +593,7 @@ Java_java_io_VMFile_list (JNIEnv * env, jobject obj int result; char **filelist; void *handle; - const char *filename; + char *filename = (char *) JCL_malloc (env, FILENAME_MAX); unsigned long int filelist_count, max_filelist_count; char **tmp_filelist; jclass str_clazz; @@ -608,32 +606,32 @@ Java_java_io_VMFile_list (JNIEnv * env, jobject obj dirname = (*env)->GetStringUTFChars (env, name, 0); if (dirname == NULL) { - return (0); + return 0; } /* open directory for reading */ - TARGET_NATIVE_FILE_OPEN_DIR (dirname, handle, result); + result = cpio_openDir (dirname, &handle); (*env)->ReleaseStringUTFChars (env, name, dirname); - if (result != TARGET_NATIVE_OK) + if (result != CPNATIVE_OK) { - return (0); + return 0; } /* allocate filelist */ filelist = (char **) JCL_malloc (env, sizeof (char *) * REALLOC_SIZE); if (filelist == NULL) { - TARGET_NATIVE_FILE_CLOSE_DIR (handle, result); - return (0); + result = cpio_closeDir (handle); + return 0; } filelist_count = 0; max_filelist_count = REALLOC_SIZE; /* read the files from the directory */ - TARGET_NATIVE_FILE_READ_DIR (handle, filename, result); - while (result == TARGET_NATIVE_OK) + result = cpio_readDir (handle, filename); + while (result == CPNATIVE_OK) { if ((strcmp (filename, ".") != 0) && (strcmp (filename, "..") != 0)) { @@ -652,8 +650,8 @@ Java_java_io_VMFile_list (JNIEnv * env, jobject obj JCL_free (env, filelist[i]); } JCL_free (env, filelist); - TARGET_NATIVE_FILE_CLOSE_DIR (handle, result); - return (0); + result = cpio_closeDir (handle); + return 0; } filelist = tmp_filelist; max_filelist_count += REALLOC_SIZE; @@ -668,11 +666,13 @@ Java_java_io_VMFile_list (JNIEnv * env, jobject obj } /* read next directory entry */ - TARGET_NATIVE_FILE_READ_DIR (handle, filename, result); + result = cpio_readDir (handle, filename); } + JCL_free (env, filename); + /* close directory */ - TARGET_NATIVE_FILE_CLOSE_DIR (handle, result); + result = cpio_closeDir (handle); /* put the list of files into a Java String array and return it */ str_clazz = (*env)->FindClass (env, "java/lang/String"); @@ -683,7 +683,7 @@ Java_java_io_VMFile_list (JNIEnv * env, jobject obj JCL_free (env, filelist[i]); } JCL_free (env, filelist); - return (0); + return 0; } filearray = (*env)->NewObjectArray (env, filelist_count, str_clazz, 0); if (filearray == NULL) @@ -693,8 +693,11 @@ Java_java_io_VMFile_list (JNIEnv * env, jobject obj JCL_free (env, filelist[i]); } JCL_free (env, filelist); - return (0); + return 0; } + + (*env)->DeleteLocalRef (env, str_clazz); + for (i = 0; i < filelist_count; i++) { /* create new string */ @@ -708,7 +711,7 @@ Java_java_io_VMFile_list (JNIEnv * env, jobject obj JCL_free (env, filelist[i]); } JCL_free (env, filelist); - return (0); + return 0; } /* save into array */ @@ -725,9 +728,9 @@ Java_java_io_VMFile_list (JNIEnv * env, jobject obj } JCL_free (env, filelist); - return (filearray); + return filearray; #else /* not WITHOUT_FILESYSTEM */ - return (0); + return 0; #endif /* not WITHOUT_FILESYSTEM */ } |