PostgreSQL Source Code: src/backend/tsearch/ts_utils.c Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
16
17#include <ctype.h>
18
19#include "catalog/pg_collation_d.h"
23
24
25
26
27
28
29
30
31
32
33char *
35 const char *extension)
36{
38 char *result;
39
40
41
42
43
44
45
46
47
48
49 if (strspn(basename, "abcdefghijklmnopqrstuvwxyz0123456789_") != strlen(basename))
51 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
52 errmsg("invalid text search configuration file name \"%s\"",
53 basename)));
54
58 sharepath, basename, extension);
59
60 return result;
61}
62
63
64
65
66
67
68void
70{
71 char **stop = NULL;
72
73 s->len = 0;
74 if (fname && *fname)
75 {
78 char *line;
79 int reallen = 0;
80
83 (errcode(ERRCODE_CONFIG_FILE_ERROR),
84 errmsg("could not open stop-word file \"%s\": %m",
86
88 {
89 char *pbuf = line;
90
91
92 while (*pbuf && !isspace((unsigned char) *pbuf))
94 *pbuf = '\0';
95
96
97 if (*line == '\0')
98 {
100 continue;
101 }
102
103 if (s->len >= reallen)
104 {
105 if (reallen == 0)
106 {
107 reallen = 64;
108 stop = (char **) palloc(sizeof(char *) * reallen);
109 }
110 else
111 {
112 reallen *= 2;
113 stop = (char **) repalloc(stop, sizeof(char *) * reallen);
114 }
115 }
116
117 if (wordop)
118 {
119 stop[s->len] = wordop(line, strlen(line), DEFAULT_COLLATION_OID);
120 if (stop[s->len] != line)
122 }
123 else
124 stop[s->len] = line;
125
126 (s->len)++;
127 }
128
131 }
132
133 s->stop = stop;
134
135
136 if (s->stop && s->len > 0)
138}
139
140bool
142{
143 return (s->stop && s->len > 0 &&
146}
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
char my_exec_path[MAXPGPATH]
int pg_mblen(const char *mbstr)
void * repalloc(void *pointer, Size size)
void pfree(void *pointer)
void get_share_path(const char *my_exec_path, char *ret_path)
int pg_qsort_strcmp(const void *a, const void *b)
#define qsort(a, b, c, d)
bool tsearch_readline_begin(tsearch_readline_state *stp, const char *filename)
char * tsearch_readline(tsearch_readline_state *stp)
void tsearch_readline_end(tsearch_readline_state *stp)
void readstoplist(const char *fname, StopList *s, char *(*wordop)(const char *, size_t, Oid))
bool searchstoplist(StopList *s, char *key)
char * get_tsearch_config_filename(const char *basename, const char *extension)