[CRIU] [PATCH] cr: introduced the macro P() to convert an integer to unsigned long
Alexander Kartashov
alekskartashov at parallels.com
Thu Jan 17 01:34:55 EST 2013
On 01/16/2013 07:27 PM, Pavel Emelyanov wrote:
>> vma_entry_len(vma_entry),
>> > vma_entry->prot);
>> > }
>> >diff --git a/pipes.c b/pipes.c
>> >index 16a2454..8b801b8 100644
>> >--- a/pipes.c
>> >+++ b/pipes.c
>> >@@ -186,7 +186,7 @@ int restore_pipe_data(int img_type, int pfd, u32 id, struct pipe_data_rst **hash
>> >
>> > if (ret == 0 || ret > iov.iov_len /* sanity */) {
>> > pr_err("%#x: Wanted to restore %lu bytes, but got %d\n", id,
>> >- iov.iov_len, ret);
>> >+ P(iov.iov_len), ret);
> printf format to fix
>
I expected this comment. Take a look at the following modelling program:
#include <stdio.h>
int main() {
size_t v = 1;
printf("%lu\n", v);
return 0;
}
It compiles on x86_64 successfully but the ARM compiler says:
2.c: In function ‘main’:
2.c:7:2: error: format ‘%lu’ expects argument of type ‘long unsigned
int’, but argument 2 has type ‘size_t’ [-Werror=format]
cc1: all warnings being treated as errors
If we change the format specified to %u the ARM compiler is happy but
x86_64 isn't:
2.c: In function ‘main’:
2.c:7:2: error: format ‘%u’ expects argument of type ‘unsigned int’, but
argument 2 has type ‘size_t’ [-Werror=format]
cc1: all warnings being treated as errors
Moreover we can't use explicit size specifier because the size of size_t
is different on x86 an ARM.
--
Sincerely yours,
Alexander Kartashov
Intern
Core team
www.parallels.com
Skype: aleksandr.kartashov
Email: alekskartashov at parallels.com
More information about the CRIU
mailing list