Мне нужно использовать функцию (часть API), которая сохраняет некоторые запрошенные данные в структуре динамического размера, используя вызов по ссылке.Структура определяется следующим образом - она касается списков контроля доступа либо в версии posix, либо в версии NFS4, но это всего лишь сценарий использования, я полагаю.
typedef struct my_struct
{
unsigned int len; /* total length of the struct in bytes */
... /* some other static sized fields */
unsigned int version; /* 2 different versions are possible */
unsigned int amount; /* number of entries that follow */
union {
entry_v1_t entry_v1[1];
entry_v2_t entry_v2[1];
};
} my_struct_t;
Есть 2 версии записей, и я знаю, какую из них я получу (v1).И entry_v1_t
, и entry_v2_t
- это структуры фиксированного (но различного) размера, содержащие только целые числа (поэтому, я думаю, их здесь не стоит объяснять).Теперь мне нужно использовать существующую функцию, чтобы заполнить мою структуру необходимой мне информацией с помощью Call by Reference, подпись выглядит следующим образом, включая комментарии - у меня нет доступа к реализации:
int get_information(char *pathname, void *ptr);
/* The ptr parameter must point to a buffer mapped by the my_struct
* structure. The first four bytes of the buffer must contain its total size.
*/
Итак, дело в том, что я должен выделить память для этой структуры, но не знаю, сколько записей (и, как следствие, общий размер) я должен выделить.Вы когда-нибудь сталкивались с такой ситуацией?