From 65647f90907d69eb1d0c0f3489b9bbec9c5c7135 Mon Sep 17 00:00:00 2001 From: Albert Graef <aggraef@gmail.com> Date: Mon, 21 Sep 2020 11:50:29 +0200 Subject: [PATCH] Fix up the dummy canvas environment in abstracthandler_callback. Instead of casting a magic number to a pointer, which is a sure recipe for disaster, provide a properly initialized dummy t_canvasenvironment* pointing to static storage. --- pd/src/g_canvas.c | 13 +++++++++++++ pd/src/g_canvas.h | 2 ++ pd/src/g_editor.c | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c index 8cabb3506..0937ce8e4 100644 --- a/pd/src/g_canvas.c +++ b/pd/src/g_canvas.c @@ -43,6 +43,19 @@ struct _canvasenvironment t_namelist *ce_path; /* search path */ }; +t_canvasenvironment *dummy_canvas_env(const char *dir) +{ + static t_canvasenvironment dummy_env = { + .ce_dir = NULL, + .ce_argc = 0, + .ce_argv = NULL, + .ce_dollarzero = 0, + .ce_path = NULL + }; + dummy_env.ce_dir = gensym(dir); + return &dummy_env; +} + #define GLIST_DEFCANVASWIDTH 450 #define GLIST_DEFCANVASHEIGHT 300 diff --git a/pd/src/g_canvas.h b/pd/src/g_canvas.h index 44ee4e4ab..9a56e360c 100644 --- a/pd/src/g_canvas.h +++ b/pd/src/g_canvas.h @@ -76,6 +76,8 @@ EXTERN_STRUCT _tscalar; EXTERN_STRUCT _canvasenvironment; #define t_canvasenvironment struct _canvasenvironment +extern t_canvasenvironment *dummy_canvas_env(const char *dir); + EXTERN_STRUCT _fielddesc; #define t_fielddesc struct _fielddesc diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c index 50f8d035c..bc78a63dd 100644 --- a/pd/src/g_editor.c +++ b/pd/src/g_editor.c @@ -2360,7 +2360,7 @@ static void abstracthandler_callback(t_abstracthandler *x, t_symbol *s) /* save the subpatch into a separated pd file */ t_atom at[3]; SETSYMBOL(at, gensym(filename)); SETSYMBOL(at+1, gensym(dir)); SETFLOAT(at+2, 0.f); - x->tarjet->gl_env = 0xF1A6; /* gl_env is set to non-zero in order to save the subcanvas as a root canvas */ + x->tarjet->gl_env = dummy_canvas_env(dir); /* gl_env is set to non-zero in order to save the subcanvas as a root canvas */ typedmess(&x->tarjet->gl_pd, gensym("savetofile"), 3, at); x->tarjet->gl_env = 0; -- GitLab