demangle_number: handle base-36 numbers.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@344 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/vg_mylibc.c b/coregrind/vg_mylibc.c
index 8cb776e..c0ebba3 100644
--- a/coregrind/vg_mylibc.c
+++ b/coregrind/vg_mylibc.c
@@ -664,6 +664,33 @@
 }
 
 
+Long VG_(atoll36) ( Char* str )
+{
+   Bool neg = False;
+   Long n = 0;
+   if (*str == '-') { str++; neg = True; };
+   while (True) {
+      if (*str >= '0' && *str <= '9') {
+         n = 36*n + (Long)(*str - '0');
+      }
+      else 
+      if (*str >= 'A' && *str <= 'Z') {
+         n = 36*n + (Long)((*str - 'A') + 10);
+      }
+      else 
+      if (*str >= 'a' && *str <= 'z') {
+         n = 36*n + (Long)((*str - 'a') + 10);
+      }
+      else {
+	break;
+      }
+      str++;
+   }
+   if (neg) n = -n;
+   return n;
+}
+
+
 Char* VG_(strcat) ( Char* dest, const Char* src )
 {
    Char* dest_orig = dest;