3
* Teodor Sigaev <teodor@sigaev.ru>
14
#define STOPBUFLEN 4096
23
*ptr = tolower(*(unsigned char *) ptr);
30
freestoplist(StopList * s)
35
while (*ptr && s->len > 0)
42
memset(s, 0, sizeof(StopList));
46
readstoplist(text *in, StopList * s)
51
if (in && VARSIZE(in) - VARHDRSZ > 0)
53
char *filename = text2char(in);
58
/* if path is relative, take it as relative to share dir */
59
if (!is_absolute_path(filename))
61
char sharepath[MAXPGPATH];
64
get_share_path(my_exec_path, sharepath);
65
absfn = palloc(strlen(sharepath) + strlen(filename) + 2);
66
sprintf(absfn, "%s/%s", sharepath, filename);
71
if ((hin = fopen(filename, "r")) == NULL)
73
(errcode(ERRCODE_CONFIG_FILE_ERROR),
74
errmsg("could not open file \"%s\": %m",
77
while (fgets(buf, STOPBUFLEN, hin))
79
buf[strlen(buf) - 1] = '\0';
83
if (s->len >= reallen)
87
reallen = (reallen) ? reallen * 2 : 16;
88
tmp = (char **) realloc((void *) stop, sizeof(char *) * reallen);
94
(errcode(ERRCODE_OUT_OF_MEMORY),
95
errmsg("out of memory")));
100
stop[s->len] = strdup(buf);
106
(errcode(ERRCODE_OUT_OF_MEMORY),
107
errmsg("out of memory")));
110
stop[s->len] = (s->wordop) (stop[s->len]);
121
comparestr(const void *a, const void *b)
123
return strcmp(*(char **) a, *(char **) b);
127
sortstoplist(StopList * s)
129
if (s->stop && s->len > 0)
130
qsort(s->stop, s->len, sizeof(char *), comparestr);
134
searchstoplist(StopList * s, char *key)
137
key = (*(s->wordop)) (key);
138
return (s->stop && s->len > 0 && bsearch(&key, s->stop, s->len, sizeof(char *), comparestr)) ? true : false;