It's now working.
For whatever it's worth, here is the fixed program:
Code:
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#define LOWER(c) (((c)>='A' && (c) <= 'Z') ? ((c)+('a'-'A')) : (c))
static char** getdots(char* input, char** keylist) {
int i=0;
keylist[i]=malloc(512*sizeof(char));
memset(keylist[i],'\0', 512*sizeof(char));
char* p = input, *c=keylist[i];
while (*p!='\0') {
while(*p!='.' && *p!='\0')
*c++=*p++;
if(*p=='\0')
{
return keylist;
}
if(*p=='.')
{
i++;
keylist= realloc(keylist, sizeof(char*)*(i+1));
if(!keylist){
printf("Keylist broken.\r\n");
return NULL;
}
keylist[i]=malloc(512*sizeof(char));
c=keylist[i];
memset(keylist[i],'\0', 512*sizeof(char));
}
p++;
}
return keylist;
}
int isname(const char *str, const char *namelist) {
const char *curname, *curstr;
curname = namelist;
for (;;) {
for (curstr = str;; curstr++, curname++) {
if (!*curstr && !isalpha(*curname))
return (1);
if (!*curname)
return (0);
if (!*curstr || *curname == ' ' || *curname == '-' || *curname == ',')
break;
if (LOWER(*curstr) != LOWER(*curname))
break;
}
/* skip to next name */
for (;isalpha(*curname); curname++)
;
if (!*curname)
return (0);
curname++; /* first char of new name */
}
}
int main()
{
char input[512]={"big.r.helm.yay\0"};
char sdesc[512]={"a big, red helm\0"};
char** keylist=NULL;
keylist=calloc(1,sizeof(char*));
keylist=getdots((char*) &input, keylist);
if(!keylist)
{
printf("Nothing happened!\r\n");
return 0;
}
int i=0;
for(i=0;keylist[i];i++)
{
printf("%s\r\n",keylist[i]);
if(isname(keylist[i], sdesc))
printf("%s is in the list.\r\n", keylist[i]);
else
printf("%s is not in the list.\r\n", keylist[i]);
}
if(keylist)
free(keylist);
return 0;
}