Fix some badly-behaved macros

Some macros evaluated their arguments more than once when it was not
needed, or were missing parentheses.
This commit is contained in:
Demi Marie Obenour 2022-09-01 17:02:44 -04:00
parent bb4f274ae0
commit 671a7102ff
46 changed files with 162 additions and 156 deletions

View file

@ -84,25 +84,25 @@ enum spa_direction {
#define SPA_DIRECTION_REVERSE(d) ((d) ^ 1)
#define SPA_RECTANGLE(width,height) (struct spa_rectangle){ width, height }
#define SPA_RECTANGLE(width,height) ((struct spa_rectangle){ (width), (height) })
struct spa_rectangle {
uint32_t width;
uint32_t height;
};
#define SPA_POINT(x,y) (struct spa_point){ x, y }
#define SPA_POINT(x,y) ((struct spa_point){ (x), (y) })
struct spa_point {
int32_t x;
int32_t y;
};
#define SPA_REGION(x,y,width,height) (struct spa_region){ SPA_POINT(x,y), SPA_RECTANGLE(width,height) }
#define SPA_REGION(x,y,width,height) ((struct spa_region){ SPA_POINT(x,y), SPA_RECTANGLE(width,height) })
struct spa_region {
struct spa_point position;
struct spa_rectangle size;
};
#define SPA_FRACTION(num,denom) (struct spa_fraction){ num, denom }
#define SPA_FRACTION(num,denom) ((struct spa_fraction){ (num), (denom) })
struct spa_fraction {
uint32_t num;
uint32_t denom;
@ -120,7 +120,7 @@ struct spa_fraction {
* ```
*/
#define SPA_FOR_EACH_ELEMENT(arr, ptr) \
for (ptr = arr; (void*)ptr < SPA_PTROFF(arr, sizeof(arr), void); ptr++)
for ((ptr) = arr; (void*)(ptr) < SPA_PTROFF(arr, sizeof(arr), void); (ptr)++)
#define SPA_ABS(a) \
({ \
@ -156,7 +156,7 @@ struct spa_fraction {
#define SPA_SWAP(a,b) \
({ \
__typeof__(a) _t = (a); \
a = b; b = _t; \
(a) = b; (b) = _t; \
})
#define SPA_TYPECHECK(type,x) \
@ -180,7 +180,7 @@ struct spa_fraction {
#define SPA_MEMBER(b,o,t) SPA_PTROFF(b,o,t)
#define SPA_MEMBER_ALIGN(b,o,a,t) SPA_PTROFF_ALIGN(b,o,a,t)
#define SPA_CONTAINER_OF(p,t,m) ((t*)((uintptr_t)p - offsetof(t,m)))
#define SPA_CONTAINER_OF(p,t,m) ((t*)((uintptr_t)(p) - offsetof(t,m)))
#define SPA_PTRDIFF(p1,p2) ((intptr_t)(p1) - (intptr_t)(p2))
@ -194,7 +194,7 @@ struct spa_fraction {
#define SPA_IDX_INVALID ((unsigned int)-1)
#define SPA_ID_INVALID ((uint32_t)0xffffffff)
#define SPA_NSEC_PER_SEC (1000000000ll)
#define SPA_NSEC_PER_SEC (1000000000LL)
#define SPA_NSEC_PER_MSEC (1000000ll)
#define SPA_NSEC_PER_USEC (1000ll)
#define SPA_USEC_PER_SEC (1000000ll)

View file

@ -48,7 +48,7 @@ struct spa_dict_item {
const char *value;
};
#define SPA_DICT_ITEM_INIT(key,value) (struct spa_dict_item) { key, value }
#define SPA_DICT_ITEM_INIT(key,value) ((struct spa_dict_item) { (key), (value) })
struct spa_dict {
#define SPA_DICT_FLAG_SORTED (1<<0) /**< items are sorted */
@ -57,8 +57,8 @@ struct spa_dict {
const struct spa_dict_item *items;
};
#define SPA_DICT_INIT(items,n_items) (struct spa_dict) { 0, n_items, items }
#define SPA_DICT_INIT_ARRAY(items) (struct spa_dict) { 0, SPA_N_ELEMENTS(items), items }
#define SPA_DICT_INIT(items,n_items) ((struct spa_dict) { 0, (n_items), (items) })
#define SPA_DICT_INIT_ARRAY(items) ((struct spa_dict) { 0, SPA_N_ELEMENTS(items), (items) })
#define spa_dict_for_each(item, dict) \
for ((item) = (dict)->items; \

View file

@ -142,7 +142,7 @@ struct spa_callbacks {
* Initialize the set of functions \a funcs as a \ref spa_callbacks, together
* with \a _data.
*/
#define SPA_CALLBACKS_INIT(_funcs,_data) (struct spa_callbacks){ _funcs, _data, }
#define SPA_CALLBACKS_INIT(_funcs,_data) ((struct spa_callbacks){ (_funcs), (_data), })
/** \struct spa_interface
*/

View file

@ -58,20 +58,20 @@ struct spa_json {
uint32_t depth;
};
#define SPA_JSON_INIT(data,size) (struct spa_json) { (data), (data)+(size), }
#define SPA_JSON_INIT(data,size) ((struct spa_json) { (data), (data)+(size), })
static inline void spa_json_init(struct spa_json * iter, const char *data, size_t size)
{
*iter = SPA_JSON_INIT(data, size);
}
#define SPA_JSON_ENTER(iter) (struct spa_json) { (iter)->cur, (iter)->end, (iter), }
#define SPA_JSON_ENTER(iter) ((struct spa_json) { (iter)->cur, (iter)->end, (iter), })
static inline void spa_json_enter(struct spa_json * iter, struct spa_json * sub)
{
*sub = SPA_JSON_ENTER(iter);
}
#define SPA_JSON_SAVE(iter) (struct spa_json) { (iter)->cur, (iter)->end, }
#define SPA_JSON_SAVE(iter) ((struct spa_json) { (iter)->cur, (iter)->end, })
/** Get the next token. \a value points to the token and the return value
* is the length. */

View file

@ -44,7 +44,7 @@ struct spa_list {
struct spa_list *prev;
};
#define SPA_LIST_INIT(list) (struct spa_list){ list, list }
#define SPA_LIST_INIT(list) ((struct spa_list){ (list), (list) })
static inline void spa_list_init(struct spa_list *list)
{
@ -98,25 +98,25 @@ static inline void spa_list_remove(struct spa_list *elem)
(&(pos)->member == (head))
#define spa_list_next(pos, member) \
SPA_CONTAINER_OF((pos)->member.next, __typeof__(*pos), member)
SPA_CONTAINER_OF((pos)->member.next, __typeof__(*(pos)), member)
#define spa_list_prev(pos, member) \
SPA_CONTAINER_OF((pos)->member.prev, __typeof__(*pos), member)
SPA_CONTAINER_OF((pos)->member.prev, __typeof__(*(pos)), member)
#define spa_list_consume(pos, head, member) \
for (pos = spa_list_first(head, __typeof__(*pos), member); \
for ((pos) = spa_list_first(head, __typeof__(*(pos)), member); \
!spa_list_is_empty(head); \
pos = spa_list_first(head, __typeof__(*pos), member))
(pos) = spa_list_first(head, __typeof__(*(pos)), member))
#define spa_list_for_each_next(pos, head, curr, member) \
for (pos = spa_list_first(curr, __typeof__(*pos), member); \
for ((pos) = spa_list_first(curr, __typeof__(*(pos)), member); \
!spa_list_is_end(pos, head, member); \
pos = spa_list_next(pos, member))
(pos) = spa_list_next(pos, member))
#define spa_list_for_each_prev(pos, head, curr, member) \
for (pos = spa_list_last(curr, __typeof__(*pos), member); \
for ((pos) = spa_list_last(curr, __typeof__(*(pos)), member); \
!spa_list_is_end(pos, head, member); \
pos = spa_list_prev(pos, member))
(pos) = spa_list_prev(pos, member))
#define spa_list_for_each(pos, head, member) \
spa_list_for_each_next(pos, head, head, member)
@ -125,16 +125,16 @@ static inline void spa_list_remove(struct spa_list *elem)
spa_list_for_each_prev(pos, head, head, member)
#define spa_list_for_each_safe_next(pos, tmp, head, curr, member) \
for (pos = spa_list_first(curr, __typeof__(*pos), member); \
tmp = spa_list_next(pos, member), \
for ((pos) = spa_list_first(curr, __typeof__(*(pos)), member); \
(tmp) = spa_list_next(pos, member), \
!spa_list_is_end(pos, head, member); \
pos = tmp)
(pos) = (tmp))
#define spa_list_for_each_safe_prev(pos, tmp, head, curr, member) \
for (pos = spa_list_last(curr, __typeof__(*pos), member); \
tmp = spa_list_prev(pos, member), \
for ((pos) = spa_list_last(curr, __typeof__(*(pos)), member); \
(tmp) = spa_list_prev(pos, member), \
!spa_list_is_end(pos, head, member); \
pos = tmp)
(pos) = (tmp))
#define spa_list_for_each_safe(pos, tmp, head, member) \
spa_list_for_each_safe_next(pos, tmp, head, head, member)
@ -146,11 +146,11 @@ static inline void spa_list_remove(struct spa_list *elem)
spa_list_prepend(head, &(cursor).member)
#define spa_list_for_each_cursor(pos, cursor, head, member) \
for(pos = spa_list_first(&(cursor).member, __typeof__(*(pos)), member); \
for((pos) = spa_list_first(&(cursor).member, __typeof__(*(pos)), member); \
spa_list_remove(&(pos)->member), \
spa_list_append(&(cursor).member, &(pos)->member), \
!spa_list_is_end(pos, head, member); \
pos = spa_list_next(&cursor, member))
(pos) = spa_list_next(&(cursor), member))
#define spa_list_cursor_end(cursor, member) \
spa_list_remove(&(cursor).member)

View file

@ -55,7 +55,7 @@ extern "C" {
#define spa_strerror(err) \
({ \
int _err = -err; \
int _err = -(err); \
if (SPA_RESULT_IS_ASYNC(err)) \
_err = EINPROGRESS; \
strerror(_err); \

View file

@ -53,7 +53,7 @@ struct spa_ringbuffer {
uint32_t writeindex; /*< the current write index */
};
#define SPA_RINGBUFFER_INIT() (struct spa_ringbuffer) { 0, 0 }
#define SPA_RINGBUFFER_INIT() ((struct spa_ringbuffer) { 0, 0 })
/**
* Initialize a spa_ringbuffer with \a size.