diff --git a/src/uicmd.cc b/src/uicmd.cc index 5d36077..7d86b07 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -87,7 +87,7 @@ static struct Tabgroup *tabgroups = NULL; */ static BrowserWindow *UIcmd_tab_new(CustTabs *tabs, UI *old_ui, int focus); static void close_tab_btn_cb (Fl_Widget *w, void *cb_data); -static char *UIcmd_make_search_str(const char *str); +static std::string UIcmd_make_search_str(const char *str); static void UIcmd_set_window_labels(Fl_Window *win, const char *str); //---------------------------------------------------------------------------- @@ -731,10 +731,10 @@ void a_UIcmd::a_UIcmd_close_all_bw(void *) * Return a search string of the suffix if str starts with a * prefix of a search engine name and a blank */ -static char *UIcmd_find_search_str(const char *str) +static std::optional< std::string > UIcmd_find_search_str(const char *str) { int p; - char *url = NULL; + std::optional< std::string > url; int len = strcspn(str, " "); if (len > 0 && str[len] != '\0') { @@ -762,12 +762,12 @@ static char *UIcmd_find_search_str(const char *str) void a_UIcmd::a_UIcmd_open_urlstr(BrowserWindow *bw, const char *urlstr) { char *new_urlstr; - char *search_urlstr = NULL; + std::optional< std::string > search_urlstr; std::unique_ptr< DilloUrl > url; int ch; if ((search_urlstr = UIcmd_find_search_str(urlstr))) { - urlstr = search_urlstr; + urlstr = search_urlstr.value().c_str(); } if (urlstr && *urlstr) { /* Filter URL string */ @@ -792,7 +792,6 @@ void a_UIcmd::a_UIcmd_open_urlstr(BrowserWindow *bw, const char *urlstr) a_UIcmd_open_url(bw, url.release()); } } - dFree(search_urlstr); } /* @@ -1164,12 +1163,13 @@ void a_UIcmd::a_UIcmd_open_file(void *vbw) * a string of keywords (separated by blanks) and the current search_url. * The search string is urlencoded. */ -static char *UIcmd_make_search_str(const char *str) +static std::string +UIcmd_make_search_str(const char *str) { - char *search_url, *l, *u, *c; + char *l, *u, *c; char *keys = a_Url_encode_hex_str(str), *src = (char*)dList_nth_data(prefs.search_urls, prefs.search_url_idx); - Dstr *ds = dStr_sized_new(128); + std::string search_url; /* parse search_url into label and url */ if (a_Misc_parse_search_url(src, &l, &u) == 0) { @@ -1177,22 +1177,20 @@ static char *UIcmd_make_search_str(const char *str) if (*c == '%') switch(*++c) { case 's': - dStr_append(ds, keys); break; + search_url+= keys; break; case '%': - dStr_append_c(ds, '%'); break; + search_url+= '%'; break; case 0: MSG_WARN("search_url ends with '%%'\n"); c--; break; default: MSG_WARN("illegal specifier '%%%c' in search_url\n", *c); } else - dStr_append_c(ds, *c); + search_url+= *c; } } dFree(keys); - search_url = ds->str; - dStr_free(ds, 0); return search_url; } @@ -1204,9 +1202,8 @@ void a_UIcmd::a_UIcmd_search_dialog(BrowserWindow *bw) const char *query; if ((query = a_Dialog_input("Flenser: Search", "Search the Web:"))) { - char *url_str = UIcmd_make_search_str(query); - a_UIcmd_open_urlstr(bw, url_str); - dFree(url_str); + auto url_str = UIcmd_make_search_str(query); + a_UIcmd_open_urlstr(bw, url_str.c_str()); } }