get specjbb compiling again...get rid of annoying warnings...still left with large...
[IRC.git] / Robust / Transactions / TransactionalIO / NativeFuncs.c
1 /* 
2  * File:   HelloWorld.cpp
3  * Author: navid
4  *
5  * Created on September 3, 2008, 2:17 PM
6  */
7
8         #include <jni.h>
9         #include <errno.h>
10         #include <fcntl.h>
11         #include <unistd.h>
12         #include <stdio.h>
13         #include <stdlib.h>
14         #include <sys/stat.h>
15         #include "NativeFunctions.h"
16         #define BUF_SIZE 8192
17
18         JNIEXPORT jlong JNICALL Java_TransactionalIO_core_TransactionalFileWrapperFactory_getINodeNative
19             (JNIEnv *env, jobject obj, jstring filename) 
20         {
21             struct stat status_buf;
22             jlong inodenum;
23            // stat("/home/navid/myfile.txt",&status_buf);
24             char *str = (*env)->GetStringUTFChars(env, filename, 0);
25             if (stat(str,&status_buf)<0)
26                 inodenum = -1;   
27             else
28             {
29                     inodenum = status_buf.st_ino;
30             }
31             (*env)->ReleaseStringUTFChars(env, filename, str);
32             return inodenum;
33         }
34
35         
36         JNIEXPORT jint JNICALL Java_TransactionalIO_core_TransactionalFile_nativepread(JNIEnv *env, jobject obj2, jbyteArray buff, jlong offset, jint size, jobject fobj )      {
37             
38             
39             //signed char str[200];
40             signed char stackBuf[BUF_SIZE];
41             signed char *buf = 0;
42             size_t nativesize = size;
43             off_t nativeoffset =offset;
44             if (nativesize > BUF_SIZE){
45                 buf = malloc(nativesize);
46                 if (buf == 0) {
47                    JNU_ThrowOutOfMemoryError(env, 0);
48                    return; 
49                 }
50             }
51             else buf = stackBuf;
52            
53
54             jclass cls2 = (*env) ->GetObjectClass(env, fobj);
55
56
57             jfieldID fid3 = (*env)->GetFieldID(env, cls2,"fd", "I");
58
59             jobject fp = (*env)->GetIntField(env, fobj, fid3); 
60
61             int res =  pread((int)fp, buf,nativesize ,nativeoffset);
62
63             (*env) -> SetByteArrayRegion(env, buff, 0, res, buf);
64
65             return res;
66         }
67
68         JNIEXPORT jint JNICALL Java_TransactionalIO_core_ExtendedTransaction_nativepwrite(JNIEnv *env, jobject obj2, jbyteArray buff, jlong offset, jint size, jobject fobj )   {
69
70             jbyteArray str;
71             size_t nativesize = (*env)->GetArrayLength(env, buff);
72             off_t nativeoffset =offset;
73            
74
75             jclass cls2 = (*env) ->GetObjectClass(env, fobj);
76
77             str = (*env) -> GetByteArrayElements(env, buff, NULL);
78
79             jfieldID fid3 = (*env)->GetFieldID(env, cls2,"fd", "I");
80
81             jobject fp = (*env)->GetIntField(env, fobj, fid3); 
82
83             int res =  pwrite((int)fp, str,nativesize ,nativeoffset);
84
85
86             return res;
87         }