All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] libext2fs: use statement-expression for container_of only on GNU-compatible compilers
@ 2021-04-14  7:41 Michael Forney
  2021-04-14  7:41 ` [PATCH 2/2] libext2fs: use offsetof() from stddef.h Michael Forney
  2021-07-06  0:28 ` [PATCH 1/2] libext2fs: use statement-expression for container_of only on GNU-compatible compilers Theodore Ts'o
  0 siblings, 2 replies; 4+ messages in thread
From: Michael Forney @ 2021-04-14  7:41 UTC (permalink / raw)
  To: linux-ext4

Functionally, the statement-expression is not necessary here; it
just gives a bit of type-safety to make sure the pointer really
does have a compatible type with the specified member of the struct.

When statement expressions are not available, we can just use a
portable fallback macro that skips this member type check.

Signed-off-by: Michael Forney <mforney@mforney.org>
---
 lib/ext2fs/compiler.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/lib/ext2fs/compiler.h b/lib/ext2fs/compiler.h
index 9aa9b4ec..03c35ab8 100644
--- a/lib/ext2fs/compiler.h
+++ b/lib/ext2fs/compiler.h
@@ -14,9 +14,14 @@
 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
 #endif
 
+#ifdef __GNUC__
 #define container_of(ptr, type, member) ({			\
 	const __typeof__( ((type *)0)->member ) *__mptr = (ptr);	\
 	(type *)( (char *)__mptr - offsetof(type,member) );})
+#else
+#define container_of(ptr, type, member)				\
+	((type *)((char *)(ptr) - offsetof(type, member)))
+#endif
 
 
 #endif /* _EXT2FS_COMPILER_H */
-- 
2.30.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] libext2fs: use offsetof() from stddef.h
  2021-04-14  7:41 [PATCH 1/2] libext2fs: use statement-expression for container_of only on GNU-compatible compilers Michael Forney
@ 2021-04-14  7:41 ` Michael Forney
  2021-07-06  2:55   ` Theodore Ts'o
  2021-07-06  0:28 ` [PATCH 1/2] libext2fs: use statement-expression for container_of only on GNU-compatible compilers Theodore Ts'o
  1 sibling, 1 reply; 4+ messages in thread
From: Michael Forney @ 2021-04-14  7:41 UTC (permalink / raw)
  To: linux-ext4

offsetof is a standard C feature available from stddef.h, going
back all the way to ANSI C.

Signed-off-by: Michael Forney <mforney@mforney.org>
---
Perhaps there is some reason to prefer compiler builtins over libc
that I'm not seeing?

 lib/ext2fs/compiler.h | 13 +------------
 1 file changed, 1 insertion(+), 12 deletions(-)

diff --git a/lib/ext2fs/compiler.h b/lib/ext2fs/compiler.h
index 03c35ab8..42faa61c 100644
--- a/lib/ext2fs/compiler.h
+++ b/lib/ext2fs/compiler.h
@@ -1,18 +1,7 @@
 #ifndef _EXT2FS_COMPILER_H
 #define _EXT2FS_COMPILER_H
 
-#ifndef __has_builtin
-#define __has_builtin(x) 0
-#endif
-
-#undef offsetof
-#if __has_builtin(__builtin_offsetof)
-#define offsetof(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER)
-#elif defined(__compiler_offsetof)
-#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
-#else
-#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-#endif
+#include <stddef.h>
 
 #ifdef __GNUC__
 #define container_of(ptr, type, member) ({			\
-- 
2.30.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] libext2fs: use statement-expression for container_of only on GNU-compatible compilers
  2021-04-14  7:41 [PATCH 1/2] libext2fs: use statement-expression for container_of only on GNU-compatible compilers Michael Forney
  2021-04-14  7:41 ` [PATCH 2/2] libext2fs: use offsetof() from stddef.h Michael Forney
@ 2021-07-06  0:28 ` Theodore Ts'o
  1 sibling, 0 replies; 4+ messages in thread
From: Theodore Ts'o @ 2021-07-06  0:28 UTC (permalink / raw)
  To: Michael Forney; +Cc: linux-ext4

On Wed, Apr 14, 2021 at 12:41:27AM -0700, Michael Forney wrote:
> Functionally, the statement-expression is not necessary here; it
> just gives a bit of type-safety to make sure the pointer really
> does have a compatible type with the specified member of the struct.
> 
> When statement expressions are not available, we can just use a
> portable fallback macro that skips this member type check.
> 
> Signed-off-by: Michael Forney <mforney@mforney.org>

Applied, thanks.

						- Ted

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] libext2fs: use offsetof() from stddef.h
  2021-04-14  7:41 ` [PATCH 2/2] libext2fs: use offsetof() from stddef.h Michael Forney
@ 2021-07-06  2:55   ` Theodore Ts'o
  0 siblings, 0 replies; 4+ messages in thread
From: Theodore Ts'o @ 2021-07-06  2:55 UTC (permalink / raw)
  To: Michael Forney; +Cc: linux-ext4

On Wed, Apr 14, 2021 at 12:41:28AM -0700, Michael Forney wrote:
> offsetof is a standard C feature available from stddef.h, going
> back all the way to ANSI C.
> 
> Signed-off-by: Michael Forney <mforney@mforney.org>

Thanks, applied.

> Perhaps there is some reason to prefer compiler builtins over libc
> that I'm not seeing?

It's because I pulled container_of from the kernel, and the kernel
header files has to provide offsetof since we don't use the standard
header files --- and it has to work across a bunch of compilers and
architectures.

						- Ted

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-07-06  2:55 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-14  7:41 [PATCH 1/2] libext2fs: use statement-expression for container_of only on GNU-compatible compilers Michael Forney
2021-04-14  7:41 ` [PATCH 2/2] libext2fs: use offsetof() from stddef.h Michael Forney
2021-07-06  2:55   ` Theodore Ts'o
2021-07-06  0:28 ` [PATCH 1/2] libext2fs: use statement-expression for container_of only on GNU-compatible compilers Theodore Ts'o

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.