--- misc/STLport-4.5/src/num_get_float.cpp	2001-05-03 09:40:43.000000000 +0200
+++ misc/build/STLport-4.5/src/num_get_float.cpp	2009-03-22 17:31:30.000000000 +0100
@@ -484,7 +484,7 @@
   else {                        /* not zero or denorm */
     /* Round to 53 bits */
 
-    rest = value & (1<<10)-1;
+    rest = value & ((1<<10)-1);
     value >>= 10;
 #if !defined(__SC__)
     guard = (uint32) value & 1;
--- misc/STLport-4.5/src/strstream.cpp	2001-01-27 02:39:29.000000000 +0100
+++ misc/build/STLport-4.5/src/strstream.cpp	2009-03-22 17:26:32.000000000 +0100
@@ -284,11 +284,12 @@
 
 void strstreambuf::_M_free(char* p)
 {
-  if (p)
+  if (p) {
     if (_M_free_fun)
       _M_free_fun(p);
     else
       delete[] p;
+  }
 }
 
 void strstreambuf::_M_setup(char* get, char* put, streamsize n)
--- misc/STLport-4.5/stlport/stl/_list.c	2001-05-11 04:20:07.000000000 +0200
+++ misc/build/STLport-4.5/stlport/stl/_list.c	2009-03-22 17:26:32.000000000 +0100
@@ -82,7 +82,7 @@
 {
   iterator __i = begin();
   size_type __len = 0;
-  for ( ; __i != end() && __len < __new_size; ++__i, ++__len);
+  for ( ; __i != end() && __len < __new_size; ++__i, ++__len) ;
 
   if (__len == __new_size)
     erase(__i, end());
--- misc/STLport-4.5/stlport/stl/_time_facets.c	2001-03-19 08:01:09.000000000 +0100
+++ misc/build/STLport-4.5/stlport/stl/_time_facets.c	2009-03-22 17:26:32.000000000 +0100
@@ -101,7 +101,7 @@
 
   while (__first != __last) {
     for (__i = 0; __i < __n; ++__i)
-      if (__do_check[__i])
+      if (__do_check[__i]) {
         if (*__first == __name[__i][__pos]) {
           if (__pos == _DiffType(__name[__i].size()) - 1) {
             __do_check[__i] = 0;
@@ -119,6 +119,7 @@
           if (__check_count == 0) 
             return __matching_name[__pos];
         }
+      }
 
     ++__first; ++__pos;
   }
--- misc/STLport-4.5/stlport/stl/_tree.c	2009-03-22 17:04:36.000000000 +0100
+++ misc/build/STLport-4.5/stlport/stl/_tree.c	2009-03-22 17:26:32.000000000 +0100
@@ -186,18 +186,20 @@
         __z->_M_parent->_M_left = __x;
       else
         __z->_M_parent->_M_right = __x;
-    if (__leftmost == __z) 
+    if (__leftmost == __z)  {
       if (__z->_M_right == 0)        // __z->_M_left must be null also
         __leftmost = __z->_M_parent;
     // makes __leftmost == _M_header if __z == __root
       else
         __leftmost = _Rb_tree_node_base::_S_minimum(__x);
-    if (__rightmost == __z)  
+    }
+    if (__rightmost == __z) {
       if (__z->_M_left == 0)         // __z->_M_right must be null also
         __rightmost = __z->_M_parent;  
     // makes __rightmost == _M_header if __z == __root
       else                      // __x == __z->_M_left
         __rightmost = _Rb_tree_node_base::_S_maximum(__x);
+    }
   }
   if (__y->_M_color != _S_rb_tree_red) { 
     while (__x != __root && (__x == 0 || __x->_M_color == _S_rb_tree_black))
--- misc/STLport-4.5/stlport/stl/debug/_debug.c	2001-05-30 05:45:43.000000000 +0200
+++ misc/build/STLport-4.5/stlport/stl/debug/_debug.c	2009-03-22 17:26:32.000000000 +0100
@@ -58,7 +58,7 @@
 # endif
                                        const _Iterator& __last, const forward_iterator_tag &) {
     _Iterator1 __i(__first);
-    for (;  __i != __last && __i != __it; ++__i);
+    for (;  __i != __last && __i != __it; ++__i) ;
     return (__i!=__last);
 }
 
@@ -68,7 +68,7 @@
 __in_range_aux(const _Iterator1& __it, const _Iterator& __first,
                const _Iterator& __last, const bidirectional_iterator_tag &) {
     _Iterator1 __i(__first);
-    for (;  __i != __last && __i != __it; ++__i);
+    for (;  __i != __last && __i != __it; ++__i) ;
     return (__i !=__last);
 }
 # endif
--- misc/STLport-4.5/stlport/stl/debug/_list.h	2001-05-30 05:45:43.000000000 +0200
+++ misc/build/STLport-4.5/stlport/stl/debug/_list.h	2009-03-22 17:26:32.000000000 +0100
@@ -209,7 +209,7 @@
   void resize(size_type __new_size, const _Tp& __x) {
     typename _Base::iterator __i = _Base::begin();
     size_type __len = 0;
-    for ( ; __i != _Base::end() && __len < __new_size; ++__i, ++__len);
+    for ( ; __i != _Base::end() && __len < __new_size; ++__i, ++__len) ;
     
     if (__len == __new_size)
       erase(iterator(&_M_iter_list,__i), end());
