У меня есть эта структура RPC T_Struct
, которая пришла с провода. Я хотел бы сделать его копию, но я не хочу писать отдельную функцию для обработки всех структур, распределений и массивов ее членов (особенно, что мне придется делать то же самое для тонов других структур .)Имеет ли смысл эта копия RPC xdr?
Так как у меня уже есть способ декодирования, кодирования и бесплатно, что это имеет смысл, чтобы иметь что-то вроде этого:
void copy_T_Struct(T_Struct* destination, T_Struct* source)
{
XDR xdr ;
/* Is there a way I can know the size of the buffer for the struct? */
char buffer[ 10240 ] ;
xdrmem_create(&xdr, buffer, sizeof(buffer), XDR_ENCODE) ;
(*xdr_T_Struct)(&xdr, source) ; /* serialize to buffer */
xdr.x_op = XDR_DECODE ;
memset(destination, 0, sizeof(*destination)) ; /* without it I see segfault */
(*xdr_T_Struct)(&xdr, destination) ; /* serialize back to T_Struct */
xdr_destroy(&xdr) ;
}
Я понимаю, что в конце концов, я также буду иметь возможность звонок xdr_free((xdrproc_t)xdr_T_Struct, (char *)destination) ;
Похоже, он будет работать вообще. Что нужно добавить, это проверка вывода вызова функции xdr_T_Struct() при XDR_ENCODE-ing и увеличение размера буфера в случае сбоя. – Grzegorz