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:
parent
f1c8904e95
commit
6fa2e48db9
1 changed files with 6 additions and 8 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue