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
> [email protected]
> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/bacula-devel