summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2004-09-25 12:36:36 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:59:14 -0500
commit797d80879c89cedce5992ec4a67b61d2711421a7 (patch)
treeb3ece4bcc06782ef3b1434637515a66de3ad84a0
parent48c97988ca6703264721c6be435e6f616cdbdcb6 (diff)
downloadsamba-797d80879c89cedce5992ec4a67b61d2711421a7.tar.gz
samba-797d80879c89cedce5992ec4a67b61d2711421a7.tar.bz2
samba-797d80879c89cedce5992ec4a67b61d2711421a7.zip
r2632: a new approach to handling const errors. We have had huge numbers of
const warnings for a long time, and no real way to approach a solution. Some of them are unavoidable due to the way the C standard works (for example, any function that provides strchr() like functionality _must_ produce a const warning) I will be converting a bunch of places that currently produce const warnings to use the discard_const_p(). Some of these will be unavoidable const problems, some of them will be ones we will fix up over time. At least this change means we will no longer be swamped with const warnings, and we will easily be able to see when new problems emerge. (This used to be commit fec3288ad6ce58e8273e3f16e88037db49ecf046)
-rw-r--r--source4/include/includes.h2
-rw-r--r--source4/lib/util.c20
-rw-r--r--source4/lib/util_str.c4
3 files changed, 24 insertions, 2 deletions
diff --git a/source4/include/includes.h b/source4/include/includes.h
index 8b20ee9b4f..d29353cafc 100644
--- a/source4/include/includes.h
+++ b/source4/include/includes.h
@@ -1068,5 +1068,7 @@ time_t timegm(struct tm *tm);
#include <sys/xattr.h>
#endif
+#define discard_const_p(type, ptr) (type *)discard_const(ptr)
+
#endif /* _INCLUDES_H */
diff --git a/source4/lib/util.c b/source4/lib/util.c
index c09e1a2997..910a35217c 100644
--- a/source4/lib/util.c
+++ b/source4/lib/util.c
@@ -931,3 +931,23 @@ BOOL all_zero(const char *ptr, uint_t size)
return True;
}
+
+/*
+ this is a warning hack. The idea is to use this everywhere that we
+ get the "discarding const" warning from gcc, effectively moving all
+ the warnings to this one place. That doesn't actually fix the
+ problem of course, but it means that when we do get to cleaning them
+ up we can do it by searching the code for discard_const.
+
+ It also means that other error types aren't as swamped by the noise
+ of hundreds of const warnings, so we are more likely to notice when
+ we get new errors.
+
+ Please only add more calls to this function when you find it
+ _really_ hard to fix const warnings. Our aim is to eventually not
+ need this function at all,
+*/
+void *discard_const(const void *ptr)
+{
+ return (void *)ptr;
+}
diff --git a/source4/lib/util_str.c b/source4/lib/util_str.c
index cbe5988238..f8aadf8f59 100644
--- a/source4/lib/util_str.c
+++ b/source4/lib/util_str.c
@@ -703,7 +703,7 @@ char *strchr_m(const char *s, char c)
return NULL;
*p = 0;
pull_ucs2_pstring(s2, ws);
- return (char *)(s+strlen(s2));
+ return discard_const_p(char, s+strlen(s2));
}
char *strrchr_m(const char *s, char c)
@@ -724,7 +724,7 @@ char *strrchr_m(const char *s, char c)
return NULL;
*p = 0;
pull_ucs2_pstring(s2, ws);
- return (char *)(s+strlen(s2));
+ return discard_const_p(char, s+strlen(s2));
}
/**