strncmp(s1, s2, n) == 0);
}
-boolean strEqualPrefix(char *s, char *prefix)
+boolean strPrefix(char *s, char *prefix)
{
return (s == NULL && prefix == NULL ? TRUE :
s == NULL && prefix != NULL ? FALSE :
strncmp(s, prefix, strlen(prefix)) == 0);
}
-boolean strEqualSuffix(char *s, char *suffix)
+boolean strSuffix(char *s, char *suffix)
{
return (s == NULL && suffix == NULL ? TRUE :
s == NULL && suffix != NULL ? FALSE :
free(ptr);
}
+void clear_mem(void *ptr, unsigned long size)
+{
+#if defined(PLATFORM_WIN32)
+ /* for unknown reason, memset() sometimes crashes when compiled with MinGW */
+ char *cptr = (char *)ptr;
+
+ while (size--)
+ *cptr++ = 0;
+#else
+ memset(ptr, 0, size);
+#endif
+}
+
/* ------------------------------------------------------------------------- */
/* various helper functions */
if (result == -1)
{
- if (strEqual(s_lower, "false"))
+ if (strEqual(s_lower, "false") ||
+ strEqual(s_lower, "no") ||
+ strEqual(s_lower, "off"))
result = 0;
- else if (strEqual(s_lower, "true"))
+ else if (strEqual(s_lower, "true") ||
+ strEqual(s_lower, "yes") ||
+ strEqual(s_lower, "on"))
result = 1;
else
result = atoi(s);
FADE_MODE_DEFAULT);
}
#if 1
- else if (strEqualPrefix(suffix, ".font")) /* (may also be ".font_xyz") */
+ else if (strPrefix(suffix, ".font")) /* (may also be ".font_xyz") */
#else
else if (strEqualN(suffix, ".font", 5)) /* (may also be ".font_xyz") */
#endif
#if DEBUG
-#define DEBUG_NUM_TIMESTAMPS 3
+#define DEBUG_NUM_TIMESTAMPS 5
#define DEBUG_TIME_IN_MICROSECONDS 0
#if DEBUG_TIME_IN_MICROSECONDS
}
#endif
+char *debug_print_timestamp_get_padding(int padding_size)
+{
+ static char *padding = NULL;
+ int max_padding_size = 100;
+
+ if (padding == NULL)
+ {
+ padding = checked_calloc(max_padding_size + 1);
+ memset(padding, ' ', max_padding_size);
+ }
+
+ return &padding[MAX(0, max_padding_size - padding_size)];
+}
+
void debug_print_timestamp(int counter_nr, char *message)
{
-#if DEBUG_TIME_IN_MICROSECONDS
- static double counter[DEBUG_NUM_TIMESTAMPS][2];
+ int indent_size = 8;
+ int padding_size = 40;
+ float timestamp_interval;
- if (counter_nr >= DEBUG_NUM_TIMESTAMPS)
+ if (counter_nr < 0)
+ Error(ERR_EXIT, "debugging: invalid negative counter");
+ else if (counter_nr >= DEBUG_NUM_TIMESTAMPS)
Error(ERR_EXIT, "debugging: increase DEBUG_NUM_TIMESTAMPS in misc.c");
- counter[counter_nr][0] = Counter_Microseconds();
-
- if (message)
- printf("%s %.3f ms\n", message,
- (counter[counter_nr][0] - counter[counter_nr][1]) / 1000);
+#if DEBUG_TIME_IN_MICROSECONDS
+ static double counter[DEBUG_NUM_TIMESTAMPS][2];
+ char *unit = "ms";
- counter[counter_nr][1] = counter[counter_nr][0];
+ counter[counter_nr][0] = Counter_Microseconds();
#else
static long counter[DEBUG_NUM_TIMESTAMPS][2];
-
- if (counter_nr >= DEBUG_NUM_TIMESTAMPS)
- Error(ERR_EXIT, "debugging: increase DEBUG_NUM_TIMESTAMPS in misc.c");
+ char *unit = "s";
counter[counter_nr][0] = Counter();
+#endif
- if (message)
- printf("%s %.3f s\n", message,
- (float)(counter[counter_nr][0] - counter[counter_nr][1]) / 1000);
-
+ timestamp_interval = counter[counter_nr][0] - counter[counter_nr][1];
counter[counter_nr][1] = counter[counter_nr][0];
-#endif
+
+ if (message)
+ printf("%s%s%s %.3f %s\n",
+ debug_print_timestamp_get_padding(counter_nr * indent_size),
+ message,
+ debug_print_timestamp_get_padding(padding_size - strlen(message)),
+ timestamp_interval / 1000,
+ unit);
}
void debug_print_parent_only(char *format, ...)