diff --git a/libpixelflinger/scanline.cpp b/libpixelflinger/scanline.cpp
index 75b668d..f700306 100644
--- a/libpixelflinger/scanline.cpp
+++ b/libpixelflinger/scanline.cpp
@@ -1256,7 +1256,7 @@
 void scanline_t32cb16(context_t* c)
 {
     int32_t x = c->iterators.xl;
-    size_t ct = c->iterators.xr - x;
+    size_t ct = c->iterators.xr - x;    
     int32_t y = c->iterators.y;
     surface_t* cb = &(c->state.buffers.color);
     union {
@@ -1282,7 +1282,7 @@
         ct--;
     }
 
-    while (ct > 0) {
+    while (ct >= 2) {
         s = GGL_RGBA_TO_HOST( *src++ );
         sR = (s >> (   3))&0x1F;
         sG = (s >> ( 8+2))&0x3F;
diff --git a/logcat/event-log-tags b/logcat/event-log-tags
index fb42bfe..d2eff60 100644
--- a/logcat/event-log-tags
+++ b/logcat/event-log-tags
@@ -341,3 +341,6 @@
 # 0 for screen off, 1 for screen on, 2 for key-guard done
 70000 screen_toggled (screen_state|1|5)
 
+# browser stats for diary study
+70101 browser_zoom_level_change (start level|1|5),(end level|1|5),(time|2|3)
+70102 browser_double_tap_duration (duration|1|3),(time|2|3)
\ No newline at end of file
diff --git a/vold/misc.c b/vold/misc.c
index b8e5957..951414c 100644
--- a/vold/misc.c
+++ b/vold/misc.c
@@ -49,11 +49,8 @@
 
 	/* slurp it into our buffer */
 	ret = read(fd, buffer, size);
-	if (ret != size) {
-	        free(buffer);
-	        buffer = NULL;
+	if (ret != size)
 		goto bail;
-        }
 
 	/* let the caller know how big it is */
 	*_size = size;
@@ -62,90 +59,33 @@
 	close(fd);
 	return buffer;
 }
-
-char *truncate_sysfs_path(char *path, int count, char *buffer, size_t bufflen)
+char *truncate_sysfs_path(char *path, int num_elements_to_remove, char *buffer)
 {
-    char*  p;
+    int i;
 
-    strlcpy(buffer, path, bufflen);
-    p = buffer + strlen(buffer);
+    strcpy(buffer, path);
 
-    for ( ; count > 0; count-- ) {
-        while (p > buffer && p[-1] != '/') {
-            p--; 
-        }
-        if (p == buffer)
-            break;
+    for (i = 0; i < num_elements_to_remove; i++) {
+        char *p = &buffer[strlen(buffer)-1];
 
-        p -= 1;
+        for (p = &buffer[strlen(buffer) -1]; *p != '/'; p--);
+        *p = '\0';
     }
-    p[0] = '\0';
 
     return buffer;
 }
 
-/* used to read the first line of a /sys file into a heap-allocated buffer
- * this assumes that reading the file returns a list of zero-terminated strings,
- * each could also have a terminating \n before the 0
- *
- * returns NULL on error, of a new string on success, which must be freed by the
- * caller.
- */
-char *read_first_line_of(const char*  filepath)
-{
-    char *p, *q, *line;
-    size_t  len;
-    ssize_t sz;
-
-    p = read_file((char*)filepath, &sz);
-    if (p == NULL)
-        goto FAIL;
-
-    /* search end of first line */
-    q = memchr(p, sz, '\0');
-    if (q == NULL)
-        q = p + sz;  /* let's be flexible */
-
-    len = (size_t)(q - p); /* compute line length */
-    if (len == 0)
-        goto FAIL;
-
-    if (p[len-1] == '\n') { /* strip trailing \n */
-        len -= 1;
-        if (len == 0)
-            goto FAIL;
-    }
-
-    line = malloc(len+1);
-    if (line == NULL)
-        goto FAIL;
-
-    memcpy(line, p, len);
-    line[len] = 0;
-    free(p);
-
-    return line;
-
-FAIL:
-    if (p != NULL)
-        free(p);
-
-    return NULL;
-}
-
 char *read_sysfs_var(char *buffer, size_t maxlen, char *devpath, char *var)
 {
-    char filename[255], *line;
+    char filename[255];
+    char *p;
+    ssize_t sz;
 
-    snprintf(filename, sizeof filename, "/sys%s/%s", devpath, var);
-
-    line = read_first_line_of(filename);
-    if (line == NULL)
-        return NULL;
-
-    snprintf(buffer, maxlen, "%s", line);
-    free(line);
-
+    sprintf(filename, "/sys%s/%s", devpath, var);
+    p = read_file(filename, &sz);
+    p[(strlen(p) - 1)] = '\0';
+    strncpy(buffer, p, maxlen);
+    free(p);
     return buffer;
 }
 
