82 lines
2.8 KiB
C
82 lines
2.8 KiB
C
/**************************************************************************
|
|
* utils.c *
|
|
* *
|
|
* Copyright (C) 1999 Chris Allegretta *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 1, or (at your option) *
|
|
* any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program; if not, write to the Free Software *
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
|
|
* *
|
|
**************************************************************************/
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <ctype.h>
|
|
|
|
#include "config.h"
|
|
#include "nano.h"
|
|
#include "proto.h"
|
|
|
|
/* Lower case a string - must be null terminated */
|
|
void lowercase(char *src)
|
|
{
|
|
long i = 0;
|
|
|
|
while (src[i] != 0) {
|
|
src[i] = (char) tolower(src[i]);
|
|
i++;
|
|
}
|
|
}
|
|
|
|
|
|
/* I can't believe I have to write this function */
|
|
char *strcasestr(char *haystack, char *needle)
|
|
{
|
|
char *localneedle, *localhaystack, *found, *tmp, *tmp2;
|
|
|
|
/* Make a copy of the search string and searcgh space */
|
|
localneedle = nmalloc(strlen(needle) + 2);
|
|
localhaystack = nmalloc(strlen(haystack) + 2);
|
|
|
|
strcpy(localneedle, needle);
|
|
strcpy(localhaystack, haystack);
|
|
|
|
/* Make them lowercase */
|
|
lowercase(localneedle);
|
|
lowercase(localhaystack);
|
|
|
|
/* Look for the lowercased substring in the lowercased search space -
|
|
return NULL if we didn't find anything */
|
|
if ((found = strstr(localhaystack, localneedle)) == NULL) {
|
|
free(localneedle);
|
|
free(localhaystack);
|
|
return NULL;
|
|
}
|
|
/* Else return the pointer to the same place in the real search space */
|
|
tmp2 = haystack;
|
|
for (tmp = localhaystack; tmp != found; tmp++)
|
|
tmp2++;
|
|
|
|
free(localneedle);
|
|
free(localhaystack);
|
|
return tmp2;
|
|
}
|
|
|
|
char *strstrwrapper(char *haystack, char *needle)
|
|
{
|
|
|
|
if (ISSET(CASE_SENSITIVE))
|
|
return strstr(haystack, needle);
|
|
else
|
|
return strcasestr(haystack, needle);
|
|
}
|