Lines Matching +full:dlclose +full:- +full:skip
1 /* sane - Scanner Access Now Easy.
2 Copyright (C) 1996, 1997 David Mosberger-Tang
80 # pragma GCC diagnostic ignored "-Wpedantic"
93 the pointed-to type, the behavior is undefined. Although GCC is
101 # pragma GCC diagnostic ignored "-Wpragmas" /* backward compatibility */
102 # pragma GCC diagnostic ignored "-Wcast-function-type"
125 # include <mach-o/dyld.h>
249 #include "dll-preload.h"
312 DBG (0, "add_backend: remove the dll-backend from your dll.conf!\n"); in add_backend()
316 for (prev = 0, be = first_backend; be; prev = be, be = be->next) in add_backend()
317 if (strcmp (be->name, name) == 0) in add_backend()
324 prev->next = be->next; in add_backend()
325 be->next = first_backend; in add_backend()
337 be->name = strdup (name); in add_backend()
338 if (!be->name) in add_backend()
340 be->next = first_backend; in add_backend()
369 /* use BeOS kernel function to load scanner addons from ~/config/add-ons/SANE */ in load()
371 image_id id = -1; in load()
379 strcat(path,be->name); in load()
380 DBG(1, "loading backend %s\n", be->name); in load()
384 be->loaded = 1; in load()
385 be->handle = 0; in load()
386 for (i = 0; i < NUM_OPS; ++i) be->op[i] = op_unsupported; in load()
393 be->handle=(void *)id; in load()
402 else be->op[i]=op; in load()
426 # define PREFIX "libsane-" in load()
432 # define PREFIX "cygsane-" in load()
433 # define POSTFIX "-%u.dll" in load()
445 # define PREFIX "libsane-" in load()
449 # define PREFIX "libsane-" in load()
458 be->loaded = 1; in load()
459 be->handle = 0; in load()
461 be->op[i] = op_unsupported; in load()
465 path = getenv ("SHLIB_PATH"); /* for HP-UX */ in load()
490 DBG (3, "load: searching backend `%s' in `%s'\n", be->name, src); in load()
499 dir, be->name, strlen(be->name)>7 ? (be->name)+strlen(be->name)-5 : in load()
500 (be->name)+2, V_MAJOR); in load()
503 dir, be->name, V_MAJOR); in load()
515 dir, be->name, V_MAJOR); in load()
530 be->name, strerror (errno)); in load()
537 be->handle = dlopen (libname, mode); in load()
539 be->handle = (shl_t) shl_load (libname, mode, 0L); in load()
546 be->handle = NSLinkModule (objectfile_img, libname, mode); in load()
553 if (!be->handle) in load()
565 /* all is dandy---lookup and fill in backend ops: */ in load()
566 funcname = alloca (strlen (be->name) + 64); in load()
571 sprintf (funcname, "_sane_%s_%s", be->name, op_name[i]); in load()
575 op = posix_dlsym (be->handle, funcname + 1); in load()
577 shl_findsym ((shl_t *) & (be->handle), funcname + 1, TYPE_UNDEFINED, in load()
581 NSSymbol *nssym = NSLookupSymbolInModule (be->handle, funcname); in load()
595 be->op[i] = op; in load()
600 op = posix_dlsym (be->handle, funcname); in load()
602 shl_findsym (be->handle, funcname, TYPE_UNDEFINED, &op); in load()
605 NSSymbol *nssym = NSLookupSymbolInModule (be->handle, funcname); in load()
619 be->op[i] = op; in load()
632 be->name); in load()
644 if (!be->loaded) in init()
651 DBG (3, "init: initializing backend `%s'\n", be->name); in init()
653 status = (*(op_init_t)be->op[OP_INIT]) (&version, auth_callback); in init()
661 be->name, SANE_VERSION_MAJOR (version), SANE_CURRENT_MAJOR); in init()
664 DBG (4, "init: backend `%s' is version %d.%d.%d\n", be->name, in init()
668 be->inited = 1; in init()
726 newlen = newend - newname; in add_alias()
735 oldlen = oldend - oldname; in add_alias()
740 alias->oldname = malloc (oldlen + newlen + 2); in add_alias()
741 if (alias->oldname) in add_alias()
743 strncpy (alias->oldname, oldname, oldlen); in add_alias()
744 alias->oldname[oldlen] = '\0'; in add_alias()
747 alias->newname = alias->oldname + oldlen + 1; in add_alias()
748 strncpy (alias->newname, newname, newlen); in add_alias()
749 alias->newname[newlen] = '\0'; in add_alias()
752 alias->newname = NULL; in add_alias()
754 alias->next = first_alias; in add_alias()
859 if (dllconf->d_name[0] == '.') in read_dlld()
862 len = strlen (dllconf->d_name); in read_dlld()
865 if ((dllconf->d_name[len-1] == '~') in read_dlld()
866 || (dllconf->d_name[len-1] == '#')) in read_dlld()
869 snprintf (conffile, sizeof(conffile), "%s/%s", dlldir, dllconf->d_name); in read_dlld()
922 /* Return the version number of the sane-backends package to allow in sane_init()
955 /* no ugly config files, just get scanners from their ~/config/add-ons/SANE */ in sane_init()
967 if((strcmp(dirent->d_name,".")==0) || (strcmp(dirent->d_name,"..")==0)) continue; in sane_init()
968 if((strcmp(dirent->d_name,"dll")==0)) continue; in sane_init()
969 add_backend(dirent->d_name,0); in sane_init()
988 next = be->next; in sane_exit()
989 if (be->loaded) in sane_exit()
991 if (be->inited) in sane_exit()
994 be->name); in sane_exit()
995 (*(op_exit_t)be->op[OP_EXIT]) (); in sane_exit()
998 /* use BeOS kernel functions to unload add-ons */ in sane_exit()
999 if(be->handle) unload_add_on((image_id)be->handle); in sane_exit()
1004 if (be->handle) in sane_exit()
1005 dlclose (be->handle); in sane_exit()
1007 if (be->handle) in sane_exit()
1008 shl_unload (be->handle); in sane_exit()
1010 if (be->handle) in sane_exit()
1011 NSUnLinkModule (be->handle, NSUNLINKMODULE_OPTION_NONE in sane_exit()
1023 if (!be->permanent) in sane_exit()
1025 if (be->name) in sane_exit()
1026 free ((void *) be->name); in sane_exit()
1031 be->inited = 0; in sane_exit()
1038 first_alias = first_alias->next; in sane_exit()
1039 free (alias->oldname); in sane_exit()
1060 appropriate for the command-line interface of SANE, for example.
1092 for (be = first_backend; be; be = be->next) in sane_get_devices()
1094 if (!be->inited) in sane_get_devices()
1098 status = (*(op_get_devs_t)be->op[OP_GET_DEVS]) (&be_list, local_only); in sane_get_devices()
1113 for (alias = first_alias; alias != NULL; alias = alias->next) in sane_get_devices()
1115 len = strlen (be->name); in sane_get_devices()
1116 if (strlen (alias->oldname) <= len) in sane_get_devices()
1118 if (strncmp (alias->oldname, be->name, len) == 0 in sane_get_devices()
1119 && alias->oldname[len] == ':' in sane_get_devices()
1120 && strcmp (&alias->oldname[len + 1], be_list[i]->name) == 0) in sane_get_devices()
1126 if (!alias->newname) /* hidden device */ in sane_get_devices()
1129 len = strlen (alias->newname); in sane_get_devices()
1135 strcpy (full_name, alias->newname); in sane_get_devices()
1142 len = strlen (be->name) + 1 + strlen (be_list[i]->name); in sane_get_devices()
1148 strcpy (full_name, be->name); in sane_get_devices()
1150 strcat (full_name, be_list[i]->name); in sane_get_devices()
1154 dev->name = full_name; in sane_get_devices()
1155 dev->vendor = be_list[i]->vendor; in sane_get_devices()
1156 dev->model = be_list[i]->model; in sane_get_devices()
1157 dev->type = be_list[i]->type; in sane_get_devices()
1168 DBG (3, "sane_get_devices: found %d devices\n", devlist_len - 1); in sane_get_devices()
1185 for (alias = first_alias; alias != NULL; alias = alias->next) in sane_open()
1187 if (!alias->newname) in sane_open()
1189 if (strcmp (alias->newname, full_name) == 0) in sane_open()
1191 full_name = alias->oldname; in sane_open()
1202 is_fakeusb = strncmp(full_name, "fakeusb", dev_name - full_name) == 0 && in sane_open()
1203 dev_name - full_name == 7; in sane_open()
1204 is_fakeusbdev = strncmp(full_name, "fakeusbdev", dev_name - full_name) == 0 && in sane_open()
1205 dev_name - full_name == 10; in sane_open()
1206 is_fakeusbout = strncmp(full_name, "fakeusbout", dev_name - full_name) == 0 && in sane_open()
1207 dev_name - full_name == 10; in sane_open()
1212 ++dev_name; // skip colon in sane_open()
1229 ++dev_name; // skip colon in sane_open()
1237 fakeusbout_path = strndup(dev_name, path_end - dev_name); in sane_open()
1239 full_name = path_end + 1; // skip colon in sane_open()
1245 be_name = strndup(full_name, dev_name - full_name); in sane_open()
1246 ++dev_name; /* skip colon */ in sane_open()
1272 for (be = first_backend; be; be = be->next) in sane_open()
1273 if (strcmp (be->name, be_name) == 0) in sane_open()
1287 if (!be->inited) in sane_open()
1294 status = (*(op_open_t)be->op[OP_OPEN]) (dev_name, &handle); in sane_open()
1302 s->be = be; in sane_open()
1303 s->handle = handle; in sane_open()
1316 (*(op_close_t)s->be->op[OP_CLOSE]) (s->handle); in sane_close()
1327 return (*(op_get_option_desc_t)s->be->op[OP_GET_OPTION_DESC]) (s->handle, option); in sane_get_option_descriptor()
1339 return (*(op_ctl_option_t)s->be->op[OP_CTL_OPTION]) (s->handle, option, action, value, in sane_control_option()
1349 return (*(op_get_params_t)s->be->op[OP_GET_PARAMS]) (s->handle, params); in sane_get_parameters()
1358 return (*(op_start_t)s->be->op[OP_START]) (s->handle); in sane_start()
1369 return (*(op_read_t)s->be->op[OP_READ]) (s->handle, data, max_length, length); in sane_read()
1378 (*(op_cancel_t)s->be->op[OP_CANCEL]) (s->handle); in sane_cancel()
1388 return (*(op_set_io_mode_t)s->be->op[OP_SET_IO_MODE]) (s->handle, non_blocking); in sane_set_io_mode()
1397 return (*(op_get_select_fd_t)s->be->op[OP_GET_SELECT_FD]) (s->handle, fd); in sane_get_select_fd()