File early_upstream.patch of Package matthewlib-java
diff --git a/unix-java.c b/unix-java.c
index 25f6282..15fffbf 100644
--- a/unix-java.c
+++ b/unix-java.c
@@ -18,6 +18,10 @@
*
*/
+
+/* _GNU_SOURCE is required to use struct ucred in glibc 2.8 */
+#define _GNU_SOURCE
+
#include "unix-java.h"
#include <stdio.h>
#include <stdlib.h>
@@ -381,9 +385,9 @@ JNIEXPORT void JNICALL Java_cx_ath_matthew_unix_UnixSocket_native_1send_1creds
cmsg->cmsg_len = CMSG_LEN(sizeof(struct ucred));
/* Initialize the payload: */
creds = (struct ucred *)CMSG_DATA(cmsg);
- creds.pid = getpid();
- creds.uid = getuid();
- creds.gid = getgid();
+ creds->pid = getpid();
+ creds->uid = getuid();
+ creds->gid = getgid();
#endif
int rv = sendmsg(sock, &msg, 0);
@@ -399,7 +403,7 @@ JNIEXPORT jbyte JNICALL Java_cx_ath_matthew_unix_UnixSocket_native_1recv_1creds
(JNIEnv *env, jobject o, jint sock, jintArray jcreds)
{
struct msghdr msg;
- char buf = 0;
+ char iov_buf = 0;
struct iovec iov;
msg.msg_name = NULL;
msg.msg_namelen = 0;
@@ -408,7 +412,7 @@ JNIEXPORT jbyte JNICALL Java_cx_ath_matthew_unix_UnixSocket_native_1recv_1creds
msg.msg_iovlen = 1;
msg.msg_control = NULL;
msg.msg_controllen = 0;
- iov.iov_base = &buf;
+ iov.iov_base = &iov_buf;
iov.iov_len = 1;
#ifdef SCM_CREDENTIALS
@@ -422,9 +426,9 @@ JNIEXPORT jbyte JNICALL Java_cx_ath_matthew_unix_UnixSocket_native_1recv_1creds
recvmsg(sock, &msg, 0);
#ifdef SCM_CREDENTIALS
- for (cmsg = CMSG_FIRSTHDR(&msgh);
+ for (cmsg = CMSG_FIRSTHDR(&msg);
cmsg != NULL;
- cmsg = CMSG_NXTHDR(&msgh,cmsg)) {
+ cmsg = CMSG_NXTHDR(&msg,cmsg)) {
if (cmsg->cmsg_level == SOL_SOCKET
&& cmsg->cmsg_type == SCM_CREDENTIALS) {
creds = (struct ucred *) CMSG_DATA(cmsg);
@@ -432,11 +436,15 @@ JNIEXPORT jbyte JNICALL Java_cx_ath_matthew_unix_UnixSocket_native_1recv_1creds
}
}
if (NULL != creds) {
- (*env)->SetIntArrayRegion(env, jcreds, 0, 3, creds);
+ jint cred_array[3];
+ cred_array[0] = creds->pid;
+ cred_array[1] = creds->uid;
+ cred_array[2] = creds->gid;
+ (*env)->SetIntArrayRegion(env, jcreds, 0, 3, &cred_array[0]);
}
#endif
- return buf;
+ return iov_buf;
}