541 |
541 |
542 /* |
542 /* |
543 * Create a NetworkInterface object and populate it |
543 * Create a NetworkInterface object and populate it |
544 */ |
544 */ |
545 netifObj = (*env)->NewObject(env, ni_class, ni_ctor); |
545 netifObj = (*env)->NewObject(env, ni_class, ni_ctor); |
|
546 CHECK_NULL_RETURN(netifObj, NULL); |
546 name = (*env)->NewStringUTF(env, ifs->name); |
547 name = (*env)->NewStringUTF(env, ifs->name); |
|
548 CHECK_NULL_RETURN(name, NULL); |
547 if (ifs->dNameIsUnicode) { |
549 if (ifs->dNameIsUnicode) { |
548 displayName = (*env)->NewString(env, (PWCHAR)ifs->displayName, |
550 displayName = (*env)->NewString(env, (PWCHAR)ifs->displayName, |
549 (jsize)wcslen ((PWCHAR)ifs->displayName)); |
551 (jsize)wcslen ((PWCHAR)ifs->displayName)); |
550 } else { |
552 } else { |
551 displayName = (*env)->NewStringUTF(env, ifs->displayName); |
553 displayName = (*env)->NewStringUTF(env, ifs->displayName); |
552 } |
554 } |
553 if (netifObj == NULL || name == NULL || displayName == NULL) { |
555 CHECK_NULL_RETURN(displayName, NULL); |
554 return NULL; |
|
555 } |
|
556 (*env)->SetObjectField(env, netifObj, ni_nameID, name); |
556 (*env)->SetObjectField(env, netifObj, ni_nameID, name); |
557 (*env)->SetObjectField(env, netifObj, ni_displayNameID, displayName); |
557 (*env)->SetObjectField(env, netifObj, ni_displayNameID, displayName); |
558 (*env)->SetIntField(env, netifObj, ni_indexID, ifs->index); |
558 (*env)->SetIntField(env, netifObj, ni_indexID, ifs->index); |
559 |
559 |
560 /* |
560 /* |
680 return NULL; |
680 return NULL; |
681 } |
681 } |
682 |
682 |
683 /* get the name as a C string */ |
683 /* get the name as a C string */ |
684 name_utf = (*env)->GetStringUTFChars(env, name, &isCopy); |
684 name_utf = (*env)->GetStringUTFChars(env, name, &isCopy); |
685 |
685 if (name_utf != NULL) { |
686 /* Search by name */ |
686 |
687 curr = ifList; |
687 /* Search by name */ |
688 while (curr != NULL) { |
688 curr = ifList; |
689 if (strcmp(name_utf, curr->name) == 0) { |
689 while (curr != NULL) { |
690 break; |
690 if (strcmp(name_utf, curr->name) == 0) { |
691 } |
691 break; |
692 curr = curr->next; |
692 } |
693 } |
693 curr = curr->next; |
694 |
694 } |
695 /* if found create a NetworkInterface */ |
695 |
696 if (curr != NULL) {; |
696 /* if found create a NetworkInterface */ |
697 netifObj = createNetworkInterface(env, curr, -1, NULL); |
697 if (curr != NULL) {; |
698 } |
698 netifObj = createNetworkInterface(env, curr, -1, NULL); |
699 |
699 } |
700 /* release the UTF string */ |
700 |
701 (*env)->ReleaseStringUTFChars(env, name, name_utf); |
701 /* release the UTF string */ |
|
702 (*env)->ReleaseStringUTFChars(env, name, name_utf); |
|
703 } else { |
|
704 if (!(*env)->ExceptionCheck(env)) |
|
705 JNU_ThrowOutOfMemoryError(env, NULL); |
|
706 } |
702 |
707 |
703 /* release the interface list */ |
708 /* release the interface list */ |
704 free_netif(ifList); |
709 free_netif(ifList); |
705 |
710 |
706 return netifObj; |
711 return netifObj; |