Skip to content

Commit

Permalink
gtk-demo: Load the demo files using g_file_get_contents()
Browse files Browse the repository at this point in the history
... instead of massaging a FILE* with flockfile() and ungetc().
  • Loading branch information
Benjamin Otte committed Feb 1, 2013
1 parent 05abba3 commit a0e68be
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 82 deletions.
6 changes: 0 additions & 6 deletions config.h.win32.in
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
95 changes: 20 additions & 75 deletions demos/gtk-demo/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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 ();
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -703,7 +650,7 @@ load_file (const gchar *filename)
p++;
if (*p)
{
p = buffer->str;
p = lines[i];
state++;
/* Fall through */
}
Expand All @@ -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);
}

Expand Down

0 comments on commit a0e68be

Please sign in to comment.