summaryrefslogtreecommitdiff
path: root/community-staging/root/fix-mathcore-generation-r42566.diff
blob: ae22c23c0d1c8b83e975f268bfaf22e4ccead371 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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);