9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 #include <stdlib.h> 27 #include <jni.h> 28 #include <jni_util.h> 29 #include <jlong.h> 30 #include <stdio.h> 31 #include <jvm.h> 32 33 #include "sun_misc_MessageUtils.h" 34 35 static void 36 printToFile(JNIEnv *env, jstring s, FILE *file) 37 { 38 char *sConverted; 39 int length = 0; 40 int i; 41 const jchar *sAsArray; 42 43 if (s == NULL) { 44 s = (*env)->NewStringUTF(env, "null"); 45 if (s == NULL) return; 46 } 47 48 sAsArray = (*env)->GetStringChars(env, s, NULL); 49 if (!sAsArray) 50 return; 51 length = (*env)->GetStringLength(env, s); 52 if (length == 0) { 53 (*env)->ReleaseStringChars(env, s, sAsArray); 54 return; 55 } 56 sConverted = (char *) malloc(length + 1); 57 if (!sConverted) { 58 (*env)->ReleaseStringChars(env, s, sAsArray); 59 JNU_ThrowOutOfMemoryError(env, NULL); 60 return; 61 } 62 63 for(i = 0; i < length; i++) { 64 sConverted[i] = (0x7f & sAsArray[i]); 65 } 66 sConverted[length] = '\0'; 67 jio_fprintf(file, "%s", sConverted); 68 (*env)->ReleaseStringChars(env, s, sAsArray); 69 free(sConverted); 70 } 71 72 JNIEXPORT void JNICALL 73 Java_sun_misc_MessageUtils_toStderr(JNIEnv *env, jclass cls, jstring s) 74 { 75 printToFile(env, s, stderr); 76 } 77 78 JNIEXPORT void JNICALL 79 Java_sun_misc_MessageUtils_toStdout(JNIEnv *env, jclass cls, jstring s) 80 { 81 printToFile(env, s, stdout); 82 } | 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 #include <stdlib.h> 27 #include <jni.h> 28 #include <jni_util.h> 29 #include <stdio.h> 30 #include <jvm.h> 31 32 #include "java_lang_StringCoding.h" 33 34 static void 35 printToFile(JNIEnv *env, jstring s, FILE *file) 36 { 37 char *sConverted; 38 int length = 0; 39 int i; 40 const jchar *sAsArray; 41 42 if (s == NULL) { 43 JNU_ThrowNullPointerException(env, NULL); 44 return; 45 } 46 47 sAsArray = (*env)->GetStringChars(env, s, NULL); 48 if (!sAsArray) 49 return; 50 length = (*env)->GetStringLength(env, s); 51 if (length == 0) { 52 (*env)->ReleaseStringChars(env, s, sAsArray); 53 return; 54 } 55 sConverted = (char *) malloc(length + 1); 56 if (!sConverted) { 57 (*env)->ReleaseStringChars(env, s, sAsArray); 58 JNU_ThrowOutOfMemoryError(env, NULL); 59 return; 60 } 61 62 for(i = 0; i < length; i++) { 63 sConverted[i] = (0x7f & sAsArray[i]); 64 } 65 sConverted[length] = '\0'; 66 jio_fprintf(file, "%s", sConverted); 67 (*env)->ReleaseStringChars(env, s, sAsArray); 68 free(sConverted); 69 } 70 71 JNIEXPORT void JNICALL 72 Java_java_lang_StringCoding_err(JNIEnv *env, jclass cls, jstring s) 73 { 74 printToFile(env, s, stderr); 75 } |