mirror of
https://github.com/moparisthebest/imapfilter
synced 2024-08-13 16:53:51 -04:00
4fe1a3d649
Move the source code to the src dir, the man pages to the doc dir, and the example configuration files to the samples dir, and update all relevant files to reflect the changes.
75 lines
1.0 KiB
C
75 lines
1.0 KiB
C
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <ctype.h>
|
|
|
|
#include "imapfilter.h"
|
|
|
|
|
|
/*
|
|
* An implementation of strstr() with case-insensitivity.
|
|
*/
|
|
const char *
|
|
xstrcasestr(const char *haystack, const char *needle)
|
|
{
|
|
const char *h, *n, *c;
|
|
size_t hl, nl;
|
|
|
|
c = haystack;
|
|
n = needle;
|
|
hl = strlen(haystack);
|
|
nl = strlen(needle);
|
|
|
|
while (hl >= nl) {
|
|
while (tolower((int)(*c)) != tolower((int)(*needle))) {
|
|
c++;
|
|
hl--;
|
|
if (hl < nl)
|
|
return NULL;
|
|
}
|
|
|
|
h = c;
|
|
n = needle;
|
|
|
|
while (tolower((int)(*h)) == tolower((int)(*n))) {
|
|
h++;
|
|
n++;
|
|
|
|
if (*n == '\0')
|
|
return c;
|
|
}
|
|
c++;
|
|
hl--;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
|
|
/*
|
|
* Copies at most size characters from the string pointed by src to the array
|
|
* pointed by dest, always NULL terminating (unless size == 0). Returns
|
|
* pointer to dest.
|
|
*/
|
|
char *
|
|
xstrncpy(char *dst, const char *src, size_t len)
|
|
{
|
|
char *d;
|
|
const char *s;
|
|
size_t n;
|
|
|
|
d = dst;
|
|
s = src;
|
|
n = len;
|
|
|
|
while (n != 0) {
|
|
if ((*d++ = *s++) == '\0')
|
|
break;
|
|
n--;
|
|
}
|
|
|
|
if (n == 0 && len != 0)
|
|
*d = '\0';
|
|
|
|
return dst;
|
|
}
|