diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2019-01-23 17:40:29 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2019-01-23 21:06:31 +0100 |
commit | bcb1969f961874ccbcef7fc042b3cc164c8d2325 (patch) | |
tree | 4f8f48eaf997e570cd203154b6a297bf54208952 /ucb | |
parent | 45c1056fb4d05b0a8efe0b23ae21e67e68393d9c (diff) |
rhbz#1667364 Open doc as R/O for which open(...,O_RDWR) returns EOPNOTSUPP
Map that EOPNOTSUPP to osl_File_E_NOSYS (and intercept it in
StillReadWriteInteraction, as used by MediaDescriptor::impl_openStreamWithURL in
unotools/source/misc/mediadescriptor.cxx, which will retry opening it read-only
then), instead of to osl_File_E_invalidError (which lead to the "General
input/output error" box).
Instead of "silently" opening the doc as read-only, this still pops up a box
claiming that the doc is locked by somebody else, asking whether to open it
read-only or to open a copy. That's probably because of the
rDescriptor.erase( utl::MediaDescriptor::PROP_READONLY() );
in TypeDetection::impl_openStream (filter/source/config/cache/typedetection.cxx)
where the comment already hints at the confusion among the different read-only
and locking concepts. Changing that looks like it would easily cause
regressions, so is left for a follow-up commit. (And ultimately LO wouldn't
need to treat the doc as read-only at all; it would just need to not attempt to
open it O_RDWR upfront, and save it via copy+rename, like other apps appear to
commonly do.)
Change-Id: I56e18f1864084ba222acaf0e38a604082edaf4c6
Reviewed-on: https://gerrit.libreoffice.org/66805
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'ucb')
-rw-r--r-- | ucb/source/ucp/file/filglob.cxx | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/ucb/source/ucp/file/filglob.cxx b/ucb/source/ucp/file/filglob.cxx index c7d3e60fe515..e19be3458919 100644 --- a/ucb/source/ucp/file/filglob.cxx +++ b/ucb/source/ucp/file/filglob.cxx @@ -344,7 +344,9 @@ namespace fileaccess { case FileBase::E_NOLCK: // No record locks available ioErrorCode = IOErrorCode_LOCKING_VIOLATION; break; - + case FileBase::E_NOSYS: + ioErrorCode = IOErrorCode_NOT_SUPPORTED; + break; case FileBase::E_FAULT: // Bad address case FileBase::E_LOOP: // Too many symbolic links encountered case FileBase::E_NOSPC: // No space left on device |