Prechádzať zdrojové kódy

Change the string.strchr function to return the string index instead of an aleatory pointer cast to integer, also accept an optional integer offset from the beginning of the string.

mingodad 9 rokov pred
rodič
commit
7cc5d7a7b7
1 zmenil súbory, kde vykonal 6 pridanie a 4 odobranie
  1. 6 4
      SquiLu/squirrel/sqbaselib.cpp

+ 6 - 4
SquiLu/squirrel/sqbaselib.cpp

@@ -1760,11 +1760,13 @@ static SQRESULT string_find_close_quote(HSQUIRRELVM v) {
 }
 
 static SQRESULT string_strchr(HSQUIRRELVM v) {
-    SQ_FUNC_VARS_NO_TOP(v);
+    SQ_FUNC_VARS(v);
     SQ_GET_STRING(v, 1, src);
     SQ_GET_INTEGER(v, 2, delimiter);
-    const SQChar *token = scstrchr(src, delimiter);
-    sq_pushinteger(v, (token ? *token : -1));
+    SQ_OPT_INTEGER(v, 3, offset, 0);
+    if(offset > src_size) return sq_throwerror(v, _SC("offset bigger than string size"));
+    const SQChar *token = scstrchr(src+offset, delimiter);
+    sq_pushinteger(v, (token ? (SQInteger)(token-src) : -1));
     return 1;
 }
 
@@ -2187,7 +2189,7 @@ SQRegFunction SQSharedState::_string_default_delegate_funcz[]={
 	{_SC("find_lua"),string_find_lua,-2, _SC("ss a|t|c n b n")},
 	{_SC("find_close_quote"),string_find_close_quote,-1, _SC("sni")},
 	{_SC("find_delimiter"),string_find_delimiter,4, _SC("siin")},
-	{_SC("strchr"),string_strchr,2, _SC("si")},
+	{_SC("strchr"),string_strchr,-2, _SC("sii")},
 	{_SC("countchr"),string_countchr,2, _SC("si")},
 	{_SC("gsub"),string_gsub,-3, _SC("s s s|a|t|c n")},
 	{_SC("gmatch"),string_gmatch, -3, _SC("s s c n n")},