xref: /AOO41X/main/registry/source/regimpl.hxx (revision 5a5f4a753fc2b8c5e36d61a0683c4a2f75cb68ee)
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