mount: improve handling mounts table size
[oweals/mountd.git] / mount.c
diff --git a/mount.c b/mount.c
index 803acc1fa8c7b644da82fb4d1bdf3573d59cf9f1..9cb1a43ce3d5173d3b2fec9de5a8d92ded42095f 100644 (file)
--- a/mount.c
+++ b/mount.c
@@ -292,8 +292,10 @@ int mount_new(char *path, char *dev)
        pid = waitpid(pid, &ret, 0);
        ret = WEXITSTATUS(ret);
        log_printf("----------> mount ret = %d\n", ret);
        pid = waitpid(pid, &ret, 0);
        ret = WEXITSTATUS(ret);
        log_printf("----------> mount ret = %d\n", ret);
-       if(ret && (ret != 0xff))
+       if (ret && ret != 0xff) {
+               rmdir(tmp);
                return -1;
                return -1;
+       }
        if(mount_wait_for_disc(mount->dev) == 0)
        {
                mount->mounted = 1;
        if(mount_wait_for_disc(mount->dev) == 0)
        {
                mount->mounted = 1;
@@ -624,6 +626,12 @@ static void mount_check_mount_list(void)
        while(fgets(tmp, 256, fp) != NULL)
        {
                char *t, *t2;
        while(fgets(tmp, 256, fp) != NULL)
        {
                char *t, *t2;
+
+               if (mounted_count + 1 > MAX_MOUNTED) {
+                       log_printf("found more than %d mounts \n", MAX_MOUNTED);
+                       break;
+               }
+
                t = strstr(tmp, " ");
                if(t)
                {
                t = strstr(tmp, " ");
                if(t)
                {
@@ -649,10 +657,8 @@ static void mount_check_mount_list(void)
                        mounted[mounted_count][0],
                        mounted[mounted_count][1],
                        mounted[mounted_count][2]);*/
                        mounted[mounted_count][0],
                        mounted[mounted_count][1],
                        mounted[mounted_count][2]);*/
-               if(mounted_count < MAX_MOUNTED - 1)
-                       mounted_count++;
-               else
-                       log_printf("found more than %d mounts \n", MAX_MOUNTED);
+
+               mounted_count++;
        }
        fclose(fp);
 }
        }
        fclose(fp);
 }
@@ -747,11 +753,13 @@ static void mount_enum_drives(void)
                        p->next->prev = p->prev;
                        p = p->next;
                        log_printf("removing %s\n", q->dev);
                        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);
+                       if (q->mounted) {
+                               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);
+                       }
                        free(q);
                        mount_dump_uci_state();
                        system_printf("/etc/fonstated/ReloadSamba");
                        free(q);
                        mount_dump_uci_state();
                        system_printf("/etc/fonstated/ReloadSamba");