mirror of
https://github.com/rkd77/elinks.git
synced 2025-05-18 00:48:57 -04:00
952, 954: Add ecmascript_detach_form_view stub
Anything that frees struct form_view must now call the new function ecmascript_detach_form_view. This function should then clear out any dangling pointers, but that has not yet been implemented.
This commit is contained in:
parent
bbadb99dd1
commit
759fbb1142
@ -214,6 +214,16 @@ ecmascript_eval_boolback(struct ecmascript_interpreter *interpreter,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ecmascript_detach_form_view(struct form_view *fv)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_ECMASCRIPT_SEE
|
||||||
|
see_detach_form_view(fv);
|
||||||
|
#else
|
||||||
|
spidermonkey_detach_form_view(fv);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void ecmascript_detach_form_state(struct form_state *fs)
|
void ecmascript_detach_form_state(struct form_state *fs)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_ECMASCRIPT_SEE
|
#ifdef CONFIG_ECMASCRIPT_SEE
|
||||||
@ -242,6 +252,8 @@ ecmascript_reset_state(struct view_state *vs)
|
|||||||
* ecmascript_obj pointers are also NULL. However, they might
|
* ecmascript_obj pointers are also NULL. However, they might
|
||||||
* be non-NULL if the ECMAScript objects have been lazily
|
* be non-NULL if the ECMAScript objects have been lazily
|
||||||
* created because of scripts running in sibling HTML frames. */
|
* created because of scripts running in sibling HTML frames. */
|
||||||
|
foreach (fv, vs->forms)
|
||||||
|
ecmascript_detach_form_view(fv);
|
||||||
for (i = 0; i < vs->form_info_len; i++)
|
for (i = 0; i < vs->form_info_len; i++)
|
||||||
ecmascript_detach_form_state(&vs->form_info[i]);
|
ecmascript_detach_form_state(&vs->form_info[i]);
|
||||||
|
|
||||||
@ -249,9 +261,6 @@ ecmascript_reset_state(struct view_state *vs)
|
|||||||
if (vs->ecmascript)
|
if (vs->ecmascript)
|
||||||
ecmascript_put_interpreter(vs->ecmascript);
|
ecmascript_put_interpreter(vs->ecmascript);
|
||||||
|
|
||||||
foreach (fv, vs->forms)
|
|
||||||
fv->ecmascript_obj = NULL;
|
|
||||||
|
|
||||||
vs->ecmascript = ecmascript_get_interpreter(vs);
|
vs->ecmascript = ecmascript_get_interpreter(vs);
|
||||||
if (!vs->ecmascript)
|
if (!vs->ecmascript)
|
||||||
vs->ecmascript_fragile = 1;
|
vs->ecmascript_fragile = 1;
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include "util/time.h"
|
#include "util/time.h"
|
||||||
|
|
||||||
struct form_state;
|
struct form_state;
|
||||||
|
struct form_view;
|
||||||
struct string;
|
struct string;
|
||||||
struct terminal;
|
struct terminal;
|
||||||
struct uri;
|
struct uri;
|
||||||
@ -71,6 +72,7 @@ void ecmascript_free_urls(struct module *module);
|
|||||||
struct ecmascript_interpreter *ecmascript_get_interpreter(struct view_state*vs);
|
struct ecmascript_interpreter *ecmascript_get_interpreter(struct view_state*vs);
|
||||||
void ecmascript_put_interpreter(struct ecmascript_interpreter *interpreter);
|
void ecmascript_put_interpreter(struct ecmascript_interpreter *interpreter);
|
||||||
|
|
||||||
|
void ecmascript_detach_form_view(struct form_view *fv);
|
||||||
void ecmascript_detach_form_state(struct form_state *fs);
|
void ecmascript_detach_form_state(struct form_state *fs);
|
||||||
void ecmascript_moved_form_state(struct form_state *fs);
|
void ecmascript_moved_form_state(struct form_state *fs);
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ struct string;
|
|||||||
void *see_get_interpreter(struct ecmascript_interpreter *interpreter);
|
void *see_get_interpreter(struct ecmascript_interpreter *interpreter);
|
||||||
void see_put_interpreter(struct ecmascript_interpreter *interpreter);
|
void see_put_interpreter(struct ecmascript_interpreter *interpreter);
|
||||||
|
|
||||||
|
#define see_detach_form_view(fv) ((fv)->ecmascript_obj = NULL)
|
||||||
#define see_detach_form_state(fs) ((fs)->ecmascript_obj = NULL)
|
#define see_detach_form_state(fs) ((fs)->ecmascript_obj = NULL)
|
||||||
#define see_moved_form_state(fs) ((void) (fs))
|
#define see_moved_form_state(fs) ((void) (fs))
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ struct string;
|
|||||||
void *spidermonkey_get_interpreter(struct ecmascript_interpreter *interpreter);
|
void *spidermonkey_get_interpreter(struct ecmascript_interpreter *interpreter);
|
||||||
void spidermonkey_put_interpreter(struct ecmascript_interpreter *interpreter);
|
void spidermonkey_put_interpreter(struct ecmascript_interpreter *interpreter);
|
||||||
|
|
||||||
|
#define spidermonkey_detach_form_view(fv) ((fv)->ecmascript_obj = NULL)
|
||||||
#define spidermonkey_detach_form_state(fs) ((fs)->ecmascript_obj = NULL)
|
#define spidermonkey_detach_form_state(fs) ((fs)->ecmascript_obj = NULL)
|
||||||
#define spidermonkey_moved_form_state(fs) ((void) (fs))
|
#define spidermonkey_moved_form_state(fs) ((void) (fs))
|
||||||
|
|
||||||
|
@ -347,6 +347,18 @@ done_form_state(struct form_state *fs)
|
|||||||
mem_free_if(fs->value);
|
mem_free_if(fs->value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Free @a fv and any data owned by it. This does not call
|
||||||
|
* del_from_list(fv), so the caller must usually do that first.
|
||||||
|
* @relates form_view */
|
||||||
|
void
|
||||||
|
done_form_view(struct form_view *fv)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_ECMASCRIPT
|
||||||
|
ecmascript_detach_form_view(fv);
|
||||||
|
#endif
|
||||||
|
mem_free(fv);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
get_current_state(struct session *ses)
|
get_current_state(struct session *ses)
|
||||||
{
|
{
|
||||||
|
@ -114,6 +114,7 @@ struct form_view *find_form_view(struct document_view *doc_view, struct form *fo
|
|||||||
struct form *find_form_by_form_view(struct document *document, struct form_view *fv);
|
struct form *find_form_by_form_view(struct document *document, struct form_view *fv);
|
||||||
|
|
||||||
void done_form_state(struct form_state *);
|
void done_form_state(struct form_state *);
|
||||||
|
void done_form_view(struct form_view *);
|
||||||
|
|
||||||
enum frame_event_status field_op(struct session *ses, struct document_view *doc_view, struct link *link, struct term_event *ev);
|
enum frame_event_status field_op(struct session *ses, struct document_view *doc_view, struct link *link, struct term_event *ev);
|
||||||
|
|
||||||
|
@ -45,14 +45,20 @@ init_vs(struct view_state *vs, struct uri *uri, int plain)
|
|||||||
void
|
void
|
||||||
destroy_vs(struct view_state *vs, int blast_ecmascript)
|
destroy_vs(struct view_state *vs, int blast_ecmascript)
|
||||||
{
|
{
|
||||||
|
struct form_view *fv, *next;
|
||||||
|
|
||||||
/* form_state contains a pointer to form_view, so it's safest
|
/* form_state contains a pointer to form_view, so it's safest
|
||||||
* to delete the form_state first. */
|
* to delete the form_state first. */
|
||||||
for (; vs->form_info_len > 0; vs->form_info_len--)
|
for (; vs->form_info_len > 0; vs->form_info_len--)
|
||||||
done_form_state(&vs->form_info[vs->form_info_len - 1]);
|
done_form_state(&vs->form_info[vs->form_info_len - 1]);
|
||||||
mem_free_set(&vs->form_info, NULL);
|
mem_free_set(&vs->form_info, NULL);
|
||||||
|
|
||||||
|
foreachsafe (fv, next, vs->forms) {
|
||||||
|
del_from_list(fv);
|
||||||
|
done_form_view(fv);
|
||||||
|
}
|
||||||
|
|
||||||
if (vs->uri) done_uri(vs->uri);
|
if (vs->uri) done_uri(vs->uri);
|
||||||
free_list(vs->forms);
|
|
||||||
#ifdef CONFIG_ECMASCRIPT
|
#ifdef CONFIG_ECMASCRIPT
|
||||||
if (blast_ecmascript && vs->ecmascript)
|
if (blast_ecmascript && vs->ecmascript)
|
||||||
ecmascript_put_interpreter(vs->ecmascript);
|
ecmascript_put_interpreter(vs->ecmascript);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user