mirror of
https://github.com/rkd77/elinks.git
synced 2024-12-04 14:46:47 -05:00
Merge branch 'elinks-0.12' into elinks-0.13
Conflicts: src/session/download.c
This commit is contained in:
commit
5c2fada371
4
AUTHORS
4
AUTHORS
@ -351,6 +351,10 @@ M. K. Srikant <srix@vsnl.com>
|
||||
M. Levinson <levinsm@users.sourceforge.net>
|
||||
Python scripting fixes
|
||||
|
||||
M. Vefa Bicakci <bicave@superonline.com>
|
||||
Licenses modifications under "GPL version 2 or any later version."
|
||||
Locale-independent case-insensitive comparisons
|
||||
|
||||
Malcolm Parsons <malcolm.parsons@gmail.com>
|
||||
Typo fixes
|
||||
|
||||
|
3
NEWS
3
NEWS
@ -301,6 +301,9 @@ To be released as 0.11.6.
|
||||
|
||||
* critical bug 1053: fix crash if a download finishes after ELinks has
|
||||
closed the terminal from which the download was started
|
||||
* major bug 1004: ignore locales when comparing HTML element names and
|
||||
similar strings, so e.g. ``title'' matches ``TITLE'' even in the
|
||||
Turkish locale
|
||||
|
||||
ELinks 0.11.5:
|
||||
--------------
|
||||
|
@ -556,7 +556,7 @@ test_search(struct listbox_item *item, void *data_, int *offset)
|
||||
assert(ctx->title && ctx->url);
|
||||
|
||||
ctx->found = (*ctx->title && strcasestr(bm->title, ctx->title))
|
||||
|| (*ctx->url && strcasestr(bm->url, ctx->url));
|
||||
|| (*ctx->url && c_strcasestr(bm->url, ctx->url));
|
||||
|
||||
if (ctx->found) *offset = 0;
|
||||
}
|
||||
|
4
src/cache/dialogs.c
vendored
4
src/cache/dialogs.c
vendored
@ -193,8 +193,8 @@ match_cache_entry(struct listbox_item *item, struct terminal *term,
|
||||
{
|
||||
struct cache_entry *cached = item->udata;
|
||||
|
||||
if (strcasestr(struri(cached->uri), text)
|
||||
|| (cached->head && strcasestr(cached->head, text)))
|
||||
if (c_strcasestr(struri(cached->uri), text)
|
||||
|| (cached->head && c_strcasestr(cached->head, text)))
|
||||
return LISTBOX_MATCH_OK;
|
||||
|
||||
return LISTBOX_MATCH_NO;
|
||||
|
@ -321,7 +321,7 @@ remote_cmd(struct option *o, unsigned char ***argv, int *argc)
|
||||
for (method = 0; remote_methods[method].name; method++) {
|
||||
unsigned char *name = remote_methods[method].name;
|
||||
|
||||
if (!strlcasecmp(command, len, name, -1))
|
||||
if (!c_strlcasecmp(command, len, name, -1))
|
||||
break;
|
||||
}
|
||||
|
||||
@ -359,7 +359,7 @@ remote_cmd(struct option *o, unsigned char ***argv, int *argc)
|
||||
if (remote_argc < 1)
|
||||
break;
|
||||
|
||||
if (!strcasecmp(remote_argv[0], "openBrowser")) {
|
||||
if (!c_strcasecmp(remote_argv[0], "openBrowser")) {
|
||||
remote_session_flags = SES_REMOTE_NEW_WINDOW;
|
||||
}
|
||||
break;
|
||||
@ -450,7 +450,7 @@ print_full_help_inner(struct option *tree, unsigned char *path,
|
||||
|| (option->flags & OPT_HIDDEN))
|
||||
continue;
|
||||
|
||||
if (!capt && !strncasecmp(option->name, "_template_", 10))
|
||||
if (!capt && !c_strncasecmp(option->name, "_template_", 10))
|
||||
capt = (unsigned char *) N_("Template option folder");
|
||||
|
||||
if (!capt) {
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "main/event.h"
|
||||
#include "main/module.h"
|
||||
#include "terminal/kbd.h"
|
||||
#include "util/conv.h"
|
||||
#include "util/memory.h"
|
||||
#include "util/string.h"
|
||||
|
||||
@ -363,7 +364,7 @@ read_key(const unsigned char *key_str)
|
||||
return key_str[0];
|
||||
|
||||
for (key = key_table; key->str; key++)
|
||||
if (!strcasecmp(key->str, key_str))
|
||||
if (!c_strcasecmp(key->str, key_str))
|
||||
return key->num;
|
||||
|
||||
return KBD_UNDEF;
|
||||
@ -380,17 +381,17 @@ parse_keystroke(const unsigned char *s, struct term_event_keyboard *kbd)
|
||||
{
|
||||
kbd->modifier = KBD_MOD_NONE;
|
||||
while (1) {
|
||||
if (!strncasecmp(s, "Shift", 5) && (s[5] == '-' || s[5] == '+')) {
|
||||
if (!c_strncasecmp(s, "Shift", 5) && (s[5] == '-' || s[5] == '+')) {
|
||||
/* Shift+a == shiFt-a == Shift-a */
|
||||
kbd->modifier |= KBD_MOD_SHIFT;
|
||||
s += 6;
|
||||
|
||||
} else if (!strncasecmp(s, "Ctrl", 4) && (s[4] == '-' || s[4] == '+')) {
|
||||
} else if (!c_strncasecmp(s, "Ctrl", 4) && (s[4] == '-' || s[4] == '+')) {
|
||||
/* Ctrl+a == ctRl-a == Ctrl-a */
|
||||
kbd->modifier |= KBD_MOD_CTRL;
|
||||
s += 5;
|
||||
|
||||
} else if (!strncasecmp(s, "Alt", 3) && (s[3] == '-' || s[3] == '+')) {
|
||||
} else if (!c_strncasecmp(s, "Alt", 3) && (s[3] == '-' || s[3] == '+')) {
|
||||
/* Alt+a == aLt-a == Alt-a */
|
||||
kbd->modifier |= KBD_MOD_ALT;
|
||||
s += 4;
|
||||
@ -430,7 +431,7 @@ parse_keystroke(const unsigned char *s, struct term_event_keyboard *kbd)
|
||||
* and instead make kbd_ev_lookup() or its callers
|
||||
* search for different variants of the keystroke if
|
||||
* the original one is not bound to any action. */
|
||||
kbd->key = toupper(kbd->key);
|
||||
kbd->key = c_toupper(kbd->key);
|
||||
}
|
||||
|
||||
return (kbd->key == KBD_UNDEF) ? -1 : 0;
|
||||
|
@ -143,7 +143,7 @@ get_cookie_server(unsigned char *host, int hostlen)
|
||||
/* XXX: We must count with cases like "x.co" vs "x.co.uk"
|
||||
* below! */
|
||||
int cslen = strlen(cs->host);
|
||||
int cmp = strncasecmp(cs->host, host, hostlen);
|
||||
int cmp = c_strncasecmp(cs->host, host, hostlen);
|
||||
|
||||
if (!sort_spot && (cmp > 0 || (cmp == 0 && cslen > hostlen))) {
|
||||
/* This is the first @cs with name greater than @host,
|
||||
@ -234,13 +234,13 @@ is_domain_security_ok(unsigned char *domain, unsigned char *server, int server_l
|
||||
|
||||
/* Match domain and server.. */
|
||||
|
||||
/* XXX: Hmm, can't we use strlcasecmp() here? --pasky */
|
||||
/* XXX: Hmm, can't we use c_strlcasecmp() here? --pasky */
|
||||
|
||||
if (domain_len > server_len) return 0;
|
||||
|
||||
/* Ensure that the domain is atleast a substring of the server before
|
||||
* continuing. */
|
||||
if (strncasecmp(domain, server + server_len - domain_len, domain_len))
|
||||
if (c_strncasecmp(domain, server + server_len - domain_len, domain_len))
|
||||
return 0;
|
||||
|
||||
/* Allow domains which are same as servers. --<rono@sentuny.com.au> */
|
||||
@ -499,8 +499,8 @@ accept_cookie(struct cookie *cookie)
|
||||
struct cookie *c, *next;
|
||||
|
||||
foreachsafe (c, next, cookies) {
|
||||
if (strcasecmp(c->name, cookie->name)
|
||||
|| strcasecmp(c->domain, cookie->domain))
|
||||
if (c_strcasecmp(c->name, cookie->name)
|
||||
|| c_strcasecmp(c->domain, cookie->domain))
|
||||
continue;
|
||||
|
||||
delete_cookie(c);
|
||||
@ -513,7 +513,7 @@ accept_cookie(struct cookie *cookie)
|
||||
|
||||
/* XXX: This crunches CPU too. --pasky */
|
||||
foreach (cd, c_domains)
|
||||
if (!strcasecmp(cd->domain, cookie->domain))
|
||||
if (!c_strcasecmp(cd->domain, cookie->domain))
|
||||
return;
|
||||
|
||||
domain_len = strlen(cookie->domain);
|
||||
@ -535,11 +535,11 @@ delete_cookie(struct cookie *c)
|
||||
struct cookie *d;
|
||||
|
||||
foreach (d, cookies)
|
||||
if (!strcasecmp(d->domain, c->domain))
|
||||
if (!c_strcasecmp(d->domain, c->domain))
|
||||
goto end;
|
||||
|
||||
foreach (cd, c_domains) {
|
||||
if (!strcasecmp(cd->domain, c->domain)) {
|
||||
if (!c_strcasecmp(cd->domain, c->domain)) {
|
||||
del_from_list(cd);
|
||||
mem_free(cd);
|
||||
break;
|
||||
|
@ -287,7 +287,7 @@ scan_css_token(struct scanner *scanner, struct scanner_token *token)
|
||||
|
||||
} else if (first_char == '!') {
|
||||
scan_css(scanner, string, CSS_CHAR_WHITESPACE);
|
||||
if (!strncasecmp(string, "important", 9)) {
|
||||
if (!c_strncasecmp(string, "important", 9)) {
|
||||
type = CSS_TOKEN_IMPORTANT;
|
||||
string += 9;
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ find_css_selector(struct css_selector_set *sels,
|
||||
foreach_css_selector (selector, sels) {
|
||||
if (type != selector->type || rel != selector->relation)
|
||||
continue;
|
||||
if (strlcasecmp(name, namelen, selector->name, -1))
|
||||
if (c_strlcasecmp(name, namelen, selector->name, -1))
|
||||
continue;
|
||||
return selector;
|
||||
}
|
||||
|
@ -191,7 +191,7 @@ find_tag(struct document *document, unsigned char *name, int namelen)
|
||||
struct tag *tag;
|
||||
|
||||
foreach (tag, document->tags)
|
||||
if (!strlcasecmp(tag->name, -1, name, namelen))
|
||||
if (!c_strlcasecmp(tag->name, -1, name, namelen))
|
||||
return tag->y;
|
||||
|
||||
return -1;
|
||||
|
@ -54,22 +54,22 @@ done_dom_renderer(struct dom_renderer *renderer)
|
||||
static void
|
||||
get_doctype(struct dom_renderer *renderer, struct cache_entry *cached)
|
||||
{
|
||||
if (!strcasecmp("application/rss+xml", cached->content_type)) {
|
||||
if (!c_strcasecmp("application/rss+xml", cached->content_type)) {
|
||||
renderer->doctype = SGML_DOCTYPE_RSS;
|
||||
|
||||
} else if (!strcasecmp("application/docbook+xml",
|
||||
cached->content_type)) {
|
||||
} else if (!c_strcasecmp("application/docbook+xml",
|
||||
cached->content_type)) {
|
||||
renderer->doctype = SGML_DOCTYPE_DOCBOOK;
|
||||
|
||||
} else if (!strcasecmp("application/xbel+xml", cached->content_type)
|
||||
|| !strcasecmp("application/x-xbel", cached->content_type)
|
||||
|| !strcasecmp("application/xbel", cached->content_type)) {
|
||||
} else if (!c_strcasecmp("application/xbel+xml", cached->content_type)
|
||||
|| !c_strcasecmp("application/x-xbel", cached->content_type)
|
||||
|| !c_strcasecmp("application/xbel", cached->content_type)) {
|
||||
renderer->doctype = SGML_DOCTYPE_XBEL;
|
||||
|
||||
} else {
|
||||
assertm(!strcasecmp("text/html", cached->content_type)
|
||||
|| !strcasecmp("application/xhtml+xml",
|
||||
cached->content_type),
|
||||
assertm(!c_strcasecmp("text/html", cached->content_type)
|
||||
|| !c_strcasecmp("application/xhtml+xml",
|
||||
cached->content_type),
|
||||
"Couldn't resolve doctype '%s'", cached->content_type);
|
||||
|
||||
renderer->doctype = SGML_DOCTYPE_HTML;
|
||||
|
@ -137,7 +137,7 @@ find_fd(struct session *ses, unsigned char *name,
|
||||
|
||||
foreachback (doc_view, ses->scrn_frames) {
|
||||
if (doc_view->used) continue;
|
||||
if (strcasecmp(doc_view->name, name)) continue;
|
||||
if (c_strcasecmp(doc_view->name, name)) continue;
|
||||
|
||||
doc_view->used = 1;
|
||||
doc_view->depth = depth;
|
||||
|
@ -94,7 +94,7 @@ get_target(struct document_options *options, unsigned char *a)
|
||||
|
||||
if (!v) return NULL;
|
||||
|
||||
if (!*v || !strcasecmp(v, "_self")) {
|
||||
if (!*v || !c_strcasecmp(v, "_self")) {
|
||||
mem_free_set(&v, stracpy(options->framename));
|
||||
}
|
||||
|
||||
@ -341,7 +341,7 @@ search_for_url_param(unsigned char *str, unsigned char **ret)
|
||||
/* Returns now if string @str is empty. */
|
||||
if (!*str) return HEADER_PARAM_NOT_FOUND;
|
||||
|
||||
p = strcasestr(str, "url");
|
||||
p = c_strcasestr(str, "url");
|
||||
if (!p) return HEADER_PARAM_NOT_FOUND;
|
||||
p += 3;
|
||||
|
||||
@ -551,7 +551,7 @@ look_for_map(unsigned char **pos, unsigned char *eof, struct uri *uri,
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (strlcasecmp(name, namelen, "MAP", 3)) return 1;
|
||||
if (c_strlcasecmp(name, namelen, "MAP", 3)) return 1;
|
||||
|
||||
if (uri && uri->fragment) {
|
||||
/* FIXME (bug 784): options->cp is the terminal charset;
|
||||
@ -559,7 +559,7 @@ look_for_map(unsigned char **pos, unsigned char *eof, struct uri *uri,
|
||||
al = get_attr_val(attr, "name", options->cp);
|
||||
if (!al) return 1;
|
||||
|
||||
if (strlcasecmp(al, -1, uri->fragment, uri->fragmentlen)) {
|
||||
if (c_strlcasecmp(al, -1, uri->fragment, uri->fragmentlen)) {
|
||||
mem_free(al);
|
||||
return 1;
|
||||
}
|
||||
@ -606,12 +606,12 @@ look_for_tag(unsigned char **pos, unsigned char *eof,
|
||||
|
||||
if (parse_element(*pos, eof, NULL, NULL, NULL, &pos2)) return 1;
|
||||
|
||||
if (strlcasecmp(name, namelen, "A", 1)
|
||||
&& strlcasecmp(name, namelen, "/A", 2)
|
||||
&& strlcasecmp(name, namelen, "MAP", 3)
|
||||
&& strlcasecmp(name, namelen, "/MAP", 4)
|
||||
&& strlcasecmp(name, namelen, "AREA", 4)
|
||||
&& strlcasecmp(name, namelen, "/AREA", 5)) {
|
||||
if (c_strlcasecmp(name, namelen, "A", 1)
|
||||
&& c_strlcasecmp(name, namelen, "/A", 2)
|
||||
&& c_strlcasecmp(name, namelen, "MAP", 3)
|
||||
&& c_strlcasecmp(name, namelen, "/MAP", 4)
|
||||
&& c_strlcasecmp(name, namelen, "AREA", 4)
|
||||
&& c_strlcasecmp(name, namelen, "/AREA", 5)) {
|
||||
*pos = pos2;
|
||||
return 1;
|
||||
}
|
||||
@ -648,12 +648,12 @@ look_for_link(unsigned char **pos, unsigned char *eof, struct menu_item **menu,
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!strlcasecmp(name, namelen, "A", 1)) {
|
||||
if (!c_strlcasecmp(name, namelen, "A", 1)) {
|
||||
while (look_for_tag(pos, eof, name, namelen, &label));
|
||||
|
||||
if (*pos >= eof) return 0;
|
||||
|
||||
} else if (!strlcasecmp(name, namelen, "AREA", 4)) {
|
||||
} else if (!c_strlcasecmp(name, namelen, "AREA", 4)) {
|
||||
/* FIXME (bug 784): options->cp is the terminal charset;
|
||||
* should use the document charset instead. */
|
||||
unsigned char *alt = get_attr_val(attr, "alt", options->cp);
|
||||
@ -667,7 +667,7 @@ look_for_link(unsigned char **pos, unsigned char *eof, struct menu_item **menu,
|
||||
label = NULL;
|
||||
}
|
||||
|
||||
} else if (!strlcasecmp(name, namelen, "/MAP", 4)) {
|
||||
} else if (!c_strlcasecmp(name, namelen, "/MAP", 4)) {
|
||||
/* This is the only successful return from here! */
|
||||
add_to_ml(ml, (void *) *menu, (void *) NULL);
|
||||
return 0;
|
||||
|
@ -52,7 +52,7 @@ html_form(struct html_context *html_context, unsigned char *a,
|
||||
|
||||
al = get_attr_val(a, "method", html_context->doc_cp);
|
||||
if (al) {
|
||||
if (!strcasecmp(al, "post")) {
|
||||
if (!c_strcasecmp(al, "post")) {
|
||||
unsigned char *enctype;
|
||||
|
||||
enctype = get_attr_val(a, "enctype",
|
||||
@ -60,9 +60,9 @@ html_form(struct html_context *html_context, unsigned char *a,
|
||||
|
||||
form->method = FORM_METHOD_POST;
|
||||
if (enctype) {
|
||||
if (!strcasecmp(enctype, "multipart/form-data"))
|
||||
if (!c_strcasecmp(enctype, "multipart/form-data"))
|
||||
form->method = FORM_METHOD_POST_MP;
|
||||
else if (!strcasecmp(enctype, "text/plain"))
|
||||
else if (!c_strcasecmp(enctype, "text/plain"))
|
||||
form->method = FORM_METHOD_POST_TEXT_PLAIN;
|
||||
mem_free(enctype);
|
||||
}
|
||||
@ -153,11 +153,11 @@ html_button(struct html_context *html_context, unsigned char *a,
|
||||
al = get_attr_val(a, "type", cp);
|
||||
if (!al) goto no_type_attr;
|
||||
|
||||
if (!strcasecmp(al, "button")) {
|
||||
if (!c_strcasecmp(al, "button")) {
|
||||
type = FC_BUTTON;
|
||||
} else if (!strcasecmp(al, "reset")) {
|
||||
} else if (!c_strcasecmp(al, "reset")) {
|
||||
type = FC_RESET;
|
||||
} else if (strcasecmp(al, "submit")) {
|
||||
} else if (c_strcasecmp(al, "submit")) {
|
||||
/* unknown type */
|
||||
mem_free(al);
|
||||
return;
|
||||
@ -273,16 +273,16 @@ html_input(struct html_context *html_context, unsigned char *a,
|
||||
|
||||
al = get_attr_val(a, "type", cp);
|
||||
if (al) {
|
||||
if (!strcasecmp(al, "text")) fc->type = FC_TEXT;
|
||||
else if (!strcasecmp(al, "hidden")) fc->type = FC_HIDDEN;
|
||||
else if (!strcasecmp(al, "button")) fc->type = FC_BUTTON;
|
||||
else if (!strcasecmp(al, "checkbox")) fc->type = FC_CHECKBOX;
|
||||
else if (!strcasecmp(al, "radio")) fc->type = FC_RADIO;
|
||||
else if (!strcasecmp(al, "password")) fc->type = FC_PASSWORD;
|
||||
else if (!strcasecmp(al, "submit")) fc->type = FC_SUBMIT;
|
||||
else if (!strcasecmp(al, "reset")) fc->type = FC_RESET;
|
||||
else if (!strcasecmp(al, "file")) fc->type = FC_FILE;
|
||||
else if (!strcasecmp(al, "image")) fc->type = FC_IMAGE;
|
||||
if (!c_strcasecmp(al, "text")) fc->type = FC_TEXT;
|
||||
else if (!c_strcasecmp(al, "hidden")) fc->type = FC_HIDDEN;
|
||||
else if (!c_strcasecmp(al, "button")) fc->type = FC_BUTTON;
|
||||
else if (!c_strcasecmp(al, "checkbox")) fc->type = FC_CHECKBOX;
|
||||
else if (!c_strcasecmp(al, "radio")) fc->type = FC_RADIO;
|
||||
else if (!c_strcasecmp(al, "password")) fc->type = FC_PASSWORD;
|
||||
else if (!c_strcasecmp(al, "submit")) fc->type = FC_SUBMIT;
|
||||
else if (!c_strcasecmp(al, "reset")) fc->type = FC_RESET;
|
||||
else if (!c_strcasecmp(al, "file")) fc->type = FC_FILE;
|
||||
else if (!c_strcasecmp(al, "image")) fc->type = FC_IMAGE;
|
||||
/* else unknown type, let it default to FC_TEXT. */
|
||||
mem_free(al);
|
||||
}
|
||||
@ -408,12 +408,12 @@ abort:
|
||||
closing_tag = 0;
|
||||
}
|
||||
|
||||
if (closing_tag && !strlcasecmp(name, namelen, "SELECT", 6)) {
|
||||
if (closing_tag && !c_strlcasecmp(name, namelen, "SELECT", 6)) {
|
||||
add_select_item(&lnk_menu, &lbl, &orig_lbl, values, order, nnmi);
|
||||
goto end_parse;
|
||||
}
|
||||
|
||||
if (!strlcasecmp(name, namelen, "OPTION", 6)) {
|
||||
if (!c_strlcasecmp(name, namelen, "OPTION", 6)) {
|
||||
add_select_item(&lnk_menu, &lbl, &orig_lbl, values, order, nnmi);
|
||||
|
||||
if (!closing_tag) {
|
||||
@ -442,7 +442,7 @@ abort:
|
||||
goto see;
|
||||
}
|
||||
|
||||
if (!strlcasecmp(name, namelen, "OPTGROUP", 8)) {
|
||||
if (!c_strlcasecmp(name, namelen, "OPTGROUP", 8)) {
|
||||
add_select_item(&lnk_menu, &lbl, &orig_lbl, values, order, nnmi);
|
||||
|
||||
if (group) new_menu_item(&lnk_menu, NULL, -1, 0), group = 0;
|
||||
@ -587,9 +587,9 @@ sp:
|
||||
if (namelen < 6) goto se;
|
||||
if (name[0] == '/') name++, namelen--;
|
||||
|
||||
if (strlcasecmp(name, namelen, "OPTION", 6)
|
||||
&& strlcasecmp(name, namelen, "SELECT", 6)
|
||||
&& strlcasecmp(name, namelen, "OPTGROUP", 8))
|
||||
if (c_strlcasecmp(name, namelen, "OPTION", 6)
|
||||
&& c_strlcasecmp(name, namelen, "SELECT", 6)
|
||||
&& c_strlcasecmp(name, namelen, "OPTGROUP", 8))
|
||||
goto se;
|
||||
}
|
||||
|
||||
@ -641,7 +641,7 @@ pp:
|
||||
return;
|
||||
}
|
||||
if (parse_element(p, eof, &t_name, &t_namelen, NULL, end)) goto pp;
|
||||
if (strlcasecmp(t_name, t_namelen, "/TEXTAREA", 9)) goto pp;
|
||||
if (c_strlcasecmp(t_name, t_namelen, "/TEXTAREA", 9)) goto pp;
|
||||
|
||||
fc = init_form_control(FC_TEXTAREA, attr, html_context);
|
||||
if (!fc) return;
|
||||
@ -684,14 +684,14 @@ pp:
|
||||
|
||||
wrap_attr = get_attr_val(attr, "wrap", html_context->doc_cp);
|
||||
if (wrap_attr) {
|
||||
if (!strcasecmp(wrap_attr, "hard")
|
||||
|| !strcasecmp(wrap_attr, "physical")) {
|
||||
if (!c_strcasecmp(wrap_attr, "hard")
|
||||
|| !c_strcasecmp(wrap_attr, "physical")) {
|
||||
fc->wrap = FORM_WRAP_HARD;
|
||||
} else if (!strcasecmp(wrap_attr, "soft")
|
||||
|| !strcasecmp(wrap_attr, "virtual")) {
|
||||
} else if (!c_strcasecmp(wrap_attr, "soft")
|
||||
|| !c_strcasecmp(wrap_attr, "virtual")) {
|
||||
fc->wrap = FORM_WRAP_SOFT;
|
||||
} else if (!strcasecmp(wrap_attr, "none")
|
||||
|| !strcasecmp(wrap_attr, "off")) {
|
||||
} else if (!c_strcasecmp(wrap_attr, "none")
|
||||
|| !c_strcasecmp(wrap_attr, "off")) {
|
||||
fc->wrap = FORM_WRAP_NONE;
|
||||
}
|
||||
mem_free(wrap_attr);
|
||||
|
@ -227,10 +227,10 @@ html_script(struct html_context *html_context, unsigned char *a,
|
||||
if (type) {
|
||||
unsigned char *pos = type;
|
||||
|
||||
if (!strncasecmp(type, "text/", 5)) {
|
||||
if (!c_strncasecmp(type, "text/", 5)) {
|
||||
pos += 5;
|
||||
|
||||
} else if (!strncasecmp(type, "application/", 12)) {
|
||||
} else if (!c_strncasecmp(type, "application/", 12)) {
|
||||
pos += 12;
|
||||
|
||||
} else {
|
||||
@ -241,7 +241,7 @@ not_processed:
|
||||
return;
|
||||
}
|
||||
|
||||
if (!strncasecmp(pos, "javascript", 10)) {
|
||||
if (!c_strncasecmp(pos, "javascript", 10)) {
|
||||
int len = strlen(pos);
|
||||
|
||||
if (len > 10 && !isdigit(pos[10])) {
|
||||
@ -249,11 +249,11 @@ not_processed:
|
||||
goto not_processed;
|
||||
}
|
||||
|
||||
} else if (strcasecmp(pos, "ecmascript")
|
||||
&& strcasecmp(pos, "jscript")
|
||||
&& strcasecmp(pos, "livescript")
|
||||
&& strcasecmp(pos, "x-javascript")
|
||||
&& strcasecmp(pos, "x-ecmascript")) {
|
||||
} else if (c_strcasecmp(pos, "ecmascript")
|
||||
&& c_strcasecmp(pos, "jscript")
|
||||
&& c_strcasecmp(pos, "livescript")
|
||||
&& c_strcasecmp(pos, "x-javascript")
|
||||
&& c_strcasecmp(pos, "x-ecmascript")) {
|
||||
mem_free(type);
|
||||
goto not_processed;
|
||||
}
|
||||
@ -271,7 +271,7 @@ not_processed:
|
||||
|
||||
if (languagelen < 10
|
||||
|| (languagelen > 10 && !isdigit(language[10]))
|
||||
|| strncasecmp(language, "javascript", 10)) {
|
||||
|| c_strncasecmp(language, "javascript", 10)) {
|
||||
mem_free(language);
|
||||
goto not_processed;
|
||||
}
|
||||
@ -372,7 +372,7 @@ imported:
|
||||
* argument. */
|
||||
if (parse_element(*end, eof, &name, &namelen, NULL, NULL))
|
||||
continue;
|
||||
if (strlcasecmp(name, namelen, "/script", 7))
|
||||
if (c_strlcasecmp(name, namelen, "/script", 7))
|
||||
continue;
|
||||
/* We have won! */
|
||||
break;
|
||||
@ -482,13 +482,13 @@ html_linebrk(struct html_context *html_context, unsigned char *a,
|
||||
unsigned char *al = get_attr_val(a, "align", html_context->doc_cp);
|
||||
|
||||
if (al) {
|
||||
if (!strcasecmp(al, "left")) par_format.align = ALIGN_LEFT;
|
||||
else if (!strcasecmp(al, "right")) par_format.align = ALIGN_RIGHT;
|
||||
else if (!strcasecmp(al, "center")) {
|
||||
if (!c_strcasecmp(al, "left")) par_format.align = ALIGN_LEFT;
|
||||
else if (!c_strcasecmp(al, "right")) par_format.align = ALIGN_RIGHT;
|
||||
else if (!c_strcasecmp(al, "center")) {
|
||||
par_format.align = ALIGN_CENTER;
|
||||
if (!html_context->table_level)
|
||||
par_format.leftmargin = par_format.rightmargin = 0;
|
||||
} else if (!strcasecmp(al, "justify")) par_format.align = ALIGN_JUSTIFY;
|
||||
} else if (!c_strcasecmp(al, "justify")) par_format.align = ALIGN_JUSTIFY;
|
||||
mem_free(al);
|
||||
}
|
||||
}
|
||||
@ -745,9 +745,9 @@ html_ul(struct html_context *html_context, unsigned char *a,
|
||||
|
||||
al = get_attr_val(a, "type", html_context->doc_cp);
|
||||
if (al) {
|
||||
if (!strcasecmp(al, "disc") || !strcasecmp(al, "circle"))
|
||||
if (!c_strcasecmp(al, "disc") || !c_strcasecmp(al, "circle"))
|
||||
par_format.flags = P_O;
|
||||
else if (!strcasecmp(al, "square"))
|
||||
else if (!c_strcasecmp(al, "square"))
|
||||
par_format.flags = P_PLUS;
|
||||
mem_free(al);
|
||||
}
|
||||
@ -893,7 +893,7 @@ html_li(struct html_context *html_context, unsigned char *a,
|
||||
if (t == P_ROMAN) {
|
||||
unsigned char *x;
|
||||
|
||||
for (x = n; *x; x++) *x = toupper(*x);
|
||||
for (x = n; *x; x++) *x = c_toupper(*x);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
@ -463,12 +463,12 @@ html_object(struct html_context *html_context, unsigned char *a,
|
||||
type = get_attr_val(a, "type", html_context->doc_cp);
|
||||
if (!type) { mem_free(url); return; }
|
||||
|
||||
if (!strncasecmp(type, "text/", 5)) {
|
||||
if (!c_strncasecmp(type, "text/", 5)) {
|
||||
/* We will just emulate <iframe>. */
|
||||
html_iframe_do(a, url, html_context);
|
||||
html_skip(html_context, a);
|
||||
|
||||
} else if (!strncasecmp(type, "image/", 6)) {
|
||||
} else if (!c_strncasecmp(type, "image/", 6)) {
|
||||
/* <img> emulation. */
|
||||
/* TODO: Use the enclosed text as 'alt' attribute. */
|
||||
html_img_do(a, url, html_context);
|
||||
@ -519,7 +519,7 @@ html_embed(struct html_context *html_context, unsigned char *a,
|
||||
if (!extension) extension = object_src;
|
||||
|
||||
type = get_extension_content_type(extension);
|
||||
if (type && !strncasecmp(type, "image/", 6)) {
|
||||
if (type && !c_strncasecmp(type, "image/", 6)) {
|
||||
html_img_do(a, object_src, html_context);
|
||||
} else {
|
||||
/* We will just emulate <iframe>. */
|
||||
@ -757,26 +757,26 @@ html_link_parse(struct html_context *html_context, unsigned char *a,
|
||||
|
||||
/* TODO: fastfind */
|
||||
for (i = 0; lt_names[i].str; i++)
|
||||
if (!strcasecmp(link->name, lt_names[i].str)) {
|
||||
if (!c_strcasecmp(link->name, lt_names[i].str)) {
|
||||
link->type = lt_names[i].type;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (strcasestr(link->name, "icon") ||
|
||||
(link->content_type && strcasestr(link->content_type, "icon"))) {
|
||||
if (c_strcasestr(link->name, "icon") ||
|
||||
(link->content_type && c_strcasestr(link->content_type, "icon"))) {
|
||||
link->type = LT_ICON;
|
||||
|
||||
} else if (strcasestr(link->name, "alternate")) {
|
||||
} else if (c_strcasestr(link->name, "alternate")) {
|
||||
link->type = LT_ALTERNATE;
|
||||
if (link->lang)
|
||||
link->type = LT_ALTERNATE_LANG;
|
||||
else if (strcasestr(link->name, "stylesheet") ||
|
||||
(link->content_type && strcasestr(link->content_type, "css")))
|
||||
else if (c_strcasestr(link->name, "stylesheet") ||
|
||||
(link->content_type && c_strcasestr(link->content_type, "css")))
|
||||
link->type = LT_ALTERNATE_STYLESHEET;
|
||||
else if (link->media)
|
||||
link->type = LT_ALTERNATE_MEDIA;
|
||||
|
||||
} else if (link->content_type && strcasestr(link->content_type, "css")) {
|
||||
} else if (link->content_type && c_strcasestr(link->content_type, "css")) {
|
||||
link->type = LT_STYLESHEET;
|
||||
}
|
||||
|
||||
@ -858,7 +858,7 @@ html_link(struct html_context *html_context, unsigned char *a,
|
||||
|
||||
if (link.lang && link.type == LT_ALTERNATE_LANG &&
|
||||
(link_display < 3 || (link.hreflang &&
|
||||
strcasecmp(link.hreflang, link.lang)))) {
|
||||
c_strcasecmp(link.hreflang, link.lang)))) {
|
||||
APPEND(link.lang);
|
||||
}
|
||||
|
||||
|
@ -153,7 +153,7 @@ next_attr:
|
||||
n = name;
|
||||
name_start = e;
|
||||
|
||||
while (atchr(*n) && atchr(*e) && toupper(*e) == toupper(*n)) e++, n++;
|
||||
while (atchr(*n) && atchr(*e) && c_toupper(*e) == c_toupper(*n)) e++, n++;
|
||||
found = !*n && !atchr(*e);
|
||||
|
||||
if (found && (flags & HTML_ATTR_TEST)) return name_start;
|
||||
@ -506,8 +506,8 @@ static struct element_info elements[] = {
|
||||
static int
|
||||
compar(const void *a, const void *b)
|
||||
{
|
||||
return strcasecmp(((struct element_info *) a)->name,
|
||||
((struct element_info *) b)->name);
|
||||
return c_strcasecmp(((struct element_info *) a)->name,
|
||||
((struct element_info *) b)->name);
|
||||
}
|
||||
|
||||
#else
|
||||
@ -550,7 +550,7 @@ void
|
||||
init_tags_lookup(void)
|
||||
{
|
||||
#ifdef USE_FASTFIND
|
||||
fastfind_index(&ff_tags_index, FF_COMPRESS);
|
||||
fastfind_index(&ff_tags_index, FF_COMPRESS | FF_LOCALE_INDEP);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -907,11 +907,11 @@ start_element(struct element_info *ei,
|
||||
foreach (e, html_context->stack) {
|
||||
if (is_block_element(e) && is_inline_element(ei)) break;
|
||||
if (e->type < ELEMENT_KILLABLE) break;
|
||||
if (!strlcasecmp(e->name, e->namelen, name, namelen)) break;
|
||||
if (!c_strlcasecmp(e->name, e->namelen, name, namelen)) break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!strlcasecmp(e->name, e->namelen, name, namelen)) {
|
||||
if (!c_strlcasecmp(e->name, e->namelen, name, namelen)) {
|
||||
while (e->prev != (void *) &html_context->stack)
|
||||
kill_html_stack_item(html_context, e->prev);
|
||||
|
||||
@ -1084,7 +1084,7 @@ end_element(struct element_info *ei,
|
||||
* quotation). "she said." will be rendered normally. */
|
||||
foreach (e, html_context->stack) {
|
||||
if (is_block_element(e) && is_inline_element(ei)) kill = 1;
|
||||
if (strlcasecmp(e->name, e->namelen, name, namelen)) {
|
||||
if (c_strlcasecmp(e->name, e->namelen, name, namelen)) {
|
||||
if (e->type < ELEMENT_KILLABLE)
|
||||
break;
|
||||
else
|
||||
@ -1183,10 +1183,10 @@ sp:
|
||||
if (parse_element(s, eof, &name, &namelen, &attr, &s)) goto sp;
|
||||
|
||||
ps:
|
||||
if (!strlcasecmp(name, namelen, "HEAD", 4)) goto se;
|
||||
if (!strlcasecmp(name, namelen, "/HEAD", 5)) return;
|
||||
if (!strlcasecmp(name, namelen, "BODY", 4)) return;
|
||||
if (title && !title->length && !strlcasecmp(name, namelen, "TITLE", 5)) {
|
||||
if (!c_strlcasecmp(name, namelen, "HEAD", 4)) goto se;
|
||||
if (!c_strlcasecmp(name, namelen, "/HEAD", 5)) return;
|
||||
if (!c_strlcasecmp(name, namelen, "BODY", 4)) return;
|
||||
if (title && !title->length && !c_strlcasecmp(name, namelen, "TITLE", 5)) {
|
||||
unsigned char *s1;
|
||||
|
||||
xse:
|
||||
@ -1209,7 +1209,7 @@ xsp:
|
||||
clr_spaces(title->source);
|
||||
goto ps;
|
||||
}
|
||||
if (strlcasecmp(name, namelen, "META", 4)) goto se;
|
||||
if (c_strlcasecmp(name, namelen, "META", 4)) goto se;
|
||||
|
||||
/* FIXME (bug 784): options->cp is the terminal charset;
|
||||
* should use the document charset instead. */
|
||||
|
@ -62,7 +62,7 @@ search_html_stack(struct html_context *html_context, unsigned char *name)
|
||||
foreach (element, html_context->stack) {
|
||||
if (element == html_top)
|
||||
continue; /* skip the top element */
|
||||
if (strlcasecmp(element->name, element->namelen, name, namelen))
|
||||
if (c_strlcasecmp(element->name, element->namelen, name, namelen))
|
||||
continue;
|
||||
return element;
|
||||
}
|
||||
@ -218,7 +218,7 @@ kill_html_stack_until(struct html_context *html_context, int ls, ...)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (strlcasecmp(e->name, e->namelen, s, slen))
|
||||
if (c_strlcasecmp(e->name, e->namelen, s, slen))
|
||||
continue;
|
||||
|
||||
if (!sk) {
|
||||
@ -240,11 +240,11 @@ kill_html_stack_until(struct html_context *html_context, int ls, ...)
|
||||
va_end(arg);
|
||||
|
||||
if (e->type < ELEMENT_KILLABLE
|
||||
|| (!strlcasecmp(e->name, e->namelen, "TABLE", 5)))
|
||||
|| (!c_strlcasecmp(e->name, e->namelen, "TABLE", 5)))
|
||||
break;
|
||||
|
||||
if (e->namelen == 2 && toupper(e->name[0]) == 'T') {
|
||||
unsigned char c = toupper(e->name[1]);
|
||||
if (e->namelen == 2 && c_toupper(e->name[0]) == 'T') {
|
||||
unsigned char c = c_toupper(e->name[1]);
|
||||
|
||||
if (c == 'D' || c == 'H' || c == 'R')
|
||||
break;
|
||||
|
@ -89,11 +89,11 @@ get_align(struct html_context *html_context, unsigned char *attr, int *a)
|
||||
|
||||
if (!al) return;
|
||||
|
||||
if (!strcasecmp(al, "left")) *a = ALIGN_LEFT;
|
||||
else if (!strcasecmp(al, "right")) *a = ALIGN_RIGHT;
|
||||
else if (!strcasecmp(al, "center")) *a = ALIGN_CENTER;
|
||||
else if (!strcasecmp(al, "justify")) *a = ALIGN_JUSTIFY;
|
||||
else if (!strcasecmp(al, "char")) *a = ALIGN_RIGHT; /* NOT IMPLEMENTED */
|
||||
if (!c_strcasecmp(al, "left")) *a = ALIGN_LEFT;
|
||||
else if (!c_strcasecmp(al, "right")) *a = ALIGN_RIGHT;
|
||||
else if (!c_strcasecmp(al, "center")) *a = ALIGN_CENTER;
|
||||
else if (!c_strcasecmp(al, "justify")) *a = ALIGN_JUSTIFY;
|
||||
else if (!c_strcasecmp(al, "char")) *a = ALIGN_RIGHT; /* NOT IMPLEMENTED */
|
||||
mem_free(al);
|
||||
}
|
||||
|
||||
@ -104,10 +104,10 @@ get_valign(struct html_context *html_context, unsigned char *attr, int *a)
|
||||
|
||||
if (!al) return;
|
||||
|
||||
if (!strcasecmp(al, "top")) *a = VALIGN_TOP;
|
||||
else if (!strcasecmp(al, "middle")) *a = VALIGN_MIDDLE;
|
||||
else if (!strcasecmp(al, "bottom")) *a = VALIGN_BOTTOM;
|
||||
else if (!strcasecmp(al, "baseline")) *a = VALIGN_BASELINE; /* NOT IMPLEMENTED */
|
||||
if (!c_strcasecmp(al, "top")) *a = VALIGN_TOP;
|
||||
else if (!c_strcasecmp(al, "middle")) *a = VALIGN_MIDDLE;
|
||||
else if (!c_strcasecmp(al, "bottom")) *a = VALIGN_BOTTOM;
|
||||
else if (!c_strcasecmp(al, "baseline")) *a = VALIGN_BASELINE; /* NOT IMPLEMENTED */
|
||||
mem_free(al);
|
||||
}
|
||||
|
||||
@ -154,16 +154,16 @@ set_table_frame(struct html_context *html_context, struct table *table,
|
||||
al = get_attr_val(attr, "frame", html_context->doc_cp);
|
||||
if (!al) return;
|
||||
|
||||
if (!strcasecmp(al, "void")) table->frame = TABLE_FRAME_VOID;
|
||||
else if (!strcasecmp(al, "above")) table->frame = TABLE_FRAME_ABOVE;
|
||||
else if (!strcasecmp(al, "below")) table->frame = TABLE_FRAME_BELOW;
|
||||
else if (!strcasecmp(al, "hsides")) table->frame = TABLE_FRAME_HSIDES;
|
||||
else if (!strcasecmp(al, "vsides")) table->frame = TABLE_FRAME_VSIDES;
|
||||
else if (!strcasecmp(al, "lhs")) table->frame = TABLE_FRAME_LHS;
|
||||
else if (!strcasecmp(al, "rhs")) table->frame = TABLE_FRAME_RHS;
|
||||
if (!c_strcasecmp(al, "void")) table->frame = TABLE_FRAME_VOID;
|
||||
else if (!c_strcasecmp(al, "above")) table->frame = TABLE_FRAME_ABOVE;
|
||||
else if (!c_strcasecmp(al, "below")) table->frame = TABLE_FRAME_BELOW;
|
||||
else if (!c_strcasecmp(al, "hsides")) table->frame = TABLE_FRAME_HSIDES;
|
||||
else if (!c_strcasecmp(al, "vsides")) table->frame = TABLE_FRAME_VSIDES;
|
||||
else if (!c_strcasecmp(al, "lhs")) table->frame = TABLE_FRAME_LHS;
|
||||
else if (!c_strcasecmp(al, "rhs")) table->frame = TABLE_FRAME_RHS;
|
||||
/* Following tests are useless since TABLE_FRAME_BOX is the default.
|
||||
* else if (!strcasecmp(al, "box")) table->frame = TABLE_FRAME_BOX;
|
||||
* else if (!strcasecmp(al, "border")) table->frame = TABLE_FRAME_BOX;
|
||||
* else if (!c_strcasecmp(al, "box")) table->frame = TABLE_FRAME_BOX;
|
||||
* else if (!c_strcasecmp(al, "border")) table->frame = TABLE_FRAME_BOX;
|
||||
*/
|
||||
mem_free(al);
|
||||
}
|
||||
@ -179,11 +179,11 @@ set_table_rules(struct html_context *html_context, struct table *table,
|
||||
al = get_attr_val(attr, "rules", html_context->doc_cp);
|
||||
if (!al) return;
|
||||
|
||||
if (!strcasecmp(al, "none")) table->rules = TABLE_RULE_NONE;
|
||||
else if (!strcasecmp(al, "groups")) table->rules = TABLE_RULE_GROUPS;
|
||||
else if (!strcasecmp(al, "rows")) table->rules = TABLE_RULE_ROWS;
|
||||
else if (!strcasecmp(al, "cols")) table->rules = TABLE_RULE_COLS;
|
||||
else if (!strcasecmp(al, "all")) table->rules = TABLE_RULE_ALL;
|
||||
if (!c_strcasecmp(al, "none")) table->rules = TABLE_RULE_NONE;
|
||||
else if (!c_strcasecmp(al, "groups")) table->rules = TABLE_RULE_GROUPS;
|
||||
else if (!c_strcasecmp(al, "rows")) table->rules = TABLE_RULE_ROWS;
|
||||
else if (!c_strcasecmp(al, "cols")) table->rules = TABLE_RULE_COLS;
|
||||
else if (!c_strcasecmp(al, "all")) table->rules = TABLE_RULE_ALL;
|
||||
mem_free(al);
|
||||
}
|
||||
|
||||
@ -527,7 +527,7 @@ skip_table(unsigned char *html, unsigned char *eof)
|
||||
}
|
||||
|
||||
|
||||
if (!strlcasecmp(name, namelen, "TABLE", 5)) {
|
||||
if (!c_strlcasecmp(name, namelen, "TABLE", 5)) {
|
||||
if (!closing_tag) {
|
||||
level++;
|
||||
} else {
|
||||
@ -608,7 +608,7 @@ see:
|
||||
closing_tag = 0;
|
||||
}
|
||||
|
||||
if (!strlcasecmp(name, namelen, "TABLE", 5)) {
|
||||
if (!c_strlcasecmp(name, namelen, "TABLE", 5)) {
|
||||
if (!closing_tag) {
|
||||
en = skip_table(en, eof);
|
||||
goto see;
|
||||
@ -623,7 +623,7 @@ see:
|
||||
}
|
||||
}
|
||||
|
||||
if (!strlcasecmp(name, namelen, "CAPTION", 7)) {
|
||||
if (!c_strlcasecmp(name, namelen, "CAPTION", 7)) {
|
||||
if (!closing_tag) {
|
||||
add_table_bad_html_end(table, html);
|
||||
if (!table->caption.start)
|
||||
@ -637,7 +637,7 @@ see:
|
||||
goto see;
|
||||
}
|
||||
|
||||
if (!strlcasecmp(name, namelen, "COLGROUP", 8)) {
|
||||
if (!c_strlcasecmp(name, namelen, "COLGROUP", 8)) {
|
||||
if (c_span) new_columns(table, c_span, c_width, c_al, c_val, 1);
|
||||
|
||||
add_table_bad_html_end(table, html);
|
||||
@ -663,7 +663,7 @@ see:
|
||||
goto see;
|
||||
}
|
||||
|
||||
if (!closing_tag && !strlcasecmp(name, namelen, "COL", 3)) {
|
||||
if (!closing_tag && !c_strlcasecmp(name, namelen, "COL", 3)) {
|
||||
int sp, width, al, val;
|
||||
|
||||
add_table_bad_html_end(table, html);
|
||||
@ -684,12 +684,12 @@ see:
|
||||
}
|
||||
|
||||
/* All following tags have T as first letter. */
|
||||
if (toupper(name[0]) != 'T') goto see;
|
||||
if (c_toupper(name[0]) != 'T') goto see;
|
||||
|
||||
name++; namelen--;
|
||||
if (namelen == 0) goto see;
|
||||
|
||||
c = toupper(name[0]);
|
||||
c = c_toupper(name[0]);
|
||||
|
||||
/* /TR /TD /TH */
|
||||
if (closing_tag && namelen == 1) {
|
||||
@ -712,9 +712,9 @@ see:
|
||||
|
||||
/* THEAD TBODY TFOOT */
|
||||
if (namelen == 4
|
||||
&& ((!strlcasecmp(name, namelen, "HEAD", 4)) ||
|
||||
(!strlcasecmp(name, namelen, "BODY", 4)) ||
|
||||
(!strlcasecmp(name, namelen, "FOOT", 4)))) {
|
||||
&& ((!c_strlcasecmp(name, namelen, "HEAD", 4)) ||
|
||||
(!c_strlcasecmp(name, namelen, "BODY", 4)) ||
|
||||
(!c_strlcasecmp(name, namelen, "FOOT", 4)))) {
|
||||
if (c_span) new_columns(table, c_span, c_width, c_al, c_val, 1);
|
||||
|
||||
add_table_bad_html_end(table, html);
|
||||
|
@ -1389,7 +1389,7 @@ new_link(struct html_context *html_context, unsigned char *name, int namelen)
|
||||
if (!format.form) {
|
||||
link->target = null_or_stracpy(format.target);
|
||||
link->data.name = memacpy(name, namelen);
|
||||
/* if (strlen(url) > 4 && !strncasecmp(url, "MAP@", 4)) { */
|
||||
/* if (strlen(url) > 4 && !c_strncasecmp(url, "MAP@", 4)) { */
|
||||
if (format.link
|
||||
&& ((format.link[0]|32) == 'm')
|
||||
&& ((format.link[1]|32) == 'a')
|
||||
|
@ -96,7 +96,7 @@ int
|
||||
compare_opt(struct document_options *o1, struct document_options *o2)
|
||||
{
|
||||
return memcmp(o1, o2, offsetof(struct document_options, framename))
|
||||
|| strcasecmp(o1->framename, o2->framename)
|
||||
|| c_strcasecmp(o1->framename, o2->framename)
|
||||
|| (o1->box.x != o2->box.x)
|
||||
|| (o1->box.y != o2->box.y)
|
||||
|| ((o1->needs_height || o2->needs_height)
|
||||
|
@ -244,13 +244,13 @@ render_encoded_document(struct cache_entry *cached, struct document *document)
|
||||
if (document->options.plain) {
|
||||
#ifdef CONFIG_DOM
|
||||
if (cached->content_type
|
||||
&& (!strcasecmp("text/html", cached->content_type)
|
||||
|| !strcasecmp("application/xhtml+xml", cached->content_type)
|
||||
|| !strcasecmp("application/docbook+xml", cached->content_type)
|
||||
|| !strcasecmp("application/rss+xml", cached->content_type)
|
||||
|| !strcasecmp("application/xbel+xml", cached->content_type)
|
||||
|| !strcasecmp("application/x-xbel", cached->content_type)
|
||||
|| !strcasecmp("application/xbel", cached->content_type)))
|
||||
&& (!c_strcasecmp("text/html", cached->content_type)
|
||||
|| !c_strcasecmp("application/xhtml+xml", cached->content_type)
|
||||
|| !c_strcasecmp("application/docbook+xml", cached->content_type)
|
||||
|| !c_strcasecmp("application/rss+xml", cached->content_type)
|
||||
|| !c_strcasecmp("application/xbel+xml", cached->content_type)
|
||||
|| !c_strcasecmp("application/x-xbel", cached->content_type)
|
||||
|| !c_strcasecmp("application/xbel", cached->content_type)))
|
||||
render_dom_document(cached, document, &buffer);
|
||||
else
|
||||
#endif
|
||||
@ -259,7 +259,7 @@ render_encoded_document(struct cache_entry *cached, struct document *document)
|
||||
} else {
|
||||
#ifdef CONFIG_DOM
|
||||
if (cached->content_type
|
||||
&& (!strlcasecmp("application/rss+xml", 19, cached->content_type, -1)))
|
||||
&& (!c_strlcasecmp("application/rss+xml", 19, cached->content_type, -1)))
|
||||
render_dom_document(cached, document, &buffer);
|
||||
else
|
||||
#endif
|
||||
|
@ -290,7 +290,7 @@ scan_css_token(struct dom_scanner *scanner, struct dom_scanner_token *token)
|
||||
|
||||
} else if (first_char == '!') {
|
||||
scan_css(scanner, string, CSS_CHAR_WHITESPACE);
|
||||
if (!strncasecmp(string, "important", 9)) {
|
||||
if (!c_strncasecmp(string, "important", 9)) {
|
||||
type = CSS_TOKEN_IMPORTANT;
|
||||
string += 9;
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ struct dom_scanner_token {
|
||||
/** Compare the token string to a "static" string */
|
||||
#define dom_scanner_token_contains(token, str) \
|
||||
((token)->string.length == (sizeof(str) - 1) \
|
||||
&& !strncasecmp((token)->string.string, str, sizeof(str) - 1))
|
||||
&& !c_strncasecmp((token)->string.string, str, sizeof(str) - 1))
|
||||
|
||||
|
||||
struct dom_scan_table_info {
|
||||
|
@ -1,6 +1,7 @@
|
||||
#ifndef EL_DOM_STRING_H
|
||||
#define EL_DOM_STRING_H
|
||||
|
||||
#include "util/conv.h"
|
||||
#include "util/memory.h"
|
||||
|
||||
/* For now DOM has it's own little string library. Mostly because there are
|
||||
@ -31,9 +32,9 @@ static inline int
|
||||
dom_string_casecmp(const struct dom_string *string1, const struct dom_string *string2)
|
||||
{
|
||||
size_t length = int_min(string1->length, string2->length);
|
||||
size_t string_diff = strncasecmp(string1->string, string2->string, length);
|
||||
size_t string_diff = c_strncasecmp(string1->string, string2->string, length);
|
||||
|
||||
/* If the lengths or strings don't match strncasecmp() does the
|
||||
/* If the lengths or strings don't match c_strncasecmp() does the
|
||||
* job else return which ever is bigger. */
|
||||
return string_diff ? string_diff : string1->length - string2->length;
|
||||
}
|
||||
@ -41,7 +42,7 @@ dom_string_casecmp(const struct dom_string *string1, const struct dom_string *st
|
||||
static inline int
|
||||
dom_string_ncasecmp(struct dom_string *string1, struct dom_string *string2, size_t length)
|
||||
{
|
||||
return strncasecmp(string1->string, string2->string, length);
|
||||
return c_strncasecmp(string1->string, string2->string, length);
|
||||
}
|
||||
|
||||
#define copy_dom_string(string1, string2) \
|
||||
|
@ -153,7 +153,7 @@ document_get(struct SEE_interpreter *interp, struct SEE_object *o,
|
||||
if (!string) return;
|
||||
|
||||
foreach (form, document->forms) {
|
||||
if (!form->name || strcasecmp(string, form->name))
|
||||
if (!form->name || c_strcasecmp(string, form->name))
|
||||
continue;
|
||||
form_view = find_form_view(doc_view, form);
|
||||
form_object = js_get_form_object(interp, doc, form_view);
|
||||
|
@ -689,7 +689,7 @@ js_form_elems_namedItem(struct SEE_interpreter *interp, struct SEE_object *self,
|
||||
return;
|
||||
|
||||
foreach (fc, form->items) {
|
||||
if ((fc->id && !strcasecmp(string, fc->id)) || (fc->name && !strcasecmp(string, fc->name))) {
|
||||
if ((fc->id && !c_strcasecmp(string, fc->id)) || (fc->name && !c_strcasecmp(string, fc->name))) {
|
||||
struct form_state *fs = find_form_state(doc_view, fc);
|
||||
|
||||
if (fs) {
|
||||
@ -815,7 +815,7 @@ js_forms_namedItem(struct SEE_interpreter *interp, struct SEE_object *self,
|
||||
if (!string)
|
||||
return;
|
||||
foreach (form, document->forms) {
|
||||
if (form->name && !strcasecmp(string, form->name)) {
|
||||
if (form->name && !c_strcasecmp(string, form->name)) {
|
||||
struct form_view *fv = find_form_view(doc_view, form);
|
||||
struct js_form *obj = js_get_form_object(interp,
|
||||
doc, fv);
|
||||
@ -952,7 +952,7 @@ form_get(struct SEE_interpreter *interp, struct SEE_object *o,
|
||||
struct js_input *fcobj = NULL;
|
||||
struct form_state *fs;
|
||||
|
||||
if ((!fc->id || strcasecmp(string, fc->id)) && (!fc->name || strcasecmp(string, fc->name)))
|
||||
if ((!fc->id || c_strcasecmp(string, fc->id)) && (!fc->name || c_strcasecmp(string, fc->name)))
|
||||
continue;
|
||||
fs = find_form_state(doc_view, fc);
|
||||
if (fs) {
|
||||
@ -989,19 +989,19 @@ form_put(struct SEE_interpreter *interp, struct SEE_object *o,
|
||||
mem_free_set(&form->action, string);
|
||||
}
|
||||
} else if (p == s_encoding) {
|
||||
if (!strcasecmp(string, "application/x-www-form-urlencoded")) {
|
||||
if (!c_strcasecmp(string, "application/x-www-form-urlencoded")) {
|
||||
form->method = form->method == FORM_METHOD_GET ? FORM_METHOD_GET
|
||||
: FORM_METHOD_POST;
|
||||
} else if (!strcasecmp(string, "multipart/form-data")) {
|
||||
} else if (!c_strcasecmp(string, "multipart/form-data")) {
|
||||
form->method = FORM_METHOD_POST_MP;
|
||||
} else if (!strcasecmp(string, "text/plain")) {
|
||||
} else if (!c_strcasecmp(string, "text/plain")) {
|
||||
form->method = FORM_METHOD_POST_TEXT_PLAIN;
|
||||
}
|
||||
mem_free(string);
|
||||
} else if (p == s_method) {
|
||||
if (!strcasecmp(string, "GET")) {
|
||||
if (!c_strcasecmp(string, "GET")) {
|
||||
form->method = FORM_METHOD_GET;
|
||||
} else if (!strcasecmp(string, "POST")) {
|
||||
} else if (!c_strcasecmp(string, "POST")) {
|
||||
form->method = FORM_METHOD_POST;
|
||||
}
|
||||
mem_free(string);
|
||||
|
@ -304,7 +304,7 @@ js_window_open(struct SEE_interpreter *interp, struct SEE_object *self,
|
||||
return;
|
||||
}
|
||||
|
||||
if (frame && *frame && strcasecmp(frame, "_blank")) {
|
||||
if (frame && *frame && c_strcasecmp(frame, "_blank")) {
|
||||
struct delayed_open *deo = mem_calloc(1, sizeof(*deo));
|
||||
|
||||
if (deo) {
|
||||
|
@ -126,7 +126,7 @@ document_get_property(JSContext *ctx, JSObject *obj, jsval id, jsval *vp)
|
||||
}
|
||||
#endif
|
||||
foreach (form, document->forms) {
|
||||
if (!form->name || strcasecmp(string, form->name))
|
||||
if (!form->name || c_strcasecmp(string, form->name))
|
||||
continue;
|
||||
|
||||
object_to_jsval(ctx, vp, get_form_object(ctx, obj, find_form_view(doc_view, form)));
|
||||
|
@ -857,7 +857,8 @@ form_elements_namedItem(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv,
|
||||
undef_to_jsval(ctx, rval);
|
||||
|
||||
foreach (fc, form->items) {
|
||||
if ((fc->id && !strcasecmp(string, fc->id)) || (fc->name && !strcasecmp(string, fc->name))) {
|
||||
if ((fc->id && !c_strcasecmp(string, fc->id))
|
||||
|| (fc->name && !c_strcasecmp(string, fc->name))) {
|
||||
struct form_state *fs = find_form_state(doc_view, fc);
|
||||
|
||||
if (fs) {
|
||||
@ -979,7 +980,8 @@ form_get_property(JSContext *ctx, JSObject *obj, jsval id, jsval *vp)
|
||||
JSObject *fcobj = NULL;
|
||||
struct form_state *fs;
|
||||
|
||||
if ((!fc->id || strcasecmp(string, fc->id)) && (!fc->name || strcasecmp(string, fc->name)))
|
||||
if ((!fc->id || c_strcasecmp(string, fc->id))
|
||||
&& (!fc->name || c_strcasecmp(string, fc->name)))
|
||||
continue;
|
||||
|
||||
undef_to_jsval(ctx, vp);
|
||||
@ -1120,21 +1122,21 @@ form_set_property(JSContext *ctx, JSObject *obj, jsval id, jsval *vp)
|
||||
|
||||
case JSP_FORM_ENCODING:
|
||||
string = jsval_to_string(ctx, vp);
|
||||
if (!strcasecmp(string, "application/x-www-form-urlencoded")) {
|
||||
if (!c_strcasecmp(string, "application/x-www-form-urlencoded")) {
|
||||
form->method = form->method == FORM_METHOD_GET ? FORM_METHOD_GET
|
||||
: FORM_METHOD_POST;
|
||||
} else if (!strcasecmp(string, "multipart/form-data")) {
|
||||
} else if (!c_strcasecmp(string, "multipart/form-data")) {
|
||||
form->method = FORM_METHOD_POST_MP;
|
||||
} else if (!strcasecmp(string, "text/plain")) {
|
||||
} else if (!c_strcasecmp(string, "text/plain")) {
|
||||
form->method = FORM_METHOD_POST_TEXT_PLAIN;
|
||||
}
|
||||
break;
|
||||
|
||||
case JSP_FORM_METHOD:
|
||||
string = jsval_to_string(ctx, vp);
|
||||
if (!strcasecmp(string, "GET")) {
|
||||
if (!c_strcasecmp(string, "GET")) {
|
||||
form->method = FORM_METHOD_GET;
|
||||
} else if (!strcasecmp(string, "POST")) {
|
||||
} else if (!c_strcasecmp(string, "POST")) {
|
||||
form->method = FORM_METHOD_POST;
|
||||
}
|
||||
break;
|
||||
@ -1353,7 +1355,7 @@ find_form_by_name(JSContext *ctx, JSObject *jsdoc,
|
||||
return;
|
||||
|
||||
foreach (form, doc_view->document->forms) {
|
||||
if (form->name && !strcasecmp(string, form->name)) {
|
||||
if (form->name && !c_strcasecmp(string, form->name)) {
|
||||
object_to_jsval(ctx, rval, get_form_object(ctx, jsdoc,
|
||||
find_form_view(doc_view, form)));
|
||||
break;
|
||||
|
@ -399,7 +399,7 @@ window_open(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if (frame && *frame && strcasecmp(frame, "_blank")) {
|
||||
if (frame && *frame && c_strcasecmp(frame, "_blank")) {
|
||||
struct delayed_open *deo = mem_calloc(1, sizeof(*deo));
|
||||
|
||||
if (deo) {
|
||||
|
@ -318,7 +318,7 @@ globhist_simple_search(unsigned char *search_url, unsigned char *search_title)
|
||||
if ((*search_title
|
||||
&& strcasestr(history_item->title, search_title))
|
||||
|| (*search_url
|
||||
&& strcasestr(history_item->url, search_url))) {
|
||||
&& c_strcasestr(history_item->url, search_url))) {
|
||||
history_item->box_item->visible = 1;
|
||||
} else {
|
||||
history_item->box_item->visible = 0;
|
||||
|
@ -1376,7 +1376,7 @@ get_cp_index(const unsigned char *name)
|
||||
int i, a;
|
||||
int syscp = 0;
|
||||
|
||||
if (!strcasecmp(name, "System")) {
|
||||
if (!c_strcasecmp(name, "System")) {
|
||||
#if HAVE_LANGINFO_CODESET
|
||||
name = nl_langinfo(CODESET);
|
||||
syscp = SYSTEM_CHARSET_FLAG;
|
||||
@ -1399,7 +1399,7 @@ get_cp_index(const unsigned char *name)
|
||||
* once. So we will do a simple strcasecmp() here.
|
||||
*/
|
||||
|
||||
if (!strcasecmp(name, codepages[i].aliases[a]))
|
||||
if (!c_strcasecmp(name, codepages[i].aliases[a]))
|
||||
return i | syscp;
|
||||
}
|
||||
}
|
||||
@ -1457,7 +1457,7 @@ get_cp_index(const unsigned char *name)
|
||||
const struct codepage_desc *codepage;
|
||||
int syscp = 0;
|
||||
|
||||
if (!strcasecmp(name, "System")) {
|
||||
if (!c_strcasecmp(name, "System")) {
|
||||
#if HAVE_LANGINFO_CODESET
|
||||
name = nl_langinfo(CODESET);
|
||||
syscp = SYSTEM_CHARSET_FLAG;
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include "elinks.h"
|
||||
|
||||
#include "intl/gettext/loadinfo.h"
|
||||
#include "util/conv.h"
|
||||
#include "util/string.h"
|
||||
|
||||
/* Awful hack to permit compilation under cygwin and its broken configure.
|
||||
@ -349,7 +350,7 @@ _nl_normalize_codeset(const unsigned char *codeset, size_t name_len)
|
||||
|
||||
for (cnt = 0; cnt < name_len; ++cnt)
|
||||
if (isalpha(codeset[cnt]))
|
||||
*wp++ = tolower(codeset[cnt]);
|
||||
*wp++ = c_tolower(codeset[cnt]);
|
||||
else if (isdigit(codeset[cnt]))
|
||||
*wp++ = codeset[cnt];
|
||||
|
||||
|
@ -152,7 +152,7 @@ name_to_language(const unsigned char *name)
|
||||
int i;
|
||||
|
||||
for (i = 0; languages[i].name; i++) {
|
||||
if (strcasecmp(languages[i].name, name))
|
||||
if (c_strcasecmp(languages[i].name, name))
|
||||
continue;
|
||||
return i;
|
||||
}
|
||||
|
@ -285,5 +285,5 @@ extend_alias_table(void)
|
||||
static int
|
||||
alias_compare(const struct alias_map *map1, const struct alias_map *map2)
|
||||
{
|
||||
return strcasecmp(map1->alias, map2->alias);
|
||||
return c_strcasecmp(map1->alias, map2->alias);
|
||||
}
|
||||
|
@ -280,13 +280,13 @@ parse_optional_fields(struct mailcap_entry *entry, unsigned char *line)
|
||||
|
||||
if (!field) break;
|
||||
|
||||
if (!strncasecmp(field, "needsterminal", 13)) {
|
||||
if (!c_strncasecmp(field, "needsterminal", 13)) {
|
||||
entry->needsterminal = 1;
|
||||
|
||||
} else if (!strncasecmp(field, "copiousoutput", 13)) {
|
||||
} else if (!c_strncasecmp(field, "copiousoutput", 13)) {
|
||||
entry->copiousoutput = 1;
|
||||
|
||||
} else if (!strncasecmp(field, "test", 4)) {
|
||||
} else if (!c_strncasecmp(field, "test", 4)) {
|
||||
entry->testcommand = get_mailcap_field_text(field + 4);
|
||||
if (!entry->testcommand)
|
||||
return 0;
|
||||
@ -298,7 +298,7 @@ parse_optional_fields(struct mailcap_entry *entry, unsigned char *line)
|
||||
return 0;
|
||||
}
|
||||
|
||||
} else if (!strncasecmp(field, "description", 11)) {
|
||||
} else if (!c_strncasecmp(field, "description", 11)) {
|
||||
entry->description = get_mailcap_field_text(field + 11);
|
||||
if (!entry->description)
|
||||
return 0;
|
||||
|
@ -249,7 +249,7 @@ get_fragment_content_type(struct cache_entry *cached)
|
||||
if (!sample)
|
||||
return NULL;
|
||||
|
||||
if (strcasestr(sample, "<html>"))
|
||||
if (c_strcasestr(sample, "<html>"))
|
||||
ctype = stracpy("text/html");
|
||||
|
||||
mem_free(sample);
|
||||
@ -291,7 +291,7 @@ get_content_type(struct cache_entry *cached)
|
||||
* is with default (via option system) and mimetypes resolving
|
||||
* doing that option and hash lookup will not be easy to
|
||||
* convert. --jonas */
|
||||
convert_to_lowercase(extension, strlen(extension));
|
||||
convert_to_lowercase_locale_indep(extension, strlen(extension));
|
||||
|
||||
ctype = get_extension_content_type(extension);
|
||||
mem_free(extension);
|
||||
|
@ -89,7 +89,7 @@ find_in_dns_cache(unsigned char *name)
|
||||
struct dnsentry *dnsentry;
|
||||
|
||||
foreach (dnsentry, dns_cache)
|
||||
if (!strcasecmp(dnsentry->name, name)) {
|
||||
if (!c_strcasecmp(dnsentry->name, name)) {
|
||||
move_to_top_of_list(dns_cache, dnsentry);
|
||||
return dnsentry;
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ get_system_env(void)
|
||||
int env = get_common_env();
|
||||
unsigned char *term = getenv("TERM");
|
||||
|
||||
if (!term || (toupper(term[0]) == 'B' && toupper(term[1]) == 'E'))
|
||||
if (!term || (c_toupper(term[0]) == 'B' && c_toupper(term[1]) == 'E'))
|
||||
env |= ENV_BE;
|
||||
|
||||
return env;
|
||||
|
@ -297,7 +297,7 @@ auth_user_matching_uri(struct auth_entry *auth, struct uri *uri)
|
||||
{
|
||||
if (!uri->userlen) /* Noone said it doesn't. */
|
||||
return 1;
|
||||
return !strlcasecmp(auth->user, -1, uri->user, uri->userlen);
|
||||
return !c_strlcasecmp(auth->user, -1, uri->user, uri->userlen);
|
||||
}
|
||||
|
||||
|
||||
@ -907,7 +907,7 @@ next:
|
||||
if (pos + 4 > data_len)
|
||||
return -1;
|
||||
|
||||
if (strncasecmp(&data[pos], "byte", 4))
|
||||
if (c_strncasecmp(&data[pos], "byte", 4))
|
||||
return -1;
|
||||
|
||||
errno = 0;
|
||||
|
@ -224,7 +224,7 @@ add_gopher_command(struct connection *conn, struct string *command,
|
||||
querylen = selector + selectorlen - query;
|
||||
/* Exclude '?' */
|
||||
selectorlen -= querylen + 1;
|
||||
if (querylen >= 7 && !strncasecmp(query, "search=", 7)) {
|
||||
if (querylen >= 7 && !c_strncasecmp(query, "search=", 7)) {
|
||||
query += 7;
|
||||
querylen -= 7;
|
||||
}
|
||||
|
@ -133,7 +133,7 @@ parse_header(unsigned char *head, unsigned char *item, unsigned char **ptr)
|
||||
|
||||
/* Does item match header line ? */
|
||||
for (itempos = item; *itempos && *pos; itempos++, pos++)
|
||||
if (toupper(*itempos) != toupper(*pos))
|
||||
if (c_toupper(*itempos) != c_toupper(*pos))
|
||||
break;
|
||||
|
||||
if (!*pos) break; /* Nothing left to parse. */
|
||||
@ -226,7 +226,7 @@ parse_header_param(unsigned char *str, unsigned char *name, unsigned char **ret)
|
||||
|
||||
while (*p && (*p == ';' || *p <= ' ')) p++;
|
||||
if (strlen(p) < namelen) return HEADER_PARAM_NOT_FOUND;
|
||||
} while (strncasecmp(p, name, namelen));
|
||||
} while (c_strncasecmp(p, name, namelen));
|
||||
|
||||
p += namelen;
|
||||
|
||||
@ -275,11 +275,11 @@ get_header_param(unsigned char *e, unsigned char *name)
|
||||
unsigned char *n, *start;
|
||||
|
||||
again:
|
||||
while (*e && toupper(*e++) != toupper(*name));
|
||||
while (*e && c_toupper(*e++) != c_toupper(*name));
|
||||
if (!*e) return NULL;
|
||||
|
||||
n = name + 1;
|
||||
while (*n && toupper(*e) == toupper(*n)) e++, n++;
|
||||
while (*n && c_toupper(*e) == c_toupper(*n)) e++, n++;
|
||||
if (*n) goto again;
|
||||
|
||||
skip_space(e);
|
||||
|
@ -34,7 +34,7 @@ get_blacklist_entry(struct uri *uri)
|
||||
if_assert_failed return NULL;
|
||||
|
||||
foreach (entry, blacklist)
|
||||
if (!strlcasecmp(entry->host, -1, uri->host, uri->hostlen))
|
||||
if (!c_strlcasecmp(entry->host, -1, uri->host, uri->hostlen))
|
||||
return entry;
|
||||
|
||||
return NULL;
|
||||
|
@ -385,8 +385,8 @@ get_http_code(struct read_buffer *rb, int *code, struct http_version *version)
|
||||
while (*head == ' ') head++;
|
||||
|
||||
/* HTTP/ */
|
||||
if (toupper(*head) != 'H' || toupper(*++head) != 'T' ||
|
||||
toupper(*++head) != 'T' || toupper(*++head) != 'P'
|
||||
if (c_toupper(*head) != 'H' || c_toupper(*++head) != 'T' ||
|
||||
c_toupper(*++head) != 'T' || c_toupper(*++head) != 'P'
|
||||
|| *++head != '/')
|
||||
return -1;
|
||||
|
||||
@ -1409,7 +1409,7 @@ get_header(struct read_buffer *rb)
|
||||
/* XXX: We will have to do some guess about whether an HTTP header is
|
||||
* coming or not, in order to support HTTP/0.9 reply correctly. This
|
||||
* means a little code duplication with get_http_code(). --pasky */
|
||||
if (rb->length > 4 && strncasecmp(rb->data, "HTTP/", 5))
|
||||
if (rb->length > 4 && c_strncasecmp(rb->data, "HTTP/", 5))
|
||||
return -2;
|
||||
|
||||
for (i = 0; i < rb->length; i++) {
|
||||
@ -1446,7 +1446,7 @@ check_http_authentication(struct connection *conn, struct uri *uri,
|
||||
|
||||
d = parse_header(header, header_field, &str);
|
||||
while (d) {
|
||||
if (!strncasecmp(d, "Basic", 5)) {
|
||||
if (!c_strncasecmp(d, "Basic", 5)) {
|
||||
unsigned char *realm = get_header_param(d, "realm");
|
||||
|
||||
if (realm) {
|
||||
@ -1455,7 +1455,7 @@ check_http_authentication(struct connection *conn, struct uri *uri,
|
||||
mem_free(d);
|
||||
break;
|
||||
}
|
||||
} else if (!strncasecmp(d, "Digest", 6)) {
|
||||
} else if (!c_strncasecmp(d, "Digest", 6)) {
|
||||
unsigned char *realm = get_header_param(d, "realm");
|
||||
unsigned char *nonce = get_header_param(d, "nonce");
|
||||
unsigned char *opaque = get_header_param(d, "opaque");
|
||||
@ -1469,13 +1469,13 @@ check_http_authentication(struct connection *conn, struct uri *uri,
|
||||
break;
|
||||
}
|
||||
#ifdef CONFIG_GSSAPI
|
||||
else if (!strncasecmp(d, HTTPNEG_GSS_STR, HTTPNEG_GSS_STRLEN)) {
|
||||
else if (!c_strncasecmp(d, HTTPNEG_GSS_STR, HTTPNEG_GSS_STRLEN)) {
|
||||
if (http_negotiate_input(conn, uri, HTTPNEG_GSS, str)==0)
|
||||
ret = 1;
|
||||
mem_free(d);
|
||||
break;
|
||||
}
|
||||
else if (!strncasecmp(d, HTTPNEG_NEG_STR, HTTPNEG_NEG_STRLEN)) {
|
||||
else if (!c_strncasecmp(d, HTTPNEG_NEG_STR, HTTPNEG_NEG_STRLEN)) {
|
||||
if (http_negotiate_input(conn, uri, HTTPNEG_NEG, str)==0)
|
||||
ret = 1;
|
||||
mem_free(d);
|
||||
@ -1730,7 +1730,7 @@ again:
|
||||
|
||||
d = parse_header(conn->cached->head, "Proxy-Authenticate", &str);
|
||||
while (d) {
|
||||
if (!strncasecmp(d, "Basic", 5)) {
|
||||
if (!c_strncasecmp(d, "Basic", 5)) {
|
||||
unsigned char *realm = get_header_param(d, "realm");
|
||||
|
||||
if (realm) {
|
||||
@ -1740,7 +1740,7 @@ again:
|
||||
break;
|
||||
}
|
||||
|
||||
} else if (!strncasecmp(d, "Digest", 6)) {
|
||||
} else if (!c_strncasecmp(d, "Digest", 6)) {
|
||||
unsigned char *realm = get_header_param(d, "realm");
|
||||
unsigned char *nonce = get_header_param(d, "nonce");
|
||||
unsigned char *opaque = get_header_param(d, "opaque");
|
||||
@ -1766,7 +1766,7 @@ again:
|
||||
|
||||
if ((d = parse_header(conn->cached->head, "Connection", NULL))
|
||||
|| (d = parse_header(conn->cached->head, "Proxy-Connection", NULL))) {
|
||||
if (!strcasecmp(d, "close")) http->close = 1;
|
||||
if (!c_strcasecmp(d, "close")) http->close = 1;
|
||||
mem_free(d);
|
||||
} else if (PRE_HTTP_1_1(version)) {
|
||||
http->close = 1;
|
||||
@ -1778,7 +1778,7 @@ again:
|
||||
if (d) {
|
||||
if (strlen(d) > 6) {
|
||||
d[5] = 0;
|
||||
if (isdigit(d[6]) && !strcasecmp(d, "bytes")) {
|
||||
if (isdigit(d[6]) && !c_strcasecmp(d, "bytes")) {
|
||||
int f;
|
||||
|
||||
errno = 0;
|
||||
@ -1834,7 +1834,7 @@ again:
|
||||
d = parse_header(conn->cached->head, "Accept-Ranges", NULL);
|
||||
|
||||
if (d) {
|
||||
if (!strcasecmp(d, "none"))
|
||||
if (!c_strcasecmp(d, "none"))
|
||||
conn->unrestartable = 1;
|
||||
mem_free(d);
|
||||
} else {
|
||||
@ -1845,7 +1845,7 @@ again:
|
||||
|
||||
d = parse_header(conn->cached->head, "Transfer-Encoding", NULL);
|
||||
if (d) {
|
||||
if (!strcasecmp(d, "chunked")) {
|
||||
if (!c_strcasecmp(d, "chunked")) {
|
||||
http->length = LEN_CHUNKED;
|
||||
http->chunk_remaining = CHUNK_SIZE;
|
||||
}
|
||||
@ -1855,7 +1855,7 @@ again:
|
||||
|
||||
d = parse_header(conn->cached->head, "Last-Modified", NULL);
|
||||
if (d) {
|
||||
if (conn->cached->last_modified && strcasecmp(conn->cached->last_modified, d)) {
|
||||
if (conn->cached->last_modified && c_strcasecmp(conn->cached->last_modified, d)) {
|
||||
delete_entry_content(conn->cached);
|
||||
if (conn->from) {
|
||||
conn->from = 0;
|
||||
@ -1917,21 +1917,21 @@ again:
|
||||
* will leave the saved file with the correct encoding. */
|
||||
#ifdef CONFIG_GZIP
|
||||
if (file_encoding != ENCODING_GZIP
|
||||
&& (!strcasecmp(d, "gzip") || !strcasecmp(d, "x-gzip")))
|
||||
&& (!c_strcasecmp(d, "gzip") || !c_strcasecmp(d, "x-gzip")))
|
||||
conn->content_encoding = ENCODING_GZIP;
|
||||
if (!strcasecmp(d, "deflate") || !strcasecmp(d, "x-deflate"))
|
||||
if (!c_strcasecmp(d, "deflate") || !c_strcasecmp(d, "x-deflate"))
|
||||
conn->content_encoding = ENCODING_DEFLATE;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BZIP2
|
||||
if (file_encoding != ENCODING_BZIP2
|
||||
&& (!strcasecmp(d, "bzip2") || !strcasecmp(d, "x-bzip2")))
|
||||
&& (!c_strcasecmp(d, "bzip2") || !c_strcasecmp(d, "x-bzip2")))
|
||||
conn->content_encoding = ENCODING_BZIP2;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LZMA
|
||||
if (file_encoding != ENCODING_LZMA
|
||||
&& (!strcasecmp(d, "lzma") || !strcasecmp(d, "x-lzma")))
|
||||
&& (!c_strcasecmp(d, "lzma") || !c_strcasecmp(d, "x-lzma")))
|
||||
conn->content_encoding = ENCODING_LZMA;
|
||||
#endif
|
||||
mem_free(d);
|
||||
|
@ -297,9 +297,9 @@ add_header_to_string(struct string *str, unsigned char *header)
|
||||
break;
|
||||
|
||||
for (sp = end; sp < cp; sp++)
|
||||
charset_q[sp - end] = tolower(*sp);
|
||||
charset_q[sp - end] = c_tolower(*sp);
|
||||
charset_q[cp - end] = 0;
|
||||
encoding = tolower(cp[1]);
|
||||
encoding = c_tolower(cp[1]);
|
||||
|
||||
if (!encoding || cp[2] != '?')
|
||||
break;
|
||||
|
@ -114,7 +114,7 @@ get_protocol(unsigned char *name, int namelen)
|
||||
unsigned char *pname = protocol_backends[protocol].name;
|
||||
int pnamelen = strlen(pname);
|
||||
int minlen = int_min(pnamelen, namelen);
|
||||
int compare = strncasecmp(pname, name, minlen);
|
||||
int compare = c_strncasecmp(pname, name, minlen);
|
||||
|
||||
if (compare == 0) {
|
||||
if (pnamelen == namelen)
|
||||
|
@ -37,7 +37,7 @@ proxy_probe_no_proxy(unsigned char *url, unsigned char *no_proxy)
|
||||
skip_space(no_proxy);
|
||||
if (jumper) *jumper = '\0';
|
||||
|
||||
if (strcasestr(url, no_proxy)) {
|
||||
if (c_strcasestr(url, no_proxy)) {
|
||||
if (jumper) *jumper = ',';
|
||||
if (slash) *slash = '/';
|
||||
return 1;
|
||||
@ -86,9 +86,9 @@ strip_proxy_protocol(unsigned char *proxy,
|
||||
{
|
||||
assert(proxy && *proxy);
|
||||
|
||||
if (!strncasecmp(proxy, strip1, strlen(strip1)))
|
||||
if (!c_strncasecmp(proxy, strip1, strlen(strip1)))
|
||||
proxy += strlen(strip1);
|
||||
else if (strip2 && !strncasecmp(proxy, strip2, strlen(strip2)))
|
||||
else if (strip2 && !c_strncasecmp(proxy, strip2, strlen(strip2)))
|
||||
proxy += strlen(strip2);
|
||||
|
||||
return proxy;
|
||||
|
@ -67,13 +67,13 @@ is_in_domain(unsigned char *domain, unsigned char *server, int server_len)
|
||||
return 0;
|
||||
|
||||
if (domain_len == server_len)
|
||||
return !strncasecmp(domain, server, server_len);
|
||||
return !c_strncasecmp(domain, server, server_len);
|
||||
|
||||
len = server_len - domain_len;
|
||||
if (server[len - 1] != '.')
|
||||
return 0;
|
||||
|
||||
return !strncasecmp(domain, server + len, domain_len);
|
||||
return !c_strncasecmp(domain, server + len, domain_len);
|
||||
}
|
||||
|
||||
int
|
||||
@ -131,7 +131,7 @@ end_with_known_tld(const unsigned char *s, int slen)
|
||||
int tldlen = strlen(tld[i]);
|
||||
int pos = slen - tldlen;
|
||||
|
||||
if (pos >= 0 && !strncasecmp(&s[pos], tld[i], tldlen))
|
||||
if (pos >= 0 && !c_strncasecmp(&s[pos], tld[i], tldlen))
|
||||
return pos;
|
||||
}
|
||||
|
||||
@ -274,7 +274,7 @@ parse_uri(struct uri *uri, unsigned char *uristring)
|
||||
|
||||
/* A bit of a special case, but using the "normal" host
|
||||
* parsing seems a bit scary at this point. (see bug 107). */
|
||||
if (datalen > 9 && !strncasecmp(prefix_end, "localhost/", 10)) {
|
||||
if (datalen > 9 && !c_strncasecmp(prefix_end, "localhost/", 10)) {
|
||||
prefix_end += 9;
|
||||
datalen -= 9;
|
||||
}
|
||||
@ -711,8 +711,8 @@ normalize_uri(struct uri *uri, unsigned char *uristring)
|
||||
* get_translated_uri() through translate_url() calls this
|
||||
* function and then it already works on and modifies an
|
||||
* allocated copy. */
|
||||
convert_to_lowercase(uri->string, uri->protocollen);
|
||||
if (uri->hostlen) convert_to_lowercase(uri->host, uri->hostlen);
|
||||
convert_to_lowercase_locale_indep(uri->string, uri->protocollen);
|
||||
if (uri->hostlen) convert_to_lowercase_locale_indep(uri->host, uri->hostlen);
|
||||
|
||||
parse = 1;
|
||||
parse_string = uri->data;
|
||||
@ -1023,7 +1023,7 @@ find_uri_protocol(unsigned char *newurl)
|
||||
ch = newurl + strcspn(newurl, ".:/@");
|
||||
if (*ch == '@'
|
||||
|| (*ch == ':' && *newurl != '[' && strchr(newurl, '@'))
|
||||
|| !strncasecmp(newurl, "ftp.", 4)) {
|
||||
|| !c_strncasecmp(newurl, "ftp.", 4)) {
|
||||
/* Contains user/password/ftp-hostname */
|
||||
return PROTOCOL_FTP;
|
||||
|
||||
@ -1521,11 +1521,11 @@ check_uri_sanity(struct uri *uri)
|
||||
int pos;
|
||||
|
||||
for (pos = 0; pos < uri->protocollen; pos++)
|
||||
if (isupper(uri->string[pos])) goto error;
|
||||
if (c_isupper(uri->string[pos])) goto error;
|
||||
|
||||
if (uri->hostlen)
|
||||
for (pos = 0; pos < uri->hostlen; pos++)
|
||||
if (isupper(uri->host[pos])) goto error;
|
||||
if (c_isupper(uri->host[pos])) goto error;
|
||||
return;
|
||||
error:
|
||||
INTERNAL("Uppercase letters detected in protocol or host part (%s).", struri(uri));
|
||||
|
@ -104,7 +104,7 @@ get_user_program(struct terminal *term, unsigned char *progid, int progidlen)
|
||||
|
||||
/* Now add lowercased progid part. Delicious. */
|
||||
add_bytes_to_string(&name, progid, progidlen);
|
||||
convert_to_lowercase(&name.source[sizeof("protocol.user.") - 1], progidlen);
|
||||
convert_to_lowercase_locale_indep(&name.source[sizeof("protocol.user.") - 1], progidlen);
|
||||
|
||||
add_char_to_string(&name, '.');
|
||||
add_to_string(&name, get_system_str(xwin));
|
||||
|
@ -1316,7 +1316,7 @@ setup_download_handler(struct session *ses, struct download *loading,
|
||||
goto plaintext_follow;
|
||||
|
||||
for (i = 0; known_types[i].type; i++) {
|
||||
if (strcasecmp(ctype, known_types[i].type))
|
||||
if (c_strcasecmp(ctype, known_types[i].type))
|
||||
continue;
|
||||
|
||||
plaintext = known_types[i].plain;
|
||||
@ -1326,7 +1326,7 @@ setup_download_handler(struct session *ses, struct download *loading,
|
||||
xwin = ses->tab->term->environment & ENV_XWIN;
|
||||
handler = get_mime_type_handler(ctype, xwin);
|
||||
|
||||
if (!handler && strlen(ctype) >= 4 && !strncasecmp(ctype, "text", 4))
|
||||
if (!handler && strlen(ctype) >= 4 && !c_strncasecmp(ctype, "text", 4))
|
||||
goto plaintext_follow;
|
||||
|
||||
type_query = find_type_query(ses);
|
||||
@ -1339,8 +1339,8 @@ setup_download_handler(struct session *ses, struct download *loading,
|
||||
#ifdef CONFIG_BITTORRENT
|
||||
/* A terrible waste of a good MIME handler here, but we want
|
||||
* to use the type_query this is easier. */
|
||||
if ((!strcasecmp(ctype, "application/x-bittorrent")
|
||||
|| !strcasecmp(ctype, "application/x-torrent"))
|
||||
if ((!c_strcasecmp(ctype, "application/x-bittorrent")
|
||||
|| !c_strcasecmp(ctype, "application/x-torrent"))
|
||||
&& !get_cmd_opt_bool("anonymous"))
|
||||
query_bittorrent_dialog(type_query);
|
||||
else
|
||||
|
@ -341,7 +341,7 @@ request_frame(struct session *ses, unsigned char *name,
|
||||
foreach (frame, loc->frames) {
|
||||
struct document_view *doc_view;
|
||||
|
||||
if (strcasecmp(frame->name, name))
|
||||
if (c_strcasecmp(frame->name, name))
|
||||
continue;
|
||||
|
||||
foreach (doc_view, ses->scrn_frames) {
|
||||
@ -1255,7 +1255,7 @@ ses_find_frame(struct session *ses, unsigned char *name)
|
||||
if_assert_failed return NULL;
|
||||
|
||||
foreachback (frame, loc->frames)
|
||||
if (!strcasecmp(frame->name, name))
|
||||
if (!c_strcasecmp(frame->name, name))
|
||||
return frame;
|
||||
|
||||
return NULL;
|
||||
|
@ -69,7 +69,7 @@ void
|
||||
init_colors_lookup(void)
|
||||
{
|
||||
#ifdef USE_FASTFIND
|
||||
fastfind_index(&ff_colors_index, FF_COMPRESS);
|
||||
fastfind_index(&ff_colors_index, FF_COMPRESS | FF_LOCALE_INDEP);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -112,7 +112,7 @@ decode_hex_color:
|
||||
|
||||
#ifndef USE_FASTFIND
|
||||
for (cs = color_specs; cs->name; cs++)
|
||||
if (!strlcasecmp(cs->name, -1, str, slen))
|
||||
if (!c_strlcasecmp(cs->name, -1, str, slen))
|
||||
break;
|
||||
#else
|
||||
cs = fastfind_search(&ff_colors_index, str, slen);
|
||||
|
@ -411,7 +411,7 @@ strtolx(unsigned char *str, unsigned char **end)
|
||||
if (errno) return 0;
|
||||
if (!*end) return num;
|
||||
|
||||
postfix = toupper(**end);
|
||||
postfix = c_toupper(**end);
|
||||
if (postfix == 'K') {
|
||||
(*end)++;
|
||||
if (num < -INT_MAX / 1024) return -INT_MAX;
|
||||
@ -534,3 +534,99 @@ sanitize_url(unsigned char *url)
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int c_tolower(int c) {
|
||||
switch (c)
|
||||
{
|
||||
case 'A': return 'a';
|
||||
case 'B': return 'b';
|
||||
case 'C': return 'c';
|
||||
case 'D': return 'd';
|
||||
case 'E': return 'e';
|
||||
case 'F': return 'f';
|
||||
case 'G': return 'g';
|
||||
case 'H': return 'h';
|
||||
case 'I': return 'i';
|
||||
case 'J': return 'j';
|
||||
case 'K': return 'k';
|
||||
case 'L': return 'l';
|
||||
case 'M': return 'm';
|
||||
case 'N': return 'n';
|
||||
case 'O': return 'o';
|
||||
case 'P': return 'p';
|
||||
case 'Q': return 'q';
|
||||
case 'R': return 'r';
|
||||
case 'S': return 's';
|
||||
case 'T': return 't';
|
||||
case 'U': return 'u';
|
||||
case 'V': return 'v';
|
||||
case 'W': return 'w';
|
||||
case 'X': return 'x';
|
||||
case 'Y': return 'y';
|
||||
case 'Z': return 'z';
|
||||
default: return c;
|
||||
}
|
||||
}
|
||||
|
||||
int c_toupper(int c) {
|
||||
switch (c) {
|
||||
case 'a': return 'A';
|
||||
case 'b': return 'B';
|
||||
case 'c': return 'C';
|
||||
case 'd': return 'D';
|
||||
case 'e': return 'E';
|
||||
case 'f': return 'F';
|
||||
case 'g': return 'G';
|
||||
case 'h': return 'H';
|
||||
case 'i': return 'I';
|
||||
case 'j': return 'J';
|
||||
case 'k': return 'K';
|
||||
case 'l': return 'L';
|
||||
case 'm': return 'M';
|
||||
case 'n': return 'N';
|
||||
case 'o': return 'O';
|
||||
case 'p': return 'P';
|
||||
case 'q': return 'Q';
|
||||
case 'r': return 'R';
|
||||
case 's': return 'S';
|
||||
case 't': return 'T';
|
||||
case 'u': return 'U';
|
||||
case 'v': return 'V';
|
||||
case 'w': return 'W';
|
||||
case 'x': return 'X';
|
||||
case 'y': return 'Y';
|
||||
case 'z': return 'Z';
|
||||
default: return c;
|
||||
}
|
||||
}
|
||||
|
||||
int c_isupper (int c)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
|
||||
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
|
||||
case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
|
||||
case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
|
||||
case 'Y': case 'Z':
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int c_islower (int c)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
|
||||
case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
|
||||
case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
|
||||
case 's': case 't': case 'u': case 'v': case 'w': case 'x':
|
||||
case 'y': case 'z':
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -182,6 +182,16 @@ trim_chars(unsigned char *s, unsigned char c, int *len)
|
||||
return s;
|
||||
}
|
||||
|
||||
/* Convert a character to {lower|upper}case using the
|
||||
* ASCII character set (as if in the C locale) */
|
||||
int c_tolower(int c);
|
||||
int c_toupper(int c);
|
||||
|
||||
/* Check whether a character is {lower|upper}case using the
|
||||
* the ASCII character set (as if in the C locale) */
|
||||
int c_islower(int c);
|
||||
int c_isupper(int c);
|
||||
|
||||
/** Convert uppercase letters in @a string with the given @a length to
|
||||
* lowercase. */
|
||||
static inline void
|
||||
@ -192,6 +202,16 @@ convert_to_lowercase(unsigned char *string, int length)
|
||||
string[length] = tolower(string[length]);
|
||||
}
|
||||
|
||||
/* Convert uppercase letters in @string with the given @length to lowercase
|
||||
* using the ASCII character set (as if in the C locale) */
|
||||
static inline void
|
||||
convert_to_lowercase_locale_indep(unsigned char *string, int length)
|
||||
{
|
||||
for (length--; length >= 0; length--)
|
||||
if (c_isupper(string[length]))
|
||||
string[length] = c_tolower(string[length]);
|
||||
}
|
||||
|
||||
/** This function drops control chars, nbsp char and limit the number
|
||||
* of consecutive space chars to one. It modifies its argument. */
|
||||
void clr_spaces(unsigned char *str);
|
||||
|
@ -169,6 +169,7 @@ struct fastfind_info {
|
||||
int leafsets_count;
|
||||
|
||||
unsigned int case_aware:1;
|
||||
unsigned int locale_indep:1;
|
||||
unsigned int compress:1;
|
||||
|
||||
int idxtab[FF_MAX_CHARS];
|
||||
@ -233,6 +234,7 @@ FF_DBG_dump_stats(struct fastfind_info *info)
|
||||
fprintf(stderr, "------ FastFind Statistics ------\n");
|
||||
fprintf(stderr, "Comment : %s\n", info->debug.comment);
|
||||
fprintf(stderr, "Case-aware : %s\n", info->case_aware ? "yes" : "no");
|
||||
fprintf(stderr, "Locale-indep: %s\n", info->locale_indep ? "yes" : "no");
|
||||
fprintf(stderr, "Compress : %s\n", info->compress ? "yes" : "no");
|
||||
fprintf(stderr, "Uniq_chars : %s\n", info->uniq_chars);
|
||||
fprintf(stderr, "Uniq_chars #: %d/%d max.\n", info->uniq_chars_count, FF_MAX_CHARS);
|
||||
@ -292,6 +294,7 @@ init_fastfind(struct fastfind_index *index, enum fastfind_flags flags)
|
||||
|
||||
info->min_key_len = FF_MAX_KEYLEN;
|
||||
info->case_aware = !!(flags & FF_CASE_AWARE);
|
||||
info->locale_indep = !!(flags & FF_LOCALE_INDEP);
|
||||
info->compress = !!(flags & FF_COMPRESS);
|
||||
|
||||
FF_DBG_mem(info, sizeof(*info) - sizeof(info->debug));
|
||||
@ -434,7 +437,7 @@ compress_tree(struct ff_node *leafset, struct fastfind_info *info)
|
||||
}
|
||||
}
|
||||
|
||||
#define ifcase(c) (info->case_aware ? (c) : toupper(c))
|
||||
#define ifcase(c) ( info->case_aware ? (c) : (info->locale_indep ? c_toupper(c) : toupper(c)) )
|
||||
|
||||
struct fastfind_index *
|
||||
fastfind_index(struct fastfind_index *index, enum fastfind_flags flags)
|
||||
@ -622,7 +625,10 @@ fastfind_search(struct fastfind_index *index,
|
||||
if (info->case_aware)
|
||||
FF_SEARCH(key[i]);
|
||||
else
|
||||
FF_SEARCH(toupper(key[i]));
|
||||
if (info->locale_indep)
|
||||
FF_SEARCH(c_toupper(key[i]));
|
||||
else
|
||||
FF_SEARCH(toupper(key[i]));
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -19,6 +19,8 @@ enum fastfind_flags {
|
||||
FF_NONE = 0,
|
||||
FF_CASE_AWARE = 1, /**< honour case when comparing */
|
||||
FF_COMPRESS = 2, /**< compress nodes if possible */
|
||||
FF_LOCALE_INDEP = 4 /**< whether the case conversion is
|
||||
* locale independent or not */
|
||||
};
|
||||
|
||||
struct fastfind_index {
|
||||
|
@ -25,7 +25,7 @@ map_scanner_string(struct scanner *scanner,
|
||||
|
||||
for (; mappings->name; mappings++) {
|
||||
if (mappings->base_type == base_type
|
||||
&& !strlcasecmp(mappings->name, -1, ident, length))
|
||||
&& !c_strlcasecmp(mappings->name, -1, ident, length))
|
||||
return mappings->type;
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define EL__UTIL_SCANNER_H
|
||||
|
||||
#include "util/error.h"
|
||||
#include "util/string.h"
|
||||
|
||||
/* Define if you want a talking scanner */
|
||||
/* #define DEBUG_SCANNER */
|
||||
@ -29,7 +30,7 @@ struct scanner_token {
|
||||
|
||||
/** Compare the string of @a token with @a str */
|
||||
#define scanner_token_strlcasecmp(token, str, len) \
|
||||
((token) && !strlcasecmp((token)->string, (token)->length, str, len))
|
||||
((token) && !c_strlcasecmp((token)->string, (token)->length, str, len))
|
||||
|
||||
/** Also compares the token string but using a "static" string */
|
||||
#define scanner_token_contains(token, str) \
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
#include "elinks.h"
|
||||
|
||||
@ -233,11 +234,110 @@ elinks_strlcmp(const unsigned char *s1, size_t n1,
|
||||
|
||||
int
|
||||
elinks_strlcasecmp(const unsigned char *s1, size_t n1,
|
||||
const unsigned char *s2, size_t n2)
|
||||
const unsigned char *s2, size_t n2,
|
||||
const int locale_indep)
|
||||
{
|
||||
strlcmp_device("strlcasecmp", s1, n1, s2, n2, toupper(s1[p]), toupper(s2[p]));
|
||||
if (locale_indep) {
|
||||
strlcmp_device("strlcasecmp", s1, n1, s2, n2, c_toupper(s1[p]), c_toupper(s2[p]));
|
||||
}
|
||||
else {
|
||||
strlcmp_device("strlcasecmp", s1, n1, s2, n2, toupper(s1[p]), toupper(s2[p]));
|
||||
}
|
||||
}
|
||||
|
||||
/* c_strcasecmp
|
||||
* Taken from GNU coreutils (version 6.9)
|
||||
* File name: lib/c-strcasecmp.c
|
||||
* Copyright (C) 1998-1999, 2005-2006 Free Software Foundation, Inc.
|
||||
* Licensed under the GPL version 2 or any later version.
|
||||
*/
|
||||
int c_strcasecmp (const char *s1, const char *s2)
|
||||
{
|
||||
register const unsigned char *p1 = (const unsigned char *) s1;
|
||||
register const unsigned char *p2 = (const unsigned char *) s2;
|
||||
unsigned char c1, c2;
|
||||
|
||||
if (p1 == p2)
|
||||
return 0;
|
||||
|
||||
do
|
||||
{
|
||||
c1 = c_tolower (*p1);
|
||||
c2 = c_tolower (*p2);
|
||||
|
||||
if (c1 == '\0')
|
||||
break;
|
||||
|
||||
++p1;
|
||||
++p2;
|
||||
}
|
||||
while (c1 == c2);
|
||||
|
||||
if (UCHAR_MAX <= INT_MAX)
|
||||
return c1 - c2;
|
||||
else
|
||||
/* On machines where 'char' and 'int' are types of the same size, the
|
||||
difference of two 'unsigned char' values - including the sign bit -
|
||||
doesn't fit in an 'int'. */
|
||||
return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
|
||||
}
|
||||
|
||||
/* c_strncasecmp
|
||||
* Taken from GNU coreutils (version 6.9)
|
||||
* File name: lib/c-strncasecmp.c
|
||||
* ^ (note the "n")
|
||||
* Copyright (C) 1998-1999, 2005-2006 Free Software Foundation, Inc.
|
||||
* Licensed under the GPL version 2 or any later version.
|
||||
*/
|
||||
int c_strncasecmp (const char *s1, const char *s2, size_t n)
|
||||
{
|
||||
register const unsigned char *p1 = (const unsigned char *) s1;
|
||||
register const unsigned char *p2 = (const unsigned char *) s2;
|
||||
unsigned char c1, c2;
|
||||
|
||||
if (p1 == p2 || n == 0)
|
||||
return 0;
|
||||
|
||||
do
|
||||
{
|
||||
c1 = c_tolower (*p1);
|
||||
c2 = c_tolower (*p2);
|
||||
|
||||
if (--n == 0 || c1 == '\0')
|
||||
break;
|
||||
|
||||
++p1;
|
||||
++p2;
|
||||
}
|
||||
while (c1 == c2);
|
||||
|
||||
if (UCHAR_MAX <= INT_MAX)
|
||||
return c1 - c2;
|
||||
else
|
||||
/* On machines where 'char' and 'int' are types of the same size, the
|
||||
difference of two 'unsigned char' values - including the sign bit -
|
||||
doesn't fit in an 'int'. */
|
||||
return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
|
||||
}
|
||||
|
||||
/* c_strcasestr - adapted from src/osdep/stub.c */
|
||||
char * c_strcasestr(const char *haystack, const char *needle)
|
||||
{
|
||||
size_t haystack_length = strlen(haystack);
|
||||
size_t needle_length = strlen(needle);
|
||||
int i;
|
||||
|
||||
if (haystack_length < needle_length)
|
||||
return NULL;
|
||||
|
||||
for (i = haystack_length - needle_length + 1; i; i--) {
|
||||
if (!c_strncasecmp(haystack, needle, needle_length))
|
||||
return (char *) haystack;
|
||||
haystack++;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* The new string utilities: */
|
||||
|
||||
|
@ -100,9 +100,19 @@ int elinks_strlcmp(const unsigned char *s1, size_t n1,
|
||||
const unsigned char *s2, size_t n2);
|
||||
|
||||
/** Acts identically to strlcmp(), except for being case insensitive. */
|
||||
#define strlcasecmp(a,b,c,d) (errfile = __FILE__, errline = __LINE__, elinks_strlcasecmp(a,b,c,d))
|
||||
#define strlcasecmp(a,b,c,d) (errfile = __FILE__, errline = __LINE__, elinks_strlcasecmp(a,b,c,d,0))
|
||||
#define c_strlcasecmp(a,b,c,d) (errfile = __FILE__, errline = __LINE__, elinks_strlcasecmp(a,b,c,d,1))
|
||||
int elinks_strlcasecmp(const unsigned char *s1, size_t n1,
|
||||
const unsigned char *s2, size_t n2);
|
||||
const unsigned char *s2, size_t n2,
|
||||
const int locale_indep);
|
||||
|
||||
/* strcasecmp and strncasecmp which work as if they are
|
||||
* in the C locale - both taken from GNU coreutils */
|
||||
int c_strcasecmp(const char *s1, const char *s2);
|
||||
int c_strncasecmp(const char *s1, const char *s2, size_t n);
|
||||
|
||||
/* strcasestr function which works as if it is in the C locale. */
|
||||
char * c_strcasestr(const char *haystack, const char *needle);
|
||||
|
||||
/** @} */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user