[jbossnative-commits] JBoss Native SVN: r970 - in trunk/sight: native/include and 2 other directories.

jbossnative-commits at lists.jboss.org jbossnative-commits at lists.jboss.org
Wed Sep 5 04:34:08 EDT 2007


Author: mladen.turk at 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;




More information about the jbossnative-commits mailing list