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
This commit is contained in:
John Mark Bell 2009-07-01 12:05:51 +00:00
parent 7e01924ecf
commit a3e205bbd9
3 changed files with 25 additions and 6 deletions

View File

@ -64,7 +64,7 @@ void ro_uri_message_received(wimp_message *msg)
free(uri_requested); free(uri_requested);
} }
bool ro_uri_launch(char *uri) bool ro_uri_launch(const char *uri)
{ {
uri_h uri_handle; uri_h uri_handle;
wimp_t handle_task; wimp_t handle_task;
@ -84,19 +84,35 @@ bool ro_uri_launch(char *uri)
void ro_uri_bounce(wimp_message *msg) void ro_uri_bounce(wimp_message *msg)
{ {
uri_full_message_process *message = (uri_full_message_process *)msg; uri_full_message_process *message = (uri_full_message_process *)msg;
char uri_buf[512]; int size;
char *uri_buf;
os_error *e; os_error *e;
if ((message->flags & 1) == 0) if ((message->flags & 1) == 0)
return; 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) { if (e) {
LOG(("xuri_request_uri: %d: %s", e->errnum, e->errmess)); LOG(("xuri_request_uri: %d: %s", e->errnum, e->errmess));
return; 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); ro_url_load(uri_buf);
free(uri_buf);
return; return;
} }

View File

@ -24,7 +24,7 @@
#include "oslib/wimp.h" #include "oslib/wimp.h"
void ro_uri_message_received(wimp_message *message); void ro_uri_message_received(wimp_message *message);
bool ro_uri_launch(char *uri); bool ro_uri_launch(const char *uri);
void ro_uri_bounce(wimp_message *message); void ro_uri_bounce(wimp_message *message);
#endif #endif

View File

@ -131,8 +131,11 @@ void ro_url_broadcast(const char *url)
os_error *error; os_error *error;
int len = strlen(url) + 1; int len = strlen(url) + 1;
if (236 < len) /* If URL is too long, then forget ANT and try URI, instead */
len = 236; if (236 < len) {
ro_uri_launch(url);
return;
}
message.size = ((20+len+3) & ~3); message.size = ((20+len+3) & ~3);
message.your_ref = 0; message.your_ref = 0;