JAVA_OBJECT xmlvm_create_java_string_from_pool(int pool_id) { if (stringConstants == JAVA_NULL) { // TODO: use XMLVM_ATOMIC_MALLOC? stringConstants = XMLVM_MALLOC(xmlvm_constant_pool_size * sizeof(JAVA_OBJECT)); XMLVM_BZERO(stringConstants, xmlvm_constant_pool_size * sizeof(JAVA_OBJECT)); } if (stringConstants[pool_id] != JAVA_NULL) { return stringConstants[pool_id]; } java_lang_String* str = __NEW_java_lang_String(); org_xmlvm_runtime_XMLVMArray* charArray = XMLVMArray_createSingleDimensionWithData(__CLASS_char, xmlvm_constant_pool_length[pool_id], (JAVA_OBJECT) xmlvm_constant_pool_data[pool_id]); java_lang_String___INIT____char_1ARRAY(str, charArray); JAVA_OBJECT poolStr = XMLVMUtil_getFromStringPool(str); stringConstants[pool_id] = poolStr; return poolStr; }
void xmlvm_clear_constant_pool_cache() { XMLVM_BZERO(stringConstants, xmlvm_constant_pool_size * sizeof(JAVA_OBJECT)); }
I_32 hysock_sockaddr_init6 (hysockaddr_t handle, U_8 * addr, I_32 addrlength, I_16 family, U_16 nPort, U_32 flowinfo, U_32 scope_id, hysocket_t sock) { OSSOCKADDR *sockaddr; #if defined(IPv6_FUNCTION_SUPPORT) OSSOCKADDR_IN6 *sockaddr_6; #endif XMLVM_BZERO(handle, sizeof (struct hysockaddr_struct)); if (family == HYADDR_FAMILY_AFINET4) { #if defined(IPv6_FUNCTION_SUPPORT) if (hysock_socketIsValid (portLibrary, sock) && (((struct hysocket_struct *) sock)->family == HYADDR_FAMILY_AFINET6)) { /* to talk IPv4 on an IPv6 socket we need to map the IPv4 address to an IPv6 format. If mapAddress is true then we do this */ sockaddr_6 = (OSSOCKADDR_IN6 *) & handle->addr; memset (sockaddr_6->sin6_addr.s6_addr, 0, 16); memcpy (&(sockaddr_6->sin6_addr.s6_addr[12]), addr, addrlength); /* do a check if it is the any address. we know the top 4 bytes of sockaddr_6->sin6_addr.s6_addr are 0's as we just cleared the, so we use them to do the check */ if (memcmp (sockaddr_6->sin6_addr.s6_addr, addr, addrlength) != 0) { /* if it is the any address then use the IPv6 any address */ sockaddr_6->sin6_addr.s6_addr[10] = 0xFF; sockaddr_6->sin6_addr.s6_addr[11] = 0xFF; } sockaddr_6->sin6_port = nPort; sockaddr_6->sin6_family = OS_AF_INET6; sockaddr_6->sin6_scope_id = scope_id; sockaddr_6->sin6_flowinfo = htonl (flowinfo); #if defined(FREEBSD) sockaddr_6->sin6_len = sizeof(OSSOCKADDR_IN6); #endif } else { #endif /* just initialize the IPv4 address as is as it will be used with an IPv4 Socket */ sockaddr = (OSSOCKADDR *) & handle->addr; XMLVM_MEMCPY (&sockaddr->sin_addr.s_addr, addr, addrlength); sockaddr->sin_port = nPort; sockaddr->sin_family = OS_AF_INET4; #if defined(FREEBSD) sockaddr->sin_len = sizeof(OSSOCKADDR); #endif #if defined(IPv6_FUNCTION_SUPPORT) } #endif } #if defined(IPv6_FUNCTION_SUPPORT) else if (family == HYADDR_FAMILY_AFINET6) { sockaddr_6 = (OSSOCKADDR_IN6 *) & handle->addr; memcpy (&sockaddr_6->sin6_addr.s6_addr, addr, addrlength); sockaddr_6->sin6_port = nPort; sockaddr_6->sin6_family = OS_AF_INET6; sockaddr_6->sin6_scope_id = scope_id; sockaddr_6->sin6_flowinfo = htonl (flowinfo); #if defined(SIN6_LEN) sockaddr_6->sin6_len = sizeof(OSSOCKADDR_IN6); #endif } #endif else { sockaddr = (OSSOCKADDR *) & handle->addr; memcpy (&sockaddr->sin_addr.s_addr, addr, HYSOCK_INADDR_LEN); sockaddr->sin_port = nPort; sockaddr->sin_family = map_addr_family_Hy_to_OS (family); #if defined(FREEBSD) sockaddr->sin_len = sizeof(OSSOCKADDR); #endif } return 0; }