>>>>> On Thu, 22 Nov 2012 15:16:54 +0100, Bastian Friedrich said:
>
> Hi,
>
> Am Donnerstag, 22. November 2012, 12:30:38 schrieb Martin Simmons:
> > >>>>> On Thu, 22 Nov 2012 10:22:39 +0100, Bastian Friedrich said:
> > > + bsnprintf(add, sizeof(add), "%lu", (uint32_t)getpid());
> >
> > Using %lu for uint32_t is wrong on 64-bit systems. Why not cast to unsigned
> > long?
>
> a) the respective statement does not result in any warnings or errors on my
> (64 bit linux) machine
You get no warnings because gcc doesn't know about the format string in
bsnprintf.
This code should fail though:
#include <stdio.h>
#include <inttypes.h>
long fool(long x, long y) { return x+y; }
int fooi(int x, int y) { return x+y; }
int main()
{
printf("%x %x %x %x %x %x %x %x %lu\n", 1,2,3,4,5,6,7,8,fool(0x100000001L,2));
printf("%x %x %x %x %x %x %x %x %lu\n", 1,2,3,4,5,6,7,8,(uint32_t)fooi(1,2));
printf("%x %x %x %x %x %x %x %x %lu\n", 1,2,3,4,5,6,7,8,(unsigned
long)fooi(1,2));
return 0;
}
There should be a 3 at the end of the last two lines, but I get 4294967299
(0x100000003) because the call in the first line has left something behind on
the stack.
> b) The code does just the same as line 632 in the same file, which says:
> bsnprintf(s + strlen(s), ss, "%lu", (uint32_t)getpid());
> so if either is fixed, so should be the other one.
Agreed.
> c) pid_t is signed, so the "unsigned" is probably wrong in any case ...
True, but I think that is just so that functions like fork can return -1 for
failure. I've never seen a pid that is negative.
> If one wants to modify the patch, probably the straight forward version will
> do:
> bsnprintf(add, sizeof(add), "%d", getpid());
bsnprintf(add, sizeof(add), "%d", (int)getpid());; would be better in case
pid_t is smaller than int.
> I don't know any system where size of pid_t exceeds that of int ...?
Me neither.
__Martin
------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
Bacula-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bacula-devel