Franky,

The following patch fixes lk_mountSearch_discover when /proc/mounts is
larger than 1024 bytes.  Please apply.

diff -r 550d970756a8 src/mountSearch.c
--- a/src/mountSearch.c Sun Oct 01 21:55:02 2006 -0400
+++ b/src/mountSearch.c Wed Oct 18 22:49:53 2006 -0400
@@ -25,22 +25,44 @@ int fd, ret;
 int fd, ret;
 char *ini, *fin;
 
+static char *read_whole_file(char *filename)
+{
+    int len = BUFSIZ;
+    char *ptr = NULL;
+    FILE *fp = fopen(filename, "rb");
+    int size;
+
+    if (!fp)
+        goto err;
+
+    ptr = malloc(len);
+    if (!ptr)
+        goto err;
+
+    while ((size = fread(ptr + len - BUFSIZ, 1, BUFSIZ, fp)) == BUFSIZ) {
+        ptr = realloc(ptr, len + BUFSIZ);
+        if (!ptr)
+            goto err;
+
+        len += BUFSIZ;
+    }
+    *(ptr + len - BUFSIZ + size) = 0;
+    fclose(fp);
+err:
+    return ptr;
+}
+
 int lk_mountSearch_discover(char **device, char **mountPoint)
 {
-    char buf[1024], *dev, *mountp, *aux;
+    char *buf, *dev, *mountp, *aux;
     int len, pos, kfd, found=0;
 
-    fd = open(PROC_MOUNTS, O_RDONLY);
-    if(fd == -1) {
+    buf = read_whole_file(PROC_MOUNTS);
+    if (!buf)
+    {
         lk_errors_set(E_MFINDERR);
         return -1;
     }
-    ret = read(fd, buf, 1024);
-    if(ret == -1) {
-        lk_errors_set(E_MFINDERR);
-        return -1;
-    }
-    buf[ret] = '\0';
 /* fprintf(stderr, "%s\n\n", buf); */
 
     ini = buf;
@@ -50,7 +72,7 @@ int lk_mountSearch_discover(char **devic
             *fin = '\0';
 /*          fprintf(stderr, "%s\n", ini); */
             if(strstr(ini, "omfs")) {
-               dev = ini;
+                dev = ini;
                 aux = strstr(dev, " ");
                 *aux = '\0';
                 ini = aux + 1;
@@ -60,6 +82,7 @@ int lk_mountSearch_discover(char **devic
                     if(((*device     = strdup(dev))    == NULL) ||
                        ((*mountPoint = strdup(mountp)) == NULL)) {
                         lk_errors_set(E_NOMOUNT);
+                        free(buf);
                         return -1;
                     }
 /*                  fprintf(stderr, "%s %s\n", *device, *mountPoint); */
@@ -69,6 +92,7 @@ int lk_mountSearch_discover(char **devic
                         free(*device);
                         *mountPoint=NULL;
                         lk_errors_set(E_NOMOUNT);
+                        free(buf);
                         return -1;
                     }
                     found++;
@@ -77,6 +101,8 @@ int lk_mountSearch_discover(char **devic
         }
         ini = fin + 1;
     }
+    free(buf);
+
     if(found != 1) {
         lk_errors_set((found==0)?E_NOMOUNT:E_MANYMOUNT);
         return -found-1;
-- 
Bob Copeland %% www.bobcopeland.com 

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
linux-karma-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-karma-devel

Reply via email to