#ifndef UNWRAP_H
#define UNWRAP_H

#define _RET_UNWRAP2(_f1, _f2, ret_type, tmp, func)	\
	do {							\
		ret_type tmp = func;				\
		_f1 = tmp.f1;					\
		_f2 = tmp.f2;					\
	} while(0)

#define RET_UNWRAP2(f1, f2, ret_type, func)			\
	_RET_UNWRAP2(f1, f2, ret_type, UNIQUE_NAME(tmp), func)

#define _RET_UNWRAP3(_f1, _f2, _f3, ret_type, tmp, func)	\
	do {							\
		ret_type tmp = func;				\
		_f1 = tmp.f1;					\
		_f2 = tmp.f2;					\
		_f3 = tmp.f3;					\
	} while(0)

#define RET_UNWRAP3(f1, f2, f3, ret_type, func)			\
	_RET_UNWRAP3(f1, f2, f3, ret_type, UNIQUE_NAME(tmp), func)

#endif
