Re: agetty.c warnings

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

 



PÃdraig Brady wrote:
...
>>> Perhaps this might work?
>>>
>>> static inline void _ignore (int i) { (void) i; }
>>> #define ignore(x) _ignore ((int)x)
>>
>> I don't think so, it will produce warnings about cast from pointer to
>> integer if the function (foo() in my example) returns a pointer.
>
> Ah right, there would be a warning when the pointer
> size is different to the int. So this would be better:
>
> #include <stdint.h>
> static inline void _ignore (intptr_t p) { (void) p; }
> #define ignore(x) _ignore ((intptr_t)x)

Nice.
That works for me, as a plug-in replacement for gnulib's ignore-value.h:

    #include <stdint.h>
    static inline void _ignore_value (intptr_t p) { (void) p; }
    #define ignore_value(x) _ignore_value ((intptr_t) x)

    /* ignore_value now works for both scalars and pointers, so deprecate. */
    static inline void __attribute__((__deprecated__))
    ignore_ptr (void* p) { (void) p; } /* deprecated: use ignore_value */

i.e., with the above (and a few s/ignore_ptr/ignore_value/),
coreutils still compiles warning-free.

I opted to stick with ignore_value, since the name "ignore" is
probably too common to usurp like that.  For example, while it
doesn't conflict per se, sort.c does have both a local variable and
a struct member named "ignore".

The only drawback (probably acceptable) is that
it adds a dependency on <stdint.h>.

> But that still doesn't work for aggregate types.

That's ok.  Those are far less common.

------------------------------------------------
Here's the gnulib patch:

diff --git a/lib/ignore-value.h b/lib/ignore-value.h
index 04d6520..7e5ae3a 100644
--- a/lib/ignore-value.h
+++ b/lib/ignore-value.h
@@ -35,8 +35,14 @@
 #ifndef _GL_IGNORE_VALUE_H
 # define _GL_IGNORE_VALUE_H

-static inline void ignore_value (int i) { (void) i; }
-static inline void ignore_ptr (void* p) { (void) p; }
+#include <stdint.h>
+static inline void _ignore_value (intptr_t p) { (void) p; }
+#define ignore_value(x) _ignore_value ((intptr_t) x)
+
+/* ignore_value now works for both scalars and pointers, so deprecate. */
+static inline void __attribute__((__deprecated__))
+ignore_ptr (void* p) { (void) p; } /* deprecated: use ignore_value */
+
 /* FIXME: what about aggregate types? */

 #endif
diff --git a/modules/ignore-value b/modules/ignore-value
index 8d48863..aeda194 100644
--- a/modules/ignore-value
+++ b/modules/ignore-value
@@ -5,6 +5,7 @@ Files:
 lib/ignore-value.h

 Depends-on:
+stdint

 configure.ac:
 AC_REQUIRE([AC_C_INLINE])
--
To unsubscribe from this list: send the line "unsubscribe util-linux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux