mount: drop duplicated filesystem check from mount_add_list
[oweals/mountd.git] / mount.c
diff --git a/mount.c b/mount.c
index 0c2862a06f081e1323bff3e18063772526afb1b8..6d95de95d1d05aff2dc575e0a5f6d6077a0fcad1 100644 (file)
--- a/mount.c
+++ b/mount.c
@@ -31,7 +31,7 @@
 
 int mount_new(char *path, char *dev);
 
-struct list_head mounts;
+static struct list_head mounts;
 
 struct mount {
        struct list_head list;
@@ -48,7 +48,7 @@ struct mount {
        int fs;
 };
 
-char *fs_names[] = {
+static char *fs_names[] = {
        "",
        "",
        "mbr",
@@ -67,8 +67,8 @@ char *fs_names[] = {
 #define MAX_MOUNTED            32
 #define MAX_MOUNT_NAME 32
 
-char mounted[MAX_MOUNTED][3][MAX_MOUNT_NAME];
-int mounted_count = 0;
+static char mounted[MAX_MOUNTED][3][MAX_MOUNT_NAME];
+static int mounted_count = 0;
 extern char uci_path[32];
 
 static void mount_dump_uci_state(void)
@@ -155,7 +155,7 @@ static void mount_add_list(char *name, char *dev, char *serial,
        mount->mounted = 0;
        mount->fs = fs;
        list_add(&mount->list, &mounts);
-       if((!mount->ignore) && (mount->fs > MBR) && (mount->fs <= LASTFS))
+       if (!mount->ignore)
        {
                log_printf("new mount : %s -> %s (%s)\n", name, dev, fs_names[mount->fs]);
                snprintf(tmp, 64, "%s%s", uci_path, name);
@@ -174,10 +174,9 @@ static int mount_check_disc(char *disc)
        if(!fp)
        {
                log_printf("error reading /proc/mounts");
-               fclose(fp);
                return avail;
        }
-       while((fgets(tmp, 256, fp) > 0) && (avail == -1))
+       while((fgets(tmp, 256, fp) != NULL) && (avail == -1))
        {
                char *t;
                char tmp2[32];
@@ -389,7 +388,7 @@ static char* mount_get_serial(char *dev)
                                                fp = fopen(tmp2, "r");
                                                if(fp)
                                                {
-                                                       while(fgets(tmp2, 64, fp) > 0)
+                                                       while(fgets(tmp2, 64, fp) != NULL)
                                                        {
                                                                serial = strstr(tmp2, "Serial Number:");
                                                                if(serial)
@@ -615,11 +614,10 @@ static void mount_check_mount_list(void)
        if(!fp)
        {
                log_printf("error reading /proc/mounts");
-               fclose(fp);
                return;
        }
        mounted_count = 0;
-       while(fgets(tmp, 256, fp) > 0)
+       while(fgets(tmp, 256, fp) != NULL)
        {
                char *t, *t2;
                t = strstr(tmp, " ");
@@ -663,8 +661,8 @@ static int dir_filter2(const struct dirent *a)
        return 0;
 }
 #define MAX_BLOCK      64
-char block[MAX_BLOCK][MAX_BLOCK];
-int blk_cnt = 0;
+static char block[MAX_BLOCK][MAX_BLOCK];
+static int blk_cnt = 0;
 
 static int check_block(char *b)
 {
@@ -693,13 +691,19 @@ static void mount_enum_drives(void)
                                char tmp[64];
                                snprintf(tmp, 64, "/sys/block/%s/", namelist[n]->d_name);
                                m = scandir(tmp, &namelist2, dir_filter2, dir_sort);
-                               while(m--)
+                               if(m > 0)
                                {
-                                       strncpy(&block[blk_cnt][0], namelist2[m]->d_name, MAX_BLOCK);
+                                       while(m--)
+                                       {
+                                               strncpy(&block[blk_cnt][0], namelist2[m]->d_name, MAX_BLOCK);
+                                               blk_cnt++;
+                                               free(namelist2[m]);
+                                       }
+                                       free(namelist2);
+                               } else {
+                                       strncpy(&block[blk_cnt][0], namelist[n]->d_name, MAX_BLOCK);
                                        blk_cnt++;
-                                       free(namelist2[m]);
                                }
-                               free(namelist2);
                        }
                        free(namelist[n]);
                }
@@ -739,6 +743,8 @@ static void mount_enum_drives(void)
                        p->next->prev = p->prev;
                        p = p->next;
                        log_printf("removing %s\n", q->dev);
+                       snprintf(tmp, 64, "%s%s", "/tmp/run/mountd/", q->dev);
+                       rmdir(tmp);
                        snprintf(tmp, 64, "%s%s", uci_path, q->name);
                        unlink(tmp);
                        system_printf("ACTION=remove DEVICE=%s NAME=%s /sbin/hotplug-call mount", q->dev, q->name);