2323#include < string.h>
2424
2525#include < future>
26+ #include < iostream>
2627
2728struct send_ctx {
2829 pulsar_result result;
@@ -37,13 +38,19 @@ struct receive_ctx {
3738 std::promise<void > *promise;
3839};
3940
41+ static char *copy_string (const char *src) {
42+ size_t len = strlen (src);
43+ char *dest = (char *)malloc (len + 1 );
44+ strncpy (dest, src, len);
45+ return dest;
46+ }
47+
4048static void send_callback (pulsar_result async_result, pulsar_message_id_t *msg_id, void *ctx) {
4149 struct send_ctx *send_ctx = (struct send_ctx *)ctx;
4250 send_ctx->result = async_result;
4351 if (async_result == pulsar_result_Ok) {
4452 const char *msg_id_str = pulsar_message_id_str (msg_id);
45- send_ctx->msg_id = (char *)malloc (strlen (msg_id_str) * sizeof (char ));
46- strcpy (send_ctx->msg_id , msg_id_str);
53+ send_ctx->msg_id = copy_string (msg_id_str);
4754 }
4855 send_ctx->promise ->set_value ();
4956 pulsar_message_id_free (msg_id);
@@ -54,9 +61,7 @@ static void receive_callback(pulsar_result async_result, pulsar_message_t *msg,
5461 receive_ctx->result = async_result;
5562 if (async_result == pulsar_result_Ok &&
5663 pulsar_consumer_acknowledge (receive_ctx->consumer , msg) == pulsar_result_Ok) {
57- const char *data = (const char *)pulsar_message_get_data (msg);
58- receive_ctx->data = (char *)malloc (strlen (data) * sizeof (char ));
59- strcpy (receive_ctx->data , data);
64+ receive_ctx->data = copy_string ((const char *)pulsar_message_get_data (msg));
6065 }
6166 receive_ctx->promise ->set_value ();
6267 pulsar_message_free (msg);
0 commit comments