[gtk+] builder: Simplify _gtk_builder_boolean_from_string



commit 97a29ab8c45413c232ec5244b9c2a1df8e89ce36
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Sep 7 12:54:16 2015 -0400

    builder: Simplify _gtk_builder_boolean_from_string
    
    We can do this without calling strlen() or allocating memory.

 gtk/gtkbuilder.c |   40 +++++++++++++++++-----------------------
 1 files changed, 17 insertions(+), 23 deletions(-)
---
diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c
index 0f04ed7..b149b9a 100644
--- a/gtk/gtkbuilder.c
+++ b/gtk/gtkbuilder.c
@@ -2270,15 +2270,9 @@ _gtk_builder_boolean_from_string (const gchar  *string,
                                   gboolean     *value,
                                   GError      **error)
 {
-  gboolean retval = TRUE;
-  int length;
-
-  g_assert (string != NULL);
-  length = strlen (string);
-
-  if (length == 0)
-    retval = FALSE;
-  else if (length == 1)
+  if (string[0] == '\0')
+    goto error;
+  else if (string[1] == '\0')
     {
       gchar c = g_ascii_tolower (string[0]);
       if (c == 'y' || c == 't' || c == '1')
@@ -2286,29 +2280,29 @@ _gtk_builder_boolean_from_string (const gchar  *string,
       else if (c == 'n' || c == 'f' || c == '0')
         *value = FALSE;
       else
-        retval = FALSE;
+        goto error;
     }
   else
     {
-      gchar *lower = g_ascii_strdown (string, length);
-
-      if (strcmp (lower, "yes") == 0 || strcmp (lower, "true") == 0)
+      if (g_ascii_strcasecmp (string, "true") == 0 ||
+          g_ascii_strcasecmp (string, "yes") == 0)
         *value = TRUE;
-      else if (strcmp (lower, "no") == 0 || strcmp (lower, "false") == 0)
+      else if (g_ascii_strcasecmp (string, "false") == 0 ||
+               g_ascii_strcasecmp (string, "no") == 0)
         *value = FALSE;
       else
-        retval = FALSE;
-      g_free (lower);
+        goto error;
     }
 
-  if (!retval)
-    g_set_error (error,
-                 GTK_BUILDER_ERROR,
-                 GTK_BUILDER_ERROR_INVALID_VALUE,
-                 "Could not parse boolean '%s'",
-                 string);
+  return TRUE;
 
-  return retval;
+error:
+  g_set_error (error,
+               GTK_BUILDER_ERROR,
+               GTK_BUILDER_ERROR_INVALID_VALUE,
+               "Could not parse boolean '%s'",
+               string);
+  return FALSE;
 }
 
 /**


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]