nbd: Use g_autofree in a few places

Thanks to our recent move to use glib's g_autofree, I can join the
bandwagon.  Getting rid of gotos is fun ;)

There are probably more places where we could register cleanup
functions and get rid of more gotos; this patch just focuses on the
labels that existed merely to call g_free.

Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20190824172813.29720-2-eblake@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
This commit is contained in:
Eric Blake 2019-08-24 12:28:12 -05:00
parent 61cc872456
commit df18c04edf
3 changed files with 15 additions and 30 deletions

View File

@ -1374,7 +1374,7 @@ static bool nbd_has_filename_options_conflict(QDict *options, Error **errp)
static void nbd_parse_filename(const char *filename, QDict *options, static void nbd_parse_filename(const char *filename, QDict *options,
Error **errp) Error **errp)
{ {
char *file; g_autofree char *file = NULL;
char *export_name; char *export_name;
const char *host_spec; const char *host_spec;
const char *unixpath; const char *unixpath;
@ -1396,7 +1396,7 @@ static void nbd_parse_filename(const char *filename, QDict *options,
export_name = strstr(file, EN_OPTSTR); export_name = strstr(file, EN_OPTSTR);
if (export_name) { if (export_name) {
if (export_name[strlen(EN_OPTSTR)] == 0) { if (export_name[strlen(EN_OPTSTR)] == 0) {
goto out; return;
} }
export_name[0] = 0; /* truncate 'file' */ export_name[0] = 0; /* truncate 'file' */
export_name += strlen(EN_OPTSTR); export_name += strlen(EN_OPTSTR);
@ -1407,11 +1407,11 @@ static void nbd_parse_filename(const char *filename, QDict *options,
/* extract the host_spec - fail if it's not nbd:... */ /* extract the host_spec - fail if it's not nbd:... */
if (!strstart(file, "nbd:", &host_spec)) { if (!strstart(file, "nbd:", &host_spec)) {
error_setg(errp, "File name string for NBD must start with 'nbd:'"); error_setg(errp, "File name string for NBD must start with 'nbd:'");
goto out; return;
} }
if (!*host_spec) { if (!*host_spec) {
goto out; return;
} }
/* are we a UNIX or TCP socket? */ /* are we a UNIX or TCP socket? */
@ -1431,9 +1431,6 @@ static void nbd_parse_filename(const char *filename, QDict *options,
out_inet: out_inet:
qapi_free_InetSocketAddress(addr); qapi_free_InetSocketAddress(addr);
} }
out:
g_free(file);
} }
static bool nbd_process_legacy_socket_options(QDict *output_options, static bool nbd_process_legacy_socket_options(QDict *output_options,

View File

@ -247,12 +247,11 @@ static int nbd_handle_reply_err(QIOChannel *ioc, NBDOptionReply *reply,
static int nbd_receive_list(QIOChannel *ioc, char **name, char **description, static int nbd_receive_list(QIOChannel *ioc, char **name, char **description,
Error **errp) Error **errp)
{ {
int ret = -1;
NBDOptionReply reply; NBDOptionReply reply;
uint32_t len; uint32_t len;
uint32_t namelen; uint32_t namelen;
char *local_name = NULL; g_autofree char *local_name = NULL;
char *local_desc = NULL; g_autofree char *local_desc = NULL;
int error; int error;
if (nbd_receive_option_reply(ioc, NBD_OPT_LIST, &reply, errp) < 0) { if (nbd_receive_option_reply(ioc, NBD_OPT_LIST, &reply, errp) < 0) {
@ -298,7 +297,7 @@ static int nbd_receive_list(QIOChannel *ioc, char **name, char **description,
local_name = g_malloc(namelen + 1); local_name = g_malloc(namelen + 1);
if (nbd_read(ioc, local_name, namelen, "export name", errp) < 0) { if (nbd_read(ioc, local_name, namelen, "export name", errp) < 0) {
nbd_send_opt_abort(ioc); nbd_send_opt_abort(ioc);
goto out; return -1;
} }
local_name[namelen] = '\0'; local_name[namelen] = '\0';
len -= namelen; len -= namelen;
@ -306,24 +305,17 @@ static int nbd_receive_list(QIOChannel *ioc, char **name, char **description,
local_desc = g_malloc(len + 1); local_desc = g_malloc(len + 1);
if (nbd_read(ioc, local_desc, len, "export description", errp) < 0) { if (nbd_read(ioc, local_desc, len, "export description", errp) < 0) {
nbd_send_opt_abort(ioc); nbd_send_opt_abort(ioc);
goto out; return -1;
} }
local_desc[len] = '\0'; local_desc[len] = '\0';
} }
trace_nbd_receive_list(local_name, local_desc ?: ""); trace_nbd_receive_list(local_name, local_desc ?: "");
*name = local_name; *name = g_steal_pointer(&local_name);
local_name = NULL;
if (description) { if (description) {
*description = local_desc; *description = g_steal_pointer(&local_desc);
local_desc = NULL;
} }
ret = 1; return 1;
out:
g_free(local_name);
g_free(local_desc);
return ret;
} }

View File

@ -206,7 +206,7 @@ static int GCC_FMT_ATTR(4, 0)
nbd_negotiate_send_rep_verr(NBDClient *client, uint32_t type, nbd_negotiate_send_rep_verr(NBDClient *client, uint32_t type,
Error **errp, const char *fmt, va_list va) Error **errp, const char *fmt, va_list va)
{ {
char *msg; g_autofree char *msg = NULL;
int ret; int ret;
size_t len; size_t len;
@ -216,18 +216,14 @@ nbd_negotiate_send_rep_verr(NBDClient *client, uint32_t type,
trace_nbd_negotiate_send_rep_err(msg); trace_nbd_negotiate_send_rep_err(msg);
ret = nbd_negotiate_send_rep_len(client, type, len, errp); ret = nbd_negotiate_send_rep_len(client, type, len, errp);
if (ret < 0) { if (ret < 0) {
goto out; return ret;
} }
if (nbd_write(client->ioc, msg, len, errp) < 0) { if (nbd_write(client->ioc, msg, len, errp) < 0) {
error_prepend(errp, "write failed (error message): "); error_prepend(errp, "write failed (error message): ");
ret = -EIO; return -EIO;
} else {
ret = 0;
} }
out: return 0;
g_free(msg);
return ret;
} }
/* Send an error reply. /* Send an error reply.