diff --git a/pvDataApp/factory/Convert.cpp b/pvDataApp/factory/Convert.cpp index 463989b..7e60f10 100644 --- a/pvDataApp/factory/Convert.cpp +++ b/pvDataApp/factory/Convert.cpp @@ -119,9 +119,13 @@ size_t Convert::fromStringArray(PVScalarArrayPtr const &pv, if(offset==0 && length>=alen) { // replace all existing elements assert(from.size()>=fromOffset+length); - if(length>alen) - pv->setLength(length); - pv->copyIn(&from[fromOffset], length); + + PVStringArray::svector data(length); + std::copy(from.begin()+fromOffset, + from.begin()+fromOffset+length, + data.begin()); + + pv->putFrom(data); return length; } else { @@ -134,12 +138,13 @@ size_t Convert::toStringArray(PVScalarArrayPtr const & pv, size_t offset, size_t length, StringArray &to, size_t toOffset) { - size_t alen = pv->getLength(); - if(offset>alen) return 0; - alen -= offset; - if(length>alen) length=alen; - pv->copyOut(&to[toOffset], length); - return length; + PVStringArray::const_svector data; + pv->getAs(data); + data.slice(offset, length); + if(toOffset+data.size() > to.size()) + to.resize(toOffset+data.size()); + std::copy(data.begin()+toOffset, data.end(), to.begin()); + return data.size(); } bool Convert::isCopyCompatible(FieldConstPtr const &from, FieldConstPtr const &to)