From ffec15fdd967c4c40b537f1406a7b515818016b3 Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Mon, 8 Aug 2005 19:00:33 +0000 Subject: [PATCH] We need to build libunsafe.so for FreeBSD. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3674 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- build.xml | 2 +- .../threerings/util/unsafe/FreeBSD/Makefile | 45 ++++++++ .../com_threerings_util_unsafe_Unsafe.c | 97 ++++++++++++++++++ .../util/unsafe/FreeBSD/libunsafe.so | Bin 0 -> 6809 bytes 4 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 src/java/com/threerings/util/unsafe/FreeBSD/Makefile create mode 100644 src/java/com/threerings/util/unsafe/FreeBSD/com_threerings_util_unsafe_Unsafe.c create mode 100755 src/java/com/threerings/util/unsafe/FreeBSD/libunsafe.so diff --git a/build.xml b/build.xml index d9e6993b6..0272177d4 100644 --- a/build.xml +++ b/build.xml @@ -137,7 +137,7 @@ executable="make"> - diff --git a/src/java/com/threerings/util/unsafe/FreeBSD/Makefile b/src/java/com/threerings/util/unsafe/FreeBSD/Makefile new file mode 100644 index 000000000..39a78063f --- /dev/null +++ b/src/java/com/threerings/util/unsafe/FreeBSD/Makefile @@ -0,0 +1,45 @@ +# +# $Id: Makefile 3332 2005-02-03 01:30:33Z mdb $ + +# +# Executable definitions + +CC=gcc +RM=rm +CP=cp +MKDIR=mkdir + +# +# Directory definitions + +ROOT=../../../../../../.. +LIBRARIES_PATH= +OSINCDIR!=uname -s | tr 'A-Z' 'a-z' +INSTALL_PATH=${ROOT}/dist/lib/i386-FreeBSD + +# +# Parameter and file definitions + +INCLUDES=-I.. -I${JAVA_HOME}/include -I${JAVA_HOME}/include/${OSINCDIR} +LIBRARIES= +TARGET=libunsafe.so + +# +# Target definitions + +all: ${TARGET} + +install: ${TARGET} + @${MKDIR} -p ${INSTALL_PATH} + cp ${TARGET} ${INSTALL_PATH} + +${TARGET}: com_threerings_util_unsafe_Unsafe.c + @echo "Compiling Unsafe.c" + @${CC} ${INCLUDES} -c com_threerings_util_unsafe_Unsafe.c \ + -o com_threerings_util_unsafe_Unsafe.o + @echo "Creating libunsafe.so" + @${CC} -o ${TARGET} com_threerings_util_unsafe_Unsafe.o \ + ${LIBRARIES} ${LIBRARIES_PATH} -shared + +clean: + -${RM} -f *.o ${TARGET} diff --git a/src/java/com/threerings/util/unsafe/FreeBSD/com_threerings_util_unsafe_Unsafe.c b/src/java/com/threerings/util/unsafe/FreeBSD/com_threerings_util_unsafe_Unsafe.c new file mode 100644 index 000000000..04ac0526c --- /dev/null +++ b/src/java/com/threerings/util/unsafe/FreeBSD/com_threerings_util_unsafe_Unsafe.c @@ -0,0 +1,97 @@ +/* + * $Id: com_threerings_util_unsafe_Unsafe.c 3653 2005-07-21 19:10:08Z mdb $ + */ + +#include +#include +#include + +#include +#include +#include +#include + +#include "com_threerings_util_unsafe_Unsafe.h" + +/* global jvmpi interface pointer */ +static JVMPI_Interface* jvmpi; + +/** A sleep method that uses select(). This seems to have about 10ms + * granularity where nanosleep() has about 20ms. Sigh. */ +static int select_sleep (int millisecs) +{ + fd_set dummy; + struct timeval toWait; + FD_ZERO(&dummy); + toWait.tv_sec = millisecs / 1000; + toWait.tv_usec = (millisecs % 1000) * 1000; + return select(0, &dummy, NULL, NULL, &toWait); +} + +JNIEXPORT void JNICALL +Java_com_threerings_util_unsafe_Unsafe_enableGC (JNIEnv* env, jclass clazz) +{ + jvmpi->EnableGC(); +} + +JNIEXPORT void JNICALL +Java_com_threerings_util_unsafe_Unsafe_disableGC (JNIEnv* env, jclass clazz) +{ + jvmpi->DisableGC(); +} + +JNIEXPORT void JNICALL +Java_com_threerings_util_unsafe_Unsafe_nativeSleep ( + JNIEnv* env, jclass clazz, jint millis) +{ +/* struct timespec tmspec; */ +/* tmspec.tv_sec = millis/1000; */ +/* tmspec.tv_nsec = (millis%1000)*1000000; */ +/* if (nanosleep(&tmspec, NULL) < 0) { */ +/* fprintf(stderr, "nanosleep() failed: %s\n", strerror(errno)); */ +/* } */ + if (select_sleep(millis) < 0) { + fprintf(stderr, "select_sleep() failed: %s\n", strerror(errno)); + } +} + +JNIEXPORT jboolean JNICALL +Java_com_threerings_util_unsafe_Unsafe_nativeSetuid ( + JNIEnv* env, jclass clazz, jint uid) +{ + if (setuid((uid_t)uid) != 0) { + fprintf(stderr, "setuid(%d) failed: %s\n", uid, strerror(errno)); + return JNI_FALSE; + } + return JNI_TRUE; +} + +JNIEXPORT jboolean JNICALL +Java_com_threerings_util_unsafe_Unsafe_nativeSetgid ( + JNIEnv* env, jclass clazz, jint gid) +{ + if (setgid((gid_t)gid) != 0) { + fprintf(stderr, "setgid(%d) failed: %s\n", gid, strerror(errno)); + return JNI_FALSE; + } + return JNI_TRUE; +} + +JNIEXPORT jboolean JNICALL +Java_com_threerings_util_unsafe_Unsafe_init (JNIEnv* env, jclass clazz) +{ + JavaVM* jvm; + + if ((*env)->GetJavaVM(env, &jvm) > 0) { + fprintf(stderr, "Failed to get JavaVM from env.\n"); + return JNI_FALSE; + } + + /* get jvmpi interface pointer */ + if (((*jvm)->GetEnv(jvm, (void**)&jvmpi, JVMPI_VERSION_1)) < 0) { + fprintf(stderr, "Failed to get JVMPI from JavaVM.\n"); + return JNI_FALSE; + } + + return JNI_TRUE; +} diff --git a/src/java/com/threerings/util/unsafe/FreeBSD/libunsafe.so b/src/java/com/threerings/util/unsafe/FreeBSD/libunsafe.so new file mode 100755 index 0000000000000000000000000000000000000000..2a6a9e53686bc79615cf738bf7bd508f7d432f8d GIT binary patch literal 6809 zcmeHLeQZ=&6~EJ|(Cy-G>6V2>cX`W#wtUQ#Qr6NC0<_awY@t#hD&pJe%$v?M^ObpT zYHQ+tINNA5R-3pc{9()*NMz$`h`WCf>jzjO+toj6)Ua7M+88wLLIlkQ8&VyAzx&>u zz8wkwF&O7JabMCoc=iQIK$`QZmbf5_yI~aLh5fqzWHGr-$QX7oUU;66`+gIFG5c|3zSP$F?ME4|o6yL`k{(nu@ zEYm>UGG(PjPnH(kMSjUCw^v$-S*#7gE4VU3yv#)aFct_Ca^Wc3ic>3PF=V;o;(SrI z4KEdCn_(;wyuxOF{GgKUu)9>0tEGZ*L+}b)u~3u|Gyuj7!7Dx}=^1BXyuuFFSBvt) zQvZ5UMsNbo7vO(y~N)xm%RqQwnTrXMBW9t-PPV7Agl4#puf+; z$Bb)ye}udMxr@HhKMho^SFLzJd=K>(;qU8?{z{2IuArJ<&d0mZSMrAhu)UDY%CClR z40;6|e~%JCHS&71q>tXZPU)`@8kS9UXmvqx#YP2f72g&?B*AOz3)OI7l`a zkA1;_7&bD-K+Lp^j2_7Z6NVm3Mp7tWw)EhTe#EhEiw8~9FokKvjgTb{28V)rD3#Ey zXvQ!yvE+cMXRTOV&nC@a#L$n~#7GAF<3?v&x%T0hd4Cm>K`S<7^u-M$jX@ZhOe!Nx zD`PXdZdw>`CM_aqbkT~G+YQI7VP#`sj98K~M_jBrU{@t6vntlh61ou%T0xAZ-!#$v zV1`A>un<=ed)y_iIdnS$it>mgrt-)aTs#w z&m6jm6dP{Bq0Ue}WR&duYyohZe^!+0`57tmG>Nis{(_Ww;zjwHKL`2P*q{4y*DL2BixV$Qox=1y zKPeC7te%_1poFki=dQ0Ryw(Eixp91Qmum94Jz(-;^n$f^>{d=nm4%t5;_S8Dq$VrZ zqVjldAIy8_bi4L1a%{kpKe;$PRnq=Cw4a--mo*>DU9TF?HG=O|4))p(a+8Z-g!M#j za+5S&BO761?_9NQGd?6_0}~SyXyb+Jr(iffIt=C5XdK_mqfvY{l;(ayPFRoUrDFV> z6bsdPNiSDUu!U=H=Xbslv?k)YvVIb*b#A zyNrvNt(m*=FS&xF7e@S8ci3|EZI_jWMu%I~8?8fJ732xzl+{d6VNPxTjxW1f4Wgh0 zCCfRg=|!7S{~f+A2NvbDt^~tVAs?_~LH0-Xvs~XD_vgDRAE?ULj0YCcv8w!+;`pfw zGl=NX3(syqV+MuiJXU!Sk;9`bAPSO?JZ<)o%kHgC+7MvAyYzZ>cHW2ps&4E zGczH7Jl5|InOT2qXUo&ujd;W#%2+X9-?kxbhwo{vsj;!i-?+=aW0%(0+`40TYx8a` z)t`wONi8s(*5t2aAAY*YXv2dRN4G4a9b=2gm{OqF9Voz+Mfzh5 z5g9}7cDcl@E<45?QFH2nmF?254M^XNWxgwj?5_g$kFXc0?D&2o_DYTYp&hXcsO!bLsoYDw}|Y60%dm$1+?S%_zom)Wq||A?j&RuvniQZz|YI^DNuGH6exdu zH!i?V>1eC?1bFs`{`fC3A92=^L5lM?1YWhvcjg&v7R$B!MVB4lpReA>%n*#zuapG6^Qs(K67P|p07+BcNc z?}5C4{<9zS{~79Wo#cPS@jU}s<;6S|4~hh2cV6n-w0D62-FG3YI|B1C=SuWHa>*L( zry;xZQvY=6>8}z$JI@XR^HSBWpP%|#m#jhF;*zOvDv@_XcITxMkh$Ij=7~liyYo`7 zKz8S)-hu4SOZ^G5J1_MR_87OnHIUtTsjZORd8tOo3N$e7E}8xRgiEGg__Jole~a4}~O@0~rvEVv&WVsI#tW=1b; zrt~Q0FK(2ZSz1b~E#=0F*~4OztRz=hX4a}C;U%+!NGc+grIK!UPdYmJI>Wk;ELpKV r=H}dKvNHR7zbQ$lJv+lFZ`@@z^uBc7@+n#-_Vi_wtTN@ed{*|~ZVjB% literal 0 HcmV?d00001