示例#1
0
JNIEXPORT void JNICALL Java_jtux_UProcess_execvp(JNIEnv *env, jclass obj, jstring s, jobjectArray a)
{
	JSTR_GET_DECL(s_c, s)
	const char **argv = NULL;
	int i, argc;
	jsize array_size = (*env)->GetArrayLength(env, a);
	jobject arg;

	JSTR_NULLTEST(s_c)
	for (argc = 0; argc < array_size && (*env)->GetObjectArrayElement(env, a, argc) != NULL; argc++)
		;
	argv = malloc((argc + 1) * sizeof(char *));
	if (argv == NULL) {
		(void)setup_throw_errno(env, errno);
		return;
	}
	for (i = 0; i < argc; i++) {
		arg = (*env)->GetObjectArrayElement(env, a, i);
		if ((*env)->ExceptionCheck(env)) { // why isn't this a check on arg == NULL?
			free(argv);
			JSTR_REL(s_c, s)
			return;
		}
		argv[i] = (*env)->GetStringUTFChars(env, arg, NULL);
	}
示例#2
0
JNIEXPORT void JNICALL Java_jtux_UUtil_check_1type_1sizes(JNIEnv *env, jclass obj)
{
	bool ok = true;
	/*
		All assumptions about suitability of Java primitive types for POSIX/SUS types
		must be tested here.
	*/
	if (sizeof(jlong) < sizeof(long)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(long)\n");
	}
	if (sizeof(jlong) < sizeof(void *)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(void *)\n");
	}
	if (sizeof(jint) < sizeof(int)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(int)\n");
	}
	if (sizeof(jshort) < sizeof(short)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jshort) < sizeof(short)\n");
	}
	if (sizeof(jlong) < sizeof(clock_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(clock_t)\n");
	}
	if (sizeof(jlong) < sizeof(gid_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(gid_t)\n");
	}
	if (sizeof(jlong) < sizeof(pid_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(pid_t)\n");
	}
	if (sizeof(jlong) < sizeof(uid_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(uid_t)\n");
	}
	if (sizeof(jlong) < sizeof(rlim_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(rlim_t)\n");
	}
	if (sizeof(jlong) < sizeof(time_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(time_t)\n");
	}
	if (sizeof(jlong) < sizeof(suseconds_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(suseconds_t)\n");
	}
	if (sizeof(jlong) < sizeof(useconds_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(useconds_t)\n");
	}
	if (sizeof(jlong) < sizeof(off_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(off_t)\n");
	}
	if (sizeof(jlong) < sizeof(fsfilcnt_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(fsfilcnt_t)\n");
	}
	if (sizeof(jlong) < sizeof(fsblkcnt_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(fsblkcnt_t)\n");
	}
	//if (sizeof(jint) < sizeof(size_t)) {
	//	ok = false;
	//	fprintf(stderr, "Type size error: sizeof(jint) < sizeof(size_t)\n");
	//}
	//if (sizeof(jint) < sizeof(ssize_t)) {
	//	ok = false;
	//	fprintf(stderr, "Type size error: sizeof(jint) < sizeof(ssize_t)\n");
	//}
	if (sizeof(jint) < sizeof(mode_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jint) < sizeof(mode_t)\n");
	}
	if (sizeof(jint) < sizeof(int)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jint) < sizeof(int)\n");
	}
	//if (sizeof(jint) < sizeof(ino_t)) {
	//	ok = false;
	//	fprintf(stderr, "Type size error: sizeof(jint) < sizeof(ino_t)\n");
	//}
	//if (sizeof(jint) < sizeof(nlink_t)) {
	//	ok = false;
	//	fprintf(stderr, "Type size error: sizeof(jint) < sizeof(nlink_t)\n");
	//}
	//if (sizeof(jint) < sizeof(blksize_t)) {
	//	ok = false;
	//	fprintf(stderr, "Type size error: sizeof(jint) < sizeof(blksize_t)\n");
	//}
	if (sizeof(jlong) < sizeof(blkcnt_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(blkcnt_t)\n");
	}
	//if (sizeof(jint) < sizeof(nfds_t)) {
	//	ok = false;
	//	fprintf(stderr, "Type size error: sizeof(jint) < sizeof(nfds_t)\n");
	//}
	if (sizeof(jlong) < sizeof(key_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(key_t)\n");
	}
	//if (sizeof(jint) < sizeof(msgqnum_t)) {
	//	ok = false;
	//	fprintf(stderr, "Type size error: sizeof(jint) < sizeof(msgqnum_t)\n");
	//}
	//if (sizeof(jint) < sizeof(msglen_t)) {
	//	ok = false;
	//	fprintf(stderr, "Type size error: sizeof(jint) < sizeof(msglen_t)\n");
	//}
	if (sizeof(jlong) < sizeof(mqd_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jlong) < sizeof(mqd_t)\n");
	}
	if (sizeof(jint) < sizeof(socklen_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jint) < sizeof(socklen_t)\n");
	}
	if (sizeof(jint) < sizeof(sa_family_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jint) < sizeof(sa_family_t)\n");
	}
	if (sizeof(jshort) < sizeof(in_port_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jshort) < sizeof(in_port_t)\n");
	}
	if (sizeof(jint) < sizeof(in_addr_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(jint) < sizeof(in_addr_t)\n");
	}
	/*
		Assuming C ints (not only jints) are at least 32-bits, because of the int
		argument to field_ctoj_int.
	*/
	if (sizeof(int) < sizeof(in_addr_t)) {
		ok = false;
		fprintf(stderr, "Type size error: sizeof(int) < sizeof(in_addr_t)\n");
	}
	//if (sizeof(int) < sizeof(ino_t)) {
	//	ok = false;
	//	fprintf(stderr, "Type size error: sizeof(int) < sizeof(ino_t)\n");
	//}
	if (!ok)
		setup_throw_errno(env, ENOSYS);
}