Merge pull request #30973 from mrc0mmand/gcc14
Reorder arguments for calloc()-like functions, part #2
This commit is contained in:
@@ -341,6 +341,7 @@ endif
|
||||
basic_disabled_warnings = [
|
||||
'-Wno-missing-field-initializers',
|
||||
'-Wno-unused-parameter',
|
||||
'-Wno-nonnull-compare',
|
||||
]
|
||||
|
||||
possible_common_cc_flags = [
|
||||
|
||||
@@ -47,7 +47,7 @@ typedef void* (*mfree_func_t)(void *p);
|
||||
|
||||
#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))
|
||||
|
||||
@@ -137,7 +137,7 @@ _alloc_(2, 3) static inline void *memdup_multiply(const void *p, size_t need, si
|
||||
|
||||
/* 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;
|
||||
|
||||
|
||||
+4
-4
@@ -383,10 +383,10 @@ assert_cc(sizeof(dummy_t) == 0);
|
||||
/* Iterate through each variadic arg. All must be the same type as 'entry' or must be implicitly
|
||||
* convertible. The iteration variable 'entry' must already be defined. */
|
||||
#define VA_ARGS_FOREACH(entry, ...) \
|
||||
_VA_ARGS_FOREACH(entry, UNIQ_T(_entries_, UNIQ), UNIQ_T(_current_, UNIQ), ##__VA_ARGS__)
|
||||
#define _VA_ARGS_FOREACH(entry, _entries_, _current_, ...) \
|
||||
for (typeof(entry) _entries_[] = { __VA_ARGS__ }, *_current_ = _entries_; \
|
||||
((long)(_current_ - _entries_) < (long)ELEMENTSOF(_entries_)) && ({ entry = *_current_; true; }); \
|
||||
_VA_ARGS_FOREACH(entry, UNIQ_T(_entries_, UNIQ), UNIQ_T(_current_, UNIQ), UNIQ_T(_va_sentinel_, UNIQ), ##__VA_ARGS__)
|
||||
#define _VA_ARGS_FOREACH(entry, _entries_, _current_, _va_sentinel_, ...) \
|
||||
for (typeof(entry) _va_sentinel_[1] = {}, _entries_[] = { __VA_ARGS__ __VA_OPT__(,) _va_sentinel_[0] }, *_current_ = _entries_; \
|
||||
((long)(_current_ - _entries_) < (long)(ELEMENTSOF(_entries_) - 1)) && ({ entry = *_current_; true; }); \
|
||||
_current_++)
|
||||
|
||||
#include "log.h"
|
||||
|
||||
+2
-2
@@ -36,7 +36,7 @@ static inline void *xmalloc(size_t size) {
|
||||
}
|
||||
|
||||
_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);
|
||||
}
|
||||
@@ -57,7 +57,7 @@ static inline void* xmemdup(const void *p, size_t l) {
|
||||
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;
|
||||
|
||||
@@ -286,7 +286,7 @@ int bind_user_prepare(
|
||||
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();
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ TEST(memdup_multiply_and_greedy_realloc) {
|
||||
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);
|
||||
@@ -108,7 +108,7 @@ TEST(memdup_multiply_and_greedy_realloc) {
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user