Also list unmounted volumes (where supported)
This is currently hardcoded for NetBSD, but should also work on other BSD systems at least.
This commit is contained in:
parent
b751323c86
commit
9adc407db1
|
@ -50,6 +50,7 @@
|
||||||
# include <sys/param.h>
|
# include <sys/param.h>
|
||||||
# include <sys/types.h>
|
# include <sys/types.h>
|
||||||
# include <sys/statvfs.h>
|
# include <sys/statvfs.h>
|
||||||
|
# include <fstab.h>
|
||||||
#endif
|
#endif
|
||||||
#include "Browser.h"
|
#include "Browser.h"
|
||||||
#include "../../config.h"
|
#include "../../config.h"
|
||||||
|
@ -303,7 +304,8 @@ static GdkPixbuf * _list_get_icon_removable(Volumes * volumes, VolumesPixbuf dp,
|
||||||
char const * mountpoint);
|
char const * mountpoint);
|
||||||
static void _list_get_iter(Volumes * volumes, GtkTreeIter * iter,
|
static void _list_get_iter(Volumes * volumes, GtkTreeIter * iter,
|
||||||
char const * mountpoint);
|
char const * mountpoint);
|
||||||
static void _list_loop_mounted(Volumes * volumes);
|
static void _list_loop_mounted(Volumes * volumes, int reset);
|
||||||
|
static int _list_loop_unmounted(Volumes * volumes);
|
||||||
static void _list_purge(Volumes * volumes);
|
static void _list_purge(Volumes * volumes);
|
||||||
static void _list_reset(Volumes * volumes);
|
static void _list_reset(Volumes * volumes);
|
||||||
|
|
||||||
|
@ -312,7 +314,8 @@ static void _volumes_list(Volumes * volumes)
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "DEBUG: %s()\n", __func__);
|
fprintf(stderr, "DEBUG: %s()\n", __func__);
|
||||||
#endif
|
#endif
|
||||||
_list_loop_mounted(volumes);
|
_list_loop_mounted(volumes,
|
||||||
|
_list_loop_unmounted(volumes));
|
||||||
_list_purge(volumes);
|
_list_purge(volumes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -531,7 +534,7 @@ static void _list_get_iter(Volumes * volumes, GtkTreeIter * iter,
|
||||||
gtk_list_store_append(volumes->store, iter);
|
gtk_list_store_append(volumes->store, iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _list_loop_mounted(Volumes * volumes)
|
static void _list_loop_mounted(Volumes * volumes, int reset)
|
||||||
{
|
{
|
||||||
#if defined(ST_NOWAIT)
|
#if defined(ST_NOWAIT)
|
||||||
struct statvfs * mnt;
|
struct statvfs * mnt;
|
||||||
|
@ -541,7 +544,8 @@ static void _list_loop_mounted(Volumes * volumes)
|
||||||
|
|
||||||
if((res = getmntinfo(&mnt, ST_NOWAIT)) <= 0)
|
if((res = getmntinfo(&mnt, ST_NOWAIT)) <= 0)
|
||||||
return;
|
return;
|
||||||
_list_reset(volumes);
|
if(reset)
|
||||||
|
_list_reset(volumes);
|
||||||
for(i = 0; i < res; i++)
|
for(i = 0; i < res; i++)
|
||||||
{
|
{
|
||||||
flags = (mnt[i].f_flag & ST_LOCAL) ? 0 : DF_NETWORK;
|
flags = (mnt[i].f_flag & ST_LOCAL) ? 0 : DF_NETWORK;
|
||||||
|
@ -562,7 +566,8 @@ static void _list_loop_mounted(Volumes * volumes)
|
||||||
|
|
||||||
if((res = getmntinfo(&mnt, MNT_NOWAIT)) <= 0)
|
if((res = getmntinfo(&mnt, MNT_NOWAIT)) <= 0)
|
||||||
return;
|
return;
|
||||||
_list_reset(volumes);
|
if(reset)
|
||||||
|
_list_reset(volumes);
|
||||||
for(i = 0; i < res; i++)
|
for(i = 0; i < res; i++)
|
||||||
{
|
{
|
||||||
flags = (mnt[i].f_flags & MNT_LOCAL) ? 0 : DF_NETWORK;
|
flags = (mnt[i].f_flags & MNT_LOCAL) ? 0 : DF_NETWORK;
|
||||||
|
@ -574,11 +579,43 @@ static void _list_loop_mounted(Volumes * volumes)
|
||||||
mnt[i].f_bavail, mnt[i].f_blocks);
|
mnt[i].f_bavail, mnt[i].f_blocks);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
_list_reset(volumes);
|
if(reset)
|
||||||
|
_list_reset(volumes);
|
||||||
_list_add(volumes, _("Root filesystem"), NULL, NULL, 0, "/", 0, 0, 0);
|
_list_add(volumes, _("Root filesystem"), NULL, NULL, 0, "/", 0, 0, 0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _list_loop_unmounted(Volumes * volumes)
|
||||||
|
{
|
||||||
|
#if defined(_PATH_FSTAB)
|
||||||
|
struct fstab * f;
|
||||||
|
unsigned int flags;
|
||||||
|
|
||||||
|
if(setfsent() != 1)
|
||||||
|
return -1;
|
||||||
|
_list_reset(volumes);
|
||||||
|
while((f = getfsent()) != NULL)
|
||||||
|
{
|
||||||
|
if(strcmp(f->fs_type, "sw") == 0
|
||||||
|
|| strcmp(f->fs_type, "xx") == 0)
|
||||||
|
continue;
|
||||||
|
flags = (strcmp(f->fs_vfstype, "nfs") == 0
|
||||||
|
|| strcmp(f->fs_vfstype, "smbfs") == 0)
|
||||||
|
? DF_NETWORK : 0;
|
||||||
|
flags |= (strcmp(f->fs_type, "ro") == 0) ? DF_READONLY : 0;
|
||||||
|
_list_add(volumes, (strcmp(f->fs_file, "/") == 0)
|
||||||
|
? _("Root filesystem") : NULL,
|
||||||
|
f->fs_spec, f->fs_vfstype,
|
||||||
|
flags, f->fs_file, 0, 0, 0);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
|
(void) volumes;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static void _list_purge(Volumes * volumes)
|
static void _list_purge(Volumes * volumes)
|
||||||
{
|
{
|
||||||
GtkTreeModel * model = GTK_TREE_MODEL(volumes->store);
|
GtkTreeModel * model = GTK_TREE_MODEL(volumes->store);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user