npt.c revision 0
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd/*
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd * Copyright 2004 Sun Microsystems, Inc. All Rights Reserved.
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd *
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd * This code is free software; you can redistribute it and/or modify it
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd * under the terms of the GNU General Public License version 2 only, as
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd * published by the Free Software Foundation. Sun designates this
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd * particular file as subject to the "Classpath" exception as provided
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd * by Sun in the LICENSE file that accompanied this code.
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd *
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen * This code is distributed in the hope that it will be useful, but WITHOUT
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen * version 2 for more details (a copy is included in the LICENSE file that
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd * accompanied this code).
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd *
af33a4994ae2ff15bc67d19ff1a7feb906745bf8rbowen * You should have received a copy of the GNU General Public License version
3f08db06526d6901aa08c110b5bc7dde6bc39905nd * 2 along with this work; if not, write to the Free Software Foundation,
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd *
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
3f08db06526d6901aa08c110b5bc7dde6bc39905nd * CA 95054 USA or visit www.sun.com if you need additional information or
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd * have any questions.
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd */
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd#include <stdio.h>
bc9d4698fce0238d2f6f2682e99423ebb1149976rbowen#include <string.h>
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd#include <stdlib.h>
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
d474d8ef01ec5c2a09341cd148851ed383c3287crbowen#include "jni.h"
d474d8ef01ec5c2a09341cd148851ed383c3287crbowen
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd#include "npt.h"
4b575a6b6704b516f22d65a3ad35696d7b9ba372rpluem
4b575a6b6704b516f22d65a3ad35696d7b9ba372rpluem#include "utf.h"
4b575a6b6704b516f22d65a3ad35696d7b9ba372rpluem
4b575a6b6704b516f22d65a3ad35696d7b9ba372rpluemstatic int
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60ndversion_check(char *version)
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd{
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd if ( version==NULL || strcmp(version, NPT_VERSION)!=0 ) {
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd return 1;
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd }
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd return 0;
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd}
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60ndJNIEXPORT void JNICALL
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60ndnptInitialize(NptEnv **pnpt, char *nptVersion, char *options)
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd{
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd NptEnv *npt;
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd (*pnpt) = NULL;
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd if ( version_check(nptVersion) ) {
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd NPT_ERROR("NPT version doesn't match");
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd return;
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd }
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd npt = (NptEnv*)calloc(sizeof(NptEnv), 1);
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd if ( npt == NULL ) {
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd NPT_ERROR("Cannot allocate calloc space for NptEnv*");
d972e4a0688f66b1402473dd9dacfecefa2132a8rbowen return;
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd }
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd
80eed96ee3d8cfa0b66d9fb1cfe63fd83254d38bnilgun if ( options != NULL ) {
80eed96ee3d8cfa0b66d9fb1cfe63fd83254d38bnilgun npt->options = strdup(options);
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd }
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd npt->utfInitialize = &utfInitialize;
316f02e3836836c82e19019ff23f90a7ebc65289nilgun npt->utfTerminate = &utfTerminate;
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd npt->utf8ToPlatform = &utf8ToPlatform;
864d6d55a72bdb982ebabbc95cf8f051c43fa6ddrbowen npt->utf8FromPlatform = &utf8FromPlatform;
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd npt->utf8ToUtf16 = &utf8ToUtf16;
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd npt->utf16ToUtf8m = &utf16ToUtf8m;
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd npt->utf16ToUtf8s = &utf16ToUtf8s;
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd npt->utf8sToUtf8mLength = &utf8sToUtf8mLength;
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd npt->utf8sToUtf8m = &utf8sToUtf8m;
b43f840409794ed298e8634f6284741f193b6c4ftakashi npt->utf8mToUtf8sLength = &utf8mToUtf8sLength;
22d5d84393d960a2027f472036f3fee15d7dbce9nd npt->utf8mToUtf8s = &utf8mToUtf8s;
22d5d84393d960a2027f472036f3fee15d7dbce9nd
864d6d55a72bdb982ebabbc95cf8f051c43fa6ddrbowen (*pnpt) = npt;
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd}
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd
4b311579b2c8aebac85fb7cb8ac89e6c37b4bc1asfJNIEXPORT void JNICALL
50c04f297d76a57ead2fa6b73845f7563b1fc788sfnptTerminate(NptEnv* npt, char *options)
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd{
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd
864d6d55a72bdb982ebabbc95cf8f051c43fa6ddrbowen /* FIXUP: options? Check memory or something? */
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd if ( npt->options != NULL ) {
635e08c1d8332adc365b1c20bbe3577d59ebcd78kess (void)free(npt->options);
623eebe956d9c2d6d073ed3eae855b56030b40e9noodl }
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd (void)free(npt);
b05ab3ff5ab54aa22610b13d56eaba6ddfc3db60nd}
ffb88a4885747797937e30a5ac8b1606da3cb4adnd