KNI_RETURNTYPE_OBJECT KNIDECL(com_sun_midp_security_Permissions_loadGroupList) { int lines, i1; void* array; KNI_StartHandles(2); KNI_DeclareHandle(groups); KNI_DeclareHandle(tmpString); lines = permissions_load_group_list(&array); if (lines > 0) { char** list = (char**)array; SNI_NewArray(SNI_STRING_ARRAY, lines, groups); if (KNI_IsNullHandle(groups)) KNI_ThrowNew(midpOutOfMemoryError, NULL); else for (i1 = 0; i1 < lines; i1++) { KNI_NewStringUTF(list[i1], tmpString); KNI_SetObjectArrayElement(groups, (jint)i1, tmpString); } permissions_dealloc(array); } else KNI_ReleaseHandle(groups); /* set object to NULL */ KNI_EndHandlesAndReturnObject(groups); }
KNI_RETURNTYPE_OBJECT KNIDECL(com_sun_midp_security_Permissions_loadGroupPermissions) { int lines, i1; unsigned int str_len; void *array; jchar jbuff[64]; char group_name[64]; KNI_StartHandles(3); KNI_DeclareHandle(members); KNI_DeclareHandle(tmpString); KNI_DeclareHandle(group); KNI_GetParameterAsObject(1, group); if (!KNI_IsNullHandle(group)) { str_len = KNI_GetStringLength(group); if (str_len <= sizeof(group_name)-1) { KNI_GetStringRegion(group, 0, str_len, jbuff); jchar_to_char(jbuff, group_name, str_len); lines = permissions_load_group_permissions(&array, group_name); if (lines > 0) { char **list = (char**)array; SNI_NewArray(SNI_STRING_ARRAY, lines, members); if (KNI_IsNullHandle(members)) KNI_ThrowNew(midpOutOfMemoryError, NULL); else for (i1 = 0; i1 < lines; i1++) { KNI_NewStringUTF(list[i1], tmpString); KNI_SetObjectArrayElement(members, (jint)i1, tmpString); } permissions_dealloc(array); } else KNI_ReleaseHandle(members); /* set object to NULL */ } } else KNI_ThrowNew(midpNullPointerException, "null group parameter"); KNI_EndHandlesAndReturnObject(members); }
void JSR239_getGraphicsSource(jobject graphicsHandle, jobject resultHandle) { #ifdef DEBUG printf("JSR239_getGraphicsSource\n"); #endif (void)graphicsHandle; KNI_StartHandles(1); KNI_DeclareHandle(sourceHandle); // IMPL_NOTE: retrieve real source handle KNI_ReleaseHandle(sourceHandle); KNI_SetObjectArrayElement(resultHandle, 0, sourceHandle); #ifdef DEBUG printf("getGraphicsWidth: source = 0x%x\n", sourceHandle); #endif KNI_EndHandles(); }
/** * Copy a native Invocation to the supplied Invocation instance. * @param invoc the native InvocStore * @param mode the mode of copyout * @param invocObj the Invocation object to copy to * @param argsObj an object to use to refer to the arguments array * @param obj a temporary object handle * @return 0 if there were problems allocating Java Strings; * 1 if all the copies succeeded; * -1 if the Java Arrays allocated for args or data were insufficient */ static int copyOut(StoredInvoc *invoc, int mode, jobject invocObj, jobject argsObj, jobject obj) { int datalen = 0; int arraylen = 0; /* Set the required lengths for args and data arrays. */ KNI_SetIntField(invocObj, argsLenFid, invoc->argsLen); KNI_SetIntField(invocObj, dataLenFid, invoc->dataLen); /* Check if size of argument array and data array are correct. */ KNI_GetObjectField(invocObj, dataFid, obj); datalen = KNI_GetArrayLength(obj); if (datalen != invoc->dataLen) { /* Data array allocated by Java is not correct size. */ return -1; } KNI_GetObjectField(invocObj, argumentsFid, obj); arraylen = KNI_GetArrayLength(obj); if (arraylen != invoc->argsLen) { /* Args array allocated by Java is not correct size. */ return -1; } /* Copy out all the string fields. */ if (!(storeField(&invoc->url, invocObj, urlFid, obj) && storeField(&invoc->type, invocObj, typeFid, obj) && storeField(&invoc->action, invocObj, actionFid, obj) && storeField(&invoc->ID, invocObj, IDFid, obj) && storeField(&invoc->invokingClassname, invocObj, invokingClassnameFid, obj) && storeField(&invoc->invokingAuthority, invocObj, invokingAuthorityFid, obj) && storeField(&invoc->invokingAppName, invocObj, invokingAppNameFid, obj) && storeField(&invoc->invokingID, invocObj, invokingIDFid, obj) && storeField(&invoc->username, invocObj, usernameFid, obj) && storeField(&invoc->password, invocObj, passwordFid, obj))) { /* Some String allocation failed. */ return 0; } KNI_SetIntField(invocObj, invokingSuiteIdFid, invoc->invokingSuiteId); /* See if the suite and classname are needed. */ if (mode == MODE_TID || mode == MODE_TID_PREV || mode == MODE_TID_NEXT) { if (!storeField(&invoc->classname, invocObj, classnameFid, obj)) { /* A string allocation failed. */ return 0; } KNI_SetIntField(invocObj, suiteIdFid, invoc->suiteId); } /* Return the arguments if any; array length already checked. */ if (invoc->argsLen > 0) { int ndx; pcsl_string* args; /* For each stored arg create a string and store in the array. * No stored arg is null. If a string cannot be created * it is due to insufficient heap memory. */ KNI_GetObjectField(invocObj, argumentsFid, argsObj); args = invoc->args; for (ndx = 0; ndx < invoc->argsLen; ndx++, args++) { if (!pcsl_string_is_null(args)) { if (PCSL_STRING_OK != midp_jstring_from_pcsl_string(args, obj)) { /* String create failed; exit now. */ return 0; } } else { KNI_ReleaseHandle(obj); } KNI_SetObjectArrayElement(argsObj, ndx, obj); } } /* Return the data array if any; array length was already checked. */ if (invoc->dataLen > 0) { KNI_GetObjectField(invocObj, dataFid, obj); KNI_SetRawArrayRegion(obj, 0, invoc->dataLen, invoc->data); } KNI_SetBooleanField(invocObj, responseRequiredFid, invoc->responseRequired); KNI_SetIntField(invocObj, statusFid, invoc->status); KNI_SetIntField(invocObj, tidFid, invoc->tid); KNI_SetIntField(invocObj, previousTidFid, invoc->previousTid); /* Successful copy out. */ return 1; }
KNIEXPORT KNI_RETURNTYPE_OBJECT KNIDECL(com_sun_midp_chameleon_skins_resources_LoadedSkinData_readStringArray) { int arrayLength; int i; KNI_StartHandles(2); KNI_DeclareHandle(returnArray); KNI_DeclareHandle(stringHandle); do { /* * First, read array length */ ENSURE_SKIN_DATA_AVAILABILITY(sizeof(jint)); memcpy((void*)&arrayLength, (void*)gsSkinFileDataPos, sizeof(jint)); gsSkinFileDataPos += sizeof(jint); /* * Then create array */ SNI_NewArray(SNI_STRING_ARRAY, arrayLength, returnArray); if (KNI_IsNullHandle(returnArray)) { KNI_ThrowNew(midpOutOfMemoryError, NULL); break; } /* * And finally populate it with strings */ for (i = 0; i < arrayLength; ++i) { unsigned char dataLength; unsigned char encoding; /* read data length */ ENSURE_SKIN_DATA_AVAILABILITY(sizeof(char)); dataLength = *((unsigned char*)gsSkinFileDataPos); gsSkinFileDataPos += 1; /* read encoding */ ENSURE_SKIN_DATA_AVAILABILITY(sizeof(char)); encoding = *((unsigned char*)gsSkinFileDataPos); gsSkinFileDataPos += 1; ENSURE_SKIN_DATA_AVAILABILITY(dataLength * sizeof(char)); if (encoding == STRING_ENCODING_USASCII) { int j; /* * In case of USASCII encoding, each byte of * string data corresponds to one string char */ int stringLength = dataLength; /* use gKNIBuffer for storing string chars */ jchar* stringChars = (jchar*)gKNIBuffer; /* * Safety measure to prevent gKNIBuffer overflow * (which should never happens unless something is broken) */ if (stringLength > (int)(KNI_BUFFER_SIZE/sizeof(jchar))) { stringLength = (int)(KNI_BUFFER_SIZE/sizeof(jchar)); REPORT_WARN(LC_HIGHUI, "gKNIBuffer is too small for skin string"); } /* fill string chars array */ for (j = 0; j < stringLength; ++j) { stringChars[j] = gsSkinFileDataPos[j]; } /* and create string from it */ KNI_NewString(stringChars, stringLength, stringHandle); } else if (encoding == STRING_ENCODING_UTF8) { KNI_NewStringUTF((char*)gsSkinFileDataPos, stringHandle); } else { KNI_ThrowNew(midpIllegalStateException, "Illegal skin string encoding"); break; } KNI_SetObjectArrayElement(returnArray, i, stringHandle); gsSkinFileDataPos += dataLength; } } while (0); KNI_EndHandlesAndReturnObject(returnArray); }