src/java.base/windows/native/libnio/ch/Net.c
branchunixdomainchannels
changeset 59082 5e250ee9259e
parent 59019 dafa6389ed47
child 59090 fb91b01624be
equal deleted inserted replaced
59079:7893d1012580 59082:5e250ee9259e
    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 {