defensive-coding-guide/defensive-coding/pot/snippets/Java-JNI-Pointers.pot

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 &lt; 0 || length &lt; 0) {\n"
" (*jEnv)-&gt;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)-&gt;GetArrayLength(jEnv, buffer);\n"
" if (totallength &gt; actuallength) {\n"
" (*jEnv)-&gt;ThrowNew(jEnv, arrayIndexOutOfBoundsExceptionClass,\n"
" \"offset + length too large\");\n"
" return 0;\n"
" }\n"
" unsigned char *ptr = (*jEnv)-&gt;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)-&gt;ReleasePrimitiveArrayCritical(jEnv, buffer, ptr, 0);\n"
" return sum;\n"
"}\n"
""
msgstr ""