/* * CDE - Common Desktop Environment * * Copyright (c) 1993-2012, The Open Group. All rights reserved. * * These libraries and programs are free software; you can * redistribute them and/or modify them under the terms of the GNU * Lesser General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) * any later version. * * These libraries and programs are distributed in the hope that * they will be useful, but WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public * License along with these librararies and programs; if not, write * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301 USA */ // $XConsortium: mmdb.C /main/7 1996/10/26 18:19:36 cde-hal $ #include "api/utility.h" #include "utility/db_version.h" #include "misc/unique_id.h" #include "oliasdb/olias_funcs.h" #include "oliasdb/collectionIterator.h" #include "oliasdb/mmdb.h" #include "mgrs/managers.h" #include "api/base.h" // for UIDSIZ define OLIAS_DB::OLIAS_DB() : infolib_array(20) { //fprintf(stderr, "OLIAS_DB::OLIAS_DB()"); managers::template_mgr -> insert_template(&dlp_template); managers::template_mgr -> insert_template(&doc_template); managers::template_mgr -> insert_template(&graphic_template); managers::template_mgr -> insert_template(&locator_template); managers::template_mgr -> insert_template(&node_template); managers::template_mgr -> insert_template(&toc_template); managers::template_mgr -> insert_template(&mark_template); //managers::template_mgr -> insert_template(&pref_template); managers::template_mgr -> insert_template(&stylesheet_template); /////////////////////////////// // /////////////////////////////// info_base_set_names = new charPtr[7]; info_base_set_names[0] = NODE_SET_NAME; info_base_set_names[1] = TOC_SET_NAME; info_base_set_names[2] = LOCATOR_SET_NAME; info_base_set_names[3] = GRAPHIC_SET_NAME, info_base_set_names[4] = DOC_SET_NAME; info_base_set_names[5] = STYLESHEET_SET_NAME; info_base_set_names[6] = 0; info_base_list_names = new charPtr[2]; info_base_list_names[0] = DLP_LIST_NAME; info_base_list_names[1] = 0; } OLIAS_DB::~OLIAS_DB() { info_lib* x = 0; for ( int i=0; iget_info_lib_uid(), idx); if (y) { delete x; return y; } infolib_array.insert(x, i); infolib_array.reset_elmts(i+1); return x; } void OLIAS_DB::closeInfoLib(const char* infoLibUid) { int i = 0; info_lib* x = getInfoLib(infoLibUid, i); if ( x ) { infolib_array.insert(0, i); delete x; } } info_lib* OLIAS_DB::getInfoLib(int i) { if ( 0 <= i && i < infolib_array.no_elmts() ) { return (info_lib*)infolib_array[i]; } else return 0; } info_lib* OLIAS_DB::getInfoLib(const char* infoLibUid, int& i) { info_lib* x = 0; for ( i=0; i get_info_lib_name(), infoLibName) == 0 ) if ( x && strcmp(x -> get_info_lib_uid(), infoLibUid) == 0 ) return x; } return 0; } char* OLIAS_DB::getInfoLibUid(char* infoLibPath) { static char info_lib_uid[UIDSIZ]; char info_lib_name[PATHSIZ]; if ( exist_file(MAP_FILE_8_3, infoLibPath) == true ) { fstream map_in(form("%s/%s", infoLibPath, MAP_FILE_8_3), ios::in); if ( !map_in.getline(info_lib_name, PATHSIZ, '\t') || !map_in.getline(info_lib_uid, UIDSIZ, '\n') ) return 0; return info_lib_uid; } return 0; } Boolean OLIAS_DB::real_destroy_info_base(const char* info_lib_path, const char* base_name) { if ( unlink(form("%s/%s/%s.%s", info_lib_path, base_name, base_name, DATA_FILE_SUFFIX)) != 0 ) return false; if ( unlink(form("%s/%s/%s.%s", info_lib_path, base_name, base_name, INDEX_FILE_SUFFIX)) != 0 ) return false; if ( unlink(form("%s/%s/%s.%s", info_lib_path, base_name, base_name, SCHEMA_FILE_SUFFIX)) != 0 ) return false; if ( rmdir(form("%s/%s", info_lib_path, base_name)) != 0 ) return false; return true; } Boolean OLIAS_DB::real_destroy(const char* infoLibPath, const char* infoLibName) { // remove all infobases in the dir char base_name[PATHSIZ]; char base_desc[PATHSIZ]; char buf[PATHSIZ]; int major_mm_version = 0; int minor_mm_version = 0; snprintf(buf, sizeof(buf), "%s/%s", infoLibPath, MAP_FILE_8_3); fstream in(buf, ios::in); while ( in.getline(base_name, PATHSIZ, '\t') ) { in.getline(base_desc, PATHSIZ, '\t'); in >> major_mm_version >> minor_mm_version; in.get(); if ( real_destroy_info_base(infoLibPath, base_name) != true ) return false; } // remove map file if ( unlink(buf) != 0 ) return false; else return true; } Boolean OLIAS_DB::destroy(const char* infoLibPath, const char* infoLibName) { int i = 0; if ( getInfoLib(infoLibName, i) ) { if ( infolib_array[i] ) return false; return real_destroy(infoLibPath, infoLibName); } return real_destroy(infoLibPath, infoLibName); } int OLIAS_DB::major_code_version() { return MAJOR; } int OLIAS_DB::minor_code_version() { return MINOR; } mm_version OLIAS_DB::code_version() { return mm_version(MAJOR, MINOR); }