an easy fix for strcmpi and we move on

Here in branch paxed-new_lev_comp-B (branched
from paxed-new_lev_comp) is a simple fix
for the strcmpi issue.

The bottom section of lev_main.c has a bunch
of forced linkages to names from NetHack etc.
	#ifdef STRICT_REF_DEF
	bunch of stuff
	#endif

This change to lev_main should make everything
work for those that don't supply a compiler
library version of strcmpi()

With this patch, those people can just
add a -DSTRICT_REF_DEF to their compile line
for lev_main.c.

This would close the issue in a simple way,
and doesn't require linking in anything new to
the level compiler, or modifying any port's Makefiles etc.
This commit is contained in:
nhmall
2015-03-23 19:24:56 -04:00
committed by Pasi Kallinen
parent 56699486a0
commit 4c2df285b4

View File

@@ -697,7 +697,7 @@ funcdef_defined(f, name, casesense)
if (casesense) {
if (!strcmp(name, f->name)) return f;
} else {
if (!strcasecmp(name, f->name)) return f;
if (!strcmpi(name, f->name)) return f;
}
f = f->next;
}
@@ -748,7 +748,7 @@ vardef_defined(f, name, casesense)
if (casesense) {
if (!strcmp(name, f->name)) return f;
} else {
if (!strcasecmp(name, f->name)) return f;
if (!strcmpi(name, f->name)) return f;
}
f = f->next;
}
@@ -988,7 +988,7 @@ char c;
/* didn't find it; lets try case insensitive search */
for (i = LOW_PM; i < NUMMONS; i++)
if (!class || class == mons[i].mlet)
if (!strcasecmp(s, mons[i].mname)) {
if (!strcmpi(s, mons[i].mname)) {
if (be_verbose)
lc_warning("Monster type \"%s\" matches \"%s\".", s, mons[i].mname);
return i;
@@ -1020,7 +1020,7 @@ char c; /* class */
for (i = class ? bases[class] : 0; i < NUM_OBJECTS; i++) {
if (class && objects[i].oc_class != class) break;
objname = obj_descr[i].oc_name;
if (objname && !strcasecmp(s, objname)) {
if (objname && !strcmpi(s, objname)) {
if (be_verbose)
lc_warning("Object type \"%s\" matches \"%s\".", s, objname);
return i;
@@ -1381,6 +1381,24 @@ struct window_procs windowprocs;
# ifdef DEFINE_OSPEED
short ospeed;
# endif
# ifndef STRNCMPI
int
strncmpi(s1, s2, n) /* case insensitive counted string comparison */
register const char *s1, *s2;
register int n; /*(should probably be size_t, which is usually unsigned)*/
{ /*{ aka strncasecmp }*/
register char t1, t2;
while (n--) {
if (!*s2) return (*s1 != 0); /* s1 >= s2 */
else if (!*s1) return -1; /* s1 < s2 */
t1 = lowc(*s1++);
t2 = lowc(*s2++);
if (t1 != t2) return (t1 > t2) ? 1 : -1;
}
return 0; /* s1 == s2 */
}
# endif /* STRNCMPI */
#endif /* STRICT_REF_DEF */
/*lev_main.c*/