diff options
Diffstat (limited to 'libctf/testsuite/libctf-writable')
4 files changed, 82 insertions, 11 deletions
diff --git a/libctf/testsuite/libctf-writable/ctf-compressed.c b/libctf/testsuite/libctf-writable/ctf-compressed.c index 4769cdb..646b603 100644 --- a/libctf/testsuite/libctf-writable/ctf-compressed.c +++ b/libctf/testsuite/libctf-writable/ctf-compressed.c @@ -119,10 +119,14 @@ main (int argc, char *argv[]) /* Dump the header of each archive member, and search for CTF_F_COMPRESS in the resulting dump. */ + err = 666; while ((dump_fp = ctf_archive_next (final_arc, &i, NULL, 0, &err)) != NULL) { char *dumpstr; + if (err != 0) + fprintf (stderr, "err not set to success on success\n"); + while ((dumpstr = ctf_dump (dump_fp, &dump_state, CTF_SECT_HEADER, NULL, NULL)) != NULL) { diff --git a/libctf/testsuite/libctf-writable/ctf-nonroot-linking.c b/libctf/testsuite/libctf-writable/ctf-nonroot-linking.c index 6edd189..67b85eb 100644 --- a/libctf/testsuite/libctf-writable/ctf-nonroot-linking.c +++ b/libctf/testsuite/libctf-writable/ctf-nonroot-linking.c @@ -24,16 +24,6 @@ main (int argc, char *argv[]) ctf_next_t *i = NULL; int err; - /* Linking does not currently work on mingw because of an unreliable tmpfile - implementation on that platform (see - https://github.com/msys2/MINGW-packages/issues/18878). Simply skip for - now. */ - -#ifdef __MINGW32__ - printf ("UNSUPPORTED: platform bug breaks ctf_link\n"); - return 0; -#else - if ((fp = ctf_create (&err)) == NULL) goto create_err; @@ -123,5 +113,4 @@ main (int argc, char *argv[]) link_err: fprintf (stderr, "Cannot link: %s\n", ctf_errmsg (ctf_errno (fp))); return 1; -#endif } diff --git a/libctf/testsuite/libctf-writable/slice-of-slice.c b/libctf/testsuite/libctf-writable/slice-of-slice.c new file mode 100644 index 0000000..9bacfe2 --- /dev/null +++ b/libctf/testsuite/libctf-writable/slice-of-slice.c @@ -0,0 +1,77 @@ +/* Make sure that slices of slices are properly resolved. If they're not, both + population and lookup will fail. */ + +#include <ctf-api.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +int main (void) +{ + ctf_dict_t *fp; + ctf_id_t base; + ctf_id_t slice; + ctf_id_t slice2; + ctf_encoding_t long_encoding = { CTF_INT_SIGNED, 0, sizeof (long) }; + ctf_encoding_t foo; + int val; + int err; + + if ((fp = ctf_create (&err)) == NULL) + { + fprintf (stderr, "Cannot create: %s\n", ctf_errmsg (err)); + return 1; + } + + if ((base = ctf_add_enum_encoded (fp, CTF_ADD_ROOT, "enom", &long_encoding)) + == CTF_ERR) + goto err; + + if (ctf_add_enumerator (fp, base, "a", 1) < 0 || + ctf_add_enumerator (fp, base, "b", 0) < 0) + goto err; + + foo.cte_format = 0; + foo.cte_bits = 4; + foo.cte_offset = 4; + if ((slice = ctf_add_slice (fp, CTF_ADD_ROOT, base, &foo)) == CTF_ERR) + goto err; + + foo.cte_bits = 6; + foo.cte_offset = 2; + if ((slice2 = ctf_add_slice (fp, CTF_ADD_ROOT, slice, &foo)) == CTF_ERR) + goto err; + + if (ctf_add_variable (fp, "foo", slice) < 0) + goto err; + + if (ctf_enum_value (fp, slice, "a", &val) < 0) + { + fprintf (stderr, "Cannot look up value of sliced enum: %s\n", ctf_errmsg (ctf_errno (fp))); + return 1; + } + if (val != 1) + { + fprintf (stderr, "sliced enum value is wrong\n"); + return 1; + } + + if (ctf_enum_value (fp, slice2, "b", &val) < 0) + { + fprintf (stderr, "Cannot look up value of sliced sliced enum: %s\n", ctf_errmsg (ctf_errno (fp))); + return 1; + } + if (val != 0) + { + fprintf (stderr, "sliced sliced enum value is wrong\n"); + return 1; + } + + ctf_dict_close (fp); + fprintf (stderr, "All done.\n"); + return 0; + + err: + fprintf (stderr, "cannot populate: %s\n", ctf_errmsg (ctf_errno (fp))); + return 1; +} diff --git a/libctf/testsuite/libctf-writable/slice-of-slice.lk b/libctf/testsuite/libctf-writable/slice-of-slice.lk new file mode 100644 index 0000000..b944f73 --- /dev/null +++ b/libctf/testsuite/libctf-writable/slice-of-slice.lk @@ -0,0 +1 @@ +All done. |