You're about to strncpy into it, so there is no win to using calloc (which fills the freshly allocated memory with '\0' bytes, that you're about to over-write) instead of malloc.  Further, you can combine the allocation and copying by using xstrndup(string, length), which shall take care of the +1 for you and do the whole alloc-and-copy job.
(Also, because you now have a big enough buffer (for sure), strncpy could have been replaced by strcpy() and the setting of [length] to '\0' is redundant, even when using strncpy(), since the correct buffer size ensures its deficiencies can't surface; but all of this is rendered irrelevant by switching to strndup.)