X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=blobdiff_plain;f=src%2Fsession.c;h=8d3f66966a4f156c632d185d4f788274b15e58be;hp=5e48f4a5aeee5b1aafaf5ea1e2d595d407f6a2c0;hb=64f26f744bf3185eddb07e8bfe9855e3c7bfac19;hpb=6762401d2b992a7b10585653ab07ccf1a336fe05 diff --git a/src/session.c b/src/session.c index 5e48f4a5..8d3f6696 100644 --- a/src/session.c +++ b/src/session.c @@ -126,7 +126,7 @@ static gboolean fd_source_dispatch(GSource *source, sr_err("Callback not set, cannot dispatch event."); return G_SOURCE_REMOVE; } - keep = (*(sr_receive_data_callback)callback) + keep = (*SR_RECEIVE_DATA_CALLBACK(callback)) (fsource->pollfd.fd, revents, user_data); if (fsource->timeout_us >= 0 && G_LIKELY(keep) @@ -1237,7 +1237,7 @@ SR_PRIV int sr_session_fd_source_add(struct sr_session *session, if (!source) return SR_ERR; - g_source_set_callback(source, (GSourceFunc)cb, cb_data, NULL); + g_source_set_callback(source, G_SOURCE_FUNC(cb), cb_data, NULL); ret = sr_session_source_add_internal(session, key, source); g_source_unref(source); @@ -1482,9 +1482,16 @@ SR_PRIV int sr_session_source_destroyed(struct sr_session *session, static void copy_src(struct sr_config *src, struct sr_datafeed_meta *meta_copy) { + struct sr_config *item; + +#if GLIB_CHECK_VERSION(2, 67, 3) + item = g_memdup2(src, sizeof(*src)); +#else + item = g_memdup(src, sizeof(*src)); +#endif + g_variant_ref(src->data); - meta_copy->config = g_slist_append(meta_copy->config, - g_memdup(src, sizeof(struct sr_config))); + meta_copy->config = g_slist_append(meta_copy->config, item); } SR_API int sr_packet_copy(const struct sr_datafeed_packet *packet, @@ -1496,6 +1503,9 @@ SR_API int sr_packet_copy(const struct sr_datafeed_packet *packet, struct sr_datafeed_logic *logic_copy; const struct sr_datafeed_analog *analog; struct sr_datafeed_analog *analog_copy; + struct sr_analog_encoding *encoding_copy; + struct sr_analog_meaning *meaning_copy; + struct sr_analog_spec *spec_copy; uint8_t *payload; *copy = g_malloc0(sizeof(struct sr_datafeed_packet)); @@ -1540,14 +1550,20 @@ SR_API int sr_packet_copy(const struct sr_datafeed_packet *packet, memcpy(analog_copy->data, analog->data, analog->encoding->unitsize * analog->num_samples); analog_copy->num_samples = analog->num_samples; - analog_copy->encoding = g_memdup(analog->encoding, - sizeof(struct sr_analog_encoding)); - analog_copy->meaning = g_memdup(analog->meaning, - sizeof(struct sr_analog_meaning)); +#if GLIB_CHECK_VERSION(2, 67, 3) + encoding_copy = g_memdup2(analog->encoding, sizeof(*analog->encoding)); + meaning_copy = g_memdup2(analog->meaning, sizeof(*analog->meaning)); + spec_copy = g_memdup2(analog->spec, sizeof(*analog->spec)); +#else + encoding_copy = g_memdup(analog->encoding, sizeof(*analog->encoding)); + meaning_copy = g_memdup(analog->meaning, sizeof(*analog->meaning)); + spec_copy = g_memdup(analog->spec, sizeof(*analog->spec)); +#endif + analog_copy->encoding = encoding_copy; + analog_copy->meaning = meaning_copy; analog_copy->meaning->channels = g_slist_copy( analog->meaning->channels); - analog_copy->spec = g_memdup(analog->spec, - sizeof(struct sr_analog_spec)); + analog_copy->spec = spec_copy; (*copy)->payload = analog_copy; break; default: