X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=output%2Fanalog.c;h=c59399a27847167a1bb2335732d876643809a15d;hb=133a37bfba1a7e1423716b2b872d3bb82a2e64d9;hp=58c37dba6ae933d7f5f125744f5a185d01823ac1;hpb=cd853ff0b2b0ad2643d65e73159661e1a3c6bc66;p=libsigrok.git diff --git a/output/analog.c b/output/analog.c index 58c37dba..c59399a2 100644 --- a/output/analog.c +++ b/output/analog.c @@ -97,8 +97,10 @@ static int init(struct sr_output *o, int default_spl, enum outputmode mode) int num_probes; char *samplerate_s; - if (!(ctx = calloc(1, sizeof(struct context)))) + if (!(ctx = g_try_malloc0(sizeof(struct context)))) { + sr_err("analog out: %s: ctx malloc failed", __func__); return SR_ERR_MALLOC; + } o->internal = ctx; ctx->num_enabled_probes = 0; @@ -125,8 +127,9 @@ static int init(struct sr_output *o, int default_spl, enum outputmode mode) } else ctx->samples_per_line = default_spl; - if (!(ctx->header = malloc(512))) { - free(ctx); + if (!(ctx->header = g_try_malloc(512))) { + g_free(ctx); + sr_err("analog out: %s: ctx->header malloc failed", __func__); return SR_ERR_MALLOC; } @@ -136,26 +139,29 @@ static int init(struct sr_output *o, int default_spl, enum outputmode mode) samplerate = *((uint64_t *) o->device->plugin->get_device_info( o->device->plugin_index, SR_DI_CUR_SAMPLERATE)); if (!(samplerate_s = sr_samplerate_string(samplerate))) { - free(ctx->header); - free(ctx); + g_free(ctx->header); + g_free(ctx); return SR_ERR; } snprintf(ctx->header + strlen(ctx->header), 511 - strlen(ctx->header), "Acquisition with %d/%d probes at %s\n", ctx->num_enabled_probes, num_probes, samplerate_s); - free(samplerate_s); + g_free(samplerate_s); } ctx->linebuf_len = ctx->samples_per_line * 2 + 4; - if (!(ctx->linebuf = calloc(1, num_probes * ctx->linebuf_len))) { - free(ctx->header); - free(ctx); + if (!(ctx->linebuf = g_try_malloc0(num_probes * ctx->linebuf_len))) { + g_free(ctx->header); + g_free(ctx); + sr_err("analog out: %s: ctx->linebuf malloc failed", __func__); return SR_ERR_MALLOC; } - if (!(ctx->linevalues = calloc(1, num_probes))) { - free(ctx->header); - free(ctx); + if (!(ctx->linevalues = g_try_malloc0(num_probes))) { + g_free(ctx->header); + g_free(ctx); + sr_err("analog out: %s: ctx->linevalues malloc failed", + __func__); return SR_ERR_MALLOC; } @@ -179,12 +185,15 @@ static int event(struct sr_output *o, int event_type, char **data_out, case SR_DF_END: outsize = ctx->num_enabled_probes * (ctx->samples_per_line + 20) + 512; - if (!(outbuf = calloc(1, outsize))) + if (!(outbuf = g_try_malloc0(outsize))) { + sr_err("analog out: %s: outbuf malloc failed", + __func__); return SR_ERR_MALLOC; + } flush_linebufs(ctx, outbuf); *data_out = outbuf; *length_out = strlen(outbuf); - free(o->internal); + g_free(o->internal); o->internal = NULL; break; default: @@ -220,14 +229,16 @@ static int data_bits(struct sr_output *o, const char *data_in, outsize = 512 + (1 + (length_in / ctx->unitsize) / ctx->samples_per_line) * (ctx->num_enabled_probes * max_linelen); - if (!(outbuf = calloc(1, outsize + 1))) + if (!(outbuf = g_try_malloc0(outsize + 1))) { + sr_err("analog out: %s: outbuf malloc failed", __func__); return SR_ERR_MALLOC; + } outbuf[0] = '\0'; if (ctx->header) { /* The header is still here, this must be the first packet. */ strncpy(outbuf, ctx->header, outsize); - free(ctx->header); + g_free(ctx->header); ctx->header = NULL; /* Ensure first transition. */ @@ -302,14 +313,16 @@ static int data_hex(struct sr_output *o, const char *data_in, outsize = length_in / ctx->unitsize * ctx->num_enabled_probes / ctx->samples_per_line * max_linelen + 512; - if (!(outbuf = calloc(1, outsize + 1))) + if (!(outbuf = g_try_malloc0(outsize + 1))) { + sr_err("analog out: %s: outbuf malloc failed", __func__); return SR_ERR_MALLOC; + } outbuf[0] = '\0'; if (ctx->header) { /* The header is still here, this must be the first packet. */ strncpy(outbuf, ctx->header, outsize); - free(ctx->header); + g_free(ctx->header); ctx->header = NULL; } @@ -371,14 +384,16 @@ static int data_ascii(struct sr_output *o, const char *data_in, outsize = 512 + (1 + (length_in / ctx->unitsize) / ctx->samples_per_line) * (ctx->num_enabled_probes * max_linelen); - if (!(outbuf = calloc(1, outsize + 1))) + if (!(outbuf = g_try_malloc0(outsize + 1))) { + sr_err("analog out: %s: outbuf malloc failed", __func__); return SR_ERR_MALLOC; + } outbuf[0] = '\0'; if (ctx->header) { /* The header is still here, this must be the first packet. */ strncpy(outbuf, ctx->header, outsize); - free(ctx->header); + g_free(ctx->header); ctx->header = NULL; }