diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2009-03-28 19:10:29 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2009-03-28 19:10:29 +0000 |
commit | 76755556e0d3ac715222061bd6d64a87ce2c2905 (patch) | |
tree | 984c1688e8acb04331241a5bef20227f5b29a570 /riscos/wimputils.h | |
parent | b180dd1a1198375765b30d0ddc3b773d432c5f99 (diff) | |
download | netsurf-76755556e0d3ac715222061bd6d64a87ce2c2905.tar.gz netsurf-76755556e0d3ac715222061bd6d64a87ce2c2905.tar.bz2 |
Aliasing fun. This is ugly.
svn path=/trunk/netsurf/; revision=6971
Diffstat (limited to 'riscos/wimputils.h')
-rw-r--r-- | riscos/wimputils.h | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/riscos/wimputils.h b/riscos/wimputils.h index 5a6349b9f..5225a720e 100644 --- a/riscos/wimputils.h +++ b/riscos/wimputils.h @@ -25,7 +25,7 @@ #include <oslib/wimp.h> -/* Magical union for working around strict aliasing +/* Magical union to permit aliasing of wimp_window_state and wimp_open * Do not use this directly. Use the macros, instead. */ typedef union window_open_state { wimp_window_state state; @@ -35,4 +35,31 @@ typedef union window_open_state { /* Convert a pointer to a wimp_window_state into a pointer to a wimp_open */ #define PTR_WIMP_OPEN(pstate) ((wimp_open *) (window_open_state *) (pstate)) +/* Similarly for wimp_message_list */ +typedef struct ns_wimp_message_list { + /* Nasty hack to ensure that we have at least one field in the struct */ + int first; + int rest[]; +} ns_wimp_message_list; + +typedef union message_list { + wimp_message_list wimp; + ns_wimp_message_list ns; +} message_list; + +#define PTR_WIMP_MESSAGE_LIST(l) ((wimp_message_list *) (message_list *) (l)) + +/* Also for VDU variable lists */ +typedef struct ns_os_vdu_var_list { + os_vdu_var first; + os_vdu_var rest[]; +} ns_os_vdu_var_list; + +typedef union vdu_var_list { + os_vdu_var_list os; + ns_os_vdu_var_list ns; +} vdu_var_list; + +#define PTR_OS_VDU_VAR_LIST(l) ((os_vdu_var_list *) (vdu_var_list *) (l)) + #endif |