Sto progettando 2 funzioni, sto cercando di essere sicuro di farlo correttamente. L'idea è che nella prima funzione, un puntatore struct viene creato e passato a una funzione che potrebbe o meno riempire la struttura descritta. Nel caso in cui la struttura non fosse piena, speravo che il puntatore nella prima funzione venisse rimosso dalla regola della variabile automatica. Ciò comporterà un codice difficile da capire o da mantenere?
Ecco la prima funzione:
static void read_cb(struct bufferevent *bev, void *ctx) {
/* This callback is invoked when there is data to read on bev. */
struct header_t *header;.
int result;
result = checkForHeader(bev, header);
if (result == 0) {
return;
}
// More code here...
// Here would be safe to assume header is filled and usable...
}
e qui è la seconda / funzione di riempimento:
int checkForHeader(struct bufferevent *bev, header_t *header) {
struct evbuffer *input = bufferevent_get_input(bev);
struct evbuffer *output = bufferevent_get_output(bev);
size_t buffer_len = evbuffer_get_length(input);
ev_uint32_t record_len;
if (buffer_len < CS_HEADER_SIZE)
return 0; /* The size field hasn't arrived. */
// We have an actual header (parsing)
header = calloc(1, sizeof(*header));
if (!header) {
perror("calloc");
return 0;
}
header->filled = 1; // Just an example.
return 1;
}