From 12bff9a935fe4aea6992ba516b511fd60ccefea5 Mon Sep 17 00:00:00 2001
From: brinn <brinn>
Date: Wed, 15 Jul 2009 18:07:47 +0000
Subject: [PATCH] fix: go LSF for Linux and Solaris 32bit in order to avoid
 problem stating files larger than 2GB change: on MacOSX 64bit: use the new
 Leopard stat64() and lstat64() calls

SVN: 11771
---
 base/source/c/compile_linux_i386.sh    |  2 +-
 base/source/c/compile_macosx_x86_64.sh |  2 +-
 base/source/c/compile_solaris_sparc.sh |  2 +-
 base/source/c/compile_solaris_x86.sh   |  2 +-
 base/source/c/unix.c                   | 16 ++++++++++++----
 5 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/base/source/c/compile_linux_i386.sh b/base/source/c/compile_linux_i386.sh
index 1d0a40440d2..e36b8bc91d4 100755
--- a/base/source/c/compile_linux_i386.sh
+++ b/base/source/c/compile_linux_i386.sh
@@ -1,6 +1,6 @@
 #! /bin/bash
 
-gcc -shared -O3 unix.c -I/usr/java/jdk5/include -I/usr/java/jdk5/include/linux -o libunix.so
+gcc -shared -O3 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I/usr/java/jdk5/include -I/usr/java/jdk5/include/linux unix.c -o libunix.so
 
 # MACHINE_BYTE_ORDER=1 corresponds to 'little endian'
 gcc -shared -O3 -fPIC -DMACHINE_BYTE_ORDER=1 copy*.c  -I/usr/java/jdk5/include -I/usr/java/jdk5/include/linux -o libnativedata.so
diff --git a/base/source/c/compile_macosx_x86_64.sh b/base/source/c/compile_macosx_x86_64.sh
index 01fbb1688a3..0402b62529a 100755
--- a/base/source/c/compile_macosx_x86_64.sh
+++ b/base/source/c/compile_macosx_x86_64.sh
@@ -1,6 +1,6 @@
 #! /bin/bash
 
-gcc -m64 -dynamiclib -O3 -D_POSIX_C_SOURCE unix.c -I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers -o libunix.jnilib
+gcc -m64 -dynamiclib -D__STAT=stat64 -D__LSTAT=lstat64 -O3 unix.c -I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers -o libunix.jnilib
 
 # MACHINE_BYTE_ORDER=1 corresponds to 'little endian'
 gcc -m64 -dynamiclib -O3 -DMACHINE_BYTE_ORDER=1 copy*.c -I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers -o libnativedata.jnilib
diff --git a/base/source/c/compile_solaris_sparc.sh b/base/source/c/compile_solaris_sparc.sh
index 7efb3be3e71..edd75cd52a3 100755
--- a/base/source/c/compile_solaris_sparc.sh
+++ b/base/source/c/compile_solaris_sparc.sh
@@ -1,6 +1,6 @@
 #! /bin/bash
 
-cc -G -KPIC -fast -I/usr/java/include -I/usr/java/include/solaris unix.c -o libunix.so
+cc -G -KPIC -fast -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I/usr/java/include -I/usr/java/include/solaris unix.c -o libunix.so
 
 # MACHINE_BYTE_ORDER=2 corresponds to 'big endian'
 cc -G -KPIC -fast -DMACHINE_BYTE_ORDER=2 copy*.c  -I/usr/java/include -I/usr/java/include/solaris -o libnativedata.so
diff --git a/base/source/c/compile_solaris_x86.sh b/base/source/c/compile_solaris_x86.sh
index 34b1192eced..588e192f6b6 100755
--- a/base/source/c/compile_solaris_x86.sh
+++ b/base/source/c/compile_solaris_x86.sh
@@ -1,6 +1,6 @@
 #! /bin/bash
 
-cc -G -KPIC -fast -I/usr/java/include -I/usr/java/include/solaris unix.c -o libunix.so
+cc -G -KPIC -fast -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I/usr/java/include -I/usr/java/include/solaris unix.c -o libunix.so
 
 # MACHINE_BYTE_ORDER=1 corresponds to 'little endian'
 cc -G -KPIC -fast -DMACHINE_BYTE_ORDER=1 copy*.c  -I/usr/java/include -I/usr/java/include/solaris -o libnativedata.so
diff --git a/base/source/c/unix.c b/base/source/c/unix.c
index f4f5e636911..1cfeef9fc9d 100644
--- a/base/source/c/unix.c
+++ b/base/source/c/unix.c
@@ -28,6 +28,14 @@
 #define SYMLINK 2
 #define OTHER 3
 
+#ifndef __STAT
+#define __STAT stat
+#endif
+
+#ifndef __LSTAT
+#define __LSTAT lstat
+#endif
+
 /* Global references. */
 jclass stringClass;
 jclass passwordClass;
@@ -126,12 +134,12 @@ JNIEXPORT jint JNICALL Java_ch_systemsx_cisd_base_unix_Unix_symlink
 }
 
 /* Function pointer for stat function calls. */
-typedef int (*stat_func_ptr)(const char *path, struct stat *buf);
+typedef int (*stat_func_ptr)(const char *path, struct __STAT *buf);
 
 jobject call_stat(JNIEnv *env, jclass clss, jstring filename, stat_func_ptr statf)
 {
     const char* pfilename;
-    struct stat s;
+    struct __STAT s;
     jobject result;
     int retval;
     jbyte type;
@@ -167,12 +175,12 @@ jobject call_stat(JNIEnv *env, jclass clss, jstring filename, stat_func_ptr stat
 
 JNIEXPORT jobject JNICALL Java_ch_systemsx_cisd_base_unix_Unix_stat(JNIEnv *env, jclass clss, jstring filename)
 {
-    return call_stat(env, clss, filename, &stat);
+    return call_stat(env, clss, filename, &__STAT);
 }
 
 JNIEXPORT jobject JNICALL Java_ch_systemsx_cisd_base_unix_Unix_lstat(JNIEnv *env, jclass clss, jstring filename)
 {
-    return call_stat(env, clss, filename, &lstat);
+    return call_stat(env, clss, filename, &__LSTAT);
 }
 
 JNIEXPORT jstring JNICALL Java_ch_systemsx_cisd_base_unix_Unix_readlink(JNIEnv *env, jclass clss, jstring linkname, jint linkvallen)
-- 
GitLab