File dmesg_adjust.patch of Package firmwarekit

---
 dmesg.c         |   74 ++++++++++++++++++++++++++++++--------------------------
 libstandalone.c |    9 +++++-
 2 files changed, 47 insertions(+), 36 deletions(-)

Index: firmwarekit/dmesg.c
===================================================================
--- firmwarekit.orig/dmesg.c
+++ firmwarekit/dmesg.c
@@ -44,17 +44,37 @@ void get_dmesg_buffer(void)
 {
 	char *dmesg;
 	char *c1, *c2;
-	int linecount = 0;
+	int linecount = 0, ret;
 	dmesg = malloc(DMESG_SIZE);
 	assert(dmesg!=NULL);
+	c1 = malloc(4096);
+	assert(dmesg!=NULL && c1!=NULL);
 
 	system("/bin/dmesg -s 256000 > "DMESG_FILE);
+	FILE *f_dmesg;
 
 	/* don't printk to the console; newt hates that */
 	klogctl (6, NULL, 0);
 
+	if (access(DMESG_FILE, R_OK)){
+		system("/bin/dmesg -s 256000 > "DMESG_FILE);
+	}
 	memset(dmesg, 0, DMESG_SIZE);
-	klogctl (4, dmesg, DMESG_SIZE);
+	memset(c1, 0, 4096);
+
+	/* Clear ring buffer, we only want to get up to date messages
+	   in further calls... */
+	klogctl (5, NULL, 0);
+
+	f_dmesg = fopen (DMESG_FILE, "r");
+	if (f_dmesg == NULL){
+		fprintf (stderr, "WARN: Could not open "DMESG_FILE);
+		free(dmesg);
+		free(c1);
+		return;
+	}
+	ret = fread(dmesg, 1, DMESG_SIZE-1, f_dmesg);
+	dmesg[ret]='\0';
 
 	/* Add to our resource list that we keep. The user
 	 * will have access to this when they look at the 
@@ -62,32 +82,22 @@ void get_dmesg_buffer(void)
 	 * see uri.c for implementation */
 	announce_resource("dmesg://", dmesg, NULL);
 
-	c1 = dmesg;
-	while (c1) {
-		/* get next line from dmesg before '\n' 
-		 * and put into 'c1' */
-		c2 = strchr(c1, '\n');
-		
-		/* break if we're at the end of dmesg */
-		if (c2==NULL)
-			break;
-		
-		/* take out extra \n from beginning */
-		*c2 = 0;
-		c2++;
-		
-		/* skip the <4> that is in front of each line */
-		if (strlen(c1)>3 && c1[0]=='<')
-			c1+=3;
-
-		/* now append the cleaned-up line to boot_dmesg */
-		boot_dmesg = g_list_append(boot_dmesg, strdup(c1));
-		linecount ++;
-		
-		/* put what's left of dmesg back into c1 */
-		c1 = c2;
+	rewind(f_dmesg);
+	while (fgets(c1, 4095, f_dmesg)) {
+		/* skip the <4> that is in front of each line
+		   We only need lines with <4>, rest is later appended stuff in
+		   ordinary booted system
+		*/
+		c2=c1;
+		if (strlen(c1)>3 && c1[0]=='<' && c1[2]=='>'){
+			c2+=3;
+			boot_dmesg = g_list_append(boot_dmesg, strdup(c2));
+			linecount ++;
+		}
 	}
 	
+	fclose(f_dmesg);
+	free(c1);
 	free(dmesg);
 
 }