>>>>> On Thu, 22 Nov 2012 23:01:45 +0100, Kern Sibbald said:
> 
> Bacula's bsnprintf does not correspond to printf, so any
> comparison makes no sense.
> 
> I am not 100% sure what you want to show, but Bastian's code
> is correct and using something like "unsigned long" would
> probably be incorrect -- at least it would be bad Bacula programming
> practice.    Bacula uses architecture independent types where
> necessary.  In Bacula %ld == %d and they both always expect a 32 bit
> value within Bacula and %lld always expects a 64 bit value in Bacula.

Ah, sorry, you are right.  I didn't know that Bacula had its own format
directives.

__Martin


> 
> Best regards,
> Kern
> 
> On 11/22/2012 06:21 PM, Martin Simmons wrote:
> >>>>>> 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
> > Bacula-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/bacula-devel
> >
> 

------------------------------------------------------------------------------
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
Bacula-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-devel

Reply via email to