*value = strtol (dyn_string_buf (number), NULL, base);
*/
/* vg_assert( base == 10 ); */
- if ( base != 10 ) {
+ if ( base != 10 && base != 36 ) {
dyn_string_delete(number);
return STATUS_UNIMPLEMENTED;
}
- *value = VG_(atoll) (dyn_string_buf (number));
+ if (base == 36) {
+ *value = VG_(atoll36) (dyn_string_buf (number));
+ } else {
+ *value = VG_(atoll) (dyn_string_buf (number));
+ }
dyn_string_delete (number);
return STATUS_OK;
extern Int VG_(strlen) ( const Char* str );
extern Long VG_(atoll) ( Char* str );
+extern Long VG_(atoll36) ( Char* str );
extern Char* VG_(strcat) ( Char* dest, const Char* src );
extern Char* VG_(strncat) ( Char* dest, const Char* src, Int n );
}
+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;
*value = strtol (dyn_string_buf (number), NULL, base);
*/
/* vg_assert( base == 10 ); */
- if ( base != 10 ) {
+ if ( base != 10 && base != 36 ) {
dyn_string_delete(number);
return STATUS_UNIMPLEMENTED;
}
- *value = VG_(atoll) (dyn_string_buf (number));
+ if (base == 36) {
+ *value = VG_(atoll36) (dyn_string_buf (number));
+ } else {
+ *value = VG_(atoll) (dyn_string_buf (number));
+ }
dyn_string_delete (number);
return STATUS_OK;
extern Int VG_(strlen) ( const Char* str );
extern Long VG_(atoll) ( Char* str );
+extern Long VG_(atoll36) ( Char* str );
extern Char* VG_(strcat) ( Char* dest, const Char* src );
extern Char* VG_(strncat) ( Char* dest, const Char* src, Int n );
}
+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;