This is the version of CCAN which CLN was using at the time these were taken. Unfortunately lots of whitespace has been changed, but AFAICT no source changes. Here's the command I ran (with ../ccan checked out to 1ae4c432): ``` make update-ccan CCAN_NEW="alignof array_size build_assert check_type container_of cppmagic likely list mem short_types str structeq take tal tal/str typesafe_cb utf8 endian crypto/sha256" ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: William Casarin <jb55@jb55.com>
66 lines
1.4 KiB
Plaintext
66 lines
1.4 KiB
Plaintext
#include "config.h"
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
/**
|
|
* container_of - routine for upcasting
|
|
*
|
|
* It is often convenient to create code where the caller registers a pointer
|
|
* to a generic structure and a callback. The callback might know that the
|
|
* pointer points to within a larger structure, and container_of gives a
|
|
* convenient and fairly type-safe way of returning to the enclosing structure.
|
|
*
|
|
* This idiom is an alternative to providing a void * pointer for every
|
|
* callback.
|
|
*
|
|
* Example:
|
|
* #include <stdio.h>
|
|
* #include <ccan/container_of/container_of.h>
|
|
*
|
|
* struct timer {
|
|
* void *members;
|
|
* };
|
|
*
|
|
* struct info {
|
|
* int my_stuff;
|
|
* struct timer timer;
|
|
* };
|
|
*
|
|
* static void my_timer_callback(struct timer *timer)
|
|
* {
|
|
* struct info *info = container_of(timer, struct info, timer);
|
|
* printf("my_stuff is %u\n", info->my_stuff);
|
|
* }
|
|
*
|
|
* static void register_timer(struct timer *timer)
|
|
* {
|
|
* (void)timer;
|
|
* (void)my_timer_callback;
|
|
* //...
|
|
* }
|
|
*
|
|
* int main(void)
|
|
* {
|
|
* struct info info = { .my_stuff = 1 };
|
|
*
|
|
* register_timer(&info.timer);
|
|
* // ...
|
|
* return 0;
|
|
* }
|
|
*
|
|
* License: CC0 (Public domain)
|
|
* Author: Rusty Russell <rusty@rustcorp.com.au>
|
|
*/
|
|
int main(int argc, char *argv[])
|
|
{
|
|
if (argc != 2)
|
|
return 1;
|
|
|
|
if (strcmp(argv[1], "depends") == 0) {
|
|
printf("ccan/check_type\n");
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|