Author: mturk
Date: Mon Jun 22 06:27:29 2009
New Revision: 787150

URL: http://svn.apache.org/viewvc?rev=787150&view=rev
Log:
Calculate structure alignment at runtime.
TODO: Structure code needs revision

Modified:
    
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Platform.java
    commons/sandbox/runtime/trunk/src/main/native/os/darwin/platform.c
    commons/sandbox/runtime/trunk/src/main/native/os/hpux/platform.c
    commons/sandbox/runtime/trunk/src/main/native/os/linux/platform.c
    commons/sandbox/runtime/trunk/src/main/native/os/solaris/platform.c
    commons/sandbox/runtime/trunk/src/main/native/os/win32/platform.c
    
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestOS.java

Modified: 
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Platform.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Platform.java?rev=787150&r1=787149&r2=787150&view=diff
==============================================================================
--- 
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Platform.java
 (original)
+++ 
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Platform.java
 Mon Jun 22 06:27:29 2009
@@ -58,6 +58,11 @@
         ABS_MAX_PATH                    =   i[7];
         PAGESIZE                        =   i[8];
 
+        if (i[9] == 16)
+            STRUCT_ALIGN = 4;
+        else
+            STRUCT_ALIGN = 8;
+
     }
 
     /**
@@ -108,4 +113,10 @@
      */
     public static final int PAGESIZE;
 
+    /**
+     * Size of the {...@code structure} alignment.
+     */
+    public static final int STRUCT_ALIGN;
+
 }
+

Modified: commons/sandbox/runtime/trunk/src/main/native/os/darwin/platform.c
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/darwin/platform.c?rev=787150&r1=787149&r2=787150&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/darwin/platform.c 
(original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/darwin/platform.c Mon Jun 
22 06:27:29 2009
@@ -23,6 +23,12 @@
 static const char unknown[] = "unknown";
 acr_size_t acr_page_size;
 
+typedef struct struct_align_t {
+    char        c;
+    acr_int64_t l;
+    acr_int32_t i;
+} struct_align_t;
+
 ACR_JNI_EXPORT_DECLARE(void, Platform, init0)(ACR_JNISTDARGS,
                                               jintArray p)
 {
@@ -44,6 +50,7 @@
     ia[7]  =   PATH_MAX;
     acr_page_size = (acr_size_t)getpagesize();
     ia[8]  =   (jint)acr_page_size;
+    ia[9]  =   (jint)sizeof(struct_align_t);
 
     (*_E)->SetIntArrayRegion(_E, p, 0, 16, &ia[0]);
 }

Modified: commons/sandbox/runtime/trunk/src/main/native/os/hpux/platform.c
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/hpux/platform.c?rev=787150&r1=787149&r2=787150&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/hpux/platform.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/hpux/platform.c Mon Jun 22 
06:27:29 2009
@@ -23,6 +23,12 @@
 static const char unknown[] = "unknown";
 acr_size_t acr_page_size;
 
+typedef struct struct_align_t {
+    char        c;
+    acr_int64_t l;
+    acr_int32_t i;
+} struct_align_t;
+
 ACR_JNI_EXPORT_DECLARE(void, Platform, init0)(ACR_JNISTDARGS,
                                               jintArray p)
 {
@@ -44,6 +50,7 @@
     ia[7]  =   PATH_MAX;
     acr_page_size = (acr_size_t)getpagesize();
     ia[8]  =   (jint)acr_page_size;
+    ia[9]  =   (jint)sizeof(struct_align_t);
 
     (*_E)->SetIntArrayRegion(_E, p, 0, 16, &ia[0]);
 }

Modified: commons/sandbox/runtime/trunk/src/main/native/os/linux/platform.c
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/linux/platform.c?rev=787150&r1=787149&r2=787150&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/linux/platform.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/linux/platform.c Mon Jun 
22 06:27:29 2009
@@ -23,6 +23,12 @@
 static const char unknown[] = "unknown";
 acr_size_t acr_page_size;
 
+typedef struct struct_align_t {
+    char        c;
+    acr_int64_t l;
+    acr_int32_t i;
+} struct_align_t;
+
 ACR_JNI_EXPORT_DECLARE(void, Platform, init0)(ACR_JNISTDARGS,
                                               jintArray p)
 {
@@ -44,6 +50,7 @@
     ia[7]  =   PATH_MAX;
     acr_page_size = (acr_size_t)getpagesize();
     ia[8]  =   (jint)acr_page_size;
+    ia[9]  =   (jint)sizeof(struct_align_t);
 
     (*_E)->SetIntArrayRegion(_E, p, 0, 16, &ia[0]);
 }

Modified: commons/sandbox/runtime/trunk/src/main/native/os/solaris/platform.c
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/solaris/platform.c?rev=787150&r1=787149&r2=787150&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/solaris/platform.c 
(original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/solaris/platform.c Mon Jun 
22 06:27:29 2009
@@ -23,6 +23,12 @@
 static const char unknown[] = "unknown";
 acr_size_t acr_page_size;
 
+typedef struct struct_align_t {
+    char        c;
+    acr_int64_t l;
+    acr_int32_t i;
+} struct_align_t;
+
 ACR_JNI_EXPORT_DECLARE(void, Platform, init0)(ACR_JNISTDARGS,
                                               jintArray p)
 {
@@ -44,6 +50,7 @@
     ia[7]  =   PATH_MAX;
     acr_page_size = (acr_size_t)getpagesize();
     ia[8]  =   (jint)acr_page_size;
+    ia[9]  =   (jint)sizeof(struct_align_t);
 
     (*_E)->SetIntArrayRegion(_E, p, 0, 16, &ia[0]);
 }

Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/platform.c
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/platform.c?rev=787150&r1=787149&r2=787150&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/platform.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/platform.c Mon Jun 
22 06:27:29 2009
@@ -28,6 +28,12 @@
 extern LPSYSTEM_INFO acr_osinf;
 acr_size_t  acr_page_size;
 
+typedef struct struct_align_t {
+    char        c;
+    acr_int64_t l;
+    acr_int32_t i;
+} struct_align_t;
+
 ACR_JNI_EXPORT_DECLARE(void, Platform, init0)(ACR_JNISTDARGS,
                                               jintArray p)
 {
@@ -58,6 +64,7 @@
     ia[7]  =   32760;
     acr_page_size = (acr_size_t)acr_osinf->dwPageSize;
     ia[8]  =   (jint)acr_page_size;
+    ia[9]  =   (jint)sizeof(struct_align_t);
 
     (*_E)->SetIntArrayRegion(_E, p, 0, 16, &ia[0]);
 

Modified: 
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestOS.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestOS.java?rev=787150&r1=787149&r2=787150&view=diff
==============================================================================
--- 
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestOS.java 
(original)
+++ 
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestOS.java 
Mon Jun 22 06:27:29 2009
@@ -78,6 +78,7 @@
         System.out.println("Max path   " + Platform.MAX_PATH);
         System.out.println("Abs path   " + Platform.ABS_MAX_PATH);
         System.out.println("Page size  " + Platform.PAGESIZE);
+        System.out.println("Alignment  " + Platform.STRUCT_ALIGN);
 
     }
 


Reply via email to