aboutsummaryrefslogtreecommitdiff
path: root/libctf/testsuite/libctf-lookup
diff options
context:
space:
mode:
Diffstat (limited to 'libctf/testsuite/libctf-lookup')
-rw-r--r--libctf/testsuite/libctf-lookup/add-to-opened.c15
-rw-r--r--libctf/testsuite/libctf-lookup/struct-iteration-ctf.c7
-rw-r--r--libctf/testsuite/libctf-lookup/struct-iteration.c18
-rw-r--r--libctf/testsuite/libctf-lookup/struct-iteration.lk10
4 files changed, 43 insertions, 7 deletions
diff --git a/libctf/testsuite/libctf-lookup/add-to-opened.c b/libctf/testsuite/libctf-lookup/add-to-opened.c
index 96629af..700257e 100644
--- a/libctf/testsuite/libctf-lookup/add-to-opened.c
+++ b/libctf/testsuite/libctf-lookup/add-to-opened.c
@@ -15,7 +15,7 @@ main (int argc, char *argv[])
ctf_encoding_t en = { CTF_INT_SIGNED, 0, sizeof (int) };
unsigned char *ctf_written;
size_t size;
- int err;
+ int err = 666;
if (argc != 2)
{
@@ -25,9 +25,18 @@ main (int argc, char *argv[])
if ((ctf = ctf_open (argv[1], NULL, &err)) == NULL)
goto open_err;
+
+ /* The error int should be reset on success as well as on error. */
+ if (err != 0)
+ goto err_err;
+
+ err = 666;
if ((fp = ctf_dict_open (ctf, NULL, &err)) == NULL)
goto open_err;
+ if (err != 0)
+ goto err_err;
+
/* Check that various modifications to already-written types
are prohibited. */
@@ -145,4 +154,8 @@ main (int argc, char *argv[])
open_err:
fprintf (stderr, "%s: cannot open: %s\n", argv[0], ctf_errmsg (err));
return 1;
+
+ err_err:
+ fprintf (stderr, "%s: open error not set to success on success\n", argv[0]);
+ return 1;
}
diff --git a/libctf/testsuite/libctf-lookup/struct-iteration-ctf.c b/libctf/testsuite/libctf-lookup/struct-iteration-ctf.c
index 7df67ad..0a50d2c 100644
--- a/libctf/testsuite/libctf-lookup/struct-iteration-ctf.c
+++ b/libctf/testsuite/libctf-lookup/struct-iteration-ctf.c
@@ -6,12 +6,12 @@ struct foo_t
size_t bar;
const char *baz;
struct foo_t *self;
- union
+ const volatile union
{
double should_not_appear;
char *nor_should_this;
} named;
- struct
+ volatile const struct
{
long unnamed_sub_member;
union
@@ -19,6 +19,9 @@ struct foo_t
double one_more_level;
long yes_really_one_more;
};
+ struct {
+ int and_finally;
+ };
};
struct {}; /* Empty ones */
union {};
diff --git a/libctf/testsuite/libctf-lookup/struct-iteration.c b/libctf/testsuite/libctf-lookup/struct-iteration.c
index b240864..fd89ca7 100644
--- a/libctf/testsuite/libctf-lookup/struct-iteration.c
+++ b/libctf/testsuite/libctf-lookup/struct-iteration.c
@@ -51,11 +51,29 @@ main (int argc, char *argv[])
while ((offset = ctf_member_next (fp, type, &i, &name, &membtype,
CTF_MN_RECURSE)) >= 0)
{
+ ctf_membinfo_t memb;
char *type_name = ctf_type_aname (fp, membtype);
printf ("next test: %s, offset %zx, has type %lx/%s\n",
name, offset, membtype, type_name);
free (type_name);
+
+ /* Check that we can get the same member via ctf_member_info too. */
+ if (name[0] != '\0')
+ {
+ if (ctf_member_info (fp, type, name, &memb) != 0)
+ {
+ fprintf (stderr, "Cannot get member info for %s: %s\n",
+ name, ctf_errmsg (ctf_errno (fp)));
+ exit (1);
+ }
+ if (memb.ctm_offset != offset || memb.ctm_type != membtype)
+ {
+ fprintf (stderr, "ctf_member_info versus iteration comparison "
+ "failure: types %lx/%lx, offsets %zx/%lx\n",
+ membtype, memb.ctm_type, offset, memb.ctm_offset);
+ }
+ }
}
if (ctf_errno (fp) != ECTF_NEXT_END)
goto nerr;
diff --git a/libctf/testsuite/libctf-lookup/struct-iteration.lk b/libctf/testsuite/libctf-lookup/struct-iteration.lk
index fd64454..aecffd4 100644
--- a/libctf/testsuite/libctf-lookup/struct-iteration.lk
+++ b/libctf/testsuite/libctf-lookup/struct-iteration.lk
@@ -4,8 +4,8 @@ iter test: foo, offset [0-9a-f]*, has type [0-9a-f]*/int
iter test: bar, offset [0-9a-f]*, has type [0-9a-f]*/size_t
iter test: baz, offset [0-9a-f]*, has type [0-9a-f]*/const char \*
iter test: self, offset [0-9a-f]*, has type [0-9a-f]*/struct foo_t \*
-iter test: named, offset [0-9a-f]*, has type [0-9a-f]*/union
-iter test: , offset [0-9a-f]*, has type [0-9a-f]*/struct
+iter test: named, offset [0-9a-f]*, has type [0-9a-f]*/volatile const union
+iter test: , offset [0-9a-f]*, has type [0-9a-f]*/volatile const struct
iter test: , offset [0-9a-f]*, has type [0-9a-f]*/struct
iter test: , offset [0-9a-f]*, has type [0-9a-f]*/union
iter test: after_the_end, offset [0-9a-f]*, has type [0-9a-f]*/int
@@ -13,12 +13,14 @@ next test: foo, offset [0-9a-f]*, has type [0-9a-f]*/int
next test: bar, offset [0-9a-f]*, has type [0-9a-f]*/size_t
next test: baz, offset [0-9a-f]*, has type [0-9a-f]*/const char \*
next test: self, offset [0-9a-f]*, has type [0-9a-f]*/struct foo_t \*
-next test: named, offset [0-9a-f]*, has type [0-9a-f]*/union
-next test: , offset [0-9a-f]*, has type [0-9a-f]*/struct
+next test: named, offset [0-9a-f]*, has type [0-9a-f]*/volatile const union
+next test: , offset [0-9a-f]*, has type [0-9a-f]*/volatile const struct
next test: unnamed_sub_member, offset [0-9a-f]*, has type [0-9a-f]*/long int
next test: , offset [0-9a-f]*, has type [0-9a-f]*/union
next test: one_more_level, offset [0-9a-f]*, has type [0-9a-f]*/double
next test: yes_really_one_more, offset [0-9a-f]*, has type [0-9a-f]*/long int
next test: , offset [0-9a-f]*, has type [0-9a-f]*/struct
+next test: and_finally, offset [0-9a-f]*, has type [0-9a-f]*/int
+next test: , offset [0-9a-f]*, has type [0-9a-f]*/struct
next test: , offset [0-9a-f]*, has type [0-9a-f]*/union
next test: after_the_end, offset [0-9a-f]*, has type [0-9a-f]*/int