More conversion to nsurl. (box->href, object params, imagemaps, (i)frames)
svn path=/trunk/netsurf/; revision=12933
This commit is contained in:
parent
b9a40d8e47
commit
898b01e721
|
@ -242,7 +242,8 @@ void browser_window_create_iframes(struct browser_window *bw,
|
|||
window = &(bw->iframes[index++]);
|
||||
if (cur->url) {
|
||||
/* fetch iframe's content */
|
||||
browser_window_go_unverifiable(window, cur->url,
|
||||
browser_window_go_unverifiable(window,
|
||||
nsurl_access(cur->url),
|
||||
nsurl_access(content_get_url(
|
||||
bw->current_content)),
|
||||
false, bw->current_content);
|
||||
|
@ -376,7 +377,7 @@ void browser_window_create_frameset(struct browser_window *bw,
|
|||
|
||||
if (frame->url) {
|
||||
browser_window_go_unverifiable(window,
|
||||
frame->url,
|
||||
nsurl_access(frame->url),
|
||||
nsurl_access(content_get_url(
|
||||
parent)),
|
||||
true,
|
||||
|
|
11
render/box.c
11
render/box.c
|
@ -86,6 +86,9 @@ static int box_talloc_destructor(struct box *b)
|
|||
css_select_results_destroy(b->styles);
|
||||
b->styles = NULL;
|
||||
}
|
||||
|
||||
if (b->href != NULL)
|
||||
nsurl_unref(b->href);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -96,7 +99,7 @@ static int box_talloc_destructor(struct box *b)
|
|||
* \param styles selection results for the box, or NULL
|
||||
* \param style computed style for the box (not copied), or 0
|
||||
* \param style_owned whether style is owned by this box
|
||||
* \param href href for the box (not copied), or 0
|
||||
* \param href href for the box (copied), or 0
|
||||
* \param target target for the box (not copied), or 0
|
||||
* \param title title for the box (not copied), or 0
|
||||
* \param id id for the box (not copied), or 0
|
||||
|
@ -108,7 +111,7 @@ static int box_talloc_destructor(struct box *b)
|
|||
*/
|
||||
|
||||
struct box * box_create(css_select_results *styles, css_computed_style *style,
|
||||
bool style_owned, const char *href, const char *target,
|
||||
bool style_owned, nsurl *href, const char *target,
|
||||
const char *title, char *id, void *context)
|
||||
{
|
||||
unsigned int i;
|
||||
|
@ -140,7 +143,7 @@ struct box * box_create(css_select_results *styles, css_computed_style *style,
|
|||
box->text = NULL;
|
||||
box->length = 0;
|
||||
box->space = 0;
|
||||
box->href = href;
|
||||
box->href = (href == NULL) ? NULL : nsurl_ref(href);
|
||||
box->target = target;
|
||||
box->title = title;
|
||||
box->columns = 1;
|
||||
|
@ -943,7 +946,7 @@ void box_dump(FILE *stream, struct box *box, unsigned int depth)
|
|||
if (box->style)
|
||||
nscss_dump_computed_style(stream, box->style);
|
||||
if (box->href)
|
||||
fprintf(stream, " -> '%s'", box->href);
|
||||
fprintf(stream, " -> '%s'", nsurl_access(box->href));
|
||||
if (box->target)
|
||||
fprintf(stream, " |%s|", box->target);
|
||||
if (box->title)
|
||||
|
|
12
render/box.h
12
render/box.h
|
@ -213,7 +213,7 @@ struct box {
|
|||
/** Width of space after current text (depends on font and size). */
|
||||
int space;
|
||||
|
||||
const char *href; /**< Link, or 0. */
|
||||
nsurl *href; /**< Link, or 0. */
|
||||
const char *target; /**< Link target, or 0. */
|
||||
const char *title; /**< Title, or 0. */
|
||||
|
||||
|
@ -284,11 +284,11 @@ struct column {
|
|||
|
||||
/** Parameters for <object> and similar elements. */
|
||||
struct object_params {
|
||||
char *data;
|
||||
nsurl *data;
|
||||
char *type;
|
||||
char *codetype;
|
||||
char *codebase;
|
||||
char *classid;
|
||||
nsurl *codebase;
|
||||
nsurl *classid;
|
||||
struct object_param *params;
|
||||
};
|
||||
|
||||
|
@ -312,7 +312,7 @@ extern const char *TARGET_BLANK;
|
|||
|
||||
void *box_style_alloc(void *ptr, size_t len, void *pw);
|
||||
struct box * box_create(css_select_results *styles, css_computed_style *style,
|
||||
bool style_owned, const char *href, const char *target,
|
||||
bool style_owned, nsurl *href, const char *target,
|
||||
const char *title, char *id, void *context);
|
||||
void box_add_child(struct box *parent, struct box *child);
|
||||
void box_insert_sibling(struct box *box, struct box *new_box);
|
||||
|
@ -331,7 +331,7 @@ struct box *box_pick_text_box(struct html_content *html,
|
|||
struct box *box_find_by_id(struct box *box, const char *id);
|
||||
bool box_visible(struct box *box);
|
||||
void box_dump(FILE *stream, struct box *box, unsigned int depth);
|
||||
bool box_extract_link(const char *rel, const char *base, char **result);
|
||||
bool box_extract_link(const char *rel, nsurl *base, nsurl **result);
|
||||
|
||||
bool box_handle_scrollbars(struct content *c, struct box *box,
|
||||
bool bottom, bool right);
|
||||
|
|
|
@ -70,7 +70,7 @@ struct box_construct_props {
|
|||
/** Style from which to inherit, or NULL if none */
|
||||
const css_computed_style *parent_style;
|
||||
/** Current link target, or NULL if none */
|
||||
const char *href;
|
||||
nsurl *href;
|
||||
/** Current frame target, or NULL if none */
|
||||
const char *target;
|
||||
/** Current title attribute, or NULL if none */
|
||||
|
@ -575,7 +575,7 @@ bool box_construct_element(struct box_construct_ctx *ctx,
|
|||
return false;
|
||||
|
||||
box = box_create(styles, styles->styles[CSS_PSEUDO_ELEMENT_NONE], false,
|
||||
props.href, props.target, props.title, id,
|
||||
props.href, props.target, props.title, id,
|
||||
ctx->content);
|
||||
if (box == NULL)
|
||||
return false;
|
||||
|
@ -1228,20 +1228,19 @@ bool box_pre(BOX_SPECIAL_PARAMS)
|
|||
bool box_a(BOX_SPECIAL_PARAMS)
|
||||
{
|
||||
bool ok;
|
||||
char *url;
|
||||
nsurl *url;
|
||||
xmlChar *s;
|
||||
|
||||
if ((s = xmlGetProp(n, (const xmlChar *) "href"))) {
|
||||
ok = box_extract_link((const char *) s,
|
||||
nsurl_access(content->base_url), &url);
|
||||
content->base_url, &url);
|
||||
xmlFree(s);
|
||||
if (!ok)
|
||||
return false;
|
||||
if (url) {
|
||||
box->href = talloc_strdup(content, url);
|
||||
free(url);
|
||||
if (!box->href)
|
||||
return false;
|
||||
if (box->href != NULL)
|
||||
nsurl_unref(box->href);
|
||||
box->href = url;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1284,7 +1283,8 @@ bool box_a(BOX_SPECIAL_PARAMS)
|
|||
bool box_image(BOX_SPECIAL_PARAMS)
|
||||
{
|
||||
bool ok;
|
||||
char *s, *url;
|
||||
char *s;
|
||||
nsurl *url;
|
||||
xmlChar *alt, *src;
|
||||
enum css_width_e wtype;
|
||||
enum css_height_e htype;
|
||||
|
@ -1318,17 +1318,16 @@ bool box_image(BOX_SPECIAL_PARAMS)
|
|||
/* get image URL */
|
||||
if (!(src = xmlGetProp(n, (const xmlChar *) "src")))
|
||||
return true;
|
||||
if (!box_extract_link((char *) src, nsurl_access(content->base_url),
|
||||
&url))
|
||||
if (!box_extract_link((char *) src, content->base_url, &url))
|
||||
return false;
|
||||
xmlFree(src);
|
||||
if (!url)
|
||||
return true;
|
||||
|
||||
/* start fetch */
|
||||
ok = html_fetch_object(content, url, box, image_types,
|
||||
ok = html_fetch_object(content, nsurl_access(url), box, image_types,
|
||||
content->base.available_width, 1000, false);
|
||||
free(url);
|
||||
nsurl_unref(url);
|
||||
|
||||
wtype = css_computed_width(box->style, &value, &wunit);
|
||||
htype = css_computed_height(box->style, &value, &hunit);
|
||||
|
@ -1377,17 +1376,13 @@ bool box_object(BOX_SPECIAL_PARAMS)
|
|||
/* codebase, classid, and data are URLs
|
||||
* (codebase is the base for the other two) */
|
||||
if ((codebase = xmlGetProp(n, (const xmlChar *) "codebase"))) {
|
||||
if (!box_extract_link((char *) codebase,
|
||||
nsurl_access(content->base_url),
|
||||
if (!box_extract_link((char *) codebase, content->base_url,
|
||||
¶ms->codebase))
|
||||
return false;
|
||||
xmlFree(codebase);
|
||||
}
|
||||
if (!params->codebase)
|
||||
params->codebase = strdup(nsurl_access(content->base_url));
|
||||
|
||||
if (!params->codebase)
|
||||
return false;
|
||||
params->codebase = nsurl_ref(content->base_url);
|
||||
|
||||
if ((classid = xmlGetProp(n, (const xmlChar *) "classid"))) {
|
||||
if (!box_extract_link((char *) classid, params->codebase,
|
||||
|
@ -1408,12 +1403,12 @@ bool box_object(BOX_SPECIAL_PARAMS)
|
|||
return true;
|
||||
|
||||
/* Don't include ourself */
|
||||
if (params->classid && strcmp(nsurl_access(content->base_url),
|
||||
params->classid) == 0)
|
||||
if (params->classid && nsurl_compare(content->base_url,
|
||||
params->classid, NSURL_COMPLETE))
|
||||
return true;
|
||||
|
||||
if (params->data && strcmp(nsurl_access(content->base_url),
|
||||
params->data) == 0)
|
||||
if (params->data && nsurl_compare(content->base_url,
|
||||
params->data, NSURL_COMPLETE))
|
||||
return true;
|
||||
|
||||
/* codetype and type are MIME types */
|
||||
|
@ -1506,7 +1501,8 @@ bool box_object(BOX_SPECIAL_PARAMS)
|
|||
|
||||
/* start fetch (MIME type is ok or not specified) */
|
||||
if (!html_fetch_object(content,
|
||||
params->data ? params->data : params->classid,
|
||||
params->data ? nsurl_access(params->data) :
|
||||
nsurl_access(params->classid),
|
||||
box, CONTENT_ANY, content->base.available_width, 1000,
|
||||
false))
|
||||
return false;
|
||||
|
@ -1551,7 +1547,8 @@ bool box_create_frameset(struct content_html_frames *f, xmlNode *n,
|
|||
html_content *content) {
|
||||
unsigned int row, col, index, i;
|
||||
unsigned int rows = 1, cols = 1;
|
||||
char *s, *url;
|
||||
char *s;
|
||||
nsurl *url;
|
||||
struct frame_dimension *row_height = 0, *col_width = 0;
|
||||
xmlNode *c;
|
||||
struct content_html_frames *frame;
|
||||
|
@ -1665,21 +1662,17 @@ bool box_create_frameset(struct content_html_frames *f, xmlNode *n,
|
|||
url = NULL;
|
||||
if ((s = (char *) xmlGetProp(c,
|
||||
(const xmlChar *) "src"))) {
|
||||
box_extract_link(s,
|
||||
nsurl_access(content->base_url),
|
||||
&url);
|
||||
box_extract_link(s, content->base_url, &url);
|
||||
xmlFree(s);
|
||||
}
|
||||
|
||||
/* copy url */
|
||||
if (url) {
|
||||
/* no self-references */
|
||||
if (strcmp(nsurl_access(content->base_url),
|
||||
url))
|
||||
frame->url = talloc_strdup(content,
|
||||
url);
|
||||
free(url);
|
||||
url = NULL;
|
||||
if (nsurl_compare(content->base_url, url,
|
||||
NSURL_COMPLETE))
|
||||
frame->url = url;
|
||||
url = NULL;
|
||||
}
|
||||
|
||||
/* fill in specified values */
|
||||
|
@ -1741,7 +1734,8 @@ bool box_create_frameset(struct content_html_frames *f, xmlNode *n,
|
|||
|
||||
bool box_iframe(BOX_SPECIAL_PARAMS)
|
||||
{
|
||||
char *url, *s;
|
||||
nsurl *url;
|
||||
char *s;
|
||||
struct content_html_iframe *iframe;
|
||||
int i;
|
||||
|
||||
|
@ -1760,7 +1754,7 @@ bool box_iframe(BOX_SPECIAL_PARAMS)
|
|||
if (!(s = (char *) xmlGetProp(n,
|
||||
(const xmlChar *) "src")))
|
||||
return true;
|
||||
if (!box_extract_link(s, nsurl_access(content->base_url), &url)) {
|
||||
if (!box_extract_link(s, content->base_url, &url)) {
|
||||
xmlFree(s);
|
||||
return false;
|
||||
}
|
||||
|
@ -1769,22 +1763,22 @@ bool box_iframe(BOX_SPECIAL_PARAMS)
|
|||
return true;
|
||||
|
||||
/* don't include ourself */
|
||||
if (strcmp(nsurl_access(content->base_url), url) == 0) {
|
||||
free(url);
|
||||
if (nsurl_compare(content->base_url, url, NSURL_COMPLETE)) {
|
||||
nsurl_unref(url);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* create a new iframe */
|
||||
iframe = talloc(content, struct content_html_iframe);
|
||||
if (!iframe) {
|
||||
free(url);
|
||||
nsurl_unref(url);
|
||||
return false;
|
||||
}
|
||||
iframe->box = box;
|
||||
iframe->margin_width = 0;
|
||||
iframe->margin_height = 0;
|
||||
iframe->name = NULL;
|
||||
iframe->url = talloc_strdup(content, url);
|
||||
iframe->url = url;
|
||||
iframe->scrolling = SCROLLING_AUTO;
|
||||
iframe->border = true;
|
||||
|
||||
|
@ -2315,15 +2309,14 @@ bool box_embed(BOX_SPECIAL_PARAMS)
|
|||
/* src is a URL */
|
||||
if (!(src = xmlGetProp(n, (const xmlChar *) "src")))
|
||||
return true;
|
||||
if (!box_extract_link((char *) src, nsurl_access(content->base_url),
|
||||
¶ms->data))
|
||||
if (!box_extract_link((char *) src, content->base_url, ¶ms->data))
|
||||
return false;
|
||||
xmlFree(src);
|
||||
if (!params->data)
|
||||
return true;
|
||||
|
||||
/* Don't include ourself */
|
||||
if (strcmp(nsurl_access(content->base_url), params->data) == 0)
|
||||
if (nsurl_compare(content->base_url, params->data, NSURL_COMPLETE))
|
||||
return true;
|
||||
|
||||
/* add attributes as parameters to linked list */
|
||||
|
@ -2353,8 +2346,9 @@ bool box_embed(BOX_SPECIAL_PARAMS)
|
|||
box->object_params = params;
|
||||
|
||||
/* start fetch */
|
||||
return html_fetch_object(content, params->data, box, CONTENT_ANY,
|
||||
content->base.available_width, 1000, false);
|
||||
return html_fetch_object(content, nsurl_access(params->data), box,
|
||||
CONTENT_ANY, content->base.available_width, 1000,
|
||||
false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2399,11 +2393,11 @@ bool box_get_attribute(xmlNode *n, const char *attribute,
|
|||
* \return true on success, false on memory exhaustion
|
||||
*/
|
||||
|
||||
bool box_extract_link(const char *rel, const char *base, char **result)
|
||||
bool box_extract_link(const char *rel, nsurl *base, nsurl **result)
|
||||
{
|
||||
char *s, *s1, *apos0 = 0, *apos1 = 0, *quot0 = 0, *quot1 = 0;
|
||||
unsigned int i, j, end;
|
||||
url_func_result res;
|
||||
nserror error;
|
||||
|
||||
s1 = s = malloc(3 * strlen(rel) + 1);
|
||||
if (!s)
|
||||
|
@ -2445,12 +2439,12 @@ bool box_extract_link(const char *rel, const char *base, char **result)
|
|||
}
|
||||
|
||||
/* construct absolute URL */
|
||||
res = url_join(s1, base, result);
|
||||
error = nsurl_join(base, s1, result);
|
||||
free(s);
|
||||
if (res == URL_FUNC_NOMEM)
|
||||
if (error != NSERROR_OK) {
|
||||
*result = NULL;
|
||||
return false;
|
||||
else if (res == URL_FUNC_FAILED)
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -2169,12 +2169,13 @@ void html_get_contextual_content(struct content *c,
|
|||
data->object = box->object;
|
||||
|
||||
if (box->href)
|
||||
data->link_url = box->href;
|
||||
data->link_url = nsurl_access(box->href);
|
||||
|
||||
if (box->usemap) {
|
||||
const char *target = NULL;
|
||||
data->link_url = imagemap_get(html, box->usemap,
|
||||
box_x, box_y, x, y, &target);
|
||||
data->link_url = nsurl_access(imagemap_get(html,
|
||||
box->usemap, box_x, box_y, x, y,
|
||||
&target));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -102,7 +102,7 @@ struct content_html_frames {
|
|||
int margin_height; /** frame margin height */
|
||||
|
||||
char *name; /** frame name (for targetting) */
|
||||
char *url; /** frame url */
|
||||
nsurl *url; /** frame url */
|
||||
|
||||
bool no_resize; /** frame is not resizable */
|
||||
frame_scrolling scrolling; /** scrolling characteristics */
|
||||
|
@ -120,7 +120,7 @@ struct content_html_iframe {
|
|||
int margin_height; /** frame margin height */
|
||||
|
||||
char *name; /** frame name (for targetting) */
|
||||
char *url; /** frame url */
|
||||
nsurl *url; /** frame url */
|
||||
|
||||
frame_scrolling scrolling; /** scrolling characteristics */
|
||||
bool border; /** frame has a border */
|
||||
|
|
|
@ -168,7 +168,7 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
|
|||
html_content *html = (html_content *) c;
|
||||
enum { ACTION_NONE, ACTION_SUBMIT, ACTION_GO } action = ACTION_NONE;
|
||||
const char *title = 0;
|
||||
const char *url = 0;
|
||||
nsurl *url = 0;
|
||||
const char *target = 0;
|
||||
char status_buffer[200];
|
||||
const char *status = 0;
|
||||
|
@ -543,22 +543,23 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
|
|||
} else if (url) {
|
||||
if (title) {
|
||||
snprintf(status_buffer, sizeof status_buffer, "%s: %s",
|
||||
url, title);
|
||||
nsurl_access(url), title);
|
||||
status = status_buffer;
|
||||
} else
|
||||
status = url;
|
||||
status = nsurl_access(url);
|
||||
|
||||
pointer = get_pointer_shape(bw, url_box, imagemap);
|
||||
|
||||
if (mouse & BROWSER_MOUSE_CLICK_1 &&
|
||||
mouse & BROWSER_MOUSE_MOD_1) {
|
||||
/* force download of link */
|
||||
browser_window_go_post(bw, url, 0, 0, false,
|
||||
nsurl_access(content_get_url(h)),
|
||||
browser_window_go_post(bw, nsurl_access(url), 0, 0,
|
||||
false, nsurl_access(content_get_url(h)),
|
||||
true, true, 0);
|
||||
} else if (mouse & BROWSER_MOUSE_CLICK_2 &&
|
||||
mouse & BROWSER_MOUSE_MOD_1) {
|
||||
gui_window_save_link(bw->window, url, title);
|
||||
gui_window_save_link(bw->window,
|
||||
nsurl_access(url), title);
|
||||
} else if (mouse & (BROWSER_MOUSE_CLICK_1 |
|
||||
BROWSER_MOUSE_CLICK_2))
|
||||
action = ACTION_GO;
|
||||
|
@ -690,7 +691,8 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
|
|||
break;
|
||||
case ACTION_GO:
|
||||
browser_window_go(browser_window_find_target(bw, target, mouse),
|
||||
url, nsurl_access(content_get_url(h)), true);
|
||||
nsurl_access(url),
|
||||
nsurl_access(content_get_url(h)), true);
|
||||
break;
|
||||
case ACTION_NONE:
|
||||
break;
|
||||
|
|
|
@ -43,7 +43,7 @@ typedef enum {
|
|||
|
||||
struct mapentry {
|
||||
imagemap_entry_type type; /**< type of shape */
|
||||
char *url; /**< absolute url to go to */
|
||||
nsurl *url; /**< absolute url to go to */
|
||||
char *target; /**< target frame (if any) */
|
||||
union {
|
||||
struct {
|
||||
|
@ -77,7 +77,7 @@ static bool imagemap_add(html_content *c, const char *key,
|
|||
static bool imagemap_create(html_content *c);
|
||||
static bool imagemap_extract_map(xmlNode *node, html_content *c,
|
||||
struct mapentry **entry);
|
||||
static bool imagemap_addtolist(xmlNode *n, const char *base_url,
|
||||
static bool imagemap_addtolist(xmlNode *n, nsurl *base_url,
|
||||
struct mapentry **entry);
|
||||
static void imagemap_freelist(struct mapentry *list);
|
||||
static unsigned int imagemap_hash(const char *key);
|
||||
|
@ -203,11 +203,12 @@ void imagemap_dump(html_content *c)
|
|||
for (entry = map->list; entry; entry = entry->next) {
|
||||
switch (entry->type) {
|
||||
case IMAGEMAP_DEFAULT:
|
||||
LOG(("\tDefault: %s", entry->url));
|
||||
LOG(("\tDefault: %s", nsurl_access(
|
||||
entry->url)));
|
||||
break;
|
||||
case IMAGEMAP_RECT:
|
||||
LOG(("\tRectangle: %s: [(%d,%d),(%d,%d)]",
|
||||
entry->url,
|
||||
nsurl_access(entry->url),
|
||||
entry->bounds.rect.x0,
|
||||
entry->bounds.rect.y0,
|
||||
entry->bounds.rect.x1,
|
||||
|
@ -215,13 +216,14 @@ void imagemap_dump(html_content *c)
|
|||
break;
|
||||
case IMAGEMAP_CIRCLE:
|
||||
LOG(("\tCircle: %s: [(%d,%d),%d]",
|
||||
entry->url,
|
||||
nsurl_access(entry->url),
|
||||
entry->bounds.circle.x,
|
||||
entry->bounds.circle.y,
|
||||
entry->bounds.circle.r));
|
||||
break;
|
||||
case IMAGEMAP_POLY:
|
||||
LOG(("\tPolygon: %s:", entry->url));
|
||||
LOG(("\tPolygon: %s:", nsurl_access(
|
||||
entry->url)));
|
||||
for (j = 0; j != entry->bounds.poly.num;
|
||||
j++) {
|
||||
fprintf(stderr, "(%d,%d) ",
|
||||
|
@ -316,7 +318,7 @@ bool imagemap_extract_map(xmlNode *node, html_content *c,
|
|||
*/
|
||||
if (strcmp((const char *) node->name, "area") == 0 ||
|
||||
strcmp((const char *) node->name, "a") == 0) {
|
||||
if (imagemap_addtolist(node, nsurl_access(c->base_url),
|
||||
if (imagemap_addtolist(node, c->base_url,
|
||||
entry) == false)
|
||||
return false;
|
||||
}
|
||||
|
@ -341,7 +343,7 @@ bool imagemap_extract_map(xmlNode *node, html_content *c,
|
|||
* \param entry Pointer to list of entries
|
||||
* \return false on memory exhaustion, true otherwise
|
||||
*/
|
||||
bool imagemap_addtolist(xmlNode *n, const char *base_url,
|
||||
bool imagemap_addtolist(xmlNode *n, nsurl *base_url,
|
||||
struct mapentry **entry)
|
||||
{
|
||||
char *shape, *coords = NULL, *href, *target = NULL;
|
||||
|
@ -447,7 +449,7 @@ bool imagemap_addtolist(xmlNode *n, const char *base_url,
|
|||
if (target) {
|
||||
new_map->target = strdup(target);
|
||||
if (new_map->target == NULL) {
|
||||
free(new_map->url);
|
||||
nsurl_unref(new_map->url);
|
||||
free(new_map);
|
||||
xmlFree(target);
|
||||
xmlFree(href);
|
||||
|
@ -529,7 +531,7 @@ bool imagemap_addtolist(xmlNode *n, const char *base_url,
|
|||
free(new_map->bounds.poly.ycoords);
|
||||
free(new_map->bounds.poly.xcoords);
|
||||
free(new_map->target);
|
||||
free(new_map->url);
|
||||
nsurl_unref(new_map->url);
|
||||
free(new_map);
|
||||
xmlFree(href);
|
||||
xmlFree(shape);
|
||||
|
@ -544,7 +546,7 @@ bool imagemap_addtolist(xmlNode *n, const char *base_url,
|
|||
free(new_map->bounds.poly.ycoords);
|
||||
free(new_map->bounds.poly.xcoords);
|
||||
free(new_map->target);
|
||||
free(new_map->url);
|
||||
nsurl_unref(new_map->url);
|
||||
free(new_map);
|
||||
xmlFree(href);
|
||||
xmlFree(shape);
|
||||
|
@ -606,7 +608,7 @@ void imagemap_freelist(struct mapentry *list)
|
|||
while (entry != NULL) {
|
||||
prev = entry;
|
||||
|
||||
free(entry->url);
|
||||
nsurl_unref(entry->url);
|
||||
|
||||
if (entry->target)
|
||||
free(entry->target);
|
||||
|
@ -633,7 +635,7 @@ void imagemap_freelist(struct mapentry *list)
|
|||
* \param target Pointer to location to receive target pointer (if any)
|
||||
* \return The url associated with this area, or NULL if not found
|
||||
*/
|
||||
const char *imagemap_get(struct html_content *c, const char *key,
|
||||
nsurl *imagemap_get(struct html_content *c, const char *key,
|
||||
unsigned long x, unsigned long y,
|
||||
unsigned long click_x, unsigned long click_y,
|
||||
const char **target)
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
|
||||
#include <libxml/HTMLtree.h>
|
||||
|
||||
#include "utils/nsurl.h"
|
||||
|
||||
struct html_content;
|
||||
struct hlcache_handle;
|
||||
|
||||
|
@ -28,7 +30,7 @@ void imagemap_destroy(struct html_content *c);
|
|||
void imagemap_dump(struct html_content *c);
|
||||
bool imagemap_extract(xmlNode *node, struct html_content *c);
|
||||
|
||||
const char *imagemap_get(struct html_content *c, const char *key,
|
||||
nsurl *imagemap_get(struct html_content *c, const char *key,
|
||||
unsigned long x, unsigned long y,
|
||||
unsigned long click_x, unsigned long click_y,
|
||||
const char **target);
|
||||
|
|
|
@ -839,6 +839,7 @@ nserror nsurl_create(const char const *url_s, nsurl **url)
|
|||
buff = malloc(length * 3 + 1);
|
||||
if (buff == NULL) {
|
||||
free(*url);
|
||||
*url = NULL;
|
||||
return NSERROR_NOMEM;
|
||||
}
|
||||
|
||||
|
@ -855,6 +856,7 @@ nserror nsurl_create(const char const *url_s, nsurl **url)
|
|||
|
||||
if (e != NSERROR_OK) {
|
||||
free(*url);
|
||||
*url = NULL;
|
||||
return NSERROR_NOMEM;
|
||||
}
|
||||
|
||||
|
@ -862,6 +864,7 @@ nserror nsurl_create(const char const *url_s, nsurl **url)
|
|||
if (nsurl_get(*url, NSURL_WITH_FRAGMENT, &((*url)->string),
|
||||
&((*url)->length)) != NSERROR_OK) {
|
||||
free(*url);
|
||||
*url = NULL;
|
||||
return NSERROR_NOMEM;
|
||||
}
|
||||
|
||||
|
@ -1392,6 +1395,7 @@ nserror nsurl_join(const nsurl *base, const char *rel, nsurl **joined)
|
|||
buff = malloc(length + 5);
|
||||
if (buff == NULL) {
|
||||
free(*joined);
|
||||
*joined = NULL;
|
||||
return NSERROR_NOMEM;
|
||||
}
|
||||
|
||||
|
@ -1501,6 +1505,7 @@ nserror nsurl_join(const nsurl *base, const char *rel, nsurl **joined)
|
|||
|
||||
if (error != NSERROR_OK) {
|
||||
free(*joined);
|
||||
*joined = NULL;
|
||||
return NSERROR_NOMEM;
|
||||
}
|
||||
|
||||
|
@ -1508,6 +1513,7 @@ nserror nsurl_join(const nsurl *base, const char *rel, nsurl **joined)
|
|||
if (nsurl_get(*joined, NSURL_WITH_FRAGMENT, &((*joined)->string),
|
||||
&((*joined)->length)) != NSERROR_OK) {
|
||||
free(*joined);
|
||||
*joined = NULL;
|
||||
return NSERROR_NOMEM;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue