bug-gnulib
[Top][All Lists]
Advanced

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

[PATCH v2 07/10] Fix __argp_fmtstream_point()'s return type and comparis


From: Robbie Harwood
Subject: [PATCH v2 07/10] Fix __argp_fmtstream_point()'s return type and comparisons with it
Date: Wed, 1 Dec 2021 16:02:02 -0500

From: Peter Jones <pjones@redhat.com>

gcc -Werror=sign-compare produces:

argp-help.c:1545:15: error: comparison of integer expressions of different 
signedness: ‘int’ and ‘size_t’ {aka ‘long unsigned int’} [-Werror=sign-compare]
 1545 |               > __argp_fmtstream_lmargin (stream))
      |               ^

Some code seems to assume the point_col field (which
__argp_fmtstream_point() returns) can be -1, and it's an ssize_t, so
this makes the function correctly return ssize_t in all cases, and also
fixes the comparison to check for the -1 case.

Signed-off-by: Peter Jones <pjones@redhat.com>
Signed-off-by: Robbie Harwood <rharwood@redhat.com>
---
 lib/argp-fmtstream.h | 6 +++---
 lib/argp-help.c      | 7 +++++--
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/lib/argp-fmtstream.h b/lib/argp-fmtstream.h
index 3384a0012..f47e24c5c 100644
--- a/lib/argp-fmtstream.h
+++ b/lib/argp-fmtstream.h
@@ -164,8 +164,8 @@ extern size_t __argp_fmtstream_set_wmargin 
(argp_fmtstream_t __fs,
                                             size_t __wmargin);
 
 /* Return the column number of the current output point in __FS.  */
-extern size_t argp_fmtstream_point (argp_fmtstream_t __fs);
-extern size_t __argp_fmtstream_point (argp_fmtstream_t __fs);
+extern ssize_t argp_fmtstream_point (argp_fmtstream_t __fs);
+extern ssize_t __argp_fmtstream_point (argp_fmtstream_t __fs);
 #endif
 
 /* Internal routines.  */
@@ -272,7 +272,7 @@ __argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, size_t 
__wmargin)
 }
 
 /* Return the column number of the current output point in __FS.  */
-ARGP_FS_EI size_t
+ARGP_FS_EI ssize_t
 __argp_fmtstream_point (argp_fmtstream_t __fs)
 {
   if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs)
diff --git a/lib/argp-help.c b/lib/argp-help.c
index 84013b002..93e40cad7 100644
--- a/lib/argp-help.c
+++ b/lib/argp-help.c
@@ -1631,7 +1631,9 @@ argp_doc (const struct argp *argp, const struct 
argp_state *state,
       else
         __argp_fmtstream_puts (stream, text);
 
-      if (__argp_fmtstream_point (stream) > __argp_fmtstream_lmargin (stream))
+      if (__argp_fmtstream_point (stream) < 0 ||
+          (size_t)__argp_fmtstream_point (stream)
+          > __argp_fmtstream_lmargin (stream))
         __argp_fmtstream_putc (stream, '\n');
 
       anything = 1;
@@ -1652,7 +1654,8 @@ argp_doc (const struct argp *argp, const struct 
argp_state *state,
             __argp_fmtstream_putc (stream, '\n');
           __argp_fmtstream_puts (stream, text);
           free ((char *) text);
-          if (__argp_fmtstream_point (stream)
+          if (__argp_fmtstream_point (stream) < 0 ||
+              (size_t)__argp_fmtstream_point (stream)
               > __argp_fmtstream_lmargin (stream))
             __argp_fmtstream_putc (stream, '\n');
           anything = 1;
-- 
2.33.0




reply via email to

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