コード例 #1
0
ByteArray* Java_java_net_NetworkInterface_getIpv6Addresses(Env* env, JClass* cls, Object* interfaceName) {
    const char* name = rvmGetStringUTFChars(env, interfaceName);
    if (!name) {
        return NULL;
    }
    jint count = 0;
    if (!iterateAddrInfo(env, name, countIpv6AddressesIterator, &count)) {
        return NULL;
    }

    if (count == 0) {
        return NULL;
    }

    ByteArray* result = rvmNewByteArray(env, 16 * 2 * count);
    if (!result) {
        return NULL;
    }

    GetIpv6AddressesData data = {result, 0};
    if (!iterateAddrInfo(env, name, getIpv6AddressesIterator, &data)) {
        return NULL;
    }
    return result;
}
コード例 #2
0
jint Java_java_net_NetworkInterface_getInterfaceIndex(Env* env, JClass* cls, Object* interfaceName) {
    const char* name = rvmGetStringUTFChars(env, interfaceName);
    if (!name) {
        return 0;
    }
    return if_nametoindex(name);
}
コード例 #3
0
void Java_java_lang_Runtime_nativeLoad(Env* env, Class* clazz, Object* filename, ClassLoader* classLoader) {
    if (!env->vm->options->dynamicJNI) {
        // Static JNI. Just return. If the library is available it has already been linked in statically.
        return;
    }
    char* path = rvmGetStringUTFChars(env, filename);
    if (!path) return;
    rvmLoadNativeLibrary(env, path, classLoader);
}
コード例 #4
0
ファイル: java_lang_System.c プロジェクト: black1987/robovm
Object* Java_java_lang_System_mapLibraryName0(Env* env, Class* c, Object* userLibName) {
    if (!userLibName) return NULL;
    char* libName = rvmGetStringUTFChars(env, userLibName);
    if (!libName) return NULL;
    char* result = rvmAllocateMemoryAtomic(env, strlen(libName) + strlen(DSO_PREFIX) + strlen(DSO_EXT) + 1);
    if (!result) return NULL;
    strcpy(result, DSO_PREFIX);
    strcat(result, libName);
    strcat(result, DSO_EXT);
    return rvmNewStringUTF(env, result, -1);
}
コード例 #5
0
char* toBinaryName(Env* env, Object* className) {
    if (!className) {
        rvmThrowNew(env, java_lang_NullPointerException, "className");
        return NULL;
    }
    char* classNameUTF = rvmGetStringUTFChars(env, className);
    if (!classNameUTF) return NULL;
    jint i;
    for (i = 0; classNameUTF[i] != '\0'; i++) {
        if (classNameUTF[i] == '.') classNameUTF[i] = '/';
    }
    return classNameUTF;
}
コード例 #6
0
ByteArray* Java_java_net_NetworkInterface_getHardwareAddress(Env* env, JClass* cls, Object* interfaceName) {
    const char* name = rvmGetStringUTFChars(env, interfaceName);
    if (!name) {
        return NULL;
    }
    ByteArray* result = NULL;
#if defined(DARWIN)
    // Darwin doesn't have SIOCGIFHWADDR so we need to use getifaddrs() instead.
    iterateAddrInfo(env, name, getHardwareAddressIterator, &result);
#else
    struct ifreq ifreq;
    if (!ioctl_ifreq(env, interfaceName, &ifreq, SIOCGIFHWADDR)) {
        return NULL;
    }
    if (ifreq.ifr_hwaddr.sa_family == ARPHRD_ETHER) {
        result = rvmNewByteArray(env, 6);
        if (result) {
            memcpy(result->values, ifreq.ifr_hwaddr.sa_data, 6);
        }
    }
#endif
    return result;
}
コード例 #7
0
static jboolean ioctl_ifreq(Env* env, Object* interfaceName, struct ifreq* ifreq, int request) {
    const char* name = rvmGetStringUTFChars(env, interfaceName);
    if (!name) {
        return FALSE;
    }

    int sock = socket(AF_INET, SOCK_DGRAM, 0);
    if (sock < 0) {
        throwSocketExceptionErrno(env, errno);
        return FALSE;
    }

    memset(ifreq, 0, sizeof(struct ifreq));
    strcpy(ifreq->ifr_name, name);
    if (ioctl(sock, request, ifreq) < 0) {
        close(sock);
        throwSocketExceptionErrno(env, errno);
        return FALSE;
    }
    close(sock);

    return TRUE;

}
コード例 #8
0
ファイル: aura_rt_VM.c プロジェクト: Zubnix/aura
jlong Java_aura_rt_VM_getStringUTFChars(Env* env, Class* c, Object* s) {
    return PTR_TO_LONG(rvmGetStringUTFChars(env, s));
}
コード例 #9
0
static const char* GetStringUTFChars(JNIEnv* env, jstring str, jboolean* isCopy) {
    if (isCopy) *isCopy = JNI_TRUE;
    return rvmGetStringUTFChars((Env*) env, (Object*) str);
}