Skip to content

Commit 3e6e094

Browse files
authored
Merge pull request #705 from sanpeqf/feat-guards
feat guards: added taken ptr function
2 parents 4ed892c + 3c75c12 commit 3e6e094

2 files changed

Lines changed: 13 additions & 9 deletions

File tree

examples/guards/cleanup.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include <stdio.h>
77
#include <stdlib.h>
8+
#include <unistd.h>
89
#include <bfdev/guards.h>
910

1011
BFDEV_DEFINE_CLEAN(malloc, void *,
@@ -15,28 +16,28 @@ BFDEV_DEFINE_CLEAN(malloc, void *,
1516
)
1617

1718
static void
18-
test_clean_gc(void)
19+
test_malloc_gc(void)
1920
{
2021
BFDEV_CLEAN(malloc) void *block;
2122
block = malloc(8);
2223
(void)block;
2324
}
2425

2526
static void *
26-
test_clean_keep(void)
27+
test_malloc_keep(void)
2728
{
2829
BFDEV_CLEAN(malloc) void *block;
2930
block = malloc(8);
30-
return bfdev_taken(block);
31+
return bfdev_taken_ptr(block);
3132
}
3233

3334
int
3435
main(int argc, const char *argv[])
3536
{
3637
void *block;
3738

38-
test_clean_gc();
39-
block = test_clean_keep();
39+
test_malloc_gc();
40+
block = test_malloc_keep();
4041
free(block);
4142

4243
return 0;

include/bfdev/guards.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,15 @@ __bfdev_class_##name##_destructor(type *p) \
5454
__bfdev_cleanup(__bfdev_class_##name##_destructor) = \
5555
__bfdev_class_##name##_constructor
5656

57-
#define bfdev_taken(object) ({ \
58-
__auto_type __ptr = (object); \
59-
(object) = BFDEV_NULL; \
60-
__ptr; \
57+
#define bfdev_taken(freed, object) ({ \
58+
__auto_type __object = (object); \
59+
(object) = (freed); \
60+
__object; \
6161
})
6262

63+
#define bfdev_taken_ptr(object) \
64+
bfdev_taken(BFDEV_NULL, object)
65+
6366
BFDEV_END_DECLS
6467

6568
#endif /* _BFDEV_GUARDS_H_ */

0 commit comments

Comments
 (0)