Makefile.in: Rebuilt.
* Makefile.in: Rebuilt. * Makefile.am (libgcj_la_SOURCES): Added posix.cc. * java/net/natPlainSocketImpl.cc: Include posix.h. (accept): Use _Jv_select. * java/net/natPlainDatagramSocketImpl.cc: Include posix.h. (receive): Use _Jv_select. * java/io/natFileDescriptorPosix.cc: Include posix.h. (available): Use _Jv_select. * java/lang/natSystem.cc: Include posix.h. (currentTimeMillis): Use _Jv_gettimeofday. * include/posix.h: New file. * posix.cc: New file. From-SVN: r35435
This commit is contained in:
parent
2d57911678
commit
f536cd95fb
@ -1,5 +1,18 @@
|
||||
2000-08-02 Tom Tromey <tromey@cygnus.com>
|
||||
|
||||
* Makefile.in: Rebuilt.
|
||||
* Makefile.am (libgcj_la_SOURCES): Added posix.cc.
|
||||
* java/net/natPlainSocketImpl.cc: Include posix.h.
|
||||
(accept): Use _Jv_select.
|
||||
* java/net/natPlainDatagramSocketImpl.cc: Include posix.h.
|
||||
(receive): Use _Jv_select.
|
||||
* java/io/natFileDescriptorPosix.cc: Include posix.h.
|
||||
(available): Use _Jv_select.
|
||||
* java/lang/natSystem.cc: Include posix.h.
|
||||
(currentTimeMillis): Use _Jv_gettimeofday.
|
||||
* include/posix.h: New file.
|
||||
* posix.cc: New file.
|
||||
|
||||
* scripts/encodings.pl: New file.
|
||||
* Makefile.in: Rebuilt.
|
||||
* Makefile.am (convert_source_files): Added IOConverter.java.
|
||||
|
@ -118,7 +118,7 @@ javao_files = $(java_source_files:.java=.lo) \
|
||||
## Extract the libffi object file names.
|
||||
libffi_files = `$(AR) t ../libffi/.libs/libffi.a 2>/dev/null | sed 's/\.o/\.lo/g' | sed 's/^/..\/libffi\//g'`
|
||||
|
||||
libgcj_la_SOURCES = prims.cc jni.cc exception.cc \
|
||||
libgcj_la_SOURCES = prims.cc posix.cc jni.cc exception.cc \
|
||||
resolve.cc defineclass.cc interpret.cc name-finder.cc
|
||||
EXTRA_libgcj_la_SOURCES = boehm.cc nogc.cc posix-threads.cc no-threads.cc \
|
||||
$(c_source_files) $(java_source_files) $(built_java_source_files)
|
||||
|
@ -193,7 +193,7 @@ javao_files = $(java_source_files:.java=.lo) \
|
||||
|
||||
libffi_files = `$(AR) t ../libffi/.libs/libffi.a 2>/dev/null | sed 's/\.o/\.lo/g' | sed 's/^/..\/libffi\//g'`
|
||||
|
||||
libgcj_la_SOURCES = prims.cc jni.cc exception.cc \
|
||||
libgcj_la_SOURCES = prims.cc posix.cc jni.cc exception.cc \
|
||||
resolve.cc defineclass.cc interpret.cc name-finder.cc
|
||||
|
||||
EXTRA_libgcj_la_SOURCES = boehm.cc nogc.cc posix-threads.cc no-threads.cc \
|
||||
@ -973,7 +973,7 @@ libgcjdata_a_LIBADD =
|
||||
@NEEDS_DATA_START_TRUE@libgcjdata_a_OBJECTS = libgcjdata.o
|
||||
LTLIBRARIES = $(toolexeclib_LTLIBRARIES)
|
||||
|
||||
libgcj_la_OBJECTS = prims.lo jni.lo exception.lo resolve.lo \
|
||||
libgcj_la_OBJECTS = prims.lo posix.lo jni.lo exception.lo resolve.lo \
|
||||
defineclass.lo interpret.lo name-finder.lo
|
||||
@NATIVE_TRUE@bin_PROGRAMS = jv-convert$(EXEEXT) gij$(EXEEXT)
|
||||
@NATIVE_TRUE@@MAINTAINER_MODE_TRUE@noinst_PROGRAMS = \
|
||||
@ -1422,7 +1422,7 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
|
||||
.deps/java/util/zip/ZipInputStream.P \
|
||||
.deps/java/util/zip/ZipOutputStream.P .deps/jni.P .deps/libgcjdata.P \
|
||||
.deps/name-finder.P .deps/no-threads.P .deps/nogc.P \
|
||||
.deps/posix-threads.P .deps/prims.P .deps/resolve.P
|
||||
.deps/posix-threads.P .deps/posix.P .deps/prims.P .deps/resolve.P
|
||||
SOURCES = $(libgcjdata_a_SOURCES) $(libgcj_la_SOURCES) $(EXTRA_libgcj_la_SOURCES) $(jv_convert_SOURCES) $(EXTRA_jv_convert_SOURCES) $(gij_SOURCES) $(gen_from_JIS_SOURCES) $(EXTRA_gen_from_JIS_SOURCES)
|
||||
OBJECTS = $(libgcjdata_a_OBJECTS) $(libgcj_la_OBJECTS) $(jv_convert_OBJECTS) $(gij_OBJECTS) $(gen_from_JIS_OBJECTS)
|
||||
|
||||
|
27
libjava/include/posix.h
Normal file
27
libjava/include/posix.h
Normal file
@ -0,0 +1,27 @@
|
||||
// posix.h -- Helper functions for POSIX-flavored OSs.
|
||||
|
||||
/* Copyright (C) 2000 Free Software Foundation
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
This software is copyrighted work licensed under the terms of the
|
||||
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
|
||||
details. */
|
||||
|
||||
#include <time.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef HAVE_SYS_TIME_H
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_SELECT_H
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
extern int _Jv_select (int n, fd_set *, fd_set *, fd_set *, struct timeval *);
|
||||
extern void _Jv_gettimeofday (struct timeval *);
|
@ -10,16 +10,11 @@ details. */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#include "posix.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#ifdef HAVE_SYS_TIME_H
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/param.h>
|
||||
#include <fcntl.h>
|
||||
@ -309,7 +304,7 @@ java::io::FileDescriptor::available (void)
|
||||
struct timeval tv;
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = 0;
|
||||
r = ::select (fd + 1, &rd, NULL, NULL, &tv);
|
||||
r = _Jv_select (fd + 1, &rd, NULL, NULL, &tv);
|
||||
if (r == -1)
|
||||
goto posix_error;
|
||||
num = r == 0 ? 0 : 1;
|
||||
|
@ -11,16 +11,9 @@ details. */
|
||||
#include <config.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_TIME_H
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
#include "posix.h"
|
||||
|
||||
#ifdef HAVE_PWD_H
|
||||
#include <pwd.h>
|
||||
@ -48,10 +41,6 @@ extern java::lang::Class SystemClass;
|
||||
|
||||
|
||||
|
||||
#if defined (ECOS)
|
||||
extern "C" unsigned long long _clock (void);
|
||||
#endif
|
||||
|
||||
void
|
||||
java::lang::System::setErr (java::io::PrintStream *newErr)
|
||||
{
|
||||
@ -152,24 +141,9 @@ java::lang::System::currentTimeMillis (void)
|
||||
{
|
||||
jlong r;
|
||||
|
||||
#if defined (HAVE_GETTIMEOFDAY)
|
||||
struct timeval tv;
|
||||
gettimeofday (&tv, NULL);
|
||||
r = (jlong) tv.tv_sec * 1000 + tv.tv_usec / 1000;
|
||||
#elif defined (HAVE_TIME)
|
||||
r = time (NULL) * 1000;
|
||||
#elif defined (HAVE_FTIME)
|
||||
struct timeb t;
|
||||
ftime (&t);
|
||||
r = t.time * 1000 + t.millitm;
|
||||
#elif defined (ECOS)
|
||||
r = _clock();
|
||||
#else
|
||||
// In the absence of any function, time remains forever fixed.
|
||||
r = 23;
|
||||
#endif
|
||||
|
||||
return r;
|
||||
_Jv_gettimeofday (&tv);
|
||||
return (jlong) tv.tv_sec * 1000 + tv.tv_usec / 1000;
|
||||
}
|
||||
|
||||
jint
|
||||
|
@ -17,16 +17,10 @@ details. */
|
||||
#define ENOPROTOOPT 109
|
||||
#endif
|
||||
#else /* USE_WINSOCK */
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#include "posix.h"
|
||||
#ifdef HAVE_SYS_SOCKET_H
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
#include <sys/time.h>
|
||||
#ifdef HAVE_SYS_SELECT_H
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETINET_IN_H
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
@ -314,7 +308,7 @@ java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *p)
|
||||
tv.tv_sec = timeout / 1000;
|
||||
tv.tv_usec = (timeout % 1000) * 1000;
|
||||
int retval;
|
||||
if ((retval = select (fnum + 1, &rset, NULL, NULL, &tv)) < 0)
|
||||
if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0)
|
||||
goto error;
|
||||
else if (retval == 0)
|
||||
JvThrow (new java::io::InterruptedIOException ());
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1998, 1999 Free Software Foundation
|
||||
/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
@ -19,12 +19,8 @@ details. */
|
||||
#define ENOPROTOOPT 109
|
||||
#endif
|
||||
#else /* USE_WINSOCK */
|
||||
#include <sys/types.h>
|
||||
#include "posix.h"
|
||||
#include <sys/socket.h>
|
||||
#include <sys/time.h>
|
||||
#ifdef HAVE_SYS_SELECT_H
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/tcp.h>
|
||||
#include <errno.h>
|
||||
@ -249,7 +245,7 @@ java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *s)
|
||||
tv.tv_sec = timeout / 1000;
|
||||
tv.tv_usec = (timeout % 1000) * 1000;
|
||||
int retval;
|
||||
if ((retval = select (fnum + 1, &rset, NULL, NULL, &tv)) < 0)
|
||||
if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0)
|
||||
goto error;
|
||||
else if (retval == 0)
|
||||
JvThrow (new java::io::InterruptedIOException (
|
||||
|
104
libjava/posix.cc
Normal file
104
libjava/posix.cc
Normal file
@ -0,0 +1,104 @@
|
||||
// posix.cc -- Helper functions for POSIX-flavored OSs.
|
||||
|
||||
/* Copyright (C) 2000 Free Software Foundation
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
This software is copyrighted work licensed under the terms of the
|
||||
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
|
||||
details. */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "posix.h"
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#if defined (ECOS)
|
||||
extern "C" unsigned long long _clock (void);
|
||||
#endif
|
||||
|
||||
// gettimeofday implementation.
|
||||
void
|
||||
_Jv_gettimeofday (struct timeval *tv)
|
||||
{
|
||||
#if defined (HAVE_GETTIMEOFDAY)
|
||||
gettimeofday (tv, NULL);
|
||||
#elif defined (HAVE_TIME)
|
||||
tv->tv_sec = time (NULL);
|
||||
tv->tv_usec = 0;
|
||||
#elif defined (HAVE_FTIME)
|
||||
struct timeb t;
|
||||
ftime (&t);
|
||||
tv->tv_sec = t.time;
|
||||
tv->tv_usec = t.millitm * 1000;
|
||||
#elif defined (ECOS)
|
||||
// FIXME.
|
||||
tv->tv_sec = _clock () / 1000;
|
||||
tv->tv_usec = 0;
|
||||
#else
|
||||
// In the absence of any function, time remains forever fixed.
|
||||
tv->tv_sec = 23;
|
||||
tv->tv_usec = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
// A wrapper for select() which ignores EINTR.
|
||||
int
|
||||
_Jv_select (int n, fd_set *readfds, fd_set *writefds,
|
||||
fd_set *exceptfds, struct timeval *timeout)
|
||||
{
|
||||
#ifdef HAVE_SELECT
|
||||
// If we have a timeout, compute the absolute ending time.
|
||||
struct timeval end, delay;
|
||||
if (timeout)
|
||||
{
|
||||
_Jv_gettimeofday (&end);
|
||||
end.tv_usec += timeout->tv_usec;
|
||||
if (end.tv_usec >= 1000000)
|
||||
{
|
||||
++end.tv_sec;
|
||||
end.tv_usec -= 1000000;
|
||||
}
|
||||
end.tv_sec += timeout->tv_sec;
|
||||
delay = *timeout;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Placate compiler.
|
||||
delay.tv_sec = delay.tv_usec = 0;
|
||||
}
|
||||
|
||||
while (1)
|
||||
{
|
||||
int r = select (n, readfds, writefds, exceptfds,
|
||||
timeout ? &delay : NULL);
|
||||
if (r != -1 || errno != EINTR)
|
||||
return r;
|
||||
|
||||
struct timeval after;
|
||||
if (timeout)
|
||||
{
|
||||
_Jv_gettimeofday (&after);
|
||||
// Now compute new timeout argument.
|
||||
delay.tv_usec = end.tv_usec - after.tv_usec;
|
||||
delay.tv_sec = end.tv_sec - after.tv_sec;
|
||||
if (delay.tv_usec < 0)
|
||||
{
|
||||
--delay.tv_sec;
|
||||
delay.tv_usec += 1000000;
|
||||
}
|
||||
if (delay.tv_sec < 0)
|
||||
{
|
||||
// We assume that the user wants a valid select() call
|
||||
// more than precise timing. So if we get a series of
|
||||
// EINTR we just keep trying with delay 0 until we get a
|
||||
// valid result.
|
||||
delay.tv_sec = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else /* HAVE_SELECT */
|
||||
return 0;
|
||||
#endif
|
||||
}
|
Loading…
Reference in New Issue
Block a user