forked from enlightenment/efl
revert part of 74545 and change fopen to open; somehow this broke reading
SVN revision: 74557
This commit is contained in:
parent
10e1c670dd
commit
244e5f7919
|
@ -6,12 +6,15 @@
|
||||||
# define USE_UNSTABLE_LIBMOUNT_API 1
|
# define USE_UNSTABLE_LIBMOUNT_API 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
#include <Ecore.h>
|
#include <Ecore.h>
|
||||||
#include <Eeze.h>
|
#include <Eeze.h>
|
||||||
#include <Eeze_Disk.h>
|
#include <Eeze_Disk.h>
|
||||||
#include <libmount.h>
|
#include <libmount.h>
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include "eeze_udev_private.h"
|
#include "eeze_udev_private.h"
|
||||||
#include "eeze_disk_private.h"
|
#include "eeze_disk_private.h"
|
||||||
|
|
||||||
|
@ -44,7 +47,7 @@ static libmnt_table *_eeze_mount_fstab = NULL;
|
||||||
extern Eina_List *_eeze_disks;
|
extern Eina_List *_eeze_disks;
|
||||||
|
|
||||||
static Ecore_Fd_Handler *_mountinfo_fdh = NULL;
|
static Ecore_Fd_Handler *_mountinfo_fdh = NULL;
|
||||||
static FILE *_mountinfo = NULL;
|
static int _mountinfo = -1;
|
||||||
|
|
||||||
static libmnt_table *_eeze_mount_tab_parse(const char *filename);
|
static libmnt_table *_eeze_mount_tab_parse(const char *filename);
|
||||||
static void _eeze_mount_tab_watcher(void *data, Ecore_File_Monitor *mon __UNUSED__, Ecore_File_Event event __UNUSED__, const char *path);
|
static void _eeze_mount_tab_watcher(void *data, Ecore_File_Monitor *mon __UNUSED__, Ecore_File_Event event __UNUSED__, const char *path);
|
||||||
|
@ -136,8 +139,7 @@ _eeze_mount_fdh(void *d __UNUSED__, Ecore_Fd_Handler *fdh __UNUSED__)
|
||||||
EINA_SAFETY_ON_NULL_GOTO(itr, err);
|
EINA_SAFETY_ON_NULL_GOTO(itr, err);
|
||||||
diff = mnt_new_tabdiff();
|
diff = mnt_new_tabdiff();
|
||||||
EINA_SAFETY_ON_NULL_GOTO(diff, err);
|
EINA_SAFETY_ON_NULL_GOTO(diff, err);
|
||||||
rewind(_mountinfo);
|
if (mnt_table_parse_file(tb_new, "/proc/self/mountinfo"))
|
||||||
if (mnt_table_parse_stream(tb_new, _mountinfo, "/proc/self/mountinfo"))
|
|
||||||
{
|
{
|
||||||
ERR("PARSING FAILED FOR /proc/self/mountinfo! THIS IS WEIRD!");
|
ERR("PARSING FAILED FOR /proc/self/mountinfo! THIS IS WEIRD!");
|
||||||
goto err;
|
goto err;
|
||||||
|
@ -408,7 +410,6 @@ EAPI Eina_Bool
|
||||||
eeze_mount_tabs_watch(void)
|
eeze_mount_tabs_watch(void)
|
||||||
{
|
{
|
||||||
libmnt_table *bak;
|
libmnt_table *bak;
|
||||||
char *lnk;
|
|
||||||
|
|
||||||
if (_watching)
|
if (_watching)
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
|
@ -418,7 +419,7 @@ eeze_mount_tabs_watch(void)
|
||||||
|
|
||||||
mnt_free_table(_eeze_mount_mtab);
|
mnt_free_table(_eeze_mount_mtab);
|
||||||
_eeze_mount_mtab = bak;
|
_eeze_mount_mtab = bak;
|
||||||
bak = _eeze_mount_tab_parse("/etc/mtab");
|
bak = _eeze_mount_tab_parse("/etc/fstab");
|
||||||
EINA_SAFETY_ON_NULL_GOTO(bak, error);
|
EINA_SAFETY_ON_NULL_GOTO(bak, error);
|
||||||
|
|
||||||
mnt_free_table(_eeze_mount_fstab);
|
mnt_free_table(_eeze_mount_fstab);
|
||||||
|
@ -430,20 +431,18 @@ eeze_mount_tabs_watch(void)
|
||||||
_eeze_mount_fstab_cache = mnt_new_cache();
|
_eeze_mount_fstab_cache = mnt_new_cache();
|
||||||
mnt_table_set_cache(_eeze_mount_fstab, _eeze_mount_fstab_cache);
|
mnt_table_set_cache(_eeze_mount_fstab, _eeze_mount_fstab_cache);
|
||||||
|
|
||||||
_mountinfo = fopen("/proc/self/mountinfo", "r");
|
_mountinfo = open("/proc/self/mountinfo", O_RDONLY, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
|
||||||
if (!_mountinfo) goto error;
|
if (_mountinfo < 0) goto error;
|
||||||
_mountinfo_fdh = ecore_main_fd_handler_add(fileno(_mountinfo), ECORE_FD_ERROR, _eeze_mount_fdh, NULL, NULL, NULL);
|
_mountinfo_fdh = ecore_main_fd_handler_add(_mountinfo, ECORE_FD_ERROR, _eeze_mount_fdh, NULL, NULL, NULL);
|
||||||
if (!_mountinfo_fdh) goto error;
|
if (!_mountinfo_fdh) goto error;
|
||||||
_fstab_mon = ecore_file_monitor_add("/etc/mtab", _eeze_mount_tab_watcher, NULL);
|
_fstab_mon = ecore_file_monitor_add("/etc/fstab", _eeze_mount_tab_watcher, NULL);
|
||||||
lnk = ecore_file_readlink("/etc/mtab");
|
_watching = EINA_TRUE;
|
||||||
if (lnk) free(lnk);
|
|
||||||
else _watching = EINA_TRUE;
|
|
||||||
|
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
if (_mountinfo) fclose(_mountinfo);
|
if (_mountinfo >= 0) close(_mountinfo);
|
||||||
_mountinfo = NULL;
|
_mountinfo = -1;
|
||||||
if (!_eeze_mount_mtab)
|
if (!_eeze_mount_mtab)
|
||||||
ERR("Could not parse /proc/self/mountinfo!");
|
ERR("Could not parse /proc/self/mountinfo!");
|
||||||
else
|
else
|
||||||
|
@ -461,8 +460,10 @@ eeze_mount_tabs_unwatch(void)
|
||||||
if (!_watching)
|
if (!_watching)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_mountinfo_fdh = ecore_main_fd_handler_del(_mountinfo_fdh);
|
ecore_main_fd_handler_del(_mountinfo_fdh);
|
||||||
ecore_file_monitor_del(_fstab_mon);
|
ecore_file_monitor_del(_fstab_mon);
|
||||||
|
close(_mountinfo);
|
||||||
|
_mountinfo = -1;
|
||||||
_fstab_mon = NULL;
|
_fstab_mon = NULL;
|
||||||
_watching = EINA_FALSE;
|
_watching = EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue