PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ rtpg_strsplit()

char ** rtpg_strsplit ( const char *  str,
const char *  delimiter,
uint32_t *  n 
)

Definition at line 142 of file rtpg_internal.c.

142 {
143 char *tmp = NULL;
144 char **rtn = NULL;
145 char *token = NULL;
146
147 *n = 0;
148 if (!str)
149 return NULL;
150
151 /* copy str to tmp as strtok will mangle the string */
152 tmp = palloc(sizeof(char) * (strlen(str) + 1));
153 if (NULL == tmp) {
154 fprintf(stderr, "Not enough memory\n");
155 return NULL;
156 }
157 strcpy(tmp, str);
158
159 if (!strlen(tmp) || !delimiter || !strlen(delimiter)) {
160 *n = 1;
161 rtn = (char **) palloc(*n * sizeof(char *));
162 if (NULL == rtn) {
163 fprintf(stderr, "Not enough memory\n");
164 return NULL;
165 }
166 rtn[0] = (char *) palloc(sizeof(char) * (strlen(tmp) + 1));
167 if (NULL == rtn[0]) {
168 fprintf(stderr, "Not enough memory\n");
169 return NULL;
170 }
171 strcpy(rtn[0], tmp);
172 pfree(tmp);
173 return rtn;
174 }
175
176 token = strtok(tmp, delimiter);
177 while (token != NULL) {
178 if (*n < 1) {
179 rtn = (char **) palloc(sizeof(char *));
180 }
181 else {
182 rtn = (char **) repalloc(rtn, (*n + 1) * sizeof(char *));
183 }
184 if (NULL == rtn) {
185 fprintf(stderr, "Not enough memory\n");
186 return NULL;
187 }
188
189 rtn[*n] = NULL;
190 rtn[*n] = (char *) palloc(sizeof(char) * (strlen(token) + 1));
191 if (NULL == rtn[*n]) {
192 fprintf(stderr, "Not enough memory\n");
193 return NULL;
194 }
195
196 strcpy(rtn[*n], token);
197 *n = *n + 1;
198
199 token = strtok(NULL, delimiter);
200 }
201
202 pfree(tmp);
203 return rtn;
204}
#define str(s)

References str.

Referenced by RASTER_colorMap(), RASTER_reclass(), and rtpg_assignHookGDALEnabledDrivers().

Here is the caller graph for this function: