svn commit: r281474 - stable/10/cddl/contrib/opensolaris/common/ctf
Mark Johnston
markj at FreeBSD.org
Sun Apr 12 21:45:35 UTC 2015
Author: markj
Date: Sun Apr 12 21:45:34 2015
New Revision: 281474
URL: https://svnweb.freebsd.org/changeset/base/281474
Log:
MFC r279862:
Fix a possible infinite loop in ctf_discard().
MFC r279864:
Use CTF_TYPE_TO_INDEX when comparing type indices to the dynamic type
threshold.
MFC r279869:
If the destination container contains only a forward declaration for the
input type in ctf_add_type(), search its dynamic type list before adding
a new type.
Modified:
stable/10/cddl/contrib/opensolaris/common/ctf/ctf_create.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/cddl/contrib/opensolaris/common/ctf/ctf_create.c
==============================================================================
--- stable/10/cddl/contrib/opensolaris/common/ctf/ctf_create.c Sun Apr 12 21:38:18 2015 (r281473)
+++ stable/10/cddl/contrib/opensolaris/common/ctf/ctf_create.c Sun Apr 12 21:45:34 2015 (r281474)
@@ -583,10 +583,10 @@ ctf_discard(ctf_file_t *fp)
return (0); /* no update required */
for (dtd = ctf_list_prev(&fp->ctf_dtdefs); dtd != NULL; dtd = ntd) {
- if (dtd->dtd_type <= fp->ctf_dtoldid)
+ ntd = ctf_list_prev(dtd);
+ if (CTF_TYPE_TO_INDEX(dtd->dtd_type) <= fp->ctf_dtoldid)
continue; /* skip types that have been committed */
- ntd = ctf_list_prev(dtd);
ctf_dtd_delete(fp, dtd);
}
@@ -1313,10 +1313,13 @@ ctf_add_type(ctf_file_t *dst_fp, ctf_fil
* unless dst_type is a forward declaration and src_type is a struct,
* union, or enum (i.e. the definition of the previous forward decl).
*/
- if (dst_type != CTF_ERR && dst_kind != kind && (
- dst_kind != CTF_K_FORWARD || (kind != CTF_K_ENUM &&
- kind != CTF_K_STRUCT && kind != CTF_K_UNION)))
- return (ctf_set_errno(dst_fp, ECTF_CONFLICT));
+ if (dst_type != CTF_ERR && dst_kind != kind) {
+ if (dst_kind != CTF_K_FORWARD || (kind != CTF_K_ENUM &&
+ kind != CTF_K_STRUCT && kind != CTF_K_UNION))
+ return (ctf_set_errno(dst_fp, ECTF_CONFLICT));
+ else
+ dst_type = CTF_ERR;
+ }
/*
* If the non-empty name was not found in the appropriate hash, search
@@ -1328,7 +1331,7 @@ ctf_add_type(ctf_file_t *dst_fp, ctf_fil
*/
if (dst_type == CTF_ERR && name[0] != '\0') {
for (dtd = ctf_list_prev(&dst_fp->ctf_dtdefs); dtd != NULL &&
- dtd->dtd_type > dst_fp->ctf_dtoldid;
+ CTF_TYPE_TO_INDEX(dtd->dtd_type) > dst_fp->ctf_dtoldid;
dtd = ctf_list_prev(dtd)) {
if (CTF_INFO_KIND(dtd->dtd_data.ctt_info) == kind &&
dtd->dtd_name != NULL &&
More information about the svn-src-stable
mailing list