summaryrefslogtreecommitdiff
path: root/support/texlab/crates/bibutils_sys/src/strsearch.c
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/crates/bibutils_sys/src/strsearch.c')
-rw-r--r--support/texlab/crates/bibutils_sys/src/strsearch.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/support/texlab/crates/bibutils_sys/src/strsearch.c b/support/texlab/crates/bibutils_sys/src/strsearch.c
new file mode 100644
index 0000000000..86a427610f
--- /dev/null
+++ b/support/texlab/crates/bibutils_sys/src/strsearch.c
@@ -0,0 +1,41 @@
+/* strsearch.c
+ *
+ * Copyright (c) Chris Putnam 1995-2019
+ *
+ * Source code released under the GPL version 2
+ *
+ * strsearch() locates a case-independent substring
+ * e.g. a case-independent version of strstr()
+ *
+ * returns pointer to first occurrence of substring needle in
+ * the string haystack when found, NULL if not found
+ *
+ * '\0' characters terminating strings are not compared
+ *
+ * strsearch returns haystack when needle is empty as per strstr()
+ * conventions
+ *
+ */
+#include <stdio.h>
+#include <ctype.h>
+#include "strsearch.h"
+
+char *strsearch (const char *haystack, const char *needle)
+{
+ char *returnptr=NULL;
+ unsigned long pos=0;
+
+ if ( !(*needle) ) returnptr = (char *) haystack;
+
+ while (*(haystack+pos) && returnptr==NULL) {
+ if ( toupper((unsigned char)*(haystack+pos)) == toupper((unsigned char)*(needle+pos)) )
+ pos++;
+ else {
+ pos = 0;
+ haystack++;
+ }
+ if ( ! (*(needle+pos)) ) returnptr = (char *) haystack;
+ }
+ return returnptr;
+}
+