static bool compile(const void *ctx, struct manifest *m, struct ccan_file *file, char **output) { file->compiled[COMPILE_NORMAL] = temp_file(ctx, "", file->fullname); if (!compile_and_link(ctx, file->fullname, ccan_dir, example_obj_list(m, file), compiler, cflags, lib_list(m), file->compiled[COMPILE_NORMAL], output)) { /* Don't keep failures, even with --keep */ unlink(file->compiled[COMPILE_NORMAL]); file->compiled[COMPILE_NORMAL] = NULL; return false; } return true; }
static int foreach_func (const char *filename, lt_ptr data) { GPPortInfoList *list = data; lt_dlhandle lh; GPPortLibraryType lib_type; GPPortLibraryList lib_list; GPPortType type; unsigned int j, old_size = list->count; int result; gp_log (GP_LOG_DEBUG, "gphoto2-port-info-list", _("Called for filename '%s'."), filename ); lh = lt_dlopenext (filename); if (!lh) { gp_log (GP_LOG_DEBUG, "gphoto2-port-info-list", _("Could not load '%s': '%s'."), filename, lt_dlerror ()); return (0); } lib_type = lt_dlsym (lh, "gp_port_library_type"); lib_list = lt_dlsym (lh, "gp_port_library_list"); if (!lib_type || !lib_list) { gp_log (GP_LOG_DEBUG, "gphoto2-port-info-list", _("Could not find some functions in '%s': '%s'."), filename, lt_dlerror ()); lt_dlclose (lh); return (0); } type = lib_type (); for (j = 0; j < list->count; j++) if (list->info[j].type == type) break; if (j != list->count) { gp_log (GP_LOG_DEBUG, "gphoto2-port-info-list", _("'%s' already loaded"), filename); lt_dlclose (lh); return (0); } result = lib_list (list); lt_dlclose (lh); if (result < 0) { gp_log (GP_LOG_DEBUG, "gphoto2-port-info-list", _("Could not load port driver list: '%s'."), gp_port_result_as_string (result)); return (0); } for (j = old_size; j < list->count; j++){ gp_log (GP_LOG_DEBUG, "gphoto2-port-info-list", _("Loaded '%s' ('%s') from '%s'."), list->info[j].name, list->info[j].path, filename); strcpy (list->info[j].library_filename, filename); } return (0); }