- case SR_DF_ANALOG_OLD:
- analog_old = packet->payload;
- analog_old_copy = g_malloc(sizeof(analog_old));
- analog_old_copy->channels = g_slist_copy(analog_old->channels);
- analog_old_copy->num_samples = analog_old->num_samples;
- analog_old_copy->mq = analog_old->mq;
- analog_old_copy->unit = analog_old->unit;
- analog_old_copy->mqflags = analog_old->mqflags;
- analog_old_copy->data = g_malloc(analog_old->num_samples * sizeof(float));
- memcpy(analog_old_copy->data, analog_old->data,
- analog_old->num_samples * sizeof(float));
- (*copy)->payload = analog_old_copy;
- break;
- case SR_DF_ANALOG2:
- analog2 = packet->payload;
- analog2_copy = g_malloc(sizeof(analog2));
- analog2_copy->data = g_malloc(
- analog2->encoding->unitsize * analog2->num_samples);
- memcpy(analog2_copy->data, analog2->data,
- analog2->encoding->unitsize * analog2->num_samples);
- analog2_copy->num_samples = analog2->num_samples;
- analog2_copy->encoding = g_memdup(analog2->encoding,
- sizeof(struct sr_analog_encoding));
- analog2_copy->meaning = g_memdup(analog2->meaning,
- sizeof(struct sr_analog_meaning));
- analog2_copy->meaning->channels = g_slist_copy(
- analog2->meaning->channels);
- analog2_copy->spec = g_memdup(analog2->spec,
- sizeof(struct sr_analog_spec));
- (*copy)->payload = analog2_copy;
+ case SR_DF_ANALOG:
+ analog = packet->payload;
+ analog_copy = g_malloc(sizeof(*analog_copy));
+ analog_copy->data = g_malloc(
+ analog->encoding->unitsize * analog->num_samples);
+ memcpy(analog_copy->data, analog->data,
+ analog->encoding->unitsize * analog->num_samples);
+ analog_copy->num_samples = analog->num_samples;
+#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 = spec_copy;
+ (*copy)->payload = analog_copy;