poke-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] ios: replace `strerror' with `strerror_r' for dev-mmap


From: Mohammad-Reza Nabipoor
Subject: [PATCH] ios: replace `strerror' with `strerror_r' for dev-mmap
Date: Sun, 25 Feb 2024 23:39:35 +0100

2024-02-25  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>

        * bootstrap.conf (libpoke_modules): Add `strerror_r-posix'.
        * libpoke/ios-dev-mmap.c (ios_dev_mmap_open): Replace `strerror'
        with `strerror_r'.
        (ios_dev_mmap_flush): Likewise.
        * testsuite/poke.cmd/mmap-diag-1.pk: New test.
        * testsuite/Makefile.am (EXTRA_DIST): Add new test.
---

Hi,

@jemarch
I'm not sure using "Invalid argument" text in the tests is portable enough.
We can drop the test.  The rest of the patch should be OK.

@bhaible
In `testsuite/poke.cmd/mmap-diag-1.pk', I'm matching on string
"Invalid argument" for invalid invocation of `open', do you think expecting
all platforms to return EINVAL and all strerror_r implementations to return
"Invalid argument" string is OK?


Regards,
Mohammad-Reza



 ChangeLog                         |  9 +++++++++
 bootstrap.conf                    |  1 +
 libpoke/ios-dev-mmap.c            | 27 ++++++++++++++++++++-------
 testsuite/Makefile.am             |  1 +
 testsuite/poke.cmd/mmap-diag-1.pk |  4 ++++
 5 files changed, 35 insertions(+), 7 deletions(-)
 create mode 100644 testsuite/poke.cmd/mmap-diag-1.pk

diff --git a/ChangeLog b/ChangeLog
index 5c038cda..df7f35f8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2024-02-25  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
+
+       * bootstrap.conf (libpoke_modules): Add `strerror_r-posix'.
+       * libpoke/ios-dev-mmap.c (ios_dev_mmap_open): Replace `strerror'
+       with `strerror_r'.
+       (ios_dev_mmap_flush): Likewise.
+       * testsuite/poke.cmd/mmap-diag-1.pk: New test.
+       * testsuite/Makefile.am (EXTRA_DIST): Add new test.
+
 2024-02-25  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
 
        * libpoke/pkl.c (pkl_resolve_module): Handle failure of `asprintf'.
diff --git a/bootstrap.conf b/bootstrap.conf
index 0934ebf6..127c5a4a 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -105,6 +105,7 @@ libpoke_modules="
   strchrnul
   streq
   string-buffer
+  strerror_r-posix
   strndup
   strtoull
   signal-h
diff --git a/libpoke/ios-dev-mmap.c b/libpoke/ios-dev-mmap.c
index 7650b795..02fd0025 100644
--- a/libpoke/ios-dev-mmap.c
+++ b/libpoke/ios-dev-mmap.c
@@ -199,8 +199,11 @@ ios_dev_mmap_open (const char *handler, uint64_t flags, 
int *error,
       fd = open (dev_map->filename, open_flags);
       if (fd == -1)
         {
+          char errbuf[128];
+
+          strerror_r (errno, errbuf, sizeof (errbuf));
           pk_printf ("Error in open of %s err: %s\n",
-                     dev_map->filename, strerror (errno));
+                     dev_map->filename, errbuf);
           goto err;
         }
       flags = mode_flags;
@@ -229,8 +232,11 @@ ios_dev_mmap_open (const char *handler, uint64_t flags, 
int *error,
         }
       if (fd == -1)
         {
+          char errbuf[128];
+
+          strerror_r (errno, errbuf, sizeof (errbuf));
           pk_printf ("Error in open of %s err: %s\n",
-                     dev_map->filename, strerror (errno));
+                     dev_map->filename, errbuf);
           goto err;
         }
     }
@@ -240,8 +246,10 @@ ios_dev_mmap_open (const char *handler, uint64_t flags, 
int *error,
   ret = fstat (fd, &st);
   if (ret == -1)
     {
-      pk_printf ("Error in fstat of %s err: %s\n",
-                 dev_map->filename, strerror (errno));
+      char errbuf[128];
+
+      strerror_r (errno, errbuf, sizeof (errbuf));
+      pk_printf ("Error in fstat of %s err: %s\n", dev_map->filename, errbuf);
       goto err;
     }
   if ((st.st_mode & S_IFMT) == S_IFREG)
@@ -261,9 +269,12 @@ ios_dev_mmap_open (const char *handler, uint64_t flags, 
int *error,
                         fd, dev_map->base);
   if (dev_map->addr == MAP_FAILED)
     {
+      char errbuf[128];
+
+      strerror_r (errno, errbuf, sizeof (errbuf));
       pk_printf ("Error in mmap of %s base: 0x%x len: 0x%x prot: 0x%x err: 
%s\n",
                  dev_map->filename, dev_map->base, dev_map->size,
-                 dev_map->prot, strerror (errno));
+                 dev_map->prot, errbuf);
       internal_error = IOD_EMMAP;
       goto err;
     }
@@ -435,9 +446,11 @@ ios_dev_mmap_flush (void *iod, ios_dev_off offset)
       ret = msync (dev_map->addr, dev_map->size, MS_SYNC);
       if (ret == -1)
         {
+          char errbuf[128];
+
+          strerror_r (errno, errbuf, sizeof (errbuf));
           pk_printf ("Error in msync of %s base: 0x%lx len: 0x%lx err: %s\n",
-                     dev_map->filename, dev_map->addr, dev_map->size,
-                     strerror (errno));
+                     dev_map->filename, dev_map->addr, dev_map->size, errbuf);
           return IOD_ERROR;
         }
     }
diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am
index abd33ed5..aca3f219 100644
--- a/testsuite/Makefile.am
+++ b/testsuite/Makefile.am
@@ -97,6 +97,7 @@ EXTRA_DIST = \
   poke.cmd/maps-alien-1.pk \
   poke.cmd/mmap-1.pk \
   poke.cmd/mmap-2.pk \
+  poke.cmd/mmap-diag-1.pk \
   poke.cmd/nbd-1.pk \
   poke.cmd/save-1.pk \
   poke.cmd/save-2.pk \
diff --git a/testsuite/poke.cmd/mmap-diag-1.pk 
b/testsuite/poke.cmd/mmap-diag-1.pk
new file mode 100644
index 00000000..b4c9aa8a
--- /dev/null
+++ b/testsuite/poke.cmd/mmap-diag-1.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command { try open ("mmap://0/0//dev/zero"); catch if E_io { printf 
"caught"; } } } */
+/* { dg-output "err: Invalid argument" } */
-- 
2.43.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]