From: Hanna Linder <hannal@us.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: hannal@us.ibm.com
Subject: [PATCH 2.4] list_entry -> container_of like in 2.5
Date: Mon, 11 Nov 2002 17:01:41 -0800 [thread overview]
Message-ID: <19250000.1037062901@w-hlinder> (raw)
It was pointed out to me (thanks cdub!) that list_entry is equivalent
to container_of. However, in 2.5 list_entry simply calls container_of
as it is a more descriptive name. So here is a patch to both add
container_of and make list_entry a wrapper around it.
Thanks.
Hanna
kernel.h | 11 +++++++++++
list.h | 2 +-
2 files changed, 12 insertions(+), 1 deletion(-)
-----
diff -Nru linux-2.4.20-rc1/include/linux/kernel.h
linux-container_of/include/linux/kernel.h
--- linux-2.4.20-rc1/include/linux/kernel.h Mon Nov 11 16:53:25 2002
+++ linux-container_of/include/linux/kernel.h Mon Nov 11 15:23:16 2002
@@ -174,6 +174,17 @@
extern void __out_of_line_bug(int line) ATTRIB_NORET;
#define out_of_line_bug() __out_of_line_bug(__LINE__)
+/*
+ * 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.
+ */
+#define container_of(ptr, type, member) ({ \
+ const typeof( ((type *)0)->member ) *__mptr = (ptr); \
+ (type *)( (char *)__mptr - offsetof(type,member) );})
+
#endif /* __KERNEL__ */
#define SI_LOAD_SHIFT 16
diff -Nru linux-2.4.20-rc1/include/linux/list.h
linux-container_of/include/linux/list.h
--- linux-2.4.20-rc1/include/linux/list.h Mon Nov 11 16:53:25 2002
+++ linux-container_of/include/linux/list.h Mon Nov 11 16:50:06 2002
@@ -185,7 +185,7 @@
* @member: the name of the list_struct within the struct.
*/
#define list_entry(ptr, type, member) \
- ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
+ container_of(ptr, type, member)
/**
* list_for_each - iterate over a list
reply other threads:[~2002-11-12 0:46 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=19250000.1037062901@w-hlinder \
--to=hannal@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox