[Spice-devel] [PATCH spice-gtk 3/5] util: add unix2dos and dos2unix

Marc-André Lureau mlureau at redhat.com
Sat Aug 24 08:45:30 PDT 2013



----- 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.


More information about the Spice-devel mailing list