Two more tweaks of the mountlist module:

2025-03-21  Bruno Haible  <br...@clisp.org>

        mountlist: Add specification comment in .h file.
        * lib/mountlist.h (read_file_system_list): Move specification to here...
        * lib/mountlist.c (read_file_system_list): ...from here.

2025-03-21  Bruno Haible  <br...@clisp.org>

        mountlist: Work around an strtoul() misfeature.
        * lib/mountlist.c: Include c-ctype.h.
        (dev_from_mount_options): Ignore the dev=... option if its value starts
        with whitespace or with a + or - sign.
        * modules/mountlist (Depends-on): Add c-ctype.

>From 008ff109def9bdfdd04a12355d8f4a835045ae41 Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
Date: Fri, 21 Mar 2025 12:20:24 +0100
Subject: [PATCH 1/2] mountlist: Work around an strtoul() misfeature.

* lib/mountlist.c: Include c-ctype.h.
(dev_from_mount_options): Ignore the dev=... option if its value starts
with whitespace or with a + or - sign.
* modules/mountlist (Depends-on): Add c-ctype.
---
 ChangeLog         |  8 ++++++++
 lib/mountlist.c   | 31 ++++++++++++++++---------------
 modules/mountlist |  1 +
 3 files changed, 25 insertions(+), 15 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 6cd99afd0d..fcb8fc2976 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2025-03-21  Bruno Haible  <br...@clisp.org>
+
+	mountlist: Work around an strtoul() misfeature.
+	* lib/mountlist.c: Include c-ctype.h.
+	(dev_from_mount_options): Ignore the dev=... option if its value starts
+	with whitespace or with a + or - sign.
+	* modules/mountlist (Depends-on): Add c-ctype.
+
 2025-03-21  Bruno Haible  <br...@clisp.org>
 
 	mountlist: Replace a configure-time error with a compile-time error.
diff --git a/lib/mountlist.c b/lib/mountlist.c
index d52d4ffca7..6cb947daaa 100644
--- a/lib/mountlist.c
+++ b/lib/mountlist.c
@@ -19,20 +19,18 @@
 
 #include "mountlist.h"
 
+#include <errno.h>
+#include <fcntl.h>
 #include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdint.h>
+#include <unistd.h>
 
+#include "c-ctype.h"
 #include "xalloc.h"
 
-#include <errno.h>
-
-#include <fcntl.h>
-
-#include <unistd.h>
-
 #if HAVE_SYS_PARAM_H
 # include <sys/param.h>
 #endif
@@ -400,15 +398,18 @@ dev_from_mount_options (char const *mount_options)
   if (devopt)
     {
       char const *optval = devopt + sizeof dev_pattern - 1;
-      char *optvalend;
-      unsigned long int dev;
-      errno = 0;
-      dev = strtoul (optval, &optvalend, 16);
-      if (optval != optvalend
-          && (*optvalend == '\0' || *optvalend == ',')
-          && ! (dev == ULONG_MAX && errno == ERANGE)
-          && dev == (dev_t) dev)
-        return dev;
+      if (c_isxdigit (*optval))
+        {
+          char *optvalend;
+          unsigned long int dev;
+          errno = 0;
+          dev = strtoul (optval, &optvalend, 16);
+          if (optval != optvalend
+              && (*optvalend == '\0' || *optvalend == ',')
+              && ! (dev == ULONG_MAX && errno == ERANGE)
+              && dev == (dev_t) dev)
+            return dev;
+        }
     }
 
 # endif
diff --git a/modules/mountlist b/modules/mountlist
index b4acef36e6..c803f5a66b 100644
--- a/modules/mountlist
+++ b/modules/mountlist
@@ -8,6 +8,7 @@ m4/fstypename.m4
 m4/mountlist.m4
 
 Depends-on:
+c-ctype
 fopen-gnu
 free-posix
 getline
-- 
2.43.0

>From 195dcaf45ccce941f0345b1d4c51d66ee15b9144 Mon Sep 17 00:00:00 2001
From: Bruno Haible <br...@clisp.org>
Date: Fri, 21 Mar 2025 12:22:42 +0100
Subject: [PATCH 2/2] mountlist: Add specification comment in .h file.

* lib/mountlist.h (read_file_system_list): Move specification to here...
* lib/mountlist.c (read_file_system_list): ...from here.
---
 ChangeLog       | 6 ++++++
 lib/mountlist.c | 6 +-----
 lib/mountlist.h | 5 +++++
 3 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index fcb8fc2976..8111c9df7c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2025-03-21  Bruno Haible  <br...@clisp.org>
+
+	mountlist: Add specification comment in .h file.
+	* lib/mountlist.h (read_file_system_list): Move specification to here...
+	* lib/mountlist.c (read_file_system_list): ...from here.
+
 2025-03-21  Bruno Haible  <br...@clisp.org>
 
 	mountlist: Work around an strtoul() misfeature.
diff --git a/lib/mountlist.c b/lib/mountlist.c
index 6cb947daaa..fae9bb50cb 100644
--- a/lib/mountlist.c
+++ b/lib/mountlist.c
@@ -457,12 +457,8 @@ terminate_at_blank (char *str)
     *s = '\0';
   return s;
 }
-#endif
 
-/* Return a list of the currently mounted file systems, or NULL on error.
-   Add each entry to the tail of the list so that they stay in order.
-   If NEED_FS_TYPE is true, ensure that the file system type fields in
-   the returned list are valid.  Otherwise, they might not be.  */
+#endif
 
 struct mount_entry *
 read_file_system_list (bool need_fs_type)
diff --git a/lib/mountlist.h b/lib/mountlist.h
index 5b9da0846c..e8ba1d96f9 100644
--- a/lib/mountlist.h
+++ b/lib/mountlist.h
@@ -46,8 +46,13 @@ struct mount_entry
   struct mount_entry *me_next;
 };
 
+/* Return a list of the currently mounted file systems, or NULL on error.
+   Add each entry to the tail of the list so that they stay in order.
+   If NEED_FS_TYPE is true, ensure that the file system type fields in
+   the returned list are valid.  Otherwise, they might not be.  */
 struct mount_entry *read_file_system_list (bool need_fs_type)
   _GL_ATTRIBUTE_MALLOC;
+
 void free_mount_entry (struct mount_entry *entry);
 
 
-- 
2.43.0

Reply via email to