#include "common.h"
#include "util/log.h"
+#include "util/cleanup.h"
#ifdef HAVE_SYSTEMD
#include <systemd/sd-id128.h>
{
struct connect_args cargs;
bool found = false;
- char *path, *addr;
+ char *path = NULL, *addr;
int ret;
bool persistent = true;
free(cargs.traddr);
free(cargs.trsvcid);
free(cargs.host_traddr);
+ free(addr);
+ free(path);
return found;
}
return cargs;
}
-static void free_connect_args(struct connect_args *cargs)
+static void destruct_connect_args(struct connect_args *cargs)
{
free(cargs->subsysnqn);
free(cargs->transport);
free(cargs->traddr);
free(cargs->trsvcid);
free(cargs->host_traddr);
+}
+
+static void free_connect_args(struct connect_args *cargs)
+{
+ destruct_connect_args(cargs);
free(cargs);
}
static bool cargs_match_found(struct nvmf_disc_rsp_page_entry *entry)
{
- struct connect_args cargs = {};
+ struct connect_args cargs __cleanup__(destruct_connect_args) = { NULL, };
struct connect_args *c = tracked_ctrls;
cargs.traddr = strdup(entry->traddr);
cfg.hostid = nvme_get_ctrl_attr(path, "hostid");
}
+static DEFINE_CLEANUP_FUNC(cleanup_log, struct nvmf_disc_rsp_page_hdr *, free);
+
static int do_discover(char *argstr, bool connect, enum nvme_print_flags flags)
{
- struct nvmf_disc_rsp_page_hdr *log = NULL;
+ struct nvmf_disc_rsp_page_hdr *log __cleanup__(cleanup_log) = NULL;
char *dev_name;
int instance, numrec = 0, ret, err;
int status = 0;
const struct argconfig_commandline_options *opts, bool connect)
{
FILE *f;
- char line[256], *ptr, *args, **argv;
+ char line[256], *ptr, *all_args, *args, **argv;
int argc, err, ret = 0;
f = fopen(PATH_NVMF_DISC, "r");
ret = -ENOMEM;
goto out;
}
+ all_args = args;
argv = calloc(MAX_DISC_ARGS, BUF_SIZE);
if (!argv) {
ret = err;
free_and_continue:
- free(args);
+ free(all_args);
free(argv);
}