diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-02-18 05:10:52 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-02-18 05:10:52 +0000 |
commit | 0f0c32f24e9556cf3d605df2891841659e6293f6 (patch) | |
tree | d8120fdd026402a40f915ac68c1ff92b5c032965 /mjit.c | |
parent | ecd2c08a4c8f9e3881d93131456d3ff066bc5de1 (diff) |
mjit.c: no va_copy
* mjit.c (form_args): do not use va_copy, which cannot detect
appropriate way to simulate when cross compiling.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62463 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'mjit.c')
-rw-r--r-- | mjit.c | 20 |
1 files changed, 7 insertions, 13 deletions
@@ -286,27 +286,21 @@ args_len(char *const *args) static char ** form_args(int num, ...) { - va_list argp, argp2; - size_t len, disp; + va_list argp; + size_t len, n; int i; char **args, **res; va_start(argp, num); - va_copy(argp2, argp); + res = NULL; for (i = len = 0; i < num; i++) { args = va_arg(argp, char **); - len += args_len(args); + n = args_len(args); + REALLOC_N(res, char *, len + n + 1); + MEMCPY(res + len, args, char *, n + 1); + len += n; } va_end(argp); - res = xmalloc((len + 1) * sizeof(char *)); - for (i = disp = 0; i < num; i++) { - args = va_arg(argp2, char **); - len = args_len(args); - memmove(res + disp, args, len * sizeof(char *)); - disp += len; - } - res[disp] = NULL; - va_end(argp2); return res; } |