diff options
Diffstat (limited to 'framework/source/accelerators/storageholder.cxx')
-rw-r--r-- | framework/source/accelerators/storageholder.cxx | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/framework/source/accelerators/storageholder.cxx b/framework/source/accelerators/storageholder.cxx index 1cf4ca98719d..99c67af297e0 100644 --- a/framework/source/accelerators/storageholder.cxx +++ b/framework/source/accelerators/storageholder.cxx @@ -383,7 +383,6 @@ css::uno::Reference< css::embed::XStorage > StorageHolder::openSubStorageWithFal { // a) try it first with user specified open mode // ignore errors ... but save it for later use! - css::uno::Exception exResult; try { css::uno::Reference< css::embed::XStorage > xSubStorage = xBaseStorage->openStorageElement(sSubStorage, eOpenMode); @@ -391,13 +390,19 @@ css::uno::Reference< css::embed::XStorage > StorageHolder::openSubStorageWithFal return xSubStorage; } catch(const css::uno::RuntimeException&) - { throw; } - catch(const css::uno::Exception& ex) - { exResult = ex; } + { + throw; + } + catch(const css::uno::Exception&) + { + // b) readonly already tried? => forward last error! + if ((eOpenMode & css::embed::ElementModes::WRITE) != css::embed::ElementModes::WRITE) // fallback possible ? + throw; + } - // b) readonly already tried? => forward last error! + // b) readonly already tried, throw error if ((eOpenMode & css::embed::ElementModes::WRITE) != css::embed::ElementModes::WRITE) // fallback possible ? - throw exResult; + throw css::uno::Exception(); // c) try it readonly // don't catch exception here! Outside code wish to know, if operation failed or not. |