diff options
Diffstat (limited to 'libctf/testsuite/libctf-lookup')
-rw-r--r-- | libctf/testsuite/libctf-lookup/add-to-opened.c | 15 | ||||
-rw-r--r-- | libctf/testsuite/libctf-lookup/struct-iteration-ctf.c | 7 | ||||
-rw-r--r-- | libctf/testsuite/libctf-lookup/struct-iteration.c | 18 | ||||
-rw-r--r-- | libctf/testsuite/libctf-lookup/struct-iteration.lk | 10 |
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 |