Commit e2fc21e5 authored by Rusty Russell's avatar Rusty Russell

foreach: more const iteration fixes.

Shown up by -Wwrite-strings.
parent a95fc43f
......@@ -44,7 +44,7 @@
*/
#define foreach_ptr(i, ...) \
for (unsigned _foreach_i \
= (((i) = ((const void *[]){ __VA_ARGS__ })[0]), 0); \
= (((i) = (void *)((FOREACH_TYPEOF(i)[]){ __VA_ARGS__ })[0]), 0); \
(i); \
(i) = (void *)((FOREACH_TYPEOF(i)[]) \
{ __VA_ARGS__, NULL})[++_foreach_i], \
......@@ -59,13 +59,13 @@
(i) = (int[]) { __VA_ARGS__, 0 }[_foreach_iter_inc(&(i))])
#define foreach_ptr(i, ...) \
for ((i) = ((FOREACH_TYPEOF(i)[]){ __VA_ARGS__ })[0], \
for ((i) = (void *)((FOREACH_TYPEOF(i)[]){ __VA_ARGS__ })[0], \
_foreach_iter_init(&(i)); \
(i); \
(i) = (void *)((FOREACH_TYPEOF(i)[]){ __VA_ARGS__, NULL }) \
[_foreach_iter_inc(&(i))], \
_foreach_no_nullval(_foreach_iter(&(i)), i, \
((void *[]){ __VA_ARGS__})))
((const void *[]){ __VA_ARGS__})))
void _foreach_iter_init(const void *i);
unsigned int _foreach_iter(const void *i);
......
#include <ccan/foreach/foreach.h>
#include <ccan/foreach/foreach.c>
/* Iterating over const pointers should work fine. */
int main(int argc, char *argv[])
{
const char *s1 = "hello", *s2 = "world", *p;
unsigned int i = 0;
foreach_ptr(p, s1, s2)
i++;
return i == 2 ? 0 : 1;
}
#include <ccan/foreach/foreach.h>
#include <ccan/foreach/foreach.c>
/* Iterating const over non-const pointers should work fine. */
int main(int argc, char *argv[])
{
char *p;
unsigned int i = 0;
foreach_ptr(p, argv[0], argv[1])
i++;
return i == 2 ? 0 : 1;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment