bool str_copy( char *dststr, char *srcstr, size_t max_chars ){ if ( max_chars <= 0 ) return false; if ( srcstr == NULL || dststr == NULL ) return false; size_t src_len = (size_t)strnlen( srcstr, max_chars ); if ( src_len <= 0 ) return false; bool need_null = false; if ( src_len >= max_chars ) need_null = true; size_t copied_chars = 0; for ( ; srcstr[copied_chars] != '\0' && copied_chars < max_chars; copied_chars++ ) dststr[copied_chars] = srcstr[copied_chars]; if ( need_null ) dststr[copied_chars + 1] = '\0'; if ( strncmp((const char*)dststr, (const char*)srcstr, max_chars) != 0 ) return false; return true; }