summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2001-03-03 17:34:35 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2001-03-03 17:34:35 +0000
commita47ce2c449575f0c3212779bdfc1e69cab41aab1 (patch)
treebb8a77633aeeb47fd9abc94b806aeb53e889ab0a
parent2f4969aefc2cb4d3928807c4f4f797bea33c853f (diff)
downloadirssi-a47ce2c449575f0c3212779bdfc1e69cab41aab1.zip
Added strstr_full() and strstr_full_case()
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1309 dbcabf3a-b0e7-0310-adc4-f8d773084564
-rw-r--r--src/core/misc.c20
-rw-r--r--src/core/misc.h7
2 files changed, 22 insertions, 5 deletions
diff --git a/src/core/misc.c b/src/core/misc.c
index 709fd98d..f32151a5 100644
--- a/src/core/misc.c
+++ b/src/core/misc.c
@@ -339,10 +339,10 @@ char *stristr(const char *data, const char *key)
((unsigned char) (c) < 128 && \
(isspace((int) (c)) || ispunct((int) (c))))
-char *stristr_full(const char *data, const char *key)
+char *strstr_full_case(const char *data, const char *key, int icase)
{
const char *start, *max;
- int keylen, datalen, pos;
+ int keylen, datalen, pos, match;
keylen = strlen(key);
datalen = strlen(data);
@@ -364,8 +364,10 @@ char *stristr_full(const char *data, const char *key)
return (char *) data;
}
- if (toupper(data[pos]) == toupper(key[pos]) &&
- (pos != 0 || data == start || isbound(data[-1])))
+ match = icase ? (toupper(data[pos]) == toupper(key[pos])) :
+ data[pos] == key[pos];
+
+ if (match && (pos != 0 || data == start || isbound(data[-1])))
pos++;
else {
data++;
@@ -376,6 +378,16 @@ char *stristr_full(const char *data, const char *key)
return NULL;
}
+char *strstr_full(const char *data, const char *key)
+{
+ return strstr_full_case(data, key, FALSE);
+}
+
+char *stristr_full(const char *data, const char *key)
+{
+ return strstr_full_case(data, key, TRUE);
+}
+
int regexp_match(const char *str, const char *regexp)
{
#ifdef HAVE_REGEX_H
diff --git a/src/core/misc.h b/src/core/misc.h
index b56e8f97..80cf87be 100644
--- a/src/core/misc.h
+++ b/src/core/misc.h
@@ -38,8 +38,13 @@ GSList *hashtable_get_keys(GHashTable *hash);
/* strstr() with case-ignoring */
char *stristr(const char *data, const char *key);
-/* stristr(), but matches only for full words */
+
+/* like strstr(), but matches only for full words.
+ `icase' specifies if match is case sensitive */
+char *strstr_full_case(const char *data, const char *key, int icase);
+char *strstr_full(const char *data, const char *key);
char *stristr_full(const char *data, const char *key);
+
/* easy way to check if regexp matches */
int regexp_match(const char *str, const char *regexp);