Browse Source

- Added function stristr to strlib.c, used by mob.c and item_db.c for case-insensitive seeks.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@6345 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex 19 years ago
parent
commit
0f3de92a52
5 changed files with 46 additions and 5 deletions
  1. 4 1
      Changelog-Trunk.txt
  2. 35 0
      src/common/strlib.c
  3. 1 0
      src/common/strlib.h
  4. 3 2
      src/map/itemdb.c
  5. 3 2
      src/map/mob.c

+ 4 - 1
Changelog-Trunk.txt

@@ -2,12 +2,15 @@ Date	Added
 
 AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
-2006/04/27
+2006/04/28
+	* Added function stristr to strlib.c, used by mob.c and item_db.c for
+	  case-insensitive seeks. [Skotlex]
 	* Removed the sending of the online guild list when you log-on, may fix the
 	  "getting stuck" problem. [Skotlex]
 	* Added battle config default_skill_delay. Specifies the default skill
 	  delay for most skills, it is also applied as a walkdelay (total skill
 	  walkdelay is default_skill_delay + that skill's can't walk delay) [Skotlex]
+2006/04/27
 	* skill_castend_id and skill_castend_pos will trigger unit_stop_walking
 	  with flag 1 (fix pos) rather than none. Should fix some skills making you
 	  appear moving while doing them. [Skotlex]

+ 35 - 0
src/common/strlib.c

@@ -4,6 +4,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <ctype.h>
 
 #include "strlib.h"
 #include "utils.h"
@@ -137,6 +138,40 @@ char *trim(char *str, const char *delim)
 	return str;
 }
 
+
+//stristr: Case insensitive version of strstr, code taken from 
+//http://www.daniweb.com/code/snippet313.html, Dave Sinkula
+//
+const char *stristr(const char *haystack, const char *needle)
+{
+	if ( !*needle )
+	{
+		return haystack;
+	}
+	for ( ; *haystack; ++haystack )
+	{
+		if ( toupper(*haystack) == toupper(*needle) )
+		{
+			/*
+			* Matched starting char -- loop through remaining chars.
+			*/
+			const char *h, *n;
+			for ( h = haystack, n = needle; *h && *n; ++h, ++n )
+			{
+				if ( toupper(*h) != toupper(*n) )
+				{
+					break;
+				}
+			}
+			if ( !*n ) /* matched all of 'needle' to null termination */
+			{
+				return haystack; /* return the start of the match */
+			}
+		}
+	}
+	return 0;
+}
+
 #ifdef __WIN32
 char *_strtok_r(char *s1, const char *s2, char **lasts)
 {

+ 1 - 0
src/common/strlib.h

@@ -20,4 +20,5 @@ char *_strtok_r(char *s1, const char *s2, char **lasts);
 // custom functions
 int remove_control_chars(unsigned char *);
 char *trim(char *str, const char *delim);
+const char *stristr(const char *haystack, const char *needle);
 #endif

+ 3 - 2
src/map/itemdb.c

@@ -9,6 +9,7 @@
 #include "../common/malloc.h"
 #include "../common/showmsg.h"
 #include "../common/grfio.h"
+#include "../common/strlib.h"
 #include "map.h"
 #include "battle.h"
 #include "itemdb.h"
@@ -75,9 +76,9 @@ static int itemdb_searchname_array_sub(DBKey key,void * data,va_list ap)
 	str=va_arg(ap,char *);
 	if (item == dummy_item)
 		return 1; //Invalid item.
-	if(strstr(item->jname,str))
+	if(stristr(item->jname,str))
 		return 0;
-	if(strstr(item->name,str))
+	if(stristr(item->name,str))
 		return 0;
 	return strcmpi(item->jname,str);
 }

+ 3 - 2
src/map/mob.c

@@ -14,6 +14,7 @@
 #include "../common/malloc.h"
 #include "../common/showmsg.h"
 #include "../common/ers.h"
+#include "../common/strlib.h"
 
 #include "map.h"
 #include "clif.h"
@@ -84,9 +85,9 @@ static int mobdb_searchname_array_sub(struct mob_db* mob, const char *str)
 {
 	if (mob == mob_dummy)
 		return 1; //Invalid item.
-	if(strstr(mob->jname,str))
+	if(stristr(mob->jname,str))
 		return 0;
-	if(strstr(mob->name,str))
+	if(stristr(mob->name,str))
 		return 0;
 	return strcmpi(mob->jname,str);
 }