#define g_strlcpy monoeg_g_strlcpy
#define g_strndup monoeg_g_strndup
#define g_strnfill monoeg_g_strnfill
+#define g_strnlen monoeg_g_strnlen
#define g_strreverse monoeg_g_strreverse
#define g_strsplit monoeg_g_strsplit
#define g_strsplit_set monoeg_g_strsplit_set
gchar *g_strchomp (gchar *str);
void g_strdown (gchar *string);
gchar *g_strnfill (gsize length, gchar fill_char);
+gsize g_strnlen (const char*, gsize);
void g_strdelimit (char *string, char delimiter, char new_delimiter);
gchar *g_strescape (const gchar *source, const gchar *exceptions);
return length;
#endif
}
+
+gsize
+g_strnlen (const char* s, gsize n)
+{
+ gsize i;
+ for (i = 0; i < n && s [i]; ++i) ;
+ return i;
+}
return NULL;
}
+static RESULT
+test_strnlen (void)
+{
+ g_assert (g_strnlen ("abc", 0) == 0);
+ g_assert (g_strnlen ("abc", 1) == 1);
+ g_assert (g_strnlen ("abc", 2) == 2);
+ g_assert (g_strnlen ("abc", 3) == 3);
+ g_assert (g_strnlen ("abc", 4) == 3);
+ g_assert (g_strnlen ("abc", 5) == 3);
+ return NULL;
+}
+
static Test string_tests [] = {
{"append-speed", test_append_speed},
{"append_c-speed", test_append_c_speed},
{"truncate", test_truncate },
{"append_len", test_appendlen },
{"macros", test_macros },
+ {"strnlen", test_strnlen },
{NULL, NULL}
};
static void
write_string (MonoCompile *cfg, const char *str)
{
- size_t len = strnlen (str, 0x2000);
+ const size_t len = g_strnlen (str, 0x2000);
write_int (cfg, (int) len);
gunichar2 *u = u8to16 (str);
write_string (cfg, mono_inst_name (insn->opcode));
GString *insndesc = mono_print_ins_index_strbuf (-1, insn);
- int len = strnlen (insndesc->str, 0x2000);
+ const int len = g_strnlen (insndesc->str, 0x2000);
#define CUTOFF 40
if (len > CUTOFF) {
insndesc->str[CUTOFF] = '\0';