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)); }
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; }
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; }