int mount_new(char *path, char *dev);
-struct list_head mounts;
+static struct list_head mounts;
struct mount {
struct list_head list;
int fs;
};
-char *fs_names[] = {
+static char *fs_names[] = {
"",
"",
"mbr",
"ntfs",
"",
"exfat",
- "ext4"
+ "ext4",
+ "hfsplusjournal"
};
#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)
ucix_add_option(ctx, mountd, q->serial, "rev", q->rev);
snprintf(t, 64, "size%d", atoi(&q->dev[3]));
ucix_add_option(ctx, mountd, q->serial, t, q->size);
- if(q->fs > MBR && q->fs <= EXT4)
+ if(q->fs > MBR && q->fs <= LASTFS)
{
snprintf(t, 64, "fs%d", atoi(&q->dev[3]));
ucix_add_option(ctx, mountd, q->serial, t, fs_names[q->fs]);
{
struct mount *mount;
char tmp[64], tmp2[64];
- if(fs <= MBR || fs > EXT4)
+ if(fs <= MBR || fs > LASTFS)
return;
mount = malloc(sizeof(struct mount));
INIT_LIST_HEAD(&mount->list);
mount->mounted = 0;
mount->fs = fs;
list_add(&mount->list, &mounts);
- if((!mount->ignore) && (mount->fs > MBR) && (mount->fs <= EXT4))
+ if((!mount->ignore) && (mount->fs > MBR) && (mount->fs <= LASTFS))
{
log_printf("new mount : %s -> %s (%s)\n", name, dev, fs_names[mount->fs]);
snprintf(tmp, 64, "%s%s", uci_path, name);
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];
options = "rw,defaults,uid=1000,gid=1000";
fstype = "hfsplus";
}
+ if(mount->fs == HFSPLUSJOURNAL)
+ {
+ options = "ro,defaults,uid=1000,gid=1000";
+ fstype = "hfsplus";
+ }
if(mount->fs == NTFS)
{
options = "force";
fstype = "ntfs-3g";
}
- if(mount->fs > MBR && mount->fs <= EXT4)
+ if(mount->fs > MBR && mount->fs <= LASTFS)
{
struct uci_context *ctx;
char *uci_options, *uci_fstype;
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)
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, " ");
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)
{
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]);
}
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);