summaryrefslogtreecommitdiff
path: root/snd-marks.c
diff options
context:
space:
mode:
authorAlessio Treglia <quadrispro@ubuntu.com>2009-12-03 13:03:13 +0100
committerAlessio Treglia <quadrispro@ubuntu.com>2009-12-03 13:03:13 +0100
commit8b022ab680a3f5e374a44f2c05c1671cfb2bc799 (patch)
treeaf20b9a16eeca697a1d30a554d8d1b31ae9c1e4f /snd-marks.c
parent5cd66eecc95be11cacc5aaf4db8c67a499bb2d4d (diff)
Imported Upstream version 11.1
Diffstat (limited to 'snd-marks.c')
-rw-r--r--snd-marks.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/snd-marks.c b/snd-marks.c
index bcec2ec..a2b381f 100644
--- a/snd-marks.c
+++ b/snd-marks.c
@@ -2038,7 +2038,7 @@ static char *xen_mark_to_string(xen_mark *v)
char *buf;
if (v == NULL) return(NULL);
buf = (char *)calloc(XEN_MARK_PRINT_BUFFER_SIZE, sizeof(char));
- sprintf(buf, "#<mark %d>", v->n);
+ snprintf(buf, XEN_MARK_PRINT_BUFFER_SIZE, "#<mark %d>", v->n);
return(buf);
}
@@ -2103,13 +2103,26 @@ static bool s7_xen_mark_equalp(void *obj1, void *obj2)
return((obj1 == obj2) ||
(((xen_mark *)obj1)->n == ((xen_mark *)obj2)->n));
}
+
+
+static XEN s7_xen_mark_copy(s7_scheme *sc, s7_pointer obj)
+{
+ int id;
+ mark *m, *new_m;
+ chan_info *cps[1];
+ id = xen_mark_to_int(obj);
+ m = find_mark_from_id(id, cps, AT_CURRENT_EDIT_POSITION);
+ new_m = add_mark(m->samp, m->name, cps[0]);
+ new_m->sync = m->sync;
+ return(new_xen_mark(new_m->id));
+}
#endif
static void init_xen_mark(void)
{
#if HAVE_S7
- xen_mark_tag = XEN_MAKE_OBJECT_TYPE("<mark>", print_xen_mark, free_xen_mark, s7_xen_mark_equalp, NULL, NULL, NULL, NULL, NULL, NULL);
+ xen_mark_tag = XEN_MAKE_OBJECT_TYPE("<mark>", print_xen_mark, free_xen_mark, s7_xen_mark_equalp, NULL, NULL, NULL, NULL, s7_xen_mark_copy, NULL);
#else
#if HAVE_RUBY
xen_mark_tag = XEN_MAKE_OBJECT_TYPE("XenMark", sizeof(xen_mark));