Author: mladen.turk(a)jboss.com
Date: 2007-09-05 04:34:08 -0400 (Wed, 05 Sep 2007)
New Revision: 970
Modified:
trunk/sight/java/org/jboss/sight/FileSystemType.java
trunk/sight/native/include/sight_types.h
trunk/sight/native/os/linux/volume.c
trunk/sight/native/share/jnu.c
Log:
Implement Linux Volume functions
Modified: trunk/sight/java/org/jboss/sight/FileSystemType.java
===================================================================
--- trunk/sight/java/org/jboss/sight/FileSystemType.java 2007-09-03 15:41:55 UTC (rev
969)
+++ trunk/sight/java/org/jboss/sight/FileSystemType.java 2007-09-05 08:34:08 UTC (rev
970)
@@ -72,7 +72,16 @@
/** RAM filesystem */
RAMFS( 17),
/** Raiser filesystem */
- RAISERFS( 18);
+ RAISERFS( 18),
+ /** Device filesystem */
+ DEV( 19),
+ /** Proc filesystem */
+ PROC( 20),
+ /** Sys filesystem */
+ SYSFS( 21),
+ /** Temp filesystem */
+ TMPFS( 22),
+ NONE( 23);
private int value;
private FileSystemType(int v)
Modified: trunk/sight/native/include/sight_types.h
===================================================================
--- trunk/sight/native/include/sight_types.h 2007-09-03 15:41:55 UTC (rev 969)
+++ trunk/sight/native/include/sight_types.h 2007-09-05 08:34:08 UTC (rev 970)
@@ -141,8 +141,12 @@
#define SIGHT_FS_NFS 16
#define SIGHT_FS_RAMFS 17
#define SIGHT_FS_RAISERFS 18
+#define SIGHT_FS_DEV 19
+#define SIGHT_FS_PROC 20
+#define SIGHT_FS_SYSFS 21
+#define SIGHT_FS_TMPFS 22
+#define SIGHT_FS_NONE 23
-
#define SIGHT_CASE_SENSITIVE_SEARCH 0x00000001
#define SIGHT_CASE_PRESERVED_NAMES 0x00000002
#define SIGHT_UNICODE_ON_DISK 0x00000004
Modified: trunk/sight/native/os/linux/volume.c
===================================================================
--- trunk/sight/native/os/linux/volume.c 2007-09-03 15:41:55 UTC (rev 969)
+++ trunk/sight/native/os/linux/volume.c 2007-09-05 08:34:08 UTC (rev 970)
@@ -32,6 +32,10 @@
#define SIGHT_WANT_LATE_DLL
#include "sight_private.h"
+#include <mntent.h>
+#include <sys/statfs.h>
+#include <sys/vfs.h>
+
/*
* Network adapter implementation
*/
@@ -140,23 +144,70 @@
sight_unload_class(_E, &_clazzn);
}
+typedef struct volume_enum_t {
+ int num_mounts;
+ FILE *fp;
+} volume_enum_t;
+
/* Initialize volume enumeration */
SIGHT_EXPORT_DECLARE(jlong, Volume, enum0)(SIGHT_STDARGS,
jlong pool)
{
- return 0;
+ volume_enum_t *e;
+ char buf[SIGHT_MBUFFER_SIZ];
+
+ UNREFERENCED_O;
+ if (!(e = (volume_enum_t *)sight_calloc(_E,
+ sizeof(volume_enum_t),
+ THROW_FMARK))) {
+ return NULL;
+ }
+ return P2J(e);
}
SIGHT_EXPORT_DECLARE(jint, Volume, enum1)(SIGHT_STDARGS,
jlong handle)
{
- return 0;
+ struct mntent ent;
+ char buf[SIGHT_MBUFFER_SIZ];
+ volume_enum_t *e = J2P(handle, volume_enum_t *);
+
+ UNREFERENCED_O;
+
+ if (!e)
+ return 0;
+ if (!(e->fp = setmntent(MOUNTED, "r"))) {
+ throwAprException(_E, apr_get_os_error());
+ return 0;
+ } else {
+ e->num_mounts = 0;
+ while (getmntent_r(e->fp, &ent, buf, SIGHT_MBUFFER_LEN)) {
+ e->num_mounts++;
+ }
+ endmntent(e->fp);
+ e->fp = setmntent(MOUNTED, "r");
+ return e->num_mounts;
+ }
}
SIGHT_EXPORT_DECLARE(void, Volume, enum2)(SIGHT_STDARGS,
jobject thiz,
jlong handle)
{
+ struct mntent ent;
+ char buf[SIGHT_MBUFFER_SIZ];
+ volume_enum_t *e = J2P(handle, volume_enum_t *);
+
+ UNREFERENCED_O;
+
+ if (!e || !thiz)
+ return;
+ if (getmntent_r(e->fp, &ent, buf, SIGHT_MBUFFER_LEN)) {
+ SET_IFIELD_S(0000, thiz, ent.mnt_fsname);
+ SET_IFIELD_S(0001, thiz, ent.mnt_type);
+ SET_IFIELD_S(0002, thiz, ent.mnt_dir);
+ CALL_METHOD1(0000, thiz, sight_get_fs_type(ent.mnt_type));
+ }
}
SIGHT_EXPORT_DECLARE(jint, Volume, enum3)(SIGHT_STDARGS,
@@ -170,4 +221,12 @@
SIGHT_EXPORT_DECLARE(void, Volume, enum4)(SIGHT_STDARGS,
jlong handle)
{
+ volume_enum_t *e = J2P(handle, volume_enum_t *);
+
+ UNREFERENCED_STDARGS;
+ if (e) {
+ if (e->fp)
+ endmntent(e->fp);
+ free(e);
+ }
}
Modified: trunk/sight/native/share/jnu.c
===================================================================
--- trunk/sight/native/share/jnu.c 2007-09-03 15:41:55 UTC (rev 969)
+++ trunk/sight/native/share/jnu.c 2007-09-05 08:34:08 UTC (rev 970)
@@ -394,6 +394,12 @@
else
return SIGHT_FS_UNKNOWN;
break;
+ case 'D':
+ if (memcmp(p, "EV", 2) == 0)
+ return SIGHT_FS_DEV;
+ else
+ return SIGHT_FS_UNKNOWN;
+ break;
case 'E':
if(memcmp(p, "XT2", 3) == 0)
return SIGHT_FS_EXT2;
@@ -439,9 +445,17 @@
return SIGHT_FS_NFS;
if(memcmp(p, "TFS", 3) == 0)
return SIGHT_FS_NTFS;
+ if(memcmp(p, "ONE", 3) == 0)
+ return SIGHT_FS_NONE;
else
return SIGHT_FS_UNKNOWN;
break;
+ case 'P':
+ if(memcmp(p, "ROC", 3) == 0)
+ return SIGHT_FS_PROC;
+ else
+ return SIGHT_FS_UNKNOWN;
+ break;
case 'R':
if(memcmp(p, "OMFS", 4) == 0)
return SIGHT_FS_ROMFS;
@@ -455,9 +469,17 @@
case 'S':
if(memcmp(p, "FS", 2) == 0)
return SIGHT_FS_SFS;
+ if(memcmp(p, "YSFS", 4) == 0)
+ return SIGHT_FS_SYSFS;
else
return SIGHT_FS_UNKNOWN;
break;
+ case 'T':
+ if(memcmp(p, "MPFS", 4) == 0)
+ return SIGHT_FS_TMPFS;
+ else
+ return SIGHT_FS_UNKNOWN;
+ break;
case 'U':
if(memcmp(p, "DF", 2) == 0)
return SIGHT_FS_UDF;