Пример #1
0
int			intersect_sphere(t_ray *r, t_prim *o, double *t)
{
	double		a;
	double		b;
	double		c;
	double		discr;
	t_vector	dist;

	dist = vsub(r->loc, o->loc);
	a = vdot(r->dir, r->dir);
	b = 2.0 * vdot(r->dir, dist);
	c = vdot(dist, dist) - (o->radius * o->radius);
	discr = b * b - 4.0 * a * c;
	if (discr < EPSILON)
		return (0);
	return (find_t(a, b, discr, t));
}
Пример #2
0
static struct iptables_target *
get_target_name(char *name)
{
	void *handle;
	char *error;
	char *new_name, *lname;
	struct iptables_target *m;

	char path[sizeof (IPT_LIB_DIR) + sizeof ("/libipt_.so") + strlen(name)];

	new_name = malloc(strlen(name) + 1);
	lname = malloc(strlen(name) + 1);
	if (new_name)
		memset(new_name, '\0', strlen(name) + 1);
	else
		exit_error(PARAMETER_PROBLEM, "get_target_name");

	if (lname)
		memset(lname, '\0', strlen(name) + 1);
	else
		exit_error(PARAMETER_PROBLEM, "get_target_name");

	strcpy(new_name, name);
	strcpy(lname, name);

	if (isupper(lname[0])) {
		int i;
		for (i = 0; i < strlen(name); i++) {
			lname[i] = tolower(lname[i]);
		}
	}

	if (islower(new_name[0])) {
		int i;
		for (i = 0; i < strlen(new_name); i++) {
			new_name[i] = toupper(new_name[i]);
		}
	}

	sprintf(path, IPT_LIB_DIR "/libipt_%s.so", new_name);
	handle = dlopen(path, RTLD_LAZY);
	if (!handle) {
		sprintf(path, IPT_LIB_DIR "/libipt_%s.so", lname);
		handle = dlopen(path, RTLD_LAZY);
		if (!handle) {
			fputs(dlerror(), stderr);
			printf("\n");
			return NULL;
		}
	}

	m = dlsym(handle, new_name);
	if ((error = dlerror()) != NULL) {
		m = (struct iptables_target *) dlsym(handle, lname);
		if ((error = dlerror()) != NULL) {
			m = find_t(new_name);
			if (NULL == m) {
				m = find_t(lname);
				if (NULL == m) {
					fputs(error, stderr);
					fprintf(stderr, "\n");
					dlclose(handle);
					return NULL;
				}
			}
		}
	}

	return m;
}
Пример #3
0
static struct xtables_target *
get_target_name(const char *name)
{
	void *handle;
	char *error;
	char *new_name, *lname;
	struct xtables_target *m;
	char path[strlen(lib_dir) + sizeof("/libipt_.so") + strlen(name)];

#ifdef NO_SHARED_LIBS
	return NULL;
#endif

	new_name = calloc(1, strlen(name) + 1);
	lname = calloc(1, strlen(name) + 1);
	if (!new_name)
		exit_error(PARAMETER_PROBLEM, "get_target_name");
	if (!lname)
		exit_error(PARAMETER_PROBLEM, "get_target_name");

	strcpy(new_name, name);
	strcpy(lname, name);

	if (isupper(lname[0])) {
		int i;

		for (i = 0; i < strlen(name); i++) {
			lname[i] = tolower(lname[i]);
		}
	}

	if (islower(new_name[0])) {
		int i;

		for (i = 0; i < strlen(new_name); i++) {
			new_name[i] = toupper(new_name[i]);
		}
	}

	/* try libxt_xx first */
	sprintf(path, "%s/libxt_%s.so", lib_dir, new_name);
	handle = dlopen(path, RTLD_LAZY);
	if (!handle) {
		/* try libipt_xx next */
		sprintf(path, "%s/libipt_%s.so", lib_dir, new_name);
		handle = dlopen(path, RTLD_LAZY);

		if (!handle) {
			sprintf(path, "%s/libxt_%s.so", lib_dir, lname);
			handle = dlopen(path, RTLD_LAZY);
		}

		if (!handle) {
			sprintf(path, "%s/libipt_%s.so", lib_dir, lname);
			handle = dlopen(path, RTLD_LAZY);
		}
		/* ok, lets give up .. */
		if (!handle) {
			fputs(dlerror(), stderr);
			printf("\n");
			free(new_name);
			free(lname);
			return NULL;
		}
	}

	m = dlsym(handle, new_name);
	if ((error = dlerror()) != NULL) {
		m = (struct xtables_target *) dlsym(handle, lname);
		if ((error = dlerror()) != NULL) {
			m = find_t(new_name);
			if (m == NULL) {
				m = find_t(lname);
				if (m == NULL) {
					fputs(error, stderr);
					fprintf(stderr, "\n");
					dlclose(handle);
					free(new_name);
					free(lname);
					return NULL;
				}
			}
		}
	}

	free(new_name);
	free(lname);
	return m;
}