diff options
author | marcel <marcel@FreeBSD.org> | 2008-11-30 23:38:44 +0000 |
---|---|---|
committer | marcel <marcel@FreeBSD.org> | 2008-11-30 23:38:44 +0000 |
commit | 875a18edd56204d8fe7279f385d4125c1bcb5e2c (patch) | |
tree | 2c3fa575436fba2a9b52c2bac95e14797fce21b1 /sbin/geom | |
parent | dd5439f8c603a0e80e1b5d34f5b7fa4d33b23516 (diff) | |
download | FreeBSD-src-875a18edd56204d8fe7279f385d4125c1bcb5e2c.zip FreeBSD-src-875a18edd56204d8fe7279f385d4125c1bcb5e2c.tar.gz |
Call gctl_free() after we processed the error string.
It's being freed as part of the request.
Diffstat (limited to 'sbin/geom')
-rw-r--r-- | sbin/geom/class/part/geom_part.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/sbin/geom/class/part/geom_part.c b/sbin/geom/class/part/geom_part.c index 74cc829..7009cb9 100644 --- a/sbin/geom/class/part/geom_part.c +++ b/sbin/geom/class/part/geom_part.c @@ -512,23 +512,29 @@ gpart_issue(struct gctl_req *req, unsigned int fl __unused) char buf[4096]; char *errmsg; const char *errstr; - int error; + int error, status; bzero(buf, sizeof(buf)); gctl_rw_param(req, "output", sizeof(buf), buf); errstr = gctl_issue(req); - gctl_free(req); if (errstr == NULL || errstr[0] == '\0') { if (buf[0] != '\0') printf("%s", buf); - exit(EXIT_SUCCESS); + status = EXIT_SUCCESS; + goto done; } error = strtol(errstr, &errmsg, 0); while (errmsg[0] == ' ') errmsg++; if (errmsg[0] != '\0') - errc(EXIT_FAILURE, error, "%s", errmsg); + warnc(error, "%s", errmsg); else - errc(EXIT_FAILURE, error, NULL); + warnc(error, NULL); + + status = EXIT_FAILURE; + + done: + gctl_free(req); + exit(status); } |