123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- // win32.h -- Helper functions for Microsoft-flavored OSs.
- /* Copyright (C) 2002, 2003, 2006 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. */
- #ifndef __JV_WIN32_H__
- #define __JV_WIN32_H__
- // Enable UNICODE support?
- #ifdef MINGW_LIBGCJ_UNICODE
- #define UNICODE
- #define _UNICODE
- #endif // MINGW_LIBGCJ_UNICODE
- #include <tchar.h>
- // Includes
- #define WIN32_LEAN_AND_MEAN
- // Force Winsock 2 interface.
- #include <winsock2.h>
- #include <windows.h>
- #undef WIN32_LEAN_AND_MEAN
- #undef STRICT
- #include <ws2tcpip.h>
- #include <gcj/cni.h>
- #include <jvm.h>
- #include <java/util/Properties.h>
- #include <io.h>
- /* Begin UNICODE Support Classes and Functions */
- /* Helper class which creates a temporary, null-terminated,
- wide-character C string. */
- class _Jv_Win32TempString
- {
- public:
- _Jv_Win32TempString(jstring jstr);
- ~_Jv_Win32TempString();
- // Accessors
- operator LPCTSTR() const
- {
- return buf_;
- }
- LPCTSTR buf() const
- {
- return buf_;
- }
- LPTSTR buf()
- {
- return buf_;
- }
- private:
- TCHAR stackbuf_[500];
- LPTSTR buf_;
- };
- // Mimics the JV_TEMP_STRING_UTF macro in jvm.h
- #define JV_TEMP_STRING_WIN32(x,y) _Jv_Win32TempString x(y);
- // Creates a jstring from a LPCTSTR
- extern jstring _Jv_Win32NewString (LPCTSTR pcsz);
- /* End UNICODE Helpers */
- // Prefix and suffix for shared libraries.
- #define _Jv_platform_solib_prefix ""
- #define _Jv_platform_solib_suffix ".dll"
- // Name of the Process implementation.
- #define _Jv_platform_process ::java::lang::Win32Process
- // Separator for file name components.
- #define _Jv_platform_file_separator ((jchar) '\\')
- // Separator for path components.
- #define _Jv_platform_path_separator ((jchar) ';')
- // List of names for `JNI_OnLoad'. On Win32, JNI_OnLoad is an
- // "stdcall" function taking two pointers (8 bytes) as arguments. It
- // could also have been exported as "JNI_OnLoad@8" (MinGW) or
- // "_JNI_OnLoad@8" (MSVC).
- #define _Jv_platform_onload_names \
- { "JNI_OnLoad", "JNI_OnLoad@8", "_JNI_OnLoad@8", NULL }
- // Type of libffi ABI used by JNICALL methods. NOTE: This must agree
- // with the JNICALL definition in jni.h
- #define _Jv_platform_ffi_abi FFI_STDCALL
- /* Useful helper classes and methods. */
- /* A C++ wrapper around a WSAEVENT which closes the event
- in its destructor. If dwSelFlags is non-zero, we also
- issue an WSAEventSelect on the socket descriptor with
- the given flags; this is undone by a corresponding call
- to WSAEventSelect(fd, 0, 0) in our destructor. */
- class WSAEventWrapper
- {
- public:
- // Default constructor. Call init() after this.
- WSAEventWrapper();
- WSAEventWrapper(int fd, DWORD dwSelFlags);
- ~WSAEventWrapper();
- // Used for two-step initialization after calling
- // default constructor.
- void init(int fd, DWORD dwSelFlags);
- int getFD()
- {
- return m_fd;
- }
- WSAEVENT getEventHandle()
- {
- return m_hEvent;
- }
- private:
- WSAEVENT m_hEvent;
- int m_fd;
- DWORD m_dwSelFlags;
- };
- // Error string text. The int argument is compatible
- // with both int WSAGetLastError() and DWORD GetLastError()
- // I tried avoiding having to pass the error explicitly, but
- // it didn't work this was invoked with say
- // throw new SomeException(_Jv_WinStrError()).
- extern jstring
- _Jv_WinStrError (LPCTSTR lpszPrologue, int nErrorCode);
- extern jstring
- _Jv_WinStrError (int nErrorCode);
- extern void
- _Jv_ThrowIOException (DWORD dwErrorCode);
- extern void
- _Jv_ThrowIOException ();
- extern void
- _Jv_ThrowSocketException (DWORD dwErrorCode);
- extern void
- _Jv_ThrowSocketException ();
- // Platform implementation
- extern void _Jv_platform_initialize (void);
- extern void _Jv_platform_initProperties (java::util::Properties*);
- extern jlong _Jv_platform_gettimeofday ();
- extern jlong _Jv_platform_nanotime ();
- extern int _Jv_pipe (int filedes[2]);
- extern void
- _Jv_platform_close_on_exec (HANDLE h);
- #ifdef JV_HASH_SYNCHRONIZATION
- /* Suspends the execution of the current thread for the specified
- number of microseconds. Tries to emulate the behaviour of usleep()
- on UNIX and provides a granularity of 1 millisecond. */
- inline void
- _Jv_platform_usleep (unsigned long usecs)
- {
- if (usecs > 0UL)
- {
- unsigned long millis = ((usecs + 999UL) / 1000UL);
- Sleep (millis);
- }
- }
- #endif /* JV_HASH_SYNCHRONIZATION */
- // Forward declaration. See java-stack.h for definition.
- struct _Jv_AddrInfo;
- // Given an address, determine the executable or shared object that defines
- // it and the nearest named symbol.
- extern int _Jv_platform_dladdr (void *addr, _Jv_AddrInfo *info);
- #endif /* __JV_WIN32_H__ */
|