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. 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