diff options
| author | christos <christos@NetBSD.org> | 2022-10-30 19:11:31 +0000 |
|---|---|---|
| committer | christos <christos@NetBSD.org> | 2022-10-30 19:11:31 +0000 |
| commit | 0a0d5a7574d217dd67342c93e8f61a43a6e96301 (patch) | |
| tree | 6cacca829db1512d1578c999afd6fb6e1a806277 /lib/libedit/read.c | |
| parent | c9cb6a172f424ed861b0a67f392acbbe805e82eb (diff) | |
improvements in malloc/free handling.
Diffstat (limited to 'lib/libedit/read.c')
| -rw-r--r-- | lib/libedit/read.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/lib/libedit/read.c b/lib/libedit/read.c index a49a304de97..8026ca4a209 100644 --- a/lib/libedit/read.c +++ b/lib/libedit/read.c @@ -1,4 +1,4 @@ -/* $NetBSD: read.c,v 1.107 2021/08/15 10:08:41 christos Exp $ */ +/* $NetBSD: read.c,v 1.108 2022/10/30 19:11:31 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)read.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: read.c,v 1.107 2021/08/15 10:08:41 christos Exp $"); +__RCSID("$NetBSD: read.c,v 1.108 2022/10/30 19:11:31 christos Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -89,28 +89,31 @@ read_init(EditLine *el) return -1; ma = &el->el_read->macros; - if ((ma->macro = el_calloc(EL_MAXMACRO, sizeof(*ma->macro))) == NULL) { - free(el->el_read); - return -1; - } + if ((ma->macro = el_calloc(EL_MAXMACRO, sizeof(*ma->macro))) == NULL) + goto out; ma->level = -1; ma->offset = 0; /* builtin read_char */ el->el_read->read_char = read_char; return 0; +out: + read_end(el); + return -1; } /* el_read_end(): * Free the data structures used by the read stuff. */ libedit_private void -read_end(struct el_read_t *el_read) +read_end(EditLine *el) { - read_clearmacros(&el_read->macros); - el_free(el_read->macros.macro); - el_read->macros.macro = NULL; - el_free(el_read); + + read_clearmacros(&el->el_read->macros); + el_free(el->el_read->macros.macro); + el->el_read->macros.macro = NULL; + el_free(el->el_read); + el->el_read = NULL; } /* el_read_setfn(): |
