Ho una funzione che riceve un buffer e restituisce alcuni dati nel buffer. I dati possono essere più piccoli della capacità del buffer.
Qual è l'API migliore e più sicura per questo?
-
int fn(void *buffer, size_t buffer_len)
: la dimensione dei dati scritti inbuffer
viene restituita dalla funzione. Lato negativo: il valore di ritorno deve anche avere un modo per indicare che si è verificato un errore ( indicatore di errore in-banda ). -
errno_t fn(void *buffer, size_t *buffer_len)
: in questo caso,buffer_len
funziona sia come input (la capacità del buffer) che come output (la dimensione dei dati). La funzione può restituire un codice di errore. Penso che sia OK, ma un po 'imbarazzante. -
errno_t fn(void *buffer, size_t *data_len, size_t buffer_len)
: come il precedente, ma con input / output separati in due argomenti. Restituisce anche il codice di errore, ma è anche scomodo a causa di troppi argomenti.
(Qualsiasi altra opzione?)