sane-project-website/old-archive/1999-04/0167.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 &lt;<a href="mailto:pere@td.org.uit.no">pere@td.org.uit.no</a>&gt;<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 &lt;<a href="mailto:David.Mosberger@acm.org">David.Mosberger@acm.org</a>&gt;<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) &amp;&amp; defined(HAVE_DL_H)<br>
/* HP/UX DLL support */<br>
-#if defined (HAVE_SHL_LOAD) &amp;&amp; defined(HAVE_DL_H)<br>
# include &lt;dl.h&gt;<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-&gt;name = strdup (name);<br>
if (!be-&gt;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-&gt;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-&gt;name, V_MAJOR);<br>
+ /* Make string like "&lt;libdir&gt;/sane-&lt;backend&gt;.so.&lt;version&gt;" */<br>
+ snprintf (libname, sizeof (libname), "%s" DLL_SLASH DLL_NAME,<br>
+ dir, be-&gt;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 (&amp;src, ":");<br>
+ dir = strsep (&amp;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-&gt;handle = dlopen (libname, mode);<br>
+ be-&gt;handle = dlopen (libname, getenv ("LD_BIND_NOW") ? RTLD_NOW : RTLD_LAZY);<br>
#elif defined(HAVE_SHL_LOAD)<br>
- be-&gt;handle = (shl_t)shl_load (libname, mode, 0L);<br>
+ be-&gt;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-&gt;name) + 64);<br>
+ funcnamesize = strlen (be-&gt;name) + 64;<br>
+ funcname = alloca (funcnamesize);<br>
for (i = 0; i &lt; NUM_OPS; ++i)<br>
{<br>
void *(*op) ();<br>
+ void *(*op_) ();<br>
<br>
- sprintf (funcname, "_sane_%s_%s", be-&gt;name, op_name[i]);<br>
+ snprintf (funcname, funcnamesize, "_sane_%s_%s", be-&gt;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-&gt;handle, funcname + 1);<br>
+ op_ = (void *(*)()) dlsym (be-&gt;handle, funcname);<br>
#elif defined(HAVE_SHL_LOAD)<br>
shl_findsym ((shl_t*)&amp;(be-&gt;handle), funcname + 1, TYPE_UNDEFINED, &amp;op);<br>
+ shl_findsym (be-&gt;handle, funcname, TYPE_UNDEFINED, &amp;op_);<br>
#else<br>
# error "Tried to compile unsupported DLL."<br>
#endif /* HAVE_DLOPEN */<br>
- if (op)<br>
- be-&gt;op[i] = op;<br>
+<br>
+ if (NULL != op || NULL != op_)<br>
+ be-&gt;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-&gt;handle, funcname);<br>
-#elif defined(HAVE_SHL_LOAD)<br>
- shl_findsym (be-&gt;handle, funcname, TYPE_UNDEFINED, &amp;op);<br>
-#else<br>
-# error "Tried to compile unsupported DLL."<br>
-#endif /* HAVE_DLOPEN */<br>
- if (op)<br>
- be-&gt;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-&gt;name);<br>
@@ -441,15 +424,16 @@<br>
(*be-&gt;op[OP_EXIT]) ();<br>
#ifdef HAVE_DLL<br>
<br>
-#ifdef HAVE_DLOPEN<br>
if (be-&gt;handle)<br>
- dlclose (be-&gt;handle);<br>
+ {<br>
+#ifdef HAVE_DLOPEN<br>
+ dlclose (be-&gt;handle);<br>
#elif defined(HAVE_SHL_LOAD)<br>
- if (be-&gt;handle)<br>
- shl_unload(be-&gt;handle);<br>
+ shl_unload(be-&gt;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-&gt;be = be;<br>
s-&gt;handle = handle;<br>
*meta_handle = s;<br>
<pre>
--
##&gt; Petter Reinholdtsen &lt;## | <a href="mailto:pere@td.org.uit.no">pere@td.org.uit.no</a>
O- &lt;SCRIPT Language="Javascript"&gt;window.close()&lt;/SCRIPT&gt;
<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>