#include #include kscond kscp(ksraw str, ksmut dest, sz* len) { if (str.size == 0) { /* calculate length on the fly */ for(; str.ptr[str.size] != 0; ++ str.size) { if (str.size >= dest.size) return kscond_no_room; dest.ptr[str.size] = str.ptr[str.size]; } } else { if (dest.size < str.size) return kscond_no_room; if (dest.ptr == null || str.ptr == null) return kscond_null; for(sz idx = 0; idx < str.size; ++ idx) { dest.ptr[idx] = str.ptr[idx]; } } /* did we copy a nul? */ if (str.ptr[str.size - 1] != 0) /* we didn't, can we? */ if (dest.size > str.size) /* set a final nul */ dest.ptr[str.size] = 0; if (len != null) *len = str.size; return kscond_ok; }