[PD-dev] how to cast printed pointers? (commit c019784b83 throwing warnings)

Miller Puckette msp at ucsd.edu
Fri Dec 3 17:23:54 CET 2021


So... here's no solution that makes all compilers happy and doesn't get
Tcl in a snit... I guess the only way is to make a compiler-dependent macro
like #define ptr_to_tag(x) ((unsigned long)(x)) (for gcc) and whatever it is
now for windows... I'm OK with punting this for 0.52 and will keep it your way
to make sure I keep seeing the problem :)

cheers
Miller

On Fri, Dec 03, 2021 at 11:06:54AM +0100, Christof Ressi wrote:
> IOhannes has the answer: the resulting string might not be valid Tcl
> variable name.
> 
> For further discussion see: https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_pure-2Ddata_pure-2Ddata_issues_1474-23issuecomment-2D985386181&d=DwIDaQ&c=-35OiAkTchMrZOngvJPOeA&r=XprZV3Fxus2L1LCw80hE4Q&m=Ly2D1_om-E67IEJJOaq_Tvdcw4H3tteqvJoJ694Qt4qva9dc1gnt7U9n5zj2mQdr&s=O47fgmtoAjHX-uNksFBQntYsj9gjWQApnXNjGVqAeFY&e=
> 
> On 03.12.2021 10:39, Christof Ressi wrote:
> > > NOTE: although %p would be the obvious choice, we can't use it,
> > > because the result is platform/compiler dependent. This is not a
> > > problem most of the time but it can break in the case of a remote
> > > GUI! We really want the pointer ID to look the same on all
> > > platforms!
> > Hmmm... on a second thought I forgot why this would be a problem... the
> > IDs are only generated in the core and GUI app shouldn't care.
> > 
> > So Albert is right, why don't we use %p everywhere?
> > 
> > Christof
> > 
> > On 03.12.2021 10:34, Christof Ressi wrote:
> > > > I presume there's a good reason to change the code (what if
> > > > "long" is the wrong
> > > > size?) but I'd like to figure out a way to do it that doesn't
> > > > throw warnings.
> > > Ok, now I understand the reason for those few (unsigned long) casts.
> > > It's because the printf() family functions will check the format
> > > specifier, but the sys_vgui() function, which is used most of the
> > > time, does not.
> > > 
> > > However, casting a pointer to (unsigned long) will give a warning on
> > > 64-bit Windows, so one of us will always get warnings either way :-)
> > > 
> > > See here for a discussion how to actually fix the problem: https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_pure-2Ddata_pure-2Ddata_issues_1474&d=DwIDaQ&c=-35OiAkTchMrZOngvJPOeA&r=XprZV3Fxus2L1LCw80hE4Q&m=Ly2D1_om-E67IEJJOaq_Tvdcw4H3tteqvJoJ694Qt4qva9dc1gnt7U9n5zj2mQdr&s=qz6BmoJd22aBui-mpwgjsk4nBCSyIK3o0BZYGdczUZM&e=
> > > 
> > > NOTE: although %p would be the obvious choice, we can't use it,
> > > because the result is platform/compiler dependent. This is not a
> > > problem most of the time but it can break in the case of a remote
> > > GUI! We really want the pointer ID to look the same on all
> > > platforms!
> > > 
> > > Christof
> > > 
> > > On 03.12.2021 09:51, Albert Rafetseder wrote:
> > > > > After merging commit c019784b83 (get rid of a 3 more bogus
> > > > > (unsigned long) casts)
> > > > (Link to commit for reference: [0] )
> > > > 
> > > > > I'm now getting compiler warnings like this:
> > > > > 
> > > > > g_editor.c:1884:73: warning: format ‘%lx’ expects argument
> > > > > of type ‘long unsigned int’, but argument 4 has type ‘struct
> > > > > _glist *’ [-Wformat=]
> > > > >   1884 |             snprintf(cbuf, MAXPDSTRING - 2,
> > > > > "pdtk_canvas_setparents .x%lx", c);
> > > > > | ~~^   ~
> > > > > | |   |
> > > > > | |   struct _glist *
> > > > > | long unsigned int
> > > > > 
> > > > > 
> > > > > ..
> > > > > I presume there's a good reason to change the code (what if
> > > > > "long" is the wrong
> > > > > size?) but I'd like to figure out a way to do it that
> > > > > doesn't throw warnings.
> > > > My C has oxidized substantially over time, but I think the p conversion
> > > > specifier might be the correct thing to use -- if you can live with the
> > > > additional leading "0x" that is caused by its implied "alternate form"
> > > > flag, `#`.
> > > > 
> > > >  From `man snprintf` on Linux / OS X:
> > > > 
> > > > """
> > > > p       The void * pointer argument is printed in hexadecimal (as if by
> > > >               `%#x' or `%#lx').
> > > > """
> > > > 
> > > > Trying with the current master [1] which includes the commit above, the
> > > > change from `%lx` to `%p` in lines 1884 and 1891 in `g_editor.c` fixes
> > > > the warning. (Other warnings/errors remain, and I wouldn't have a clue
> > > > what to test to check the outcome anyway.)
> > > > 
> > > > Best,
> > > >    Albert.
> > > > 
> > > > [0]
> > > > https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_pure-2Ddata_pure-2Ddata_commit_c019784b83f6638a1c4090ce27e6a0036b6bacaa&d=DwIDaQ&c=-35OiAkTchMrZOngvJPOeA&r=XprZV3Fxus2L1LCw80hE4Q&m=Ly2D1_om-E67IEJJOaq_Tvdcw4H3tteqvJoJ694Qt4qva9dc1gnt7U9n5zj2mQdr&s=wOhwmkw5E0QkQVRHbkg0nFY02pwbmk6IMrwB4VTmC3k&e=
> > > > 
> > > > [1]
> > > > https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_pure-2Ddata_pure-2Ddata_commit_364d859aa29c1d42be1d42ad81c74bc2fbc76cca&d=DwIDaQ&c=-35OiAkTchMrZOngvJPOeA&r=XprZV3Fxus2L1LCw80hE4Q&m=Ly2D1_om-E67IEJJOaq_Tvdcw4H3tteqvJoJ694Qt4qva9dc1gnt7U9n5zj2mQdr&s=ZJ4rcgiT37GYVCA4p1DalWp46xU1aJzf-WNRI4dUSNU&e=
> > > > 
> > > > 
> > > > 
> > > > 
> > > > _______________________________________________
> > > > Pd-dev mailing list
> > > > Pd-dev at lists.iem.at
> > > > https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.puredata.info_listinfo_pd-2Ddev&d=DwIDaQ&c=-35OiAkTchMrZOngvJPOeA&r=XprZV3Fxus2L1LCw80hE4Q&m=Ly2D1_om-E67IEJJOaq_Tvdcw4H3tteqvJoJ694Qt4qva9dc1gnt7U9n5zj2mQdr&s=5hCGxDchrqGZbCQBi1mHbIMKI2WMWtf5K5KkYRou3nE&e=
> > 
> > 
> > 
> > _______________________________________________
> > Pd-dev mailing list
> > Pd-dev at lists.iem.at
> > https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.puredata.info_listinfo_pd-2Ddev&d=DwIDaQ&c=-35OiAkTchMrZOngvJPOeA&r=XprZV3Fxus2L1LCw80hE4Q&m=Ly2D1_om-E67IEJJOaq_Tvdcw4H3tteqvJoJ694Qt4qva9dc1gnt7U9n5zj2mQdr&s=5hCGxDchrqGZbCQBi1mHbIMKI2WMWtf5K5KkYRou3nE&e=





More information about the Pd-dev mailing list