compilation errors fixed
[official-gcc.git] / libjava / java / net / natVMInetAddressWin32.cc
blob259480faa96a165beef39eb3cf2055f66f6e8ce7
1 /* Copyright (C) 2003, 2006 Free Software Foundation
3 This file is part of libgcj.
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
7 details. */
9 #include <config.h>
10 #include <platform.h>
12 #undef STRICT
14 #include <java/net/VMInetAddress.h>
15 #include <java/net/UnknownHostException.h>
17 jstring
18 java::net::VMInetAddress::getLocalHostname ()
20 char buffer[400];
21 if (gethostname (buffer, sizeof(buffer)))
22 return NULL;
23 // It is admittedly non-optimal to convert the hostname to Unicode
24 // only to convert it back in getByName, but simplicity wins.
25 return JvNewStringUTF (buffer);
28 jbyteArray
29 java::net::VMInetAddress::lookupInaddrAny ()
31 unsigned long laddr = INADDR_ANY;
32 char *bytes = (char *) &laddr;
33 int blen = sizeof (laddr);
34 jbyteArray result = JvNewByteArray (blen);
35 memcpy (elements (result), bytes, blen);
36 return result;
39 jstring
40 java::net::VMInetAddress::getHostByAddr (jbyteArray addr)
42 struct hostent *hptr = NULL;
43 char *bytes = (char*) elements (addr);
44 int len = addr->length;
45 int type;
46 char *val;
47 if (len == 4)
49 val = bytes;
50 type = AF_INET;
52 #ifdef HAVE_INET6
53 else if (len == 16)
55 val = (char *) &bytes;
56 type = AF_INET6;
58 #endif /* HAVE_INET6 */
59 else
60 JvFail ("unrecognized size");
62 // FIXME: this is insufficient if some other piece of code calls
63 // this gethostbyaddr.
64 JvSynchronize sync (&java::net::VMInetAddress::class$);
65 hptr = gethostbyaddr (val, len, type);
67 if (hptr == NULL)
68 throw new java::net::UnknownHostException ();
70 return JvNewStringUTF (hptr->h_name);
73 JArray<jbyteArray> *
74 java::net::VMInetAddress::getHostByName (jstring host)
76 struct hostent *hptr = NULL;
77 JV_TEMP_UTF_STRING (hostname, host);
79 // FIXME: this is insufficient if some other piece of code calls
80 // this gethostbyname.
81 JvSynchronize sync (&java::net::VMInetAddress::class$);
82 hptr = gethostbyname (hostname);
84 if (hptr == NULL)
85 throw new java::net::UnknownHostException (host);
87 int count = 0;
88 char ** ptr = hptr->h_addr_list;
89 while (*ptr++) count++;
91 JArray<jbyteArray> *result =
92 (JArray<jbyteArray> *) _Jv_NewObjectArray (
93 count, _Jv_GetArrayClass(JvPrimClass(byte), NULL), NULL);
94 jbyteArray* addrs = elements (result);
96 for (int i = 0; i < count; i++)
98 addrs[i] = JvNewByteArray (hptr->h_length);
99 memcpy (elements (addrs[i]), hptr->h_addr_list[i], hptr->h_length);
101 return result;
104 jbyteArray
105 java::net::VMInetAddress::aton (jstring host)
107 JV_TEMP_UTF_STRING (hostname, host);
108 char* bytes = NULL;
109 int blen = 0;
110 unsigned long laddr = inet_addr (hostname);
111 if (laddr != INADDR_NONE)
113 bytes = (char *) &laddr;
114 blen = 4;
116 if (blen == 0)
117 return NULL;
118 jbyteArray result = JvNewByteArray (blen);
119 memcpy (elements (result), bytes, blen);
120 return result;