diff -r 628bdadc9b32 -r fe406c5f2aeb core/systems/CFunction.cpp --- a/core/systems/CFunction.cpp Sun Nov 12 00:40:58 2006 +0000 +++ b/core/systems/CFunction.cpp Sun Nov 12 01:06:17 2006 +0000 @@ -106,7 +106,7 @@ return SetError(err); } - info->flags = inarray ? copyback : SMFUNC_COPYBACK_NONE; + info->flags = (inarray || (copyback & SMFUNC_COPYBACK_ALWAYS)) ? copyback : SMFUNC_COPYBACK_NONE; info->marked = true; info->size = cells; m_params[m_curparam] = info->local_addr; @@ -246,9 +246,14 @@ } if (temp_info[numparams].orig_addr) { - memcpy(temp_info[numparams].orig_addr, - temp_info[numparams].phys_addr, - temp_info[numparams].size * sizeof(cell_t)); + if (temp_info[numparams].size == 1) + { + *temp_info[numparams].orig_addr = *temp_info[numparams].phys_addr; + } else { + memcpy(temp_info[numparams].orig_addr, + temp_info[numparams].phys_addr, + temp_info[numparams].size * sizeof(cell_t)); + } } } _skipcopy: