1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef _REGIMPL_HXX_ 25 #define _REGIMPL_HXX_ 26 27 #include <set> 28 #include <hash_map> 29 30 #include <registry/registry.h> 31 #include <rtl/ustring.hxx> 32 #include <osl/mutex.hxx> 33 #include <store/store.hxx> 34 35 #define REG_PAGESIZE 512 36 37 #define REG_MODE_CREATE store_AccessCreate 38 #define REG_MODE_OPEN store_AccessReadWrite 39 #define REG_MODE_OPENREAD store_AccessReadOnly 40 41 #define KEY_MODE_CREATE store_AccessCreate 42 #define KEY_MODE_OPEN store_AccessReadWrite 43 #define KEY_MODE_OPENREAD store_AccessReadOnly 44 45 46 #define VALUE_MODE_CREATE store_AccessCreate 47 #define VALUE_MODE_OPEN store_AccessReadWrite 48 #define VALUE_MODE_OPENREAD store_AccessReadOnly 49 50 // 5 Bytes = 1 (Byte fuer den Typ) + 4 (Bytes fuer die Groesse der Daten) 51 #define VALUE_HEADERSIZE 5 52 #define VALUE_TYPEOFFSET 1 53 #define VALUE_HEADEROFFSET 5 54 55 #define REG_CREATE 0x0004 // allow write accesses 56 57 #define REG_GUARD(mutex) \ 58 osl::Guard< osl::Mutex > aGuard( mutex ); 59 60 // @@@ using namespace rtl; 61 // @@@ using namespace osl; 62 63 class ORegKey; 64 class RegistryTypeReader; 65 66 class ORegistry 67 { 68 public: 69 ORegistry(); 70 acquire()71 sal_uInt32 acquire() 72 { return ++m_refCount; } 73 release()74 sal_uInt32 release() 75 { return --m_refCount; } 76 77 RegError initRegistry(const rtl::OUString& name, 78 RegAccessMode accessMode); 79 80 RegError closeRegistry(); 81 82 RegError destroyRegistry(const rtl::OUString& name); 83 84 RegError acquireKey(RegKeyHandle hKey); 85 RegError releaseKey(RegKeyHandle hKey); 86 87 RegError createKey(RegKeyHandle hKey, 88 const rtl::OUString& keyName, 89 RegKeyHandle* phNewKey); 90 91 RegError openKey(RegKeyHandle hKey, 92 const rtl::OUString& keyName, 93 RegKeyHandle* phOpenKey); 94 95 RegError closeKey(RegKeyHandle hKey); 96 97 RegError deleteKey(RegKeyHandle hKey, const rtl::OUString& keyName); 98 99 RegError loadKey(RegKeyHandle hKey, 100 const rtl::OUString& regFileName, 101 sal_Bool bWarings=sal_False, 102 sal_Bool bReport=sal_False); 103 104 RegError saveKey(RegKeyHandle hKey, 105 const rtl::OUString& regFileName, 106 sal_Bool bWarings=sal_False, 107 sal_Bool bReport=sal_False); 108 109 RegError dumpRegistry(RegKeyHandle hKey) const; 110 111 ~ORegistry(); 112 isReadOnly() const113 sal_Bool isReadOnly() const 114 { return m_readOnly; } 115 isOpen() const116 sal_Bool isOpen() const 117 { return m_isOpen; } 118 119 ORegKey* getRootKey(); 120 getStoreFile()121 const store::OStoreFile& getStoreFile() 122 { return m_file; } 123 getName() const124 const rtl::OUString& getName() const 125 { return m_name; } 126 127 friend class ORegKey; 128 129 private: 130 RegError eraseKey(ORegKey* pKey, const rtl::OUString& keyName); 131 132 RegError deleteSubkeysAndValues(ORegKey* pKey); 133 134 RegError loadAndSaveValue(ORegKey* pTargetKey, 135 ORegKey* pSourceKey, 136 const rtl::OUString& valueName, 137 sal_uInt32 nCut, 138 sal_Bool bWarnings=sal_False, 139 sal_Bool bReport=sal_False); 140 141 RegError checkBlop(store::OStoreStream& rValue, 142 const rtl::OUString& sTargetPath, 143 sal_uInt32 srcValueSize, 144 sal_uInt8* pSrcBuffer, 145 sal_Bool bReport=sal_False); 146 147 RegError mergeModuleValue(store::OStoreStream& rTargetValue, 148 RegistryTypeReader& reader, 149 RegistryTypeReader& reader2); 150 151 RegError loadAndSaveKeys(ORegKey* pTargetKey, 152 ORegKey* pSourceKey, 153 const rtl::OUString& keyName, 154 sal_uInt32 nCut, 155 sal_Bool bWarnings=sal_False, 156 sal_Bool bReport=sal_False); 157 158 RegError dumpValue(const rtl::OUString& sPath, 159 const rtl::OUString& sName, 160 sal_Int16 nSpace) const; 161 162 RegError dumpKey(const rtl::OUString& sPath, 163 const rtl::OUString& sName, 164 sal_Int16 nSpace) const; 165 166 typedef std::hash_map< rtl::OUString, ORegKey*, rtl::OUStringHash > KeyMap; 167 168 sal_uInt32 m_refCount; 169 osl::Mutex m_mutex; 170 sal_Bool m_readOnly; 171 sal_Bool m_isOpen; 172 rtl::OUString m_name; 173 store::OStoreFile m_file; 174 KeyMap m_openKeyTable; 175 176 const rtl::OUString ROOT; 177 }; 178 179 #endif 180 181