[kaffe] CVS kaffe (guilhem): Classpath's IO/net subsystem merging + fixes.

Kaffe CVS Kaffe Mailing List <kaffe@kaffe.org>
Sat Aug 30 07:27:02 2003


PatchSet 3996 
Date: 2003/08/30 14:18:17
Author: guilhem
Branch: HEAD
Tag: (none) 
Log:
Classpath's IO/net subsystem merging + fixes.

See ChangeLog.

Members: 
	ChangeLog:1.1592->1.1593 
	configure:1.253->1.254 
	configure.in:1.220->1.221 
	config/config.h.in:1.77->1.78 
	include/Makefile.am:1.46->1.47 
	include/Makefile.in:1.118->1.119 
	include/jsyscall.h:1.12->1.13 
	kaffe/kaffevm/systems/unix-jthreads/syscalls.c:1.11->1.12 
	libraries/clib/io/File.c:1.19->1.20 
	libraries/clib/io/FileDescriptor.c:1.3->1.4 
	libraries/clib/io/FileInputStream.c:1.11->1.12(DEAD) 
	libraries/clib/io/FileOutputStream.c:1.10->1.11(DEAD) 
	libraries/clib/io/Makefile.am:1.8->1.9 
	libraries/clib/io/Makefile.in:1.72->1.73 
	libraries/clib/io/RandomAccessFile.c:1.10->1.11(DEAD) 
	libraries/clib/native/ClassLoader.c:1.35->1.36 
	libraries/clib/native/UNIXProcess.c:1.26->1.27 
	libraries/clib/net/InetAddressImpl.c:1.16->1.17 
	libraries/clib/net/Makefile.am:1.12->1.13 
	libraries/clib/net/Makefile.in:1.84->1.85 
	libraries/clib/net/NetworkInterface.c:1.1->1.2 
	libraries/clib/net/NetworkInterfaceImpl.c:1.2->1.3(DEAD) 
	libraries/clib/net/PlainDatagramSocketImpl.c:1.26->1.27 
	libraries/clib/net/PlainSocketImpl.c:1.30->1.31 
	libraries/javalib/Klasses.jar.bootstrap:1.33->1.34 
	libraries/javalib/Makefile.am:1.134->1.135 
	libraries/javalib/Makefile.in:1.181->1.182 
	libraries/javalib/bootstrap.classlist:1.26->1.27 
	libraries/javalib/essential.files:1.24->1.25 
	libraries/javalib/gnu/java/io/PlatformHelper.java:INITIAL->1.1 
	libraries/javalib/java/io/ByteArrayInputStream.java:1.4->1.5 
	libraries/javalib/java/io/ByteArrayOutputStream.java:1.10->1.11 
	libraries/javalib/java/io/Externalizable.java:1.3->1.4 
	libraries/javalib/java/io/File.java:1.34->1.35 
	libraries/javalib/java/io/FileDescriptor.java:1.4->1.5 
	libraries/javalib/java/io/FileInputStream.java:1.15->1.16 
	libraries/javalib/java/io/FileOutputStream.java:1.10->1.11 
	libraries/javalib/java/io/FileReader.java:1.3->1.4 
	libraries/javalib/java/io/FileWriter.java:1.4->1.5 
	libraries/javalib/java/io/InputStream.java:1.9->1.10 
	libraries/javalib/java/io/ObjectInputStream.java:1.25->1.26 
	libraries/javalib/java/io/OutputStream.java:1.1->1.2 
	libraries/javalib/java/io/PipedInputStream.java:1.12->1.13 
	libraries/javalib/java/io/PipedOutputStream.java:1.5->1.6 
	libraries/javalib/java/io/PipedReader.java:1.7->1.8 
	libraries/javalib/java/io/PipedWriter.java:1.3->1.4 
	libraries/javalib/java/io/RandomAccessFile.java:1.22->1.23 
	libraries/javalib/java/io/StringBufferInputStream.java:1.4->1.5 
	libraries/javalib/java/io/StringReader.java:1.7->1.8 
	libraries/javalib/java/io/StringWriter.java:1.6->1.7 
	libraries/javalib/java/net/DNSJavaInetAddressImpl.java:1.1->1.2(DEAD) 
	libraries/javalib/java/net/DatagramPacket.java:1.8->1.9 
	libraries/javalib/java/net/DatagramSocket.java:1.14->1.15 
	libraries/javalib/java/net/DatagramSocketImpl.java:1.4->1.5 
	libraries/javalib/java/net/DatagramSocketImplFactory.java:1.2->1.3 
	libraries/javalib/java/net/InetAddress.java:1.14->1.15 
	libraries/javalib/java/net/InetAddressImpl.java:1.6->1.7(DEAD) 
	libraries/javalib/java/net/MulticastSocket.java:1.9->1.10 
	libraries/javalib/java/net/NativeInetAddressImpl.java:1.1->1.2(DEAD) 
	libraries/javalib/java/net/NetworkInterface.java:1.2->1.3 
	libraries/javalib/java/net/NetworkInterfaceImpl.java:1.1->1.2(DEAD) 
	libraries/javalib/java/net/PlainDatagramSocketImpl.java:1.9->1.10 
	libraries/javalib/java/net/PlainSocketImpl.java:1.16->1.17 
	libraries/javalib/java/net/ServerSocket.java:1.15->1.16 
	libraries/javalib/java/net/Socket.java:1.25->1.26 
	libraries/javalib/java/net/SocketImpl.java:1.12->1.13 
	libraries/javalib/java/net/SocketImplFactory.java:1.3->1.4 
	libraries/javalib/java/net/SocketInputStream.java:1.7->1.8 
	libraries/javalib/java/net/SocketOptions.java:1.11->1.12 
	libraries/javalib/java/net/SocketOutputStream.java:1.3->1.4 
	libraries/javalib/java/net/SocketPermission.java:1.1->1.2 
	libraries/javalib/kaffe/net/DefaultDatagramSocketImplFactory.java:1.1->1.2(DEAD) 
	libraries/javalib/kaffe/net/DefaultSocketImplFactory.java:1.1->1.2(DEAD) 
	libraries/javalib/profiles/allatonce/all.files:1.19->1.20 
	libraries/javalib/profiles/default/core.files:1.14->1.15 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.1592 kaffe/ChangeLog:1.1593
--- kaffe/ChangeLog:1.1592	Fri Aug 29 22:37:24 2003
+++ kaffe/ChangeLog	Sat Aug 30 14:18:17 2003
@@ -1,3 +1,125 @@
+2003-08-30  Guilhem Lavaux <guilhem@kaffe.org>
+
+	IO/net subsystem merging from Classpath. KJC's compile fix for next
+	check in.
+
+	* configure.in: Added detection of fsync and ftruncate.
+	
+	* include/Makefile.am: removed older kaffe's include files about
+	net subsystem. NOINSTALL_DERIVED_HDRS keep java_net_PlainSocketImpl.h,
+	java_net_PlainDatagramSocketImpl.h, java_net_InetAddress.h,
+	
+	* include/jsyscall.h:
+	(KFSYNC, _fsync) Added a new protected syscall to synchronize files.
+	
+	* kaffe/kaffevm/systems/unix-jthreads/syscalls.c:
+	(jthreadedFSync) added.
+
+	* libraries/clib/io/FileInputStream.c,
+	libraries/clib/io/FileOutputStream.c: removed.
+
+	* libraries/clib/io/File.c, libraries/clib/io/FileDescriptor.c,
+	libraries/clib/io/RandomAccessFile.c:
+	rewritten to match Classpath's native interface.
+
+	* libraries/clib/io/Makefile.am:
+	(libio_la_SOURCES) Removed FileInputStream.c, FileOutputStream.c,
+	RandomAccessFile.c
+
+	* libraries/clib/native/ClassLoader.c:
+	(java_lang_ClassLoader_defineClass0) check whether length==0 and
+	throws InvalidClassError (truncated class) in that case.
+
+	* libraries/clib/native/UNIXProcess.c:
+	(kaffe_lang_UNIXProcess_forkAndExec) Changed "fd" to "nativeFd" for
+	catched IO filedescriptors.
+	
+	* libraries/clib/net/Makefile.am:
+	(libnet_la_SOURCES) removed NetworkInterfaceImpl.c
+
+	* libraries/clib/net/InetAddressImpl.c: rewritten to match classpath's
+	native interface.
+
+	* libraries/clib/net/NetworkInterfaceImpl.c: removed.
+
+	* libraries/clib/net/NetworkInterface.c: rewritten.
+
+	* libraries/clib/net/PlainDatagramSocketImpl.c,
+	libraries/clib/net/PlainSocketImpl.c: adapted to classpath
+	structure. Kaffe's implementation is kept but external references have
+	changed.
+
+	* config/config.h.in, configure, include/Makefile.in,
+	libraries/clib/io/Makefile.in, libraries/clib/net/Makefile.in,
+	libraries/javalib/Klasses.jar.bootstrap,
+	libraries/javalib/Makefile.am, libraries/javalib/Makefile.in:
+	regenerated.
+
+	* libraries/javalib/bootstrap.classlist: Removed
+	java/net/NativeInetAddressImpl, java/net/InetAddressImpl.
+	Added gnu/java/io/PlatformHelper.
+	
+	* libraries/javalib/essential.files: Removed java/net/InetAddressImpl,
+	java/net/NativeInetAddressImpl.
+
+	* libraries/javalib/java/io/ByteArrayInputStream.java,
+	libraries/javalib/java/io/ByteArrayOutputStream.java,
+	libraries/javalib/java/io/Externalizable.java,
+	libraries/javalib/java/io/File.java,
+	libraries/javalib/java/io/FileDescriptor.java,
+	libraries/javalib/java/io/FileInputStream.java,
+	libraries/javalib/java/io/FileOutputStream.java,
+	libraries/javalib/java/io/FileReader.java,
+	libraries/javalib/java/io/FileWriter.java,
+	libraries/javalib/java/io/InputStream.java,
+	libraries/javalib/java/io/ObjectInputStream.java,
+	libraries/javalib/java/io/OutputStream.java,
+	libraries/javalib/java/io/PipedInputStream.java,
+	libraries/javalib/java/io/PipedOutputStream.java,
+	libraries/javalib/java/io/PipedReader.java,
+	libraries/javalib/java/io/PipedWriter.java,
+	libraries/javalib/java/io/RandomAccessFile.java,
+	libraries/javalib/java/io/StringBufferInputStream.java,
+	libraries/javalib/java/io/StringReader.java,
+	libraries/javalib/java/io/StringWriter.java,
+	libraries/javalib/java/net/DatagramPacket.java
+	libraries/javalib/java/net/DatagramSocketImpl.java
+	libraries/javalib/java/net/DatagramSocketImplFactory.java
+	libraries/javalib/java/net/InetAddress.java
+	libraries/javalib/java/net/MulticastSocket.java
+	libraries/javalib/java/net/DatagramSocket.java
+	libraries/javalib/java/net/NetworkInterface.java,
+	libraries/javalib/java/net/ServerSocket.java,
+	libraries/javalib/java/net/Socket.java,
+	libraries/javalib/java/net/SocketImpl.java,
+	libraries/javalib/java/net/SocketImplFactory.java,
+	libraries/javalib/java/net/SocketInputStream.java,
+	libraries/javalib/java/net/SocketOptions.java,
+	libraries/javalib/java/net/SocketOutputStream.java,
+	libraries/javalib/java/net/SocketPermission.java:
+	Imported from GNU Classpath + fixes to pass regression tests.
+	
+	* libraries/javalib/java/net/PlainSocketImpl.java:
+	(sendUrgentData) Added dummy method.
+	(connect) Added timeout conversion for kaffe.
+
+	* libraries/javalib/java/net/PlainDatagramSocketImpl.java:
+	(sendUrgentData) Added dummy method.
+	(setTimeToLive) changed the signature to match Java spec.
+	(PlainDatagramSocketImpl) Construct fd.
+	
+	
+	* libraries/javalib/java/net/DNSJavaInetAddressImpl.java,
+	libraries/javalib/java/net/InetAddressImpl.java,
+	libraries/javalib/java/net/NativeInetAddressImpl.java
+	libraries/javalib/java/net/NetworkInterfaceImpl.java: removed.
+
+	* libraries/javalib/profiles/default/core.files: Removed
+	java/net/NetworkInterfaceImpl, kaffe/net/DefaultSocketImplFactory,
+	kaffe/net/DefaultDatagramSocketImplFactory.
+
+	* libraries/javalib/profiles/default/allatonce/all.files: Regenerated.
+
 2003-08-29  Jim Pick  <jim@kaffe.org>
 
 	* libraries/javalib/java/io/RandomAccessFile.java:
@@ -63,6 +185,27 @@
 
 	* libraries/javalib/java/text/DecimalFormat.java:
 	Added import java.util.Currency to fix compile.
+
+2003-08-28  Guilhem Lavaux <guilhem@kaffe.org>
+
+	* libraries/javalib/java/util/Currency.java: new class.
+	
+	* libraries/javalib/java/text/DecimalFormatSymbols.java:
+	(locale) new field.
+	(readObject) check for version number and fix fields accordingly.
+	(getCurrency) new method.
+	(setCurrency) new method.
+
+	* libraries/javalib/java/text/NumberFormat.java:
+	(getCurrency) new method.
+	(setCurrency) new method. 
+
+	* libraries/javalib/java/text/DecimalFormat.java:
+	(getCurrency) new method.
+	(setCurrency) new method. 
+
+	* libraries/javalib/Makefile.am, libraries/javalib/Makefile.in:
+	regenerated.
 
 2003-08-28  Guilhem Lavaux <guilhem@kaffe.org>
 
Index: kaffe/configure
diff -u kaffe/configure:1.253 kaffe/configure:1.254
--- kaffe/configure:1.253	Thu Aug 28 02:53:35 2003
+++ kaffe/configure	Sat Aug 30 14:18:18 2003
@@ -40069,7 +40069,8 @@
 
 
 
-for ac_func in sync fsync
+
+for ac_func in sync fsync ftruncate
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 echo "$as_me:$LINENO: checking for $ac_func" >&5
Index: kaffe/configure.in
diff -u kaffe/configure.in:1.220 kaffe/configure.in:1.221
--- kaffe/configure.in:1.220	Thu Aug 28 02:53:37 2003
+++ kaffe/configure.in	Sat Aug 30 14:18:21 2003
@@ -1061,7 +1061,7 @@
 AC_CHECK_FUNCS([sbrk valloc memalign mallopt])
 AC_CHECK_FUNCS([mprotect madvise])
 AC_CHECK_FUNCS([waitpid kill fork execve execvp])
-AC_CHECK_FUNCS([sync fsync])
+AC_CHECK_FUNCS([sync fsync ftruncate])
 AC_CHECK_FUNCS([atexit on_exit vsnprintf snprintf])
 
 if test x"$Khost_cpu" = x"alpha" ; then
Index: kaffe/config/config.h.in
diff -u kaffe/config/config.h.in:1.77 kaffe/config/config.h.in:1.78
--- kaffe/config/config.h.in:1.77	Sat Jul 26 16:50:45 2003
+++ kaffe/config/config.h.in	Sat Aug 30 14:18:23 2003
@@ -100,6 +100,9 @@
 /* Define to 1 if you have the `ftime' function. */
 #undef HAVE_FTIME
 
+/* Define to 1 if you have the `ftruncate' function. */
+#undef HAVE_FTRUNCATE
+
 /* Enable GCJ support. */
 #undef HAVE_GCJ_SUPPORT
 
Index: kaffe/include/Makefile.am
diff -u kaffe/include/Makefile.am:1.46 kaffe/include/Makefile.am:1.47
--- kaffe/include/Makefile.am:1.46	Mon Aug 18 17:40:27 2003
+++ kaffe/include/Makefile.am	Sat Aug 30 14:18:23 2003
@@ -72,11 +72,8 @@
 	java_lang_reflect_Method.h \
 	java_net_DatagramPacket.h \
 	java_net_InetAddress.h \
-	java_net_InetAddressImpl.h \
-	java_net_NativeInetAddressImpl.h \
 	java_net_InetSocketAddress.h \
 	java_net_NetworkInterface.h \
-	java_net_NetworkInterfaceImpl.h \
 	java_net_PlainDatagramSocketImpl.h \
 	java_net_PlainSocketImpl.h \
 	java_net_SocketAddress.h \
Index: kaffe/include/Makefile.in
diff -u kaffe/include/Makefile.in:1.118 kaffe/include/Makefile.in:1.119
--- kaffe/include/Makefile.in:1.118	Mon Aug 18 17:40:27 2003
+++ kaffe/include/Makefile.in	Sat Aug 30 14:18:23 2003
@@ -307,11 +307,8 @@
 	java_lang_reflect_Method.h \
 	java_net_DatagramPacket.h \
 	java_net_InetAddress.h \
-	java_net_InetAddressImpl.h \
-	java_net_NativeInetAddressImpl.h \
 	java_net_InetSocketAddress.h \
 	java_net_NetworkInterface.h \
-	java_net_NetworkInterfaceImpl.h \
 	java_net_PlainDatagramSocketImpl.h \
 	java_net_PlainSocketImpl.h \
 	java_net_SocketAddress.h \
Index: kaffe/include/jsyscall.h
diff -u kaffe/include/jsyscall.h:1.12 kaffe/include/jsyscall.h:1.13
--- kaffe/include/jsyscall.h:1.12	Mon Aug  4 13:48:14 2003
+++ kaffe/include/jsyscall.h	Sat Aug 30 14:18:23 2003
@@ -35,6 +35,7 @@
 	int	(*_fstat)(int, struct stat*);
 	int	(*_stat)(const char*, struct stat*);
 	int	(*_ftruncate)(int, off_t);
+	int	(*_fsync)(int);
 
 	int	(*_mkdir)(const char*, int);
 	int	(*_rmdir)(const char*);
@@ -89,6 +90,7 @@
 #define	KFSTAT(A,B)	(*Kaffe_SystemCallInterface._fstat)(A,B)
 #define	KSTAT(A,B)	(*Kaffe_SystemCallInterface._stat)(A,B)
 #define KFTRUNCATE(A,B) (*Kaffe_SystemCallInterface._ftruncate)(A,B)
+#define KFSYNC(A)       (*Kaffe_SystemCallInterface._fsync)(A)
 
 #define	KMKDIR(A,B)	(*Kaffe_SystemCallInterface._mkdir)(A,B)
 #define	KRMDIR(A)	(*Kaffe_SystemCallInterface._rmdir)(A)
Index: kaffe/kaffe/kaffevm/systems/unix-jthreads/syscalls.c
diff -u kaffe/kaffe/kaffevm/systems/unix-jthreads/syscalls.c:1.11 kaffe/kaffe/kaffevm/systems/unix-jthreads/syscalls.c:1.12
--- kaffe/kaffe/kaffevm/systems/unix-jthreads/syscalls.c:1.11	Tue Aug  5 06:44:40 2003
+++ kaffe/kaffe/kaffevm/systems/unix-jthreads/syscalls.c	Sat Aug 30 14:18:24 2003
@@ -118,6 +118,7 @@
 static int
 jthreadedFTruncate(int fd, off_t new_size)
 {
+#ifdef HAVE_FTRUNCATE
 	int rc = 0;
 	jthread_spinon(0);
 	if (ftruncate(fd, new_size) == -1) {
@@ -125,6 +126,25 @@
 	}
 	jthread_spinoff(0);
 	return (rc);
+#else
+	return ENOTSUP;
+#endif
+}
+
+static int
+jthreadedFSync(int fd)
+{
+#ifdef HAVE_FSYNC
+	int rc = 0;
+	jthread_spinon(0);
+	if (fsync(fd) == -1) {
+		rc = errno;
+	}
+	jthread_spinoff(0);
+	return (rc);
+#else
+	return ENOTSUP;
+#endif
 }
 
 static int
@@ -385,6 +405,7 @@
         jthreadedFStat,
         jthreadedStat,
         jthreadedFTruncate,
+        jthreadedFSync,
         jthreadedMkdir,
         jthreadedRmdir,
         jthreadedRename,
Index: kaffe/libraries/clib/io/File.c
diff -u kaffe/libraries/clib/io/File.c:1.19 kaffe/libraries/clib/io/File.c:1.20
--- kaffe/libraries/clib/io/File.c:1.19	Wed Jun 11 22:26:17 2003
+++ kaffe/libraries/clib/io/File.c	Sat Aug 30 14:18:24 2003
@@ -3,6 +3,8 @@
  *
  * Copyright (c) 1996, 1997, 1998, 1999
  *	Transvirtual Technologies, Inc.  All rights reserved.
+ * Copyright (c) 2003
+ *      Kaffe's team.
  *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
@@ -30,89 +32,90 @@
 /*
  * Is named item a file?
  */
-jbool
-java_io_File_isFile0(struct Hjava_io_File* this)
+jboolean java_io_File_isFileInternal(struct Hjava_io_File* this, 
+				     struct Hjava_lang_String* fileName)
 {
-	struct stat buf;
-	char str[MAXPATHLEN];
-	int r;
-
-	stringJava2CBuf(unhand(this)->path, str, sizeof(str));
-
-	r = KSTAT(str, &buf);
-	if (r == 0 && S_ISREG(buf.st_mode)) {
-		return (1);
-	}
-	else {
-		return (0);
-	}
+  struct stat buf;
+  char str[MAXPATHLEN];
+  int r;
+  
+  stringJava2CBuf(fileName, str, sizeof(str));
+  
+  r = KSTAT(str, &buf);
+  if (r == 0 && S_ISREG(buf.st_mode)) {
+    return (1);
+  }
+  else {
+    return (0);
+  }
 }
 
 /*
  * Is named item a directory?
  */
-jbool
-java_io_File_isDirectory0(struct Hjava_io_File* this)
+jboolean java_io_File_isDirectoryInternal(struct Hjava_io_File* this,
+					  struct Hjava_lang_String* fileName)
 {
-	struct stat buf;
-	char str[MAXPATHLEN];
-	int r;
-
-	stringJava2CBuf(unhand(this)->path, str, sizeof(str));
-
-	r = KSTAT(str, &buf);
-	if (r == 0 && S_ISDIR(buf.st_mode)) {
-		return (1);
-	}
-	else {
-		return (0);
-	}
+  struct stat buf;
+  char str[MAXPATHLEN];
+  int r;
+
+  stringJava2CBuf(fileName, str, sizeof(str));
+  
+  r = KSTAT(str, &buf);
+  if (r == 0 && S_ISDIR(buf.st_mode)) {
+    return (1);
+  }
+  else {
+    return (0);
+  }
 }
 
 /*
  * Does named file exist?
  */
-jbool
-java_io_File_exists0(struct Hjava_io_File* this)
+jboolean java_io_File_existsInternal(struct Hjava_io_File* this,
+				     struct Hjava_lang_String* fileName)
 {
-	struct stat buf;
-	char str[MAXPATHLEN];
-
-	stringJava2CBuf(unhand(this)->path, str, sizeof(str));
-
-	/* A file exists if I can stat it */
-	return (KSTAT(str, &buf) == 0);
+  struct stat buf;
+  char str[MAXPATHLEN];
+  
+  stringJava2CBuf(fileName, str, sizeof(str));
+  
+  /* A file exists if I can stat it */
+  return (KSTAT(str, &buf) == 0);
 }
 
 /*
  * Last modified time on file.
  */
-jlong
-java_io_File_lastModified0(struct Hjava_io_File* this)
+jlong java_io_File_lastModifiedInternal(struct Hjava_io_File* this,
+					struct Hjava_lang_String* fileName)
 {
-	struct stat buf;
-	char str[MAXPATHLEN];
-	int r;
-
-	stringJava2CBuf(unhand(this)->path, str, sizeof(str));
-
-	r = KSTAT(str, &buf);
-	if (r != 0) {
-		return ((jlong)0);
-	}
-	return ((jlong)buf.st_mtime * (jlong)1000);
+  struct stat buf;
+  char str[MAXPATHLEN];
+  int r;
+  
+  stringJava2CBuf(fileName, str, sizeof(str));
+  
+  r = KSTAT(str, &buf);
+  if (r != 0) {
+    return ((jlong)0);
+  }
+  return ((jlong)buf.st_mtime * (jlong)1000);
 }
 
 /*
  * Can I write to this file?
  */
-jbool
-java_io_File_canWrite0(struct Hjava_io_File* this)
+jboolean
+java_io_File_canWriteInternal(struct Hjava_io_File* this,
+			      struct Hjava_lang_String* fileName)
 {
 	char str[MAXPATHLEN];
 	int r;
 
-	stringJava2CBuf(unhand(this)->path, str, sizeof(str));
+	stringJava2CBuf(fileName, str, sizeof(str));
 	/* XXX make part of jsyscall interface !? */
 	r = access(str, W_OK);
 	return (r < 0 ? 0 : 1);
@@ -121,261 +124,230 @@
 /*
  * Can I read from this file.
  */
-jbool
-java_io_File_canRead0(struct Hjava_io_File* this)
+jboolean java_io_File_canReadInternal(struct Hjava_io_File* this,
+				      struct Hjava_lang_String* fileName)
 {
-	char str[MAXPATHLEN];
-	int r;
-
-	stringJava2CBuf(unhand(this)->path, str, sizeof(str));
-	/* XXX make part of jsyscall interface !? */
-	r = access(str, R_OK);
-	return (r < 0 ? 0 : 1);
+  char str[MAXPATHLEN];
+  int r;
+  
+  stringJava2CBuf(fileName, str, sizeof(str));
+  /* XXX make part of jsyscall interface !? */
+  r = access(str, R_OK);
+  return (r < 0 ? 0 : 1);
 }
 
 /*
  * Return length of file.
  */
-jlong
-java_io_File_length0(struct Hjava_io_File* this)
+jlong java_io_File_lengthInternal(struct Hjava_io_File* this,
+				  struct Hjava_lang_String* fileName)
 {
-	struct stat buf;
-	char str[MAXPATHLEN];
-	int r;
-
-	stringJava2CBuf(unhand(this)->path, str, sizeof(str));
-
-	r = KSTAT(str, &buf);
-	if (r != 0) {
-		return ((jlong)0);
-	}
-	return ((jlong)buf.st_size);
+  struct stat buf;
+  char str[MAXPATHLEN];
+  int r;
+  
+  stringJava2CBuf(fileName, str, sizeof(str));
+  
+  r = KSTAT(str, &buf);
+  if (r != 0) {
+    return ((jlong)0);
+  }
+  return ((jlong)buf.st_size);
 }
 
 /*
  * Create a directory.
  */
-jbool
-java_io_File_mkdir0(struct Hjava_io_File* this)
+jboolean java_io_File_mkdirInternal(struct Hjava_io_File* this,
+				    struct Hjava_lang_String* fileName)
 {
-	char str[MAXPATHLEN];
-	int r;
-
-	stringJava2CBuf(unhand(this)->path, str, sizeof(str));
-	r = KMKDIR(str, 0777);
-	return (r != 0 ? 0 : 1);
+  char str[MAXPATHLEN];
+  int r;
+  
+  stringJava2CBuf(fileName, str, sizeof(str));
+  r = KMKDIR(str, 0777);
+  return (r != 0 ? 0 : 1);
 }
 
 /*
  * Rename a file.
  */
-jbool
-java_io_File_renameTo0(struct Hjava_io_File* this, struct Hjava_io_File* that)
-{
-	char str[MAXPATHLEN];
-	char str2[MAXPATHLEN];
-	int r;
-
-	stringJava2CBuf(unhand(this)->path, str, sizeof(str));
-	stringJava2CBuf(unhand(that)->path, str2, sizeof(str2));
-
-	r = KRENAME(str, str2);
-	return (r != 0 ? 0 : 1);
+jboolean java_io_File_renameToInternal(struct Hjava_io_File* this,
+				       struct Hjava_lang_String* fromName,
+				       struct Hjava_lang_String* toName)
+{
+  char str[MAXPATHLEN];
+  char str2[MAXPATHLEN];
+  int r;
+  
+  stringJava2CBuf(fromName, str, sizeof(str));
+  stringJava2CBuf(toName, str2, sizeof(str2));
+  
+  r = KRENAME(str, str2);
+  return (r != 0 ? 0 : 1);
 }
 
 /*
  * Delete a file.
  */
-jbool
-java_io_File_delete0(struct Hjava_io_File* this)
+jboolean java_io_File_deleteInternal(struct Hjava_io_File* this, 
+				    struct Hjava_lang_String* fileName)
 {
 	char str[MAXPATHLEN];
 	int r;
+	
+	stringJava2CBuf(fileName, str, sizeof(str));
 
-	stringJava2CBuf(unhand(this)->path, str, sizeof(str));
-	r = KREMOVE(str);
-	return(r != 0 ? 0 : 1);
-}
-
-/*
- * Delete a directory.
- */
-jbool
-java_io_File_rmdir0(struct Hjava_io_File* this)
-{
-	char str[MAXPATHLEN];
-	int r;
-
-	stringJava2CBuf(unhand(this)->path, str, sizeof(str));
-	r = KRMDIR(str);
+	if (java_io_File_isDirectoryInternal(this, fileName))
+	  r = KRMDIR(str);
+	else
+	  r = KREMOVE(str);
 	return(r != 0 ? 0 : 1);
 }
 
 /*
  * Get a directory listing.
  */
-HArrayOfObject* /* [Ljava.lang.String; */
-java_io_File_list0(struct Hjava_io_File* this)
+HArrayOfObject* java_io_File_listInternal(struct Hjava_io_File* this,
+					  struct Hjava_lang_String* dirName)
 {
 #if defined(HAVE_DIRENT_H)
-	char path[MAXPATHLEN];
-	DIR* dir;
-	struct dirent* entry;
-	struct dentry {
-		struct dentry* next;
-		char name[1];
-	};
-	struct dentry* dirlist;
-	struct dentry* mentry;
-	HArrayOfObject* array;
-	int count;
-	int i;
-	int oom = 0;
-
-	stringJava2CBuf(unhand(this)->path, path, sizeof(path));
-
-	/* XXX make part of jsyscall interface !? */
-	dir = opendir(path);
-	if (dir == 0) {
-		return (0);
-	}
-
-	dirlist = 0;
-	count = 0;
-	/* XXX make part of jsyscall interface !? */
-	while ((entry = readdir(dir)) != 0) {
-		/* We skip '.' and '..' */
-		if (strcmp(".", entry->d_name) == 0 ||
-		    strcmp("..", entry->d_name) == 0) {
-			continue;
-		}
-		mentry = KMALLOC(sizeof(struct dentry) + NAMLEN(entry));
-		if (!mentry) {
-			errorInfo info;
-
-			while (dirlist) {
-				mentry = dirlist;
-				dirlist = dirlist->next;
-				KFREE(mentry);
-			}
-			postOutOfMemory(&info);
-			throwError(&info);
-		}
-		strcpy(mentry->name, entry->d_name);
-		mentry->next = dirlist;
-		dirlist = mentry;
-		count++;
-	}
-	/* XXX make part of jsyscall interface !? */
-	closedir(dir);
-
-	array = (HArrayOfObject*)AllocObjectArray(count,
-	    "Ljava/lang/String;", 0);
-	/* XXX: This assert is a noop.  If AllocObjectArray throws an
-	   exception, we leak. */
-	assert(array != 0);
-	for (i = 0; i < count; i++) {
-		mentry = dirlist;
-		dirlist = mentry->next;
-		unhand_array(array)->body[i] =
-			(Hjava_lang_Object*)stringC2Java(mentry->name);
-		/* if allocation fails, continue freeing mentries in
-		   this loop. */
-		oom |= !unhand_array(array)->body[i];
-		KFREE(mentry);
-	}
-	if (oom) {
-		errorInfo info;
-		postOutOfMemory(&info);
-		throwError(&info);
-	}
-
-	return (array);
+  char path[MAXPATHLEN];
+  DIR* dir;
+  struct dirent* entry;
+  struct dentry {
+    struct dentry* next;
+    char name[1];
+  };
+  struct dentry* dirlist;
+  struct dentry* mentry;
+  HArrayOfObject* array;
+  int count;
+  int i;
+  int oom = 0;
+  
+  stringJava2CBuf(dirName, path, sizeof(path));
+  
+  /* XXX make part of jsyscall interface !? */
+  dir = opendir(path);
+  if (dir == 0) {
+    return (0);
+  }
+  
+  dirlist = 0;
+  count = 0;
+  /* XXX make part of jsyscall interface !? */
+  while ((entry = readdir(dir)) != 0) {
+    /* We skip '.' and '..' */
+    if (strcmp(".", entry->d_name) == 0 ||
+	strcmp("..", entry->d_name) == 0) {
+      continue;
+    }
+    mentry = KMALLOC(sizeof(struct dentry) + NAMLEN(entry));
+    if (!mentry) {
+      errorInfo info;
+      
+      while (dirlist) {
+	mentry = dirlist;
+	dirlist = dirlist->next;
+	KFREE(mentry);
+      }
+      postOutOfMemory(&info);
+      throwError(&info);
+    }
+    strcpy(mentry->name, entry->d_name);
+    mentry->next = dirlist;
+    dirlist = mentry;
+    count++;
+  }
+  /* XXX make part of jsyscall interface !? */
+  closedir(dir);
+  
+  array = (HArrayOfObject*)AllocObjectArray(count,
+					    "Ljava/lang/String;", 0);
+  /* XXX: This assert is a noop.  If AllocObjectArray throws an
+     exception, we leak. */
+  assert(array != 0);
+  for (i = 0; i < count; i++) {
+    mentry = dirlist;
+    dirlist = mentry->next;
+    unhand_array(array)->body[i] =
+      (Hjava_lang_Object*)stringC2Java(mentry->name);
+    /* if allocation fails, continue freeing mentries in
+       this loop. */
+    oom |= !unhand_array(array)->body[i];
+    KFREE(mentry);
+  }
+  if (oom) {
+    errorInfo info;
+    postOutOfMemory(&info);
+    throwError(&info);
+  }
+  
+  return (array);
 #else
-	return (0);
+  return (0);
 #endif
 }
 
-/*
- * Translate the given pathname into the local canonized form.
- * For the moment we just return what we're given.
- */
-struct Hjava_lang_String*
-java_io_File_canonPath(struct Hjava_io_File* this, struct Hjava_lang_String* str)
+jboolean java_io_File_createInternal(struct Hjava_lang_String* fileName)
 {
-	return (str);
-}
-
-/*
- * Is this filename absolute?
- */
-jbool
-java_io_File_isAbsolute(struct Hjava_io_File* this)
-{
-	char str[2];
-
-	stringJava2CBuf(unhand(this)->path, str, sizeof(str));
-	return (str[0] == file_separator[0]);
-}
-
-jboolean
-java_io_File_createNewFile0(struct Hjava_io_File* this, jint mode)
-{
-	char str[MAXPATHLEN];
-	int fd;
-	int rc;
-
-	stringJava2CBuf(unhand(this)->path, str, sizeof(str));
-
-	rc = KOPEN(str, O_EXCL|O_WRONLY|O_BINARY|O_CREAT, mode, &fd);
-	switch (rc) {
-	case 0:
-		break;
-	case EEXIST:
-		return 0;
-	default:
-		SignalError("java.io.IOException", SYS_ERROR(rc));
-	}
-	rc = KCLOSE(fd);
-	if (rc != 0)
-		SignalError("java.io.IOException", SYS_ERROR(rc));
-	return 1;
-}
-
-jboolean
-java_io_File_setLastModified0(struct Hjava_io_File* this, jlong thetime)
+  char str[MAXPATHLEN];
+  int fd;
+  int rc;
+  
+  stringJava2CBuf(fileName, str, sizeof(str));
+
+  rc = KOPEN(str, O_EXCL|O_WRONLY|O_BINARY|O_CREAT, 0600, &fd);
+  switch (rc) {
+  case 0:
+    break;
+  case EEXIST:
+    return 0;
+  default:
+    SignalError("java.io.IOException", SYS_ERROR(rc));
+  }
+  rc = KCLOSE(fd);
+  if (rc != 0)
+    SignalError("java.io.IOException", SYS_ERROR(rc));
+  return 1;
+}
+
+jboolean java_io_File_setLastModifiedInternal(struct Hjava_io_File* this,
+					      struct Hjava_lang_String* fileName,
+					      jlong thetime)
 {
 #ifdef HAVE_UTIME_H
-	char path[MAXPATHLEN];
-	struct utimbuf ub;
+  char path[MAXPATHLEN];
+  struct utimbuf ub;
 #endif
-
-	if (thetime < 0)
-		SignalError("java.lang.IllegalArgumentException", "time < 0");
+  
+  if (thetime < 0)
+    SignalError("java.lang.IllegalArgumentException", "time < 0");
 #ifdef HAVE_UTIME_H
-	stringJava2CBuf(unhand(this)->path, path, sizeof(path));
-	ub.actime = (time_t)(thetime / 1000);
-	ub.modtime = ub.actime;
-	return (utime(path, &ub) >= 0);
+  stringJava2CBuf(fileName, path, sizeof(path));
+  ub.actime = (time_t)(thetime / 1000);
+  ub.modtime = ub.actime;
+  return (utime(path, &ub) >= 0);
 #else
-	return 0;
+  return 0;
 #endif
 }
 
-jboolean
-java_io_File_setReadOnly0(struct Hjava_io_File* this)
+jboolean java_io_File_setReadOnlyInternal(struct Hjava_io_File* this, 
+					  struct Hjava_lang_String* fileName)
 {
-	struct stat buf;
-	char str[MAXPATHLEN];
-	int r;
-
-	stringJava2CBuf(unhand(this)->path, str, sizeof(str));
-
-	r = KSTAT(str, &buf);
-	if (r != 0)
-		return 0;
-
-	r = chmod(str, buf.st_mode & ~(S_IWOTH|S_IWGRP|S_IWUSR));
-	return (r == 0);
+  struct stat buf;
+  char str[MAXPATHLEN];
+  int r;
+  
+  stringJava2CBuf(fileName, str, sizeof(str));
+  
+  r = KSTAT(str, &buf);
+  if (r != 0)
+    return 0;
+  
+  r = chmod(str, buf.st_mode & ~(S_IWOTH|S_IWGRP|S_IWUSR));
+  return (r == 0);
 }
 
Index: kaffe/libraries/clib/io/FileDescriptor.c
diff -u kaffe/libraries/clib/io/FileDescriptor.c:1.3 kaffe/libraries/clib/io/FileDescriptor.c:1.4
--- kaffe/libraries/clib/io/FileDescriptor.c:1.3	Mon Feb  8 05:07:15 1999
+++ kaffe/libraries/clib/io/FileDescriptor.c	Sat Aug 30 14:18:24 2003
@@ -1,8 +1,7 @@
 /*
  * java.io.FileDescriptor.c
  *
- * Copyright (c) 1996, 1997
- *	Transvirtual Technologies, Inc.  All rights reserved.
+ * Copyright (c) 2003 Kaffe's team.
  *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
@@ -12,54 +11,439 @@
 #include "config-std.h"
 #include "config-io.h"
 #include "files.h"
+#include "defs.h"

*** Patch too long, truncated ***