На самом деле CURLOPT_WRITEDATA и CURLOPT_WRITEFUNCTION могут использоваться с любым типом указателя. Пока ваша функция совместима с указателем этого типа.
Например:
...
client_t *client;
CURL *conn;
...
curl_easy_setopt(conn, CURLOPT_WRITEFUNCTION, read_data);
curl_easy_setopt(conn, CURLOPT_WRITEDATA, client);
...
static size_t read_data(void *ptr,
size_t size,
size_t nmemb,
client_t *client)
{
memcpy(client->data, ptr, size * nmemb);
return size * nmemb;
}