suitestore_rms.c

来自「This is a resource based on j2me embedde」· C语言 代码 · 共 143 行

C
143
字号
/* * * * Copyright  1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER *  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). *  * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA *  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. *//** * @file * * @ingroup AMS * * This is reference implementation of the RMS API of the MIDlet suite * storage subsystem. */#include <kni.h>#include <string.h>#include <midpInit.h>#include <midpStorage.h>#include <midpRMS.h>#include <midpUtilKni.h>#include <pcsl_memory.h>#include <pcsl_esc.h>#include <pcsl_string.h>#include <suitestore_intern.h>#include <suitestore_rms.h>/* ------------------------------------------------------------ *//*                           Public API                         *//* ------------------------------------------------------------ *//** * Gets location of the resource with specified type and name * for the suite with the specified suiteId. * * Note that the implementation of this function MUST allocate the memory * for the in/out parameter filename using pcsl_mem_malloc(). * The caller is responsible for freeing the memory associated * with filename parameter. * * @param suiteId The application suite ID * @param storageId storage ID where the RMS will be located * NOTE: currently this parameter is ignored due to limitation of our * implementation: RMS is always located at the same storage as the suite. * @param extension rms extension that can be MIDP_RMS_DB_EXT or * MIDP_RMS_IDX_EXT * @param pResourceName RMS name * @param pFileName The in/out parameter that contains returned filename * * @return error code that should be one of the following: * <pre> *     ALL_OK, OUT_OF_MEMORY, NOT_FOUND, *     SUITE_CORRUPTED_ERROR, BAD_PARAMS * </pre> */MIDPErrormidp_suite_get_rms_filename(SuiteIdType suiteId,                            StorageIdType storageId,                            jint extension,                            const pcsl_string* pResourceName,                            pcsl_string* pFileName) {    const pcsl_string* root;    pcsl_string returnPath = PCSL_STRING_NULL;    pcsl_string rmsFileName = PCSL_STRING_NULL;    jint suiteIdLen = GET_SUITE_ID_LEN(suiteId);    jsize resourceNameLen = pcsl_string_length(pResourceName);    /*     * IMPL_NOTE: currently we have a limitation that the suite's RMS     * must be located at the same storage as the midlet suite.     * See rms.c, rmsdb_get_record_store_space_available() for more details.     */    root = storage_get_root(storageId);    *pFileName = PCSL_STRING_NULL;    if (resourceNameLen > 0) {        const pcsl_string* ext;        jsize extLen;        int fileNameLen;        if (MIDP_RMS_IDX_EXT == extension) {            ext = &IDX_EXTENSION;            extLen = pcsl_string_length(&IDX_EXTENSION);        } else if (MIDP_RMS_DB_EXT == extension) {            ext = &DB_EXTENSION;            extLen = pcsl_string_length(&DB_EXTENSION);        } else {            return BAD_PARAMS;        }        /* performance hint: predict buffer capacity */        fileNameLen = PCSL_STRING_ESCAPED_BUFFER_SIZE(resourceNameLen + extLen);        pcsl_string_predict_size(&rmsFileName, fileNameLen);        if (pcsl_esc_attach_string(pResourceName, &rmsFileName) !=                PCSL_STRING_OK ||                    pcsl_string_append(&rmsFileName, ext) != PCSL_STRING_OK) {            pcsl_string_free(&rmsFileName);            return OUT_OF_MEMORY;        }    }    /* performance hint: predict buffer capacity */    pcsl_string_predict_size(&returnPath, pcsl_string_length(root) +        suiteIdLen + pcsl_string_length(&rmsFileName));    if (PCSL_STRING_OK != pcsl_string_append(&returnPath, root) ||            PCSL_STRING_OK != pcsl_string_append(&returnPath,                midp_suiteid2pcsl_string(suiteId)) ||            PCSL_STRING_OK != pcsl_string_append(&returnPath, &rmsFileName)) {        pcsl_string_free(&rmsFileName);        pcsl_string_free(&returnPath);        return OUT_OF_MEMORY;    }    pcsl_string_free(&rmsFileName);    *pFileName = returnPath;    return ALL_OK;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?