aboutsummaryrefslogtreecommitdiff
path: root/libjava/include/win32.h
blob: 320273aa4e5d82742046fd8c3af112945106a84e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// win32.h -- Helper functions for Microsoft-flavored OSs.

/* Copyright (C) 2002, 2003  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__

#include <windows.h>
#undef STRICT

#include <ws2tcpip.h>
#include <gcj/cni.h>
#include <java/util/Properties.h>

#include <io.h>

// Prefix and suffix for shared libraries.
#define _Jv_platform_solib_prefix ""
#define _Jv_platform_solib_suffix ".dll"

// 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

#ifndef DISABLE_JAVA_NET

// these errors cannot occur on Win32
#define ENOTCONN 0
#define ECONNRESET 0

#ifndef ENOPROTOOPT
#define ENOPROTOOPT 109
#endif

#endif // DISABLE_JAVA_NET

extern void _Jv_platform_initialize (void);
extern void _Jv_platform_initProperties (java::util::Properties*);
extern jlong _Jv_platform_gettimeofday ();

inline void
_Jv_platform_close_on_exec (jint)
{
  // Ignore.
}

#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 */

#ifndef DISABLE_JAVA_NET

static inline int
_Jv_socket (int domain, int type, int protocol)
{
  return ::socket (domain, type, protocol);
}

inline int
_Jv_connect (jint fd, sockaddr *ptr, int len)
{
  return ::connect (fd, ptr, len);
}

inline int
_Jv_close (jint fd)
{
  return ::closesocket (fd);
}

inline int
_Jv_bind (int fd, struct sockaddr *addr, int addrlen)
{
  return ::bind (fd, addr, addrlen);
}

inline int
_Jv_accept (int fd, struct sockaddr *addr, socklen_t *addrlen)
{
  return ::accept (fd, addr, addrlen);
}

inline int
_Jv_listen (int fd, int backlog)
{
  return ::listen (fd, backlog);
}

inline int
_Jv_write(int s, void *buf, int len)
{
  return ::send (s, (char*) buf, len, 0);
}

inline int
_Jv_read(int s, void *buf, int len)
{
  return ::recv (s, (char*) buf, len, 0);
}

#endif /* DISABLE_JAVA_NET */

/* Store up to SIZE return address of the current program state in
   ARRAY and return the exact number of values stored.  */
extern int backtrace (void **__array, int __size);

#endif /* __JV_WIN32_H__ */