4Apr/100
C/C++ memcpy() for structs
At some point you will find that you need a permanent reference to a struct, but all that you have available is a non-static pointer to that struct. Now you will note that this commonly exists already in the dup2() function, taking a file-pointer and duplicating it to another file-pointer. So how can we do this for some other struct?
struct MY_STRUCT*
copyStruct(const struct MY_STRUCT *s) {
if (s == NULL) return NULL;
struct MY_STRUCT *d = (struct MY_STRUCT*)malloc(sizeof(struct MY_STRUCT));
if (d == NULL) return NULL;
memcpy(d, s, sizeof(struct MY_STRUCT));
return d;
}
Of course, name it whatever you want, and use whatever struct you want. Obviously you get a pointer-to-struct on success, otherwise you get NULL... so make sure the caller checks... and calls free() when appropriate.