#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;
}
