21 lines · c
1//===-- Definition of the containerof macro -------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_LIBC_MACROS_CONTAINEROF_MACRO_H10#define LLVM_LIBC_MACROS_CONTAINEROF_MACRO_H11 12#include "offsetof-macro.h"13 14#define __containerof(ptr, type, member) \15 ({ \16 const __typeof(((type *)0)->member) *__ptr = (ptr); \17 (type *)(void *)((const char *)__ptr - offsetof(type, member)); \18 })19 20#endif // LLVM_LIBC_MACROS_CONTAINEROF_MACRO_H21