LibreOffice Module configmgr (master)  1
configurationregistry.cxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include <sal/config.h>
21 
22 #include <cassert>
23 
24 #include <com/sun/star/beans/NamedValue.hpp>
25 #include <com/sun/star/container/NoSuchElementException.hpp>
26 #include <com/sun/star/container/XHierarchicalNameAccess.hpp>
27 #include <com/sun/star/container/XNamed.hpp>
28 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
29 #include <com/sun/star/lang/XServiceInfo.hpp>
30 #include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
31 #include <com/sun/star/registry/InvalidRegistryException.hpp>
32 #include <com/sun/star/registry/InvalidValueException.hpp>
33 #include <com/sun/star/registry/RegistryKeyType.hpp>
34 #include <com/sun/star/registry/RegistryValueType.hpp>
35 #include <com/sun/star/registry/XRegistryKey.hpp>
36 #include <com/sun/star/registry/XSimpleRegistry.hpp>
37 #include <com/sun/star/uno/Any.hxx>
38 #include <com/sun/star/uno/DeploymentException.hpp>
39 #include <com/sun/star/uno/Exception.hpp>
40 #include <com/sun/star/uno/Reference.hxx>
41 #include <com/sun/star/uno/RuntimeException.hpp>
42 #include <com/sun/star/uno/Sequence.hxx>
43 #include <com/sun/star/uno/Type.hxx>
44 #include <com/sun/star/uno/TypeClass.hpp>
45 #include <com/sun/star/uno/XComponentContext.hpp>
46 #include <com/sun/star/uno/XInterface.hpp>
47 #include <com/sun/star/util/XFlushable.hpp>
48 #include <cppu/unotype.hxx>
49 #include <cppuhelper/exc_hlp.hxx>
50 #include <cppuhelper/implbase.hxx>
52 #include <cppuhelper/weak.hxx>
53 #include <osl/mutex.hxx>
54 #include <rtl/ustring.hxx>
55 #include <sal/types.h>
56 
57 namespace com::sun::star::util {
58  class XFlushListener;
59 }
60 
62 
63 namespace {
64 
65 class Service:
66  public cppu::WeakImplHelper<
67  css::lang::XServiceInfo, css::registry::XSimpleRegistry,
68  css::util::XFlushable >
69 {
70 public:
71  explicit Service(css::uno::Reference< css::uno::XComponentContext > const & context);
72 
73 private:
74  Service(const Service&) = delete;
75  Service& operator=(const Service&) = delete;
76 
77  virtual ~Service() override {}
78 
79  virtual OUString SAL_CALL getImplementationName() override
80  { return "com.sun.star.comp.configuration.ConfigurationRegistry"; }
81 
82  virtual sal_Bool SAL_CALL supportsService(OUString const & ServiceName) override
83  { return cppu::supportsService(this, ServiceName); }
84 
85  virtual css::uno::Sequence< OUString > SAL_CALL
86  getSupportedServiceNames() override
87  { return { "com.sun.star.configuration.ConfigurationRegistry" }; }
88 
89  virtual OUString SAL_CALL getURL() override;
90 
91  virtual void SAL_CALL open(
92  OUString const & rURL, sal_Bool bReadOnly, sal_Bool) override;
93 
94  virtual sal_Bool SAL_CALL isValid() override;
95 
96  virtual void SAL_CALL close() override;
97 
98  virtual void SAL_CALL destroy() override;
99 
100  virtual css::uno::Reference< css::registry::XRegistryKey > SAL_CALL
101  getRootKey() override;
102 
103  virtual sal_Bool SAL_CALL isReadOnly() override;
104 
105  virtual void SAL_CALL mergeKey(OUString const &, OUString const &) override;
106 
107  virtual void SAL_CALL flush() override;
108 
109  virtual void SAL_CALL addFlushListener(
110  css::uno::Reference< css::util::XFlushListener > const &) override;
111 
112  virtual void SAL_CALL removeFlushListener(
113  css::uno::Reference< css::util::XFlushListener > const &) override;
114 
115  void checkValid();
116 
117  void checkValid_RuntimeException();
118 
119  void doClose();
120 
121  css::uno::Reference< css::lang::XMultiServiceFactory > provider_;
122  osl::Mutex mutex_;
123  css::uno::Reference< css::uno::XInterface > access_;
124  OUString url_;
125  bool readOnly_;
126 
127  friend class RegistryKey;
128 };
129 
130 class RegistryKey:
131  public cppu::WeakImplHelper< css::registry::XRegistryKey >
132 {
133 public:
134  RegistryKey(Service & service, css::uno::Any const & value):
135  service_(service), value_(value) {}
136 
137 private:
138  RegistryKey(const RegistryKey&) = delete;
139  RegistryKey& operator=(const RegistryKey&) = delete;
140 
141  virtual ~RegistryKey() override {}
142 
143  virtual OUString SAL_CALL getKeyName() override;
144 
145  virtual sal_Bool SAL_CALL isReadOnly() override;
146 
147  virtual sal_Bool SAL_CALL isValid() override;
148 
149  virtual css::registry::RegistryKeyType SAL_CALL getKeyType(
150  OUString const &) override;
151 
152  virtual css::registry::RegistryValueType SAL_CALL getValueType() override;
153 
154  virtual sal_Int32 SAL_CALL getLongValue() override;
155 
156  virtual void SAL_CALL setLongValue(sal_Int32) override;
157 
158  virtual css::uno::Sequence< sal_Int32 > SAL_CALL getLongListValue() override;
159 
160  virtual void SAL_CALL setLongListValue(
161  css::uno::Sequence< sal_Int32 > const &) override;
162 
163  virtual OUString SAL_CALL getAsciiValue() override;
164 
165  virtual void SAL_CALL setAsciiValue(OUString const &) override;
166 
167  virtual css::uno::Sequence< OUString > SAL_CALL getAsciiListValue() override;
168 
169  virtual void SAL_CALL setAsciiListValue(
170  css::uno::Sequence< OUString > const &) override;
171 
172  virtual OUString SAL_CALL getStringValue() override;
173 
174  virtual void SAL_CALL setStringValue(OUString const &) override;
175 
176  virtual css::uno::Sequence< OUString > SAL_CALL getStringListValue() override;
177 
178  virtual void SAL_CALL setStringListValue(
179  css::uno::Sequence< OUString > const &) override;
180 
181  virtual css::uno::Sequence< sal_Int8 > SAL_CALL getBinaryValue() override;
182 
183  virtual void SAL_CALL setBinaryValue(css::uno::Sequence< sal_Int8 > const &) override;
184 
185  virtual css::uno::Reference< css::registry::XRegistryKey > SAL_CALL openKey(
186  OUString const & aKeyName) override;
187 
188  virtual css::uno::Reference< css::registry::XRegistryKey > SAL_CALL
189  createKey(OUString const &) override;
190 
191  virtual void SAL_CALL closeKey() override;
192 
193  virtual void SAL_CALL deleteKey(OUString const &) override;
194 
195  virtual
196  css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > >
197  SAL_CALL openKeys() override;
198 
199  virtual css::uno::Sequence< OUString > SAL_CALL getKeyNames() override;
200 
201  virtual sal_Bool SAL_CALL createLink(
202  OUString const &, OUString const &) override;
203 
204  virtual void SAL_CALL deleteLink(OUString const &) override;
205 
206  virtual OUString SAL_CALL getLinkTarget(OUString const &) override;
207 
208  virtual OUString SAL_CALL getResolvedName(
209  OUString const & aKeyName) override;
210 
212  css::uno::Any value_;
213 };
214 
215 Service::Service(
216  css::uno::Reference< css::uno::XComponentContext > const & context)
217  : readOnly_(false)
218 {
219  assert(context.is());
220  try {
221  provider_.set(
222  context->getServiceManager()->createInstanceWithContext(
223  "com.sun.star.configuration.DefaultProvider", context),
224  css::uno::UNO_QUERY_THROW);
225  } catch (css::uno::RuntimeException &) {
226  throw;
227  } catch (css::uno::Exception & e) {
228  throw css::uno::DeploymentException(
229  ("component context fails to supply service"
230  " com.sun.star.configuration.DefaultProvider of type"
231  " com.sun.star.lang.XMultiServiceFactory: " + e.Message),
232  context);
233  }
234 }
235 
236 OUString Service::getURL() {
237  osl::MutexGuard g(mutex_);
238  checkValid_RuntimeException();
239  return url_;
240 }
241 
242 void Service::open(OUString const & rURL, sal_Bool bReadOnly, sal_Bool)
243 {
244  //TODO: bCreate
245  osl::MutexGuard g(mutex_);
246  if (access_.is()) {
247  doClose();
248  }
249  css::uno::Sequence< css::uno::Any > args(1);
250  args[0] <<= css::beans::NamedValue("nodepath", css::uno::Any(rURL));
251  try {
252  access_ = provider_->createInstanceWithArguments(
253  (bReadOnly
254  ? OUString("com.sun.star.configuration.ConfigurationAccess")
255  : OUString(
256  "com.sun.star.configuration.ConfigurationUpdateAccess")),
257  args);
258  } catch (css::uno::RuntimeException &) {
259  throw;
260  } catch (css::uno::Exception & e) {
261  css::uno::Any anyEx = cppu::getCaughtException();
262  throw css::lang::WrappedTargetRuntimeException(
263  "com.sun.star.configuration.ConfigurationRegistry: open failed: " +
264  e.Message,
265  static_cast< cppu::OWeakObject * >(this), anyEx );
266  }
267  url_ = rURL;
268  readOnly_ = bReadOnly;
269 }
270 
271 sal_Bool Service::isValid() {
272  osl::MutexGuard g(mutex_);
273  return access_.is();
274 }
275 
276 void Service::close()
277 {
278  osl::MutexGuard g(mutex_);
279  checkValid();
280  doClose();
281 }
282 
283 void Service::destroy()
284 {
285  throw css::uno::RuntimeException(
286  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
287  static_cast< cppu::OWeakObject * >(this));
288 }
289 
290 css::uno::Reference< css::registry::XRegistryKey > Service::getRootKey()
291 {
292  osl::MutexGuard g(mutex_);
293  checkValid();
294  return new RegistryKey(*this, css::uno::Any(access_));
295 }
296 
297 sal_Bool Service::isReadOnly() {
298  osl::MutexGuard g(mutex_);
299  checkValid_RuntimeException();
300  return readOnly_;
301 }
302 
303 void Service::mergeKey(OUString const &, OUString const &)
304 {
305  throw css::uno::RuntimeException(
306  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
307  static_cast< cppu::OWeakObject * >(this));
308 }
309 
310 void Service::flush()
311 {
312  throw css::uno::RuntimeException(
313  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
314  static_cast< cppu::OWeakObject * >(this));
315 }
316 
317 void Service::addFlushListener(
318  css::uno::Reference< css::util::XFlushListener > const &)
319 {
320  throw css::uno::RuntimeException(
321  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
322  static_cast< cppu::OWeakObject * >(this));
323 }
324 
325 void Service::removeFlushListener(
326  css::uno::Reference< css::util::XFlushListener > const &)
327 {
328  throw css::uno::RuntimeException(
329  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
330  static_cast< cppu::OWeakObject * >(this));
331 }
332 
333 void Service::checkValid() {
334  if (!access_.is()) {
335  throw css::registry::InvalidRegistryException(
336  "com.sun.star.configuration.ConfigurationRegistry: not valid",
337  static_cast< cppu::OWeakObject * >(this));
338  }
339 }
340 
341 void Service::checkValid_RuntimeException() {
342  if (!access_.is()) {
343  throw css::uno::RuntimeException(
344  "com.sun.star.configuration.ConfigurationRegistry: not valid",
345  static_cast< cppu::OWeakObject * >(this));
346  }
347 }
348 
349 void Service::doClose() {
350  access_.clear();
351 }
352 
353 OUString RegistryKey::getKeyName() {
354  osl::MutexGuard g(service_.mutex_);
355  service_.checkValid_RuntimeException();
356  css::uno::Reference< css::container::XNamed > named;
357  if (value_ >>= named) {
358  return named->getName();
359  }
360  throw css::uno::RuntimeException(
361  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
362  static_cast< cppu::OWeakObject * >(this));
363 }
364 
366 {
367  osl::MutexGuard g(service_.mutex_);
368  service_.checkValid_RuntimeException();
369  return service_.readOnly_; //TODO: read-only sub-nodes in update access?
370 }
371 
373  return service_.isValid();
374 }
375 
376 css::registry::RegistryKeyType RegistryKey::getKeyType(OUString const &)
377 {
378  osl::MutexGuard g(service_.mutex_);
379  service_.checkValid();
380  return css::registry::RegistryKeyType_KEY;
381 }
382 
383 css::registry::RegistryValueType RegistryKey::getValueType()
384 {
385  osl::MutexGuard g(service_.mutex_);
386  service_.checkValid();
387  css::uno::Type t(value_.getValueType());
388  switch (t.getTypeClass()) {
389  case css::uno::TypeClass_LONG:
390  return css::registry::RegistryValueType_LONG;
391  case css::uno::TypeClass_STRING:
392  return css::registry::RegistryValueType_STRING;
393  case css::uno::TypeClass_SEQUENCE:
394  if (t == cppu::UnoType< css::uno::Sequence< sal_Int8 > >::get()) {
395  return css::registry::RegistryValueType_BINARY;
396  } else if (t == cppu::UnoType< css::uno::Sequence< sal_Int32 > >::get())
397  {
398  return css::registry::RegistryValueType_LONGLIST;
399  } else if (t ==
400  cppu::UnoType< css::uno::Sequence< OUString > >::get())
401  {
402  return css::registry::RegistryValueType_STRINGLIST;
403  }
404  [[fallthrough]];
405  default:
406  return css::registry::RegistryValueType_NOT_DEFINED;
407  }
408 }
409 
410 sal_Int32 RegistryKey::getLongValue()
411 {
412  osl::MutexGuard g(service_.mutex_);
413  service_.checkValid();
414  sal_Int32 v = 0;
415  if (value_ >>= v) {
416  return v;
417  }
418  throw css::registry::InvalidValueException(
419  "com.sun.star.configuration.ConfigurationRegistry",
420  static_cast< cppu::OWeakObject * >(this));
421 }
422 
423 void RegistryKey::setLongValue(sal_Int32)
424 {
425  throw css::uno::RuntimeException(
426  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
427  static_cast< cppu::OWeakObject * >(this));
428 }
429 
430 css::uno::Sequence< sal_Int32 > RegistryKey::getLongListValue()
431 {
432  osl::MutexGuard g(service_.mutex_);
433  service_.checkValid();
434  css::uno::Sequence< sal_Int32 > v;
435  if (value_ >>= v) {
436  return v;
437  }
438  throw css::registry::InvalidValueException(
439  "com.sun.star.configuration.ConfigurationRegistry",
440  static_cast< cppu::OWeakObject * >(this));
441 }
442 
443 void RegistryKey::setLongListValue(css::uno::Sequence< sal_Int32 > const &)
444 {
445  throw css::uno::RuntimeException(
446  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
447  static_cast< cppu::OWeakObject * >(this));
448 }
449 
450 OUString RegistryKey::getAsciiValue()
451 {
452  osl::MutexGuard g(service_.mutex_);
453  service_.checkValid();
454  OUString v;
455  if (value_ >>= v) {
456  return v;
457  }
458  throw css::registry::InvalidValueException(
459  "com.sun.star.configuration.ConfigurationRegistry",
460  static_cast< cppu::OWeakObject * >(this));
461 }
462 
463 void RegistryKey::setAsciiValue(OUString const &)
464 {
465  throw css::uno::RuntimeException(
466  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
467  static_cast< cppu::OWeakObject * >(this));
468 }
469 
470 css::uno::Sequence< OUString > RegistryKey::getAsciiListValue()
471 {
472  osl::MutexGuard g(service_.mutex_);
473  service_.checkValid();
474  css::uno::Sequence< OUString > v;
475  if (value_ >>= v) {
476  return v;
477  }
478  throw css::registry::InvalidValueException(
479  "com.sun.star.configuration.ConfigurationRegistry",
480  static_cast< cppu::OWeakObject * >(this));
481 }
482 
483 void RegistryKey::setAsciiListValue(css::uno::Sequence< OUString > const &)
484 {
485  throw css::uno::RuntimeException(
486  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
487  static_cast< cppu::OWeakObject * >(this));
488 }
489 
490 OUString RegistryKey::getStringValue()
491 {
492  osl::MutexGuard g(service_.mutex_);
493  service_.checkValid();
494  OUString v;
495  if (value_ >>= v) {
496  return v;
497  }
498  throw css::registry::InvalidValueException(
499  "com.sun.star.configuration.ConfigurationRegistry",
500  static_cast< cppu::OWeakObject * >(this));
501 }
502 
503 void RegistryKey::setStringValue(OUString const &)
504 {
505  throw css::uno::RuntimeException(
506  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
507  static_cast< cppu::OWeakObject * >(this));
508 }
509 
510 css::uno::Sequence< OUString > RegistryKey::getStringListValue()
511 {
512  osl::MutexGuard g(service_.mutex_);
513  service_.checkValid();
514  css::uno::Sequence< OUString > v;
515  if (value_ >>= v) {
516  return v;
517  }
518  throw css::registry::InvalidValueException(
519  "com.sun.star.configuration.ConfigurationRegistry",
520  static_cast< cppu::OWeakObject * >(this));
521 }
522 
524  css::uno::Sequence< OUString > const &)
525 {
526  throw css::uno::RuntimeException(
527  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
528  static_cast< cppu::OWeakObject * >(this));
529 }
530 
531 css::uno::Sequence< sal_Int8 > RegistryKey::getBinaryValue()
532 {
533  osl::MutexGuard g(service_.mutex_);
534  service_.checkValid();
535  css::uno::Sequence< sal_Int8 > v;
536  if (value_ >>= v) {
537  return v;
538  }
539  throw css::registry::InvalidValueException(
540  "com.sun.star.configuration.ConfigurationRegistry",
541  static_cast< cppu::OWeakObject * >(this));
542 }
543 
544 void RegistryKey::setBinaryValue(css::uno::Sequence< sal_Int8 > const &)
545 {
546  throw css::uno::RuntimeException(
547  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
548  static_cast< cppu::OWeakObject * >(this));
549 }
550 
551 css::uno::Reference< css::registry::XRegistryKey > RegistryKey::openKey(
552  OUString const & aKeyName)
553 {
554  osl::MutexGuard g(service_.mutex_);
555  service_.checkValid_RuntimeException();
556  css::uno::Reference< css::container::XHierarchicalNameAccess > access;
557  if (value_ >>= access) {
558  try {
559  return new RegistryKey(
560  service_, access->getByHierarchicalName(aKeyName));
561  } catch (css::container::NoSuchElementException &) {}
562  }
563  return css::uno::Reference< css::registry::XRegistryKey >();
564 }
565 
566 css::uno::Reference< css::registry::XRegistryKey > RegistryKey::createKey(
567  OUString const &)
568 {
569  throw css::uno::RuntimeException(
570  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
571  static_cast< cppu::OWeakObject * >(this));
572 }
573 
575 {
576  osl::MutexGuard g(service_.mutex_);
577  service_.checkValid_RuntimeException();
578 }
579 
580 void RegistryKey::deleteKey(OUString const &)
581 {
582  throw css::uno::RuntimeException(
583  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
584  static_cast< cppu::OWeakObject * >(this));
585 }
586 
587 css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > >
588 RegistryKey::openKeys()
589 {
590  throw css::uno::RuntimeException(
591  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
592  static_cast< cppu::OWeakObject * >(this));
593 }
594 
595 css::uno::Sequence< OUString > RegistryKey::getKeyNames()
596 {
597  throw css::uno::RuntimeException(
598  "com.sun.star.configuration.ConfigurationRegistry: not implemented",
599  static_cast< cppu::OWeakObject * >(this));
600 }
601 
602 sal_Bool RegistryKey::createLink(OUString const &, OUString const &)
603 {
604  osl::MutexGuard g(service_.mutex_);
605  service_.checkValid_RuntimeException();
606  return false;
607 }
608 
609 void RegistryKey::deleteLink(OUString const &)
610 {
611  osl::MutexGuard g(service_.mutex_);
612  service_.checkValid_RuntimeException();
613 }
614 
615 OUString RegistryKey::getLinkTarget(OUString const &)
616 {
617  osl::MutexGuard g(service_.mutex_);
618  service_.checkValid_RuntimeException();
619  return OUString();
620 }
621 
622 OUString RegistryKey::getResolvedName(OUString const & aKeyName)
623 {
624  osl::MutexGuard g(service_.mutex_);
625  service_.checkValid_RuntimeException();
626  return aKeyName;
627 }
628 
629 }
630 
631 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
633  css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> const&)
634 {
635  return cppu::acquire(new Service(context));
636 }
637 
638 }
639 
640 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
bool isValid() const
css::uno::Any value_
RegError REGISTRY_CALLTYPE getStringListValue(RegKeyHandle hKey, rtl_uString *keyName, char ***pValueList, sal_uInt32 *pLen)
RegError openKey(const OUString &keyName, RegistryKey &rOpenKey)
RegError setStringListValue(const OUString &keyName, char **pValueList, sal_uInt32 len)
css::uno::Sequence< OUString > getSupportedServiceNames()
tuple args
RegError REGISTRY_CALLTYPE closeKey(RegKeyHandle hKey)
bool bReadOnly
Service & service_
RegError getKeyNames(const OUString &keyName, RegistryKeyNames &rSubKeyNames)
Any SAL_CALL getCaughtException()
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
osl::Mutex mutex_
RegError REGISTRY_CALLTYPE openKey(RegKeyHandle hKey, rtl_uString *keyName, RegKeyHandle *phOpenKey)
RegError setLongListValue(const OUString &keyName, sal_Int32 const *pValueList, sal_uInt32 len)
OUString url_
unsigned char sal_Bool
bool readOnly_
RegError deleteKey(const OUString &keyName)
RegError REGISTRY_CALLTYPE setStringListValue(RegKeyHandle hKey, rtl_uString *keyName, char **pValueList, sal_uInt32 len)
RegError REGISTRY_CALLTYPE deleteKey(RegKeyHandle hKey, rtl_uString *keyName)
RegError closeKey()
RegError REGISTRY_CALLTYPE setLongListValue(RegKeyHandle hKey, rtl_uString *keyName, sal_Int32 const *pValueList, sal_uInt32 len)
XPropertyListType t
bool close
float v
css::uno::Reference< css::lang::XMultiServiceFactory > provider_
bool isReadOnly() const
RegError REGISTRY_CALLTYPE getLongListValue(RegKeyHandle hKey, rtl_uString *keyName, sal_Int32 **pValueList, sal_uInt32 *pLen)
RegError getStringListValue(const OUString &keyName, RegistryValueList< char * > &rValueList)
RegError REGISTRY_CALLTYPE getKeyNames(RegKeyHandle hKey, rtl_uString *keyName, rtl_uString ***pSubKeyNames, sal_uInt32 *pnSubKeys)
css::uno::Reference< css::uno::XInterface > access_
RegError getLongListValue(const OUString &keyName, RegistryValueList< sal_Int32 > &rValueList)
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * com_sun_star_comp_configuration_ConfigurationRegistry_get_implementation(css::uno::XComponentContext *context, css::uno::Sequence< css::uno::Any > const &)
RegError REGISTRY_CALLTYPE getKeyName(RegKeyHandle hKey, rtl_uString **pKeyName)
RegError createKey(const OUString &keyName, RegistryKey &rNewKey)
RegError REGISTRY_CALLTYPE createKey(RegKeyHandle hKey, rtl_uString *keyName, RegKeyHandle *phNewKey)