aboutsummaryrefslogtreecommitdiff
path: root/cddl/contrib/opensolaris/lib/libdtrace/common/dt_provider.c
diff options
context:
space:
mode:
Diffstat (limited to 'cddl/contrib/opensolaris/lib/libdtrace/common/dt_provider.c')
-rw-r--r--cddl/contrib/opensolaris/lib/libdtrace/common/dt_provider.c37
1 files changed, 18 insertions, 19 deletions
diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_provider.c b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_provider.c
index 0f1bfe07b7b1..6acb86b155ba 100644
--- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_provider.c
+++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_provider.c
@@ -520,6 +520,8 @@ dt_probe_destroy(dt_probe_t *prp)
for (pip = prp->pr_inst; pip != NULL; pip = pip_next) {
pip_next = pip->pi_next;
+ dt_free(dtp, pip->pi_rname);
+ dt_free(dtp, pip->pi_fname);
dt_free(dtp, pip->pi_offs);
dt_free(dtp, pip->pi_enoffs);
dt_free(dtp, pip);
@@ -552,28 +554,18 @@ dt_probe_define(dt_provider_t *pvp, dt_probe_t *prp,
if ((pip = dt_zalloc(dtp, sizeof (*pip))) == NULL)
return (-1);
- if ((pip->pi_offs = dt_zalloc(dtp,
- sizeof (uint32_t))) == NULL) {
- dt_free(dtp, pip);
- return (-1);
- }
+ if ((pip->pi_offs = dt_zalloc(dtp, sizeof (uint32_t))) == NULL)
+ goto nomem;
if ((pip->pi_enoffs = dt_zalloc(dtp,
- sizeof (uint32_t))) == NULL) {
- dt_free(dtp, pip->pi_offs);
- dt_free(dtp, pip);
- return (-1);
- }
+ sizeof (uint32_t))) == NULL)
+ goto nomem;
- (void) strlcpy(pip->pi_fname, fname, sizeof (pip->pi_fname));
- if (rname != NULL) {
- if (strlen(rname) + 1 > sizeof (pip->pi_rname)) {
- dt_free(dtp, pip->pi_offs);
- dt_free(dtp, pip);
- return (dt_set_errno(dtp, EDT_COMPILER));
- }
- (void) strcpy(pip->pi_rname, rname);
- }
+ if ((pip->pi_fname = strdup(fname)) == NULL)
+ goto nomem;
+
+ if (rname != NULL && (pip->pi_rname = strdup(rname)) == NULL)
+ goto nomem;
pip->pi_noffs = 0;
pip->pi_maxoffs = 1;
@@ -618,6 +610,13 @@ dt_probe_define(dt_provider_t *pvp, dt_probe_t *prp,
(*offs)[(*noffs)++] = offset;
return (0);
+
+nomem:
+ dt_free(dtp, pip->pi_fname);
+ dt_free(dtp, pip->pi_enoffs);
+ dt_free(dtp, pip->pi_offs);
+ dt_free(dtp, pip);
+ return (dt_set_errno(dtp, EDT_NOMEM));
}
/*