aboutsummaryrefslogtreecommitdiff
path: root/libctf/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'libctf/testsuite')
-rw-r--r--libctf/testsuite/libctf-lookup/add-to-opened.c15
-rw-r--r--libctf/testsuite/libctf-writable/ctf-compressed.c4
-rw-r--r--libctf/testsuite/libctf-writable/ctf-nonroot-addition.c38
-rw-r--r--libctf/testsuite/libctf-writable/ctf-nonroot-addition.lk1
-rw-r--r--libctf/testsuite/libctf-writable/ctf-nonroot-linking.c11
5 files changed, 57 insertions, 12 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-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-addition.c b/libctf/testsuite/libctf-writable/ctf-nonroot-addition.c
new file mode 100644
index 0000000..94ce05c
--- /dev/null
+++ b/libctf/testsuite/libctf-writable/ctf-nonroot-addition.c
@@ -0,0 +1,38 @@
+/* Make sure adding a non-root-visible type after adding a root-visible forward
+ adds a new type rather than promoting and returning the existing one. */
+
+#include <ctf-api.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main (int argc, char *argv[])
+{
+ ctf_dict_t *fp;
+ ctf_id_t root, nonroot;
+ int err;
+
+ if ((fp = ctf_create (&err)) == NULL)
+ {
+ fprintf (stderr, "Cannot create: %s\n", ctf_errmsg (err));
+ return 1;
+ }
+
+ if ((root = ctf_add_forward (fp, CTF_ADD_ROOT, "foo", CTF_K_ENUM)) == CTF_ERR)
+ goto add_err;
+
+ if ((nonroot = ctf_add_enum (fp, CTF_ADD_NONROOT, "foo")) == CTF_ERR)
+ goto add_err;
+
+ if (nonroot == root)
+ fprintf (stderr, "Non-root addition should not promote root-visible forwards\n");
+ else
+ printf ("All done.\n");
+
+ ctf_dict_close (fp);
+ return 0;
+
+ add_err:
+ fprintf (stderr, "Cannot add: %s\n", ctf_errmsg (ctf_errno (fp)));
+}
diff --git a/libctf/testsuite/libctf-writable/ctf-nonroot-addition.lk b/libctf/testsuite/libctf-writable/ctf-nonroot-addition.lk
new file mode 100644
index 0000000..b944f73
--- /dev/null
+++ b/libctf/testsuite/libctf-writable/ctf-nonroot-addition.lk
@@ -0,0 +1 @@
+All done.
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
}