Skip to content

Commit 41a3a72

Browse files
committed
x.c:widget_values_get(): use a reference into a XtArgVal array.
x.c:args_to_pairs(): When going from X -> ML, X seems to want a valid pointer, so dereference even though its supposedly "unboxed".
1 parent 6a4cf9b commit 41a3a72

File tree

1 file changed

+3
-11
lines changed
  • src/rts/src/OS/Unix

1 file changed

+3
-11
lines changed

src/rts/src/OS/Unix/x.c

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,7 +1180,7 @@ static void args_to_pairs(Arg args[], mlval list)
11801180
break;
11811181

11821182
case mlw_x_arg_unboxed:
1183-
mlw_ref_update(ref, (mlval)args[nr_args].value);
1183+
mlw_ref_update(ref, (mlval)*(XtArgVal*)args[nr_args].value);
11841184
break;
11851185

11861186
default:
@@ -1885,23 +1885,15 @@ static mlval widget_values_set(mlval argument)
18851885
static mlval widget_values_get(mlval argument)
18861886
{
18871887
Arg args[MAX_NR_ARGS];
1888+
XtArgVal vals[MAX_NR_ARGS];
18881889
Cardinal nr_args, i;
18891890
mlval list = FIELD(argument, 1);
18901891

18911892
pairs_to_args(args, &nr_args, list);
18921893
for(i=0; i<nr_args; ++i) {
1893-
XtArgVal tmp = (XtArgVal)XtMalloc(sizeof (XtArgVal));
1894-
if (tmp == 0)
1895-
error("widget_values_get: malloc failed", 0, 0);
1896-
else
1897-
args[i].value = tmp;
1894+
args[i].value = (XtArgVal)&vals[i];
18981895
}
18991896
XtGetValues((Widget)FIELD(argument, 0), args, nr_args);
1900-
for(i=0; i<nr_args; ++i) {
1901-
XtArgVal *tmp = (XtArgVal*)args[i].value;
1902-
args[i].value = *tmp;
1903-
XtFree ((char*)tmp);
1904-
}
19051897
args_to_pairs(args, list);
19061898

19071899
return(MLUNIT);

0 commit comments

Comments
 (0)