evolution r35614 - trunk/e-util



Author: mcrha
Date: Mon Jun  9 09:36:56 2008
New Revision: 35614
URL: http://svn.gnome.org/viewvc/evolution?rev=35614&view=rev

Log:
2008-06-09  Milan Crha  <mcrha redhat com>

	** Fix for bug #509595

	* e-logger.c: (e_logger_get_logs): Do not crash if file does not
	exists. Also be able to read lines more than 249 characters long.



Modified:
   trunk/e-util/ChangeLog
   trunk/e-util/e-logger.c

Modified: trunk/e-util/e-logger.c
==============================================================================
--- trunk/e-util/e-logger.c	(original)
+++ trunk/e-util/e-logger.c	Mon Jun  9 09:36:56 2008
@@ -240,7 +240,6 @@
 {
 	FILE *fp;
 	gchar buf[250];
-	gboolean error = FALSE;
 
 	g_return_if_fail (E_LOGGER (logger));
 	g_return_if_fail (func != NULL);
@@ -248,17 +247,42 @@
 	/* Flush everything before we get the logs */
 	fflush (logger->priv->fp);	
 	fp = g_fopen (logger->priv->logfile, "r");
-	while (!error || feof(fp)) {
+
+	if (!fp) {
+		fprintf (stderr, "Cannot open log file '%s' for reading! No flush yet?\n", logger->priv->logfile ? logger->priv->logfile : "[null]");
+		return;
+	}
+
+	while (!feof (fp)) {
 		gchar *tmp;
-		tmp = fgets (buf, 250, fp);
+		size_t len;
+
+		tmp = fgets (buf, sizeof (buf), fp);
 		if (!tmp)
 			break;
-#if 0		
-		if (strlen(tmp) == 249) {
-			/* FIXME: There may be more */
-		}
-#endif 		
-		func (tmp, data);
+
+		len = strlen (tmp);
+		if (len > 0 && tmp [len - 1] != '\n' && !feof (fp)) {
+			/* there are more characters on a row than 249, so read them all */
+			GString *str = g_string_sized_new (1024);
+
+			g_string_append (str, tmp);
+
+			while (!feof (fp) && len > 0 && tmp [len - 1] != '\n') {
+				tmp = fgets (buf, sizeof (buf), fp);
+				if (!tmp)
+					break;
+
+				len = strlen (tmp);
+				g_string_append (str, tmp);
+			}
+
+			func (str->str, data);
+
+			g_string_free (str, TRUE);
+		} else
+			func (tmp, data);
 	}
-	fclose(fp);
+
+	fclose (fp);
 }



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