When generating HTML anchor names, make sure they are unique. Bug #300439.

merge-requests/1/head
Henning Geinitz 2004-01-11 18:05:47 +00:00
rodzic f048679136
commit 4933528fdf
1 zmienionych plików z 24 dodań i 8 usunięć

Wyświetl plik

@ -21,7 +21,7 @@
MA 02111-1307, USA. MA 02111-1307, USA.
*/ */
#define SANE_DESC_VERSION "2.2" #define SANE_DESC_VERSION "2.3"
#define MAN_PAGE_LINK "http://www.sane-project.org/man/%s.5.html" #define MAN_PAGE_LINK "http://www.sane-project.org/man/%s.5.html"
#define COLOR_MINIMAL "\"#B00000\"" #define COLOR_MINIMAL "\"#B00000\""
@ -1611,15 +1611,31 @@ ascii_print_backends (void)
/* Generate a name used for <a name=...> HTML tags */ /* Generate a name used for <a name=...> HTML tags */
static char * static char *
html_generate_anchor_name (char *manufacturer_name) html_generate_anchor_name (device_type dev_type, char *manufacturer_name)
{ {
char *name = strdup (manufacturer_name); char *name = malloc (strlen (manufacturer_name) + 1 + 2);
char *pointer = name; char *pointer = name;
char type_char;
if (!name) if (!name)
{ {
DBG_DBG ("html_generate_anchor_name: couldn't strdup\n"); DBG_ERR ("html_generate_anchor_name: couldn't malloc\n");
return 0;
} }
switch (dev_type)
{
case type_scanner: type_char ='S'; break;
case type_stillcam: type_char ='C'; break;
case type_vidcam: type_char ='V'; break;
case type_meta: type_char ='M'; break;
case type_api: type_char ='A'; break;
default: type_char ='Z'; break;
}
snprintf (name, strlen (manufacturer_name) + 1 + 2, "%c-%s",
type_char, manufacturer_name);
while (*pointer) while (*pointer)
{ {
if (!isalnum (*pointer)) if (!isalnum (*pointer))
@ -1658,7 +1674,7 @@ html_backends_split_table (device_type dev_type)
printf (", \n"); printf (", \n");
first = SANE_FALSE; first = SANE_FALSE;
printf ("<a href=\"#%s\">%s</a>", printf ("<a href=\"#%s\">%s</a>",
html_generate_anchor_name (be->name), be->name); html_generate_anchor_name (be->type->type, be->name), be->name);
} }
be = be->next; be = be->next;
} }
@ -1681,7 +1697,7 @@ html_backends_split_table (device_type dev_type)
model_entry *model; model_entry *model;
printf ("<h3><a name=\"%s\">Backend: %s\n", printf ("<h3><a name=\"%s\">Backend: %s\n",
html_generate_anchor_name (be->name), be->name); html_generate_anchor_name (be->type->type, be->name), be->name);
if (be->version || be->new) if (be->version || be->new)
{ {
@ -1872,7 +1888,7 @@ html_mfgs_table (device_type dev_type)
if (mfg_record != first_mfg_record) if (mfg_record != first_mfg_record)
printf (", \n"); printf (", \n");
printf ("<a href=\"#%s\">%s</a>", printf ("<a href=\"#%s\">%s</a>",
html_generate_anchor_name (mfg_record->name), mfg_record->name); html_generate_anchor_name (type_unknown, mfg_record->name), mfg_record->name);
mfg_record = mfg_record->next; mfg_record = mfg_record->next;
} }
mfg_record = first_mfg_record; mfg_record = first_mfg_record;
@ -1884,7 +1900,7 @@ html_mfgs_table (device_type dev_type)
model_record_entry *model_record = mfg_record->model_record; model_record_entry *model_record = mfg_record->model_record;
printf ("<h3><a name=\"%s\">Manufacturer: %s</a></h3>\n", printf ("<h3><a name=\"%s\">Manufacturer: %s</a></h3>\n",
html_generate_anchor_name (mfg_record->name), mfg_record->name); html_generate_anchor_name (type_unknown, mfg_record->name), mfg_record->name);
printf ("<p>\n"); printf ("<p>\n");
if (mfg_record->url && mfg_record->url->name) if (mfg_record->url && mfg_record->url->name)
{ {