Ejemplo n.º 1
0
JNIEXPORT void JNICALL Java_jtux_UClock_nanosleep(JNIEnv *env, jclass obj,
        jobject nsecs, jobject remain)
{
    jclass cls_timespec = (*env)->FindClass(env, "jtux/UProcess$s_timespec");
    struct timespec nsecs_c, remain_buf, *remain_c = &remain_buf;
    int r;
    long sec;

    if (remain == NULL)
        remain_c = NULL;
    if (!field_jtoc_long(env, cls_timespec, "tv_sec", nsecs, &sec))
        return;
    nsecs_c.tv_sec = (time_t)sec;
    if (!field_jtoc_long(env, cls_timespec, "tv_nsec", nsecs, &nsecs_c.tv_nsec))
        return;
    r = nanosleep(&nsecs_c, remain_c);
    if (r != 0 && remain_c != NULL) {
        if (!field_ctoj_long(env, cls_timespec, "tv_sec", remain, remain_c->tv_sec))
            return;
        if (!field_ctoj_long(env, cls_timespec, "tv_nsec", remain, remain_c->tv_nsec))
            return;
    }
    if (r == -1)
        JTHROW_neg1(-1);
}
Ejemplo n.º 2
0
static bool field_jtoc_perm(JNIEnv *env, jclass cls, const char *field, jobject obj,
  struct ipc_perm *perm)
{
	jfieldID fid;
	jclass clsperm = (*env)->FindClass(env, "jtux/USysVIPC$s_ipc_perm");
	jobject objperm;
	int mode;

	if (cls == NULL || clsperm == NULL)
		return false;
	if ((fid = (*env)->GetFieldID(env, cls, field, "Ljtux/USysVIPC$s_ipc_perm;")) == NULL)
		return false;
	if ((objperm = (*env)->GetObjectField(env, obj, fid)) == NULL) {
		JNU_ThrowByName(env, "NullPointerException", "s_ipc_perm field not initialized");
		return false;
	}
	if (!field_jtoc_long(env, clsperm, "uid", objperm, &perm->uid))
		return false;
	if (!field_jtoc_long(env, clsperm, "gid", objperm, &perm->gid))
		return false;
	if (!field_jtoc_long(env, clsperm, "cuid", objperm, &perm->cuid))
		return false;
	if (!field_jtoc_long(env, clsperm, "cgid", objperm, &perm->cgid))
		return false;
	if (!field_jtoc_int(env, clsperm, "mode", objperm, &mode))
		return false;
	perm->mode = mode;
	return true;
}