equal
deleted
inserted
replaced
88 |
88 |
89 extern jclass udsa_class; |
89 extern jclass udsa_class; |
90 extern jmethodID udsa_ctorID; |
90 extern jmethodID udsa_ctorID; |
91 extern jfieldID udsa_pathID; |
91 extern jfieldID udsa_pathID; |
92 |
92 |
|
93 #define PATHLEN(len) (len - offsetof(struct sockaddr_un, sun_path)) |
|
94 |
93 JNIEXPORT jobject JNICALL |
95 JNIEXPORT jobject JNICALL |
94 NET_SockaddrToUnixAddress(JNIEnv *env, struct sockaddr_un *sa) { |
96 NET_SockaddrToUnixAddress(JNIEnv *env, struct sockaddr_un *sa, socklen_t len) { |
95 |
97 |
96 if (sa->sun_family == AF_UNIX) { |
98 if (sa->sun_family == AF_UNIX) { |
97 char *name = sa->sun_path; |
99 char *name; |
98 |
100 |
|
101 if (PATHLEN(len) == 0) { |
|
102 name = ""; |
|
103 } else { |
|
104 name = sa->sun_path; |
|
105 } |
99 jstring nstr = JNU_NewStringPlatform(env, name); |
106 jstring nstr = JNU_NewStringPlatform(env, name); |
100 return (*env)->NewObject(env, udsa_class, udsa_ctorID, nstr); |
107 return (*env)->NewObject(env, udsa_class, udsa_ctorID, nstr); |
101 } |
108 } |
102 return NULL; |
109 return NULL; |
103 } |
110 } |
220 return IOS_THROWN; |
227 return IOS_THROWN; |
221 } |
228 } |
222 |
229 |
223 setfdval(env, newfdo, newfd); |
230 setfdval(env, newfdo, newfd); |
224 |
231 |
225 usa = NET_SockaddrToUnixAddress(env, &sa); |
232 usa = NET_SockaddrToUnixAddress(env, &sa, sa_len); |
226 CHECK_NULL_RETURN(usa, IOS_THROWN); |
233 CHECK_NULL_RETURN(usa, IOS_THROWN); |
227 |
234 |
228 (*env)->SetObjectArrayElement(env, usaa, 0, usa); |
235 (*env)->SetObjectArrayElement(env, usaa, 0, usa); |
229 |
236 |
230 return 1; |
237 return 1; |
237 socklen_t sa_len = sizeof(sa); |
244 socklen_t sa_len = sizeof(sa); |
238 if (getsockname(fdval(env, fdo), (struct sockaddr *)&sa, &sa_len) < 0) { |
245 if (getsockname(fdval(env, fdo), (struct sockaddr *)&sa, &sa_len) < 0) { |
239 handleSocketError(env, errno); |
246 handleSocketError(env, errno); |
240 return NULL; |
247 return NULL; |
241 } |
248 } |
242 return NET_SockaddrToUnixAddress(env, &sa); |
249 return NET_SockaddrToUnixAddress(env, &sa, sa_len); |
243 } |
250 } |
244 |
251 |
245 JNIEXPORT void JNICALL |
252 JNIEXPORT void JNICALL |
246 Java_sun_nio_ch_Net_initIDs(JNIEnv *env, jclass clazz) |
253 Java_sun_nio_ch_Net_initIDs(JNIEnv *env, jclass clazz) |
247 { |
254 { |