#define newdup(t, p, n) ((t*) memdup_multiply(p, (n), sizeof(t)))
-#define newdup_suffix0(t, p, n) ((t*) memdup_suffix0_multiply(p, sizeof(t), (n)))
+#define newdup_suffix0(t, p, n) ((t*) memdup_suffix0_multiply(p, (n), sizeof(t)))
#define malloc0(n) (calloc(1, (n) ?: 1))
/* Note that we can't decorate this function with _alloc_() since the returned memory area is one byte larger
* than the product of its parameters. */
-static inline void *memdup_suffix0_multiply(const void *p, size_t size, size_t need) {
+static inline void *memdup_suffix0_multiply(const void *p, size_t need, size_t size) {
if (size_multiply_overflow(size, need))
return NULL;
}
_malloc_ _alloc_(1, 2) _returns_nonnull_ _warn_unused_result_
-static inline void *xmalloc_multiply(size_t size, size_t n) {
+static inline void *xmalloc_multiply(size_t n, size_t size) {
assert_se(!__builtin_mul_overflow(size, n, &size));
return xmalloc(size);
}
return memcpy(xmalloc(l), p, l);
}
-#define xnew(type, n) ((type *) xmalloc_multiply(sizeof(type), (n)))
+#define xnew(type, n) ((type *) xmalloc_multiply((n), sizeof(type)))
typedef struct {
EFI_PHYSICAL_ADDRESS addr;
if (!sd)
return log_oom();
- cm = reallocarray(*custom_mounts, sizeof(CustomMount), *n_custom_mounts + 1);
+ cm = reallocarray(*custom_mounts, *n_custom_mounts + 1, sizeof(CustomMount));
if (!cm)
return log_oom();
size_t i;
int *p;
- dup = memdup_suffix0_multiply(org, sizeof(int), 3);
+ dup = memdup_suffix0_multiply(org, 3, sizeof(int));
assert_se(dup);
assert_se(dup[0] == 1);
assert_se(dup[1] == 2);
assert_se(((uint8_t*) dup)[sizeof(int) * 3] == 0);
free(dup);
- dup = memdup_multiply(org, sizeof(int), 3);
+ dup = memdup_multiply(org, 3, sizeof(int));
assert_se(dup);
assert_se(dup[0] == 1);
assert_se(dup[1] == 2);