Merge "More JNI exception-throwing cleanup."

This commit is contained in:
Elliott Hughes
2011-04-08 16:15:26 -07:00
committed by Android (Google) Code Review
16 changed files with 403 additions and 475 deletions

View File

@@ -176,7 +176,8 @@ LOCAL_C_INCLUDES += \
external/icu4c/common \
external/jpeg \
external/harfbuzz/src \
frameworks/opt/emoji
frameworks/opt/emoji \
libcore/include
LOCAL_SHARED_LIBRARIES := \
libexpat \

View File

@@ -11,7 +11,7 @@
#include <android_runtime/AndroidRuntime.h>
void doThrowNPE(JNIEnv* env) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
}
void doThrowAIOOBE(JNIEnv* env) {
@@ -19,7 +19,7 @@ void doThrowAIOOBE(JNIEnv* env) {
}
void doThrowRE(JNIEnv* env, const char* msg) {
jniThrowException(env, "java/lang/RuntimeException", msg);
jniThrowRuntimeException(env, msg);
}
void doThrowIAE(JNIEnv* env, const char* msg) {

View File

@@ -30,7 +30,7 @@
extern void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds,
const SkBitmap& bitmap, const android::Res_png_9patch& chunk,
const SkPaint* paint, SkRegion** outRegion);
using namespace android;
class SkNinePatchGlue {
@@ -58,8 +58,7 @@ public:
static void validateNinePatchChunk(JNIEnv* env, jobject, jint, jbyteArray obj)
{
if (env->GetArrayLength(obj) < (int) (sizeof(Res_png_9patch))) {
jniThrowException(env, "java/lang/RuntimeException",
"Array too small for chunk.");
jniThrowRuntimeException(env, "Array too small for chunk.");
return;
}
@@ -80,7 +79,7 @@ public:
assert(chunkSize == chunk->serializedSize());
// this relies on deserialization being done in place
Res_png_9patch::deserialize(chunk);
if (destDensity == srcDensity || destDensity == 0
|| srcDensity == 0) {
LOGV("Drawing unscaled 9-patch: (%g,%g)-(%g,%g)",
@@ -89,26 +88,26 @@ public:
NinePatch_Draw(canvas, bounds, *bitmap, *chunk, paint, NULL);
} else {
canvas->save();
SkScalar scale = SkFloatToScalar(destDensity / (float)srcDensity);
canvas->translate(bounds.fLeft, bounds.fTop);
canvas->scale(scale, scale);
bounds.fRight = SkScalarDiv(bounds.fRight-bounds.fLeft, scale);
bounds.fBottom = SkScalarDiv(bounds.fBottom-bounds.fTop, scale);
bounds.fLeft = bounds.fTop = 0;
LOGV("Drawing scaled 9-patch: (%g,%g)-(%g,%g) srcDensity=%d destDensity=%d",
SkScalarToFloat(bounds.fLeft), SkScalarToFloat(bounds.fTop),
SkScalarToFloat(bounds.fRight), SkScalarToFloat(bounds.fBottom),
srcDensity, destDensity);
NinePatch_Draw(canvas, bounds, *bitmap, *chunk, paint, NULL);
canvas->restore();
}
}
}
}
static void drawF(JNIEnv* env, jobject, SkCanvas* canvas, jobject boundsRectF,
const SkBitmap* bitmap, jbyteArray chunkObj, const SkPaint* paint,
@@ -125,7 +124,7 @@ public:
draw(env, canvas, bounds, bitmap, chunkObj, paint, destDensity, srcDensity);
}
static void drawI(JNIEnv* env, jobject, SkCanvas* canvas, jobject boundsRect,
const SkBitmap* bitmap, jbyteArray chunkObj, const SkPaint* paint,
jint destDensity, jint srcDensity)
@@ -140,7 +139,7 @@ public:
GraphicsJNI::jrect_to_rect(env, boundsRect, &bounds);
draw(env, canvas, bounds, bitmap, chunkObj, paint, destDensity, srcDensity);
}
static jint getTransparentRegion(JNIEnv* env, jobject,
const SkBitmap* bitmap, jbyteArray chunkObj,
jobject boundsRect)
@@ -148,7 +147,7 @@ public:
SkASSERT(bitmap);
SkASSERT(chunkObj);
SkASSERT(boundsRect);
SkRect bounds;
GraphicsJNI::jrect_to_rect(env, boundsRect, &bounds);
size_t chunkSize = env->GetArrayLength(chunkObj);
@@ -179,7 +178,7 @@ static JNINativeMethod gNinePatchMethods[] = {
{ "validateNinePatchChunk", "(I[B)V", (void*)SkNinePatchGlue::validateNinePatchChunk },
{ "nativeDraw", "(ILandroid/graphics/RectF;I[BIII)V", (void*)SkNinePatchGlue::drawF },
{ "nativeDraw", "(ILandroid/graphics/Rect;I[BIII)V", (void*)SkNinePatchGlue::drawI },
{ "nativeGetTransparentRegion", "(I[BLandroid/graphics/Rect;)I",
{ "nativeGetTransparentRegion", "(I[BLandroid/graphics/Rect;)I",
(void*)SkNinePatchGlue::getTransparentRegion }
};

View File

@@ -105,7 +105,7 @@ sp<Camera> get_native_camera(JNIEnv *env, jobject thiz, JNICameraContext** pCont
}
LOGV("get_native_camera: context=%p, camera=%p", context, camera.get());
if (camera == 0) {
jniThrowException(env, "java/lang/RuntimeException", "Method called after release()");
jniThrowRuntimeException(env, "Method called after release()");
}
if (pContext != NULL) *pContext = context;
@@ -232,8 +232,7 @@ void JNICameraContext::copyAndPost(JNIEnv* env, const sp<IMemory>& dataPtr, int
break;
}
default: {
jniThrowException(env,
"java/lang/RuntimeException", "Unsupported message type");
jniThrowRuntimeException(env, "Unsupported message type");
return;
}
}
@@ -391,8 +390,7 @@ static void android_hardware_Camera_getCameraInfo(JNIEnv *env, jobject thiz,
CameraInfo cameraInfo;
status_t rc = Camera::getCameraInfo(cameraId, &cameraInfo);
if (rc != NO_ERROR) {
jniThrowException(env, "java/lang/RuntimeException",
"Fail to get camera info");
jniThrowRuntimeException(env, "Fail to get camera info");
return;
}
env->SetIntField(info_obj, fields.facing, cameraInfo.facing);
@@ -406,20 +404,19 @@ static void android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz,
sp<Camera> camera = Camera::connect(cameraId);
if (camera == NULL) {
jniThrowException(env, "java/lang/RuntimeException",
"Fail to connect to camera service");
jniThrowRuntimeException(env, "Fail to connect to camera service");
return;
}
// make sure camera hardware is alive
if (camera->getStatus() != NO_ERROR) {
jniThrowException(env, "java/lang/RuntimeException", "Camera initialization failed");
jniThrowRuntimeException(env, "Camera initialization failed");
return;
}
jclass clazz = env->GetObjectClass(thiz);
if (clazz == NULL) {
jniThrowException(env, "java/lang/RuntimeException", "Can't find android/hardware/Camera");
jniThrowRuntimeException(env, "Can't find android/hardware/Camera");
return;
}
@@ -508,7 +505,7 @@ static void android_hardware_Camera_startPreview(JNIEnv *env, jobject thiz)
if (camera == 0) return;
if (camera->startPreview() != NO_ERROR) {
jniThrowException(env, "java/lang/RuntimeException", "startPreview failed");
jniThrowRuntimeException(env, "startPreview failed");
return;
}
}
@@ -564,7 +561,7 @@ static void android_hardware_Camera_autoFocus(JNIEnv *env, jobject thiz)
if (c == 0) return;
if (c->autoFocus() != NO_ERROR) {
jniThrowException(env, "java/lang/RuntimeException", "autoFocus failed");
jniThrowRuntimeException(env, "autoFocus failed");
}
}
@@ -576,7 +573,7 @@ static void android_hardware_Camera_cancelAutoFocus(JNIEnv *env, jobject thiz)
if (c == 0) return;
if (c->cancelAutoFocus() != NO_ERROR) {
jniThrowException(env, "java/lang/RuntimeException", "cancelAutoFocus failed");
jniThrowRuntimeException(env, "cancelAutoFocus failed");
}
}
@@ -606,7 +603,7 @@ static void android_hardware_Camera_takePicture(JNIEnv *env, jobject thiz, int m
}
if (camera->takePicture(msgType) != NO_ERROR) {
jniThrowException(env, "java/lang/RuntimeException", "takePicture failed");
jniThrowRuntimeException(env, "takePicture failed");
return;
}
}
@@ -624,7 +621,7 @@ static void android_hardware_Camera_setParameters(JNIEnv *env, jobject thiz, jst
env->ReleaseStringCritical(params, str);
}
if (camera->setParameters(params8) != NO_ERROR) {
jniThrowException(env, "java/lang/RuntimeException", "setParameters failed");
jniThrowRuntimeException(env, "setParameters failed");
return;
}
}
@@ -657,7 +654,7 @@ static void android_hardware_Camera_lock(JNIEnv *env, jobject thiz)
if (camera == 0) return;
if (camera->lock() != NO_ERROR) {
jniThrowException(env, "java/lang/RuntimeException", "lock failed");
jniThrowRuntimeException(env, "lock failed");
}
}
@@ -668,7 +665,7 @@ static void android_hardware_Camera_unlock(JNIEnv *env, jobject thiz)
if (camera == 0) return;
if (camera->unlock() != NO_ERROR) {
jniThrowException(env, "java/lang/RuntimeException", "unlock failed");
jniThrowRuntimeException(env, "unlock failed");
}
}
@@ -684,7 +681,7 @@ static void android_hardware_Camera_startSmoothZoom(JNIEnv *env, jobject thiz, j
sprintf(msg, "invalid zoom value=%d", value);
jniThrowException(env, "java/lang/IllegalArgumentException", msg);
} else if (rc != NO_ERROR) {
jniThrowException(env, "java/lang/RuntimeException", "start smooth zoom failed");
jniThrowRuntimeException(env, "start smooth zoom failed");
}
}
@@ -695,7 +692,7 @@ static void android_hardware_Camera_stopSmoothZoom(JNIEnv *env, jobject thiz)
if (camera == 0) return;
if (camera->sendCommand(CAMERA_CMD_STOP_SMOOTH_ZOOM, 0, 0) != NO_ERROR) {
jniThrowException(env, "java/lang/RuntimeException", "stop smooth zoom failed");
jniThrowRuntimeException(env, "stop smooth zoom failed");
}
}
@@ -707,7 +704,7 @@ static void android_hardware_Camera_setDisplayOrientation(JNIEnv *env, jobject t
if (camera == 0) return;
if (camera->sendCommand(CAMERA_CMD_SET_DISPLAY_ORIENTATION, value, 0) != NO_ERROR) {
jniThrowException(env, "java/lang/RuntimeException", "set display orientation failed");
jniThrowRuntimeException(env, "set display orientation failed");
}
}

View File

@@ -85,7 +85,7 @@ android_media_JetPlayer_setup(JNIEnv *env, jobject thiz, jobject weak_this,
EAS_RESULT result = lpJet->init();
if(result==EAS_SUCCESS) {
// save our newly created C++ JetPlayer in the "nativePlayerInJavaObj" field
// save our newly created C++ JetPlayer in the "nativePlayerInJavaObj" field
// of the Java object (in mNativePlayerInJavaObj)
env->SetIntField(thiz, javaJetPlayerFields.nativePlayerInJavaObj, (int)lpJet);
return JNI_TRUE;
@@ -120,7 +120,7 @@ android_media_JetPlayer_release(JNIEnv *env, jobject thiz)
{
android_media_JetPlayer_finalize(env, thiz);
env->SetIntField(thiz, javaJetPlayerFields.nativePlayerInJavaObj, 0);
LOGV("android_media_JetPlayer_release() done");
LOGV("android_media_JetPlayer_release() done");
}
@@ -134,14 +134,13 @@ android_media_JetPlayer_loadFromFile(JNIEnv *env, jobject thiz, jstring path)
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for openFile()");
}
// set up event callback function
lpJet->setEventCallback(jetPlayerEventCallback);
const char *pathStr = env->GetStringUTFChars(path, NULL);
if (pathStr == NULL) { // Out of memory
LOGE("android_media_JetPlayer_openFile(): aborting, out of memory");
jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
return JNI_FALSE;
}
@@ -171,14 +170,14 @@ android_media_JetPlayer_loadFromFileD(JNIEnv *env, jobject thiz,
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for openFile()");
}
// set up event callback function
lpJet->setEventCallback(jetPlayerEventCallback);
LOGV("android_media_JetPlayer_openFileDescr(): trying to load JET file through its fd" );
EAS_RESULT result = lpJet->loadFromFD(getParcelFileDescriptorFD(env, fileDescriptor),
(long long)offset, (long long)length); // cast params to types used by EAS_FILE
if(result==EAS_SUCCESS) {
LOGV("android_media_JetPlayer_openFileDescr(): file successfully opened");
return JNI_TRUE;
@@ -200,7 +199,7 @@ android_media_JetPlayer_closeFile(JNIEnv *env, jobject thiz)
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for closeFile()");
}
if( lpJet->closeFile()==EAS_SUCCESS) {
//LOGV("android_media_JetPlayer_closeFile(): file successfully closed");
return JNI_TRUE;
@@ -221,13 +220,13 @@ android_media_JetPlayer_play(JNIEnv *env, jobject thiz)
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for play()");
}
EAS_RESULT result = lpJet->play();
if( result==EAS_SUCCESS) {
//LOGV("android_media_JetPlayer_play(): play successful");
return JNI_TRUE;
} else {
LOGE("android_media_JetPlayer_play(): failed to play with EAS error code %ld",
LOGE("android_media_JetPlayer_play(): failed to play with EAS error code %ld",
result);
return JNI_FALSE;
}
@@ -244,7 +243,7 @@ android_media_JetPlayer_pause(JNIEnv *env, jobject thiz)
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for pause()");
}
EAS_RESULT result = lpJet->pause();
if( result==EAS_SUCCESS) {
//LOGV("android_media_JetPlayer_pause(): pause successful");
@@ -273,7 +272,7 @@ android_media_JetPlayer_queueSegment(JNIEnv *env, jobject thiz,
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for queueSegment()");
}
EAS_RESULT result
= lpJet->queueSegment(segmentNum, libNum, repeatCount, transpose, muteFlags, userID);
if(result==EAS_SUCCESS) {
@@ -299,7 +298,7 @@ android_media_JetPlayer_queueSegmentMuteArray(JNIEnv *env, jobject thiz,
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for queueSegmentMuteArray()");
}
EAS_RESULT result=EAS_FAILURE;
jboolean *muteTracks = NULL;
@@ -326,7 +325,7 @@ android_media_JetPlayer_queueSegmentMuteArray(JNIEnv *env, jobject thiz,
//LOGV("android_media_JetPlayer_queueSegmentMuteArray(): segment successfully queued");
return JNI_TRUE;
} else {
LOGE("android_media_JetPlayer_queueSegmentMuteArray(): failed with EAS error code %ld",
LOGE("android_media_JetPlayer_queueSegmentMuteArray(): failed with EAS error code %ld",
result);
return JNI_FALSE;
}
@@ -344,7 +343,7 @@ android_media_JetPlayer_setMuteFlags(JNIEnv *env, jobject thiz,
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for setMuteFlags()");
}
EAS_RESULT result;
result = lpJet->setMuteFlags(muteFlags, bSync==JNI_TRUE ? true : false);
if(result==EAS_SUCCESS) {
@@ -368,7 +367,7 @@ android_media_JetPlayer_setMuteArray(JNIEnv *env, jobject thiz,
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for setMuteArray()");
}
EAS_RESULT result=EAS_FAILURE;
jboolean *muteTracks = NULL;
@@ -413,9 +412,9 @@ android_media_JetPlayer_setMuteFlag(JNIEnv *env, jobject thiz,
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for setMuteFlag()");
}
EAS_RESULT result;
result = lpJet->setMuteFlag(trackId,
result = lpJet->setMuteFlag(trackId,
muteFlag==JNI_TRUE ? true : false, bSync==JNI_TRUE ? true : false);
if(result==EAS_SUCCESS) {
//LOGV("android_media_JetPlayer_setMuteFlag(): mute flag successfully updated for track %d", trackId);
@@ -438,7 +437,7 @@ android_media_JetPlayer_triggerClip(JNIEnv *env, jobject thiz, jint clipId)
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for triggerClip()");
}
EAS_RESULT result;
result = lpJet->triggerClip(clipId);
if(result==EAS_SUCCESS) {
@@ -462,7 +461,7 @@ android_media_JetPlayer_clearQueue(JNIEnv *env, jobject thiz)
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for clearQueue()");
}
EAS_RESULT result = lpJet->clearQueue();
if(result==EAS_SUCCESS) {
//LOGV("android_media_JetPlayer_clearQueue(): clearQueue successful");
@@ -482,16 +481,16 @@ static JNINativeMethod gMethods[] = {
{"native_setup", "(Ljava/lang/Object;II)Z", (void *)android_media_JetPlayer_setup},
{"native_finalize", "()V", (void *)android_media_JetPlayer_finalize},
{"native_release", "()V", (void *)android_media_JetPlayer_release},
{"native_loadJetFromFile",
{"native_loadJetFromFile",
"(Ljava/lang/String;)Z", (void *)android_media_JetPlayer_loadFromFile},
{"native_loadJetFromFileD", "(Ljava/io/FileDescriptor;JJ)Z",
(void *)android_media_JetPlayer_loadFromFileD},
{"native_closeJetFile","()Z", (void *)android_media_JetPlayer_closeFile},
{"native_playJet", "()Z", (void *)android_media_JetPlayer_play},
{"native_pauseJet", "()Z", (void *)android_media_JetPlayer_pause},
{"native_queueJetSegment",
{"native_queueJetSegment",
"(IIIIIB)Z", (void *)android_media_JetPlayer_queueSegment},
{"native_queueJetSegmentMuteArray",
{"native_queueJetSegmentMuteArray",
"(IIII[ZB)Z", (void *)android_media_JetPlayer_queueSegmentMuteArray},
{"native_setMuteFlags","(IZ)Z", (void *)android_media_JetPlayer_setMuteFlags},
{"native_setMuteArray","([ZZ)Z", (void *)android_media_JetPlayer_setMuteArray},
@@ -510,7 +509,7 @@ int register_android_media_JetPlayer(JNIEnv *env)
javaJetPlayerFields.jetClass = NULL;
javaJetPlayerFields.postNativeEventInJava = NULL;
javaJetPlayerFields.nativePlayerInJavaObj = NULL;
// Get the JetPlayer java class
jetPlayerClass = env->FindClass(kClassPathName);
if (jetPlayerClass == NULL) {

View File

@@ -44,7 +44,7 @@ static jboolean android_media_ToneGenerator_startTone(JNIEnv *env, jobject thiz,
ToneGenerator *lpToneGen = (ToneGenerator *)env->GetIntField(thiz,
fields.context);
if (lpToneGen == NULL) {
jniThrowException(env, "java/lang/RuntimeException", "Method called after release()");
jniThrowRuntimeException(env, "Method called after release()");
return false;
}
@@ -59,7 +59,7 @@ static void android_media_ToneGenerator_stopTone(JNIEnv *env, jobject thiz) {
LOGV("ToneGenerator lpToneGen: %x\n", (unsigned int)lpToneGen);
if (lpToneGen == NULL) {
jniThrowException(env, "java/lang/RuntimeException", "Method called after release()");
jniThrowRuntimeException(env, "Method called after release()");
return;
}
lpToneGen->stopTone();
@@ -94,7 +94,7 @@ static void android_media_ToneGenerator_native_setup(JNIEnv *env, jobject thiz,
if (!lpToneGen->isInited()) {
LOGE("ToneGenerator init failed \n");
jniThrowException(env, "java/lang/RuntimeException", "Init failed");
jniThrowRuntimeException(env, "Init failed");
return;
}

View File

@@ -99,9 +99,9 @@ socket_connect_local(JNIEnv *env, jobject object,
#define DEFAULT_BACKLOG 4
/* private native void bindLocal(FileDescriptor fd, String name, namespace)
* throws IOException;
*/
/* private native void bindLocal(FileDescriptor fd, String name, namespace)
* throws IOException;
*/
static void
socket_bind_local (JNIEnv *env, jobject object, jobject fileDescriptor,
@@ -113,7 +113,7 @@ socket_bind_local (JNIEnv *env, jobject object, jobject fileDescriptor,
if (name == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
}
fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
@@ -127,7 +127,7 @@ socket_bind_local (JNIEnv *env, jobject object, jobject fileDescriptor,
ret = socket_local_server_bind(fd, nameUtf8, namespaceId);
env->ReleaseStringUTFChars(name, nameUtf8);
if (ret < 0) {
jniThrowIOException(env, errno);
return;
@@ -166,14 +166,14 @@ socket_accept (JNIEnv *env, jobject object, jobject fileDescriptor, jobject s)
struct sockaddr address;
struct sockaddr_un un_address;
} sa;
int ret;
int retFD;
int fd;
socklen_t addrlen;
if (s == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return NULL;
}
@@ -345,7 +345,7 @@ static void socket_setOption(
struct timeval timeout;
timeout.tv_sec = intValue / 1000;
timeout.tv_usec = (intValue % 1000) * 1000;
ret = setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO,
(void *)&timeout, sizeof(timeout));
@@ -353,7 +353,7 @@ static void socket_setOption(
ret = setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO,
(void *)&timeout, sizeof(timeout));
}
break;
}
default: {
@@ -372,7 +372,7 @@ static void socket_setOption(
}
}
static jint socket_available (JNIEnv *env, jobject object,
static jint socket_available (JNIEnv *env, jobject object,
jobject fileDescriptor)
{
int fd;
@@ -398,7 +398,7 @@ static jint socket_available (JNIEnv *env, jobject object,
return (jint)avail;
#else
// there appears to be a bionic bug that prevents this version from working.
ssize_t ret;
struct msghdr msg;
@@ -408,7 +408,7 @@ static jint socket_available (JNIEnv *env, jobject object,
ret = recvmsg(fd, &msg, MSG_PEEK | MSG_DONTWAIT | MSG_NOSIGNAL);
} while (ret < 0 && errno == EINTR);
// MSG_PEEK returns 0 on EOF and EWOULDBLOCK on none available
if (ret < 0 && errno == EWOULDBLOCK) {
return 0;
@@ -427,7 +427,7 @@ static void socket_close (JNIEnv *env, jobject object, jobject fileDescriptor)
int err;
if (fileDescriptor == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return;
}
@@ -448,7 +448,7 @@ static void socket_close (JNIEnv *env, jobject object, jobject fileDescriptor)
}
/**
* Processes ancillary data, handling only
* Processes ancillary data, handling only
* SCM_RIGHTS. Creates appropriate objects and sets appropriate
* fields in the LocalSocketImpl object. Returns 0 on success
* or -1 if an exception was thrown.
@@ -457,7 +457,7 @@ static int socket_process_cmsg(JNIEnv *env, jobject thisJ, struct msghdr * pMsg)
{
struct cmsghdr *cmsgptr;
for (cmsgptr = CMSG_FIRSTHDR(pMsg);
for (cmsgptr = CMSG_FIRSTHDR(pMsg);
cmsgptr != NULL; cmsgptr = CMSG_NXTHDR(pMsg, cmsgptr)) {
if (cmsgptr->cmsg_level != SOL_SOCKET) {
@@ -467,11 +467,11 @@ static int socket_process_cmsg(JNIEnv *env, jobject thisJ, struct msghdr * pMsg)
if (cmsgptr->cmsg_type == SCM_RIGHTS) {
int *pDescriptors = (int *)CMSG_DATA(cmsgptr);
jobjectArray fdArray;
int count
int count
= ((cmsgptr->cmsg_len - CMSG_LEN(0)) / sizeof(int));
if (count < 0) {
jniThrowException(env, "java/io/IOException",
jniThrowException(env, "java/io/IOException",
"invalid cmsg length");
}
@@ -482,7 +482,7 @@ static int socket_process_cmsg(JNIEnv *env, jobject thisJ, struct msghdr * pMsg)
}
for (int i = 0; i < count; i++) {
jobject fdObject
jobject fdObject
= jniCreateFileDescriptor(env, pDescriptors[i]);
if (env->ExceptionOccurred() != NULL) {
@@ -514,7 +514,7 @@ static int socket_process_cmsg(JNIEnv *env, jobject thisJ, struct msghdr * pMsg)
* Returns the length of normal data read, or -1 if an exception has
* been thrown in this function.
*/
static ssize_t socket_read_all(JNIEnv *env, jobject thisJ, int fd,
static ssize_t socket_read_all(JNIEnv *env, jobject thisJ, int fd,
void *buffer, size_t len)
{
ssize_t ret;
@@ -554,7 +554,7 @@ static ssize_t socket_read_all(JNIEnv *env, jobject thisJ, int fd,
if ((msg.msg_flags & (MSG_CTRUNC | MSG_OOB | MSG_ERRQUEUE)) != 0) {
// To us, any of the above flags are a fatal error
jniThrowException(env, "java/io/IOException",
jniThrowException(env, "java/io/IOException",
"Unexpected error or truncation during recvmsg()");
return -1;
@@ -580,7 +580,7 @@ static int socket_write_all(JNIEnv *env, jobject object, int fd,
unsigned char *buffer = (unsigned char *)buf;
memset(&msg, 0, sizeof(msg));
jobjectArray outboundFds
jobjectArray outboundFds
= (jobjectArray)env->GetObjectField(
object, field_outboundFileDescriptors);
@@ -632,7 +632,7 @@ static int socket_write_all(JNIEnv *env, jobject object, int fd,
msg.msg_iov = &iv;
msg.msg_iovlen = 1;
do {
ret = sendmsg(fd, &msg, MSG_NOSIGNAL);
} while (ret < 0 && errno == EINTR);
@@ -658,7 +658,7 @@ static jint socket_read (JNIEnv *env, jobject object, jobject fileDescriptor)
int err;
if (fileDescriptor == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return (jint)-1;
}
@@ -685,7 +685,7 @@ static jint socket_read (JNIEnv *env, jobject object, jobject fileDescriptor)
return (jint)buf;
}
static jint socket_readba (JNIEnv *env, jobject object,
static jint socket_readba (JNIEnv *env, jobject object,
jbyteArray buffer, jint off, jint len, jobject fileDescriptor)
{
int fd;
@@ -693,7 +693,7 @@ static jint socket_readba (JNIEnv *env, jobject object,
int ret;
if (fileDescriptor == NULL || buffer == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return (jint)-1;
}
@@ -720,7 +720,7 @@ static jint socket_readba (JNIEnv *env, jobject object,
return (jint)-1;
}
ret = socket_read_all(env, object,
ret = socket_read_all(env, object,
fd, byteBuffer + off, len);
// A return of -1 above means an exception is pending
@@ -730,14 +730,14 @@ static jint socket_readba (JNIEnv *env, jobject object,
return (jint) ((ret == 0) ? -1 : ret);
}
static void socket_write (JNIEnv *env, jobject object,
static void socket_write (JNIEnv *env, jobject object,
jint b, jobject fileDescriptor)
{
int fd;
int err;
if (fileDescriptor == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return;
}
@@ -752,7 +752,7 @@ static void socket_write (JNIEnv *env, jobject object,
// A return of -1 above means an exception is pending
}
static void socket_writeba (JNIEnv *env, jobject object,
static void socket_writeba (JNIEnv *env, jobject object,
jbyteArray buffer, jint off, jint len, jobject fileDescriptor)
{
int fd;
@@ -760,7 +760,7 @@ static void socket_writeba (JNIEnv *env, jobject object,
jbyte* byteBuffer;
if (fileDescriptor == NULL || buffer == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return;
}
@@ -782,7 +782,7 @@ static void socket_writeba (JNIEnv *env, jobject object,
return;
}
err = socket_write_all(env, object, fd,
err = socket_write_all(env, object, fd,
byteBuffer + off, len);
// A return of -1 above means an exception is pending
@@ -790,14 +790,14 @@ static void socket_writeba (JNIEnv *env, jobject object,
env->ReleaseByteArrayElements(buffer, byteBuffer, JNI_ABORT);
}
static jobject socket_get_peer_credentials(JNIEnv *env,
static jobject socket_get_peer_credentials(JNIEnv *env,
jobject object, jobject fileDescriptor)
{
int err;
int fd;
if (fileDescriptor == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return NULL;
}
@@ -812,7 +812,7 @@ static jobject socket_get_peer_credentials(JNIEnv *env,
memset(&creds, 0, sizeof(creds));
socklen_t szCreds = sizeof(creds);
err = getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &creds, &szCreds);
err = getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &creds, &szCreds);
if (err < 0) {
jniThrowIOException(env, errno);
@@ -823,20 +823,20 @@ static jobject socket_get_peer_credentials(JNIEnv *env,
return NULL;
}
return env->NewObject(class_Credentials, method_CredentialsInit,
return env->NewObject(class_Credentials, method_CredentialsInit,
creds.pid, creds.uid, creds.gid);
}
#if 0
//TODO change this to return an instance of LocalSocketAddress
static jobject socket_getSockName(JNIEnv *env,
static jobject socket_getSockName(JNIEnv *env,
jobject object, jobject fileDescriptor)
{
int err;
int fd;
if (fileDescriptor == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return NULL;
}
@@ -898,10 +898,10 @@ static JNINativeMethod gMethods[] = {
{"readba_native", "([BIILjava/io/FileDescriptor;)I", (void*) socket_readba},
{"writeba_native", "([BIILjava/io/FileDescriptor;)V", (void*) socket_writeba},
{"write_native", "(ILjava/io/FileDescriptor;)V", (void*) socket_write},
{"getPeerCredentials_native",
"(Ljava/io/FileDescriptor;)Landroid/net/Credentials;",
{"getPeerCredentials_native",
"(Ljava/io/FileDescriptor;)Landroid/net/Credentials;",
(void*) socket_get_peer_credentials}
//,{"getSockName_native", "(Ljava/io/FileDescriptor;)Ljava/lang/String;",
//,{"getSockName_native", "(Ljava/io/FileDescriptor;)Ljava/lang/String;",
// (void *) socket_getSockName}
};
@@ -916,14 +916,14 @@ int register_android_net_LocalSocketImpl(JNIEnv *env)
goto error;
}
field_inboundFileDescriptors = env->GetFieldID(clazz,
field_inboundFileDescriptors = env->GetFieldID(clazz,
"inboundFileDescriptors", "[Ljava/io/FileDescriptor;");
if (field_inboundFileDescriptors == NULL) {
goto error;
}
field_outboundFileDescriptors = env->GetFieldID(clazz,
field_outboundFileDescriptors = env->GetFieldID(clazz,
"outboundFileDescriptors", "[Ljava/io/FileDescriptor;");
if (field_outboundFileDescriptors == NULL) {
@@ -931,7 +931,7 @@ int register_android_net_LocalSocketImpl(JNIEnv *env)
}
class_Credentials = env->FindClass("android/net/Credentials");
if (class_Credentials == NULL) {
goto error;
}
@@ -946,7 +946,7 @@ int register_android_net_LocalSocketImpl(JNIEnv *env)
class_FileDescriptor = (jclass)env->NewGlobalRef(class_FileDescriptor);
method_CredentialsInit
method_CredentialsInit
= env->GetMethodID(class_Credentials, "<init>", "(III)V");
if (method_CredentialsInit == NULL) {

View File

@@ -2,16 +2,16 @@
**
** Copyright 2006, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
@@ -32,8 +32,7 @@ static jstring SystemProperties_getSS(JNIEnv *env, jobject clazz,
jstring rvJ = NULL;
if (keyJ == NULL) {
jniThrowException(env, "java/lang/NullPointerException",
"key must not be null.");
jniThrowNullPointerException(env, "key must not be null.");
goto error;
}
@@ -69,8 +68,7 @@ static jint SystemProperties_get_int(JNIEnv *env, jobject clazz,
jint result = defJ;
if (keyJ == NULL) {
jniThrowException(env, "java/lang/NullPointerException",
"key must not be null.");
jniThrowNullPointerException(env, "key must not be null.");
goto error;
}
@@ -98,8 +96,7 @@ static jlong SystemProperties_get_long(JNIEnv *env, jobject clazz,
jlong result = defJ;
if (keyJ == NULL) {
jniThrowException(env, "java/lang/NullPointerException",
"key must not be null.");
jniThrowNullPointerException(env, "key must not be null.");
goto error;
}
@@ -127,8 +124,7 @@ static jboolean SystemProperties_get_boolean(JNIEnv *env, jobject clazz,
jboolean result = defJ;
if (keyJ == NULL) {
jniThrowException(env, "java/lang/NullPointerException",
"key must not be null.");
jniThrowNullPointerException(env, "key must not be null.");
goto error;
}
@@ -163,8 +159,7 @@ static void SystemProperties_set(JNIEnv *env, jobject clazz,
const char* val;
if (keyJ == NULL) {
jniThrowException(env, "java/lang/NullPointerException",
"key must not be null.");
jniThrowNullPointerException(env, "key must not be null.");
return ;
}
key = env->GetStringUTFChars(keyJ, NULL);

View File

@@ -1,17 +1,17 @@
/* //device/libs/android_runtime/android_pim_EventRecurrence.cpp
**
** Copyright 2006, The Android Open Source Project
** Copyright 2006, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
@@ -84,8 +84,7 @@ static void
EventRecurrence_parse(JNIEnv* env, jobject This, jstring jstr)
{
if (jstr == NULL) {
jniThrowException(env, "java/lang/NullPointerException",
"EventRecurrence.parse str parameter null");
jniThrowNullPointerException(env, "EventRecurrence.parse str parameter null");
return ;
}
jboolean isCopy;
@@ -112,8 +111,8 @@ EventRecurrence_parse(JNIEnv* env, jobject This, jstring jstr)
if (er.until.size() > 0) {
untilStr = env->NewString(er.until.string(), er.until.size());
if (untilStr == NULL) {
jniThrowException(env, "java/lang/RuntimeException",
"EventRecurrence.parse error setting field 'until'");
jniThrowException(env, "java/lang/RuntimeException",
"EventRecurrence.parse error setting field 'until'");
return ;
}
} else {
@@ -132,7 +131,7 @@ EventRecurrence_parse(JNIEnv* env, jobject This, jstring jstr)
SET_ARRAY_AND_CHECK(byday)
// we'll just set the bydayCount field twice, it'll be less code total
if (set_array(env, er.bydayCount, er.bydayNum, This, bydayNum_fields)
!= NO_ERROR) {
!= NO_ERROR) {
jniThrowException(env, "java/lang/RuntimeException",
"EventRecurrence.parse error setting field bydayNum or "
"bydayCount.");
@@ -196,4 +195,3 @@ int register_android_pim_EventRecurrence(JNIEnv* env)
}
}; // namespace android

View File

@@ -2,22 +2,23 @@
**
** Copyright 2006, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
#define LOG_TAG "AndroidUnicode"
#include "JNIHelp.h"
#include "ScopedPrimitiveArray.h"
#include <android_runtime/AndroidRuntime.h>
#include "utils/misc.h"
#include "utils/Log.h"
@@ -49,19 +50,21 @@ static int directionality_map[U_CHAR_DIRECTION_COUNT] = {
};
namespace android {
static void getDirectionalities(JNIEnv* env, jobject obj, jcharArray srcArray, jbyteArray destArray, int count)
{
jchar* src = env->GetCharArrayElements(srcArray, NULL);
jbyte* dest = env->GetByteArrayElements(destArray, NULL);
if (src == NULL || dest == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
goto DIRECTION_END;
ScopedCharArrayRO src(env, srcArray);
if (src.get() == NULL) {
return;
}
ScopedByteArrayRW dest(env, destArray);
if (dest.get() == NULL) {
return;
}
if (env->GetArrayLength(srcArray) < count || env->GetArrayLength(destArray) < count) {
jniThrowException(env, "java/lang/ArrayIndexOutOfBoundsException", NULL);
goto DIRECTION_END;
return;
}
for (int i = 0; i < count; i++) {
@@ -87,10 +90,6 @@ static void getDirectionalities(JNIEnv* env, jobject obj, jcharArray srcArray, j
dest[i] = directionality_map[dir];
}
}
DIRECTION_END:
env->ReleaseCharArrayElements(srcArray, src, JNI_ABORT);
env->ReleaseByteArrayElements(destArray, dest, JNI_ABORT);
}
static jint getEastAsianWidth(JNIEnv* env, jobject obj, jchar input)
@@ -105,18 +104,20 @@ static jint getEastAsianWidth(JNIEnv* env, jobject obj, jchar input)
static void getEastAsianWidths(JNIEnv* env, jobject obj, jcharArray srcArray,
int start, int count, jbyteArray destArray)
{
jchar* src = env->GetCharArrayElements(srcArray, NULL);
jbyte* dest = env->GetByteArrayElements(destArray, NULL);
if (src == NULL || dest == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
goto EA_END;
ScopedCharArrayRO src(env, srcArray);
if (src.get() == NULL) {
return;
}
ScopedByteArrayRW dest(env, destArray);
if (dest.get() == NULL) {
return;
}
if (start < 0 || start > start + count
|| env->GetArrayLength(srcArray) < (start + count)
|| env->GetArrayLength(destArray) < count) {
jniThrowException(env, "java/lang/ArrayIndexOutOfBoundsException", NULL);
goto EA_END;
return;
}
for (int i = 0; i < count; i++) {
@@ -141,26 +142,19 @@ static void getEastAsianWidths(JNIEnv* env, jobject obj, jcharArray srcArray,
dest[i] = width;
}
}
EA_END:
env->ReleaseCharArrayElements(srcArray, src, JNI_ABORT);
env->ReleaseByteArrayElements(destArray, dest, JNI_ABORT);
}
static jboolean mirror(JNIEnv* env, jobject obj, jcharArray charArray, int start, int count)
{
jchar* data = env->GetCharArrayElements(charArray, NULL);
bool ret = false;
if (data == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
goto MIRROR_END;
ScopedCharArrayRW data(env, charArray);
if (data.get() == NULL) {
return false;
}
if (start < 0 || start > start + count
|| env->GetArrayLength(charArray) < start + count) {
jniThrowException(env, "java/lang/ArrayIndexOutOfBoundsException", NULL);
goto MIRROR_END;
return false;
}
for (int i = start; i < start + count; i++) {
@@ -171,17 +165,14 @@ static jboolean mirror(JNIEnv* env, jobject obj, jcharArray charArray, int start
if (c1 != c2) {
data[i] = c2;
ret = true;
return true;
}
}
MIRROR_END:
env->ReleaseCharArrayElements(charArray, data, JNI_ABORT);
return ret;
return false;
}
static jchar getMirror(JNIEnv* env, jobject obj, jchar c)
{
{
return u_charMirror(c);
}
@@ -202,7 +193,7 @@ int register_android_text_AndroidCharacter(JNIEnv* env)
{
jclass clazz = env->FindClass("android/text/AndroidCharacter");
LOG_ASSERT(clazz, "Cannot find android/text/AndroidCharacter");
return AndroidRuntime::registerNativeMethods(env, "android/text/AndroidCharacter",
gMethods, NELEM(gMethods));
}

View File

@@ -2,16 +2,16 @@
**
** Copyright 2006, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
@@ -24,6 +24,8 @@
#include "jni.h"
#include "JNIHelp.h"
#include "ScopedStringChars.h"
#include "ScopedUtfChars.h"
#include "android_util_Binder.h"
#include <utils/misc.h>
#include <android_runtime/AndroidRuntime.h>
@@ -121,8 +123,8 @@ static jint android_content_AssetManager_openAsset(JNIEnv* env, jobject clazz,
LOGV("openAsset in %p (Java object %p)\n", am, clazz);
if (fileName == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "fileName");
ScopedUtfChars fileName8(env, fileName);
if (fileName8.c_str() == NULL) {
return -1;
}
@@ -132,15 +134,12 @@ static jint android_content_AssetManager_openAsset(JNIEnv* env, jobject clazz,
return -1;
}
const char* fileName8 = env->GetStringUTFChars(fileName, NULL);
Asset* a = am->open(fileName8, (Asset::AccessMode)mode);
Asset* a = am->open(fileName8.c_str(), (Asset::AccessMode)mode);
if (a == NULL) {
jniThrowException(env, "java/io/FileNotFoundException", fileName8);
env->ReleaseStringUTFChars(fileName, fileName8);
jniThrowException(env, "java/io/FileNotFoundException", fileName8.c_str());
return -1;
}
env->ReleaseStringUTFChars(fileName, fileName8);
//printf("Created Asset Stream: %p\n", a);
@@ -152,30 +151,30 @@ static jobject returnParcelFileDescriptor(JNIEnv* env, Asset* a, jlongArray outO
off64_t startOffset, length;
int fd = a->openFileDescriptor(&startOffset, &length);
delete a;
if (fd < 0) {
jniThrowException(env, "java/io/FileNotFoundException",
"This file can not be opened as a file descriptor; it is probably compressed");
return NULL;
}
jlong* offsets = (jlong*)env->GetPrimitiveArrayCritical(outOffsets, 0);
if (offsets == NULL) {
close(fd);
return NULL;
}
offsets[0] = startOffset;
offsets[1] = length;
env->ReleasePrimitiveArrayCritical(outOffsets, offsets, 0);
jobject fileDesc = newFileDescriptor(env, fd);
if (fileDesc == NULL) {
close(fd);
return NULL;
}
return newParcelFileDescriptor(env, fileDesc);
}
@@ -189,20 +188,17 @@ static jobject android_content_AssetManager_openAssetFd(JNIEnv* env, jobject cla
LOGV("openAssetFd in %p (Java object %p)\n", am, clazz);
if (fileName == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "fileName");
ScopedUtfChars fileName8(env, fileName);
if (fileName8.c_str() == NULL) {
return NULL;
}
const char* fileName8 = env->GetStringUTFChars(fileName, NULL);
Asset* a = am->open(fileName8, Asset::ACCESS_RANDOM);
Asset* a = am->open(fileName8.c_str(), Asset::ACCESS_RANDOM);
if (a == NULL) {
jniThrowException(env, "java/io/FileNotFoundException", fileName8);
env->ReleaseStringUTFChars(fileName, fileName8);
jniThrowException(env, "java/io/FileNotFoundException", fileName8.c_str());
return NULL;
}
env->ReleaseStringUTFChars(fileName, fileName8);
//printf("Created Asset Stream: %p\n", a);
@@ -221,8 +217,8 @@ static jint android_content_AssetManager_openNonAssetNative(JNIEnv* env, jobject
LOGV("openNonAssetNative in %p (Java object %p)\n", am, clazz);
if (fileName == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "fileName");
ScopedUtfChars fileName8(env, fileName);
if (fileName8.c_str() == NULL) {
return -1;
}
@@ -232,17 +228,14 @@ static jint android_content_AssetManager_openNonAssetNative(JNIEnv* env, jobject
return -1;
}
const char* fileName8 = env->GetStringUTFChars(fileName, NULL);
Asset* a = cookie
? am->openNonAsset((void*)cookie, fileName8, (Asset::AccessMode)mode)
: am->openNonAsset(fileName8, (Asset::AccessMode)mode);
? am->openNonAsset((void*)cookie, fileName8.c_str(), (Asset::AccessMode)mode)
: am->openNonAsset(fileName8.c_str(), (Asset::AccessMode)mode);
if (a == NULL) {
jniThrowException(env, "java/io/FileNotFoundException", fileName8);
env->ReleaseStringUTFChars(fileName, fileName8);
jniThrowException(env, "java/io/FileNotFoundException", fileName8.c_str());
return -1;
}
env->ReleaseStringUTFChars(fileName, fileName8);
//printf("Created Asset Stream: %p\n", a);
@@ -261,22 +254,19 @@ static jobject android_content_AssetManager_openNonAssetFdNative(JNIEnv* env, jo
LOGV("openNonAssetFd in %p (Java object %p)\n", am, clazz);
if (fileName == NULL ) {
jniThrowException(env, "java/lang/NullPointerException", "fileName");
ScopedUtfChars fileName8(env, fileName);
if (fileName8.c_str() == NULL) {
return NULL;
}
const char* fileName8 = env->GetStringUTFChars(fileName, NULL);
Asset* a = cookie
? am->openNonAsset((void*)cookie, fileName8, Asset::ACCESS_RANDOM)
: am->openNonAsset(fileName8, Asset::ACCESS_RANDOM);
? am->openNonAsset((void*)cookie, fileName8.c_str(), Asset::ACCESS_RANDOM)
: am->openNonAsset(fileName8.c_str(), Asset::ACCESS_RANDOM);
if (a == NULL) {
jniThrowException(env, "java/io/FileNotFoundException", fileName8);
env->ReleaseStringUTFChars(fileName, fileName8);
jniThrowException(env, "java/io/FileNotFoundException", fileName8.c_str());
return NULL;
}
env->ReleaseStringUTFChars(fileName, fileName8);
//printf("Created Asset Stream: %p\n", a);
@@ -291,19 +281,15 @@ static jobjectArray android_content_AssetManager_list(JNIEnv* env, jobject clazz
return NULL;
}
if (fileName == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "fileName");
ScopedUtfChars fileName8(env, fileName);
if (fileName8.c_str() == NULL) {
return NULL;
}
const char* fileName8 = env->GetStringUTFChars(fileName, NULL);
AssetDir* dir = am->openDir(fileName8);
env->ReleaseStringUTFChars(fileName, fileName8);
AssetDir* dir = am->openDir(fileName8.c_str());
if (dir == NULL) {
jniThrowException(env, "java/io/FileNotFoundException", fileName8);
jniThrowException(env, "java/io/FileNotFoundException", fileName8.c_str());
return NULL;
}
@@ -347,7 +333,7 @@ static void android_content_AssetManager_destroyAsset(JNIEnv* env, jobject clazz
//printf("Destroying Asset Stream: %p\n", a);
if (a == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "asset");
jniThrowNullPointerException(env, "asset");
return;
}
@@ -360,7 +346,7 @@ static jint android_content_AssetManager_readAssetChar(JNIEnv* env, jobject claz
Asset* a = (Asset*)asset;
if (a == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "asset");
jniThrowNullPointerException(env, "asset");
return -1;
}
@@ -376,14 +362,14 @@ static jint android_content_AssetManager_readAsset(JNIEnv* env, jobject clazz,
Asset* a = (Asset*)asset;
if (a == NULL || bArray == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "asset");
jniThrowNullPointerException(env, "asset");
return -1;
}
if (len == 0) {
return 0;
}
jsize bLen = env->GetArrayLength(bArray);
if (off < 0 || off >= bLen || len < 0 || len > bLen || (off+len) > bLen) {
jniThrowException(env, "java/lang/IndexOutOfBoundsException", "");
@@ -409,7 +395,7 @@ static jlong android_content_AssetManager_seekAsset(JNIEnv* env, jobject clazz,
Asset* a = (Asset*)asset;
if (a == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "asset");
jniThrowNullPointerException(env, "asset");
return -1;
}
@@ -423,7 +409,7 @@ static jlong android_content_AssetManager_getAssetLength(JNIEnv* env, jobject cl
Asset* a = (Asset*)asset;
if (a == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "asset");
jniThrowNullPointerException(env, "asset");
return -1;
}
@@ -436,7 +422,7 @@ static jlong android_content_AssetManager_getAssetRemainingLength(JNIEnv* env, j
Asset* a = (Asset*)asset;
if (a == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "asset");
jniThrowNullPointerException(env, "asset");
return -1;
}
@@ -446,9 +432,9 @@ static jlong android_content_AssetManager_getAssetRemainingLength(JNIEnv* env, j
static jint android_content_AssetManager_addAssetPath(JNIEnv* env, jobject clazz,
jstring path)
{
if (path == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "path");
return JNI_FALSE;
ScopedUtfChars path8(env, path);
if (path8.c_str() == NULL) {
return NULL;
}
AssetManager* am = assetManagerForJavaObject(env, clazz);
@@ -456,12 +442,8 @@ static jint android_content_AssetManager_addAssetPath(JNIEnv* env, jobject clazz
return JNI_FALSE;
}
const char* path8 = env->GetStringUTFChars(path, NULL);
void* cookie;
bool res = am->addAssetPath(String8(path8), &cookie);
env->ReleaseStringUTFChars(path, path8);
bool res = am->addAssetPath(String8(path8.c_str()), &cookie);
return (res) ? (jint)cookie : 0;
}
@@ -478,21 +460,17 @@ static jboolean android_content_AssetManager_isUpToDate(JNIEnv* env, jobject cla
static void android_content_AssetManager_setLocale(JNIEnv* env, jobject clazz,
jstring locale)
{
if (locale == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "locale");
ScopedUtfChars locale8(env, locale);
if (locale8.c_str() == NULL) {
return;
}
const char* locale8 = env->GetStringUTFChars(locale, NULL);
AssetManager* am = assetManagerForJavaObject(env, clazz);
if (am == NULL) {
return;
}
am->setLocale(locale8);
env->ReleaseStringUTFChars(locale, locale8);
am->setLocale(locale8.c_str());
}
static jobjectArray android_content_AssetManager_getLocales(JNIEnv* env, jobject clazz)
@@ -543,9 +521,9 @@ static void android_content_AssetManager_setConfiguration(JNIEnv* env, jobject c
ResTable_config config;
memset(&config, 0, sizeof(config));
const char* locale8 = locale != NULL ? env->GetStringUTFChars(locale, NULL) : NULL;
config.mcc = (uint16_t)mcc;
config.mnc = (uint16_t)mnc;
config.orientation = (uint8_t)orientation;
@@ -563,7 +541,7 @@ static void android_content_AssetManager_setConfiguration(JNIEnv* env, jobject c
config.sdkVersion = (uint16_t)sdkVersion;
config.minorVersion = 0;
am->setConfiguration(config, locale8);
if (locale != NULL) env->ReleaseStringUTFChars(locale, locale8);
}
@@ -572,8 +550,8 @@ static jint android_content_AssetManager_getResourceIdentifier(JNIEnv* env, jobj
jstring defType,
jstring defPackage)
{
if (name == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "name");
ScopedStringChars name16(env, name);
if (name16.get() == NULL) {
return 0;
}
@@ -582,8 +560,6 @@ static jint android_content_AssetManager_getResourceIdentifier(JNIEnv* env, jobj
return 0;
}
const char16_t* name16 = env->GetStringChars(name, NULL);
jsize nameLen = env->GetStringLength(name);
const char16_t* defType16 = defType
? env->GetStringChars(defType, NULL) : NULL;
jsize defTypeLen = defType
@@ -594,7 +570,7 @@ static jint android_content_AssetManager_getResourceIdentifier(JNIEnv* env, jobj
? env->GetStringLength(defPackage) : 0;
jint ident = am->getResources().identifierForName(
name16, nameLen, defType16, defTypeLen, defPackage16, defPackageLen);
name16.get(), name16.size(), defType16, defTypeLen, defPackage16, defPackageLen);
if (defPackage16) {
env->ReleaseStringChars(defPackage, defPackage16);
@@ -602,7 +578,6 @@ static jint android_content_AssetManager_getResourceIdentifier(JNIEnv* env, jobj
if (defType16) {
env->ReleaseStringChars(defType, defType16);
}
env->ReleaseStringChars(name, name16);
return ident;
}
@@ -614,12 +589,12 @@ static jstring android_content_AssetManager_getResourceName(JNIEnv* env, jobject
if (am == NULL) {
return NULL;
}
ResTable::resource_name name;
if (!am->getResources().getResourceName(resid, &name)) {
return NULL;
}
String16 str;
if (name.package != NULL) {
str.setTo(name.package, name.packageLen);
@@ -638,7 +613,7 @@ static jstring android_content_AssetManager_getResourceName(JNIEnv* env, jobject
}
str.append(name.name, name.nameLen);
}
return env->NewString((const jchar*)str.string(), str.size());
}
@@ -649,16 +624,16 @@ static jstring android_content_AssetManager_getResourcePackageName(JNIEnv* env,
if (am == NULL) {
return NULL;
}
ResTable::resource_name name;
if (!am->getResources().getResourceName(resid, &name)) {
return NULL;
}
if (name.package != NULL) {
return env->NewString((const jchar*)name.package, name.packageLen);
}
return NULL;
}
@@ -669,16 +644,16 @@ static jstring android_content_AssetManager_getResourceTypeName(JNIEnv* env, job
if (am == NULL) {
return NULL;
}
ResTable::resource_name name;
if (!am->getResources().getResourceName(resid, &name)) {
return NULL;
}
if (name.type != NULL) {
return env->NewString((const jchar*)name.type, name.typeLen);
}
return NULL;
}
@@ -689,16 +664,16 @@ static jstring android_content_AssetManager_getResourceEntryName(JNIEnv* env, jo
if (am == NULL) {
return NULL;
}
ResTable::resource_name name;
if (!am->getResources().getResourceName(resid, &name)) {
return NULL;
}
if (name.name != NULL) {
return env->NewString((const jchar*)name.name, name.nameLen);
}
return NULL;
}
@@ -746,10 +721,10 @@ static jint android_content_AssetManager_loadResourceBagValue(JNIEnv* env, jobje
return 0;
}
const ResTable& res(am->getResources());
// Now lock down the resource object and start pulling stuff from it.
res.lock();
ssize_t block = -1;
Res_value value;
@@ -770,7 +745,7 @@ static jint android_content_AssetManager_loadResourceBagValue(JNIEnv* env, jobje
if (block < 0) {
return block;
}
uint32_t ref = ident;
if (resolve) {
block = res.resolveReference(&value, block, &ref, &typeSpecFlags);
@@ -881,25 +856,9 @@ static void android_content_AssetManager_dumpTheme(JNIEnv* env, jobject clazz,
{
ResTable::Theme* theme = (ResTable::Theme*)themeInt;
const ResTable& res(theme->getResTable());
if (tag == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "tag");
return;
}
const char* tag8 = env->GetStringUTFChars(tag, NULL);
const char* prefix8 = NULL;
if (prefix != NULL) {
prefix8 = env->GetStringUTFChars(prefix, NULL);
}
// XXX Need to use params.
theme->dumpToLog();
if (prefix8 != NULL) {
env->ReleaseStringUTFChars(prefix, prefix8);
}
env->ReleaseStringUTFChars(tag, tag8);
}
static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject clazz,
@@ -912,21 +871,21 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla
jintArray outIndices)
{
if (themeToken == 0) {
jniThrowException(env, "java/lang/NullPointerException", "theme token");
jniThrowNullPointerException(env, "theme token");
return JNI_FALSE;
}
if (attrs == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "attrs");
jniThrowNullPointerException(env, "attrs");
return JNI_FALSE;
}
if (outValues == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "out values");
jniThrowNullPointerException(env, "out values");
return JNI_FALSE;
}
DEBUG_STYLES(LOGI("APPLY STYLE: theme=0x%x defStyleAttr=0x%x defStyleRes=0x%x xml=0x%x",
themeToken, defStyleAttr, defStyleRes, xmlParserToken));
ResTable::Theme* theme = (ResTable::Theme*)themeToken;
const ResTable& res = theme->getResTable();
ResXMLParser* xmlParser = (ResXMLParser*)xmlParserToken;
@@ -942,7 +901,6 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla
jint* src = (jint*)env->GetPrimitiveArrayCritical(attrs, 0);
if (src == NULL) {
jniThrowException(env, "java/lang/OutOfMemoryError", "");
return JNI_FALSE;
}
@@ -950,7 +908,6 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla
jint* dest = baseDest;
if (dest == NULL) {
env->ReleasePrimitiveArrayCritical(attrs, src, 0);
jniThrowException(env, "java/lang/OutOfMemoryError", "");
return JNI_FALSE;
}
@@ -1025,7 +982,7 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla
const uint32_t curIdent = (uint32_t)src[ii];
DEBUG_STYLES(LOGI("RETRIEVING ATTR 0x%08x...", curIdent));
// Try to find a value for this attribute... we prioritize values
// coming from, first XML attributes, then XML style, then default
// style, and finally the theme.
@@ -1128,12 +1085,12 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla
dest[STYLE_RESOURCE_ID] = resid;
dest[STYLE_CHANGING_CONFIGURATIONS] = typeSetFlags;
dest[STYLE_DENSITY] = config.density;
if (indices != NULL && value.dataType != Res_value::TYPE_NULL) {
indicesIdx++;
indices[indicesIdx] = ii;
}
dest += STYLE_NUM_ENTRIES;
}
@@ -1156,18 +1113,18 @@ static jboolean android_content_AssetManager_retrieveAttributes(JNIEnv* env, job
jintArray outIndices)
{
if (xmlParserToken == 0) {
jniThrowException(env, "java/lang/NullPointerException", "xmlParserToken");
jniThrowNullPointerException(env, "xmlParserToken");
return JNI_FALSE;
}
if (attrs == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "attrs");
jniThrowNullPointerException(env, "attrs");
return JNI_FALSE;
}
if (outValues == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "out values");
jniThrowNullPointerException(env, "out values");
return JNI_FALSE;
}
AssetManager* am = assetManagerForJavaObject(env, clazz);
if (am == NULL) {
return JNI_FALSE;
@@ -1176,28 +1133,26 @@ static jboolean android_content_AssetManager_retrieveAttributes(JNIEnv* env, job
ResXMLParser* xmlParser = (ResXMLParser*)xmlParserToken;
ResTable_config config;
Res_value value;
const jsize NI = env->GetArrayLength(attrs);
const jsize NV = env->GetArrayLength(outValues);
if (NV < (NI*STYLE_NUM_ENTRIES)) {
jniThrowException(env, "java/lang/IndexOutOfBoundsException", "out values too small");
return JNI_FALSE;
}
jint* src = (jint*)env->GetPrimitiveArrayCritical(attrs, 0);
if (src == NULL) {
jniThrowException(env, "java/lang/OutOfMemoryError", "");
return JNI_FALSE;
}
jint* baseDest = (jint*)env->GetPrimitiveArrayCritical(outValues, 0);
jint* dest = baseDest;
if (dest == NULL) {
env->ReleasePrimitiveArrayCritical(attrs, src, 0);
jniThrowException(env, "java/lang/OutOfMemoryError", "");
return JNI_FALSE;
}
jint* indices = NULL;
int indicesIdx = 0;
if (outIndices != NULL) {
@@ -1208,27 +1163,27 @@ static jboolean android_content_AssetManager_retrieveAttributes(JNIEnv* env, job
// Now lock down the resource object and start pulling stuff from it.
res.lock();
// Retrieve the XML attributes, if requested.
const jsize NX = xmlParser->getAttributeCount();
jsize ix=0;
uint32_t curXmlAttr = xmlParser->getAttributeNameResID(ix);
static const ssize_t kXmlBlock = 0x10000000;
// Now iterate through all of the attributes that the client has requested,
// filling in each with whatever data we can find.
ssize_t block = 0;
uint32_t typeSetFlags;
for (jsize ii=0; ii<NI; ii++) {
const uint32_t curIdent = (uint32_t)src[ii];
// Try to find a value for this attribute...
value.dataType = Res_value::TYPE_NULL;
value.data = 0;
typeSetFlags = 0;
config.density = 0;
// Skip through XML attributes until the end or the next possible match.
while (ix < NX && curIdent > curXmlAttr) {
ix++;
@@ -1241,7 +1196,7 @@ static jboolean android_content_AssetManager_retrieveAttributes(JNIEnv* env, job
ix++;
curXmlAttr = xmlParser->getAttributeNameResID(ix);
}
//printf("Attribute 0x%08x: type=0x%x, data=0x%08x\n", curIdent, value.dataType, value.data);
uint32_t resid = 0;
if (value.dataType != Res_value::TYPE_NULL) {
@@ -1257,14 +1212,14 @@ static jboolean android_content_AssetManager_retrieveAttributes(JNIEnv* env, job
#endif
if (newBlock >= 0) block = newBlock;
}
// Deal with the special @null value -- it turns back to TYPE_NULL.
if (value.dataType == Res_value::TYPE_REFERENCE && value.data == 0) {
value.dataType = Res_value::TYPE_NULL;
}
//printf("Attribute 0x%08x: final type=0x%x, data=0x%08x\n", curIdent, value.dataType, value.data);
// Write the final value back to Java.
dest[STYLE_TYPE] = value.dataType;
dest[STYLE_DATA] = value.data;
@@ -1273,25 +1228,25 @@ static jboolean android_content_AssetManager_retrieveAttributes(JNIEnv* env, job
dest[STYLE_RESOURCE_ID] = resid;
dest[STYLE_CHANGING_CONFIGURATIONS] = typeSetFlags;
dest[STYLE_DENSITY] = config.density;
if (indices != NULL && value.dataType != Res_value::TYPE_NULL) {
indicesIdx++;
indices[indicesIdx] = ii;
}
dest += STYLE_NUM_ENTRIES;
}
res.unlock();
if (indices != NULL) {
indices[0] = indicesIdx;
env->ReleasePrimitiveArrayCritical(outIndices, indices, 0);
}
env->ReleasePrimitiveArrayCritical(outValues, baseDest, 0);
env->ReleasePrimitiveArrayCritical(attrs, src, 0);
return JNI_TRUE;
}
@@ -1303,12 +1258,12 @@ static jint android_content_AssetManager_getArraySize(JNIEnv* env, jobject clazz
return 0;
}
const ResTable& res(am->getResources());
res.lock();
const ResTable::bag_entry* defStyleEnt = NULL;
ssize_t bagOff = res.getBagLocked(id, &defStyleEnt);
res.unlock();
return bagOff;
}
@@ -1317,10 +1272,10 @@ static jint android_content_AssetManager_retrieveArray(JNIEnv* env, jobject claz
jintArray outValues)
{
if (outValues == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "out values");
jniThrowNullPointerException(env, "out values");
return JNI_FALSE;
}
AssetManager* am = assetManagerForJavaObject(env, clazz);
if (am == NULL) {
return JNI_FALSE;
@@ -1329,25 +1284,25 @@ static jint android_content_AssetManager_retrieveArray(JNIEnv* env, jobject claz
ResTable_config config;
Res_value value;
ssize_t block;
const jsize NV = env->GetArrayLength(outValues);
jint* baseDest = (jint*)env->GetPrimitiveArrayCritical(outValues, 0);
jint* dest = baseDest;
if (dest == NULL) {
jniThrowException(env, "java/lang/OutOfMemoryError", "");
return JNI_FALSE;
}
// Now lock down the resource object and start pulling stuff from it.
res.lock();
const ResTable::bag_entry* arrayEnt = NULL;
uint32_t arrayTypeSetFlags = 0;
ssize_t bagOff = res.getBagLocked(id, &arrayEnt, &arrayTypeSetFlags);
const ResTable::bag_entry* endArrayEnt = arrayEnt +
(bagOff >= 0 ? bagOff : 0);
int i = 0;
uint32_t typeSetFlags;
while (i < NV && arrayEnt < endArrayEnt) {
@@ -1355,7 +1310,7 @@ static jint android_content_AssetManager_retrieveArray(JNIEnv* env, jobject claz
typeSetFlags = arrayTypeSetFlags;
config.density = 0;
value = arrayEnt->map.value;
uint32_t resid = 0;
if (value.dataType != Res_value::TYPE_NULL) {
// Take care of resolving the found resource to its final value.
@@ -1389,13 +1344,13 @@ static jint android_content_AssetManager_retrieveArray(JNIEnv* env, jobject claz
i+= STYLE_NUM_ENTRIES;
arrayEnt++;
}
i /= STYLE_NUM_ENTRIES;
res.unlock();
env->ReleasePrimitiveArrayCritical(outValues, baseDest, 0);
return i;
}
@@ -1410,22 +1365,19 @@ static jint android_content_AssetManager_openXmlAssetNative(JNIEnv* env, jobject
LOGV("openXmlAsset in %p (Java object %p)\n", am, clazz);
if (fileName == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "fileName");
ScopedUtfChars fileName8(env, fileName);
if (fileName8.c_str() == NULL) {
return 0;
}
const char* fileName8 = env->GetStringUTFChars(fileName, NULL);
Asset* a = cookie
? am->openNonAsset((void*)cookie, fileName8, Asset::ACCESS_BUFFER)
: am->openNonAsset(fileName8, Asset::ACCESS_BUFFER);
? am->openNonAsset((void*)cookie, fileName8.c_str(), Asset::ACCESS_BUFFER)
: am->openNonAsset(fileName8.c_str(), Asset::ACCESS_BUFFER);
if (a == NULL) {
jniThrowException(env, "java/io/FileNotFoundException", fileName8);
env->ReleaseStringUTFChars(fileName, fileName8);
jniThrowException(env, "java/io/FileNotFoundException", fileName8.c_str());
return 0;
}
env->ReleaseStringUTFChars(fileName, fileName8);
ResXMLTree* block = new ResXMLTree();
status_t err = block->setTo(a->getBuffer(true), a->getLength(), true);
@@ -1457,7 +1409,6 @@ static jintArray android_content_AssetManager_getArrayStringInfo(JNIEnv* env, jo
jintArray array = env->NewIntArray(N * 2);
if (array == NULL) {
jniThrowException(env, "java/lang/OutOfMemoryError", "");
res.unlockBag(startOfBag);
return NULL;
}
@@ -1468,20 +1419,20 @@ static jintArray android_content_AssetManager_getArrayStringInfo(JNIEnv* env, jo
jint stringIndex = -1;
jint stringBlock = 0;
value = bag->map.value;
// Take care of resolving the found resource to its final value.
stringBlock = res.resolveReference(&value, bag->stringBlock, NULL);
if (value.dataType == Res_value::TYPE_STRING) {
stringIndex = value.data;
}
#if THROW_ON_BAD_ID
if (stringBlock == BAD_INDEX) {
jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!");
return array;
}
#endif
//todo: It might be faster to allocate a C array to contain
// the blocknums and indices, put them in there and then
// do just one SetIntArrayRegion()
@@ -1581,7 +1532,6 @@ static jintArray android_content_AssetManager_getArrayIntResource(JNIEnv* env, j
jintArray array = env->NewIntArray(N);
if (array == NULL) {
jniThrowException(env, "java/lang/OutOfMemoryError", "");
res.unlockBag(startOfBag);
return NULL;
}
@@ -1590,7 +1540,7 @@ static jintArray android_content_AssetManager_getArrayIntResource(JNIEnv* env, j
const ResTable::bag_entry* bag = startOfBag;
for (size_t i=0; ((ssize_t)i)<N; i++, bag++) {
value = bag->map.value;
// Take care of resolving the found resource to its final value.
ssize_t block = res.resolveReference(&value, bag->stringBlock, NULL);
#if THROW_ON_BAD_ID
@@ -1645,7 +1595,7 @@ static jobject android_content_AssetManager_getAssetAllocations(JNIEnv* env, job
if (alloc.length() <= 0) {
return NULL;
}
jstring str = env->NewStringUTF(alloc.string());
return str;
}

View File

@@ -993,7 +993,7 @@ static jboolean android_os_BinderProxy_transact(JNIEnv* env, jobject obj,
jobject replyObj, jint flags)
{
if (dataObj == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return JNI_FALSE;
}
@@ -1045,7 +1045,7 @@ static void android_os_BinderProxy_linkToDeath(JNIEnv* env, jobject obj,
jobject recipient, jint flags)
{
if (recipient == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return;
}
@@ -1077,7 +1077,7 @@ static jboolean android_os_BinderProxy_unlinkToDeath(JNIEnv* env, jobject obj,
{
jboolean res = JNI_FALSE;
if (recipient == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return res;
}
@@ -1166,7 +1166,7 @@ static int int_register_android_os_BinderProxy(JNIEnv* env)
clazz = env->FindClass("java/lang/Error");
LOG_FATAL_IF(clazz == NULL, "Unable to find class java.lang.Error");
gErrorOffsets.mClass = (jclass) env->NewGlobalRef(clazz);
clazz = env->FindClass(kBinderProxyPathName);
LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.BinderProxy");
@@ -1474,7 +1474,7 @@ static jobject android_os_Parcel_openFileDescriptor(JNIEnv* env, jobject clazz,
jstring name, jint mode)
{
if (name == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return NULL;
}
const jchar* str = env->GetStringCritical(name, 0);
@@ -1522,7 +1522,7 @@ static jobject android_os_Parcel_openFileDescriptor(JNIEnv* env, jobject clazz,
static jobject android_os_Parcel_dupFileDescriptor(JNIEnv* env, jobject clazz, jobject orig)
{
if (orig == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return NULL;
}
int origfd = env->GetIntField(orig, gFileDescriptorOffsets.mDescriptor);
@@ -1533,7 +1533,7 @@ static jobject android_os_Parcel_dupFileDescriptor(JNIEnv* env, jobject clazz, j
int fd = dup(origfd);
if (fd < 0) {
jniThrowException(env, "java/io/IOException", strerror(errno));
jniThrowIOException(env, errno);
return NULL;
}
jobject object = newFileDescriptor(env, fd);
@@ -1546,7 +1546,7 @@ static jobject android_os_Parcel_dupFileDescriptor(JNIEnv* env, jobject clazz, j
static void android_os_Parcel_closeFileDescriptor(JNIEnv* env, jobject clazz, jobject object)
{
if (object == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return;
}
int fd = env->GetIntField(object, gFileDescriptorOffsets.mDescriptor);
@@ -1560,7 +1560,7 @@ static void android_os_Parcel_closeFileDescriptor(JNIEnv* env, jobject clazz, jo
static void android_os_Parcel_clearFileDescriptor(JNIEnv* env, jobject clazz, jobject object)
{
if (object == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return;
}
int fd = env->GetIntField(object, gFileDescriptorOffsets.mDescriptor);

View File

@@ -151,7 +151,7 @@ static void android_util_EventLog_readEvents(JNIEnv* env, jobject clazz,
jintArray tags,
jobject out) {
if (tags == NULL || out == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return;
}

View File

@@ -2,16 +2,16 @@
**
** Copyright 2006, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
@@ -107,10 +107,10 @@ static void signalExceptionForGroupError(JNIEnv* env, jobject obj, int err)
static void fakeProcessEntry(void* arg)
{
String8* cls = (String8*)arg;
AndroidRuntime* jr = AndroidRuntime::getRuntime();
jr->callMain(cls->string(), 0, NULL);
delete cls;
}
@@ -132,10 +132,10 @@ jint android_os_Process_myTid(JNIEnv* env, jobject clazz)
jint android_os_Process_getUidForName(JNIEnv* env, jobject clazz, jstring name)
{
if (name == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return -1;
}
const jchar* str16 = env->GetStringCritical(name, 0);
String8 name8;
if (str16) {
@@ -163,10 +163,10 @@ jint android_os_Process_getUidForName(JNIEnv* env, jobject clazz, jstring name)
jint android_os_Process_getGidForName(JNIEnv* env, jobject clazz, jstring name)
{
if (name == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return -1;
}
const jchar* str16 = env->GetStringCritical(name, 0);
String8 name8;
if (str16) {
@@ -200,14 +200,14 @@ void android_os_Process_setThreadGroup(JNIEnv* env, jobject clazz, int pid, jint
}
}
void android_os_Process_setProcessGroup(JNIEnv* env, jobject clazz, int pid, jint grp)
void android_os_Process_setProcessGroup(JNIEnv* env, jobject clazz, int pid, jint grp)
{
DIR *d;
FILE *fp;
char proc_path[255];
struct dirent *de;
if (grp > ANDROID_TGROUP_MAX || grp < 0) {
if (grp > ANDROID_TGROUP_MAX || grp < 0) {
signalExceptionForGroupError(env, clazz, EINVAL);
return;
}
@@ -225,7 +225,7 @@ void android_os_Process_setProcessGroup(JNIEnv* env, jobject clazz, int pid, jin
cmdline[rc] = 0;
close(fd);
}
if (grp == ANDROID_TGROUP_BG_NONINTERACT) {
LOGD("setProcessGroup: vvv pid %d (%s)", pid, cmdline);
} else {
@@ -260,7 +260,7 @@ void android_os_Process_setProcessGroup(JNIEnv* env, jobject clazz, int pid, jin
// This task wants to stay at background
continue;
}
if (androidSetThreadSchedulingGroup(t_pid, grp) != NO_ERROR) {
signalExceptionForGroupError(env, clazz, errno);
break;
@@ -312,7 +312,7 @@ void android_os_Process_setThreadPriority(JNIEnv* env, jobject clazz,
signalExceptionForGroupError(env, clazz, errno);
}
}
//LOGI("Setting priority of %d: %d, getpriority returns %d\n",
// pid, pri, getpriority(PRIO_PROCESS, pid));
}
@@ -358,10 +358,10 @@ jboolean android_os_Process_setOomAdj(JNIEnv* env, jobject clazz,
void android_os_Process_setArgV0(JNIEnv* env, jobject clazz, jstring name)
{
if (name == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return;
}
const jchar* str = env->GetStringCritical(name, 0);
String8 name8;
if (str) {
@@ -406,16 +406,16 @@ static int pid_compare(const void* v1, const void* v2)
static jlong android_os_Process_getFreeMemory(JNIEnv* env, jobject clazz)
{
int fd = open("/proc/meminfo", O_RDONLY);
if (fd < 0) {
LOGW("Unable to open /proc/meminfo");
return -1;
}
char buffer[256];
const int len = read(fd, buffer, sizeof(buffer)-1);
close(fd);
if (len < 0) {
LOGW("Unable to read /proc/meminfo");
return -1;
@@ -424,10 +424,10 @@ static jlong android_os_Process_getFreeMemory(JNIEnv* env, jobject clazz)
int numFound = 0;
jlong mem = 0;
static const char* const sums[] = { "MemFree:", "Cached:", NULL };
static const int sumsLen[] = { strlen("MemFree:"), strlen("Cached:"), NULL };
char* p = buffer;
while (*p && numFound < 2) {
int i = 0;
@@ -450,7 +450,7 @@ static jlong android_os_Process_getFreeMemory(JNIEnv* env, jobject clazz)
}
p++;
}
return numFound > 0 ? mem : -1;
}
@@ -458,71 +458,71 @@ void android_os_Process_readProcLines(JNIEnv* env, jobject clazz, jstring fileSt
jobjectArray reqFields, jlongArray outFields)
{
//LOGI("getMemInfo: %p %p", reqFields, outFields);
if (fileStr == NULL || reqFields == NULL || outFields == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return;
}
const char* file8 = env->GetStringUTFChars(fileStr, NULL);
if (file8 == NULL) {
return;
}
String8 file(file8);
env->ReleaseStringUTFChars(fileStr, file8);
jsize count = env->GetArrayLength(reqFields);
if (count > env->GetArrayLength(outFields)) {
jniThrowException(env, "java/lang/IllegalArgumentException", "Array lengths differ");
return;
}
Vector<String8> fields;
int i;
for (i=0; i<count; i++) {
jobject obj = env->GetObjectArrayElement(reqFields, i);
if (obj != NULL) {
const char* str8 = env->GetStringUTFChars((jstring)obj, NULL);
//LOGI("String at %d: %p = %s", i, obj, str8);
if (str8 == NULL) {
jniThrowException(env, "java/lang/NullPointerException", "Element in reqFields");
jniThrowNullPointerException(env, "Element in reqFields");
return;
}
fields.add(String8(str8));
env->ReleaseStringUTFChars((jstring)obj, str8);
} else {
jniThrowException(env, "java/lang/NullPointerException", "Element in reqFields");
jniThrowNullPointerException(env, "Element in reqFields");
return;
}
}
jlong* sizesArray = env->GetLongArrayElements(outFields, 0);
if (sizesArray == NULL) {
return;
}
//LOGI("Clearing %d sizes", count);
for (i=0; i<count; i++) {
sizesArray[i] = 0;
}
int fd = open(file.string(), O_RDONLY);
if (fd >= 0) {
const size_t BUFFER_SIZE = 2048;
char* buffer = (char*)malloc(BUFFER_SIZE);
int len = read(fd, buffer, BUFFER_SIZE-1);
close(fd);
if (len < 0) {
LOGW("Unable to read %s", file.string());
len = 0;
}
buffer[len] = 0;
int foundCount = 0;
char* p = buffer;
while (*p && foundCount < count) {
bool skipToEol = true;
@@ -555,12 +555,12 @@ void android_os_Process_readProcLines(JNIEnv* env, jobject clazz, jstring fileSt
}
}
}
free(buffer);
} else {
LOGW("Unable to open %s", file.string());
}
//LOGI("Done!");
env->ReleaseLongArrayElements(outFields, sizesArray, 0);
}
@@ -569,33 +569,33 @@ jintArray android_os_Process_getPids(JNIEnv* env, jobject clazz,
jstring file, jintArray lastArray)
{
if (file == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return NULL;
}
const char* file8 = env->GetStringUTFChars(file, NULL);
if (file8 == NULL) {
jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
return NULL;
}
DIR* dirp = opendir(file8);
env->ReleaseStringUTFChars(file, file8);
if(dirp == NULL) {
return NULL;
}
jsize curCount = 0;
jint* curData = NULL;
if (lastArray != NULL) {
curCount = env->GetArrayLength(lastArray);
curData = env->GetIntArrayElements(lastArray, 0);
}
jint curPos = 0;
struct dirent* entry;
while ((entry=readdir(dirp)) != NULL) {
const char* p = entry->d_name;
@@ -604,7 +604,7 @@ jintArray android_os_Process_getPids(JNIEnv* env, jobject clazz,
p++;
}
if (*p != 0) continue;
char* end;
int pid = strtol(entry->d_name, &end, 10);
//LOGI("File %s pid=%d\n", entry->d_name, pid);
@@ -625,26 +625,26 @@ jintArray android_os_Process_getPids(JNIEnv* env, jobject clazz,
curCount = newCount;
curData = newData;
}
curData[curPos] = pid;
curPos++;
}
closedir(dirp);
if (curData != NULL && curPos > 0) {
qsort(curData, curPos, sizeof(jint), pid_compare);
}
while (curPos < curCount) {
curData[curPos] = -1;
curPos++;
}
if (curData != NULL) {
env->ReleaseIntArrayElements(lastArray, curData, 0);
}
return lastArray;
}
@@ -660,15 +660,15 @@ enum {
};
jboolean android_os_Process_parseProcLineArray(JNIEnv* env, jobject clazz,
char* buffer, jint startIndex, jint endIndex, jintArray format,
char* buffer, jint startIndex, jint endIndex, jintArray format,
jobjectArray outStrings, jlongArray outLongs, jfloatArray outFloats)
{
const jsize NF = env->GetArrayLength(format);
const jsize NS = outStrings ? env->GetArrayLength(outStrings) : 0;
const jsize NL = outLongs ? env->GetArrayLength(outLongs) : 0;
const jsize NR = outFloats ? env->GetArrayLength(outFloats) : 0;
jint* formatData = env->GetIntArrayElements(format, 0);
jlong* longsData = outLongs ?
env->GetLongArrayElements(outLongs, 0) : NULL;
@@ -691,9 +691,9 @@ jboolean android_os_Process_parseProcLineArray(JNIEnv* env, jobject clazz,
jsize i = startIndex;
jsize di = 0;
jboolean res = JNI_TRUE;
for (jsize fi=0; fi<NF; fi++) {
const jint mode = formatData[fi];
if ((mode&PROC_PARENS) != 0) {
@@ -705,7 +705,7 @@ jboolean android_os_Process_parseProcLineArray(JNIEnv* env, jobject clazz,
res = JNI_FALSE;
break;
}
jsize end = -1;
if ((mode&PROC_PARENS) != 0) {
while (buffer[i] != ')' && i < endIndex) {
@@ -720,7 +720,7 @@ jboolean android_os_Process_parseProcLineArray(JNIEnv* env, jobject clazz,
if (end < 0) {
end = i;
}
if (i < endIndex) {
i++;
if ((mode&PROC_COMBINE) != 0) {
@@ -729,9 +729,9 @@ jboolean android_os_Process_parseProcLineArray(JNIEnv* env, jobject clazz,
}
}
}
//LOGI("Field %d: %d-%d dest=%d mode=0x%x\n", i, start, end, di, mode);
if ((mode&(PROC_OUT_FLOAT|PROC_OUT_LONG|PROC_OUT_STRING)) != 0) {
char c = buffer[end];
buffer[end] = 0;
@@ -751,7 +751,7 @@ jboolean android_os_Process_parseProcLineArray(JNIEnv* env, jobject clazz,
di++;
}
}
env->ReleaseIntArrayElements(format, formatData, 0);
if (longsData != NULL) {
env->ReleaseLongArrayElements(outLongs, longsData, 0);
@@ -759,22 +759,22 @@ jboolean android_os_Process_parseProcLineArray(JNIEnv* env, jobject clazz,
if (floatsData != NULL) {
env->ReleaseFloatArrayElements(outFloats, floatsData, 0);
}
return res;
}
jboolean android_os_Process_parseProcLine(JNIEnv* env, jobject clazz,
jbyteArray buffer, jint startIndex, jint endIndex, jintArray format,
jbyteArray buffer, jint startIndex, jint endIndex, jintArray format,
jobjectArray outStrings, jlongArray outLongs, jfloatArray outFloats)
{
jbyte* bufferArray = env->GetByteArrayElements(buffer, NULL);
jboolean result = android_os_Process_parseProcLineArray(env, clazz,
(char*) bufferArray, startIndex, endIndex, format, outStrings,
jboolean result = android_os_Process_parseProcLineArray(env, clazz,
(char*) bufferArray, startIndex, endIndex, format, outStrings,
outLongs, outFloats);
env->ReleaseByteArrayElements(buffer, bufferArray, 0);
return result;
}
@@ -783,7 +783,7 @@ jboolean android_os_Process_readProcFile(JNIEnv* env, jobject clazz,
jlongArray outLongs, jfloatArray outFloats)
{
if (file == NULL || format == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return JNI_FALSE;
}
@@ -794,32 +794,32 @@ jboolean android_os_Process_readProcFile(JNIEnv* env, jobject clazz,
}
int fd = open(file8, O_RDONLY);
env->ReleaseStringUTFChars(file, file8);
if (fd < 0) {
//LOGW("Unable to open process file: %s\n", file8);
return JNI_FALSE;
}
char buffer[256];
const int len = read(fd, buffer, sizeof(buffer)-1);
close(fd);
if (len < 0) {
//LOGW("Unable to open process file: %s fd=%d\n", file8, fd);
return JNI_FALSE;
}
buffer[len] = 0;
return android_os_Process_parseProcLineArray(env, clazz, buffer, 0, len,
return android_os_Process_parseProcLineArray(env, clazz, buffer, 0, len,
format, outStrings, outLongs, outFloats);
}
void android_os_Process_setApplicationObject(JNIEnv* env, jobject clazz,
jobject binderObject)
{
if (binderObject == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return;
}
@@ -846,11 +846,11 @@ static jlong android_os_Process_getElapsedCpuTime(JNIEnv* env, jobject clazz)
struct timespec ts;
int res = clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts);
if (res != 0) {
return (jlong) 0;
}
}
nsecs_t when = seconds_to_nanoseconds(ts.tv_sec) + ts.tv_nsec;
return (jlong) nanoseconds_to_milliseconds(when);
}

View File

@@ -32,14 +32,14 @@ namespace android
static jclass class_fileDescriptor;
static jfieldID field_fileDescriptor_descriptor;
static jmethodID method_fileDescriptor_init;
static jboolean scrollRect(JNIEnv* env, jobject graphics2D, jobject canvas, jobject rect, int dx, int dy) {
if (canvas == NULL) {
jniThrowException(env, "java/lang/NullPointerException", NULL);
jniThrowNullPointerException(env, NULL);
return false;
}
SkIRect src, *srcPtr = NULL;
if (NULL != rect) {
GraphicsJNI::jrect_to_irect(env, rect, &src);

View File

@@ -94,7 +94,7 @@ static jint com_android_internal_os_ZygoteInit_getpgid(
return ret;
}
static void com_android_internal_os_ZygoteInit_reopenStdio(JNIEnv* env,
static void com_android_internal_os_ZygoteInit_reopenStdio(JNIEnv* env,
jobject clazz, jobject in, jobject out, jobject errfd)
{
int fd;
@@ -131,7 +131,7 @@ static void com_android_internal_os_ZygoteInit_reopenStdio(JNIEnv* env,
} while (err < 0 && errno == EINTR);
}
static void com_android_internal_os_ZygoteInit_closeDescriptor(JNIEnv* env,
static void com_android_internal_os_ZygoteInit_closeDescriptor(JNIEnv* env,
jobject clazz, jobject descriptor)
{
int fd;
@@ -206,7 +206,7 @@ static void com_android_internal_os_ZygoteInit_setCapabilities (JNIEnv *env,
capdata.effective = effective;
capdata.permitted = permitted;
err = capset (&capheader, &capdata);
err = capset (&capheader, &capdata);
if (err < 0) {
jniThrowIOException(env, errno);
@@ -231,7 +231,7 @@ static jlong com_android_internal_os_ZygoteInit_capgetPermitted (JNIEnv *env,
capheader.version = _LINUX_CAPABILITY_VERSION;
capheader.pid = pid;
err = capget (&capheader, &capdata);
err = capget (&capheader, &capdata);
if (err < 0) {
jniThrowIOException(env, errno);
@@ -243,11 +243,10 @@ static jlong com_android_internal_os_ZygoteInit_capgetPermitted (JNIEnv *env,
}
static jint com_android_internal_os_ZygoteInit_selectReadable (
JNIEnv *env, jobject clazz, jobjectArray fds)
JNIEnv *env, jobject clazz, jobjectArray fds)
{
if (fds == NULL) {
jniThrowException(env, "java/lang/NullPointerException",
"fds == null");
jniThrowNullPointerException(env, "fds == null");
return -1;
}
@@ -311,7 +310,7 @@ static jint com_android_internal_os_ZygoteInit_selectReadable (
}
static jobject com_android_internal_os_ZygoteInit_createFileDescriptor (
JNIEnv *env, jobject clazz, jint fd)
JNIEnv *env, jobject clazz, jint fd)
{
return jniCreateFileDescriptor(env, fd);
}
@@ -329,17 +328,17 @@ static JNINativeMethod gMethods[] = {
(void *) com_android_internal_os_ZygoteInit_setpgid },
{ "getpgid", "(I)I",
(void *) com_android_internal_os_ZygoteInit_getpgid },
{ "reopenStdio",
{ "reopenStdio",
"(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;"
"Ljava/io/FileDescriptor;)V",
"Ljava/io/FileDescriptor;)V",
(void *) com_android_internal_os_ZygoteInit_reopenStdio},
{ "closeDescriptor", "(Ljava/io/FileDescriptor;)V",
{ "closeDescriptor", "(Ljava/io/FileDescriptor;)V",
(void *) com_android_internal_os_ZygoteInit_closeDescriptor},
{ "setCloseOnExec", "(Ljava/io/FileDescriptor;Z)V",
{ "setCloseOnExec", "(Ljava/io/FileDescriptor;Z)V",
(void *) com_android_internal_os_ZygoteInit_setCloseOnExec},
{ "setCapabilities", "(JJ)V",
{ "setCapabilities", "(JJ)V",
(void *) com_android_internal_os_ZygoteInit_setCapabilities },
{ "capgetPermitted", "(I)J",
{ "capgetPermitted", "(I)J",
(void *) com_android_internal_os_ZygoteInit_capgetPermitted },
{ "selectReadable", "([Ljava/io/FileDescriptor;)I",
(void *) com_android_internal_os_ZygoteInit_selectReadable },
@@ -353,4 +352,3 @@ int register_com_android_internal_os_ZygoteInit(JNIEnv* env)
}
}; // namespace android