[gtk+] gtk-demo: Load the demo files using g_file_get_contents()



commit a0e68bec52f8da37facc74683e7e0b9a3eef3c21
Author: Benjamin Otte <otte redhat com>
Date:   Tue Jan 29 14:08:47 2013 +0100

    gtk-demo: Load the demo files using g_file_get_contents()
    
    ... instead of massaging a FILE* with flockfile() and ungetc().

 config.h.win32.in     |    6 ---
 configure.ac          |    2 +-
 demos/gtk-demo/main.c |   95 ++++++++++--------------------------------------
 3 files changed, 21 insertions(+), 82 deletions(-)
---
diff --git a/config.h.win32.in b/config.h.win32.in
index d5c2ad3..ddb9d75 100644
--- a/config.h.win32.in
+++ b/config.h.win32.in
@@ -50,15 +50,9 @@
 /* Define to 1 if you have the <dlfcn.h> header file. */
 /* #undef HAVE_DLFCN_H */
 
-/* Define to 1 if you have the `flockfile' function. */
-/* #undef HAVE_FLOCKFILE */
-
 /* Define to 1 if you have the <ftw.h> header file. */
 /* #undef HAVE_FTW_H */
 
-/* Define to 1 if you have the `getc_unlocked' function. */
-/* #undef HAVE_GETC_UNLOCKED */
-
 /* Define to 1 if you have the `getpagesize' function. */
 #ifndef _MSC_VER
 #define HAVE_GETPAGESIZE 1
diff --git a/configure.ac b/configure.ac
index 6908f89..6ccae17 100644
--- a/configure.ac
+++ b/configure.ac
@@ -560,7 +560,7 @@ if test "x$enable_rebuilds" = "xyes" && \
 fi
 AC_SUBST(REBUILD)
 
-AC_CHECK_FUNCS(lstat mkstemp flockfile getc_unlocked)
+AC_CHECK_FUNCS(lstat mkstemp)
 AC_CHECK_FUNCS(localtime_r)
 
 # _NL_TIME_FIRST_WEEKDAY is an enum and not a define
diff --git a/demos/gtk-demo/main.c b/demos/gtk-demo/main.c
index 935b86e..1b58b15 100644
--- a/demos/gtk-demo/main.c
+++ b/demos/gtk-demo/main.c
@@ -110,65 +110,6 @@ window_closed_cb (GtkWidget *window, gpointer data)
   g_free (cbdata);
 }
 
-gboolean
-read_line (FILE *stream, GString *str)
-{
-  int n_read = 0;
-
-#ifdef HAVE_FLOCKFILE
-  flockfile (stream);
-#endif
-
-  g_string_truncate (str, 0);
-
-  while (1)
-    {
-      int c;
-
-#ifdef HAVE_FLOCKFILE
-      c = getc_unlocked (stream);
-#else
-      c = getc (stream);
-#endif
-
-      if (c == EOF)
-        goto done;
-      else
-        n_read++;
-
-      switch (c)
-        {
-        case '\r':
-        case '\n':
-          {
-#ifdef HAVE_FLOCKFILE
-            int next_c = getc_unlocked (stream);
-#else
-            int next_c = getc (stream);
-#endif
-
-            if (!(next_c == EOF ||
-                  (c == '\r' && next_c == '\n') ||
-                  (c == '\n' && next_c == '\r')))
-              ungetc (next_c, stream);
-
-            goto done;
-          }
-        default:
-          g_string_append_c (str, c);
-        }
-    }
-
- done:
-
-#ifdef HAVE_FLOCKFILE
-  funlockfile (stream);
-#endif
-
-  return n_read > 0;
-}
-
-
 /* Stupid syntax highlighting.
  *
  * No regex was used in the making of this highlighting.
@@ -559,14 +500,13 @@ remove_data_tabs (void)
 void
 load_file (const gchar *filename)
 {
-  FILE *file;
   GtkTextIter start, end;
   char *full_filename;
   GError *err = NULL;
-  GString *buffer = g_string_new (NULL);
   int state = 0;
   gboolean in_para = 0;
-  gchar **names;
+  gchar **names, **lines;
+  gchar *contents;
   gint i;
 
   remove_data_tabs ();
@@ -598,23 +538,30 @@ load_file (const gchar *filename)
       goto out;
     }
 
-  file = g_fopen (full_filename, "r");
-
-  if (!file)
-    g_warning ("Cannot open %s: %s\n", full_filename, g_strerror (errno));
+  if (!g_file_get_contents (full_filename, &contents, NULL, &err))
+    {
+      g_warning ("Cannot open %s: %s\n", full_filename, err->message);
+      g_error_free (err);
+      g_free (full_filename);
+      goto out;
+    }
 
   g_free (full_filename);
 
-  if (!file)
-    goto out;
+  lines = g_strsplit (contents, "\n", -1);
+  g_free (contents);
 
   gtk_text_buffer_get_iter_at_offset (info_buffer, &start, 0);
-  while (read_line (file, buffer))
+  for (i = 0; lines[i] != NULL; i++)
     {
-      gchar *p = buffer->str;
+      gchar *p;
       gchar *q;
       gchar *r;
 
+      /* Make sure \r is stripped at the end for the poor windows people */
+      lines[i] = g_strchomp (lines[i]);
+
+      p = lines[i];
       switch (state)
         {
         case 0:
@@ -703,7 +650,7 @@ load_file (const gchar *filename)
             p++;
           if (*p)
             {
-              p = buffer->str;
+              p = lines[i];
               state++;
               /* Fall through */
             }
@@ -718,13 +665,11 @@ load_file (const gchar *filename)
         }
     }
 
-  fclose (file);
-
   fontify ();
 
-out:
-  g_string_free (buffer, TRUE);
+  g_strfreev (lines);
 
+out:
   g_strfreev (names);
 }
 



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