I kinda suspect copy and destroy should have a void* data that gets supplied alongside them and that's passed to them as one more parameter.  If it's not needed right now for the particular job that calls for these, then leaving it out (for now, at least) is fair enough.  Just give some thought to whether it can be easily retrofitted later, should the need arise !