Mercurial > hg > graal-compiler
comparison src/share/vm/prims/jniCheck.cpp @ 13102:f9f4503a4ab5
Merge
author | Christos Kotselidis <christos.kotselidis@oracle.com> |
---|---|
date | Thu, 21 Nov 2013 15:04:54 +0100 |
parents | f9be370a7d54 |
children | de6a9e811145 |
comparison
equal
deleted
inserted
replaced
13101:790ebab62d23 | 13102:f9f4503a4ab5 |
---|---|
1322 jboolean *isCopy)) | 1322 jboolean *isCopy)) |
1323 functionEnter(thr); | 1323 functionEnter(thr); |
1324 IN_VM( | 1324 IN_VM( |
1325 checkString(thr, str); | 1325 checkString(thr, str); |
1326 ) | 1326 ) |
1327 jchar* newResult = NULL; | |
1327 const jchar *result = UNCHECKED()->GetStringChars(env,str,isCopy); | 1328 const jchar *result = UNCHECKED()->GetStringChars(env,str,isCopy); |
1328 assert (isCopy == NULL || *isCopy == JNI_TRUE, "GetStringChars didn't return a copy as expected"); | 1329 assert (isCopy == NULL || *isCopy == JNI_TRUE, "GetStringChars didn't return a copy as expected"); |
1329 | 1330 if (result != NULL) { |
1330 size_t len = UNCHECKED()->GetStringLength(env,str) + 1; // + 1 for NULL termination | 1331 size_t len = UNCHECKED()->GetStringLength(env,str) + 1; // + 1 for NULL termination |
1331 jint* tagLocation = (jint*) AllocateHeap(len * sizeof(jchar) + sizeof(jint), mtInternal); | 1332 jint* tagLocation = (jint*) AllocateHeap(len * sizeof(jchar) + sizeof(jint), mtInternal); |
1332 *tagLocation = STRING_TAG; | 1333 *tagLocation = STRING_TAG; |
1333 jchar* newResult = (jchar*) (tagLocation + 1); | 1334 newResult = (jchar*) (tagLocation + 1); |
1334 memcpy(newResult, result, len * sizeof(jchar)); | 1335 memcpy(newResult, result, len * sizeof(jchar)); |
1335 // Avoiding call to UNCHECKED()->ReleaseStringChars() since that will fire unexpected dtrace probes | 1336 // Avoiding call to UNCHECKED()->ReleaseStringChars() since that will fire unexpected dtrace probes |
1336 // Note that the dtrace arguments for the allocated memory will not match up with this solution. | 1337 // Note that the dtrace arguments for the allocated memory will not match up with this solution. |
1337 FreeHeap((char*)result); | 1338 FreeHeap((char*)result); |
1338 | 1339 } |
1339 functionExit(env); | 1340 functionExit(env); |
1340 return newResult; | 1341 return newResult; |
1341 JNI_END | 1342 JNI_END |
1342 | 1343 |
1343 JNI_ENTRY_CHECKED(void, | 1344 JNI_ENTRY_CHECKED(void, |
1392 jboolean *isCopy)) | 1393 jboolean *isCopy)) |
1393 functionEnter(thr); | 1394 functionEnter(thr); |
1394 IN_VM( | 1395 IN_VM( |
1395 checkString(thr, str); | 1396 checkString(thr, str); |
1396 ) | 1397 ) |
1398 char* newResult = NULL; | |
1397 const char *result = UNCHECKED()->GetStringUTFChars(env,str,isCopy); | 1399 const char *result = UNCHECKED()->GetStringUTFChars(env,str,isCopy); |
1398 assert (isCopy == NULL || *isCopy == JNI_TRUE, "GetStringUTFChars didn't return a copy as expected"); | 1400 assert (isCopy == NULL || *isCopy == JNI_TRUE, "GetStringUTFChars didn't return a copy as expected"); |
1399 | 1401 if (result != NULL) { |
1400 size_t len = strlen(result) + 1; // + 1 for NULL termination | 1402 size_t len = strlen(result) + 1; // + 1 for NULL termination |
1401 jint* tagLocation = (jint*) AllocateHeap(len + sizeof(jint), mtInternal); | 1403 jint* tagLocation = (jint*) AllocateHeap(len + sizeof(jint), mtInternal); |
1402 *tagLocation = STRING_UTF_TAG; | 1404 *tagLocation = STRING_UTF_TAG; |
1403 char* newResult = (char*) (tagLocation + 1); | 1405 newResult = (char*) (tagLocation + 1); |
1404 strcpy(newResult, result); | 1406 strcpy(newResult, result); |
1405 // Avoiding call to UNCHECKED()->ReleaseStringUTFChars() since that will fire unexpected dtrace probes | 1407 // Avoiding call to UNCHECKED()->ReleaseStringUTFChars() since that will fire unexpected dtrace probes |
1406 // Note that the dtrace arguments for the allocated memory will not match up with this solution. | 1408 // Note that the dtrace arguments for the allocated memory will not match up with this solution. |
1407 FreeHeap((char*)result, mtInternal); | 1409 FreeHeap((char*)result, mtInternal); |
1408 | 1410 } |
1409 functionExit(env); | 1411 functionExit(env); |
1410 return newResult; | 1412 return newResult; |
1411 JNI_END | 1413 JNI_END |
1412 | 1414 |
1413 JNI_ENTRY_CHECKED(void, | 1415 JNI_ENTRY_CHECKED(void, |