sane-project-website/old-archive/1999-07/0007.html

346 wiersze
10 KiB
HTML

<!-- received="Fri Jul 2 11:23:04 1999 PDT" -->
<!-- sent="Fri, 2 Jul 1999 20:21:49 +0200 (MET DST)" -->
<!-- name="Ingo Wilken" -->
<!-- email="Ingo.Wilken@Informatik.Uni-Oldenburg.DE" -->
<!-- subject="dll backend: aliased &amp; hidden device names" -->
<!-- id="m1107wb-000A62C@petersfehn.Informatik.Uni-Oldenburg.DE" -->
<!-- inreplyto="" -->
<title>sane-devel: dll backend: aliased &amp; hidden device names</title>
<h1>dll backend: aliased &amp; hidden device names</h1>
<b>Ingo Wilken</b> (<a href="mailto:Ingo.Wilken@Informatik.Uni-Oldenburg.DE"><i>Ingo.Wilken@Informatik.Uni-Oldenburg.DE</i></a>)<br>
<i>Fri, 2 Jul 1999 20:21:49 +0200 (MET DST)</i>
<p>
<ul>
<li> <b>Messages sorted by:</b> <a href="date.html#7">[ date ]</a><a href="index.html#7">[ thread ]</a><a href="subject.html#7">[ subject ]</a><a href="author.html#7">[ author ]</a>
<!-- next="start" -->
<li> <b>Next message:</b> <a href="0008.html">Wolfgang Goeller: "Re: Artec AT6 yet again"</a>
<li> <b>Previous message:</b> <a href="0006.html">aanderson =: "mustek aha1520B problems"</a>
<!-- nextthread="start" -->
<!-- reply="end" -->
</ul>
<!-- body="start" -->
This is a first attempt to add device names aliases and hidden<br>
devices to the dll backend. It works ok here, so I'm releasing<br>
the patches and ask for your comments.<br>
<p>
Aliases are defined in the new config file "dll.aliases". <br>
This can contain entries of the form<br>
<p>
alias SomeName SaneDeviceName<br>
alias "Some Name" SaneDeviceName<br>
hide SaneDeviceName<br>
<p>
For example:<br>
<p>
alias Epson net:somehost:epson:/dev/sgX<br>
alias "Siemens ST400" st400:/dev/sgY<br>
hide net:somehost:pnm:0<br>
hide net:somehost:pnm:1<br>
alias "Read from file" pnm:0<br>
hide pnm:1<br>
<p>
Aliased device names are automatically hidden.<br>
<p>
The idea is that users don't have to deal with complicated device<br>
names (especially for networked devices), and to hide other exported<br>
devices which might confuse them. Note that a hidden device can still<br>
be accessed if the device name is known, it just doesn't appear on<br>
the list.<br>
<p>
Regards,<br>
Ingo<br>
<p>
<p>
*** dll.c.orig Tue Apr 27 06:35:12 1999<br>
--- dll.c Fri Jul 2 19:24:42 1999<br>
***************<br>
*** 91,96 ****<br>
--- 91,97 ----<br>
<br>
#include &lt;sane/sanei_config.h&gt;<br>
#define DLL_CONFIG_FILE "dll.conf"<br>
+ #define DLL_ALIASES_FILE "dll.aliases"<br>
<br>
enum SANE_Ops<br>
{<br>
***************<br>
*** 170,175 ****<br>
--- 171,184 ----<br>
SANE_Handle handle;<br>
};<br>
<br>
+ struct alias<br>
+ {<br>
+ struct alias *next;<br>
+ char *oldname;<br>
+ char *newname;<br>
+ };<br>
+ <br>
+ static struct alias *first_alias;<br>
static SANE_Auth_Callback auth_callback;<br>
static struct backend *first_backend;<br>
static const char *op_name[] =<br>
***************<br>
*** 302,308 ****<br>
--- 311,321 ----<br>
#endif /* HAVE_DLOPEN */<br>
if (!be-&gt;handle)<br>
{<br>
+ #ifdef HAVE_DLOPEN<br>
+ DBG(2, "dlopen() failed (%s)\n", dlerror ());<br>
+ #else<br>
DBG(2, "dlopen() failed (%s)\n", strerror (errno));<br>
+ #endif /* HAVE_DLOPEN */<br>
return SANE_STATUS_INVAL;<br>
}<br>
<br>
***************<br>
*** 379,384 ****<br>
--- 392,478 ----<br>
return SANE_STATUS_GOOD;<br>
}<br>
<br>
+ <br>
+ static void<br>
+ add_alias (char *line)<br>
+ {<br>
+ const char *command;<br>
+ enum { CMD_ALIAS, CMD_HIDE } cmd;<br>
+ const char *oldname, *oldend, *newname, *newend;<br>
+ size_t oldlen, newlen;<br>
+ struct alias *alias;<br>
+ <br>
+ command = sanei_config_skip_whitespace(line);<br>
+ if( !*command )<br>
+ return;<br>
+ line = strpbrk(command, " \t");<br>
+ if( !line )<br>
+ return;<br>
+ *line++ = '\0';<br>
+ <br>
+ if( strcmp(command, "alias") == 0 )<br>
+ cmd = CMD_ALIAS;<br>
+ else<br>
+ if( strcmp(command, "hide") == 0 )<br>
+ cmd = CMD_HIDE;<br>
+ else<br>
+ return;<br>
+ <br>
+ newlen = 0;<br>
+ newname = NULL;<br>
+ if( cmd == CMD_ALIAS )<br>
+ {<br>
+ newname = sanei_config_skip_whitespace(line);<br>
+ if( !*newname )<br>
+ return;<br>
+ if( *newname == '\"' )<br>
+ {<br>
+ ++newname;<br>
+ newend = strchr(newname, '\"');<br>
+ }<br>
+ else<br>
+ newend = strpbrk(newname, " \t");<br>
+ if( !newend )<br>
+ return;<br>
+ <br>
+ newlen = newend - newname;<br>
+ line = (char*)(newend+1);<br>
+ }<br>
+ <br>
+ oldname = sanei_config_skip_whitespace(line);<br>
+ if( !*oldname )<br>
+ return;<br>
+ oldend = oldname + strcspn(oldname, " \t");<br>
+ <br>
+ oldlen = oldend - oldname;<br>
+ <br>
+ alias = malloc(sizeof(struct alias));<br>
+ if( alias )<br>
+ {<br>
+ alias-&gt;oldname = malloc(oldlen + newlen + 2);<br>
+ if( alias-&gt;oldname )<br>
+ {<br>
+ strncpy(alias-&gt;oldname, oldname, oldlen);<br>
+ alias-&gt;oldname[oldlen] = '\0';<br>
+ if( cmd == CMD_ALIAS )<br>
+ {<br>
+ alias-&gt;newname = alias-&gt;oldname + oldlen + 1;<br>
+ strncpy(alias-&gt;newname, newname, newlen);<br>
+ alias-&gt;newname[newlen] = '\0';<br>
+ }<br>
+ else<br>
+ alias-&gt;newname = NULL;<br>
+ <br>
+ alias-&gt;next = first_alias;<br>
+ first_alias = alias;<br>
+ return;<br>
+ }<br>
+ free(alias);<br>
+ }<br>
+ return;<br>
+ }<br>
+ <br>
+ <br>
SANE_Status<br>
sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)<br>
{<br>
***************<br>
*** 422,427 ****<br>
--- 516,539 ----<br>
}<br>
fclose (fp);<br>
<br>
+ fp = sanei_config_open (DLL_ALIASES_FILE);<br>
+ if (!fp)<br>
+ return SANE_STATUS_GOOD; /* don't insist on aliases file */<br>
+ <br>
+ while (fgets (backend_name, sizeof (backend_name), fp))<br>
+ {<br>
+ if (backend_name[0] == '#') /* ignore line comments */<br>
+ continue;<br>
+ len = strlen (backend_name);<br>
+ if (backend_name[len - 1] == '\n')<br>
+ backend_name[--len] = '\0';<br>
+ <br>
+ if (!len)<br>
+ continue; /* ignore empty lines */<br>
+ <br>
+ add_alias (backend_name);<br>
+ }<br>
+ fclose (fp);<br>
return SANE_STATUS_GOOD;<br>
}<br>
<br>
***************<br>
*** 429,434 ****<br>
--- 541,547 ----<br>
sane_exit (void)<br>
{<br>
struct backend *be, *next;<br>
+ struct alias *alias;<br>
<br>
DBG(1, "exiting\n");<br>
<br>
***************<br>
*** 461,466 ****<br>
--- 574,586 ----<br>
}<br>
}<br>
first_backend = 0;<br>
+ <br>
+ while( (alias = first_alias) != NULL )<br>
+ {<br>
+ first_alias = first_alias-&gt;next;<br>
+ free(alias-&gt;oldname);<br>
+ free(alias);<br>
+ }<br>
}<br>
<br>
/* Note that a call to get_devices() implies that we'll have to load<br>
***************<br>
*** 517,535 ****<br>
{<br>
SANE_Device *dev;<br>
char *mem;<br>
<br>
! /* create a new device entry with a device name that is the<br>
! sum of the backend name a colon and the backend's device<br>
! name: */<br>
! len = strlen (be-&gt;name) + 1 + strlen (be_list[i]-&gt;name);<br>
! mem = malloc (sizeof (*dev) + len + 1);<br>
! if (!mem)<br>
! return SANE_STATUS_NO_MEM;<br>
! <br>
! full_name = mem + sizeof (*dev);<br>
! strcpy (full_name, be-&gt;name);<br>
! strcat (full_name, ":");<br>
! strcat (full_name, be_list[i]-&gt;name);<br>
<br>
dev = (SANE_Device *) mem;<br>
dev-&gt;name = full_name;<br>
--- 637,683 ----<br>
{<br>
SANE_Device *dev;<br>
char *mem;<br>
+ struct alias *alias;<br>
<br>
! for(alias = first_alias; alias != NULL; alias = alias-&gt;next)<br>
! {<br>
! len = strlen(be-&gt;name);<br>
! if( strlen(alias-&gt;oldname) &lt;= len )<br>
! continue;<br>
! if( strncmp(alias-&gt;oldname, be-&gt;name, len) == 0 <br>
! &amp;&amp; alias-&gt;oldname[len] == ':'<br>
! &amp;&amp; strcmp(&amp;alias-&gt;oldname[len+1], be_list[i]-&gt;name) == 0 )<br>
! break;<br>
! }<br>
! <br>
! if( alias )<br>
! {<br>
! if( !alias-&gt;newname ) /* hidden device */<br>
! continue;<br>
! <br>
! len = strlen(alias-&gt;newname);<br>
! mem = malloc(sizeof(*dev) + len + 1);<br>
! if( !mem )<br>
! return SANE_STATUS_NO_MEM;<br>
! <br>
! full_name = mem + sizeof(*dev);<br>
! strcpy(full_name, alias-&gt;newname);<br>
! }<br>
! else<br>
! {<br>
! /* create a new device entry with a device name that is the<br>
! sum of the backend name a colon and the backend's device<br>
! name: */<br>
! len = strlen (be-&gt;name) + 1 + strlen (be_list[i]-&gt;name);<br>
! mem = malloc (sizeof (*dev) + len + 1);<br>
! if (!mem)<br>
! return SANE_STATUS_NO_MEM;<br>
! <br>
! full_name = mem + sizeof (*dev);<br>
! strcpy (full_name, be-&gt;name);<br>
! strcat (full_name, ":");<br>
! strcat (full_name, be_list[i]-&gt;name);<br>
! }<br>
<br>
dev = (SANE_Device *) mem;<br>
dev-&gt;name = full_name;<br>
***************<br>
*** 557,562 ****<br>
--- 705,722 ----<br>
SANE_Handle *handle;<br>
struct backend *be;<br>
SANE_Status status;<br>
+ struct alias *alias;<br>
+ <br>
+ for( alias = first_alias; alias != NULL; alias = alias-&gt;next )<br>
+ {<br>
+ if( !alias-&gt;newname )<br>
+ continue;<br>
+ if( strcmp(alias-&gt;newname, full_name) == 0 )<br>
+ {<br>
+ full_name = alias-&gt;oldname;<br>
+ break;<br>
+ }<br>
+ }<br>
<br>
dev_name = strchr (full_name, ':');<br>
if (dev_name)<br>
<p>
<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="0008.html">Wolfgang Goeller: "Re: Artec AT6 yet again"</a>
<li> <b>Previous message:</b> <a href="0006.html">aanderson =: "mustek aha1520B problems"</a>
<!-- nextthread="start" -->
<!-- reply="end" -->
</ul>