changes.
[IRC.git] / Robust / Transactions / NativeFunctions.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         
17         JNIEXPORT jlong JNICALL Java_TransactionalIO_core_TransactionalFileWrapperFactory_getINodeNative
18             (JNIEnv *env, jobject obj, jstring filename) 
19         {
20             struct stat status_buf;
21             jlong inodenum;
22            // stat("/home/navid/myfile.txt",&status_buf);
23             char *str = (*env)->GetStringUTFChars(env, filename, 0);
24 //          printf("\n");
25 //          printf("File Name is: %s \n", str);
26             if (stat(str,&status_buf)<0)
27                 inodenum = -1;   
28             else
29             {
30 //                  printf("Inode number is: %lu \n", status_buf.st_ino);
31                     inodenum = status_buf.st_ino;
32             }
33             (*env)->ReleaseStringUTFChars(env, filename, str);
34             return inodenum;
35         }
36
37         
38         JNIEXPORT jint JNICALL Java_TransactionalIO_core_TransactionalFile_nativepread(JNIEnv *env, jobject obj2, jbyteArray buff, jlong offset, jint size, jobject fobj )      {
39             signed char str[200];
40             size_t nativesize = size;
41             off_t nativeoffset =offset;
42            
43
44             jclass cls2 = (*env) ->GetObjectClass(env, fobj);
45
46
47             jfieldID fid3 = (*env)->GetFieldID(env, cls2,"fd", "I");
48
49             jobject fp = (*env)->GetIntField(env, fobj, fid3); 
50
51             int res =  pread((int)fp, str,nativesize ,nativeoffset);
52
53             (*env) -> SetByteArrayRegion(env, buff, 0, res, str);
54
55             return res;
56         }
57
58         JNIEXPORT jint JNICALL Java_TransactionalIO_core_ExtendedTransaction_nativepwrite(JNIEnv *env, jobject obj2, jbyteArray buff, jlong offset, jint size, jobject fobj )   {
59
60             jbyteArray str;
61             size_t nativesize = (*env)->GetArrayLength(env, buff);
62             off_t nativeoffset =offset;
63            
64
65             jclass cls2 = (*env) ->GetObjectClass(env, fobj);
66
67             str = (*env) -> GetByteArrayElements(env, buff, NULL);
68
69             jfieldID fid3 = (*env)->GetFieldID(env, cls2,"fd", "I");
70
71             jobject fp = (*env)->GetIntField(env, fobj, fid3); 
72
73             int res =  pwrite((int)fp, str,nativesize ,nativeoffset);
74
75
76             return res;
77         }