コード例 #1
0
ファイル: FUSE26Util.cpp プロジェクト: unsound/jfuse
/**
 * Merges the contents of source (Java class Utimbuf) with the supplied
 * struct utimbuf.
 */
bool FUSE26Util::mergeUtimbuf(JNIEnv *env, jobject source, struct utimbuf *target) {
    CSLogTraceEnter("bool FUSE26Util::mergeUtimbuf(%p, %p, %p)", env, source, target);
    bool res = false;
    do {
        jclass clazz = env->GetObjectClass(source);
        if(clazz == NULL || env->ExceptionCheck() == JNI_TRUE) {
            CSLogError("Could not get object class!");
            if(env->ExceptionCheck())
                env->ExceptionDescribe();
            break;
        }

        jlong actime;
        jlong modtime;

        if(!getLongField(env, clazz, source, "actime", &actime))
            break;
        if(!getLongField(env, clazz, source, "modtime", &modtime))
            break;

        target->actime = actime;
        target->modtime = modtime;

        res = true;
    }
    while(0);

    CSLogTraceLeave("bool FUSE26Util::mergeUtimbuf(%p, %p, %p): %d", env, source, target, res);
    return res;
}
コード例 #2
0
ファイル: FUSE26Util.cpp プロジェクト: unsound/jfuse
bool FUSE26Util::mergeFUSEFileInfo(JNIEnv *env, jobject ffiObject, struct fuse_file_info *target) {
    CSLogTraceEnter("bool FUSE26Util::mergeFUSEFileInfo(%p, %p, %p)", env, ffiObject, target);
    bool res = false;
    do {
        //LOG_DEBUG("    - Getting class Stat");
        //jclass statClass = env->FindClass(env, "org/catacombae/jfuse/Stat");
        jclass ffiClass = env->GetObjectClass(ffiObject);
        if(ffiClass == NULL || env->ExceptionCheck() == JNI_TRUE) {
            CSLogError("Could not get object class!");
            if(env->ExceptionCheck())
                env->ExceptionDescribe();
            break;
        }
        //LOG_DEBUG("      - statClass: %X", (int)statClass);
        //LOG_DEBUG("    - Getting field id for st_mode");

        jint flags;
        jlong fh_old;
        jint writepage;
        jboolean direct_io;
        jboolean keep_cache;
        jboolean flush;
        jlong fh;
        jlong lock_owner;

        if(!getIntField(env, ffiClass, ffiObject, "flags", &flags))
            break;
        if(!getLongField(env, ffiClass, ffiObject, "fh_old", &fh_old))
            break;
        if(!getIntField(env, ffiClass, ffiObject, "writepage", &writepage))
            break;
        if(!getBooleanField(env, ffiClass, ffiObject, "direct_io", &direct_io))
            break;
        if(!getBooleanField(env, ffiClass, ffiObject, "keep_cache", &keep_cache))
            break;
        if(!getBooleanField(env, ffiClass, ffiObject, "flush", &flush))
            break;
        if(!getLongField(env, ffiClass, ffiObject, "fh", &fh))
            break;
        if(!getLongField(env, ffiClass, ffiObject, "lock_owner", &lock_owner))
            break;

        target->flags = flags;
        target->fh_old = fh_old;
        target->writepage = writepage;
        target->direct_io = direct_io;
        target->keep_cache = keep_cache;
        target->flush = flush;
        target->fh = fh;
        target->lock_owner = lock_owner;
        
        res = true;
    }
    while(0);

    CSLogTraceLeave("bool FUSE26Util::mergeFUSEFileInfo(%p, %p, %p): %d", env, ffiObject, target, res);
    return res;
}
コード例 #3
0
ファイル: FUSE26Util.cpp プロジェクト: unsound/jfuse
/**
 * Merges the contents of source (Java class LongRef) with the supplied
 * uint64_t.
 */
bool FUSE26Util::mergeLongRef(JNIEnv *env, jobject source, uint64_t *target) {
    CSLogTraceEnter("bool FUSE26Util::mergeLongRef(%p, %p, %p)", env, source, target);
    bool res = false;
    do {
        jclass clazz = env->GetObjectClass(source);
        if(clazz == NULL || env->ExceptionCheck() == JNI_TRUE) {
            CSLogError("Could not get object class!");
            if(env->ExceptionCheck())
                env->ExceptionDescribe();
            break;
        }

        jlong ref;

        if(!getLongField(env, clazz, source, "ref", &ref))
            break;

        *target = ref;

        res = true;
    }
    while(0);

    CSLogTraceLeave("bool FUSE26Util::mergeLongRef(%p, %p, %p): %d", env, source, target, res);
    return res;
}
コード例 #4
0
ファイル: FUSE26Util.cpp プロジェクト: unsound/jfuse
/**
 * Merges the contents of source (Java class LongRef) with the supplied
 * uint64_t.
 */
bool FUSE26Util::mergeFUSEConnInfo(JNIEnv *env, jobject source, struct fuse_conn_info *target) {
    CSLogTraceEnter("bool FUSE26Util::mergeFUSEConnInfo(%p, %p, %p)", env, source, target);
    bool res = false;
    do {
        jclass clazz = env->GetObjectClass(source);
        if(clazz == NULL || env->ExceptionCheck() == JNI_TRUE) {
            CSLogError("Could not get object class!");
            if(env->ExceptionCheck())
                env->ExceptionDescribe();
            break;
        }

        jlong proto_major;
        jlong proto_minor;
        jboolean async_read;
        jlong max_write;
        jlong max_readahead;

        if(!getLongField(env, clazz, source, "proto_major", &proto_major))
            break;
        if(!getLongField(env, clazz, source, "proto_minor", &proto_minor))
            break;
        if(!getBooleanField(env, clazz, source, "async_read", &async_read))
            break;
        if(!getLongField(env, clazz, source, "max_write", &max_write))
            break;
        if(!getLongField(env, clazz, source, "max_readahead", &max_readahead))
            break;

        target->proto_major = proto_major;
        target->proto_minor = proto_minor;
        target->async_read = (async_read == JNI_TRUE ? 1 : 0);
        target->max_write = max_write;
        target->max_readahead = max_readahead;

        res = true;
    }
    while(0);

    CSLogTraceLeave("bool FUSE26Util::mergeFUSEConnInfo(%p, %p, %p): %d", env, source, target, res);
    return res;
}
コード例 #5
0
ファイル: FUSE26Util.cpp プロジェクト: unsound/jfuse
/**
 * Merges the contents of source (Java class Flock) with the supplied
 * struct flock.
 */
bool FUSE26Util::mergeFlock(JNIEnv *env, jobject source, struct flock *target) {
    CSLogTraceEnter("bool FUSE26Util::mergeFlock(%p, %p, %p)", env, source, target);
    bool res = false;
    do {
        jclass clazz = env->GetObjectClass(source);
        if(clazz == NULL || env->ExceptionCheck() == JNI_TRUE) {
            CSLogError("Could not get object class!");
            if(env->ExceptionCheck())
                env->ExceptionDescribe();
            break;
        }

        jlong start;
        jlong len;
        jlong pid;
        jshort type;
        jshort whence;

        if(!getLongField(env, clazz, source, "start", &start))
            break;
        if(!getLongField(env, clazz, source, "len", &len))
            break;
        if(!getLongField(env, clazz, source, "pid", &pid))
            break;
        if(!getShortField(env, clazz, source, "type", &type))
            break;
        if(!getShortField(env, clazz, source, "whence", &whence))
            break;

        target->l_start = start;
        target->l_len = len;
        target->l_pid = pid;
        target->l_type = type;
        target->l_whence = whence;
        
        res = true;
    }
    while(0);

    CSLogTraceLeave("bool FUSE26Util::mergeFlock(%p, %p, %p): %d", env, source, target, res);
    return res;
}
コード例 #6
0
ファイル: field.c プロジェクト: achun2080/knife
jobject getFieldValue(JNIEnv * env, jobject obj, jclass fieldClass,
		jfieldID fieldId) {
	char* signature;
	(*jvmti)->GetClassSignature(jvmti, fieldClass, &signature, 0 );
	if (strcmp(signature, "Z") == 0) {
		return getBooleanField(env, obj, fieldId);
	} else if (strcmp(signature, "B") == 0) {
		return getByteField(env, obj, fieldId);
	} else if (strcmp(signature, "C") == 0) {
		return getCharField(env, obj, fieldId);
	} else if (strcmp(signature, "S") == 0) {
		return getShortField(env, obj, fieldId);
	} else if (strcmp(signature, "I") == 0) {
		return getIntField(env, obj, fieldId);
	} else if (strcmp(signature, "J") == 0) {
		return getLongField(env, obj, fieldId);
	} else if (strcmp(signature, "F") == 0) {
		return getFloatField(env, obj, fieldId);
	} else if (strcmp(signature, "D") == 0) {
		return getDoubleField(env, obj, fieldId);
	} else {
		return getObjectField(env, obj, fieldId);
	}
}
コード例 #7
0
ファイル: FUSE26Util.cpp プロジェクト: unsound/jfuse
/**
 * Merges the contents of source (Java class StatVFS) with the supplied
 * struct statvfs.
 */
bool FUSE26Util::mergeStatVFS(JNIEnv *env, jobject source, struct statvfs *target) {
    CSLogTraceEnter("bool FUSE26Util::mergeStatVFS(%p, %p, %p)", env, source, target);
    bool res = false;
    do {
        jclass clazz = env->GetObjectClass(source);
        if(clazz == NULL || env->ExceptionCheck() == JNI_TRUE) {
            CSLogError("Could not get object class!");
            if(env->ExceptionCheck())
                env->ExceptionDescribe();
            break;
        }

        jlong f_bsize;
        jlong f_frsize;
        jlong f_blocks;
        jlong f_bfree;
        jlong f_bavail;
        jlong f_files;
        jlong f_ffree;
        jlong f_favail;
        jlong f_fsid;
        jlong f_flag;
        jlong f_namemax;

        if(!getLongField(env, clazz, source, "f_bsize", &f_bsize))
            break;
        if(!getLongField(env, clazz, source, "f_frsize", &f_frsize))
            break;
        if(!getLongField(env, clazz, source, "f_blocks", &f_blocks))
            break;
        if(!getLongField(env, clazz, source, "f_bfree", &f_bfree))
            break;
        if(!getLongField(env, clazz, source, "f_bavail", &f_bavail))
            break;
        if(!getLongField(env, clazz, source, "f_files", &f_files))
            break;
        if(!getLongField(env, clazz, source, "f_ffree", &f_ffree))
            break;
        if(!getLongField(env, clazz, source, "f_favail", &f_favail))
            break;
        if(!getLongField(env, clazz, source, "f_fsid", &f_fsid))
            break;
        if(!getLongField(env, clazz, source, "f_flag", &f_flag))
            break;
        if(!getLongField(env, clazz, source, "f_namemax", &f_namemax))
            break;

        target->f_bsize = f_bsize;
        target->f_frsize = f_frsize;
        target->f_blocks = f_blocks;
        target->f_bfree = f_bfree;
        target->f_bavail = f_bavail;
        target->f_files = f_files;
        target->f_ffree = f_ffree;
        target->f_favail = f_favail;
        target->f_fsid = f_fsid;
        target->f_flag = f_flag;
        target->f_namemax = f_namemax;

        res = true;
    }
    while(0);

    CSLogTraceLeave("bool FUSE26Util::mergeStatVFS(%p, %p, %p): %d", env, source, target, res);
    return res;
}
コード例 #8
0
ファイル: FUSE26Util.cpp プロジェクト: unsound/jfuse
/**
 * Merges the contents of statObject into the struct stat target.
 */
bool FUSE26Util::mergeStat(JNIEnv *env, jobject statObject, struct stat *target) {
    CSLogTraceEnter("bool FUSE26Util::mergeStat(%p, %p, %p)", env, statObject, target);

    bool res = false;
    do {
        //LOG_DEBUG("    - Getting class Stat");
        //jclass statClass = env->FindClass(env, "org/catacombae/jfuse/Stat");
        jclass statClass = env->GetObjectClass(statObject);
        if(statClass == NULL || env->ExceptionCheck() == JNI_TRUE) {
            CSLogError("Could not get object class!");
            if(env->ExceptionCheck())
                env->ExceptionDescribe();
            break;
        }
        //LOG_DEBUG("      - statClass: %X", (int)statClass);
        //LOG_DEBUG("    - Getting field id for st_mode");

        jlong jl_dev;
        jlong jl_ino;
        jlong jl_mode;
        jlong jl_nlink;
        jlong jl_uid;
        jlong jl_gid;
        jlong jl_rdev;
        jobject jl_atimespec;
        jobject jl_mtimespec;
        jobject jl_ctimespec;
        jlong jl_size;
        jlong jl_blocks;
        jlong jl_blocksize;
        jlong jl_flags;
        jlong jl_gen;

        if(!getLongField(env, statClass, statObject, "st_dev", &jl_dev))
            break;
        if(!getLongField(env, statClass, statObject, "st_ino", &jl_ino))
            break;
        if(!getLongField(env, statClass, statObject, "st_mode", &jl_mode))
            break;
        if(!getLongField(env, statClass, statObject, "st_nlink", &jl_nlink))
            break;
        if(!getLongField(env, statClass, statObject, "st_uid", &jl_uid))
            break;
        if(!getLongField(env, statClass, statObject, "st_gid", &jl_gid))
            break;
        if(!getLongField(env, statClass, statObject, "st_rdev", &jl_rdev))
            break;
        if(!getObjectField(env, statClass, statObject, "st_atimespec",
                JAVA_CLASS(TIMESPEC_CLASS), &jl_atimespec))
            break;
        if(!getObjectField(env, statClass, statObject, "st_mtimespec",
                JAVA_CLASS(TIMESPEC_CLASS), &jl_mtimespec))
            break;
        if(!getObjectField(env, statClass, statObject, "st_ctimespec",
                JAVA_CLASS(TIMESPEC_CLASS), &jl_ctimespec))
            break;
        if(!getLongField(env, statClass, statObject, "st_size", &jl_size))
            break;
        if(!getLongField(env, statClass, statObject, "st_blocks", &jl_blocks))
            break;
        if(!getLongField(env, statClass, statObject, "st_blocksize", &jl_blocksize))
            break;
        if(!getLongField(env, statClass, statObject, "st_flags", &jl_flags))
            break;
        if(!getLongField(env, statClass, statObject, "st_gen", &jl_gen))
            break;

        struct timespec tmp_st_atimespec, tmp_st_mtimespec, tmp_st_ctimespec;
        if(!FUSE26Util::mergeTimespec(env, jl_atimespec, &tmp_st_atimespec))
            break;
        if(!FUSE26Util::mergeTimespec(env, jl_mtimespec, &tmp_st_mtimespec))
            break;
        if(!FUSE26Util::mergeTimespec(env, jl_ctimespec, &tmp_st_ctimespec))
            break;

        target->st_dev = jl_dev;
        target->st_ino = jl_ino;
        target->st_mode = jl_mode;
        target->st_nlink = jl_nlink;
        target->st_uid = jl_uid;
        target->st_gid = jl_gid;
        target->st_rdev = jl_rdev;
#if defined(__linux__) || defined(__sun__)
        target->st_atim = tmp_st_atimespec;
        target->st_mtim = tmp_st_mtimespec;
        target->st_ctim = tmp_st_ctimespec;
#else
        target->st_atimespec = tmp_st_atimespec;
        target->st_mtimespec = tmp_st_mtimespec;
        target->st_ctimespec = tmp_st_ctimespec;
#endif
        target->st_size = jl_size;
        target->st_blocks = jl_blocks;
        target->st_blksize = jl_blocksize;
#if !defined(__linux__) && !defined(__sun__)
        target->st_flags = jl_flags;
        target->st_gen = jl_gen;
#endif

        res = true;
    }
    while(0);

    CSLogTraceLeave("bool FUSE26Util::mergeStat(%p, %p, %p): %d", env, statObject, target, true);
    return res;
}