Added special strdup to liboptions, to prevent memory leaks for option strings

If you are doing memory leak debugging you don't want to see any leaks when
stopping the program.
This commit is contained in:
Andreas Eversberg
2021-01-25 15:16:29 +01:00
parent 22cb70fb1b
commit 8c0a25f3b0
28 changed files with 144 additions and 62 deletions

View File

@@ -175,13 +175,13 @@ int sdr_config_handle_options(int short_option, int argi, char **argv)
sdr_config->channel = atoi(argv[argi]);
break;
case OPT_SDR_DEVICE_ARGS:
sdr_config->device_args = strdup(argv[argi]);
sdr_config->device_args = options_strdup(argv[argi]);
break;
case OPT_SDR_STREAM_ARGS:
sdr_config->stream_args = strdup(argv[argi]);
sdr_config->stream_args = options_strdup(argv[argi]);
break;
case OPT_SDR_TUNE_ARGS:
sdr_config->tune_args = strdup(argv[argi]);
sdr_config->tune_args = options_strdup(argv[argi]);
break;
case OPT_SDR_SAMPLERATE:
sdr_config->samplerate = atoi(argv[argi]);
@@ -193,13 +193,13 @@ int sdr_config_handle_options(int short_option, int argi, char **argv)
sdr_config->bandwidth = atof(argv[argi]);
break;
case OPT_SDR_RX_ANTENNA:
sdr_config->rx_antenna = strdup(argv[argi]);
sdr_config->rx_antenna = options_strdup(argv[argi]);
break;
case OPT_SDR_TX_ANTENNA:
sdr_config->tx_antenna = strdup(argv[argi]);
sdr_config->tx_antenna = options_strdup(argv[argi]);
break;
case OPT_SDR_CLOCK_SOURCE:
sdr_config->clock_source = strdup(argv[argi]);
sdr_config->clock_source = options_strdup(argv[argi]);
break;
case OPT_SDR_RX_GAIN:
sdr_config->rx_gain = atof(argv[argi]);
@@ -208,16 +208,16 @@ int sdr_config_handle_options(int short_option, int argi, char **argv)
sdr_config->tx_gain = atof(argv[argi]);
break;
case OPT_WRITE_IQ_RX_WAVE:
sdr_config->write_iq_rx_wave = strdup(argv[argi]);
sdr_config->write_iq_rx_wave = options_strdup(argv[argi]);
break;
case OPT_WRITE_IQ_TX_WAVE:
sdr_config->write_iq_tx_wave = strdup(argv[argi]);
sdr_config->write_iq_tx_wave = options_strdup(argv[argi]);
break;
case OPT_READ_IQ_RX_WAVE:
sdr_config->read_iq_rx_wave = strdup(argv[argi]);
sdr_config->read_iq_rx_wave = options_strdup(argv[argi]);
break;
case OPT_READ_IQ_TX_WAVE:
sdr_config->read_iq_tx_wave = strdup(argv[argi]);
sdr_config->read_iq_tx_wave = options_strdup(argv[argi]);
break;
case OPT_SDR_SWAP_LINKS:
sdr_config->swap_links = 1;

View File

@@ -27,6 +27,7 @@
#include <SoapySDR/Formats.h>
#include "soapy.h"
#include "../libdebug/debug.h"
#include "../liboptions/options.h"
extern int sdr_rx_overflow;
@@ -40,7 +41,7 @@ static uint64_t tx_count = 0;
static int parse_args(SoapySDRKwargs *args, const char *_args_string)
{
char *args_string = strdup(_args_string), *key, *val;
char *args_string = options_strdup(_args_string), *key, *val;
memset(args, 0, sizeof(*args));
while (args_string && *args_string) {

View File

@@ -26,6 +26,7 @@
#include <uhd/usrp/usrp.h>
#include "uhd.h"
#include "../libdebug/debug.h"
#include "../liboptions/options.h"
/* use to TX time stamp */
//#define TX_TIMESTAMP
@@ -246,7 +247,7 @@ int uhd_open(size_t channel, const char *_device_args, const char *_stream_args,
} else
tune_request.rf_freq_policy = UHD_TUNE_REQUEST_POLICY_AUTO;
tune_request.dsp_freq_policy = UHD_TUNE_REQUEST_POLICY_AUTO;
tune_request.args = strdup(_tune_args);
tune_request.args = options_strdup(_tune_args);
error = uhd_usrp_set_tx_freq(usrp, &tune_request, channel, &tune_result);
if (error) {
PDEBUG(DUHD, DEBUG_ERROR, "Failed to set TX frequency to %.0f Hz\n", tx_frequency);
@@ -291,7 +292,7 @@ int uhd_open(size_t channel, const char *_device_args, const char *_stream_args,
memset(&stream_args, 0, sizeof(stream_args));
stream_args.cpu_format = "fc32";
stream_args.otw_format = "sc16";
stream_args.args = strdup(_stream_args);
stream_args.args = options_strdup(_stream_args);
stream_args.channel_list = &channel;
stream_args.n_channels = 1;
error = uhd_usrp_get_tx_stream(usrp, &stream_args, tx_streamer);
@@ -434,7 +435,7 @@ int uhd_open(size_t channel, const char *_device_args, const char *_stream_args,
} else
tune_request.rf_freq_policy = UHD_TUNE_REQUEST_POLICY_AUTO;
tune_request.dsp_freq_policy = UHD_TUNE_REQUEST_POLICY_AUTO;
tune_request.args = strdup(_tune_args);
tune_request.args = options_strdup(_tune_args);
error = uhd_usrp_set_rx_freq(usrp, &tune_request, channel, &tune_result);
if (error) {
PDEBUG(DUHD, DEBUG_ERROR, "Failed to set RX frequency to %.0f Hz\n", rx_frequency);
@@ -479,7 +480,7 @@ int uhd_open(size_t channel, const char *_device_args, const char *_stream_args,
memset(&stream_args, 0, sizeof(stream_args));
stream_args.cpu_format = "fc32";
stream_args.otw_format = "sc16";
stream_args.args = strdup(_stream_args);
stream_args.args = options_strdup(_stream_args);
stream_args.channel_list = &channel;
stream_args.n_channels = 1;
error = uhd_usrp_get_rx_stream(usrp, &stream_args, rx_streamer);