From a3e205bbd9cff0a189b3a5a03c676ace9c5ee8dd Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Wed, 1 Jul 2009 12:05:51 +0000 Subject: Constify ro_uri_launch() If the URL is too long to fit into a non-indirected ANT URLLoad message, then skip the ANT URLLoad broadcast and jump straight to using URI_Dispatch. We don't support indirected ANT URLLoad messages as their potential for memory leakage is too great. svn path=/trunk/netsurf/; revision=8233 --- riscos/uri.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'riscos/uri.c') diff --git a/riscos/uri.c b/riscos/uri.c index da6f951dc..44cac853b 100644 --- a/riscos/uri.c +++ b/riscos/uri.c @@ -64,7 +64,7 @@ void ro_uri_message_received(wimp_message *msg) free(uri_requested); } -bool ro_uri_launch(char *uri) +bool ro_uri_launch(const char *uri) { uri_h uri_handle; wimp_t handle_task; @@ -84,19 +84,35 @@ bool ro_uri_launch(char *uri) void ro_uri_bounce(wimp_message *msg) { uri_full_message_process *message = (uri_full_message_process *)msg; - char uri_buf[512]; + int size; + char *uri_buf; os_error *e; if ((message->flags & 1) == 0) return; - e = xuri_request_uri(0, uri_buf, sizeof uri_buf, message->handle, 0); + /* Get required buffer size */ + e = xuri_request_uri(0, NULL, 0, message->handle, &size); if (e) { LOG(("xuri_request_uri: %d: %s", e->errnum, e->errmess)); return; } + uri_buf = malloc(size); + if (uri_buf == NULL) + return; + + /* Get URI */ + e = xuri_request_uri(0, uri_buf, size, message->handle, 0); + if (e) { + LOG(("xuri_request_uri: %d: %s", e->errnum, e->errmess)); + free(uri_buf); + return; + } + ro_url_load(uri_buf); + free(uri_buf); + return; } -- cgit v1.2.3