From c7af228de9fddb4923fc42dcb60262ab55b28339 Mon Sep 17 00:00:00 2001 From: Bradford Hovinen Date: Mon, 18 Jun 2001 16:44:33 +0000 Subject: [PATCH] Use read () rather than fread () to make sure to catch end-of-file. 2001-06-18 Bradford Hovinen * capplets/new-*/main.c (do_set_xml): Use read () rather than fread () to make sure to catch end-of-file. Gracefully handle no-data case. --- ChangeLog | 6 +++++ capplets/background/main.c | 43 +++++++++++++++++++----------- capplets/keyboard/main.c | 43 +++++++++++++++++++----------- capplets/mouse/main.c | 42 ++++++++++++++++++------------ capplets/screensaver/main.c | 49 +++++++++++++++++++++-------------- capplets/sound/main.c | 47 +++++++++++++++++++-------------- capplets/ui-properties/main.c | 47 +++++++++++++++++++-------------- 7 files changed, 172 insertions(+), 105 deletions(-) diff --git a/ChangeLog b/ChangeLog index b3d84ee39..ac7496ed0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2001-06-18 Bradford Hovinen + + * capplets/new-*/main.c (do_set_xml): Use read () rather than + fread () to make sure to catch end-of-file. Gracefully handle + no-data case. + 2001-06-07 Christian Rose * capplets/desktop-links/Appearances.directory, diff --git a/capplets/background/main.c b/capplets/background/main.c index 232a52fce..028113ac0 100644 --- a/capplets/background/main.c +++ b/capplets/background/main.c @@ -157,28 +157,41 @@ do_set_xml (gboolean apply_settings) int len = 0; int bytes_read = 0; - while (!feof (stdin)) { - if (!len) buffer = g_new (char, 16385); - else buffer = g_renew (char, buffer, len + 16385); - bytes_read = fread (buffer + len, 1, 16384, stdin); + fflush (stdin); + + do { + if (!len) buffer = g_new (char, 4097); + else buffer = g_renew (char, buffer, len + 4097); + bytes_read = read (fileno (stdin), buffer + len, 4096); buffer[len + bytes_read] = '\0'; - len += 16384; - } + len += 4096; + } while (bytes_read == 4096); - if (len > 0 && bytes_read + len - 16384 > 0) { - doc = xmlParseMemory (buffer, strlen (buffer)); - prefs = preferences_read_xml (doc); + if (len >= 4096 && len > 0) { + doc = xmlParseMemory (buffer, len - 4096 + bytes_read); + g_free (buffer); - if (prefs) { - preferences_save (prefs); + if (doc != NULL) { + prefs = preferences_read_xml (doc); - if (apply_settings) - preferences_apply_now (prefs); - return; + if (prefs != NULL) { + preferences_save (prefs); + + if (apply_settings) + preferences_apply_now (prefs); + + return; + } + else if (prefs != NULL) { + return; + } + + xmlFreeDoc (doc); } + } else { + g_critical ("No data to apply"); } - g_warning ("Error while reading the background config file"); return; } diff --git a/capplets/keyboard/main.c b/capplets/keyboard/main.c index 7c4b240f9..a486b7e34 100644 --- a/capplets/keyboard/main.c +++ b/capplets/keyboard/main.c @@ -146,28 +146,41 @@ do_set_xml (gboolean apply_settings) int len = 0; int bytes_read = 0; - while (!feof (stdin)) { - if (!len) buffer = g_new (char, 16385); - else buffer = g_renew (char, buffer, len + 16385); - bytes_read = fread (buffer + len, 1, 16384, stdin); + fflush (stdin); + + do { + if (!len) buffer = g_new (char, 4097); + else buffer = g_renew (char, buffer, len + 4097); + bytes_read = read (fileno (stdin), buffer + len, 4096); buffer[len + bytes_read] = '\0'; - len += 16384; - } + len += 4096; + } while (bytes_read == 4096); - if (len > 0 && bytes_read + len - 16384 > 0) { - doc = xmlParseMemory (buffer, strlen (buffer)); - prefs = preferences_read_xml (doc); + if (len >= 4096 && len > 0) { + doc = xmlParseMemory (buffer, len - 4096 + bytes_read); + g_free (buffer); - if (prefs) { - preferences_save (prefs); + if (doc != NULL) { + prefs = preferences_read_xml (doc); - if (apply_settings) - preferences_apply_now (prefs); - return; + if (prefs != NULL) { + preferences_save (prefs); + + if (apply_settings) + preferences_apply_now (prefs); + + return; + } + else if (prefs != NULL) { + return; + } + + xmlFreeDoc (doc); } + } else { + g_critical ("No data to apply"); } - g_warning ("Error while reading the keyboard config file"); return; } diff --git a/capplets/mouse/main.c b/capplets/mouse/main.c index bc184f18a..d716bd1b3 100644 --- a/capplets/mouse/main.c +++ b/capplets/mouse/main.c @@ -146,29 +146,37 @@ do_set_xml (gboolean apply_settings) int len = 0; int bytes_read = 0; - while (!feof (stdin)) { - if (!len) buffer = g_new (char, 16385); - else buffer = g_renew (char, buffer, len + 16385); - bytes_read = fread (buffer + len, 1, 16384, stdin); + fflush (stdin); + + do { + if (!len) buffer = g_new (char, 4097); + else buffer = g_renew (char, buffer, len + 4097); + bytes_read = read (fileno (stdin), buffer + len, 4096); buffer[len + bytes_read] = '\0'; - len += 16384; - } + len += 4096; + } while (bytes_read == 4096); - if (len > 0 && bytes_read + len - 16384 > 0) { - doc = xmlParseMemory (buffer, strlen (buffer)); - prefs = preferences_read_xml (doc); + if (len >= 4096 && len > 0) { + doc = xmlParseMemory (buffer, len - 4096 + bytes_read); + g_free (buffer); - if (prefs && apply_settings) { - preferences_save (prefs); - return; - } - else if (prefs) { - return; + if (doc != NULL) { + prefs = preferences_read_xml (doc); + + if (prefs && apply_settings) { + preferences_save (prefs); + return; + } + else if (prefs != NULL) { + return; + } + + xmlFreeDoc (doc); } + } else { + g_critical ("No data to apply"); } - g_warning ("Error while reading the keyboard config file"); - return; } diff --git a/capplets/screensaver/main.c b/capplets/screensaver/main.c index 6c2d40213..046fcfa92 100644 --- a/capplets/screensaver/main.c +++ b/capplets/screensaver/main.c @@ -264,30 +264,39 @@ do_set_xml (gboolean apply_settings) xmlDocPtr doc; char *buffer = NULL; int len = 0; - int bytes_read; + int bytes_read = 0; - while (!feof (stdin)) { - if (!len) buffer = g_new (char, 16385); - else buffer = g_renew (char, buffer, len + 16385); - bytes_read = fread (buffer + len, 1, 16384, stdin); + fflush (stdin); + + do { + if (!len) buffer = g_new (char, 4097); + else buffer = g_renew (char, buffer, len + 4097); + bytes_read = read (fileno (stdin), buffer + len, 4096); buffer[len + bytes_read] = '\0'; - len += 16384; + len += 4096; + } while (bytes_read == 4096); + + if (len >= 4096 && len > 0) { + doc = xmlParseMemory (buffer, len - 4096 + bytes_read); + g_free (buffer); + + if (doc != NULL) { + prefs = preferences_read_xml (doc); + + if (prefs && apply_settings) { + preferences_save (prefs); + return; + } + else if (prefs != NULL) { + return; + } + + xmlFreeDoc (doc); + } + } else { + g_critical ("No data to apply"); } - if (len > 0 && bytes_read + len - 16384 > 0) { - doc = xmlParseMemory (buffer, strlen (buffer)); - prefs = preferences_read_xml (doc); - - if (prefs && apply_settings) { - preferences_save (prefs); - return; - } - else if (prefs) { - return; - } - } - - g_warning ("Error while reading the screensaver config file"); return; } diff --git a/capplets/sound/main.c b/capplets/sound/main.c index c2ebdb977..4f261c7c9 100644 --- a/capplets/sound/main.c +++ b/capplets/sound/main.c @@ -145,28 +145,37 @@ do_set_xml (gboolean apply_settings) int len = 0; int bytes_read = 0; - while (!feof (stdin)) { - if (!len) buffer = g_new (char, 16385); - else buffer = g_renew (char, buffer, len + 16385); - bytes_read = fread (buffer + len, 1, 16384, stdin); + fflush (stdin); + + do { + if (!len) buffer = g_new (char, 4097); + else buffer = g_renew (char, buffer, len + 4097); + bytes_read = read (fileno (stdin), buffer + len, 4096); buffer[len + bytes_read] = '\0'; - len += 16384; + len += 4096; + } while (bytes_read == 4096); + + if (len >= 4096 && len > 0) { + doc = xmlParseMemory (buffer, len - 4096 + bytes_read); + g_free (buffer); + + if (doc != NULL) { + prefs = preferences_read_xml (doc); + + if (prefs && apply_settings) { + preferences_save (prefs); + return; + } + else if (prefs != NULL) { + return; + } + + xmlFreeDoc (doc); + } + } else { + g_critical ("No data to apply"); } - if (len > 0 && bytes_read + len - 16384 > 0) { - doc = xmlParseMemory (buffer, strlen (buffer)); - prefs = preferences_read_xml (doc); - - if (prefs && apply_settings) { - preferences_save (prefs); - return; - } - else if (prefs) { - return; - } - } - - g_warning ("Error while reading the sound config file"); return; } diff --git a/capplets/ui-properties/main.c b/capplets/ui-properties/main.c index 2a93f4f6c..a89677862 100644 --- a/capplets/ui-properties/main.c +++ b/capplets/ui-properties/main.c @@ -138,28 +138,37 @@ do_set_xml (gboolean apply_settings) int len = 0; int bytes_read = 0; - while (!feof (stdin)) { - if (!len) buffer = g_new (char, 16385); - else buffer = g_renew (char, buffer, len + 16385); - bytes_read = fread (buffer + len, 1, 16384, stdin); + fflush (stdin); + + do { + if (!len) buffer = g_new (char, 4097); + else buffer = g_renew (char, buffer, len + 4097); + bytes_read = read (fileno (stdin), buffer + len, 4096); buffer[len + bytes_read] = '\0'; - len += 16384; + len += 4096; + } while (bytes_read == 4096); + + if (len >= 4096 && len > 0) { + doc = xmlParseMemory (buffer, len - 4096 + bytes_read); + g_free (buffer); + + if (doc != NULL) { + prefs = preferences_read_xml (doc); + + if (prefs && apply_settings) { + preferences_save (prefs); + return; + } + else if (prefs != NULL) { + return; + } + + xmlFreeDoc (doc); + } + } else { + g_critical ("No data to apply"); } - if (len > 0 && bytes_read + len - 16384 > 0) { - doc = xmlParseMemory (buffer, strlen (buffer)); - prefs = preferences_read_xml (doc); - - if (prefs && apply_settings) { - preferences_save (prefs); - return; - } - else if (prefs) { - return; - } - } - - g_warning ("Error while reading the ui config file"); return; }