implement actual handling of mountopts, add utf8 to default mountopts, allow iso automounting in eeze_mount

+EEZE_DISK_MOUNTOPT_UTF8 = (1 << 2)
+EEZE_DISK_MOUNTOPT_NOEXEC = (1 << 3)
+EEZE_DISK_MOUNTOPT_NOSUID = (1 << 4)
+EEZE_DISK_MOUNTOPT_REMOUNT = (1 << 5)
+EAPI Eina_Bool      eeze_disk_mountopts_set(Eeze_Disk *disk, int opts);
+EAPI int            eeze_disk_mountopts_get(Eeze_Disk *disk);



SVN revision: 56879
This commit is contained in:
Mike Blumenkrantz 2011-02-09 21:31:11 +00:00
parent 6067dad09e
commit 178cda4124
5 changed files with 74 additions and 5 deletions

View File

@ -1,3 +1,12 @@
2011-02-09 Mike Blumenkrantz (discomfitor/zmike)
implement actual handling of mountopts, add utf8 to default mountopts, allow iso automounting in eeze_mount
+EEZE_DISK_MOUNTOPT_UTF8 = (1 << 2)
+EEZE_DISK_MOUNTOPT_NOEXEC = (1 << 3)
+EEZE_DISK_MOUNTOPT_NOSUID = (1 << 4)
+EEZE_DISK_MOUNTOPT_REMOUNT = (1 << 5)
+EAPI Eina_Bool eeze_disk_mountopts_set(Eeze_Disk *disk, int opts);
+EAPI int eeze_disk_mountopts_get(Eeze_Disk *disk);
2011-01-29 Mike Blumenkrantz (discomfitor/zmike)
+Eeze_Disk_Type enum
+Eeze_Mount_Opts enum

View File

@ -15,7 +15,7 @@ static const Ecore_Getopt opts =
"LGPL",
"Mount a disk using either its /sys/ path or its /dev/ path\n\n",
1,
{
{
ECORE_GETOPT_VERSION('V', "version"),
ECORE_GETOPT_COPYRIGHT('R', "copyright"),
ECORE_GETOPT_LICENSE('L', "license"),
@ -101,7 +101,11 @@ main(int argc, char *argv[])
exit(1);
}
if (argc > 2)
eeze_disk_mount_point_set(disk, mount_point);
{
eeze_disk_mount_point_set(disk, mount_point);
if (eina_str_has_extension(dev, "iso"))
eeze_disk_mountopts_set(disk, EEZE_DISK_MOUNTOPT_LOOP | EEZE_DISK_MOUNTOPT_NOEXEC | EEZE_DISK_MOUNTOPT_NOSUID);
}
ecore_event_handler_add(EEZE_EVENT_DISK_MOUNT, (Ecore_Event_Handler_Cb)_mount_cb, NULL);
ecore_event_handler_add(EEZE_EVENT_DISK_ERROR, (Ecore_Event_Handler_Cb)_error_cb, NULL);
if (!eeze_disk_mount(disk))

View File

@ -44,7 +44,11 @@ typedef enum
typedef enum
{
EEZE_DISK_MOUNTOPT_DEFAULTS = 0xf0,
EEZE_DISK_MOUNTOPT_LOOP = (1 << 1)
EEZE_DISK_MOUNTOPT_LOOP = (1 << 1),
EEZE_DISK_MOUNTOPT_UTF8 = (1 << 2),
EEZE_DISK_MOUNTOPT_NOEXEC = (1 << 3),
EEZE_DISK_MOUNTOPT_NOSUID = (1 << 4),
EEZE_DISK_MOUNTOPT_REMOUNT = (1 << 5)
} Eeze_Mount_Opts;
EAPI extern int EEZE_EVENT_DISK_MOUNT;
@ -102,6 +106,8 @@ EAPI Eina_Bool eeze_disk_mount(Eeze_Disk *disk);
EAPI Eina_Bool eeze_disk_unmount(Eeze_Disk *disk);
EAPI const char *eeze_disk_mount_point_get(Eeze_Disk *disk);
EAPI Eina_Bool eeze_disk_mount_point_set(Eeze_Disk *disk, const char *mount_point);
EAPI Eina_Bool eeze_disk_mountopts_set(Eeze_Disk *disk, int opts);
EAPI int eeze_disk_mountopts_get(Eeze_Disk *disk);
EAPI Eina_Bool eeze_mount_tabs_watch(void);
EAPI void eeze_mount_tabs_unwatch(void);

View File

@ -9,7 +9,7 @@
#include "eeze_udev_private.h"
#include "eeze_disk_private.h"
#define EEZE_MOUNT_DEFAULT_OPTS "noexec,nosuid"
#define EEZE_MOUNT_DEFAULT_OPTS "noexec,nosuid,utf8"
/**
* @addtogroup disk Disk
@ -167,6 +167,38 @@ eeze_disk_mounted_get(Eeze_Disk *disk)
return eeze_disk_libmount_mounted_get(disk);
}
/**
* @brief Set the mount options using flags
* @param disk The disk
* @param opts An ORed set of #Eeze_Mount_Opts
* @return EINA_TRUE on success, else EINA_FALSE
*
* This function replaces the current mount opts of a disk with the ones in @p opts.
*/
EAPI Eina_Bool
eeze_disk_mountopts_set(Eeze_Disk *disk, int opts)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(disk, EINA_FALSE);
if (opts != disk->mount_opts)
disk->mount_cmd_changed = EINA_TRUE;
disk->mount_opts = opts;
return EINA_TRUE;
}
/**
* @brief Get the flags of a disk's current mount options
* @param disk The disk
* @return An ORed set of #Eeze_Mount_Opts, -1 on failure
*
* This function returns the current mount opts of a disk.
*/
EAPI int
eeze_disk_mountopts_get(Eeze_Disk *disk)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(disk, -1);
return disk->mount_opts;
}
/**
* @brief Begin a mount operation on the disk
* @param disk The disk
@ -230,7 +262,24 @@ eeze_disk_mount(Eeze_Disk *disk)
}
if ((!disk->mount_point) || (!disk->mount_point[0])) return EINA_FALSE;
eina_strbuf_append_printf(disk->mount_cmd, "%s -o %s UUID=%s %s", EEZE_MOUNT_BIN, EEZE_MOUNT_DEFAULT_OPTS, disk->cache.uuid, disk->mount_point);
if ((!disk->mount_opts) || (disk->mount_opts = 0xf0))
eina_strbuf_append_printf(disk->mount_cmd, "%s -o %s UUID=%s %s", EEZE_MOUNT_BIN, EEZE_MOUNT_DEFAULT_OPTS, disk->cache.uuid, disk->mount_point);
else
{
eina_strbuf_append_printf(disk->mount_cmd, "%s -o ", EEZE_MOUNT_BIN);
/* trailing commas are okay */
if (disk->mount_opts & EEZE_DISK_MOUNTOPT_LOOP)
eina_strbuf_append(disk->mount_cmd, "loop,");
if (disk->mount_opts & EEZE_DISK_MOUNTOPT_UTF8)
eina_strbuf_append(disk->mount_cmd, "utf8,");
if (disk->mount_opts & EEZE_DISK_MOUNTOPT_NOEXEC)
eina_strbuf_append(disk->mount_cmd, "noexec,");
if (disk->mount_opts & EEZE_DISK_MOUNTOPT_NOSUID)
eina_strbuf_append(disk->mount_cmd, "nosuid,");
if (disk->mount_opts & EEZE_DISK_MOUNTOPT_REMOUNT)
eina_strbuf_append(disk->mount_cmd, "remount,");
eina_strbuf_append_printf(disk->mount_cmd, " UUID=%s %s", disk->cache.uuid, disk->mount_point);
}
disk->mount_cmd_changed = EINA_FALSE;
}

View File

@ -48,6 +48,7 @@ struct _Eeze_Disk
const char *devpath;
const char *fstype;
const char *mount_point;
int mount_opts;
struct
{