WIN-28.1: fix POSIX file descriptor numbering assumptions
Adam Megacz
patches@lists.megacz.com
Wed Mar 6 14:19:00 GMT 2002
Adam Megacz <patches@lists.megacz.com> writes:
> > The compiler must execute all static initializer code before accessing a
> > static field from a class. If it doesn't then there is a compiler bug.
> I'll post a patch that uses a static native 'init' method, and confirm
> once again that it segfaults. If so, I'll file a PR on it.
Sorry about this, Bryce -- you were right.
Either I made some stupid typo last time I tried this, or else the
frontend unpatch I just posted affects this as well. Either way,
here's a new patch implementing your recommendation. Tested on Win32.
Ok to commit?
- a
2002-03-06 Adam Megacz <adam@xwt.org>
* java/io/FileDescriptor.java: Initialize in/out/err in init().
* java/io/natFileDescriptorWin32.cc (init()): Added function.
* java/io/natFileDescriptorPosix.cc (init()): Added function.
* java/io/natFileDescriptorEcos.cc (init()): Added function.
Index: FileDescriptor.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/io/FileDescriptor.java,v
retrieving revision 1.8
diff -u -r1.8 FileDescriptor.java
--- FileDescriptor.java 2001/08/31 22:31:40 1.8
+++ FileDescriptor.java 2002/03/06 21:34:15
@@ -24,13 +24,19 @@
// if need be.
public final class FileDescriptor
{
- public static final FileDescriptor in = new FileDescriptor (0);
- public static final FileDescriptor out = new FileDescriptor (1);
- public static final FileDescriptor err = new FileDescriptor (2);
+ public static final FileDescriptor in = null;
+ public static final FileDescriptor out = null;
+ public static final FileDescriptor err = null;
+
+ private static native void init();
+ static
+ {
+ init();
+ }
+
public native void sync () throws SyncFailedException;
public native boolean valid ();
-
// These are mode values for open().
static final int READ = 1;
Index: natFileDescriptorEcos.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/io/natFileDescriptorEcos.cc,v
retrieving revision 1.6
diff -u -r1.6 natFileDescriptorEcos.cc
--- natFileDescriptorEcos.cc 2001/08/02 23:46:39 1.6
+++ natFileDescriptorEcos.cc 2002/03/06 21:34:15
@@ -41,6 +41,14 @@
#define NO_FSYNC_MESSAGE "sync unsupported"
+void
+java::io::FileDescriptor::init(void)
+{
+ in = new java::io::FileDescriptor((jint)(GetStdHandle (0)));
+ out = new java::io::FileDescriptor((jint)(GetStdHandle (1)));
+ err = new java::io::FileDescriptor((jint)(GetStdHandle (2)));
+}
+
jboolean
java::io::FileDescriptor::valid (void)
{
Index: natFileDescriptorPosix.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/io/natFileDescriptorPosix.cc,v
retrieving revision 1.16
diff -u -r1.16 natFileDescriptorPosix.cc
--- natFileDescriptorPosix.cc 2001/09/21 04:23:31 1.16
+++ natFileDescriptorPosix.cc 2002/03/06 21:34:15
@@ -45,6 +45,14 @@
#define NO_FSYNC_MESSAGE "sync unsupported"
+void
+java::io::FileDescriptor::init(void)
+{
+ in = new java::io::FileDescriptor((jint)(GetStdHandle (0)));
+ out = new java::io::FileDescriptor((jint)(GetStdHandle (1)));
+ err = new java::io::FileDescriptor((jint)(GetStdHandle (2)));
+}
+
jboolean
java::io::FileDescriptor::valid (void)
{
Index: natFileDescriptorWin32.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/io/natFileDescriptorWin32.cc,v
retrieving revision 1.5
diff -u -r1.5 natFileDescriptorWin32.cc
--- natFileDescriptorWin32.cc 2002/02/12 02:17:21 1.5
+++ natFileDescriptorWin32.cc 2002/03/06 21:34:15
@@ -32,6 +32,14 @@
#include <java/lang/Thread.h>
#include <java/io/FileNotFoundException.h>
+void
+java::io::FileDescriptor::init(void)
+{
+ in = new java::io::FileDescriptor((jint)(GetStdHandle (STD_INPUT_HANDLE)));
+ out = new java::io::FileDescriptor((jint)(GetStdHandle (STD_OUTPUT_HANDLE)));
+ err = new java::io::FileDescriptor((jint)(GetStdHandle (STD_ERROR_HANDLE)));
+}
+
static char *
winerr (void)
{
More information about the Java-patches
mailing list