From e7faaf9fc5dde56a9d07a046a4fbfbe2f2161f27 Mon Sep 17 00:00:00 2001 From: Daniel Zaoui Date: Thu, 29 May 2014 15:41:10 +0300 Subject: [PATCH] Eolian/Generator: Fix Windows issue during string manipulation. For Windows, it is simpler to replace all the \r\n with \n after having read the file. --- src/bin/eolian/main.c | 3 +++ src/lib/eolian/eo_lexer.c | 10 ++++++++++ src/lib/eolian/eo_lexer.rl | 10 ++++++++++ 3 files changed, 23 insertions(+) diff --git a/src/bin/eolian/main.c b/src/bin/eolian/main.c index c15c890830..538d2de395 100644 --- a/src/bin/eolian/main.c +++ b/src/bin/eolian/main.c @@ -155,6 +155,9 @@ _generate_impl_c_file(char *filename, const Eolian_Class class) fd = NULL; buffer = eina_strbuf_manage_new(content); +#ifdef _WIN32 + eina_strbuf_replace_all(buffer, "\r\n", "\n"); +#endif } else buffer = eina_strbuf_new(); diff --git a/src/lib/eolian/eo_lexer.c b/src/lib/eolian/eo_lexer.c index 5bae114fde..f172da9bc5 100644 --- a/src/lib/eolian/eo_lexer.c +++ b/src/lib/eolian/eo_lexer.c @@ -4512,6 +4512,16 @@ eo_tokenizer_database_fill(const char *filename) goto end; } + buffer[len] = '\0'; +#if _WIN32 + { + Eina_Strbuf *str_buffer = eina_strbuf_manage_new(buffer); + if (eina_strbuf_replace_all(str_buffer, "\r\n", "\n")) + len = eina_strbuf_length_get(str_buffer); + buffer = eina_strbuf_string_steal(str_buffer); + eina_strbuf_free(str_buffer); + } +#endif if (!eo_tokenizer_mem_walk(toknz, filename, buffer, len)) goto end; if (!toknz->classes) diff --git a/src/lib/eolian/eo_lexer.rl b/src/lib/eolian/eo_lexer.rl index 2a6f4986ed..26227d7a6b 100644 --- a/src/lib/eolian/eo_lexer.rl +++ b/src/lib/eolian/eo_lexer.rl @@ -1378,6 +1378,16 @@ eo_tokenizer_database_fill(const char *filename) goto end; } + buffer[len] = '\0'; +#if _WIN32 + { + Eina_Strbuf *str_buffer = eina_strbuf_manage_new(buffer); + if (eina_strbuf_replace_all(str_buffer, "\r\n", "\n")) + len = eina_strbuf_length_get(str_buffer); + buffer = eina_strbuf_string_steal(str_buffer); + eina_strbuf_free(str_buffer); + } +#endif if (!eo_tokenizer_mem_walk(toknz, filename, buffer, len)) goto end; if (!toknz->classes)