X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/bcbba1cb5a4e5a1df3b8f5c79e2a988221adf867..7b0e0dfd883b268b58a721e2967303fa368e563f:/module/nominatim.c?ds=sidebyside diff --git a/module/nominatim.c b/module/nominatim.c index 75238e22..9d43c22f 100644 --- a/module/nominatim.c +++ b/module/nominatim.c @@ -1,3 +1,11 @@ +/** + * SPDX-License-Identifier: GPL-2.0-only + * + * This file is part of Nominatim. (https://nominatim.org) + * + * Copyright (C) 2022 by the Nominatim developer community. + * For a full list of authors see the git log. + */ #include "postgres.h" #include "fmgr.h" #include "mb/pg_wchar.h" @@ -157,17 +165,18 @@ transliteration( PG_FUNCTION_ARGS ) PG_RETURN_TEXT_P(result); } +// Set isspace=1 if the replacement _only_ adds a space before the search string. I.e. to == " " + from void str_replace(char* buffer, int* len, int* changes, char* from, int fromlen, char* to, int tolen, int isspace) { char *p; - // Search string is too long to be pressent + // Search string is too long to be present if (fromlen > *len) return; p = strstr(buffer, from); while(p) { - if (!isspace || *(p-1) != ' ') + if (!isspace || (p > buffer && *(p-1) != ' ')) { (*changes)++; if (tolen != fromlen) memmove(p+tolen, p+fromlen, *len-(p-buffer)+1); @@ -230,7 +239,7 @@ gettokenstring( PG_FUNCTION_ARGS ) sourcedata = (unsigned char *)VARDATA(source); sourcedatalength = VARSIZE(source) - VARHDRSZ; - // Buffer for doing the replace in - string could get slightly longer (double is mastive overkill) + // Buffer for doing the replace in - string could get slightly longer (double is massive overkill) buffer = (char *)palloc((sourcedatalength*2)*sizeof(char)); memcpy(buffer+1, sourcedata, sourcedatalength); buffer[0] = 32;