Re: building with gcc 4.4
Milos Jakubicek <[email protected]> Sun, 19 Apr 2009 20:20:02 +0200
| Newsgroups | gmane.mail.cone |
|---|---|
| Message-ID | <[email protected]> |
Yup, that works too, will use it in Fedora packages...
Thanks for fast cooperation,
Milos
Sam Varshavchik wrote:
> Milos Jakubicek writes:
>
>> Hi Sam,
>>
>> Sam Varshavchik wrote:
>>> Milos Jakubicek writes:
>>>
>>>> Hi all,
>>>>
>>>> I'm attaching a tiny patch to make cone building with gcc 4.4,
>>>> please merge it.
>>>
>>> Although this looks very straightforward, I do have some questions.
>>> AFAIK, SUSv2 explicitly defines strchr as taking a const char * arg.
>>> The cast should not be necessary.
>>
>> Yes, the problem is that starting with gcc 4.4, if strchr takes const
>> char*, it also returns const char*, therefore the cast.
>> See http://gcc.gnu.org/gcc-4.4/porting_to.html
>
> I see. In that case, the correct fix is really to redeclare the "p"
> pointer as a const char *, rather than casting it.
>
>> Furthermore, a quick search of the code finds several other
>>> instances where both strchr() and memcpy() are used with the same
>>> parameter types, so if these two instances need this kind of a patch,
>>> how come the other instances don't?
>>
>> What places, aren't they in an #ifdef so that they do not evaluate?
>> Remember that the problem is again the same: you give const char* to
>> strchr => it returns const char*. I'm not sure whether the standard
>> says you can cast any pointer type, even const type, to void*.
>
> That actually explains it. The memcpy in question takes the return value
> from strrchr() with itself takes a const char * parameter, which now
> makes the memcpy parameter a const char *.
>
> The correct fix there, then, would be to const_cast the strrchr()
> parameter to a char *.
>
> Can you verify that the following will make gcc 4.4 happy.
>
> Index: libmail/maildiradd.C
> ===================================================================
> RCS file: /cvsroot/courier/libs/libmail/maildiradd.C,v
> retrieving revision 1.6
> diff -U3 -r1.6 maildiradd.C
> --- libmail/maildiradd.C 24 May 2008 17:57:42 -0000 1.6
> +++ libmail/maildiradd.C 19 Apr 2009 11:54:45 -0000
> @@ -165,7 +165,8 @@
> if (flags.size() > 0)
> {
> newname = newname + MDIRSEP "2," + flags;
> - memcpy(strrchr(newname.c_str(), '/')-3, "cur", 3);
> + memcpy(strrchr(const_cast<char *>(newname.c_str()), '/')-3,
> + "cur", 3);
> // We go into the cur directory, now
> }
>
> Index: libmail/qp.C
> ===================================================================
> RCS file: /cvsroot/courier/libs/libmail/qp.C,v
> retrieving revision 1.1
> diff -U3 -r1.1 qp.C
> --- libmail/qp.C 27 May 2003 14:09:08 -0000 1.1
> +++ libmail/qp.C 19 Apr 2009 11:54:46 -0000
> @@ -16,7 +16,7 @@
> {
> static const char xdigits[]="0123456789ABCDEFabcdef";
>
> - char *p=strchr(xdigits, c);
> + const char *p=strchr(xdigits, c);
>
> if (p == NULL)
> return -1;
>
>
> ------------------------------------------------------------------------
>
> ------------------------------------------------------------------------------
> Stay on top of everything new and different, both inside and
> around Java (TM) technology - register by April 22, and save
> $200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
> 300 plus technical and hands-on sessions. Register today.
> Use priority code J9JMT32. http://p.sf.net/sfu/p
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Courier-cone mailing list
> [email protected]
> Unsubscribe: https://lists.sourceforge.net/lists/listinfo/courier-cone
------------------------------------------------------------------------------
Stay on top of everything new and different, both inside and
around Java (TM) technology - register by April 22, and save
$200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
300 plus technical and hands-on sessions. Register today.
Use priority code J9JMT32. http://p.sf.net/sfu/p
_______________________________________________
Courier-cone mailing list
[email protected]
Unsubscribe: https://lists.sourceforge.net/lists/listinfo/courier-cone