summaryrefslogtreecommitdiff
path: root/str_fns.h
blob: d5802315853dbede59235693ee467f13337ec5c2 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool str_copy( char *dststr, char *srcstr, size_t max_chars ){
    if ( max_chars <= 0 )
        return false;
    if ( srcstr == 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;
}