blob: a1436d3023f33323d042dff1ff81a183a26f88c1 [file] [log] [blame]
# ${StrContains} OUT STRING SUBSTRING
# A method which searches a target string for a substring (case insensitive),
# setting OUT to 1 if found, 0 otherwise.
Var strContains_string
Var strContains_substring
Var strContains_stringLen
Var strContains_substringLen
Var strContains_loopStartOffset
Var strContains_loopLastOffset
Var strContains_loopSubstring
Var strContains_returnValue
Function StrContains
Pop $strContains_substring
Pop $strContains_string
StrCpy $strContains_returnValue 0
StrLen $strContains_stringLen $strContains_string
StrLen $strContains_substringLen $strContains_substring
StrCpy $strContains_loopStartOffset 0
IntOp $strContains_loopLastOffset $strContains_stringLen - $strContains_substringLen
# If we're searching for "ing" in "string", we search for "ing" against
# "str", "tri", "rin", and finally "ing"
loop:
IntCmp $strContains_loopStartOffset $strContains_loopLastOffset 0 0 done
StrCpy $strContains_loopSubstring $strContains_string $strContains_substringLen $strContains_loopStartOffset
StrCmp $strContains_loopSubstring $strContains_substring found
IntOp $strContains_loopStartOffset $strContains_loopStartOffset + 1
Goto loop
found:
StrCpy $strContains_returnValue 1
done:
Push $strContains_returnValue
FunctionEnd
!macro StrContains OUT STRING SUBSTRING
Push `${STRING}`
Push `${SUBSTRING}`
Call StrContains
Pop `${OUT}`
!macroend
!define StrContains '!insertmacro StrContains'