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