X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fdis%2Futil.c;h=70f3f6e4ced663289b1a5f2820a367ff52f1b53f;hb=5c62590ba739d5960019890fe458e9b326b51993;hp=9357ef994c291ac2876d0540aabefe2e668abfcc;hpb=79c9aca6c956d6a9d2aa493d127095c747a3f0b3;p=mono.git diff --git a/mono/dis/util.c b/mono/dis/util.c old mode 100644 new mode 100755 index 9357ef994c2..70f3f6e4ced --- a/mono/dis/util.c +++ b/mono/dis/util.c @@ -10,7 +10,13 @@ #include #include #include +#include #include "util.h" +#include "mono/utils/mono-compiler.h" + +#ifdef HAVE_IEEEFP_H +#include +#endif /** * map: @@ -45,13 +51,15 @@ flags (guint32 code, dis_map_t *table) buffer [0] = 0; - for (i = 0; table [i].str != NULL; i++) + for (i = 0; code && table [i].str != NULL; i++) if (table [i].code & code) { - if (buffer [0]) - strcat (buffer, " "); + code &= ~table [i].code; strcat (buffer, table [i].str); } + if (code) + sprintf (buffer + strlen (buffer), "unknown-flag-%2x ", code); + return buffer; } @@ -91,32 +99,65 @@ data_dump (const char *data, int len, const char* prefix) { str = g_string_new (" ("); for (i = 0; i + 15 < len; i += 16) { if (i == 0) - g_string_sprintfa (str, "\n"); - g_string_sprintfa (str, "%s", prefix); + g_string_append_printf (str, "\n"); + g_string_append_printf (str, "%s", prefix); for (j = 0; j < 16; ++j) - g_string_sprintfa (str, "%02X ", (unsigned char) (data [i + j])); - g_string_sprintfa (str, i == len - 16? ") // ": " // "); + g_string_append_printf (str, "%02X ", (unsigned char) (data [i + j])); + g_string_append_printf (str, i == len - 16? ") // ": " // "); for (j = 0; j < 16; ++j) - g_string_sprintfa (str, "%c", data [i + j] >= 32 && data [i + j] <= 126? data [i + j]: '.'); - g_string_sprintfa (str, "\n"); + g_string_append_printf (str, "%c", data [i + j] >= 32 && data [i + j] <= 126? data [i + j]: '.'); + g_string_append_printf (str, "\n"); } if (i == len) return g_string_free (str, FALSE); if (len > 16) - g_string_sprintfa (str, "%s", prefix); + g_string_append_printf (str, "%s", prefix); j = i; for (; i < len; ++i) - g_string_sprintfa (str, "%02X ", (unsigned char) (data [i])); + g_string_append_printf (str, "%02X ", (unsigned char) (data [i])); if (len > 16) { /* align */ int count = 16 - (len % 16); for (i = 0; i < count; ++i) - g_string_sprintfa (str, " "); + g_string_append_printf (str, " "); } - g_string_sprintfa (str, ") // "); + g_string_append_printf (str, ") // "); for (i = j; i < len; ++i) - g_string_sprintfa (str, "%c", data [i] >= 32 && data [i] <= 126? data [i]: '.'); - g_string_sprintfa (str, "\n"); + g_string_append_printf (str, "%c", data [i] >= 32 && data [i] <= 126? data [i]: '.'); + g_string_append_printf (str, "\n"); return g_string_free (str, FALSE); } +int +dis_isinf (double num) +{ +#ifdef HAVE_ISINF + return isinf (num); +#elif defined(HAVE_IEEEFP_H) + fpclass_t klass; + + klass = fpclass (num); + if (klass == FP_NINF) + return -1; + + if (klass == FP_PINF) + return 1; + + return 0; +#elif defined(HAVE__FINITE) + return _finite (num) ? 0 : 1; +#else +#error "Don't know how to implement isinf for this platform." +#endif +} + +int +dis_isnan (double num) +{ +#ifdef __MINGW32_VERSION +return _isnan (num); +#else +return isnan (num); +#endif +} +