Alternative to using strncpy() as 'safe' version of strcpy()
Just a few comments.


The standard type for specifying something like the maximum length of a string is size_t. You should probably use that instead of int.
traversing the remainder of the string on the off chance that somebody might want to know how much was skipped seems like poor design. Unless you know you're going to use that (frequently), I'd advise against it. If somebody wants that information, strlen(s) - size is pretty trivial to type, so it's not like you're saving them something terribly arduous.
I think most people accustomed to C would probably use pointer notation throughout.

char *copystring(char *restrict dest, char const *restrict source, size_t elements) {
    char *d;
    for (d = dest; d + 1 &lt; dest + elements; d++, source++)
        *d = *source;
    *d = '\0';
    return d;
}

This returns a pointer to the end of the new string, which frequently is quite useful. For example, if you're building up a string with data filled in at appropriate points, it's often useful to limit the size of each field you insert to a specific maximum, then get a pointer to where you're going to add the next item (though, in fairness, something like snprintf is often more convenient still).