summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-09-28 00:45:58 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-09-28 00:45:58 +0800
commit3374bab4d194502b8f4382eba824317599e802ea (patch)
tree45722c93c7aca3275ec265d778f304d11b39aa00
parentdf643bfb20fa52b0bf9576e86afc16075060624d (diff)
downloadRUCDSA-3374bab4d194502b8f4382eba824317599e802ea.tar.gz
RUCDSA-3374bab4d194502b8f4382eba824317599e802ea.tar.xz
Standardize lab02/container_of.h comments
-rw-r--r--lab02/container_of.h23
1 files changed, 19 insertions, 4 deletions
diff --git a/lab02/container_of.h b/lab02/container_of.h
index 87fb6d4..bffe7b7 100644
--- a/lab02/container_of.h
+++ b/lab02/container_of.h
@@ -1,22 +1,31 @@
/* SPDX-License-Identifier: GPL-2.0 */
+/**
+ * @file container_of.h
+ * @brief Provides type-aware container and member offset macros.
+ */
#ifndef _CONTAINER_OF_H
#define _CONTAINER_OF_H
#include <stddef.h>
+/** @brief Checks whether two expressions have compatible types. */
#define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
+/** @brief Computes a member offset using the compiler builtin. */
#undef offsetof
#define offsetof(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER)
+/** @brief Obtains the type of a member of a structure type. */
#define typeof_member(T, m) typeof(((T*)0)->m)
/**
- * container_of - cast a member of a structure out to the containing structure
- * @ptr: the pointer to the member.
- * @type: the type of the container struct this is embedded in.
- * @member: the name of the member within the struct.
+ * @brief Converts a pointer to a structure member to its containing object.
+ * @param ptr A pointer to the member.
+ * @param type The type of the containing structure.
+ * @param member The member name within `type`.
*
+ * The macro performs a compile-time type compatibility check before applying
+ * the member offset.
*/
#define container_of(ptr, type, member) ({ \
_Static_assert(__same_type(*(ptr), typeof_member(type, member)) || \
@@ -25,6 +34,12 @@
(type *)((void *)(ptr) - offsetof(type, member)); })
+/**
+ * @brief Converts a member pointer while preserving its const qualification.
+ * @param ptr A pointer to the member.
+ * @param type The type of the containing structure.
+ * @param member The member name within `type`.
+ */
#define container_of_const(ptr, type, member) \
_Generic(ptr, \
const typeof(*(ptr)) *: ((const type *)container_of(ptr, type, member)),\