[U-Boot] [PATCH RESEND] Fix misuse of calloc() in linux/compat.h header

Quote from the manpage:
[...] void *calloc(size_t nmemb, size_t size); [...] DESCRIPTION [...]
The calloc() function allocates memory for an array of nmemb elements of size bytes each and returns a pointer to the allocated memory. The memory is set to zero. If nmemb or size is 0, then calloc() returns either NULL, or a unique pointer value that can later be successfully passed to free().
Signed-off-by: Marek Vasut marex@denx.de Cc: Wolfgang Denk wd@denx.de --- include/linux/compat.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/linux/compat.h b/include/linux/compat.h index 593b07f..9a9d7b0 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h @@ -18,7 +18,7 @@ #define KERN_DEBUG
#define kmalloc(size, flags) malloc(size) -#define kzalloc(size, flags) calloc(size, 1) +#define kzalloc(size, flags) calloc(1, size) #define vmalloc(size) malloc(size) #define kfree(ptr) free(ptr) #define vfree(ptr) free(ptr)

Dear Marek Vasut,
In message 1339176514-13137-1-git-send-email-marex@denx.de you wrote:
-#define kzalloc(size, flags) calloc(size, 1) +#define kzalloc(size, flags) calloc(1, size)
Does this make any practical difference?
I mean, are you aware of any problem that gets fixed by this patch, or even any kind of performance degradation?
"common/dlmalloc.src" says:
calloc(size_t unit, size_t quantity); Returns a pointer to quantity * unit bytes, with all locations set to zero.
Multiplication being commutative, I see zero effect in this patch?
Best regards,
Wolfgang Denk

Dear Wolfgang Denk,
Dear Marek Vasut,
In message 1339176514-13137-1-git-send-email-marex@denx.de you wrote:
-#define kzalloc(size, flags) calloc(size, 1) +#define kzalloc(size, flags) calloc(1, size)
Does this make any practical difference?
I mean, are you aware of any problem that gets fixed by this patch, or even any kind of performance degradation?
No, I just blindly found it out when I was enraged and was hacking on filesystem code.
"common/dlmalloc.src" says:
calloc(size_t unit, size_t quantity); Returns a pointer to quantity * unit bytes, with all locations set to zero.
Multiplication being commutative, I see zero effect in this patch?
Weeeeell, not in every algebraic system. It has zero effect, it's only about correctness [1]. Will applying this break anything?
[1] http://pubs.opengroup.org/onlinepubs/009695399/functions/calloc.html
Best regards,
Wolfgang Denk
Best regards, Marek Vasut

Dear Marek Vasut,
In message 201206090148.40933.marex@denx.de you wrote:
Multiplication being commutative, I see zero effect in this patch?
Weeeeell, not in every algebraic system. It has zero effect, it's only about correctness [1]. Will applying this break anything?
In which way is "a * b" more (or less?) correct than "b * a" ?
What is the difference between allocating a contiguous sequence of 4096 single bytes, or allocating a single block of size 4096?
Best regards,
Wolfgang Denk

Dear Wolfgang Denk,
Dear Marek Vasut,
In message 201206090148.40933.marex@denx.de you wrote:
Multiplication being commutative, I see zero effect in this patch?
Weeeeell, not in every algebraic system. It has zero effect, it's only about correctness [1]. Will applying this break anything?
In which way is "a * b" more (or less?) correct than "b * a" ?
In our natural integer system, it's all perfectly OK.
What is the difference between allocating a contiguous sequence of 4096 single bytes, or allocating a single block of size 4096?
None.
Best regards,
Wolfgang Denk
Best regards, Marek Vasut
participants (2)
-
Marek Vasut
-
Wolfgang Denk