From b1ed656aa179b0d4c8a385d9cde93d326d835302 Mon Sep 17 00:00:00 2001 From: Dan Gudmundsson Date: Wed, 16 Jan 2013 09:38:14 +0100 Subject: wx: Removed wx internal event Should never have been generated in the first place, have been removed from the generator already but I forgot to remove remove the generated file. --- lib/wx/src/gen/wxNcPaintEvent.erl | 64 --------------------------------------- 1 file changed, 64 deletions(-) delete mode 100644 lib/wx/src/gen/wxNcPaintEvent.erl (limited to 'lib/wx') diff --git a/lib/wx/src/gen/wxNcPaintEvent.erl b/lib/wx/src/gen/wxNcPaintEvent.erl deleted file mode 100644 index 4dd292a0be..0000000000 --- a/lib/wx/src/gen/wxNcPaintEvent.erl +++ /dev/null @@ -1,64 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2008-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% This file is generated DO NOT EDIT - -%% @doc See external documentation: wxNcPaintEvent. -%%
Use {@link wxEvtHandler:connect/3.} with EventType:
-%%
nc_paint
-%% See also the message variant {@link wxEvtHandler:wxNcPaint(). #wxNcPaint{}} event record type. -%% -%%

This class is derived (and can use functions) from: -%%
{@link wxEvent} -%%

-%% @type wxNcPaintEvent(). An object reference, The representation is internal -%% and can be changed without notice. It can't be used for comparsion -%% stored on disc or distributed for use on other nodes. - --module(wxNcPaintEvent). --include("wxe.hrl"). --export([]). - -%% inherited exports --export([getId/1,getSkipped/1,getTimestamp/1,isCommandEvent/1,parent_class/1, - resumePropagation/2,shouldPropagate/1,skip/1,skip/2,stopPropagation/1]). - --export_type([wxNcPaintEvent/0]). -%% @hidden -parent_class(wxEvent) -> true; -parent_class(_Class) -> erlang:error({badtype, ?MODULE}). - --type wxNcPaintEvent() :: wx:wx_object(). - %% From wxEvent -%% @hidden -stopPropagation(This) -> wxEvent:stopPropagation(This). -%% @hidden -skip(This, Options) -> wxEvent:skip(This, Options). -%% @hidden -skip(This) -> wxEvent:skip(This). -%% @hidden -shouldPropagate(This) -> wxEvent:shouldPropagate(This). -%% @hidden -resumePropagation(This,PropagationLevel) -> wxEvent:resumePropagation(This,PropagationLevel). -%% @hidden -isCommandEvent(This) -> wxEvent:isCommandEvent(This). -%% @hidden -getTimestamp(This) -> wxEvent:getTimestamp(This). -%% @hidden -getSkipped(This) -> wxEvent:getSkipped(This). -%% @hidden -getId(This) -> wxEvent:getId(This). -- cgit v1.2.3 From 086e369ee6a480a9de64bfc9c51430622ef9b2b6 Mon Sep 17 00:00:00 2001 From: Dan Gudmundsson Date: Wed, 16 Jan 2013 16:45:01 +0100 Subject: wx: Remove deprecated driver_send_term usage --- lib/wx/api_gen/wx_extra/wxListCtrl.c_src | 4 ++-- lib/wx/api_gen/wx_gen_cpp.erl | 6 +++--- lib/wx/c_src/gen/wxe_derived_dest.h | 4 ++-- lib/wx/c_src/gen/wxe_events.cpp | 6 +++--- lib/wx/c_src/wxePrintout.cpp | 6 +++--- lib/wx/c_src/wxe_driver.c | 22 +++++++++++++--------- lib/wx/c_src/wxe_driver.h | 10 ++++++---- lib/wx/c_src/wxe_events.h | 6 +++--- lib/wx/c_src/wxe_gl.cpp | 6 +++--- lib/wx/c_src/wxe_impl.cpp | 20 ++++++++++---------- lib/wx/c_src/wxe_impl.h | 24 ++++++++++++------------ lib/wx/c_src/wxe_return.cpp | 10 +++++----- lib/wx/c_src/wxe_return.h | 10 +++++----- 13 files changed, 70 insertions(+), 64 deletions(-) (limited to 'lib/wx') diff --git a/lib/wx/api_gen/wx_extra/wxListCtrl.c_src b/lib/wx/api_gen/wx_extra/wxListCtrl.c_src index 54d6fafd01..8fa31e512e 100644 --- a/lib/wx/api_gen/wx_extra/wxListCtrl.c_src +++ b/lib/wx/api_gen/wx_extra/wxListCtrl.c_src @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2011. All Rights Reserved. +%% Copyright Ericsson AB 2011-2013. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -27,7 +27,7 @@ class EwxListCtrl : public wxListCtrl { int onGetItemText; int onGetItemAttr; int onGetItemColumnImage; - ErlDrvPort port; + ErlDrvTermData port; private: virtual wxString OnGetItemText(long item, long col) const; diff --git a/lib/wx/api_gen/wx_gen_cpp.erl b/lib/wx/api_gen/wx_gen_cpp.erl index 293c97507e..f00fc0c720 100644 --- a/lib/wx/api_gen/wx_gen_cpp.erl +++ b/lib/wx/api_gen/wx_gen_cpp.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2008-2012. All Rights Reserved. +%% Copyright Ericsson AB 2008-2013. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -1210,7 +1210,7 @@ encode_events(Evs) -> " WxeApp * app = (WxeApp *) wxTheApp;~n" " return app->getRef(ptr,memenv);~n" "}~n~n"), - w("bool sendevent(wxEvent *event, ErlDrvPort port)~n{~n" + w("bool sendevent(wxEvent *event, ErlDrvTermData port)~n{~n" " int send_res ;~n" " char * evClass = NULL;~n" " wxMBConvUTF32 UTFconverter;~n" @@ -1239,7 +1239,7 @@ encode_events(Evs) -> w(" rt.addTupleCount(3);~n"), w(" pre_callback();~n"), w(" send_res = rt.send();~n"), - w(" if(send_res) handle_event_callback(port, cb->listener);~n"), + w(" if(send_res) handle_event_callback(WXE_DRV_PORT_HANDLE, cb->listener);~n"), w(" app->clearPtr((void *) event);~n"), w(" } else {~n"), w(" send_res = rt.send();~n"), diff --git a/lib/wx/c_src/gen/wxe_derived_dest.h b/lib/wx/c_src/gen/wxe_derived_dest.h index 5fdce27d4b..8dcaf1c1ac 100644 --- a/lib/wx/c_src/gen/wxe_derived_dest.h +++ b/lib/wx/c_src/gen/wxe_derived_dest.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2008-2012. All Rights Reserved. + * Copyright Ericsson AB 2008-2013. All Rights Reserved. * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in @@ -391,7 +391,7 @@ class EwxListCtrl : public wxListCtrl { int onGetItemText; int onGetItemAttr; int onGetItemColumnImage; - ErlDrvPort port; + ErlDrvTermData port; private: virtual wxString OnGetItemText(long item, long col) const; diff --git a/lib/wx/c_src/gen/wxe_events.cpp b/lib/wx/c_src/gen/wxe_events.cpp index 7a3233a410..c9cdee3160 100644 --- a/lib/wx/c_src/gen/wxe_events.cpp +++ b/lib/wx/c_src/gen/wxe_events.cpp @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2008-2012. All Rights Reserved. + * Copyright Ericsson AB 2008-2013. All Rights Reserved. * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in @@ -328,7 +328,7 @@ int getRef(void* ptr, wxeMemEnv* memenv) return app->getRef(ptr,memenv); } -bool sendevent(wxEvent *event, ErlDrvPort port) +bool sendevent(wxEvent *event, ErlDrvTermData port) { int send_res ; char * evClass = NULL; @@ -815,7 +815,7 @@ case 226: {// wxTaskBarIconEvent rt.addTupleCount(3); pre_callback(); send_res = rt.send(); - if(send_res) handle_event_callback(port, cb->listener); + if(send_res) handle_event_callback(WXE_DRV_PORT_HANDLE, cb->listener); app->clearPtr((void *) event); } else { send_res = rt.send(); diff --git a/lib/wx/c_src/wxePrintout.cpp b/lib/wx/c_src/wxePrintout.cpp index 90959df379..fc8782ba95 100644 --- a/lib/wx/c_src/wxePrintout.cpp +++ b/lib/wx/c_src/wxePrintout.cpp @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2008-2011. All Rights Reserved. + * Copyright Ericsson AB 2008-2013. All Rights Reserved. * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in @@ -38,7 +38,7 @@ rt.addAtom("_wx_invoke_cb_"); \ rt.addTupleCount(3); \ rt.send(); \ - handle_event_callback(port, memenv->owner); \ + handle_event_callback(WXE_DRV_PORT_HANDLE, memenv->owner); \ } #define INVOKE_CALLBACK(port, callback, class_str) \ @@ -230,7 +230,7 @@ EwxListCtrl::~EwxListCtrl() { } // tools -void clear_cb(ErlDrvPort port, int callback) +void clear_cb(ErlDrvTermData port, int callback) { if(callback > 0) { wxeMemEnv * memenv = ((WxeApp *) wxTheApp)->getMemEnv(port); diff --git a/lib/wx/c_src/wxe_driver.c b/lib/wx/c_src/wxe_driver.c index d1ed252ec0..4d3aa577bf 100644 --- a/lib/wx/c_src/wxe_driver.c +++ b/lib/wx/c_src/wxe_driver.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2008-2011. All Rights Reserved. + * Copyright Ericsson AB 2008-2013. All Rights Reserved. * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in @@ -100,7 +100,8 @@ int wxe_driver_load() return -1; } -ErlDrvPort WXE_DRV_PORT = 0; +ErlDrvPort WXE_DRV_PORT_HANDLE = 0; +ErlDrvTermData WXE_DRV_PORT = 0; static ErlDrvData wxe_driver_start(ErlDrvPort port, char *buff) @@ -114,17 +115,20 @@ wxe_driver_start(ErlDrvPort port, char *buff) fprintf(stderr, " Couldn't alloc mem\r\n"); return(ERL_DRV_ERROR_GENERAL); /* ENOMEM */ } else { + ErlDrvTermData term_port = driver_mk_port(port); set_port_control_flags(port, PORT_CONTROL_FLAG_BINARY); data->driver_data = NULL; data->bin = NULL; - data->port = port; + data->port_handle = port; + data->port = term_port; data->pdl = driver_pdl_create(port); - if(WXE_DRV_PORT == 0) { + if(WXE_DRV_PORT_HANDLE == 0) { for(; *buff != 32; buff++); buff++; erl_wx_privdir = strdup(buff); - WXE_DRV_PORT = port; + WXE_DRV_PORT_HANDLE = port; + WXE_DRV_PORT = term_port; wxe_master = data; if(!(start_native_gui(data) == 1)) return(ERL_DRV_ERROR_GENERAL); /* ENOMEM */ @@ -139,7 +143,7 @@ static void wxe_driver_stop(ErlDrvData handle) { wxe_data *sd = ((wxe_data *)handle); - if(sd->port != WXE_DRV_PORT) { + if(sd->port_handle != WXE_DRV_PORT_HANDLE) { // fprintf(stderr, "%s:%d: STOP \r\n", __FILE__,__LINE__); meta_command(DELETE_PORT,sd); free(handle); @@ -194,7 +198,7 @@ void wxe_process_died(ErlDrvData handle, ErlDrvMonitor *monitor) push_command(WXE_CB_RETURN,NULL,0,sd); /* ErlDrvTermData pid; */ -/* pid = driver_get_monitored_process(sd->port, monitor); */ +/* pid = driver_get_monitored_process(sd->port_handle, monitor); */ /* fprintf(stderr, "Process died %d \r\n", (int) pid); */ } @@ -210,7 +214,7 @@ standard_outputv(ErlDrvData drv_data, ErlIOVec* ev) binref = driver_alloc(sizeof(WXEBinRef)); binref->base = ev->iov[1].iov_base; binref->size = ev->iov[1].iov_len; - binref->from = driver_caller(sd->port); + binref->from = driver_caller(sd->port_handle); bin = ev->binv[1]; driver_binary_inc_refc(bin); /* Otherwise it could get deallocated */ binref->bin = bin; @@ -220,7 +224,7 @@ standard_outputv(ErlDrvData drv_data, ErlIOVec* ev) binref = driver_alloc(sizeof(WXEBinRef)); binref->base = NULL; binref->size = 0; - binref->from = driver_caller(sd->port); + binref->from = driver_caller(sd->port_handle); binref->bin = NULL; binref->next = sd->bin; sd->bin = binref; diff --git a/lib/wx/c_src/wxe_driver.h b/lib/wx/c_src/wxe_driver.h index 5c5b8614ed..c765c866c2 100644 --- a/lib/wx/c_src/wxe_driver.h +++ b/lib/wx/c_src/wxe_driver.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2008-2010. All Rights Reserved. + * Copyright Ericsson AB 2008-2013. All Rights Reserved. * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in @@ -43,7 +43,8 @@ typedef struct wxe_bin_ref { typedef struct wxe_data_def { void * driver_data; WXEBinRef * bin; /* Argument binaries */ - ErlDrvPort port; + ErlDrvPort port_handle; + ErlDrvTermData port; int is_cbport; ErlDrvPDL pdl; } wxe_data; @@ -67,8 +68,9 @@ void meta_command(int what, wxe_data *sd); void * wxe_ps_init(); -extern ErlDrvPort WXE_DRV_PORT; -extern int wxe_debug; +extern ErlDrvPort WXE_DRV_PORT_HANDLE; +extern ErlDrvTermData WXE_DRV_PORT; +extern int wxe_debug; extern char * erl_wx_privdir; diff --git a/lib/wx/c_src/wxe_events.h b/lib/wx/c_src/wxe_events.h index 43ea656a8d..6bbb0dfa13 100644 --- a/lib/wx/c_src/wxe_events.h +++ b/lib/wx/c_src/wxe_events.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2008-2009. All Rights Reserved. + * Copyright Ericsson AB 2008-2013. All Rights Reserved. * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in @@ -54,7 +54,7 @@ public: class wxeEvtListener : public wxEvtHandler { public: - wxeEvtListener(ErlDrvPort Thisport) : port(Thisport) + wxeEvtListener(ErlDrvTermData Thisport) : port(Thisport) {} // {fprintf(stderr, "Creating %x\r\n", (unsigned int) this); fflush(stderr);} void forward(wxEvent& event); @@ -62,7 +62,7 @@ public: ((WxeApp *)wxTheApp)->clearPtr(this); // fprintf(stderr, "Deleteing %x\r\n", (unsigned int) this); fflush(stderr); }; - ErlDrvPort port; + ErlDrvTermData port; }; #endif diff --git a/lib/wx/c_src/wxe_gl.cpp b/lib/wx/c_src/wxe_gl.cpp index e947a1bc6e..34904397d3 100644 --- a/lib/wx/c_src/wxe_gl.cpp +++ b/lib/wx/c_src/wxe_gl.cpp @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2008-2010. All Rights Reserved. + * Copyright Ericsson AB 2008-2013. All Rights Reserved. * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in @@ -141,7 +141,7 @@ void gl_dispatch(int op, char *bp,ErlDrvTermData caller,WXEBinRef *bins[]){ ERL_DRV_INT, op, ERL_DRV_ATOM, driver_mk_atom((char *) "no_gl_context"), ERL_DRV_TUPLE,3}; - driver_send_term(WXE_DRV_PORT,caller,rt,8); + erl_drv_send_term(WXE_DRV_PORT,caller,rt,8); return ; } }; @@ -155,6 +155,6 @@ void gl_dispatch(int op, char *bp,ErlDrvTermData caller,WXEBinRef *bins[]){ else bs[i] = NULL; } - wxe_gl_dispatch(op, bp, WXE_DRV_PORT, caller, bs, bs_sz); + wxe_gl_dispatch(op, bp, WXE_DRV_PORT_HANDLE, caller, bs, bs_sz); } diff --git a/lib/wx/c_src/wxe_impl.cpp b/lib/wx/c_src/wxe_impl.cpp index 527fabc315..adfee8da73 100644 --- a/lib/wx/c_src/wxe_impl.cpp +++ b/lib/wx/c_src/wxe_impl.cpp @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2008-2012. All Rights Reserved. + * Copyright Ericsson AB 2008-2013. All Rights Reserved. * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in @@ -117,7 +117,7 @@ int start_native_gui(wxe_data *sd) wxe_batch_locker_m = erl_drv_mutex_create((char *)"wxe_batch_locker_m"); wxe_batch_locker_c = erl_drv_cond_create((char *)"wxe_batch_locker_c"); - init_caller = driver_connected(sd->port); + init_caller = driver_connected(sd->port_handle); #ifdef __DARWIN__ res = erl_drv_steal_main_thread((char *)"wxwidgets", @@ -169,7 +169,7 @@ void unload_native_gui() void push_command(int op,char * buf,int len, wxe_data *sd) { - // fprintf(stderr, "Op %d %d\r\n", op, (int) driver_caller(sd->port)),fflush(stderr); + // fprintf(stderr, "Op %d %d\r\n", op, (int) driver_caller(sd->port_handle)),fflush(stderr); wxeCommand *Cmd = new wxeCommand(op, buf, len, sd); erl_drv_mutex_lock(wxe_batch_locker_m); wxe_batch->Append(Cmd); @@ -536,18 +536,18 @@ void WxeApp::newMemEnv(wxeMetaCommand& Ecmd) { memenv->ref2ptr[i] = global_me->ref2ptr[i]; } memenv->next = global_me->next; - refmap[(ErlDrvTermData) Ecmd.port] = memenv; + refmap[Ecmd.port] = memenv; memenv->owner = Ecmd.caller; ErlDrvTermData rt[] = {ERL_DRV_ATOM, driver_mk_atom((char *)"wx_port_initiated")}; - driver_send_term(WXE_DRV_PORT,Ecmd.caller,rt,2); + erl_drv_send_term(WXE_DRV_PORT,Ecmd.caller,rt,2); } void WxeApp::destroyMemEnv(wxeMetaCommand& Ecmd) { // Clear incoming cmd queue first // dispatch_cmds(); wxWindow *parent = NULL; - wxeMemEnv * memenv = refmap[(ErlDrvTermData) Ecmd.port]; + wxeMemEnv * memenv = refmap[Ecmd.port]; if(wxe_debug) { wxString msg; @@ -656,8 +656,8 @@ void WxeApp::destroyMemEnv(wxeMetaCommand& Ecmd) { refmap.erase((ErlDrvTermData) Ecmd.port); } -wxeMemEnv * WxeApp::getMemEnv(ErlDrvPort port) { - return refmap[(ErlDrvTermData) port]; +wxeMemEnv * WxeApp::getMemEnv(ErlDrvTermData port) { + return refmap[port]; } int WxeApp::newPtr(void * ptr, int type, wxeMemEnv *memenv) { @@ -837,7 +837,7 @@ wxeCommand::wxeCommand(int fc,char * cbuf,int buflen, wxe_data *sd) { WXEBinRef *temp, *start, *prev; int n = 0; - caller = driver_caller(sd->port); + caller = driver_caller(sd->port_handle); port = sd->port; op = fc; len = buflen; @@ -940,7 +940,7 @@ int wxCALLBACK wxEListCtrlCompare(long item1, long item2, long callbackInfoPtr) rt.addAtom("_wx_invoke_cb_"); rt.addTupleCount(3); rt.send(); - handle_event_callback(cb->port, memenv->owner); + handle_event_callback(WXE_DRV_PORT_HANDLE, memenv->owner); if(((WxeApp *) wxTheApp)->cb_buff) { int res = * (int*) ((WxeApp *) wxTheApp)->cb_buff; diff --git a/lib/wx/c_src/wxe_impl.h b/lib/wx/c_src/wxe_impl.h index ee31068d5d..a3c57e2598 100644 --- a/lib/wx/c_src/wxe_impl.h +++ b/lib/wx/c_src/wxe_impl.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2008-2011. All Rights Reserved. + * Copyright Ericsson AB 2008-2013. All Rights Reserved. * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in @@ -34,7 +34,7 @@ class wxeMetaCommand : public wxEvent public: wxeMetaCommand(wxe_data *sd, int EvId) : wxEvent(EvId, wxeEVT_META_COMMAND) - { caller = driver_caller(sd->port); port = sd->port; pdl = sd->pdl; } ; + { caller = driver_caller(sd->port_handle); port = sd->port; pdl = sd->pdl; } ; wxeMetaCommand(const wxeMetaCommand& event) : wxEvent(event) { caller = event.caller; port = event.port; pdl = event.pdl; }; @@ -42,7 +42,7 @@ class wxeMetaCommand : public wxEvent virtual wxEvent *Clone() const { return new wxeMetaCommand(*this); } ErlDrvTermData caller; - ErlDrvPort port; + ErlDrvTermData port; ErlDrvPDL pdl; }; @@ -51,9 +51,9 @@ class wxeCommand : public wxObject public: wxeCommand(int fc,char * cbuf,int buflen, wxe_data *); virtual ~wxeCommand(); - + ErlDrvTermData caller; - ErlDrvPort port; + ErlDrvTermData port; WXEBinRef * bin[3]; char * buffer; int len; @@ -161,7 +161,7 @@ public: // MemEnv handling void newMemEnv(wxeMetaCommand& event); void destroyMemEnv(wxeMetaCommand& event); - wxeMemEnv * getMemEnv(ErlDrvPort port); + wxeMemEnv * getMemEnv(ErlDrvTermData port); int newPtr(void * ptr, int type, wxeMemEnv *memenv); int getRef(void * ptr, wxeMemEnv *memenv); @@ -193,7 +193,7 @@ class wxETreeItemData : public wxTreeItemData char * bin; }; -bool sendevent(wxEvent * event, ErlDrvPort port); +bool sendevent(wxEvent * event, ErlDrvTermData port); void pre_callback(); void handle_event_callback(ErlDrvPort port, ErlDrvTermData process); @@ -208,10 +208,10 @@ extern wxeGLC glc; class wxEPrintout : public wxPrintout { public: - wxEPrintout(wxString Title, int onPrintP, int onPrepareP, + wxEPrintout(wxString Title, int onPrintP, int onPrepareP, int onBeginP, int onEndP, int onBeginD, int onEndD, - int hasP, int getPageI, ErlDrvPort Port) : + int hasP, int getPageI, ErlDrvTermData Port) : wxPrintout(Title), onPrintPage(onPrintP), onPreparePrinting(onPrepareP), onBeginPrinting(onBeginP), onEndPrinting(onEndP), @@ -241,15 +241,15 @@ class wxEPrintout : public wxPrintout int hasPage; int getPageInfo; - ErlDrvPort port; + ErlDrvTermData port; }; -void clear_cb(ErlDrvPort port, int callback); +void clear_cb(ErlDrvTermData port, int callback); // Implementation of wxListCtrlCompare struct callbackInfo { - ErlDrvPort port; + ErlDrvTermData port; int callbackID; }; diff --git a/lib/wx/c_src/wxe_return.cpp b/lib/wx/c_src/wxe_return.cpp index 0f3eb40efc..d50a74ac9d 100644 --- a/lib/wx/c_src/wxe_return.cpp +++ b/lib/wx/c_src/wxe_return.cpp @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2008-2012. All Rights Reserved. + * Copyright Ericsson AB 2008-2013. All Rights Reserved. * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in @@ -26,9 +26,9 @@ WX_DEFINE_OBJARRAY(wxErlDrvTermDataArray); #define INLINE -wxeReturn::wxeReturn (ErlDrvPort _port, - ErlDrvTermData _caller, - bool _isResult) { +wxeReturn::wxeReturn (ErlDrvTermData _port, + ErlDrvTermData _caller, + bool _isResult) { port = _port; caller = _caller; @@ -61,7 +61,7 @@ int wxeReturn::send() { rtData[i] = rt[i]; } - int res = driver_send_term(port, caller, rtData, rtLength); + int res = erl_drv_send_term(port, caller, rtData, rtLength); driver_free(rtData); #ifdef DEBUG diff --git a/lib/wx/c_src/wxe_return.h b/lib/wx/c_src/wxe_return.h index b6bfa85e63..80946e2dc6 100644 --- a/lib/wx/c_src/wxe_return.h +++ b/lib/wx/c_src/wxe_return.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2008-2012. All Rights Reserved. + * Copyright Ericsson AB 2008-2013. All Rights Reserved. * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in @@ -48,9 +48,9 @@ WX_DECLARE_OBJARRAY(ErlDrvTermData, wxErlDrvTermDataArray); class wxeReturn { public: - wxeReturn (ErlDrvPort _port, - ErlDrvTermData _caller, - bool _isResult=false); + wxeReturn (ErlDrvTermData _port, + ErlDrvTermData _caller, + bool _isResult=false); ~wxeReturn(); @@ -130,7 +130,7 @@ private: // WxeApp* wxe_app; ErlDrvTermData caller; - ErlDrvPort port; + ErlDrvTermData port; // wxeMemEnv *memEnv; wxErlDrvTermDataArray rt; wxArrayDouble temp_float; -- cgit v1.2.3 From e00f812cfaf9bad83aedf2b90c9923605836e1b3 Mon Sep 17 00:00:00 2001 From: Dan Gudmundsson Date: Tue, 22 Jan 2013 15:42:45 +0100 Subject: wx: Fix crash in glu tesselate Could overwrite emulator data, add range checks. --- lib/wx/c_src/egl_impl.cpp | 135 +++++++++++++++++++++++++--------------------- 1 file changed, 75 insertions(+), 60 deletions(-) (limited to 'lib/wx') diff --git a/lib/wx/c_src/egl_impl.cpp b/lib/wx/c_src/egl_impl.cpp index 1379f07523..a55a145934 100644 --- a/lib/wx/c_src/egl_impl.cpp +++ b/lib/wx/c_src/egl_impl.cpp @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2011. All Rights Reserved. + * Copyright Ericsson AB 2011-2013. All Rights Reserved. * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in @@ -169,33 +169,34 @@ void gl_error() { * ******************************************************************************/ static GLUtesselator* tess; -static GLdouble* tess_coords; -static GLdouble* tess_alloc_vertex; -static int* tess_vertices; -void CALLBACK -egl_ogla_vertex(GLdouble* coords) -{ - /* fprintf(stderr, "%d\r\n", (int) (coords - tess_coords) / 3); */ +typedef struct { + GLdouble * tess_coords; + int alloc_n; + int alloc_max; - *tess_vertices++ = (int) (coords - tess_coords) / 3; -} + int * tess_index_list; + int index_n; + int index_max; -void CALLBACK -egl_ogla_edge_flag(GLboolean flag) -{ -} + int error; +} egl_tess_data; + +#define NEED_MORE_ALLOC 1 +#define NEED_MORE_INDEX 2 + +static egl_tess_data egl_tess; void CALLBACK -egl_ogla_error(GLenum errorCode) +egl_ogla_vertex(GLdouble* coords) { - const GLubyte *err; - err = gluErrorString(errorCode); - // wxString msg; - // msg.Printf(wxT("Tesselation error: %d: "), (int)errorCode); - // msg += wxString::FromAscii((char *) err); - // send_msg("error", &msg); - fprintf(stderr, "Tesselation error: %d: %s\r\n", (int) errorCode, err); + /* fprintf(stderr, "%d\r\n", (int) (coords - tess_coords) / 3); */ + if(egl_tess.index_n < egl_tess.index_max) { + egl_tess.tess_index_list[egl_tess.index_n] = (int) (coords - egl_tess.tess_coords) / 3; + egl_tess.index_n++; + } + else + egl_tess.error = NEED_MORE_INDEX; } void CALLBACK @@ -204,26 +205,43 @@ egl_ogla_combine(GLdouble coords[3], GLfloat w[4], void **dataOut) { - GLdouble* vertex = tess_alloc_vertex; - - tess_alloc_vertex += 3; + GLdouble* vertex = &egl_tess.tess_coords[egl_tess.alloc_n]; + if(egl_tess.alloc_n < egl_tess.alloc_max) { + egl_tess.alloc_n += 3; + vertex[0] = coords[0]; + vertex[1] = coords[1]; + vertex[2] = coords[2]; + *dataOut = vertex; #if 0 - fprintf(stderr, "combine: "); - int i; - for (i = 0; i < 4; i++) { - if (w[i] > 0.0) { - fprintf(stderr, "%d(%g) ", (int) vertex_data[i], w[i]); + fprintf(stderr, "combine: "); + int i; + for (i = 0; i < 4; i++) { + if (w[i] > 0.0) { + fprintf(stderr, "%d(%g) ", (int) vertex_data[i], w[i]); + } } - } - fprintf(stderr, "\r\n"); - fprintf(stderr, "%g %g %g\r\n", vertex[0], vertex[1], vertex[2]); + fprintf(stderr, "\r\n"); + fprintf(stderr, "%g %g %g\r\n", vertex[0], vertex[1], vertex[2]); #endif - vertex[0] = coords[0]; - vertex[1] = coords[1]; - vertex[2] = coords[2]; - *dataOut = vertex; + } else { + egl_tess.error = NEED_MORE_ALLOC; + *dataOut = NULL; + } +} + +void CALLBACK +egl_ogla_edge_flag(GLboolean flag) +{ +} + +void CALLBACK +egl_ogla_error(GLenum errorCode) +{ + // const GLubyte *err; + // err = gluErrorString(errorCode); + // fprintf(stderr, "Tesselation error: %d: %s\r\n", (int) errorCode, err); } void init_tess() @@ -246,49 +264,46 @@ int erl_tess_impl(char* buff, ErlDrvPort port, ErlDrvTermData caller) { ErlDrvBinary* bin; int i; - GLdouble* new_vertices; - int *vertices; int num_vertices; GLdouble *n; - int n_pos, AP; - + int AP; + int a_max = 2; + int i_max = 6; num_vertices = * (int *) buff; buff += 8; /* Align */ n = (double *) buff; buff += 8*3; - bin = driver_alloc_binary(num_vertices*6*sizeof(GLdouble)); - new_vertices = tess_coords = (double *) bin->orig_bytes; - memcpy(tess_coords,buff,num_vertices*3*sizeof(GLdouble)); - tess_alloc_vertex = tess_coords + num_vertices*3; + egl_tess.alloc_max = a_max*num_vertices*3; + bin = driver_alloc_binary(egl_tess.alloc_max*sizeof(GLdouble)); + egl_tess.error = 0; + egl_tess.tess_coords = (double *) bin->orig_bytes; + memcpy(egl_tess.tess_coords,buff,num_vertices*3*sizeof(GLdouble)); + egl_tess.index_max = i_max*3*num_vertices; + egl_tess.tess_index_list = (int *) driver_alloc(sizeof(int) * egl_tess.index_max); -#if 0 - fprintf(stderr, "n=%d\r\n", num_vertices); -#endif - vertices = (int *) driver_alloc(sizeof(int) * 16*num_vertices); - - tess_vertices = vertices; + egl_tess.tess_coords = (double *) bin->orig_bytes; + egl_tess.index_n = 0; + egl_tess.alloc_n = num_vertices*3; gluTessNormal(tess, n[0], n[1], n[2]); gluTessBeginPolygon(tess, 0); gluTessBeginContour(tess); for (i = 0; i < num_vertices; i++) { - gluTessVertex(tess, tess_coords+3*i, tess_coords+3*i); + gluTessVertex(tess, egl_tess.tess_coords+3*i, egl_tess.tess_coords+3*i); } gluTessEndContour(tess); gluTessEndPolygon(tess); - n_pos = (tess_vertices - vertices); - AP = 0; ErlDrvTermData *rt; - rt = (ErlDrvTermData *) driver_alloc(sizeof(ErlDrvTermData) * (13+n_pos*2)); + rt = (ErlDrvTermData *) driver_alloc(sizeof(ErlDrvTermData) * (13+egl_tess.index_n*2)); rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "_egl_result_"); - for(i=0; i < n_pos; i++) { - rt[AP++] = ERL_DRV_INT; rt[AP++] = (int) vertices[i]; + for(i=0; i < egl_tess.index_n; i++) { + rt[AP++] = ERL_DRV_INT; rt[AP++] = (int) egl_tess.tess_index_list[i]; }; - rt[AP++] = ERL_DRV_NIL; rt[AP++] = ERL_DRV_LIST; rt[AP++] = n_pos+1; + rt[AP++] = ERL_DRV_NIL; rt[AP++] = ERL_DRV_LIST; rt[AP++] = egl_tess.index_n+1; rt[AP++] = ERL_DRV_BINARY; rt[AP++] = (ErlDrvTermData) bin; - rt[AP++] = (tess_alloc_vertex-new_vertices)*sizeof(GLdouble); rt[AP++] = 0; + rt[AP++] = egl_tess.alloc_n*sizeof(GLdouble); rt[AP++] = 0; rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; // Return tuple {list, Bin} rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; // Result tuple @@ -300,7 +315,7 @@ int erl_tess_impl(char* buff, ErlDrvPort port, ErlDrvTermData caller) /* (tess_alloc_vertex-new_vertices)*sizeof(GLdouble), */ /* num_vertices*6*sizeof(GLdouble)); */ driver_free_binary(bin); - driver_free(vertices); + driver_free(egl_tess.tess_index_list); driver_free(rt); return 0; } -- cgit v1.2.3