summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Herlant <aerostitch@users.noreply.github.com>2019-10-27 10:04:00 -0700
committerViktor Verebelyi <vviktor2@gmail.com>2020-09-22 02:15:40 +0100
commit01445e49ab3b9ec17ff164a040e7cb3c6ead69c0 (patch)
tree65883c4bc2a2c04dfdcc9da8c122a4bd4780af20
parent04c8a32203982d8dcdc6afeabe8541b2137e9590 (diff)
downloadnavit-01445e49ab3b9ec17ff164a040e7cb3c6ead69c0.tar.gz
cleanup:search:Remove duplicate code for search_fix_spaces (#917)
* cleanup:search:Remove duplicate code for search_fix_spaces * Remove the static modifier to allow its usage in multiple files * Avoid discards const qualifier from pointer target type warning * Fix the bad redirect and force const in signature * Add doc for search_fix_spaces * Update description * Handle case when the string will only contain chars that will be discarded
-rw-r--r--navit/android.c29
-rw-r--r--navit/search.c14
-rw-r--r--navit/search.h1
3 files changed, 13 insertions, 31 deletions
diff --git a/navit/android.c b/navit/android.c
index def3a6f22..4b73b3f5e 100644
--- a/navit/android.c
+++ b/navit/android.c
@@ -681,35 +681,6 @@ static void android_search_idle(struct android_search_priv *search_priv) {
dbg(lvl_info, "leave");
}
-static char *search_fix_spaces(const char *str) {
- int i;
- int len=strlen(str);
- char c,*s,*d,*ret=g_strdup(str);
-
- for (i = 0 ; i < len ; i++) {
- if (ret[i] == ',' || ret[i] == '/')
- ret[i]=' ';
- }
- s=ret;
- d=ret;
- len=0;
- do {
- c=*s++;
- if (c != ' ' || len != 0) {
- *d++=c;
- len++;
- }
- while (c == ' ' && *s == ' ')
- s++;
- if (c == ' ' && *s == '\0') {
- d--;
- len--;
- }
- } while (c);
-
- return ret;
-}
-
static void start_search(struct android_search_priv *search_priv, const char *search_string) {
dbg(lvl_debug,"enter %s", search_string);
char *str=search_fix_spaces(search_string);
diff --git a/navit/search.c b/navit/search.c
index 06afcbfe6..e700f4355 100644
--- a/navit/search.c
+++ b/navit/search.c
@@ -135,13 +135,20 @@ int search_list_level(enum attr_type attr_type) {
}
}
-static char *search_fix_spaces(char *str) {
+/**
+ * @brief Replaces ',' and '/' by ' ', deduplicates spaces within the string
+ * and strips spaces from both ends of the string
+ *
+ * @param pointer to the string to cleanup
+ * @return pointer to the cleaned up string
+ */
+char *search_fix_spaces(const char *str) {
int i;
int len=strlen(str);
char c,*s,*d,*ret=g_strdup(str);
for (i = 0 ; i < len ; i++) {
- if (ret[i] == ',' || ret[i] == ',' || ret[i] == '/')
+ if (ret[i] == ',' || ret[i] == '/')
ret[i]=' ';
}
s=ret;
@@ -160,6 +167,9 @@ static char *search_fix_spaces(char *str) {
len--;
}
} while (c);
+ // Make sure the string is terminated at current position even if nothing has been added to it.
+ // This case happen when you use a string containing only chars that will be discarded.
+ *d='\0';
return ret;
}
diff --git a/navit/search.h b/navit/search.h
index 50756606f..cdf93410e 100644
--- a/navit/search.h
+++ b/navit/search.h
@@ -87,6 +87,7 @@ char *search_list_get_unique(struct search_list *this_, char *unique);
struct search_list_result *search_list_get_result(struct search_list *this_);
void search_list_destroy(struct search_list *this_);
void search_init(void);
+char *search_fix_spaces(const char *str);
/* end of prototypes */
#ifdef __cplusplus
}