summaryrefslogtreecommitdiff
path: root/libelf/libelfP.h
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2006-05-31 15:50:43 +0000
committerUlrich Drepper <drepper@redhat.com>2006-05-31 15:50:43 +0000
commit8c56fe3b2c753234beb6f58a81c8b96f008226ef (patch)
treed61ffb7018be1081e3bba89ba3e7c17338509259 /libelf/libelfP.h
parentdf72c45805a859891ed0dcb854ee766f8ebef372 (diff)
downloadelfutils-8c56fe3b2c753234beb6f58a81c8b96f008226ef.tar.gz
Handle as-needed options.
Diffstat (limited to 'libelf/libelfP.h')
-rw-r--r--libelf/libelfP.h17
1 files changed, 14 insertions, 3 deletions
diff --git a/libelf/libelfP.h b/libelf/libelfP.h
index 54158aeb..ed6b5f7f 100644
--- a/libelf/libelfP.h
+++ b/libelf/libelfP.h
@@ -1,5 +1,5 @@
/* Internal interfaces for libelf.
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006 Red Hat, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005 Red Hat, Inc.
This file is part of Red Hat elfutils.
Contributed by Ulrich Drepper <drepper@redhat.com>, 1998.
@@ -546,8 +546,9 @@ extern uint32_t __libelf_crc32 (uint32_t crc, unsigned char *buf, size_t len)
/* We often have to update a flag iff a value changed. Make this
- convenient. */
-#define update_if_changed(var, exp, flag) \
+ convenient. None of the parameters must have a side effect. */
+#ifdef __GNUC__
+# define update_if_changed(var, exp, flag) \
do { \
__typeof__ (var) *_var = &(var); \
__typeof__ (exp) _exp = (exp); \
@@ -557,5 +558,15 @@ extern uint32_t __libelf_crc32 (uint32_t crc, unsigned char *buf, size_t len)
(flag) |= ELF_F_DIRTY; \
} \
} while (0)
+#else
+# define update_if_changed(var, exp, flag) \
+ do { \
+ if ((var) != (exp)) \
+ { \
+ (var) = (exp); \
+ (flag) |= ELF_F_DIRTY; \
+ } \
+ } while (0)
+#endif
#endif /* libelfP.h */