Преглед на файлове

Added string function strnlen

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9761 54d463be-8e91-2dee-dedb-b68131a5f0ec
ultramage преди 18 години
родител
ревизия
a6f1e4972e
променени са 3 файла, в които са добавени 19 реда и са изтрити 0 реда
  1. 4 0
      Changelog-Trunk.txt
  2. 10 0
      src/common/strlib.c
  3. 5 0
      src/common/strlib.h

+ 4 - 0
Changelog-Trunk.txt

@@ -4,6 +4,10 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2007/02/01
+	* Added string function strnlen [ultramage]
+	- This thing is useful for removing potential out-of-bounds crashes.
+	  Had to #ifdef it because some systems implement it, some don't provide
+	  the header, and some don't have it at all. Adjust/improve as neccessary.
 	* Corrected homunculus's aspd being halved after using some aspd adjusting
 	  skill.
 	* Removed the log info message 'created homunc...', and the 'loaded homunc'

+ 10 - 0
src/common/strlib.c

@@ -192,3 +192,13 @@ char *_strtok_r(char *s1, const char *s2, char **lasts)
 	return ret;
 }
 #endif
+
+#if !defined(WIN32) || (defined(_MSC_VER) && _MSC_VER < 1400)
+/* Find the length of STRING, but scan at most MAXLEN characters.
+   If no '\0' terminator is found in that many characters, return MAXLEN.  */
+size_t strnlen (const char* string, size_t maxlen)
+{
+  const char* end = memchr (string, '\0', maxlen);
+  return end ? (size_t) (end - string) : maxlen;
+}
+#endif

+ 5 - 0
src/common/strlib.h

@@ -21,4 +21,9 @@ char *_strtok_r(char *s1, const char *s2, char **lasts);
 int remove_control_chars(unsigned char *);
 char *trim(char *str, const char *delim);
 const char *stristr(const char *haystack, const char *needle);
+
+#if !defined(WIN32) || (defined(_MSC_VER) && _MSC_VER < 1400)
+size_t strnlen (const char* string, size_t maxlen);
+#endif
+
 #endif