You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/09/03 13:48:03 UTC

svn commit: r810898 - in /commons/sandbox/runtime/trunk/src/main/native: configure include/arch/unix/acr_arch.h os/unix/file.c os/unix/mmap.c test/testcase.c

Author: mturk
Date: Thu Sep  3 11:48:03 2009
New Revision: 810898

URL: http://svn.apache.org/viewvc?rev=810898&view=rev
Log:
Use mmap64 if present

Modified:
    commons/sandbox/runtime/trunk/src/main/native/configure
    commons/sandbox/runtime/trunk/src/main/native/include/arch/unix/acr_arch.h
    commons/sandbox/runtime/trunk/src/main/native/os/unix/file.c
    commons/sandbox/runtime/trunk/src/main/native/os/unix/mmap.c
    commons/sandbox/runtime/trunk/src/main/native/test/testcase.c

Modified: commons/sandbox/runtime/trunk/src/main/native/configure
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/configure?rev=810898&r1=810897&r2=810898&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/configure (original)
+++ commons/sandbox/runtime/trunk/src/main/native/configure Thu Sep  3 11:48:03 2009
@@ -761,6 +761,7 @@
     have_uuid_uuid=0
     have_off64t=0
     have_strerror_r=0
+    have_mmap64=0
 else
     have_fileextd=0
     have_ktmw32=0
@@ -786,6 +787,7 @@
     else
         have_strerror_r=`have_function strerror_r`
     fi
+    have_mmap64=`have_function mmap64`
 fi
 
 if [ ".$host" = ".linux" ]; then
@@ -869,6 +871,7 @@
 #define HAVE_RESOLV_H         `have_include resolv`
 #define HAVE_SYS_UN_H         `have_include sys/un`
 #define HAVE_STRERROR_R       $have_strerror_r
+#define HAVE_MMAP64           $have_mmap64
 #define HAVE_ACCEPT4          `have_function accept4`
 #define HAVE_DUP3             `have_function dup3`
 #define HAVE_EPOLL_CREATE1    `have_function epoll_create1`

Modified: commons/sandbox/runtime/trunk/src/main/native/include/arch/unix/acr_arch.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/arch/unix/acr_arch.h?rev=810898&r1=810897&r2=810898&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/arch/unix/acr_arch.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/arch/unix/acr_arch.h Thu Sep  3 11:48:03 2009
@@ -55,6 +55,19 @@
 #define IS_INVALID_MEMORY(h) (((h) == NULL || (h) == INVALID_MEMORY_VALUE))
 #define IS_VALID_MEMORY(h)   (((h) != NULL && (h) != INVALID_MEMORY_VALUE))
 
+/** Common large file replacement macros
+ */
+#if defined(_LARGEFILE64_SOURCE)
+#define stat(f,b)       stat64(f,b)
+#define lstat(f,b)      lstat64(f,b)
+#define fstat(f,b)      fstat64(f,b)
+#define lseek(f,o,w)    lseek64(f,o,w)
+#define ftruncate(f,l)  ftruncate64(f,l)
+typedef struct stat64   struct_stat_t;
+#else
+typedef struct stat     struct_stat_t;
+#endif
+
 typedef struct acr_ioh acr_ioh;
 typedef int (acr_ioh_cleanup_fn_t)(void *, int, unsigned int);
 

Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/file.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/file.c?rev=810898&r1=810897&r2=810898&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/file.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/file.c Thu Sep  3 11:48:03 2009
@@ -26,22 +26,12 @@
  * Posix file functions
  *
  */
-#if defined(_LARGEFILE64_SOURCE)
-#define stat(f,b) stat64(f,b)
-#define lstat(f,b) lstat64(f,b)
-#define fstat(f,b) fstat64(f,b)
-#define lseek(f,o,w) lseek64(f,o,w)
-#define ftruncate(f,l) ftruncate64(f,l)
-typedef struct stat64 struct_stat;
-#else
-typedef struct stat struct_stat;
-#endif
 extern mode_t acr_default_umask;
 extern mode_t acr_default_perms;
 
 ACR_DECLARE(int) ACR_FileTypeGet(JNIEnv *_E, const char *fname)
 {
-    struct_stat info;
+    struct_stat_t info;
 
     if (lstat(fname, &info) == 0) {
         int type;
@@ -127,7 +117,7 @@
 
     UNREFERENCED_O;
     WITH_CSTR(pathname) {
-        struct_stat info;
+        struct_stat_t info;
 
         if ((ex = stat(J2S(pathname), &info)) == 0) {
             rv = ((jlong)info.st_dev << 32) +  (jlong)info.st_ino;
@@ -303,7 +293,7 @@
 
 ACR_DECLARE(int) ACR_FileProtectionGet(JNIEnv *_E, char *fname)
 {
-    struct_stat info;
+    struct_stat_t info;
 
     /* Always use a real target */
     if (stat(fname, &info) == 0) {

Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/mmap.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/mmap.c?rev=810898&r1=810897&r2=810898&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/mmap.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/mmap.c Thu Sep  3 11:48:03 2009
@@ -33,6 +33,9 @@
 
 #include <sys/mman.h>
 
+#if defined(_LARGEFILE64_SOURCE) && HAVE_MMAP64
+#define mmap(a, l, p, f, d, o) mmap64(a, l, p, f, d, o)
+#endif
 #define MMAP_OWNS_FILE 1
 
 struct acr_mmap_t {
@@ -248,6 +251,18 @@
         ACR_THROW_IO_IF_ERR(ACR_EEXIST);
         return NULL;
     }
+#if HAVE_MMAP64
+    if (offset + size > LONG_MAX) {
+        ACR_THROW_IO_IF_ERR(ACR_EINVAL);
+        return NULL;
+    }
+#elif defined(_LARGEFILE64_SOURCE) && CC_SIZEOF_SIZE_T == 4
+    /* LFS but no mmap64: check for overflow */
+    if (offset + size > INT_MAX) {
+        ACR_THROW_IO_IF_ERR(ACR_EINVAL);
+        return NULL;
+    }
+#endif
     m->base = mmap(NULL, size, m->flags, MAP_SHARED, m->fd, offset);
     if (IS_INVALID_MEMORY(m->base)) {
         ACR_THROW_IO_ERRNO();
@@ -396,6 +411,18 @@
         ACR_THROW_EX_IF_ERR(ACR_EX_EINVAL, ACR_EFTYPE);
         return NULL;
     }
+#if HAVE_MMAP64
+    if (offset + size > LONG_MAX) {
+        ACR_THROW_IO_IF_ERR(ACR_EINVAL);
+        return NULL;
+    }
+#elif defined(_LARGEFILE64_SOURCE) && CC_SIZEOF_SIZE_T == 4
+    /* LFS but no mmap64: check for overflow */
+    if (offset + size > INT_MAX) {
+        ACR_THROW_IO_IF_ERR(ACR_EINVAL);
+        return NULL;
+    }
+#endif
     base = mmap(NULL, (size_t)size, m->flags, MAP_SHARED, m->fd, (off_t)offset);
     if (IS_INVALID_MEMORY(base)) {
         ACR_THROW_IO_ERRNO();
@@ -415,7 +442,7 @@
 {
     void   *base  = NULL;
     jobject mptr  = NULL;
-    struct  stat  s;
+    struct_stat_t s;
     off_t   size;
     acr_mmap_t *m = (acr_mmap_t *)ACR_IOH_FDATA(map);
 
@@ -428,6 +455,18 @@
         return NULL;
     }
     size = s.st_size - offset;
+#if HAVE_MMAP64
+    if (size > LONG_MAX) {
+        ACR_THROW_IO_IF_ERR(ACR_EINVAL);
+        return NULL;
+    }
+#elif defined(_LARGEFILE64_SOURCE) && CC_SIZEOF_SIZE_T == 4
+    /* LFS but no mmap64: check for overflow */
+    if (size > INT_MAX) {
+        ACR_THROW_IO_IF_ERR(ACR_EINVAL);
+        return NULL;
+    }
+#endif
     base = mmap(NULL, (size_t)size, m->flags, MAP_SHARED, m->fd, (off_t)offset);
     if (IS_INVALID_MEMORY(base)) {
         ACR_THROW_IO_ERRNO();

Modified: commons/sandbox/runtime/trunk/src/main/native/test/testcase.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/test/testcase.c?rev=810898&r1=810897&r2=810898&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/test/testcase.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/test/testcase.c Thu Sep  3 11:48:03 2009
@@ -364,7 +364,7 @@
         return -1;
     else {
         int rfd = test_desc_perf[i].f;
-        struct stat s;
+        struct_stat_t s;
         if (rfd > 0) {
             fstat(rfd, &s);
             return (jint)s.st_dev + v;
@@ -382,7 +382,7 @@
         return -1;
     else {
         int rfd = test_desc_perf[fd].f;
-        struct stat s;
+        struct_stat_t s;
         if (rfd > 0) {
             fstat(rfd, &s);
             return (jint)s.st_dev + v;