Gitweb links:
...log
http://git.netsurf-browser.org/netsurf.git/shortlog/ce3d99191842ded7687dc...
...commit
http://git.netsurf-browser.org/netsurf.git/commit/ce3d99191842ded7687dc23...
...tree
http://git.netsurf-browser.org/netsurf.git/tree/ce3d99191842ded7687dc23c3...
The branch, master has been updated
via ce3d99191842ded7687dc23c3ccb5f5ccc843558 (commit)
via f995616509fc3c0556da49c915375108bf268f38 (commit)
from 1620f20c4d1e13b05f108407508653841d4887eb (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff
http://git.netsurf-browser.org/netsurf.git/commit/?id=ce3d99191842ded7687...
commit ce3d99191842ded7687dc23c3ccb5f5ccc843558
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
use nsurl_nice and remove url_nice
change all callers over to using new API for generating nice filenames
from a url and remove the old API.
diff --git a/amiga/file.c b/amiga/file.c
index e74c5d0..2eda926 100644
--- a/amiga/file.c
+++ b/amiga/file.c
@@ -220,7 +220,9 @@ void ami_file_save_req(int type, struct gui_window_2 *gwin,
char *fname = AllocVecTags(1024, NULL);
char *initial_fname = NULL;
- if(object) url_nice(nsurl_access(hlcache_handle_get_url(object)), &initial_fname,
true);
+ if(object) {
+ nsurl_nice(hlcache_handle_get_url(object), &initial_fname, true);
+ }
if(AslRequestTags(savereq,
ASLFR_Window, gwin->win,
diff --git a/desktop/download.c b/desktop/download.c
index a124c89..6e2aad8 100644
--- a/desktop/download.c
+++ b/desktop/download.c
@@ -76,8 +76,9 @@ static char *download_default_filename(nsurl *url)
{
char *nice;
- if (url_nice(nsurl_access(url), &nice, false) == NSERROR_OK)
+ if (nsurl_nice(url, &nice, false) == NSERROR_OK) {
return nice;
+ }
return NULL;
}
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index 571ba93..6e9ec53 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -637,8 +637,8 @@ MULTIHANDLER(savepage)
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fc), filter);
gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(fc), filter);
- res = url_nice(nsurl_access(browser_window_get_url(
- nsgtk_get_browser_window(g->top_level))), &path, false);
+ res = nsurl_nice(browser_window_get_url(
+ nsgtk_get_browser_window(g->top_level)), &path, false);
if (res != NSERROR_OK) {
path = strdup(messages_get("SaveText"));
if (path == NULL) {
@@ -697,8 +697,7 @@ MULTIHANDLER(pdf)
LOG(("Print preview (generating PDF) started."));
- res = url_nice(nsurl_access(browser_window_get_url(bw)),
- &url_name, true);
+ res = nsurl_nice(browser_window_get_url(bw), &url_name, true);
if (res != NSERROR_OK) {
warn_user(messages_get_errorcode(res), 0);
return TRUE;
@@ -771,8 +770,8 @@ MULTIHANDLER(plaintext)
char *filename;
nserror res;
- res = url_nice(nsurl_access(browser_window_get_url(
- nsgtk_get_browser_window(g->top_level))),
+ res = nsurl_nice(browser_window_get_url(
+ nsgtk_get_browser_window(g->top_level)),
&filename, false);
if (res != NSERROR_OK) {
filename = strdup(messages_get("SaveText"));
diff --git a/gtk/viewsource.c b/gtk/viewsource.c
index 9c28f69..3c70beb 100644
--- a/gtk/viewsource.c
+++ b/gtk/viewsource.c
@@ -51,7 +51,7 @@ void nsgtk_viewsource(GtkWindow *parent, struct browser_window *bw)
source_data = content_get_source_data(hlcontent, &source_size);
- ret = url_nice(nsurl_access(browser_window_get_url(bw)), &filename, false);
+ ret = nsurl_nice(browser_window_get_url(bw), &filename, false);
if (ret != NSERROR_OK) {
filename = strdup(messages_get("SaveSource"));
if (filename == NULL) {
diff --git a/riscos/save.c b/riscos/save.c
index 1974d9c..bfde316 100644
--- a/riscos/save.c
+++ b/riscos/save.c
@@ -116,7 +116,7 @@ static void ro_gui_save_bounced(wimp_message *message);
static bool ro_gui_save_object_native(hlcache_handle *h, char *path);
static bool ro_gui_save_link(const char *url, const char *title, link_format format, char
*path);
static void ro_gui_save_set_state(hlcache_handle *h, gui_save_type save_type,
- const char *url, char *leaf_buf, size_t leaf_len,
+ const nsurl *url, char *leaf_buf, size_t leaf_len,
char *icon_buf, size_t icon_len);
static void ro_gui_save_drag_end(wimp_dragged *drag, void *data);
static bool ro_gui_save_create_thumbnail(hlcache_handle *h, const char *name);
@@ -254,7 +254,7 @@ void ro_gui_saveas_quit(void)
*/
void ro_gui_save_prepare(gui_save_type save_type, hlcache_handle *h,
- char *s, const char *url, const char *title)
+ char *s, const nsurl *url, const char *title)
{
char name_buf[FILENAME_MAX];
size_t leaf_offset = 0;
@@ -271,7 +271,11 @@ void ro_gui_save_prepare(gui_save_type save_type, hlcache_handle *h,
free(gui_save_selection);
gui_save_selection = s;
- gui_save_url = url;
+ if (url != NULL) {
+ gui_save_url = nsurl_access(url);
+ } else {
+ gui_save_url = NULL;
+ }
gui_save_title = title;
if (save_dir) {
@@ -280,8 +284,11 @@ void ro_gui_save_prepare(gui_save_type save_type, hlcache_handle *h,
name_buf[leaf_offset++] = '.';
}
- ro_gui_save_set_state(h, save_type,
- h ? nsurl_access(hlcache_handle_get_url(h)) : url,
+ if (h != NULL) {
+ url = hlcache_handle_get_url(h);
+ }
+
+ ro_gui_save_set_state(h, save_type, url,
name_buf + leaf_offset, FILENAME_MAX - leaf_offset,
icon_buf, sizeof(icon_buf));
@@ -386,7 +393,7 @@ void gui_drag_save_object(struct gui_window *g, hlcache_handle *c,
return;
}
- ro_gui_save_set_state(c, save_type, nsurl_access(hlcache_handle_get_url(c)),
+ ro_gui_save_set_state(c, save_type, hlcache_handle_get_url(c),
save_leafname, LEAFNAME_MAX,
icon_buf, sizeof(icon_buf));
@@ -454,7 +461,7 @@ void gui_drag_save_selection(struct gui_window *g, const char
*selection)
* \
*/
-void ro_gui_drag_save_link(gui_save_type save_type, const char *url,
+void ro_gui_drag_save_link(gui_save_type save_type, const nsurl *url,
const char *title, struct gui_window *g)
{
wimp_pointer pointer;
@@ -466,7 +473,7 @@ void ro_gui_drag_save_link(gui_save_type save_type, const char *url,
xwimp_create_menu(wimp_CLOSE_MENU, 0, 0);
ro_gui_dialog_close(dialog_saveas);
- gui_save_url = url;
+ gui_save_url = nsurl_access(url);
gui_save_title = title;
gui_save_sourcew = g->window;
saving_from_dialog = false;
@@ -479,8 +486,8 @@ void ro_gui_drag_save_link(gui_save_type save_type, const char *url,
return;
}
- ro_gui_save_set_state(NULL, save_type, url, save_leafname, LEAFNAME_MAX,
- icon_buf, sizeof(icon_buf));
+ ro_gui_save_set_state(NULL, save_type, url, save_leafname,
+ LEAFNAME_MAX, icon_buf, sizeof(icon_buf));
ro_mouse_drag_start(ro_gui_save_drag_end, NULL, NULL, NULL);
@@ -1215,7 +1222,7 @@ bool ro_gui_save_link(const char *url, const char *title,
link_format format,
*/
void ro_gui_save_set_state(hlcache_handle *h, gui_save_type save_type,
- const char *url, char *leaf_buf, size_t leaf_len,
+ const nsurl *url, char *leaf_buf, size_t leaf_len,
char *icon_buf, size_t icon_len)
{
/* filename */
@@ -1251,8 +1258,9 @@ void ro_gui_save_set_state(hlcache_handle *h, gui_save_type
save_type,
}
/* leafname */
- if (url && url_nice(url, &nice, nsoption_bool(strip_extensions)) ==
- NSERROR_OK) {
+ if ((url != NULL) &&
+ (nsurl_nice(url, &nice, nsoption_bool(strip_extensions)) ==
+ NSERROR_OK)) {
size_t i;
for (i = 0; nice[i]; i++) {
if (nice[i] == '.')
diff --git a/riscos/save.h b/riscos/save.h
index d3ca5c2..08bdc17 100644
--- a/riscos/save.h
+++ b/riscos/save.h
@@ -34,10 +34,10 @@ void gui_drag_save_selection(struct gui_window *g, const char
*selection);
wimp_w ro_gui_saveas_create(const char *template_name);
void ro_gui_saveas_quit(void);
void ro_gui_save_prepare(enum gui_save_type save_type, struct hlcache_handle *h,
- char *s, const char *url,
+ char *s, const nsurl *url,
const char *title);
void ro_gui_save_start_drag(wimp_pointer *pointer);
-void ro_gui_drag_save_link(enum gui_save_type save_type, const char *url,
+void ro_gui_drag_save_link(enum gui_save_type save_type, const nsurl *url,
const char *title, struct gui_window *g);
void ro_gui_drag_icon(int x, int y, const char *sprite);
void ro_gui_drag_box_cancel(void);
diff --git a/riscos/window.c b/riscos/window.c
index 6a62d56..4e07293 100644
--- a/riscos/window.c
+++ b/riscos/window.c
@@ -194,7 +194,7 @@ static hlcache_handle *current_menu_main = 0;
/** Object under menu, or 0 if no object. */
static hlcache_handle *current_menu_object = 0;
/** URL of link under menu, or 0 if no link. */
-static const char *current_menu_url = 0;
+static nsurl *current_menu_url = 0;
static float scale_snap_to[] = {0.10, 0.125, 0.25, 0.333, 0.5, 0.75,
1.0,
@@ -1284,7 +1284,10 @@ static bool gui_window_drag_start(struct gui_window *g,
gui_drag_type type,
static void gui_window_save_link(struct gui_window *g, const char *url,
const char *title)
{
- ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL, NULL, url, title);
+ nsurl *nurl;
+ nsurl_create(url, &nurl);
+ ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL, NULL, nurl, title);
+ nsurl_unref(nurl);
ro_gui_dialog_open_persistent(g->window, dialog_saveas, true);
}
@@ -2174,7 +2177,10 @@ bool ro_gui_window_menu_prepare(wimp_w w, wimp_i i, wimp_menu
*menu,
current_menu_main = NULL;
current_menu_object = NULL;
- current_menu_url = NULL;
+ if (current_menu_url != NULL) {
+ nsurl_unref(current_menu_url);
+ current_menu_url = NULL;
+ }
if (ro_gui_window_to_window_pos(g, pointer->pos.x,
pointer->pos.y, &pos)) {
@@ -2183,7 +2189,7 @@ bool ro_gui_window_menu_prepare(wimp_w w, wimp_i i, wimp_menu
*menu,
current_menu_main = cont.main;
current_menu_object = cont.object;
- current_menu_url = cont.link_url;
+ nsurl_create(cont.link_url, ¤t_menu_url);
}
}
@@ -2444,7 +2450,7 @@ void ro_gui_window_menu_warning(wimp_w w, wimp_i i, wimp_menu
*menu,
case BROWSER_OBJECT_INFO:
if (current_menu_object != NULL)
ro_gui_window_prepare_objectinfo(current_menu_object,
- current_menu_url);
+ nsurl_access(current_menu_url));
break;
case BROWSER_OBJECT_SAVE:
@@ -2463,45 +2469,45 @@ void ro_gui_window_menu_warning(wimp_w w, wimp_i i, wimp_menu
*menu,
case BROWSER_SAVE_URL_URI:
if (h != NULL)
ro_gui_save_prepare(GUI_SAVE_LINK_URI, NULL, NULL,
- nsurl_access(hlcache_handle_get_url(h)),
+ hlcache_handle_get_url(h),
content_get_title(h));
break;
case BROWSER_SAVE_URL_URL:
if (h != NULL)
ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL, NULL,
- nsurl_access(hlcache_handle_get_url(h)),
+ hlcache_handle_get_url(h),
content_get_title(h));
break;
case BROWSER_SAVE_URL_TEXT:
if (h != NULL)
ro_gui_save_prepare(GUI_SAVE_LINK_TEXT, NULL, NULL,
- nsurl_access(hlcache_handle_get_url(h)),
+ hlcache_handle_get_url(h),
content_get_title(h));
break;
case BROWSER_OBJECT_SAVE_URL_URI:
if (current_menu_object != NULL)
ro_gui_save_prepare(GUI_SAVE_LINK_URI, NULL, NULL,
- nsurl_access(hlcache_handle_get_url(
- current_menu_object)),
+ hlcache_handle_get_url(
+ current_menu_object),
content_get_title(current_menu_object));
break;
case BROWSER_OBJECT_SAVE_URL_URL:
if (current_menu_object != NULL)
ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL, NULL,
- nsurl_access(hlcache_handle_get_url(
- current_menu_object)),
+ hlcache_handle_get_url(
+ current_menu_object),
content_get_title(current_menu_object));
break;
case BROWSER_OBJECT_SAVE_URL_TEXT:
if (current_menu_object != NULL)
ro_gui_save_prepare(GUI_SAVE_LINK_TEXT, NULL, NULL,
- nsurl_access(hlcache_handle_get_url(
- current_menu_object)),
+ hlcache_handle_get_url(
+ current_menu_object),
content_get_title(current_menu_object));
break;
@@ -2759,7 +2765,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case BROWSER_OBJECT_INFO:
if (current_menu_object != NULL) {
ro_gui_window_prepare_objectinfo(current_menu_object,
- current_menu_url);
+ nsurl_access(current_menu_url));
ro_gui_dialog_open_persistent(g->window,
dialog_objinfo, false);
}
@@ -2799,33 +2805,25 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu
*menu,
case BROWSER_LINK_DOWNLOAD:
if (current_menu_url != NULL) {
- error = nsurl_create(current_menu_url, &url);
- if (error == NSERROR_OK) {
- error = browser_window_navigate(bw,
- url,
- browser_window_get_url(bw),
- BW_NAVIGATE_DOWNLOAD,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
+ error = browser_window_navigate(bw,
+ current_menu_url,
+ browser_window_get_url(bw),
+ BW_NAVIGATE_DOWNLOAD,
+ NULL,
+ NULL,
+ NULL);
}
break;
case BROWSER_LINK_NEW_WINDOW:
if (current_menu_url != NULL) {
- error = nsurl_create(current_menu_url, &url);
- if (error == NSERROR_OK) {
- error = browser_window_create(
- BW_CREATE_HISTORY |
- BW_CREATE_CLONE,
- url,
- browser_window_get_url(bw),
- bw,
- NULL);
- nsurl_unref(url);
- }
+ error = browser_window_create(
+ BW_CREATE_HISTORY |
+ BW_CREATE_CLONE,
+ url,
+ browser_window_get_url(bw),
+ bw,
+ NULL);
}
break;
@@ -3050,7 +3048,10 @@ void ro_gui_window_menu_close(wimp_w w, wimp_i i, wimp_menu *menu)
{
if (menu == ro_gui_browser_window_menu) {
current_menu_object = NULL;
- current_menu_url = NULL;
+ if (current_menu_url != NULL) {
+ nsurl_unref(current_menu_url);
+ current_menu_url = NULL;
+ }
} else if (menu == gui_form_select_menu) {
gui_form_select_control = NULL;
}
@@ -3579,8 +3580,7 @@ void ro_gui_window_toolbar_click(void *data,
save_type = GUI_SAVE_LINK_TEXT;
ro_gui_drag_save_link(save_type,
- nsurl_access(
- browser_window_get_url(g->bw)),
+ browser_window_get_url(g->bw),
browser_window_get_title(g->bw), g);
}
break;
diff --git a/utils/url.c b/utils/url.c
index e1903a8..92e956b 100644
--- a/utils/url.c
+++ b/utils/url.c
@@ -147,109 +147,6 @@ out_true:
/* exported interface documented in utils/url.h */
-nserror url_nice(const char *url, char **result,
- bool remove_extensions)
-{
- int m;
- regmatch_t match[10];
- regoff_t start, end;
- size_t i;
- char *dot;
-
- *result = 0;
-
- m = regexec(&url_re, url, 10, match, 0);
- if (m) {
- LOG(("url '%s' failed to match regex", url));
- return NSERROR_NOT_FOUND;
- }
-
- /* extract the last component of the path, if possible */
- if (match[URL_RE_PATH].rm_so == -1 || match[URL_RE_PATH].rm_so ==
- match[URL_RE_PATH].rm_eo)
- goto no_path; /* no path, or empty */
- for (end = match[URL_RE_PATH].rm_eo - 1;
- end != match[URL_RE_PATH].rm_so && url[end] == '/';
- end--)
- ;
- if (end == match[URL_RE_PATH].rm_so)
- goto no_path; /* path is a string of '/' */
- end++;
- for (start = end - 1;
- start != match[URL_RE_PATH].rm_so && url[start] != '/';
- start--)
- ;
- if (url[start] == '/')
- start++;
-
- if (!strncasecmp(url + start, "index.", 6) ||
- !strncasecmp(url + start, "default.", 8)) {
- /* try again */
- if (start == match[URL_RE_PATH].rm_so)
- goto no_path;
- for (end = start - 1;
- end != match[URL_RE_PATH].rm_so &&
- url[end] == '/';
- end--)
- ;
- if (end == match[URL_RE_PATH].rm_so)
- goto no_path;
- end++;
- for (start = end - 1;
- start != match[URL_RE_PATH].rm_so &&
- url[start] != '/';
- start--)
- ;
- if (url[start] == '/')
- start++;
- }
-
- *result = malloc(end - start + 1);
- if (!*result) {
- LOG(("malloc failed"));
- return NSERROR_NOMEM;
- }
- strncpy(*result, url + start, end - start);
- (*result)[end - start] = 0;
-
- if (remove_extensions) {
- dot = strchr(*result, '.');
- if (dot && dot != *result)
- *dot = 0;
- }
-
- return NSERROR_OK;
-
-no_path:
-
- /* otherwise, use the host name, with '.' replaced by '_' */
- if (match[URL_RE_AUTHORITY].rm_so != -1 &&
- match[URL_RE_AUTHORITY].rm_so !=
- match[URL_RE_AUTHORITY].rm_eo) {
- *result = malloc(match[URL_RE_AUTHORITY].rm_eo -
- match[URL_RE_AUTHORITY].rm_so + 1);
- if (!*result) {
- LOG(("malloc failed"));
- return NSERROR_NOMEM;
- }
- strncpy(*result, url + match[URL_RE_AUTHORITY].rm_so,
- match[URL_RE_AUTHORITY].rm_eo -
- match[URL_RE_AUTHORITY].rm_so);
- (*result)[match[URL_RE_AUTHORITY].rm_eo -
- match[URL_RE_AUTHORITY].rm_so] = 0;
-
- for (i = 0; (*result)[i]; i++)
- if ((*result)[i] == '.')
- (*result)[i] = '_';
-
- return NSERROR_OK;
- }
-
- return NSERROR_NOT_FOUND;
-}
-
-
-/* exported interface documented in utils/url.h */
nserror url_unescape(const char *str, char **result)
{
char *curlstr;
diff --git a/utils/url.h b/utils/url.h
index a2efbec..d05ac05 100644
--- a/utils/url.h
+++ b/utils/url.h
@@ -56,16 +56,6 @@ bool url_host_is_ip_address(const char *host);
/**
- * Attempt to find a nice filename for a URL.
- *
- * \param url an absolute URL
- * \param result pointer to pointer to buffer to hold filename
- * \param remove_extensions remove any extensions from the filename
- * \return NSERROR_OK on success
- */
-nserror url_nice(const char *url, char **result, bool remove_extensions);
-
-/**
* Escape a string suitable for inclusion in an URL.
*
* \param unescaped the unescaped string
diff --git a/windows/download.c b/windows/download.c
index 8d3cc44..463a836 100644
--- a/windows/download.c
+++ b/windows/download.c
@@ -71,8 +71,9 @@ gui_download_window_create(download_context *ctx, struct gui_window
*gui)
messages_get("UnknownSize") :
human_friendly_bytesize(total_size);
- if (url_nice(nsurl_access(url), &filename, false) != NSERROR_OK)
+ if (nsurl_nice(url, &filename, false) != NSERROR_OK) {
filename = strdup(messages_get("UnknownFile"));
+ }
if (filename == NULL) {
warn_user(messages_get("NoMemory"), 0);
free(w);
commitdiff
http://git.netsurf-browser.org/netsurf.git/commit/?id=f995616509fc3c0556d...
commit f995616509fc3c0556da49c915375108bf268f38
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
remove more user warning calls and replace with error returns
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index f0eda84..a5b86b5 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -412,14 +412,18 @@ static nserror hotlist_tree_node_folder_cb(
return NSERROR_OK;
}
-static nserror hotlist_tree_node_entry_cb(
- struct treeview_node_msg msg, void *data)
+
+/**
+ * callback for hotlist treeview entry manipulation.
+ */
+static nserror
+hotlist_tree_node_entry_cb(struct treeview_node_msg msg, void *data)
{
struct hotlist_entry *e = data;
const char *old_text;
nsurl *old_url;
nsurl *url;
- nserror err;
+ nserror err = NSERROR_OK;
bool match;
switch (msg.msg) {
@@ -456,27 +460,24 @@ static nserror hotlist_tree_node_entry_cb(
msg.data.node_edit.text[0] != '\0') {
/* Requst to change the entry URL text */
err = nsurl_create(msg.data.node_edit.text, &url);
- if (err != NSERROR_OK)
- return err;
-
- old_url = e->url;
+ if (err == NSERROR_OK) {
+ old_url = e->url;
- e->url = url;
- e->data[HL_URL].value = nsurl_access(url);
- e->data[HL_URL].value_len = nsurl_length(e->url);
+ e->url = url;
+ e->data[HL_URL].value = nsurl_access(url);
+ e->data[HL_URL].value_len = nsurl_length(e->url);
- treeview_update_node_entry(hl_ctx.tree,
- e->entry, e->data, e);
- nsurl_unref(old_url);
+ treeview_update_node_entry(hl_ctx.tree,
+ e->entry, e->data, e);
+ nsurl_unref(old_url);
+ }
}
break;
case TREE_MSG_NODE_LAUNCH:
{
- nserror error;
struct browser_window *existing = NULL;
- enum browser_window_create_flags flags =
- BW_CREATE_HISTORY;
+ enum browser_window_create_flags flags = BW_CREATE_HISTORY;
/* TODO: Set existing to window that new tab appears in */
@@ -488,16 +489,14 @@ static nserror hotlist_tree_node_entry_cb(
/* TODO: flags ^= BW_CREATE_TAB; */
}
- error = browser_window_create(flags, e->url, NULL,
+ err = browser_window_create(flags, e->url, NULL,
existing, NULL);
- if (error != NSERROR_OK) {
- warn_user(messages_get_errorcode(error), 0);
- }
}
break;
}
- return NSERROR_OK;
+ return err;
}
+
struct treeview_callback_table hl_tree_cb_t = {
.folder = hotlist_tree_node_folder_cb,
.entry = hotlist_tree_node_entry_cb
@@ -517,8 +516,8 @@ typedef struct {
/**
* Parse an entry represented as a li.
*
- * \param li DOM node for parsed li
- * \param ctx Our hotlist loading context.
+ * \param li DOM node for parsed li
+ * \param ctx Our hotlist loading context.
* \return NSERROR_OK on success, or appropriate error otherwise
*/
static nserror hotlist_load_entry(dom_node *li, hotlist_load_ctx *ctx)
@@ -533,23 +532,23 @@ static nserror hotlist_load_entry(dom_node *li, hotlist_load_ctx
*ctx)
/* The li must contain an "a" element */
a = libdom_find_first_element(li, corestring_lwc_a);
if (a == NULL) {
- warn_user("TreeLoadError", "(Missing <a> in <li>)");
- return NSERROR_NOMEM;
+ LOG(("Missing <a> in <li>"));
+ return NSERROR_INVALID;
}
derror = dom_node_get_text_content(a, &title1);
if (derror != DOM_NO_ERR) {
- warn_user("TreeLoadError", "(No title)");
+ LOG(("No title"));
dom_node_unref(a);
- return NSERROR_NOMEM;
+ return NSERROR_INVALID;
}
derror = dom_element_get_attribute(a, corestring_dom_href, &url1);
if (derror != DOM_NO_ERR || url1 == NULL) {
- warn_user("TreeLoadError", "(No URL)");
+ LOG(("No URL"));
dom_string_unref(title1);
dom_node_unref(a);
- return NSERROR_NOMEM;
+ return NSERROR_INVALID;
}
dom_node_unref(a);
@@ -566,10 +565,9 @@ static nserror hotlist_load_entry(dom_node *li, hotlist_load_ctx
*ctx)
if (err != NSERROR_OK) {
LOG(("Failed normalising '%s'", dom_string_data(url1)));
- warn_user(messages_get_errorcode(err), NULL);
-
- if (title1 != NULL)
+ if (title1 != NULL) {
dom_string_unref(title1);
+ }
return err;
}
@@ -578,8 +576,9 @@ static nserror hotlist_load_entry(dom_node *li, hotlist_load_ctx
*ctx)
err = hotlist_add_entry_internal(url, title, NULL, ctx->rel,
ctx->relshp, &ctx->rel);
nsurl_unref(url);
- if (title1 != NULL)
+ if (title1 != NULL) {
dom_string_unref(title1);
+ }
ctx->relshp = TREE_REL_NEXT_SIBLING;
if (err != NSERROR_OK) {
@@ -631,7 +630,7 @@ nserror hotlist_load_directory_cb(dom_node *node, void *ctx)
error = dom_node_get_node_name(node, &name);
if (error != DOM_NO_ERR || name == NULL)
- return NSERROR_NOMEM;
+ return NSERROR_DOM;
if (dom_string_caseless_lwc_isequal(name, corestring_lwc_li)) {
/* Entry handling */
@@ -644,10 +643,9 @@ nserror hotlist_load_directory_cb(dom_node *node, void *ctx)
error = dom_node_get_text_content(node, &title);
if (error != DOM_NO_ERR || title == NULL) {
- warn_user("TreeLoadError", "(Empty <h4> "
- "or memory exhausted.)");
+ LOG(("Empty <h4> or memory exhausted."));
dom_string_unref(name);
- return NSERROR_NOMEM;
+ return NSERROR_DOM;
}
if (current_ctx->title != NULL)
-----------------------------------------------------------------------
Summary of changes:
amiga/file.c | 4 +-
desktop/download.c | 3 +-
desktop/hotlist.c | 72 ++++++++++++++++++------------------
gtk/scaffolding.c | 11 +++---
gtk/viewsource.c | 2 +-
riscos/save.c | 34 ++++++++++-------
riscos/save.h | 4 +-
riscos/window.c | 80 ++++++++++++++++++++--------------------
utils/url.c | 103 ----------------------------------------------------
utils/url.h | 10 -----
windows/download.c | 3 +-
11 files changed, 111 insertions(+), 215 deletions(-)
diff --git a/amiga/file.c b/amiga/file.c
index e74c5d0..2eda926 100644
--- a/amiga/file.c
+++ b/amiga/file.c
@@ -220,7 +220,9 @@ void ami_file_save_req(int type, struct gui_window_2 *gwin,
char *fname = AllocVecTags(1024, NULL);
char *initial_fname = NULL;
- if(object) url_nice(nsurl_access(hlcache_handle_get_url(object)), &initial_fname,
true);
+ if(object) {
+ nsurl_nice(hlcache_handle_get_url(object), &initial_fname, true);
+ }
if(AslRequestTags(savereq,
ASLFR_Window, gwin->win,
diff --git a/desktop/download.c b/desktop/download.c
index a124c89..6e2aad8 100644
--- a/desktop/download.c
+++ b/desktop/download.c
@@ -76,8 +76,9 @@ static char *download_default_filename(nsurl *url)
{
char *nice;
- if (url_nice(nsurl_access(url), &nice, false) == NSERROR_OK)
+ if (nsurl_nice(url, &nice, false) == NSERROR_OK) {
return nice;
+ }
return NULL;
}
diff --git a/desktop/hotlist.c b/desktop/hotlist.c
index f0eda84..a5b86b5 100644
--- a/desktop/hotlist.c
+++ b/desktop/hotlist.c
@@ -412,14 +412,18 @@ static nserror hotlist_tree_node_folder_cb(
return NSERROR_OK;
}
-static nserror hotlist_tree_node_entry_cb(
- struct treeview_node_msg msg, void *data)
+
+/**
+ * callback for hotlist treeview entry manipulation.
+ */
+static nserror
+hotlist_tree_node_entry_cb(struct treeview_node_msg msg, void *data)
{
struct hotlist_entry *e = data;
const char *old_text;
nsurl *old_url;
nsurl *url;
- nserror err;
+ nserror err = NSERROR_OK;
bool match;
switch (msg.msg) {
@@ -456,27 +460,24 @@ static nserror hotlist_tree_node_entry_cb(
msg.data.node_edit.text[0] != '\0') {
/* Requst to change the entry URL text */
err = nsurl_create(msg.data.node_edit.text, &url);
- if (err != NSERROR_OK)
- return err;
-
- old_url = e->url;
+ if (err == NSERROR_OK) {
+ old_url = e->url;
- e->url = url;
- e->data[HL_URL].value = nsurl_access(url);
- e->data[HL_URL].value_len = nsurl_length(e->url);
+ e->url = url;
+ e->data[HL_URL].value = nsurl_access(url);
+ e->data[HL_URL].value_len = nsurl_length(e->url);
- treeview_update_node_entry(hl_ctx.tree,
- e->entry, e->data, e);
- nsurl_unref(old_url);
+ treeview_update_node_entry(hl_ctx.tree,
+ e->entry, e->data, e);
+ nsurl_unref(old_url);
+ }
}
break;
case TREE_MSG_NODE_LAUNCH:
{
- nserror error;
struct browser_window *existing = NULL;
- enum browser_window_create_flags flags =
- BW_CREATE_HISTORY;
+ enum browser_window_create_flags flags = BW_CREATE_HISTORY;
/* TODO: Set existing to window that new tab appears in */
@@ -488,16 +489,14 @@ static nserror hotlist_tree_node_entry_cb(
/* TODO: flags ^= BW_CREATE_TAB; */
}
- error = browser_window_create(flags, e->url, NULL,
+ err = browser_window_create(flags, e->url, NULL,
existing, NULL);
- if (error != NSERROR_OK) {
- warn_user(messages_get_errorcode(error), 0);
- }
}
break;
}
- return NSERROR_OK;
+ return err;
}
+
struct treeview_callback_table hl_tree_cb_t = {
.folder = hotlist_tree_node_folder_cb,
.entry = hotlist_tree_node_entry_cb
@@ -517,8 +516,8 @@ typedef struct {
/**
* Parse an entry represented as a li.
*
- * \param li DOM node for parsed li
- * \param ctx Our hotlist loading context.
+ * \param li DOM node for parsed li
+ * \param ctx Our hotlist loading context.
* \return NSERROR_OK on success, or appropriate error otherwise
*/
static nserror hotlist_load_entry(dom_node *li, hotlist_load_ctx *ctx)
@@ -533,23 +532,23 @@ static nserror hotlist_load_entry(dom_node *li, hotlist_load_ctx
*ctx)
/* The li must contain an "a" element */
a = libdom_find_first_element(li, corestring_lwc_a);
if (a == NULL) {
- warn_user("TreeLoadError", "(Missing <a> in <li>)");
- return NSERROR_NOMEM;
+ LOG(("Missing <a> in <li>"));
+ return NSERROR_INVALID;
}
derror = dom_node_get_text_content(a, &title1);
if (derror != DOM_NO_ERR) {
- warn_user("TreeLoadError", "(No title)");
+ LOG(("No title"));
dom_node_unref(a);
- return NSERROR_NOMEM;
+ return NSERROR_INVALID;
}
derror = dom_element_get_attribute(a, corestring_dom_href, &url1);
if (derror != DOM_NO_ERR || url1 == NULL) {
- warn_user("TreeLoadError", "(No URL)");
+ LOG(("No URL"));
dom_string_unref(title1);
dom_node_unref(a);
- return NSERROR_NOMEM;
+ return NSERROR_INVALID;
}
dom_node_unref(a);
@@ -566,10 +565,9 @@ static nserror hotlist_load_entry(dom_node *li, hotlist_load_ctx
*ctx)
if (err != NSERROR_OK) {
LOG(("Failed normalising '%s'", dom_string_data(url1)));
- warn_user(messages_get_errorcode(err), NULL);
-
- if (title1 != NULL)
+ if (title1 != NULL) {
dom_string_unref(title1);
+ }
return err;
}
@@ -578,8 +576,9 @@ static nserror hotlist_load_entry(dom_node *li, hotlist_load_ctx
*ctx)
err = hotlist_add_entry_internal(url, title, NULL, ctx->rel,
ctx->relshp, &ctx->rel);
nsurl_unref(url);
- if (title1 != NULL)
+ if (title1 != NULL) {
dom_string_unref(title1);
+ }
ctx->relshp = TREE_REL_NEXT_SIBLING;
if (err != NSERROR_OK) {
@@ -631,7 +630,7 @@ nserror hotlist_load_directory_cb(dom_node *node, void *ctx)
error = dom_node_get_node_name(node, &name);
if (error != DOM_NO_ERR || name == NULL)
- return NSERROR_NOMEM;
+ return NSERROR_DOM;
if (dom_string_caseless_lwc_isequal(name, corestring_lwc_li)) {
/* Entry handling */
@@ -644,10 +643,9 @@ nserror hotlist_load_directory_cb(dom_node *node, void *ctx)
error = dom_node_get_text_content(node, &title);
if (error != DOM_NO_ERR || title == NULL) {
- warn_user("TreeLoadError", "(Empty <h4> "
- "or memory exhausted.)");
+ LOG(("Empty <h4> or memory exhausted."));
dom_string_unref(name);
- return NSERROR_NOMEM;
+ return NSERROR_DOM;
}
if (current_ctx->title != NULL)
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index 571ba93..6e9ec53 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -637,8 +637,8 @@ MULTIHANDLER(savepage)
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fc), filter);
gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(fc), filter);
- res = url_nice(nsurl_access(browser_window_get_url(
- nsgtk_get_browser_window(g->top_level))), &path, false);
+ res = nsurl_nice(browser_window_get_url(
+ nsgtk_get_browser_window(g->top_level)), &path, false);
if (res != NSERROR_OK) {
path = strdup(messages_get("SaveText"));
if (path == NULL) {
@@ -697,8 +697,7 @@ MULTIHANDLER(pdf)
LOG(("Print preview (generating PDF) started."));
- res = url_nice(nsurl_access(browser_window_get_url(bw)),
- &url_name, true);
+ res = nsurl_nice(browser_window_get_url(bw), &url_name, true);
if (res != NSERROR_OK) {
warn_user(messages_get_errorcode(res), 0);
return TRUE;
@@ -771,8 +770,8 @@ MULTIHANDLER(plaintext)
char *filename;
nserror res;
- res = url_nice(nsurl_access(browser_window_get_url(
- nsgtk_get_browser_window(g->top_level))),
+ res = nsurl_nice(browser_window_get_url(
+ nsgtk_get_browser_window(g->top_level)),
&filename, false);
if (res != NSERROR_OK) {
filename = strdup(messages_get("SaveText"));
diff --git a/gtk/viewsource.c b/gtk/viewsource.c
index 9c28f69..3c70beb 100644
--- a/gtk/viewsource.c
+++ b/gtk/viewsource.c
@@ -51,7 +51,7 @@ void nsgtk_viewsource(GtkWindow *parent, struct browser_window *bw)
source_data = content_get_source_data(hlcontent, &source_size);
- ret = url_nice(nsurl_access(browser_window_get_url(bw)), &filename, false);
+ ret = nsurl_nice(browser_window_get_url(bw), &filename, false);
if (ret != NSERROR_OK) {
filename = strdup(messages_get("SaveSource"));
if (filename == NULL) {
diff --git a/riscos/save.c b/riscos/save.c
index 1974d9c..bfde316 100644
--- a/riscos/save.c
+++ b/riscos/save.c
@@ -116,7 +116,7 @@ static void ro_gui_save_bounced(wimp_message *message);
static bool ro_gui_save_object_native(hlcache_handle *h, char *path);
static bool ro_gui_save_link(const char *url, const char *title, link_format format, char
*path);
static void ro_gui_save_set_state(hlcache_handle *h, gui_save_type save_type,
- const char *url, char *leaf_buf, size_t leaf_len,
+ const nsurl *url, char *leaf_buf, size_t leaf_len,
char *icon_buf, size_t icon_len);
static void ro_gui_save_drag_end(wimp_dragged *drag, void *data);
static bool ro_gui_save_create_thumbnail(hlcache_handle *h, const char *name);
@@ -254,7 +254,7 @@ void ro_gui_saveas_quit(void)
*/
void ro_gui_save_prepare(gui_save_type save_type, hlcache_handle *h,
- char *s, const char *url, const char *title)
+ char *s, const nsurl *url, const char *title)
{
char name_buf[FILENAME_MAX];
size_t leaf_offset = 0;
@@ -271,7 +271,11 @@ void ro_gui_save_prepare(gui_save_type save_type, hlcache_handle *h,
free(gui_save_selection);
gui_save_selection = s;
- gui_save_url = url;
+ if (url != NULL) {
+ gui_save_url = nsurl_access(url);
+ } else {
+ gui_save_url = NULL;
+ }
gui_save_title = title;
if (save_dir) {
@@ -280,8 +284,11 @@ void ro_gui_save_prepare(gui_save_type save_type, hlcache_handle *h,
name_buf[leaf_offset++] = '.';
}
- ro_gui_save_set_state(h, save_type,
- h ? nsurl_access(hlcache_handle_get_url(h)) : url,
+ if (h != NULL) {
+ url = hlcache_handle_get_url(h);
+ }
+
+ ro_gui_save_set_state(h, save_type, url,
name_buf + leaf_offset, FILENAME_MAX - leaf_offset,
icon_buf, sizeof(icon_buf));
@@ -386,7 +393,7 @@ void gui_drag_save_object(struct gui_window *g, hlcache_handle *c,
return;
}
- ro_gui_save_set_state(c, save_type, nsurl_access(hlcache_handle_get_url(c)),
+ ro_gui_save_set_state(c, save_type, hlcache_handle_get_url(c),
save_leafname, LEAFNAME_MAX,
icon_buf, sizeof(icon_buf));
@@ -454,7 +461,7 @@ void gui_drag_save_selection(struct gui_window *g, const char
*selection)
* \
*/
-void ro_gui_drag_save_link(gui_save_type save_type, const char *url,
+void ro_gui_drag_save_link(gui_save_type save_type, const nsurl *url,
const char *title, struct gui_window *g)
{
wimp_pointer pointer;
@@ -466,7 +473,7 @@ void ro_gui_drag_save_link(gui_save_type save_type, const char *url,
xwimp_create_menu(wimp_CLOSE_MENU, 0, 0);
ro_gui_dialog_close(dialog_saveas);
- gui_save_url = url;
+ gui_save_url = nsurl_access(url);
gui_save_title = title;
gui_save_sourcew = g->window;
saving_from_dialog = false;
@@ -479,8 +486,8 @@ void ro_gui_drag_save_link(gui_save_type save_type, const char *url,
return;
}
- ro_gui_save_set_state(NULL, save_type, url, save_leafname, LEAFNAME_MAX,
- icon_buf, sizeof(icon_buf));
+ ro_gui_save_set_state(NULL, save_type, url, save_leafname,
+ LEAFNAME_MAX, icon_buf, sizeof(icon_buf));
ro_mouse_drag_start(ro_gui_save_drag_end, NULL, NULL, NULL);
@@ -1215,7 +1222,7 @@ bool ro_gui_save_link(const char *url, const char *title,
link_format format,
*/
void ro_gui_save_set_state(hlcache_handle *h, gui_save_type save_type,
- const char *url, char *leaf_buf, size_t leaf_len,
+ const nsurl *url, char *leaf_buf, size_t leaf_len,
char *icon_buf, size_t icon_len)
{
/* filename */
@@ -1251,8 +1258,9 @@ void ro_gui_save_set_state(hlcache_handle *h, gui_save_type
save_type,
}
/* leafname */
- if (url && url_nice(url, &nice, nsoption_bool(strip_extensions)) ==
- NSERROR_OK) {
+ if ((url != NULL) &&
+ (nsurl_nice(url, &nice, nsoption_bool(strip_extensions)) ==
+ NSERROR_OK)) {
size_t i;
for (i = 0; nice[i]; i++) {
if (nice[i] == '.')
diff --git a/riscos/save.h b/riscos/save.h
index d3ca5c2..08bdc17 100644
--- a/riscos/save.h
+++ b/riscos/save.h
@@ -34,10 +34,10 @@ void gui_drag_save_selection(struct gui_window *g, const char
*selection);
wimp_w ro_gui_saveas_create(const char *template_name);
void ro_gui_saveas_quit(void);
void ro_gui_save_prepare(enum gui_save_type save_type, struct hlcache_handle *h,
- char *s, const char *url,
+ char *s, const nsurl *url,
const char *title);
void ro_gui_save_start_drag(wimp_pointer *pointer);
-void ro_gui_drag_save_link(enum gui_save_type save_type, const char *url,
+void ro_gui_drag_save_link(enum gui_save_type save_type, const nsurl *url,
const char *title, struct gui_window *g);
void ro_gui_drag_icon(int x, int y, const char *sprite);
void ro_gui_drag_box_cancel(void);
diff --git a/riscos/window.c b/riscos/window.c
index 6a62d56..4e07293 100644
--- a/riscos/window.c
+++ b/riscos/window.c
@@ -194,7 +194,7 @@ static hlcache_handle *current_menu_main = 0;
/** Object under menu, or 0 if no object. */
static hlcache_handle *current_menu_object = 0;
/** URL of link under menu, or 0 if no link. */
-static const char *current_menu_url = 0;
+static nsurl *current_menu_url = 0;
static float scale_snap_to[] = {0.10, 0.125, 0.25, 0.333, 0.5, 0.75,
1.0,
@@ -1284,7 +1284,10 @@ static bool gui_window_drag_start(struct gui_window *g,
gui_drag_type type,
static void gui_window_save_link(struct gui_window *g, const char *url,
const char *title)
{
- ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL, NULL, url, title);
+ nsurl *nurl;
+ nsurl_create(url, &nurl);
+ ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL, NULL, nurl, title);
+ nsurl_unref(nurl);
ro_gui_dialog_open_persistent(g->window, dialog_saveas, true);
}
@@ -2174,7 +2177,10 @@ bool ro_gui_window_menu_prepare(wimp_w w, wimp_i i, wimp_menu
*menu,
current_menu_main = NULL;
current_menu_object = NULL;
- current_menu_url = NULL;
+ if (current_menu_url != NULL) {
+ nsurl_unref(current_menu_url);
+ current_menu_url = NULL;
+ }
if (ro_gui_window_to_window_pos(g, pointer->pos.x,
pointer->pos.y, &pos)) {
@@ -2183,7 +2189,7 @@ bool ro_gui_window_menu_prepare(wimp_w w, wimp_i i, wimp_menu
*menu,
current_menu_main = cont.main;
current_menu_object = cont.object;
- current_menu_url = cont.link_url;
+ nsurl_create(cont.link_url, ¤t_menu_url);
}
}
@@ -2444,7 +2450,7 @@ void ro_gui_window_menu_warning(wimp_w w, wimp_i i, wimp_menu
*menu,
case BROWSER_OBJECT_INFO:
if (current_menu_object != NULL)
ro_gui_window_prepare_objectinfo(current_menu_object,
- current_menu_url);
+ nsurl_access(current_menu_url));
break;
case BROWSER_OBJECT_SAVE:
@@ -2463,45 +2469,45 @@ void ro_gui_window_menu_warning(wimp_w w, wimp_i i, wimp_menu
*menu,
case BROWSER_SAVE_URL_URI:
if (h != NULL)
ro_gui_save_prepare(GUI_SAVE_LINK_URI, NULL, NULL,
- nsurl_access(hlcache_handle_get_url(h)),
+ hlcache_handle_get_url(h),
content_get_title(h));
break;
case BROWSER_SAVE_URL_URL:
if (h != NULL)
ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL, NULL,
- nsurl_access(hlcache_handle_get_url(h)),
+ hlcache_handle_get_url(h),
content_get_title(h));
break;
case BROWSER_SAVE_URL_TEXT:
if (h != NULL)
ro_gui_save_prepare(GUI_SAVE_LINK_TEXT, NULL, NULL,
- nsurl_access(hlcache_handle_get_url(h)),
+ hlcache_handle_get_url(h),
content_get_title(h));
break;
case BROWSER_OBJECT_SAVE_URL_URI:
if (current_menu_object != NULL)
ro_gui_save_prepare(GUI_SAVE_LINK_URI, NULL, NULL,
- nsurl_access(hlcache_handle_get_url(
- current_menu_object)),
+ hlcache_handle_get_url(
+ current_menu_object),
content_get_title(current_menu_object));
break;
case BROWSER_OBJECT_SAVE_URL_URL:
if (current_menu_object != NULL)
ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL, NULL,
- nsurl_access(hlcache_handle_get_url(
- current_menu_object)),
+ hlcache_handle_get_url(
+ current_menu_object),
content_get_title(current_menu_object));
break;
case BROWSER_OBJECT_SAVE_URL_TEXT:
if (current_menu_object != NULL)
ro_gui_save_prepare(GUI_SAVE_LINK_TEXT, NULL, NULL,
- nsurl_access(hlcache_handle_get_url(
- current_menu_object)),
+ hlcache_handle_get_url(
+ current_menu_object),
content_get_title(current_menu_object));
break;
@@ -2759,7 +2765,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case BROWSER_OBJECT_INFO:
if (current_menu_object != NULL) {
ro_gui_window_prepare_objectinfo(current_menu_object,
- current_menu_url);
+ nsurl_access(current_menu_url));
ro_gui_dialog_open_persistent(g->window,
dialog_objinfo, false);
}
@@ -2799,33 +2805,25 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu
*menu,
case BROWSER_LINK_DOWNLOAD:
if (current_menu_url != NULL) {
- error = nsurl_create(current_menu_url, &url);
- if (error == NSERROR_OK) {
- error = browser_window_navigate(bw,
- url,
- browser_window_get_url(bw),
- BW_NAVIGATE_DOWNLOAD,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
+ error = browser_window_navigate(bw,
+ current_menu_url,
+ browser_window_get_url(bw),
+ BW_NAVIGATE_DOWNLOAD,
+ NULL,
+ NULL,
+ NULL);
}
break;
case BROWSER_LINK_NEW_WINDOW:
if (current_menu_url != NULL) {
- error = nsurl_create(current_menu_url, &url);
- if (error == NSERROR_OK) {
- error = browser_window_create(
- BW_CREATE_HISTORY |
- BW_CREATE_CLONE,
- url,
- browser_window_get_url(bw),
- bw,
- NULL);
- nsurl_unref(url);
- }
+ error = browser_window_create(
+ BW_CREATE_HISTORY |
+ BW_CREATE_CLONE,
+ url,
+ browser_window_get_url(bw),
+ bw,
+ NULL);
}
break;
@@ -3050,7 +3048,10 @@ void ro_gui_window_menu_close(wimp_w w, wimp_i i, wimp_menu *menu)
{
if (menu == ro_gui_browser_window_menu) {
current_menu_object = NULL;
- current_menu_url = NULL;
+ if (current_menu_url != NULL) {
+ nsurl_unref(current_menu_url);
+ current_menu_url = NULL;
+ }
} else if (menu == gui_form_select_menu) {
gui_form_select_control = NULL;
}
@@ -3579,8 +3580,7 @@ void ro_gui_window_toolbar_click(void *data,
save_type = GUI_SAVE_LINK_TEXT;
ro_gui_drag_save_link(save_type,
- nsurl_access(
- browser_window_get_url(g->bw)),
+ browser_window_get_url(g->bw),
browser_window_get_title(g->bw), g);
}
break;
diff --git a/utils/url.c b/utils/url.c
index e1903a8..92e956b 100644
--- a/utils/url.c
+++ b/utils/url.c
@@ -147,109 +147,6 @@ out_true:
/* exported interface documented in utils/url.h */
-nserror url_nice(const char *url, char **result,
- bool remove_extensions)
-{
- int m;
- regmatch_t match[10];
- regoff_t start, end;
- size_t i;
- char *dot;
-
- *result = 0;
-
- m = regexec(&url_re, url, 10, match, 0);
- if (m) {
- LOG(("url '%s' failed to match regex", url));
- return NSERROR_NOT_FOUND;
- }
-
- /* extract the last component of the path, if possible */
- if (match[URL_RE_PATH].rm_so == -1 || match[URL_RE_PATH].rm_so ==
- match[URL_RE_PATH].rm_eo)
- goto no_path; /* no path, or empty */
- for (end = match[URL_RE_PATH].rm_eo - 1;
- end != match[URL_RE_PATH].rm_so && url[end] == '/';
- end--)
- ;
- if (end == match[URL_RE_PATH].rm_so)
- goto no_path; /* path is a string of '/' */
- end++;
- for (start = end - 1;
- start != match[URL_RE_PATH].rm_so && url[start] != '/';
- start--)
- ;
- if (url[start] == '/')
- start++;
-
- if (!strncasecmp(url + start, "index.", 6) ||
- !strncasecmp(url + start, "default.", 8)) {
- /* try again */
- if (start == match[URL_RE_PATH].rm_so)
- goto no_path;
- for (end = start - 1;
- end != match[URL_RE_PATH].rm_so &&
- url[end] == '/';
- end--)
- ;
- if (end == match[URL_RE_PATH].rm_so)
- goto no_path;
- end++;
- for (start = end - 1;
- start != match[URL_RE_PATH].rm_so &&
- url[start] != '/';
- start--)
- ;
- if (url[start] == '/')
- start++;
- }
-
- *result = malloc(end - start + 1);
- if (!*result) {
- LOG(("malloc failed"));
- return NSERROR_NOMEM;
- }
- strncpy(*result, url + start, end - start);
- (*result)[end - start] = 0;
-
- if (remove_extensions) {
- dot = strchr(*result, '.');
- if (dot && dot != *result)
- *dot = 0;
- }
-
- return NSERROR_OK;
-
-no_path:
-
- /* otherwise, use the host name, with '.' replaced by '_' */
- if (match[URL_RE_AUTHORITY].rm_so != -1 &&
- match[URL_RE_AUTHORITY].rm_so !=
- match[URL_RE_AUTHORITY].rm_eo) {
- *result = malloc(match[URL_RE_AUTHORITY].rm_eo -
- match[URL_RE_AUTHORITY].rm_so + 1);
- if (!*result) {
- LOG(("malloc failed"));
- return NSERROR_NOMEM;
- }
- strncpy(*result, url + match[URL_RE_AUTHORITY].rm_so,
- match[URL_RE_AUTHORITY].rm_eo -
- match[URL_RE_AUTHORITY].rm_so);
- (*result)[match[URL_RE_AUTHORITY].rm_eo -
- match[URL_RE_AUTHORITY].rm_so] = 0;
-
- for (i = 0; (*result)[i]; i++)
- if ((*result)[i] == '.')
- (*result)[i] = '_';
-
- return NSERROR_OK;
- }
-
- return NSERROR_NOT_FOUND;
-}
-
-
-/* exported interface documented in utils/url.h */
nserror url_unescape(const char *str, char **result)
{
char *curlstr;
diff --git a/utils/url.h b/utils/url.h
index a2efbec..d05ac05 100644
--- a/utils/url.h
+++ b/utils/url.h
@@ -56,16 +56,6 @@ bool url_host_is_ip_address(const char *host);
/**
- * Attempt to find a nice filename for a URL.
- *
- * \param url an absolute URL
- * \param result pointer to pointer to buffer to hold filename
- * \param remove_extensions remove any extensions from the filename
- * \return NSERROR_OK on success
- */
-nserror url_nice(const char *url, char **result, bool remove_extensions);
-
-/**
* Escape a string suitable for inclusion in an URL.
*
* \param unescaped the unescaped string
diff --git a/windows/download.c b/windows/download.c
index 8d3cc44..463a836 100644
--- a/windows/download.c
+++ b/windows/download.c
@@ -71,8 +71,9 @@ gui_download_window_create(download_context *ctx, struct gui_window
*gui)
messages_get("UnknownSize") :
human_friendly_bytesize(total_size);
- if (url_nice(nsurl_access(url), &filename, false) != NSERROR_OK)
+ if (nsurl_nice(url, &filename, false) != NSERROR_OK) {
filename = strdup(messages_get("UnknownFile"));
+ }
if (filename == NULL) {
warn_user(messages_get("NoMemory"), 0);
free(w);
--
NetSurf Browser