diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2009-07-01 12:05:51 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2009-07-01 12:05:51 +0000 |
commit | a3e205bbd9cff0a189b3a5a03c676ace9c5ee8dd (patch) | |
tree | 20110482ce47d736f634c0dd6b97d16a469a31c6 /riscos/uri.c | |
parent | 7e01924ecf99f79283f0eea7c385db8bab9d9a90 (diff) | |
download | netsurf-a3e205bbd9cff0a189b3a5a03c676ace9c5ee8dd.tar.gz netsurf-a3e205bbd9cff0a189b3a5a03c676ace9c5ee8dd.tar.bz2 |
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
Diffstat (limited to 'riscos/uri.c')
-rw-r--r-- | riscos/uri.c | 22 |
1 files changed, 19 insertions, 3 deletions
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; } |