From 81057c58a4653ae2fb603c141a2de6fb8b128bf0 Mon Sep 17 00:00:00 2001
From: Ivica Ico Bukvic <ico@monsoon.(none)>
Date: Thu, 15 Nov 2012 20:15:29 -0500
Subject: [PATCH] merged patches from
 https://sourceforge.net/tracker/?func=detail&atid=478072&aid=2947822&group_id=55736

---
 src/g_bang.c     |  4 ++--
 src/g_hdial.c    |  4 ++--
 src/g_hslider.c  |  4 ++--
 src/g_mycanvas.c |  4 ++--
 src/g_numbox.c   |  4 ++--
 src/g_toggle.c   |  4 ++--
 src/g_vdial.c    |  4 ++--
 src/g_vslider.c  |  4 ++--
 src/g_vumeter.c  |  4 ++--
 src/m_binbuf.c   | 27 ++++++++++++++++++++++++++-
 10 files changed, 44 insertions(+), 19 deletions(-)

diff --git a/src/g_bang.c b/src/g_bang.c
index 018ae116d..6beba3070 100644
--- a/src/g_bang.c
+++ b/src/g_bang.c
@@ -587,8 +587,8 @@ static void bng_properties(t_gobj *z, t_glist *owner)
             ----------dimensions(pix):----------- %d %d size: 0 0 empty \
             --------flash-time(ms)(ms):--------- %d intrrpt: %d hold: %d \
             %d empty empty %d %d empty %d \
-            %s %s \
-            %s %d %d \
+            {%s} {%s} \
+            {%s} %d %d \
             %d %d \
             %d %d %d\n",
             x->x_gui.x_w, IEM_GUI_MINSIZE,
diff --git a/src/g_hdial.c b/src/g_hdial.c
index 6b9870708..1d32a203e 100644
--- a/src/g_hdial.c
+++ b/src/g_hdial.c
@@ -600,8 +600,8 @@ static void hradio_properties(t_gobj *z, t_glist *owner)
             ----------dimensions(pix):----------- %d %d size: 0 0 empty \
             empty 0.0 empty 0.0 empty %d \
             %d new-only new&old %d %d number: %d \
-            %s %s \
-            %s %d %d \
+            {%s} {%s} \
+            {%s} %d %d \
             %d %d \
             %d %d %d\n",
             x->x_gui.x_w, IEM_GUI_MINSIZE,
diff --git a/src/g_hslider.c b/src/g_hslider.c
index 282265ff2..2153439a4 100644
--- a/src/g_hslider.c
+++ b/src/g_hslider.c
@@ -630,8 +630,8 @@ static void hslider_properties(t_gobj *z, t_glist *owner)
             --------dimensions(pix)(pix):-------- %d %d width: %d %d height: \
             -----------output-range:----------- %g left: %g right: %g \
             %d lin log %d %d empty %d \
-            %s %s \
-            %s %d %d \
+            {%s} {%s} \
+            {%s} %d %d \
             %d %d \
             %d %d %d\n",
             x->x_gui.x_w, IEM_SL_MINSIZE, x->x_gui.x_h, IEM_GUI_MINSIZE,
diff --git a/src/g_mycanvas.c b/src/g_mycanvas.c
index 5f3b8f53c..4f6a76c47 100644
--- a/src/g_mycanvas.c
+++ b/src/g_mycanvas.c
@@ -460,8 +460,8 @@ static void my_canvas_properties(t_gobj *z, t_glist *owner)
             ------selectable_dimensions(pix):------ %d %d size: 0.0 0.0 empty \
             ------visible_rectangle(pix)(pix):------ %d width: %d height: %d \
             %d empty empty %d %d empty %d \
-            %s %s \
-            %s %d %d \
+            {%s} {%s} \
+            {%s} %d %d \
             %d %d \
             %d %d %d\n",
             x->x_gui.x_w, 1,
diff --git a/src/g_numbox.c b/src/g_numbox.c
index 45159d671..27c115170 100644
--- a/src/g_numbox.c
+++ b/src/g_numbox.c
@@ -845,8 +845,8 @@ static void my_numbox_properties(t_gobj *z, t_glist *owner)
             -------dimensions(digits)(pix):------- %d %d width: %d %d height: \
             -----------output-range:----------- %g min: %g max: %d \
             %d lin log %d %d log-height: %d \
-            %s %s \
-            %s %d %d \
+            {%s} {%s} \
+            {%s} %d %d \
             %d %d \
             %d %d %d\n",
             x->x_gui.x_w, 1, x->x_gui.x_h, 8,
diff --git a/src/g_toggle.c b/src/g_toggle.c
index 3db86241a..2641d9cae 100644
--- a/src/g_toggle.c
+++ b/src/g_toggle.c
@@ -587,8 +587,8 @@ static void toggle_properties(t_gobj *z, t_glist *owner)
             ----------dimensions(pix):----------- %d %d size: 0 0 empty \
             -----------non-zero-value:----------- %g value: 0.0 empty %g \
             -1 lin log %d %d empty %d \
-            %s %s \
-            %s %d %d \
+            {%s} {%s} \
+            {%s} %d %d \
             %d %d \
             %d %d %d\n",
             x->x_gui.x_w, IEM_GUI_MINSIZE,
diff --git a/src/g_vdial.c b/src/g_vdial.c
index f460c8e13..c996c87c8 100644
--- a/src/g_vdial.c
+++ b/src/g_vdial.c
@@ -602,8 +602,8 @@ static void vradio_properties(t_gobj *z, t_glist *owner)
             ----------dimensions(pix):----------- %d %d size: 0 0 empty \
             empty 0.0 empty 0.0 empty %d \
             %d new-only new&old %d %d number: %d \
-            %s %s \
-            %s %d %d \
+            {%s} {%s} \
+            {%s} %d %d \
             %d %d \
             %d %d %d\n",
             x->x_gui.x_w, IEM_GUI_MINSIZE,
diff --git a/src/g_vslider.c b/src/g_vslider.c
index f41258e31..0c499b6e6 100644
--- a/src/g_vslider.c
+++ b/src/g_vslider.c
@@ -641,8 +641,8 @@ static void vslider_properties(t_gobj *z, t_glist *owner)
             --------dimensions(pix)(pix):-------- %d %d width: %d %d height: \
             -----------output-range:----------- %g bottom: %g top: %d \
             %d lin log %d %d empty %d \
-            %s %s \
-            %s %d %d \
+            {%s} {%s} \
+            {%s} %d %d \
             %d %d \
             %d %d %d\n",
             x->x_gui.x_w, IEM_GUI_MINSIZE, x->x_gui.x_h, IEM_SL_MINSIZE,
diff --git a/src/g_vumeter.c b/src/g_vumeter.c
index 52ecb10bb..945580c90 100644
--- a/src/g_vumeter.c
+++ b/src/g_vumeter.c
@@ -861,8 +861,8 @@ static void vu_properties(t_gobj *z, t_glist *owner)
             --------dimensions(pix)(pix):-------- %d %d width: %d %d height: \
             empty 0.0 empty 0.0 empty %d \
             %d no_scale scale %d %d empty %d \
-            %s %s \
-            %s %d %d \
+            {%s} {%s} \
+            {%s} %d %d \
             %d %d \
             %d %d %d\n",
             x->x_gui.x_w, IEM_GUI_MINSIZE, x->x_gui.x_h, IEM_VU_STEPS*IEM_VU_MINSIZE,
diff --git a/src/m_binbuf.c b/src/m_binbuf.c
index e1926b67e..313164b75 100644
--- a/src/m_binbuf.c
+++ b/src/m_binbuf.c
@@ -21,6 +21,29 @@
 #include <string.h>
 #include <stdarg.h>
 
+/* escape characters for saving */
+static char* strnescape(char *dest, const char *src, size_t outlen)
+{
+    int ptin = 0;
+    unsigned ptout = 0;
+    for(; ptout < outlen; ptin++, ptout++)
+    {
+        int c = src[ptin];
+        if (c == ' ' || c=='\t')
+            dest[ptout++] = '\\';
+        dest[ptout] = src[ptin];
+        if (c==0) break;
+    }
+
+    if(ptout < outlen)
+        dest[ptout]=0;
+    else
+        dest[outlen-1]=0;
+
+    return dest;
+}
+
+
 struct _binbuf
 {
     int b_n;
@@ -1000,7 +1023,9 @@ int binbuf_write(t_binbuf *x, char *filename, char *dir, int crflag)
             bp > sbuf && bp[-1] == ' ') bp--;
         if (!crflag || ap->a_type != A_SEMI)
         {
-            atom_string(ap, bp, (ep-bp)-2);
+            char bp2[WBUFSIZE];
+            atom_string(ap, bp2, WBUFSIZE);
+            strnescape(bp, bp2, (ep-bp)-2);
             length = strlen(bp);
             bp += length;
             ncolumn += length;
-- 
GitLab