summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuilhem Lavaux <guilhem@kaffe.org>2006-06-10 20:26:36 +0000
committerGuilhem Lavaux <guilhem@kaffe.org>2006-06-10 20:26:36 +0000
commit935da65ae67c7ff74e5a02c198d6b4bcbaee8133 (patch)
tree2fe44bcdf396a5320b9660b75d81b31f79d362cb
parent2f94810a11e0e3cdeb4bed695a4bf9eb9ce41c34 (diff)
downloadclasspath-935da65ae67c7ff74e5a02c198d6b4bcbaee8133.tar.gz
2006-06-10 Guilhem Lavaux <guilhem@kaffe.org>
* native/jni/native-lib/cpio.c (cpio_openDir, cpio_closeDir, cpio_readDir): Implemented. * native/jni/native-lib/cpnet.h: (cpnet_bytesToIPV4Address): Fixed type casting to avoid being messed by signs in jbyte.
-rw-r--r--ChangeLog.native9
-rw-r--r--native/jni/native-lib/cpio.c28
-rw-r--r--native/jni/native-lib/cpnet.c2
-rw-r--r--native/jni/native-lib/cpnet.h8
4 files changed, 43 insertions, 4 deletions
diff --git a/ChangeLog.native b/ChangeLog.native
index 92940903b..e8dec7275 100644
--- a/ChangeLog.native
+++ b/ChangeLog.native
@@ -1,3 +1,12 @@
+2006-06-10 Guilhem Lavaux <guilhem@kaffe.org>
+
+ * native/jni/native-lib/cpio.c
+ (cpio_openDir, cpio_closeDir, cpio_readDir): Implemented.
+
+ * native/jni/native-lib/cpnet.h:
+ (cpnet_bytesToIPV4Address): Fixed type casting to avoid being
+ messed by signs in jbyte.
+
2006-06-07 Guilhem Lavaux <guilhem@kaffe.org>
* Merged HEAD as of 2006-06-06.
diff --git a/native/jni/native-lib/cpio.c b/native/jni/native-lib/cpio.c
index fbbea570d..be72ba114 100644
--- a/native/jni/native-lib/cpio.c
+++ b/native/jni/native-lib/cpio.c
@@ -43,6 +43,7 @@ exception statement from your version. */
#include <errno.h>
#include <string.h>
#include <sys/types.h>
+#include <dirent.h>
#include <jni.h>
@@ -419,3 +420,30 @@ int cpio_rename (const char *old_name, const char *new_name)
return 0;
}
+int cpio_openDir (const char *dirname, void **handle)
+{
+ *handle = (void *)opendir(dirname);
+ if (*handle == NULL)
+ return errno;
+
+ return 0;
+}
+
+int cpio_closeDir (void *handle)
+{
+ closedir((DIR *)handle);
+ return 0;
+}
+
+
+int cpio_readDir (void *handle, const char **filename)
+{
+ struct dirent *dBuf;
+
+ dBuf = readdir((DIR *)handle);
+ if (dBuf == NULL)
+ return errno;
+
+ *filename = dBuf->d_name;
+ return 0;
+}
diff --git a/native/jni/native-lib/cpnet.c b/native/jni/native-lib/cpnet.c
index fe114ed90..4b4953ccb 100644
--- a/native/jni/native-lib/cpnet.c
+++ b/native/jni/native-lib/cpnet.c
@@ -180,6 +180,8 @@ jint cpnet_connect(JNIEnv *env UNUSED, jint fd, cpnet_address *addr)
int ret;
/* TODO: implement socket time out */
+ struct sockaddr_in *theaddr = (struct sockaddr_in *)addr->data;
+
ret = connect(fd, (struct sockaddr *)addr->data, addr->len);
if (ret != 0)
return errno;
diff --git a/native/jni/native-lib/cpnet.h b/native/jni/native-lib/cpnet.h
index a4aa8f15c..52f68946e 100644
--- a/native/jni/native-lib/cpnet.h
+++ b/native/jni/native-lib/cpnet.h
@@ -189,10 +189,10 @@ static inline void cpnet_bytesToIPV4Address(cpnet_address *netaddr, jbyte *octet
jint sysaddr;
struct sockaddr_in *ipaddr = (struct sockaddr_in *)&(netaddr->data[0]);
- sysaddr = ((jint)octets[0]) << 24;
- sysaddr |= ((jint)octets[1]) << 16;
- sysaddr |= ((jint)octets[2]) << 8;
- sysaddr |= ((jint)octets[3]);
+ sysaddr = ((jint)(unsigned char)octets[0]) << 24;
+ sysaddr |= ((jint)(unsigned char)octets[1]) << 16;
+ sysaddr |= ((jint)(unsigned char)octets[2]) << 8;
+ sysaddr |= ((jint)(unsigned char)octets[3]);
ipaddr->sin_addr.s_addr = htonl(sysaddr);
}