----- Mensaje original ----- > Hi, > > On 08/24/2013 04:11 PM, Marc-André Lureau wrote: > > Convert line endings from/to LF/CRLF, in utf8. > > --- > > gtk/spice-util-priv.h | 2 + > > gtk/spice-util.c | 126 > > ++++++++++++++++++++++++++++++++++++++++++++++++++ > > 2 files changed, 128 insertions(+) > > > > diff --git a/gtk/spice-util-priv.h b/gtk/spice-util-priv.h > > index ee5a42d..cc559dc 100644 > > --- a/gtk/spice-util-priv.h > > +++ b/gtk/spice-util-priv.h > > @@ -29,6 +29,8 @@ gboolean spice_strv_contains(const GStrv strv, const > > gchar *str); > > gchar* spice_uuid_to_string(const guint8 uuid[16]); > > const gchar* spice_yes_no(gboolean value); > > guint16 spice_make_scancode(guint scancode, gboolean release); > > +gchar* spice_unix2dos(const gchar *str, gssize len, GError **error); > > +gchar* spice_dos2unix(const gchar *str, gssize len, GError **error); > > > > #if GLIB_CHECK_VERSION(2,32,0) > > #define STATIC_MUTEX GMutex > > diff --git a/gtk/spice-util.c b/gtk/spice-util.c > > index 774a145..ebdc6aa 100644 > > --- a/gtk/spice-util.c > > +++ b/gtk/spice-util.c > > @@ -19,6 +19,7 @@ > > #ifdef HAVE_CONFIG_H > > # include "config.h" > > #endif > > + > > #include <stdlib.h> > > #include <string.h> > > #include <glib-object.h> > > @@ -245,3 +246,128 @@ guint16 spice_make_scancode(guint scancode, gboolean > > release) > > > > g_return_val_if_reached(0); > > } > > + > > +typedef enum { > > + NEWLINE_TYPE_LF, > > + NEWLINE_TYPE_CR_LF > > +} NewlineType; > > + > > +static gssize get_line(const gchar *str, gsize len, > > + NewlineType type, gsize *nl_len, > > + GError **error) > > +{ > > + const gchar *p = str; > > + gsize nl = 0; > > + > > + if (type == NEWLINE_TYPE_CR_LF) { > > + while ((p - str) < len) { > > + p = g_utf8_strchr(p, len, '\r'); > > + if (!p) > > + break; > > + p = g_utf8_next_char(p); > > + if (g_utf8_get_char(p) == '\n') { > > + len = (p - str) - 1; > > + nl = 2; > > + break; > > + } > > + } > > + } else { > > + p = g_utf8_strchr(str, len, '\n'); > > + if (p) { > > + len = p - str; > > + nl = 1; > > + } > > + } > > NACK, I still find this utterly unreadable. This can be simplified to: > > """ > > static gssize get_line(const gchar *str, gsize len, > NewlineType type, gsize *nl_len, > GError **error) > { > const gchar *p, *endl; > gsize nl = 0; > > endl = (type == NEWLINE_TYPE_CR_LF) ? "\r\n" : "\n"; > p = g_strstr_len(str, len, endl); > if (p) { > len = p - str; > nl = strlen(endl); > } > > """ > > Which is a lot less lines, much less error prone and much > simpler to parse / understand for humans. I am not going to argue, it looks simpler, although I would still prefer to use utf8 functions when writing a utf8 function... anyway, I will take that version, so we can move on with our lifes. _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel