diff --git a/src/IO/http.cc b/src/IO/http.cc index 5652fd1..f0d4acc 100644 --- a/src/IO/http.cc +++ b/src/IO/http.cc @@ -127,13 +127,13 @@ int a_Http_init(void) char *env_proxy = getenv("http_proxy"); HTTP_Language_hdr = prefs.http_language ? - dStrconcat("Accept-Language: ", prefs.http_language, "\r\n", NULL) : + dStrconcat("Accept-Language: ", prefs.http_language.value().c_str(), "\r\n", NULL) : dStrdup(""); if (env_proxy && strlen(env_proxy)) HTTP_Proxy = a_Url_new(env_proxy, NULL).release(); if (!HTTP_Proxy && prefs.http_proxy) - HTTP_Proxy = a_Url_dup(prefs.http_proxy).release(); + HTTP_Proxy = a_Url_dup(prefs.http_proxy.get()).release(); /* This allows for storing the proxy password in "user:passwd" format * in dillorc, but as this constitutes a security problem, it was disabled. @@ -159,7 +159,7 @@ int a_Http_proxy_auth(void) */ void a_Http_set_proxy_passwd(const char *str) { - char *http_proxyauth = dStrconcat(prefs.http_proxyuser, ":", str, NULL); + char *http_proxyauth = dStrconcat(prefs.http_proxyuser.value().c_str(), ":", str, NULL); HTTP_Proxy_Auth_base64 = a_Misc_encode_base64(http_proxyauth); dFree(http_proxyauth); } @@ -337,10 +337,10 @@ static char *Http_get_referer(const DilloUrl *url) { char *referer = NULL; - if (!strcmp(prefs.http_referer, "host")) { + if (!strcmp(prefs.http_referer.c_str(), "host")) { referer = dStrconcat("Referer: ", URL_SCHEME(url), "://", URL_AUTHORITY(url), "/", "\r\n", NULL); - } else if (!strcmp(prefs.http_referer, "path")) { + } else if (!strcmp(prefs.http_referer.c_str(), "path")) { referer = dStrconcat("Referer: ", URL_SCHEME(url), "://", URL_AUTHORITY(url), URL_PATH_(url) ? URL_PATH(url) : "/", "\r\n", NULL); @@ -684,7 +684,7 @@ static int Http_must_use_proxy(const char *hostname) if (prefs.no_proxy) { size_t host_len = strlen(hostname); - np = dStrdup(prefs.no_proxy); + np = dStrdup(prefs.no_proxy.value().c_str()); for (p = np; (tok = dStrsep(&p, " ")); ) { int start = host_len - strlen(tok); diff --git a/src/IO/tls_openssl.cc b/src/IO/tls_openssl.cc index e297dbc..e1eea32 100644 --- a/src/IO/tls_openssl.cc +++ b/src/IO/tls_openssl.cc @@ -58,6 +58,8 @@ #include /* for hostname checking */ #include /* OpenSSL_version */ +#include + #define CERT_STATUS_NONE 0 #define CERT_STATUS_RECEIVING 1 #define CERT_STATUS_CLEAN 2 @@ -324,26 +326,28 @@ void a_Tls_openssl_init(void) */ static int Tls_save_certificate_home(X509 * cert) { - char buf[4096]; + std::string buf; FILE * fp = NULL; uint_t i = 0; int ret = 1; /* Attempt to create .flenser/certs blindly - check later */ - snprintf(buf, 4096, "%s/.flenser/", dGethomedir()); - mkdir(buf, 01777); - snprintf(buf, 4096, "%s/.flenser/certs/", dGethomedir()); - mkdir(buf, 01777); + buf= dGethomedir_string().value() + "/.flenser/"; + mkdir(buf.c_str(), 01777); + buf= dGethomedir_string().value() + "/.flenser/certs/"; + mkdir(buf.c_str(), 01777); do { - snprintf(buf, 4096, "%s/.flenser/certs/%lx.%u", - dGethomedir(), X509_subject_name_hash(cert), i); + std::ostringstream oss; + oss << dGethomedir_string().value() + "/.flenser/certs/" << X509_subject_name_hash( cert ) << '.' << i; + buf= oss.str(); + - fp=fopen(buf, "r"); + fp=fopen(buf.c_str(), "r"); if (fp == NULL){ /* File name doesn't exist so we can use it safely */ - fp=fopen(buf, "w"); + fp=fopen(buf.c_str(), "w"); if (fp == NULL){ MSG("Unable to open cert save file in home dir\n"); break; diff --git a/src/dicache.cc b/src/dicache.cc index 4c9ae9c..2c82091 100644 --- a/src/dicache.cc +++ b/src/dicache.cc @@ -80,7 +80,7 @@ void a_Dicache_init(void) if (prefs.ignore_image_formats) { for (int i = 0; i < DIC_MAX; i++) { - if (dStriAsciiStr(prefs.ignore_image_formats, format_name[i])) { + if (dStriAsciiStr(prefs.ignore_image_formats.value().c_str(), format_name[i])) { disabled_formats[i] = 1; _MSG("Image format %s disabled\n", format_name[i]); } diff --git a/src/flenser.cc b/src/flenser.cc index eb36d83..96a79cb 100644 --- a/src/flenser.cc +++ b/src/flenser.cc @@ -407,7 +407,7 @@ int main(int argc, char **argv) // Sets WM_CLASS hint on X11 Fl_Window::default_xclass("flenser"); - Fl::scheme(prefs.theme); + Fl::scheme(prefs.theme.c_str()); // Disable drag and drop as it crashes on MacOSX Fl::dnd_text_ops(0); @@ -445,7 +445,7 @@ int main(int argc, char **argv) /* Proxy authentication */ if (prefs.http_proxyuser && !a_Http_proxy_auth()) { - const char *passwd = a_UIcmd_get_passwd(prefs.http_proxyuser); + const char *passwd = a_UIcmd_get_passwd(prefs.http_proxyuser.value().c_str()); if (passwd) { a_Http_set_proxy_passwd(passwd); } else { @@ -462,8 +462,8 @@ int main(int argc, char **argv) strcmp(URL_PATH(prefs.start_page), "blank") == 0) a_UIcmd_open_url(bw, NULL); // NULL URL focuses location else { - a_UIcmd_open_url(bw, prefs.start_page); - a_UIcmd_set_location_text(bw, URL_STR(prefs.start_page)); + a_UIcmd_open_url(bw, prefs.start_page.get()); + a_UIcmd_set_location_text(bw, URL_STR(prefs.start_page.get())); } } else { for (int i = idx; i < argc; i++) { diff --git a/src/nav.cc b/src/nav.cc index 5307f85..86e3f40 100644 --- a/src/nav.cc +++ b/src/nav.cc @@ -448,7 +448,7 @@ void a_Nav_forw(BrowserWindow *bw) */ void a_Nav_home(BrowserWindow *bw) { - a_Nav_push(bw, prefs.home, NULL); + a_Nav_push(bw, prefs.home.get(), NULL); } /* diff --git a/src/prefs.cc b/src/prefs.cc index 7fa62cb..1897810 100644 --- a/src/prefs.cc +++ b/src/prefs.cc @@ -62,21 +62,17 @@ void a_Prefs_init(void) prefs.xpos = PREFS_GEOMETRY_DEFAULT_XPOS; prefs.ypos = PREFS_GEOMETRY_DEFAULT_YPOS; - prefs.home = a_Url_new(PREFS_HOME, NULL).release(); - prefs.http_language = NULL; - prefs.http_proxy = NULL; + prefs.home = a_Url_new(PREFS_HOME, NULL); prefs.http_max_conns = 6; prefs.http_persistent_conns = TRUE; - prefs.http_proxyuser = NULL; - prefs.http_referer = dStrdup(PREFS_HTTP_REFERER); + prefs.http_referer = PREFS_HTTP_REFERER; prefs.http_strict_transport_security = TRUE; prefs.http_force_https = FALSE; - prefs.http_user_agent = dStrdup(PREFS_HTTP_USER_AGENT); + prefs.http_user_agent = PREFS_HTTP_USER_AGENT; prefs.limit_text_width = FALSE; prefs.adjust_min_width = TRUE; prefs.adjust_table_min_width = TRUE; prefs.load_images=TRUE; - prefs.ignore_image_formats = NULL; prefs.load_background_images=FALSE; prefs.load_stylesheets=TRUE; prefs.middle_click_drags_page = TRUE; @@ -84,11 +80,11 @@ void a_Prefs_init(void) prefs.right_click_closes_tab = TRUE; prefs.scroll_switches_tabs = TRUE; prefs.scroll_switches_tabs_reverse = FALSE; - prefs.no_proxy = dStrdup(PREFS_NO_PROXY); + prefs.no_proxy = PREFS_NO_PROXY; prefs.link_actions = dList_new(16); prefs.panel_size = P_medium; prefs.parse_embedded_css=TRUE; - prefs.save_dir = dStrdup(PREFS_SAVE_DIR); + prefs.save_dir = PREFS_SAVE_DIR; prefs.scroll_step = 100; prefs.scroll_page_overlap = 50; prefs.search_urls = dList_new(16); @@ -116,9 +112,9 @@ void a_Prefs_init(void) prefs.show_tooltip = TRUE; prefs.show_ui_tooltip = TRUE; prefs.small_icons = FALSE; - prefs.start_page = a_Url_new(PREFS_START_PAGE, NULL).release(); - prefs.new_tab_page = a_Url_new(PREFS_NEW_TAB_PAGE, NULL).release(); - prefs.theme = dStrdup(PREFS_THEME); + prefs.start_page = a_Url_new(PREFS_START_PAGE, NULL); + prefs.new_tab_page = a_Url_new(PREFS_NEW_TAB_PAGE, NULL); + prefs.theme = PREFS_THEME; prefs.ui_button_highlight_color = -1; prefs.ui_fg_color = -1; prefs.ui_main_bg_color = -1; @@ -142,22 +138,11 @@ void a_Prefs_init(void) * memory-deallocation. * (Call this one at exit time) */ -void a_Prefs_freeall(void) +void a_Prefs_freeall() { int i; - delete prefs.home; - dFree(prefs.http_language); - delete prefs.http_proxy; - dFree(prefs.http_proxyuser); - dFree(prefs.http_referer); - dFree(prefs.http_user_agent); - dFree(prefs.no_proxy); - dFree(prefs.save_dir); for (i = 0; i < dList_length(prefs.search_urls); ++i) dFree(dList_nth_data(prefs.search_urls, i)); dList_free(prefs.search_urls); - delete prefs.start_page; - delete prefs.new_tab_page; - dFree(prefs.theme); } diff --git a/src/prefs.hh b/src/prefs.hh index ccd9a55..6030c72 100644 --- a/src/prefs.hh +++ b/src/prefs.hh @@ -42,16 +42,16 @@ struct DilloPrefs int height; int xpos; int ypos; - char *http_language; + std::optional< std::string > http_language; int32_t http_max_conns; - DilloUrl *http_proxy; - char *http_proxyuser; - char *http_referer; - char *http_user_agent; - char *no_proxy; - DilloUrl *start_page; - DilloUrl *home; - DilloUrl *new_tab_page; + std::unique_ptr< DilloUrl > http_proxy; + std::optional< std::string > http_proxyuser; + std::string http_referer; + std::string http_user_agent; + std::optional< std::string > no_proxy; + std::unique_ptr< DilloUrl > start_page; + std::unique_ptr< DilloUrl > home; + std::unique_ptr< DilloUrl > new_tab_page; bool allow_white_bg; int32_t white_bg_replacement; int32_t bg_color; @@ -68,7 +68,7 @@ struct DilloPrefs bool contrast_visited_color; bool show_tooltip; bool show_ui_tooltip; - char *theme; + std::string theme; int panel_size; bool small_icons; bool limit_text_width; @@ -100,7 +100,7 @@ struct DilloPrefs bool show_quit_dialog; bool fullwindow_start; bool load_images; - char *ignore_image_formats; + std::optional< std::string > ignore_image_formats; bool load_background_images; bool load_stylesheets; bool parse_embedded_css; @@ -120,7 +120,7 @@ struct DilloPrefs bool scroll_switches_tabs_reverse; bool search_url_idx; Dlist *search_urls; - char *save_dir; + std::optional< std::string > save_dir; bool show_msg; bool show_extra_warnings; bool middle_click_drags_page; diff --git a/src/uicmd.cc b/src/uicmd.cc index 8c2f845..4c35217 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -810,8 +810,8 @@ void a_UIcmd::a_UIcmd_open_url(BrowserWindow *bw, const DilloUrl *url) static void UIcmd_open_url_nbw(BrowserWindow *new_bw, const DilloUrl *url) { if (!url && prefs.new_tab_page) { - if (strcmp(URL_STR(prefs.new_tab_page), "about:blank") != 0) - url = prefs.new_tab_page; + if (strcmp(URL_STR(prefs.new_tab_page.get()), "about:blank") != 0) + url = prefs.new_tab_page.get(); } /* When opening a new BrowserWindow (tab or real window) we focus @@ -892,7 +892,7 @@ void a_UIcmd::a_UIcmd_forw_popup(void *vbw, int x, int y) */ void a_UIcmd::a_UIcmd_home(void *vbw) { - a_UIcmd_open_url((BrowserWindow*)vbw, prefs.home); + a_UIcmd_open_url((BrowserWindow*)vbw, prefs.home.get()); } /* @@ -1030,17 +1030,15 @@ static char *UIcmd_make_save_filename(const DilloUrl *url) /* * Set the default directory for saving files. */ -void a_UIcmd::a_UIcmd_init(void) +void a_UIcmd::a_UIcmd_init() { - const char *dir = prefs.save_dir; + if( not prefs.save_dir.has_value() ) return; - if (dir && *dir) { - // assert a trailing '/' - save_dir = - (dir[strlen(dir)-1] == '/') - ? dStrdup(dir) - : dStrconcat(dir, "/", NULL); - } + std::string dir= prefs.save_dir.value(); + // assert a trailing '/' + if( dir.back() != '/' ) dir+= '/'; + + save_dir = dStrdup( dir.c_str() ); } /*