2004-07-22 Joerg Wunsch
* include/avr/sleep.h: protect function-like macros, fix savannah bug #9013.
* include/avr/ina90.h: Ditto.
Index: include/avr/ina90.h
===================================================================
RCS file: /cvsroot/avr-libc/avr-libc/include/avr/ina90.h,v
retrieving revision 1.6
diff -u -u -r1.6 ina90.h
--- include/avr/ina90.h 11 Sep 2003 22:39:09 -0000 1.6
+++ include/avr/ina90.h 22 Jul 2004 21:39:26 -0000
@@ -1,4 +1,4 @@
-/* Copyright (c) 2002, Marek Michalkiewicz
+/* Copyright (c) 2002,2004 Marek Michalkiewicz
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -44,44 +44,44 @@
#ifndef _INA90_H_
#define _INA90_H_ 1
-#define _CLI() __asm__ __volatile__ ("cli")
-#define _SEI() __asm__ __volatile__ ("sei")
-#define _NOP() __asm__ __volatile__ ("nop")
-#define _WDR() __asm__ __volatile__ ("wdr")
-#define _SLEEP() __asm__ __volatile__ ("sleep")
-#define _OPC(op) __asm__ __volatile__ (".word %0" : : "n" (op))
+#define _CLI() do { __asm__ __volatile__ ("cli") } while (0)
+#define _SEI() do { __asm__ __volatile__ ("sei") } while (0)
+#define _NOP() do { __asm__ __volatile__ ("nop") } while (0)
+#define _WDR() do { __asm__ __volatile__ ("wdr") } while (0)
+#define _SLEEP() do { __asm__ __volatile__ ("sleep") } while (0)
+#define _OPC(op) do { __asm__ __volatile__ (".word %0" : : "n" (op)) } while (0)
/* _LPM, _ELPM */
#include
-#define _LPM(x) __LPM(x)
-#define _ELPM(x) __ELPM(x)
+#define _LPM(x) do { __LPM(x) } while (0)
+#define _ELPM(x) do { __ELPM(x) } while (0)
/* _EEGET, _EEPUT */
#include
#define input(port) (port)
-#define output(port, val) (port = val)
+#define output(port, val) do { (port = val) } while (0)
-#define __inp_blk__(port, addr, cnt, op) { \
+#define __inp_blk__(port, addr, cnt, op) do { \
unsigned char __i = (cnt); \
unsigned char *__addr = (addr); \
while (__i) { \
*(__addr op) = input(port); \
__i--; \
} \
- }
+ } while (0)
#define input_block_inc(port, addr, cnt) __inp_blk__(port, addr, cnt, ++)
#define input_block_dec(port, addr, cnt) __inp_blk__(port, addr, cnt, --)
-#define __out_blk__(port, addr, cnt, op) { \
+#define __out_blk__(port, addr, cnt, op) do { \
unsigned char __i = (cnt); \
const unsigned char *__addr = (addr); \
while (__i) { \
output(port, *(__addr op)); \
__i--; \
} \
- }
+ } while (0)
#define output_block_inc(port, addr, cnt) __out_blk__(port, addr, cnt, ++)
#define output_block_dec(port, addr, cnt) __out_blk__(port, addr, cnt, --)
Index: include/avr/sleep.h
===================================================================
RCS file: /cvsroot/avr-libc/avr-libc/include/avr/sleep.h,v
retrieving revision 1.6
diff -u -u -r1.6 sleep.h
--- include/avr/sleep.h 7 Apr 2003 21:55:17 -0000 1.6
+++ include/avr/sleep.h 22 Jul 2004 21:39:26 -0000
@@ -1,4 +1,4 @@
-/* Copyright (c) 2002, Theodore A. Roth
+/* Copyright (c) 2002,2004 Theodore A. Roth
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -128,9 +128,13 @@
extern void set_sleep_mode (uint8_t mode);
#else
# if defined (SMCR)
-# define set_sleep_mode(mode) (SMCR = ((SMCR & ~_SLEEP_MODE_MASK) | (mode)))
+# define set_sleep_mode(mode) do { \
+ (SMCR = ((SMCR & ~_SLEEP_MODE_MASK) | (mode))) \
+} while (0)
# else
-# define set_sleep_mode(mode) (MCUCR = ((MCUCR & ~_SLEEP_MODE_MASK) | (mode)))
+# define set_sleep_mode(mode) do { \
+ (MCUCR = ((MCUCR & ~_SLEEP_MODE_MASK) | (mode))) \
+} while (0)
# endif
#endif
@@ -144,11 +148,11 @@
extern void sleep_mode (void);
#else
#define sleep_mode() \
-{ \
+do { \
MCUCR |= _BV(SE); \
__asm__ __volatile__ ("sleep" "\n\t" :: ); \
MCUCR &= ~_BV(SE); \
-}
+} while (0)
#endif
/address@hidden/