kopia lustrzana https://gitlab.com/sane-project/website
273 wiersze
9.1 KiB
HTML
273 wiersze
9.1 KiB
HTML
<!-- received="Fri Apr 9 14:04:35 1999 PDT" -->
|
|
<!-- sent="Fri, 9 Apr 1999 23:06:41 +0200" -->
|
|
<!-- name="Petter Reinholdtsen" -->
|
|
<!-- email="pere@hungry.com" -->
|
|
<!-- subject="DLL backend cleanup patch" -->
|
|
<!-- id="199904092106.XAA05415@lee.Cc.Uit.No" -->
|
|
<!-- inreplyto="" -->
|
|
<title>sane-devel: DLL backend cleanup patch</title>
|
|
<h1>DLL backend cleanup patch</h1>
|
|
<b>Petter Reinholdtsen</b> (<a href="mailto:pere@hungry.com"><i>pere@hungry.com</i></a>)<br>
|
|
<i>Fri, 9 Apr 1999 23:06:41 +0200</i>
|
|
<p>
|
|
<ul>
|
|
<li> <b>Messages sorted by:</b> <a href="date.html#167">[ date ]</a><a href="index.html#167">[ thread ]</a><a href="subject.html#167">[ subject ]</a><a href="author.html#167">[ author ]</a>
|
|
<!-- next="start" -->
|
|
<li> <b>Next message:</b> <a href="0168.html">Richard Kuhlbars: "Compile Error"</a>
|
|
<li> <b>Previous message:</b> <a href="0166.html">Petter Reinholdtsen: "May sane_init fail?"</a>
|
|
<!-- nextthread="start" -->
|
|
<!-- reply="end" -->
|
|
</ul>
|
|
<!-- body="start" -->
|
|
Here is a small patch with some cleanup in the dll backend. No<br>
|
|
bugfixes, but made the code smaller. It also is structured like my<br>
|
|
earlier Win32 patch, so it should be easier to add the Win32 part of<br>
|
|
the patch later.<br>
|
|
<p>
|
|
It is relative to v1.01 pre4.<br>
|
|
<p>
|
|
Index: ChangeLog<br>
|
|
===================================================================<br>
|
|
RCS file: /cvsroot/external/sane/ChangeLog,v<br>
|
|
retrieving revision 1.3<br>
|
|
diff -u -r1.3 ChangeLog<br>
|
|
--- ChangeLog 1999/04/07 21:04:34 1.3<br>
|
|
+++ ChangeLog 1999/04/09 21:02:19<br>
|
|
@@ -1,3 +1,9 @@<br>
|
|
+1999-04-09 Petter Reinholdtsen <<a href="mailto:pere@td.org.uit.no">pere@td.org.uit.no</a>><br>
|
|
+<br>
|
|
+ * backend/dll.c: Cleanup. Use calloc() instead of<br>
|
|
+ malloc/memset(0). Only check the correct environment path<br>
|
|
+ variables. Make ifdef'ed code smaller and clearer.<br>
|
|
+<br>
|
|
1999-04-03 David Mosberger-Tang <<a href="mailto:David.Mosberger@acm.org">David.Mosberger@acm.org</a>><br>
|
|
<br>
|
|
* include/sane/sanei_debug.h: Define sanei_debug_BACKEND_NAME only<br>
|
|
Index: backend/dll.c<br>
|
|
===================================================================<br>
|
|
RCS file: /cvsroot/external/sane/backend/dll.c,v<br>
|
|
retrieving revision 1.1.1.3<br>
|
|
diff -u -r1.1.1.3 dll.c<br>
|
|
--- dll.c 1999/01/13 11:07:04 1.1.1.3<br>
|
|
+++ dll.c 1999/04/09 21:02:19<br>
|
|
@@ -68,12 +68,22 @@<br>
|
|
# ifndef RTLD_LAZY<br>
|
|
# define RTLD_LAZY 1<br>
|
|
# endif<br>
|
|
+# if defined(_AIX)<br>
|
|
+# define DLL_PATH_ENV "LIBPATH"<br>
|
|
+# else<br>
|
|
+# define DLL_PATH_ENV "LD_LIBRARY_PATH"<br>
|
|
+# endif<br>
|
|
+# define DLL_PATH_SEPARATOR ":"<br>
|
|
+# define DLL_SLASH "/"<br>
|
|
+# define DLL_NAME "libsane-%s.so." STRINGIFY(V_MAJOR)<br>
|
|
# define HAVE_DLL<br>
|
|
-#endif<br>
|
|
-<br>
|
|
+#elif defined (HAVE_SHL_LOAD) && defined(HAVE_DL_H)<br>
|
|
/* HP/UX DLL support */<br>
|
|
-#if defined (HAVE_SHL_LOAD) && defined(HAVE_DL_H)<br>
|
|
# include <dl.h><br>
|
|
+# define DLL_PATH_ENV "SHLIB_PATH"<br>
|
|
+# define DLL_PATH_SEPARATOR ":"<br>
|
|
+# define DLL_SLASH "/"<br>
|
|
+# define DLL_NAME "libsane-%s.sl." STRINGIFY(V_MAJOR)<br>
|
|
# define HAVE_DLL<br>
|
|
#endif<br>
|
|
<br>
|
|
@@ -211,11 +221,10 @@<br>
|
|
return SANE_STATUS_GOOD;<br>
|
|
}<br>
|
|
<br>
|
|
- be = malloc (sizeof (*be));<br>
|
|
+ be = calloc (1, sizeof (*be));<br>
|
|
if (!be)<br>
|
|
return SANE_STATUS_NO_MEM;<br>
|
|
<br>
|
|
- memset (be, 0, sizeof (*be));<br>
|
|
be->name = strdup (name);<br>
|
|
if (!be->name)<br>
|
|
return SANE_STATUS_NO_MEM;<br>
|
|
@@ -230,24 +239,12 @@<br>
|
|
load (struct backend *be)<br>
|
|
{<br>
|
|
#ifdef HAVE_DLL<br>
|
|
- int mode = 0;<br>
|
|
+ int funcnamesize = 0;<br>
|
|
char *funcname, *src, *dir, *path = 0;<br>
|
|
char libname[PATH_MAX];<br>
|
|
int i;<br>
|
|
FILE *fp = 0;<br>
|
|
<br>
|
|
-#if defined(HAVE_DLOPEN)<br>
|
|
-# define PREFIX "libsane-"<br>
|
|
-# define POSTFIX ".so.%u"<br>
|
|
- mode = getenv ("LD_BIND_NOW") ? RTLD_NOW : RTLD_LAZY;<br>
|
|
-#elif defined(HAVE_SHL_LOAD)<br>
|
|
-# define PREFIX "libsane-"<br>
|
|
-# define POSTFIX ".sl.%u"<br>
|
|
- mode = BIND_DEFERRED;<br>
|
|
-#else<br>
|
|
-# error "Tried to compile unsupported DLL."<br>
|
|
-#endif /* HAVE_DLOPEN */<br>
|
|
-<br>
|
|
DBG(1, "loading backend %s\n", be->name);<br>
|
|
<br>
|
|
/* initialize all ops to "unsupported" so we can "use" the backend<br>
|
|
@@ -260,28 +257,23 @@<br>
|
|
dir = STRINGIFY(LIBDIR);<br>
|
|
while (dir)<br>
|
|
{<br>
|
|
- snprintf (libname, sizeof (libname), "%s/"PREFIX"%s"POSTFIX,<br>
|
|
- dir, be->name, V_MAJOR);<br>
|
|
+ /* Make string like "<libdir>/sane-<backend>.so.<version>" */<br>
|
|
+ snprintf (libname, sizeof (libname), "%s" DLL_SLASH DLL_NAME,<br>
|
|
+ dir, be->name);<br>
|
|
fp = fopen (libname, "r");<br>
|
|
if (fp)<br>
|
|
break;<br>
|
|
<br>
|
|
if (!path)<br>
|
|
{<br>
|
|
- path = getenv ("LD_LIBRARY_PATH");<br>
|
|
- if (!path)<br>
|
|
- {<br>
|
|
- path = getenv ("SHLIB_PATH"); /* for HP-UX */<br>
|
|
- if (!path)<br>
|
|
- path = getenv ("LIBPATH"); /* for AIX */<br>
|
|
- }<br>
|
|
+ path = getenv (DLL_PATH_ENV);<br>
|
|
if (!path)<br>
|
|
break;<br>
|
|
<br>
|
|
path = strdup (path);<br>
|
|
src = path;<br>
|
|
}<br>
|
|
- dir = strsep (&src, ":");<br>
|
|
+ dir = strsep (&src, DLL_PATH_SEPARATOR);<br>
|
|
}<br>
|
|
if (path)<br>
|
|
free (path);<br>
|
|
@@ -294,9 +286,9 @@<br>
|
|
DBG(2, "dlopen()ing `%s'\n", libname);<br>
|
|
<br>
|
|
#ifdef HAVE_DLOPEN<br>
|
|
- be->handle = dlopen (libname, mode);<br>
|
|
+ be->handle = dlopen (libname, getenv ("LD_BIND_NOW") ? RTLD_NOW : RTLD_LAZY);<br>
|
|
#elif defined(HAVE_SHL_LOAD)<br>
|
|
- be->handle = (shl_t)shl_load (libname, mode, 0L);<br>
|
|
+ be->handle = (shl_t)shl_load (libname, BIND_DEFERRED, 0L);<br>
|
|
#else<br>
|
|
# error "Tried to compile unsupported DLL."<br>
|
|
#endif /* HAVE_DLOPEN */<br>
|
|
@@ -307,44 +299,35 @@<br>
|
|
}<br>
|
|
<br>
|
|
/* all is dandy---lookup and fill in backend ops: */<br>
|
|
- funcname = alloca (strlen (be->name) + 64);<br>
|
|
+ funcnamesize = strlen (be->name) + 64;<br>
|
|
+ funcname = alloca (funcnamesize);<br>
|
|
for (i = 0; i < NUM_OPS; ++i)<br>
|
|
{<br>
|
|
void *(*op) ();<br>
|
|
+ void *(*op_) ();<br>
|
|
<br>
|
|
- sprintf (funcname, "_sane_%s_%s", be->name, op_name[i]);<br>
|
|
+ snprintf (funcname, funcnamesize, "_sane_%s_%s", be->name, op_name[i]);<br>
|
|
<br>
|
|
/* First try looking up the symbol without a leading underscore. */<br>
|
|
+ /* Then try again, with an underscore prepended. */<br>
|
|
#ifdef HAVE_DLOPEN<br>
|
|
op = (void *(*)()) dlsym (be->handle, funcname + 1);<br>
|
|
+ op_ = (void *(*)()) dlsym (be->handle, funcname);<br>
|
|
#elif defined(HAVE_SHL_LOAD)<br>
|
|
shl_findsym ((shl_t*)&(be->handle), funcname + 1, TYPE_UNDEFINED, &op);<br>
|
|
+ shl_findsym (be->handle, funcname, TYPE_UNDEFINED, &op_);<br>
|
|
#else<br>
|
|
# error "Tried to compile unsupported DLL."<br>
|
|
#endif /* HAVE_DLOPEN */<br>
|
|
- if (op)<br>
|
|
- be->op[i] = op;<br>
|
|
+<br>
|
|
+ if (NULL != op || NULL != op_)<br>
|
|
+ be->op[i] = (NULL != op) ? op : op_;<br>
|
|
else<br>
|
|
- {<br>
|
|
- /* Try again, with an underscore prepended. */<br>
|
|
-#ifdef HAVE_DLOPEN<br>
|
|
- op = (void *(*)()) dlsym (be->handle, funcname);<br>
|
|
-#elif defined(HAVE_SHL_LOAD)<br>
|
|
- shl_findsym (be->handle, funcname, TYPE_UNDEFINED, &op);<br>
|
|
-#else<br>
|
|
-# error "Tried to compile unsupported DLL."<br>
|
|
-#endif /* HAVE_DLOPEN */<br>
|
|
- if (op)<br>
|
|
- be->op[i] = op;<br>
|
|
- }<br>
|
|
- if (NULL == op)<br>
|
|
DBG(2, "unable to find %s\n", funcname);<br>
|
|
}<br>
|
|
<br>
|
|
return SANE_STATUS_GOOD;<br>
|
|
<br>
|
|
-# undef PREFIX<br>
|
|
-# undef POSTFIX<br>
|
|
#else /* HAVE_DLL */<br>
|
|
DBG(1, "load: ignoring attempt to load `%s'; compiled without dl support\n",<br>
|
|
be->name);<br>
|
|
@@ -441,15 +424,16 @@<br>
|
|
(*be->op[OP_EXIT]) ();<br>
|
|
#ifdef HAVE_DLL<br>
|
|
<br>
|
|
-#ifdef HAVE_DLOPEN<br>
|
|
if (be->handle)<br>
|
|
- dlclose (be->handle);<br>
|
|
+ {<br>
|
|
+#ifdef HAVE_DLOPEN<br>
|
|
+ dlclose (be->handle);<br>
|
|
#elif defined(HAVE_SHL_LOAD)<br>
|
|
- if (be->handle)<br>
|
|
- shl_unload(be->handle);<br>
|
|
+ shl_unload(be->handle);<br>
|
|
#else<br>
|
|
# error "Tried to compile unsupported DLL."<br>
|
|
#endif /* HAVE_DLOPEN */<br>
|
|
+ }<br>
|
|
<br>
|
|
#endif /* HAVE_DLL */<br>
|
|
}<br>
|
|
@@ -607,11 +591,10 @@<br>
|
|
if (status != SANE_STATUS_GOOD)<br>
|
|
return status;<br>
|
|
<br>
|
|
- s = malloc (sizeof (*s));<br>
|
|
+ s = calloc (1, sizeof (*s));<br>
|
|
if (!s)<br>
|
|
return SANE_STATUS_NO_MEM;<br>
|
|
<br>
|
|
- memset (s, 0, sizeof (*s));<br>
|
|
s->be = be;<br>
|
|
s->handle = handle;<br>
|
|
*meta_handle = s;<br>
|
|
<pre>
|
|
--
|
|
##> Petter Reinholdtsen <## | <a href="mailto:pere@td.org.uit.no">pere@td.org.uit.no</a>
|
|
O- <SCRIPT Language="Javascript">window.close()</SCRIPT>
|
|
<a href="http://www.hungry.com/~pere/">http://www.hungry.com/~pere/</a> | Go Mozilla, go! Go!
|
|
<p>
|
|
<pre>
|
|
--
|
|
Source code, list archive, and docs: <a href="http://www.mostang.com/sane/">http://www.mostang.com/sane/</a>
|
|
To unsubscribe: echo unsubscribe sane-devel | mail <a href="mailto:majordomo@mostang.com">majordomo@mostang.com</a>
|
|
</pre>
|
|
<!-- body="end" -->
|
|
<p>
|
|
<ul>
|
|
<!-- next="start" -->
|
|
<li> <b>Next message:</b> <a href="0168.html">Richard Kuhlbars: "Compile Error"</a>
|
|
<li> <b>Previous message:</b> <a href="0166.html">Petter Reinholdtsen: "May sane_init fail?"</a>
|
|
<!-- nextthread="start" -->
|
|
<!-- reply="end" -->
|
|
</ul>
|