diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2015-04-30 10:20:00 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2015-04-30 10:20:00 +0200 |
commit | 3ead3ad52f9bb2f9d1d6cf8dfc73a0a25e6778ed (patch) | |
tree | bdfd28afe5a452060e3d985c5f01b45f4b7bc2cd /sot | |
parent | 57d254d42b6e1d836bd21e6fb2e968af2b511c7d (diff) |
Gradually typed Link
Turn the Link class into a template abstracting over the link's argument and
return types, but provide default template arguments that keep the generic,
unsafe "void* in, sal_IntPtr out" behvior. That way, individual uses of the
Link class can be updated over time.
All the related macros are duplicated with ..._TYPED counterparts, that
additionally take the RetType (except for LINK_TYPED, which manages to infer the
relevant types from the supplied Member).
(It would have been attractive to change the "untyped" LinkStubs from taking a
void* to a properly typed ArgType parameter, too, but that would cause
-fsanitize=function to flag uses of "untyped" Link::Call.)
Change-Id: I3b0140378bad99abbf240140ebb4a46a05d2d2f8
Diffstat (limited to 'sot')
-rw-r--r-- | sot/source/sdstor/stg.cxx | 2 | ||||
-rw-r--r-- | sot/source/sdstor/stgio.cxx | 6 | ||||
-rw-r--r-- | sot/source/sdstor/stgio.hxx | 4 |
3 files changed, 6 insertions, 6 deletions
diff --git a/sot/source/sdstor/stg.cxx b/sot/source/sdstor/stg.cxx index 0f86bd0d5631..a3e20858b1e4 100644 --- a/sot/source/sdstor/stg.cxx +++ b/sot/source/sdstor/stg.cxx @@ -1019,7 +1019,7 @@ bool Storage::ShouldConvert() bool Storage::ValidateFAT() { - Link aLink = StgIo::GetErrorLink(); + Link<> aLink = StgIo::GetErrorLink(); ErrCode nErr = pIo->ValidateFATs(); StgIo::SetErrorLink( aLink ); return nErr == ERRCODE_NONE; diff --git a/sot/source/sdstor/stgio.cxx b/sot/source/sdstor/stgio.cxx index b9671bf0f33c..11f391efe0fb 100644 --- a/sot/source/sdstor/stgio.cxx +++ b/sot/source/sdstor/stgio.cxx @@ -337,14 +337,14 @@ sal_uLong Validator::FindUnrefedChains() return FAT_OK; } -namespace { struct ErrorLink : public rtl::Static<Link, ErrorLink > {}; } +namespace { struct ErrorLink : public rtl::Static<Link<>, ErrorLink > {}; } -void StgIo::SetErrorLink( const Link& rLink ) +void StgIo::SetErrorLink( const Link<>& rLink ) { ErrorLink::get() = rLink; } -const Link& StgIo::GetErrorLink() +const Link<>& StgIo::GetErrorLink() { return ErrorLink::get(); } diff --git a/sot/source/sdstor/stgio.hxx b/sot/source/sdstor/stgio.hxx index 511f26af2b3a..8922d809cc01 100644 --- a/sot/source/sdstor/stgio.hxx +++ b/sot/source/sdstor/stgio.hxx @@ -64,8 +64,8 @@ public: bool Init(); // set up an empty file bool CommitAll(); // commit everything (root commit) - static void SetErrorLink( const Link& ); - static const Link& GetErrorLink(); + static void SetErrorLink( const Link<>& ); + static const Link<>& GetErrorLink(); sal_uLong ValidateFATs( ); }; |