Skip to content
Commits on Source (4)
libsis-base-java (18.08.0+dfsg-2) UNRELEASED; urgency=medium
libsis-base-java (18.09~pre1+git20180827.fe4953e+dfsg-1) UNRELEASED; urgency=medium
* Fix watch file
* Temporarily use Git HEAD since latest HEAD is needed to package
libsis-jhdf5
-- Andreas Tille <tille@debian.org> Wed, 19 Sep 2018 09:57:55 +0200
......
From: Bernd Rinn <brinn@ethz.ch>
Date: Tue, 21 Aug 2018 15:20:44 +0200
Origin: https://sissource.ethz.ch/sispub/base/commit/331b8ccb2d5197393fef09fe4e02febaf0041287
Subject: Change test testGetLinkInfoRegularFile() to precision of
1 second, as some java.io.File.lastModified() on some JREs report the last
modified time with sub-second resolution.
---
sourceTest/java/ch/systemsx/cisd/base/unix/UnixTests.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/sourceTest/java/ch/systemsx/cisd/base/unix/UnixTests.java
+++ b/sourceTest/java/ch/systemsx/cisd/base/unix/UnixTests.java
@@ -56,7 +56,7 @@ public class UnixTests extends AbstractF
assertEquals("root", Unix.tryGetUserNameForUid(0));
assertEquals(FileLinkType.REGULAR_FILE, info.getLinkType());
assertFalse(info.isSymbolicLink());
- assertEquals(f.lastModified(), 1000 * info.getLastModified());
+ assertEquals(f.lastModified()/1000, info.getLastModified());
}
@Test(groups =
Subject: Tests made assumption user is not root
Description: Update uid/gid tests assuming non root user.
Forwarded: no
Author: Olivier Sallou <osallou@debian.org>
--- a/sourceTest/java/ch/systemsx/cisd/base/unix/UnixTests.java
+++ b/sourceTest/java/ch/systemsx/cisd/base/unix/UnixTests.java
@@ -165,14 +165,14 @@ public class UnixTests extends AbstractF
{ "requires_unix" })
public void testGetUid()
{
- assertTrue(Unix.getUid() > 0);
+ assertTrue(Unix.getUid() >= 0);
}
@Test(groups =
{ "requires_unix" })
public void testGetEuid()
{
- assertTrue(Unix.getEuid() > 0);
+ assertTrue(Unix.getEuid() >= 0);
assertEquals(Unix.getUid(), Unix.getEuid());
}
@@ -180,14 +180,14 @@ public class UnixTests extends AbstractF
{ "requires_unix" })
public void testGetGid()
{
- assertTrue(Unix.getGid() > 0);
+ assertTrue(Unix.getGid() >= 0);
}
@Test(groups =
{ "requires_unix" })
public void testGetEgid()
{
- assertTrue(Unix.getEgid() > 0);
+ assertTrue(Unix.getEgid() >= 0);
assertEquals(Unix.getGid(), Unix.getEgid());
}
......@@ -8,7 +8,7 @@ Forwarded: no
Last-Updated: 2015-08-21
--- a/source/java/ch/systemsx/cisd/base/convert/NativeData.java
+++ b/source/java/ch/systemsx/cisd/base/convert/NativeData.java
@@ -45,7 +45,8 @@
@@ -45,7 +45,8 @@ public class NativeData
useNativeLib = false;
} else
{
......@@ -20,7 +20,7 @@ Last-Updated: 2015-08-21
--- a/source/java/ch/systemsx/cisd/base/unix/Unix.java
+++ b/source/java/ch/systemsx/cisd/base/unix/Unix.java
@@ -46,7 +46,8 @@
@@ -65,7 +65,8 @@ public final class Unix
static
{
......
......@@ -13,7 +13,7 @@ Last-Updated: 2015-08-21
import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked;
import ch.systemsx.cisd.base.utilities.NativeLibraryUtilities;
@@ -415,13 +414,11 @@ public final class Unix
@@ -647,13 +646,11 @@ public final class Unix
private static native String strerror();
......@@ -29,7 +29,7 @@ Last-Updated: 2015-08-21
try
--- a/sourceTest/java/ch/systemsx/cisd/base/unix/UnixTests.java
+++ b/sourceTest/java/ch/systemsx/cisd/base/unix/UnixTests.java
@@ -25,7 +25,6 @@ import java.nio.charset.Charset;
@@ -27,7 +27,6 @@ import java.nio.charset.Charset;
import org.apache.commons.io.FileUtils;
import org.testng.annotations.Test;
......@@ -37,11 +37,11 @@ Last-Updated: 2015-08-21
import ch.systemsx.cisd.base.BuildAndEnvironmentInfo;
import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase;
import ch.systemsx.cisd.base.unix.Unix.Group;
@@ -37,7 +36,6 @@ import ch.systemsx.cisd.base.unix.Unix.S
@@ -39,7 +38,6 @@ import ch.systemsx.cisd.base.unix.Unix.S
*
* @author Bernd Rinn
*/
-@Friend(toClasses = Unix.class)
public class UnixTests extends AbstractFileSystemTestCase
{
private UnixTests()
remove_ch_rinn_imports.patch
load_native_debian.patch
fix_tests.patch
skip_testGetLinkInfoDirectory.patch
0001-Change-test-testGetLinkInfoRegularFile-to-precision-.patch
......@@ -19,7 +19,7 @@ Forwarded-Upstream: Bernd Rinn <brinn@ethz.ch>
--- a/sourceTest/java/ch/systemsx/cisd/base/unix/UnixTests.java
+++ b/sourceTest/java/ch/systemsx/cisd/base/unix/UnixTests.java
@@ -79,7 +79,7 @@ public class UnixTests extends AbstractF
@@ -90,7 +90,7 @@ public class UnixTests extends AbstractF
}
@Test(groups =
......
version=4
opts="repacksuffix=+dfsg,dversionmangle=s/\+dfsg//g,repack,compression=xz" \
https://sissource.ethz.ch/sispub/base/tags .*archive/.+/base@ANY_VERSION@@ARCHIVE_EXT@
# opts="uversionmangle=s/(\d)[_\.\-\+]?((RC|rc|pre|dev|beta|alpha)\d*)$/$1~$2/,repacksuffix=+dfsg,dversionmangle=s/\+dfsg//g,repack,compression=xz" \
# https://sissource.ethz.ch/sispub/base/tags .*archive/.+/base@ANY_VERSION@@ARCHIVE_EXT@
opts="mode=git,pretty=18.09~pre1+git%cd.%h,uversionmangle=s/(\d)[_\.\-\+]?((RC|rc|pre|dev|beta|alpha)\d*)$/$1~$2/,repacksuffix=+dfsg,dversionmangle=s/\+dfsg//g,repack,compression=xz" \
https://sissource.ethz.ch/sispub/base.git HEAD
......@@ -6,13 +6,13 @@
#============================================================================
# Visual C++ directory, for example
VCPPDIR=C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC
VCPPDIR=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC
# Directory where JDK is installed (We require JDK 1.6)
JAVADIR=C:\Program Files\Java\jdk1.6.0_37
JAVADIR=C:\Program Files\Java\jdk1.8.0_181
# Common parent directory
PARENTDIR=C:\nativeData
PARENTDIR=F:\base
# Directory of the HDF Java Products, for example
SRCDIR=$(PARENTDIR)\c\
......
#! /bin/bash
gcc -shared -O3 -fPIC unix.c -I/usr/java/jdk1.6.0/include -I/usr/java/jdk1.6.0/include/linux -o libunix.so
JAVA_INCLUDE=/usr/lib/jvm/java-1.8.0/include
gcc -shared -O3 -fPIC unix.c -I$JAVA_INCLUDE -I$JAVA_INCLUDE/linux -o libunix.so
# MACHINE_BYTE_ORDER=1 corresponds to 'little endian'
gcc -shared -O3 -fPIC -DMACHINE_BYTE_ORDER=1 copy*.c -I/usr/java/jdk1.6.0/include -I/usr/java/jdk1.6.0/include/linux -o libnativedata.so
gcc -shared -O3 -fPIC -DMACHINE_BYTE_ORDER=1 copy*.c -I$JAVA_INCLUDE -I$JAVA_INCLUDE/linux -o libnativedata.so
#! /bin/bash
gcc -shared -O3 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I/usr/java/jdk1.7.0/include -I/usr/java/jdk1.7.0/include/linux unix.c -o libunix.so
gcc -shared -O3 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I/usr/java/jdk1.8.0/include -I/usr/java/jdk1.8.0/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/jdk1.7.0/include -I/usr/java/jdk1.7.0/include/linux -o libnativedata.so
gcc -shared -O3 -fPIC -DMACHINE_BYTE_ORDER=1 copy*.c -I/usr/java/jdk1.8.0/include -I/usr/java/jdk1.8.0/include/linux -o libnativedata.so
#! /bin/bash
gcc -m32 -shared -O3 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I/usr/java/jdk1.6.0/include -I/usr/java/jdk1.6.0/include/linux unix.c -o libunix.so
# MACHINE_BYTE_ORDER=1 corresponds to 'little endian'
gcc -m32 -shared -O3 -fPIC -DMACHINE_BYTE_ORDER=1 copy*.c -I/usr/java/jdk1.6.0/include -I/usr/java/jdk1.6.0/include/linux -o libnativedata.so
#! /bin/bash
gcc -m32 -mmacosx-version-min=10.6 -bundle -O3 unix.c -I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers -o libunix.jnilib
# MACHINE_BYTE_ORDER=1 corresponds to 'little endian'
gcc -m32 -mmacosx-version-min=10.6 -bundle -O3 -DMACHINE_BYTE_ORDER=1 copy*.c -I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers -o libnativedata.jnilib
#! /bin/bash
gcc -m64 -mmacosx-version-min=10.6 -dynamiclib -D_DARWIN_USE_64_BIT_INODE -O3 unix.c -I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers -o libunix.jnilib
gcc -m64 -mmacosx-version-min=10.11 -dynamiclib -D_DARWIN_USE_64_BIT_INODE -O3 unix.c -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers -o libunix.jnilib
# MACHINE_BYTE_ORDER=1 corresponds to 'little endian'
gcc -m64 -mmacosx-version-min=10.6 -dynamiclib -O3 -DMACHINE_BYTE_ORDER=1 copy*.c -I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers -o libnativedata.jnilib
gcc -m64 -mmacosx-version-min=10.11 -dynamiclib -O3 -DMACHINE_BYTE_ORDER=1 copy*.c -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers -o libnativedata.jnilib
#! /bin/bash
cc -G -KPIC -fast -m64 -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 -m64 -DMACHINE_BYTE_ORDER=1 copy*.c -I/usr/java/include -I/usr/java/include/solaris -o libnativedata.so
#! /bin/bash
cc -G -KPIC -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 -DMACHINE_BYTE_ORDER=2 copy*.c -I/usr/java/include -I/usr/java/include/solaris -o libnativedata.so
#! /bin/bash
cc -G -KPIC -fast -m64 -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 -m64 -DMACHINE_BYTE_ORDER=2 copy*.c -I/usr/java/include -I/usr/java/include/solaris -o libnativedata.so
#! /bin/bash
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
#============================================================================
#
# Makefile to compile the 'nativedata' native library
# Usage: nmake /f compile_windows_i386.mak
#
#============================================================================
# Visual C++ directory, for example
VCPPDIR=C:\Program Files\Microsoft Visual Studio 9.0\VC
# Directory where JDK is installed (We require JDK 1.6)
JAVADIR=C:\Program Files\Java\jdk1.6.0_37
# Common parent directory
PARENTDIR=C:\nativeData
# Directory of the HDF Java Products, for example
SRCDIR=$(PARENTDIR)\c\
#===========================================================================
# Do not make any change below this line unless you know what you do
#===========================================================================
PATH=$(PATH);$(VCPPDIR)\BIN
SRCDIR=$(SRCDIR)
VALID_PATH_SET=YES
#-------------------------------------------------------
# Test if all path is valid
!IF EXISTS("$(VCPPDIR)")
!ELSE
!MESSAGE ERROR: Visual C++ directory $(VCPPDIR) does not exist
VALID_PATH_SET=NO
!ENDIF
!IF EXISTS("$(JAVADIR)")
!ELSE
!MESSAGE ERROR: JDK directory $(JAVADIR) does not exist
VALID_PATH_SET=NO
!ENDIF
!IF EXISTS("$(SRCDIR)")
!ELSE
!MESSAGE ERROR: C source directory $(SRCDIR) does not exist
VALID_PATH_SET=NO
!ENDIF
#-------------------------------------------------------
!IF "$(VALID_PATH_SET)" == "YES"
!IF "$(OS)" == "Windows_NT"
NULL=
!ELSE
NULL=nul
!ENDIF
INTDIR=.\nativedata\Release
OUTDIR=$(SRCDIR)\lib\win
INCLUDES = \
"$(JAVADIR)\include\jni.h" \
"$(JAVADIR)\include\win32\jni_md.h"
ALL : "$(OUTDIR)\nativedata.dll"
"$(INTDIR)" :
if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP=cl.exe
CPP_PROJ=/nologo /W3 /EHsc /O2 /I "$(JAVADIR)\include" /I "$(JAVADIR)\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "MACHINE_BYTE_ORDER=1" /Fp"$(INTDIR)\nativedata.pch" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
MTL=midl.exe
MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
RSC=rc.exe
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(INTDIR)\nativedata.bsc"
BSC32_SBRS= \
LINK=link.exe
LINK_FLAGS=/nologo /dll /nodefaultlib:msvcrt /incremental:no /pdb:"$(INTDIR)\nativedata.pdb" /machine:I386 /out:"$(OUTDIR)\nativedata.dll" /implib:"$(INTDIR)\nativedata.lib"
LINK_OBJS= \
"$(INTDIR)\copyCommon.obj" \
"$(INTDIR)\copyByteDouble.obj" \
"$(INTDIR)\copyByteFloat.obj" \
"$(INTDIR)\copyByteInt.obj" \
"$(INTDIR)\copyByteLong.obj" \
"$(INTDIR)\copyByteShort.obj" \
"$(INTDIR)\copyByteChar.obj"
"$(OUTDIR)\nativedata.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK_OBJS)
$(LINK) @<<
$(LINK_FLAGS) $(LINK_OBJS)
<<
SOURCE=$(SRCDIR)\copyCommon.c
"$(INTDIR)\copyCommon.obj" : $(SOURCE) $(INCLUDES) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=$(SRCDIR)\copyByteDouble.c
"$(INTDIR)\copyByteDouble.obj" : $(SOURCE) $(INCLUDES) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=$(SRCDIR)\copyByteFloat.c
"$(INTDIR)\copyByteFloat.obj" : $(SOURCE) $(INCLUDES) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=$(SRCDIR)\copyByteInt.c
"$(INTDIR)\copyByteInt.obj" : $(SOURCE) $(INCLUDES) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=$(SRCDIR)\copyByteLong.c
"$(INTDIR)\copyByteLong.obj" : $(SOURCE) $(INCLUDES) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=$(SRCDIR)\copyByteShort.c
"$(INTDIR)\copyByteShort.obj" : $(SOURCE) $(INCLUDES) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=$(SRCDIR)\copyByteChar.c
"$(INTDIR)\copyByteChar.obj" : $(SOURCE) $(INCLUDES) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
CLEAN :
-@erase "$(INTDIR)\copyCommon.obj"
-@erase "$(INTDIR)\copyByteDouble.obj"
-@erase "$(INTDIR)\copyByteFloat.obj"
-@erase "$(INTDIR)\copyByteInt.obj"
-@erase "$(INTDIR)\copyByteLong.obj"
-@erase "$(INTDIR)\copyByteShort.obj"
-@erase "$(INTDIR)\copyByteChar.obj"
-@erase "$(INTDIR)\vc90.idb"
-@erase "$(INTDIR)\nativedata.exp"
-@erase "$(INTDIR)\nativedata.lib"
-@erase "$(OUTDIR)\nativedata.dll"
!ENDIF
......@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <time.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
......@@ -20,6 +21,7 @@
#include <grp.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <jni.h>
/* Types of links. Keep in sync with Java enum. */
......@@ -28,6 +30,17 @@
#define SYMLINK 2
#define OTHER 3
/* Field name for nano second precission of file stat times. */
#ifdef __MACH__
#define ST_ATIME_NANO st_atimespec.tv_nsec
#define ST_MTIME_NANO st_mtimespec.tv_nsec
#define ST_CTIME_NANO st_ctimespec.tv_nsec
#else
#define ST_ATIME_NANO st_atim.tv_nsec
#define ST_MTIME_NANO st_mtim.tv_nsec
#define ST_CTIME_NANO st_ctim.tv_nsec
#endif
#ifndef __STAT
#define __STAT stat
#endif
......@@ -44,6 +57,82 @@ jclass groupClass;
jmethodID groupConstructorID;
jclass statClass;
jmethodID statConstructorID;
jboolean statConstructorHasNanos;
/*
* Error and Exception Handling
*/
#define THROWEXCEPTION(className,args) { \
jclass jc; \
jmethodID jm; \
jobject ex; \
jc = (*env)->FindClass(env, (className)); \
if (jc == NULL) { \
return JNI_FALSE; \
} \
jm = (*env)->GetMethodID(env, jc, "<init>", "(Ljava/lang/String;)V"); \
if (jm == NULL) { \
printf("THROWEXCEPTION FATAL ERROR: GetMethodID failed\n"); \
return JNI_FALSE; \
} \
ex = (*env)->NewObjectA (env, jc, jm, (jvalue*)(args)); \
if (ex == NULL) { \
printf("THROWEXCEPTION FATAL ERROR: %s: Creation failed\n", (className)); \
return JNI_FALSE; \
} \
if ((*env)->Throw(env, (jthrowable)ex) < 0) { \
printf("THROWEXCEPTION FATAL ERROR: %s: Throw failed\n", (className)); \
return JNI_FALSE; \
} \
return JNI_TRUE; \
}
/*
* Routine to raise particular Java exceptions from C
*/
static jboolean
jni_error_class
(JNIEnv *env, const char *message, const char *className)
{
char *args[2];
jstring str = (*env)->NewStringUTF(env, message);
args[0] = (char *)str;
args[1] = 0;
THROWEXCEPTION(className, args);
} /* end jni_error_class() */
/*
* A NULL argument in an HDF5 call
* Create and throw an 'NullPointerException'
*
* Note: This routine never returns from the 'throw',
* and the Java native method immediately raises the
* exception.
*/
jboolean null_pointer_exception(JNIEnv *env, const char *functName)
{
return jni_error_class(env, functName, "java/lang/NullPointerException");
} /* end null_pointer_exception() */
/*
* A fatal error in a JNI call
* Create and throw an 'InternalError'
*
* Note: This routine never returns from the 'throw',
* and the Java native method immediately raises the
* exception.
*/
jboolean internal_error(JNIEnv *env, const char *functName)
{
return jni_error_class(env, functName, "java/lang/InternalError");
} /* end iternal_error() */
/*
* End Error and Exception Handling
*/
JNIEXPORT jint JNICALL Java_ch_systemsx_cisd_base_unix_Unix_init
(JNIEnv *env, jclass clss)
......@@ -82,11 +171,18 @@ JNIEXPORT jint JNICALL Java_ch_systemsx_cisd_base_unix_Unix_init
return -1;
}
statClass = (*env)->NewGlobalRef(env, statClass);
statConstructorHasNanos = JNI_TRUE;
statConstructorID = (*env)->GetMethodID(env, statClass, "<init>", "(JJSBIIIJJJJJJJJI)V");
if (statConstructorID == NULL) /* We have an old Java class without the "microsecond constructor". */
{
(*env)->ExceptionClear(env);
statConstructorHasNanos = JNI_FALSE;
statConstructorID = (*env)->GetMethodID(env, statClass, "<init>", "(JJSBIIIJJJJJI)V");
if (groupConstructorID == NULL) /* Really shouldn't happen, will throw NoSuchMethodError. */
if (statConstructorID == NULL) /* Really shouldn't happen, will throw NoSuchMethodError. */
{
return -1;
}
}
return 0;
}
......@@ -165,10 +261,20 @@ jobject call_stat(JNIEnv *env, jclass clss, jstring filename, stat_func_ptr stat
{
type = OTHER;
}
if (statConstructorHasNanos)
{
result = (*env)->NewObject(env, statClass, statConstructorID, (jlong) s.st_dev, (jlong) s.st_ino,
(jshort) (s.st_mode & 07777), (jbyte) type, (jint) s.st_nlink,
(jint) s.st_uid, (jint) s.st_gid, (jlong) s.st_atime, (jlong) s.ST_ATIME_NANO,
(jlong) s.st_mtime, (jlong) s.ST_MTIME_NANO, (jlong) s.st_ctime, (jlong) s.ST_CTIME_NANO,
(jlong) s.st_size, (jlong) s.st_blocks, (jint) s.st_blksize);
} else
{
result = (*env)->NewObject(env, statClass, statConstructorID, (jlong) s.st_dev, (jlong) s.st_ino,
(jshort) (s.st_mode & 07777), (jbyte) type, (jint) s.st_nlink,
(jint) s.st_uid, (jint) s.st_gid, (jlong) s.st_atime, (jlong) s.st_mtime,
(jlong) s.st_ctime, (jlong) s.st_size, (jlong) s.st_blocks, (jint) s.st_blksize);
}
return result;
}
}
......@@ -236,6 +342,23 @@ JNIEXPORT jint JNICALL Java_ch_systemsx_cisd_base_unix_Unix_chown(JNIEnv *env, j
}
}
JNIEXPORT jint JNICALL Java_ch_systemsx_cisd_base_unix_Unix_lchown(JNIEnv *env, jclass clss, jstring linkname, jint uid, jint gid)
{
const char* plinkname;
int retval;
plinkname = (char *)(*env)->GetStringUTFChars(env, linkname, NULL);
retval = lchown(plinkname, uid, gid);
(*env)->ReleaseStringUTFChars(env, linkname, plinkname);
if (retval < 0)
{
return -errno;
} else
{
return 0;
}
}
JNIEXPORT jstring JNICALL Java_ch_systemsx_cisd_base_unix_Unix_getuser(JNIEnv *env, jclass clss, jint uid)
{
struct passwd *pw;
......@@ -444,3 +567,133 @@ JNIEXPORT jstring JNICALL Java_ch_systemsx_cisd_base_unix_Unix_strerror__(JNIEnv
{
return (*env)->NewStringUTF(env, strerror(errno));
}
JNIEXPORT jint JNICALL Java_ch_systemsx_cisd_base_unix_Unix_lutimes
(JNIEnv *env, jclass clss, jstring filename, jlong accessTimeSecs, jlong accessTimeMicroSecs, jlong modificationTimeSecs, jlong modificationTimeMicroSecs)
{
const char* pfilename;
struct timeval times[2];
int retval;
pfilename = (char *)(*env)->GetStringUTFChars(env, filename, NULL);
times[0].tv_sec = accessTimeSecs;
times[0].tv_usec = accessTimeMicroSecs;
times[1].tv_sec = modificationTimeSecs;
times[1].tv_usec = modificationTimeMicroSecs;
retval = lutimes(pfilename, times);
if (retval < 0)
{
retval = -errno;
}
(*env)->ReleaseStringUTFChars(env, filename, pfilename);
return retval;
}
JNIEXPORT jint JNICALL Java_ch_systemsx_cisd_base_unix_Unix_utimes
(JNIEnv *env, jclass clss, jstring filename, jlong accessTimeSecs, jlong accessTimeMicroSecs, jlong modificationTimeSecs, jlong modificationTimeMicroSecs)
{
const char* pfilename;
struct timeval times[2];
int retval;
pfilename = (char *)(*env)->GetStringUTFChars(env, filename, NULL);
times[0].tv_sec = accessTimeSecs;
times[0].tv_usec = accessTimeMicroSecs;
times[1].tv_sec = modificationTimeSecs;
times[1].tv_usec = modificationTimeMicroSecs;
retval = utimes(pfilename, times);
if (retval < 0)
{
retval = -errno;
}
(*env)->ReleaseStringUTFChars(env, filename, pfilename);
return retval;
}
JNIEXPORT jint JNICALL Java_ch_systemsx_cisd_base_unix_Unix_clock_1gettime
(JNIEnv *env, jclass clss, jlongArray time)
{
struct timespec spec;
jlong *timeP;
jboolean isCopy;
int retval;
if (time == NULL)
{
null_pointer_exception(env, "clock_gettime: time is NULL");
} /* end if */
timeP = (jlong*)(*env)->GetPrimitiveArrayCritical(env, time, &isCopy);
if (timeP == NULL)
{
internal_error(env, "clock_gettime: time not pinned");
} /* end if */
retval = clock_gettime(CLOCK_REALTIME, &spec);
if (retval < 0)
{
retval = -errno;
} else
{
timeP[0] = spec.tv_sec;
timeP[1] = spec.tv_nsec;
}
(*env)->ReleasePrimitiveArrayCritical(env, time, timeP, 0);
return retval;
}
int clock_gettime2(int clk_id, struct timespec* t) {
struct timeval now;
int rv = gettimeofday(&now, NULL);
if (rv)
{
return rv;
}
t->tv_sec = now.tv_sec;
t->tv_nsec = now.tv_usec * 1000;
return 0;
}
JNIEXPORT jint JNICALL Java_ch_systemsx_cisd_base_unix_Unix_clock_1gettime2
(JNIEnv *env, jclass clss, jlongArray time)
{
struct timespec spec;
jlong *timeP;
jboolean isCopy;
int retval;
if (time == NULL)
{
null_pointer_exception(env, "clock_gettime: time is NULL");
} /* end if */
timeP = (jlong*)(*env)->GetPrimitiveArrayCritical(env, time, &isCopy);
if (timeP == NULL)
{
internal_error(env, "clock_gettime: time not pinned");
} /* end if */
retval = clock_gettime2(CLOCK_REALTIME, &spec);
if (retval < 0)
{
retval = -errno;
} else
{
timeP[0] = spec.tv_sec;
timeP[1] = spec.tv_nsec;
}
(*env)->ReleasePrimitiveArrayCritical(env, time, timeP, 0);
return retval;
}