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/