cutils: only support safe list iteration.

We've had two use-after-frees in the last month from this nonsense...

Bug: http://b/204925347
Test: treehugger
Change-Id: I5e1485253224e38ca51a7a077dbe65d19e39f817
This commit is contained in:
Elliott Hughes 2021-11-02 18:33:09 -07:00
parent f1c8904e95
commit 6fa2e48db9

View file

@ -1,5 +1,5 @@
/*
* Copyright (C) 2008-2013 The Android Open Source Project
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -14,8 +14,7 @@
* limitations under the License.
*/
#ifndef _CUTILS_LIST_H_
#define _CUTILS_LIST_H_
#pragma once
#include <stddef.h>
@ -38,9 +37,6 @@ struct listnode
.prev = &(name), \
}
#define list_for_each(node, list) \
for ((node) = (list)->next; (node) != (list); (node) = (node)->next)
#define list_for_each_reverse(node, list) \
for ((node) = (list)->prev; (node) != (list); (node) = (node)->prev)
@ -49,6 +45,10 @@ struct listnode
(node) != (list); \
(node) = (n), (n) = (node)->next)
#define list_for_each(node, list) \
for (struct listnode* __n = ((node) = (list)->next)->next; (node) != (list); \
(node) = __n, __n = (node)->next)
static inline void list_init(struct listnode *node)
{
node->next = node;
@ -84,5 +84,3 @@ static inline void list_remove(struct listnode *item)
#ifdef __cplusplus
};
#endif /* __cplusplus */
#endif