fix
authorMiklos Szeredi <miklos@szeredi.hu>
Sat, 15 Jan 2005 09:42:01 +0000 (09:42 +0000)
committerMiklos Szeredi <miklos@szeredi.hu>
Sat, 15 Jan 2005 09:42:01 +0000 (09:42 +0000)
ChangeLog
util/fusermount.c

index ace122cffc5b6f9d44dbe5460ab568f329a00498..7530e5ef25f786a627f75ed037c4c291801ad1db 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2005-01-13  Miklos Szeredi <miklos@szeredi.hu>
+
+       * fusermount: improve parsing of /etc/fuse.conf
+
 2005-01-13  Miklos Szeredi <miklos@szeredi.hu>
 
        * Remove 'mount_max' and 'user_allow_other' module options.  These
index 9e39dbd019ac0eea09351660b7e10d98f618f0f3..d1568d546ca5172b31a780fed080eb37d5bf581e 100644 (file)
@@ -21,6 +21,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <ctype.h>
 #include <unistd.h>
 #include <errno.h>
 #include <fcntl.h>
@@ -343,24 +344,47 @@ static int unmount_fuse(const char *mnt, int quiet, int lazy)
 }
 #endif /* USE_UCLIBC */    
 
+static void strip_line(char *line)
+{
+    char *s = strchr(line, '#');
+    if (s != NULL)
+        s[0] = '\0';
+    for (s = line + strlen(line) - 1; s >= line && isspace((unsigned char) *s); s--);
+    s[1] = '\0';
+    for (s = line; isspace((unsigned char) *s); s++);
+    if (s != line)
+        memmove(line, s, strlen(s)+1);
+}
+
 static void read_conf(void)
 {
     FILE *fp = fopen(FUSE_CONF, "r");
     if (fp != NULL) {
+        int linenum = 1;
         char line[256];
         int isnewline = 1;
         while (fgets(line, sizeof(line), fp) != NULL) {
             if (isnewline) {
-                int tmp;
-                if (strcmp(line, "user_allow_other\n") == 0)
-                    user_allow_other = 1;
-                else if (sscanf(line, "mount_max = %i\n", &tmp) == 1)
-                    mount_max = tmp;
-            }
-            if(line[strlen(line)-1] == '\n')
-                isnewline = 1;
-            else
-                isnewline = 0;
+                if (line[strlen(line)-1] == '\n') {
+                    int tmp;
+                    strip_line(line);
+                    if (strcmp(line, "user_allow_other") == 0)
+                        user_allow_other = 1;
+                    else if (sscanf(line, "mount_max = %i", &tmp) == 1)
+                        mount_max = tmp;
+                    else if(line[0])
+                        fprintf(stderr, "%s: unknown parameter in %s at line %i: '%s'\n",
+                                progname, FUSE_CONF, linenum, line);
+                } else {
+                    fprintf(stderr, "%s: reading %s: line %i too long\n",
+                            progname, FUSE_CONF, linenum);
+                    isnewline = 0;
+                }
+                
+            } else if(line[strlen(line)-1] == '\n')
+                    isnewline = 1;
+            if (isnewline)
+                linenum ++;
         }
         fclose(fp);
     } else if (errno != ENOENT) {