summaryrefslogtreecommitdiff
path: root/community-testing/root/fix-mathcore-generation-r42566.diff
diff options
context:
space:
mode:
Diffstat (limited to 'community-testing/root/fix-mathcore-generation-r42566.diff')
-rw-r--r--community-testing/root/fix-mathcore-generation-r42566.diff40
1 files changed, 40 insertions, 0 deletions
diff --git a/community-testing/root/fix-mathcore-generation-r42566.diff b/community-testing/root/fix-mathcore-generation-r42566.diff
new file mode 100644
index 000000000..ae22c23c0
--- /dev/null
+++ b/community-testing/root/fix-mathcore-generation-r42566.diff
@@ -0,0 +1,40 @@
+Index: cint/cint/src/typedef.cxx
+===================================================================
+--- cint/cint/src/typedef.cxx (revision 42564)
++++ cint/cint/src/typedef.cxx (revision 42566)
+@@ -297,18 +297,27 @@
+ }
+ c = G__fgetname_template(type1, 0, "{");
+ }
+- if (!strcmp(type1, "::")) { // FIXME: This makes no sense, there cannot be typedef ::{...};
++ if (!strcmp(type1, "::")) {
+ // skip a :: without a namespace in front of it (i.e. global namespace!)
+ c = G__fgetspace(); // skip the next ':'
+ c = G__fgetname_template(type1, 0, "{");
+ }
+- if (!strncmp(type1, "::", 2)) { // Strip a leading :: (global namespace operator)
+- // A leading '::' causes other typename matching functions to fail so
+- // we remove it. This is not the ideal solution (neither was the one
+- // above since it does not allow for distinction between global
+- // namespace and local namespace) ... but at least it is an improvement
+- // over the current behavior.
+- strcpy((char*)type1, type1 + 2); // Okay since we reduce the size ...
++ if (!strncmp(type1, "::", 2)) {
++ // Strip a leading :: (global namespace operator).
++ // A leading '::' causes other typename matching
++ // functions to fail so we remove it. This is not
++ // the ideal solution (neither is the one above)
++ // since it does not allow for decriminating between
++ // global namespace and local namespace, but at
++ // least it is an improvement over the current
++ // behavior.
++ //
++ // Note: We must use memmove because the source
++ // and destination strings overlap!
++ //
++ int t1len = strlen(type1);
++ memmove(type1, type1 + 2, t1len - 2);
++ type1.Set(t1len - 2, '\0');
+ }
+ while (isspace(c)) {
+ len = strlen(type1);