Sanitise get_bits macros, part 1
[ffmpeg.git] / libavcodec / get_bits.h
index 9471243..4fbfbb9 100644 (file)
@@ -127,37 +127,37 @@ for examples see get_bits, show_bits, skip_bits, get_vlc
 
 #   define OPEN_READER(name, gb)\
         unsigned int name##_index= (gb)->index;\
-        int name##_cache= 0;\
+        int name##_cache= 0
 
 #   define CLOSE_READER(name, gb)\
-        (gb)->index= name##_index;\
+        (gb)->index= name##_index
 
 # ifdef ALT_BITSTREAM_READER_LE
 #   define UPDATE_CACHE(name, gb)\
-        name##_cache= AV_RL32( ((const uint8_t *)(gb)->buffer)+(name##_index>>3) ) >> (name##_index&0x07);\
+        name##_cache= AV_RL32( ((const uint8_t *)(gb)->buffer)+(name##_index>>3) ) >> (name##_index&0x07)
 
 #   define SKIP_CACHE(name, gb, num)\
-        name##_cache >>= (num);
+        name##_cache >>= (num)
 # else
 #   define UPDATE_CACHE(name, gb)\
-        name##_cache= AV_RB32( ((const uint8_t *)(gb)->buffer)+(name##_index>>3) ) << (name##_index&0x07);\
+        name##_cache= AV_RB32( ((const uint8_t *)(gb)->buffer)+(name##_index>>3) ) << (name##_index&0x07)
 
 #   define SKIP_CACHE(name, gb, num)\
-        name##_cache <<= (num);
+        name##_cache <<= (num)
 # endif
 
 // FIXME name?
 #   define SKIP_COUNTER(name, gb, num)\
-        name##_index += (num);\
+        name##_index += (num)
 
 #   define SKIP_BITS(name, gb, num)\
-        {\
-            SKIP_CACHE(name, gb, num)\
-            SKIP_COUNTER(name, gb, num)\
-        }\
+        do {\
+            SKIP_CACHE(name, gb, num);\
+            SKIP_COUNTER(name, gb, num);\
+        } while (0)
 
 #   define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num)
-#   define LAST_SKIP_CACHE(name, gb, num) ;
+#   define LAST_SKIP_CACHE(name, gb, num)
 
 # ifdef ALT_BITSTREAM_READER_LE
 #   define SHOW_UBITS(name, gb, num)\
@@ -192,15 +192,16 @@ static inline void skip_bits_long(GetBitContext *s, int n){
         int name##_bit_count=(gb)->bit_count;\
         uint32_t name##_cache0= (gb)->cache0;\
         uint32_t name##_cache1= (gb)->cache1;\
-        uint32_t * name##_buffer_ptr=(gb)->buffer_ptr;\
+        uint32_t * name##_buffer_ptr=(gb)->buffer_ptr
 
-#   define CLOSE_READER(name, gb)\
+#   define CLOSE_READER(name, gb) do {\
         (gb)->bit_count= name##_bit_count;\
         (gb)->cache0= name##_cache0;\
         (gb)->cache1= name##_cache1;\
         (gb)->buffer_ptr= name##_buffer_ptr;\
+    } while (0)
 
-#   define UPDATE_CACHE(name, gb)\
+#   define UPDATE_CACHE(name, gb) do {\
     if(name##_bit_count > 0){\
         const uint32_t next= av_be2ne32( *name##_buffer_ptr );\
         name##_cache0 |= NEG_USR32(next,name##_bit_count);\
@@ -208,6 +209,7 @@ static inline void skip_bits_long(GetBitContext *s, int n){
         name##_buffer_ptr++;\
         name##_bit_count-= 32;\
     }\
+} while (0)
 
 #if ARCH_X86
 #   define SKIP_CACHE(name, gb, num)\
@@ -216,22 +218,23 @@ static inline void skip_bits_long(GetBitContext *s, int n){
             "shll %2, %1               \n\t"\
             : "+r" (name##_cache0), "+r" (name##_cache1)\
             : "Ic" ((uint8_t)(num))\
-           );
+           )
 #else
-#   define SKIP_CACHE(name, gb, num)\
+#   define SKIP_CACHE(name, gb, num) do {\
         name##_cache0 <<= (num);\
         name##_cache0 |= NEG_USR32(name##_cache1,num);\
-        name##_cache1 <<= (num);
+        name##_cache1 <<= (num);\
+    } while (0)
 #endif
 
 #   define SKIP_COUNTER(name, gb, num)\
-        name##_bit_count += (num);\
+        name##_bit_count += (num)
 
 #   define SKIP_BITS(name, gb, num)\
-        {\
-            SKIP_CACHE(name, gb, num)\
-            SKIP_COUNTER(name, gb, num)\
-        }\
+        do {\
+            SKIP_CACHE(name, gb, num);\
+            SKIP_COUNTER(name, gb, num);\
+        } while (0)
 
 #   define LAST_SKIP_BITS(name, gb, num) SKIP_BITS(name, gb, num)
 #   define LAST_SKIP_CACHE(name, gb, num) SKIP_CACHE(name, gb, num)
@@ -250,14 +253,14 @@ static inline int get_bits_count(const GetBitContext *s){
 }
 
 static inline void skip_bits_long(GetBitContext *s, int n){
-    OPEN_READER(re, s)
+    OPEN_READER(re, s);
     re_bit_count += n;
     re_buffer_ptr += re_bit_count>>5;
     re_bit_count &= 31;
     re_cache0 = av_be2ne32( re_buffer_ptr[-1] ) << re_bit_count;
     re_cache1 = 0;
-    UPDATE_CACHE(re, s)
-    CLOSE_READER(re, s)
+    UPDATE_CACHE(re, s);
+    CLOSE_READER(re, s);
 }
 
 #endif
@@ -271,22 +274,22 @@ static inline void skip_bits_long(GetBitContext *s, int n){
 static inline int get_xbits(GetBitContext *s, int n){
     register int sign;
     register int32_t cache;
-    OPEN_READER(re, s)
-    UPDATE_CACHE(re, s)
+    OPEN_READER(re, s);
+    UPDATE_CACHE(re, s);
     cache = GET_CACHE(re,s);
     sign=(~cache)>>31;
-    LAST_SKIP_BITS(re, s, n)
-    CLOSE_READER(re, s)
+    LAST_SKIP_BITS(re, s, n);
+    CLOSE_READER(re, s);
     return (NEG_USR32(sign ^ cache, n) ^ sign) - sign;
 }
 
 static inline int get_sbits(GetBitContext *s, int n){
     register int tmp;
-    OPEN_READER(re, s)
-    UPDATE_CACHE(re, s)
+    OPEN_READER(re, s);
+    UPDATE_CACHE(re, s);
     tmp= SHOW_SBITS(re, s, n);
-    LAST_SKIP_BITS(re, s, n)
-    CLOSE_READER(re, s)
+    LAST_SKIP_BITS(re, s, n);
+    CLOSE_READER(re, s);
     return tmp;
 }
 
@@ -295,11 +298,11 @@ static inline int get_sbits(GetBitContext *s, int n){
  */
 static inline unsigned int get_bits(GetBitContext *s, int n){
     register int tmp;
-    OPEN_READER(re, s)
-    UPDATE_CACHE(re, s)
+    OPEN_READER(re, s);
+    UPDATE_CACHE(re, s);
     tmp= SHOW_UBITS(re, s, n);
-    LAST_SKIP_BITS(re, s, n)
-    CLOSE_READER(re, s)
+    LAST_SKIP_BITS(re, s, n);
+    CLOSE_READER(re, s);
     return tmp;
 }
 
@@ -308,8 +311,8 @@ static inline unsigned int get_bits(GetBitContext *s, int n){
  */
 static inline unsigned int show_bits(GetBitContext *s, int n){
     register int tmp;
-    OPEN_READER(re, s)
-    UPDATE_CACHE(re, s)
+    OPEN_READER(re, s);
+    UPDATE_CACHE(re, s);
     tmp= SHOW_UBITS(re, s, n);
 //    CLOSE_READER(re, s)
     return tmp;
@@ -317,10 +320,10 @@ static inline unsigned int show_bits(GetBitContext *s, int n){
 
 static inline void skip_bits(GetBitContext *s, int n){
  //Note gcc seems to optimize this to s->index+=n for the ALT_READER :))
-    OPEN_READER(re, s)
-    UPDATE_CACHE(re, s)
-    LAST_SKIP_BITS(re, s, n)
-    CLOSE_READER(re, s)
+    OPEN_READER(re, s);
+    UPDATE_CACHE(re, s);
+    LAST_SKIP_BITS(re, s, n);
+    CLOSE_READER(re, s);
 }
 
 static inline unsigned int get_bits1(GetBitContext *s){
@@ -449,12 +452,12 @@ int init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes,
 void free_vlc(VLC *vlc);
 
 #define INIT_VLC_STATIC(vlc, bits, a,b,c,d,e,f,g, static_size)\
-{\
+do {\
     static VLC_TYPE table[static_size][2];\
     (vlc)->table= table;\
     (vlc)->table_allocated= static_size;\
     init_vlc(vlc, bits, a,b,c,d,e,f,g, INIT_VLC_USE_NEW_STATIC);\
-}
+} while (0)
 
 
 /**
@@ -464,7 +467,7 @@ void free_vlc(VLC *vlc);
  * is undefined.
  */
 #define GET_VLC(code, name, gb, table, bits, max_depth)\
-{\
+do {\
     int n, nb_bits;\
     unsigned int index;\
 \
@@ -473,8 +476,8 @@ void free_vlc(VLC *vlc);
     n    = table[index][1];\
 \
     if(max_depth > 1 && n < 0){\
-        LAST_SKIP_BITS(name, gb, bits)\
-        UPDATE_CACHE(name, gb)\
+        LAST_SKIP_BITS(name, gb, bits);\
+        UPDATE_CACHE(name, gb);\
 \
         nb_bits = -n;\
 \
@@ -482,8 +485,8 @@ void free_vlc(VLC *vlc);
         code = table[index][0];\
         n    = table[index][1];\
         if(max_depth > 2 && n < 0){\
-            LAST_SKIP_BITS(name, gb, nb_bits)\
-            UPDATE_CACHE(name, gb)\
+            LAST_SKIP_BITS(name, gb, nb_bits);\
+            UPDATE_CACHE(name, gb);\
 \
             nb_bits = -n;\
 \
@@ -492,11 +495,11 @@ void free_vlc(VLC *vlc);
             n    = table[index][1];\
         }\
     }\
-    SKIP_BITS(name, gb, n)\
-}
+    SKIP_BITS(name, gb, n);\
+} while (0)
 
 #define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)\
-{\
+do {\
     int n, nb_bits;\
     unsigned int index;\
 \
@@ -505,9 +508,9 @@ void free_vlc(VLC *vlc);
     n     = table[index].len;\
 \
     if(max_depth > 1 && n < 0){\
-        SKIP_BITS(name, gb, bits)\
+        SKIP_BITS(name, gb, bits);\
         if(need_update){\
-            UPDATE_CACHE(name, gb)\
+            UPDATE_CACHE(name, gb);\
         }\
 \
         nb_bits = -n;\
@@ -517,8 +520,8 @@ void free_vlc(VLC *vlc);
         n     = table[index].len;\
     }\
     run= table[index].run;\
-    SKIP_BITS(name, gb, n)\
-}
+    SKIP_BITS(name, gb, n);\
+} while (0)
 
 
 /**
@@ -534,12 +537,12 @@ static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE (*table)[2],
 {
     int code;
 
-    OPEN_READER(re, s)
-    UPDATE_CACHE(re, s)
+    OPEN_READER(re, s);
+    UPDATE_CACHE(re, s);
 
-    GET_VLC(code, re, s, table, bits, max_depth)
+    GET_VLC(code, re, s, table, bits, max_depth);
 
-    CLOSE_READER(re, s)
+    CLOSE_READER(re, s);
     return code;
 }