bug-gnulib
[Top][All Lists]
Advanced

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

Re: Warnings to be fixed


From: Bruno Haible
Subject: Re: Warnings to be fixed
Date: Sun, 19 Oct 2008 02:45:16 +0200
User-agent: KMail/1.5.4

Jim Meyering wrote:
> +2008-10-16  Jim Meyering  <address@hidden>
> +
> +     openat-die.c: avoid 'no previous prototype' warning
> +     * lib/openat-die.c: Include "openat.h".
> +     Reported by Reuben Thomas <address@hidden>.

Thanks to this change, I now get a compilation error when compiling for mingw:

  i386-pc-mingw32-gcc -DHAVE_CONFIG_H -I. -I..   -Wall  -g -O2 -MT openat-die.o 
-MD -MP -MF .deps/openat-die.Tpo -c -o openat-die.o openat-die.c
  openat-die.c:33: error: conflicting types for 'openat_save_fail'
  openat.h:97: error: previous declaration of 'openat_save_fail' was here

At first sight, the two declarations look the same:

  void openat_save_fail (int)

modulo a 'noreturn` attribute of which we know that it is irrelevant for
function type purposes. The preprocessed output, however, reveals what's
happening:

void
openat_save_fail (int (*_errno()))
{
  error (exit_failure, (*_errno()),
  ((const char *) ("unable to record current working directory")));
...

So the function declared in the header file as taking an 'int' parameter
is now defined with a function pointer parameter, and this function is
immediately invoked. This would have crashed at runtime, trying to transfer
control to a small address in the range 0 < _errno < 200.

Here's a proposed fix:


2008-10-18  Bruno Haible  <address@hidden>

        * lib/openat-die.c (openat_save_fail, openat_restore_fail): Rename
        the parameter from 'errno' to 'errnum'. Fixes a compilation error on
        mingw.

--- lib/openat-die.c.orig       2008-10-19 02:42:49.000000000 +0200
+++ lib/openat-die.c    2008-10-19 02:40:41.000000000 +0200
@@ -29,9 +29,9 @@
 #define N_(msgid) msgid
 
 void
-openat_save_fail (int errno)
+openat_save_fail (int errnum)
 {
-  error (exit_failure, errno,
+  error (exit_failure, errnum,
         _("unable to record current working directory"));
 
   /* The `noreturn' attribute cannot be applied to error, since it returns
@@ -42,9 +42,9 @@
 }
 
 void
-openat_restore_fail (int errno)
+openat_restore_fail (int errnum)
 {
-  error (exit_failure, errno,
+  error (exit_failure, errnum,
         _("failed to return to initial working directory"));
 
   /* As above.  */





reply via email to

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