1/* 2 * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 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 34static void 35printToFile(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 71JNIEXPORT void JNICALL 72Java_java_lang_StringCoding_err(JNIEnv *env, jclass cls, jstring s) 73{ 74 printToFile(env, s, stderr); 75} 76