50 lines
1.5 KiB
Text
50 lines
1.5 KiB
Text
#
|
|
# AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
#
|
|
msgid ""
|
|
msgstr ""
|
|
"Project-Id-Version: 0\n"
|
|
"POT-Creation-Date: 2013-09-18T00:49:43\n"
|
|
"PO-Revision-Date: 2013-09-18T00:49:43\n"
|
|
"Last-Translator: Automatically generated\n"
|
|
"Language-Team: None\n"
|
|
"MIME-Version: 1.0\n"
|
|
"Content-Type: application/x-publican; charset=UTF-8\n"
|
|
"Content-Transfer-Encoding: 8bit\n"
|
|
|
|
#. Tag: programlisting
|
|
#, no-c-format
|
|
msgid "\n"
|
|
"JNIEXPORT jint JNICALL Java_sum\n"
|
|
" (JNIEnv *jEnv, jclass clazz, jbyteArray buffer, jint offset, jint length)\n"
|
|
"{\n"
|
|
" assert(sizeof(jint) == sizeof(unsigned));\n"
|
|
" if (offset < 0 || length < 0) {\n"
|
|
" (*jEnv)->ThrowNew(jEnv, arrayIndexOutOfBoundsExceptionClass,\n"
|
|
" \"negative offset/length\");\n"
|
|
" return 0;\n"
|
|
" }\n"
|
|
" unsigned uoffset = offset;\n"
|
|
" unsigned ulength = length;\n"
|
|
" // This cannot overflow because of the check above.\n"
|
|
" unsigned totallength = uoffset + ulength;\n"
|
|
" unsigned actuallength = (*jEnv)->GetArrayLength(jEnv, buffer);\n"
|
|
" if (totallength > actuallength) {\n"
|
|
" (*jEnv)->ThrowNew(jEnv, arrayIndexOutOfBoundsExceptionClass,\n"
|
|
" \"offset + length too large\");\n"
|
|
" return 0;\n"
|
|
" }\n"
|
|
" unsigned char *ptr = (*jEnv)->GetPrimitiveArrayCritical(jEnv, buffer, 0);\n"
|
|
" if (ptr == NULL) {\n"
|
|
" return 0;\n"
|
|
" }\n"
|
|
" unsigned long long sum = 0;\n"
|
|
" for (unsigned char *p = ptr + uoffset, *end = p + ulength; p != end; ++p) {\n"
|
|
" sum += *p;\n"
|
|
" }\n"
|
|
" (*jEnv)->ReleasePrimitiveArrayCritical(jEnv, buffer, ptr, 0);\n"
|
|
" return sum;\n"
|
|
"}\n"
|
|
""
|
|
msgstr ""
|
|
|