mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-12-23 12:36:51 +03:00
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:
parent
7e01924ecf
commit
a3e205bbd9
22
riscos/uri.c
22
riscos/uri.c
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user