1 #include "sm_platform.h"
6 using namespace SourcePawn;
8 const char *stristr(const char *str, const char *substr)
15 char *needle = (char *)substr;
16 char *prevloc = (char *)str;
17 char *haystack = (char *)str;
21 if (tolower(*haystack) == tolower(*needle))
30 needle = (char *)substr;
37 inline const char *_strstr(const char *str, const char *substr)
39 #ifdef PLATFORM_WINDOWS
40 return strstr(str, substr);
42 return (const char *)strstr(str, substr);
46 /*********************************************
48 * STRING MANIPULATION NATIVE IMPLEMENTATIONS *
50 *********************************************/
53 static cell_t sm_strlen(IPluginContext *pCtx, const cell_t *params)
56 pCtx->LocalToString(params[1], &str);
61 static cell_t sm_contain(IPluginContext *pCtx, const cell_t *params)
63 typedef const char *(*STRSEARCH)(const char *, const char *);
67 pCtx->LocalToString(params[1], &str);
68 pCtx->LocalToString(params[2], &substr);
70 func = (params[3]) ? _strstr : stristr;
71 const char *pos = func(str, substr);
80 static cell_t sm_equal(IPluginContext *pCtx, const cell_t *params)
82 typedef int (*STRCOMPARE)(const char *, const char *);
86 pCtx->LocalToString(params[1], &str1);
87 pCtx->LocalToString(params[2], &str2);
89 func = (params[3]) ? strcmp : stricmp;
91 return (func(str1, str2)) ? 0 : 1;
94 static cell_t sm_strcopy(IPluginContext *pCtx, const cell_t *params)
96 char *dest, *src, *start;
99 pCtx->LocalToString(params[1], &dest);
100 pCtx->LocalToString(params[3], &src);
104 while ((*src) && (len--))
110 return (dest - start);