Проблема в вашей функции write_data.
Эта строка копирует новые данные в начало вашего массива, а не в текущий конец.
memcpy(curl_output->contents, ptr, curl_output_size); /*Copying the contents*/
Вам необходимо сместить указатель:
memcpy(curl_output->contents + curl_output->size, ptr, curl_output_size); /* Copying the contents */
Кроме того, ваше возвращаемое значение является плохим - оно должно быть return(curl_output_size);
для обозначения успеха, через число байтов, фактически обработанных при вызове, - и ниже скобки, return(0);
, чтобы показать ошибку.
Вы также можете найти, что это проясняет ситуацию, если вместо curl_output->size
и curl_output_size
вы выберете более четкие имена ... возможно curl_output->len
?