diff --git a/glnx-errors.h b/glnx-errors.h
index b891f9637063ac44d0fdd60616164cdbca084e16..2f6b9628f24a28e5dc0df8061310bc34cd8c42df 100644
--- a/glnx-errors.h
+++ b/glnx-errors.h
@@ -128,9 +128,7 @@ glnx_throw_errno_prefix (GError **error, const char *fmt, ...)
 
 #define glnx_set_prefix_error_from_errno(error, format, args...)  \
   do {                                                            \
-    glnx_set_error_from_errno (error);                            \
-    g_prefix_error (error, format, args);                         \
+    glnx_throw_errno_prefix (error, format, args);                \
   } while (0);
 
-
 G_END_DECLS
diff --git a/tests/test-libglnx-errors.c b/tests/test-libglnx-errors.c
index 7c7459cb63d31cdd09ce029ed14efdae69db7a8c..7950244fce657f0cec8db843a4dcdc46fa4659a0 100644
--- a/tests/test-libglnx-errors.c
+++ b/tests/test-libglnx-errors.c
@@ -79,9 +79,15 @@ test_error_errno (void)
   fd = open (noent_path, O_RDONLY);
   if (fd < 0)
     {
+      g_autofree char *expected_prefix = g_strdup_printf ("Failed to open %s", noent_path);
       g_assert (!glnx_throw_errno_prefix (&error, "Failed to open %s", noent_path));
       g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND);
-      g_assert (g_str_has_prefix (error->message, glnx_strjoina ("Failed to open ", noent_path)));
+      g_assert (g_str_has_prefix (error->message, expected_prefix));
+      g_clear_error (&error);
+      /* And test the legacy wrapper */
+      glnx_set_prefix_error_from_errno (&error, "Failed to open %s", noent_path);
+      g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND);
+      g_assert (g_str_has_prefix (error->message, expected_prefix));
       g_clear_error (&error);
     }
   else