X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fmountd.git;a=blobdiff_plain;f=mount.c;h=db77f10266fdd28a70b576b5d0dc5583e5a58046;hp=7cbb8fff365907a47b8b560f0d92f176c1611284;hb=c54e5c6e09bf8e8debea05dd0dac095624a2472b;hpb=582d4d41f1e4ccd327143a3f2f89b5124d3cd8ba diff --git a/mount.c b/mount.c index 7cbb8ff..db77f10 100644 --- 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) @@ -139,8 +139,7 @@ static void mount_add_list(char *name, char *dev, char *serial, { struct mount *mount; char tmp[64], tmp2[64]; - if(fs <= MBR || fs > LASTFS) - return; + mount = malloc(sizeof(struct mount)); INIT_LIST_HEAD(&mount->list); strncpy(mount->vendor, vendor, 64); @@ -155,14 +154,14 @@ 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); snprintf(tmp2, 64, "/tmp/run/mountd/%s", dev); symlink(tmp2, tmp); - mount_new("/tmp/run/mountd/", dev); - system_printf("ACTION=add DEVICE=%s NAME=%s /sbin/hotplug-call mount", dev, name); + if (!mount_new("/tmp/run/mountd/", dev)) + system_printf("ACTION=add DEVICE=%s NAME=%s /sbin/hotplug-call mount", dev, name); } } @@ -174,10 +173,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]; @@ -294,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); - if(ret && (ret != 0xff)) + if (ret && ret != 0xff) { + rmdir(tmp); return -1; + } if(mount_wait_for_disc(mount->dev) == 0) { mount->mounted = 1; @@ -389,7 +389,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) @@ -452,6 +452,7 @@ static void mount_dev_add(char *dev) char sector_size[64]; FILE *fp; int offset = 3; + int fs; strcpy(name, dev); if (!strncmp(name, "mmcblk", 6)) @@ -557,7 +558,11 @@ static void mount_dev_add(char *dev) fclose(fp); } snprintf(tmp, 64, "/dev/%s", dev); - mount_add_list(node, dev, s, vendor, model, rev, ignore, size, sector_size, detect_fs(tmp)); + fs = detect_fs(tmp); + if (fs <= MBR || fs > LASTFS) { + ignore = 1; + } + mount_add_list(node, dev, s, vendor, model, rev, ignore, size, sector_size, fs); mount_dump_uci_state(); } } @@ -615,11 +620,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 +667,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) { @@ -745,9 +749,13 @@ 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", 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");