[Libreoffice] [PATCH] fdo#34908

Noel Power nopower at novell.com
Tue Mar 29 05:13:34 PDT 2011


Hi Lubos
On 25/03/11 18:52, Lubos Lunak wrote:
> printf( "%p %p %s %p %p %s %p %p %s\n", ptr, dynamic_cast<  void*>( ptr ),
> typeid( *ptr ).name(), pFieldmark, dynamic_cast<  void*>( pFieldmark ),
> typeid( *pFieldmark ).name(), pCheckboxFm, dynamic_cast<  void*>(
> pCheckboxFm ), typeid( *pCheckboxFm ).name());
>
>   (where 'ptr' is what you get from the pMarksAccess->makeNoTextFieldBookmark()
> call before casting to anything)
Okay, managed to put in some debug

here the code snippet(s) were the debug was done ( same for 
distro/no-distro except for some text to distinguish one from the other )

ww8par3.cxx: ( SwWW8ImplReader::Read_F_FormCheckBox )
[...]
     if (aBookmarkName.Len()>0)
     {
         IDocumentMarkAccess* pMarksAccess = rDoc.getIDocumentMarkAccess( );
         //IFieldmark* pFieldmark = dynamic_cast<IFieldmark*>( 
pMarksAccess->makeNoTextFieldBookmark(
         IFieldmark* ptr = ( pMarksAccess->makeNoTextFieldBookmark(
                 *pPaM, aBookmarkName,
                 rtl::OUString::createFromAscii( ODF_FORMCHECKBOX ) ) );
         IFieldmark* pFieldmark = dynamic_cast<IFieldmark*>( ptr );
         OSL_ENSURE(pFieldmark!=NULL, "hmmm; why was the bookmark not 
created?");
         if (pFieldmark!=NULL) {
             IFieldmark::parameter_map_t* const pParameters = 
pFieldmark->GetParameters();
             ICheckboxFieldmark* pCheckboxFm = 
reinterpret_cast<ICheckboxFieldmark*>(pFieldmark);
             OSL_TRACE( "distro ( Read_F_FormCheckBox ) %p %p %s %p %p 
%s %p %p %s reinterpret %p %s\n",
                 ptr, dynamic_cast< void* >( ptr ), typeid( *ptr ).name(),
                 pFieldmark, dynamic_cast< void* >( pFieldmark ), 
typeid( *pFieldmark ).name(),
                 pCheckboxFm, dynamic_cast< void* >( pCheckboxFm ), 
typeid( *pCheckboxFm ).name(),
                 reinterpret_cast<ICheckboxFieldmark*>( ptr ), typeid( 
(*reinterpret_cast<ICheckboxFieldmark*>( ptr ))).name() );
             OSL_TRACE("dynamic_cast<ICheckboxFieldmark*>( ptr ) %p", 
dynamic_cast<ICheckboxFieldmark*>( ptr ));
[...]


docbm.cxx ( MarkManager::makeNoTextFieldBookmark )
[...]
         sw::mark::IMark* pMark = makeMark( rPaM, rName,
                 IDocumentMarkAccess::CHECKBOX_FIELDMARK );
         sw::mark::IFieldmark* pFieldMark = 
dynamic_cast<sw::mark::IFieldmark*>( pMark );
         sw::mark::ICheckboxFieldmark* pCBmark = 
dynamic_cast<sw::mark::ICheckboxFieldmark*>( pMark );
         OSL_TRACE( "distro (makeNoTextFieldBookmark ) %p %p %s  %p %p 
%s \n", pMark, dynamic_cast< void* >( pMark ), typeid( *pMark ).name(),
pCBmark, dynamic_cast< void* >( pCBmark ), typeid( *pCBmark ).name( )
[...]

and the results......

disto 32-bit
============
distro (makeNoTextFieldBookmark ) 0x8d013a4 0x8d01370 
N2sw4mark17CheckboxFieldmarkE  0x8d013a4 0x8d01370 
N2sw4mark17CheckboxFieldmarkE

(interesting in the library the implementation is in the dynamic_cast  
works )

distro 0x8d013a4 0x8d01370 N2sw4mark17CheckboxFieldmarkE 0x8d013a4 
0x8d01370 N2sw4mark17CheckboxFieldmarkE 0x8d013a4 0x8d01370 
N2sw4mark17CheckboxFieldmarkE reinterpret 0x8d013a4 
N2sw4mark17CheckboxFieldmarkE
dynamic_cast<ICheckboxFieldmark*>( ptr ) (nil)

( and here it doesn't so I guess there is some symbol confusion.. but I 
don't see it )

output from nm:

nm unxlngi6.pro/lib/libswli.so | c++filt | grep ICheckboxField

00343c90 t sw::mark::ICheckboxFieldmark::ICheckboxFieldmark()
00344bdc t sw::mark::ICheckboxFieldmark::~ICheckboxFieldmark()
00344d98 t sw::mark::ICheckboxFieldmark::~ICheckboxFieldmark()
00344f36 t sw::mark::ICheckboxFieldmark::~ICheckboxFieldmark()
00ebc9c0 d construction vtable for 
sw::mark::ICheckboxFieldmark-in-sw::mark::CheckboxFieldmark
00ebe3a0 V construction vtable for 
sw::mark::IFieldmark-in-sw::mark::ICheckboxFieldmark
00ebe460 V construction vtable for 
sw::mark::IMark-in-sw::mark::ICheckboxFieldmark
00ebdea0 V typeinfo for sw::mark::ICheckboxFieldmark
00d4ef30 V typeinfo name for sw::mark::ICheckboxFieldmark
00ebe360 V VTT for sw::mark::ICheckboxFieldmark
00ebe280 V vtable for sw::mark::ICheckboxFieldmark
00344bbe t virtual thunk to 
sw::mark::ICheckboxFieldmark::~ICheckboxFieldmark()
00344d7a t virtual thunk to 
sw::mark::ICheckboxFieldmark::~ICheckboxFieldmark()
00344bcd t virtual thunk to 
sw::mark::ICheckboxFieldmark::~ICheckboxFieldmark()
00344d89 t virtual thunk to 
sw::mark::ICheckboxFieldmark::~ICheckboxFieldmark()

nm unxlngi6.pro/lib/libmswordli.so | c++filt | grep ICheckboxField
0023b9b8 V typeinfo for sw::mark::ICheckboxFieldmark
001f303c V typeinfo name for sw::mark::ICheckboxFieldmark


non - disto 32-bit
==================
no-distro (makeNoTextFieldBookmark ) 0x8c8c2ec 0x8c8c2b8 
N2sw4mark17CheckboxFieldmarkE  0x8c8c2ec 0x8c8c2b8 
N2sw4mark17CheckboxFieldmarkE

no-distro 0x8c8c2ec 0x8c8c2b8 N2sw4mark17CheckboxFieldmarkE 0x8c8c2ec 
0x8c8c2b8 N2sw4mark17CheckboxFieldmarkE 0x8c8c2ec 0x8c8c2b8 
N2sw4mark17CheckboxFieldmarkE reinterpret 0x8c8c2ec 
N2sw4mark17CheckboxFieldmarkE

dynamic_cast<ICheckboxFieldmark*>( ptr ) 0x8c8c2ec

nm unxlngi6.pro/lib/libswli.so | c++filt | grep ICheckboxField

00355fc8 t sw::mark::ICheckboxFieldmark::ICheckboxFieldmark()
00356f14 t sw::mark::ICheckboxFieldmark::~ICheckboxFieldmark()
003570d0 t sw::mark::ICheckboxFieldmark::~ICheckboxFieldmark()
0035726e t sw::mark::ICheckboxFieldmark::~ICheckboxFieldmark()
00eb2e60 d construction vtable for 
sw::mark::ICheckboxFieldmark-in-sw::mark::CheckboxFieldmark
00eb4840 V construction vtable for 
sw::mark::IFieldmark-in-sw::mark::ICheckboxFieldmark
00eb4900 V construction vtable for 
sw::mark::IMark-in-sw::mark::ICheckboxFieldmark
00eb4340 V typeinfo for sw::mark::ICheckboxFieldmark
00d4f5d8 V typeinfo name for sw::mark::ICheckboxFieldmark
00eb4800 V VTT for sw::mark::ICheckboxFieldmark
00eb4720 V vtable for sw::mark::ICheckboxFieldmark
00356ef6 t virtual thunk to 
sw::mark::ICheckboxFieldmark::~ICheckboxFieldmark()
003570b2 t virtual thunk to 
sw::mark::ICheckboxFieldmark::~ICheckboxFieldmark()
00356f05 t virtual thunk to 
sw::mark::ICheckboxFieldmark::~ICheckboxFieldmark()
003570c1 t virtual thunk to 
sw::mark::ICheckboxFieldmark::~ICheckboxFieldmark()

nm unxlngi6.pro/lib/libmswordli.so | c++filt | grep ICheckboxField

002399f8 V typeinfo for sw::mark::ICheckboxFieldmark
001f201c V typeinfo name for sw::mark::ICheckboxFieldmark

does anything here stand out? ( /me is not that up on library symbol 
binding, visibility etc. stuff.... must read more :-) )


More information about the LibreOffice mailing list