diff --git a/gm/poly2poly.cpp b/gm/poly2poly.cpp
index fda0474..c36ac85 100644
--- a/gm/poly2poly.cpp
+++ b/gm/poly2poly.cpp
@@ -14,18 +14,18 @@
 
     void save();
     void restore();
-    
+
     double lineWidth;
     void setLineWidth(double);
-    
+
     void beginPath();
     void moveTo(double x, double y);
     void lineTo(double x, double y);
     void closePath();
-    
+
     void fill();
     void stroke();
-    
+
     void fillText(const char text[], double x, double y);
 
 private:
@@ -95,7 +95,7 @@
         path.reset(); path.moveTo(0, 0); path.lineTo(100, 100); path.moveTo(200, 200);
         dump(path);
     }
-    
+
 #if 0
     // TEST 1 - The rectangle as it's expected to look
     var canvas = document.createElement('canvas');
@@ -113,15 +113,15 @@
     ctx.lineTo(150, 15);
     ctx.lineTo(10, 15);
     ctx.closePath();
-    
+
     // no extra moveTo here
     // ctx.moveTo(175, 125);
-    
+
     ctx.stroke();
     ctx.restore();
-    
+
     ctx.fillText("As Expected", 10, 10);
-    
+
 #if 0
     // TEST 2 - Includes an extra moveTo call before stroke; the rectangle appears larger
     canvas = document.createElement('canvas');
@@ -139,14 +139,14 @@
     ctx.lineTo(150, 15);
     ctx.lineTo(10, 15);
     ctx.closePath();
-    
+
     ctx.moveTo(175, 125);
-    
+
     ctx.stroke();
     ctx.restore();
-    
+
     ctx.fillText("Larger Rectangle", 10, 10);
-    
+
 #if 0
     // TEST 3 - Identical to test 2 except the line width is 1
     canvas = document.createElement('canvas');
@@ -164,12 +164,12 @@
     ctx.lineTo(150, 15);
     ctx.lineTo(10, 15);
     ctx.closePath();
-    
+
     ctx.moveTo(175, 125);
-    
+
     ctx.stroke();
     ctx.restore();
-    
+
     ctx.fillText("As Expected - line width 1", 10, 10);
 }
 
@@ -269,4 +269,3 @@
 //////////////////////////////////////////////////////////////////////////////
 
 DEF_GM( return new Poly2PolyGM; )
-
diff --git a/include/core/SkPath.h b/include/core/SkPath.h
index 76aad0d..bc89f71 100644
--- a/include/core/SkPath.h
+++ b/include/core/SkPath.h
@@ -244,7 +244,7 @@
         /** counter-clockwise direction for adding closed contours */
         kCCW_Direction,
     };
-    
+
     /** Returns true if the path specifies a rectangle. If so, and if rect is
         not null, set rect to the bounds of the path. If the path does not
         specify a rectangle, return false and ignore rect.
@@ -256,7 +256,7 @@
     bool isRect(SkRect* rect) const {
         return this->isRect(rect, NULL, NULL);
     }
-    
+
     /**
      *  Returns true if the path specifies a rectangle.
      *
@@ -270,14 +270,14 @@
      *  @return true if the path specifies a rectangle
      */
     bool isRect(SkRect* rect, bool* isClosed, Direction* direction) const;
-    
+
     /** Returns true if the path specifies a pair of nested rectangles. If so, and if
      rect is not null, set rect[0] to the outer rectangle and rect[1] to the inner
      rectangle. If so, and dirs is not null, set dirs[0] to the direction of
      the outer rectangle and dirs[1] to the direction of the inner rectangle. If
      the path does not specify a pair of nested rectangles, return
      false and ignore rect and dirs.
-     
+
      @param rect If not null, returns the path as a pair of nested rectangles
      @param dirs If not null, returns the direction of the rects
      @return true if the path describes a pair of nested rectangles
diff --git a/src/core/SkBitmap.cpp b/src/core/SkBitmap.cpp
index ec64577..383f0ef 100644
--- a/src/core/SkBitmap.cpp
+++ b/src/core/SkBitmap.cpp
@@ -805,7 +805,7 @@
         case kRGB_565_Config: {
             uint16_t* p = (uint16_t*)fPixels;
             uint16_t v;
-            
+
             if (kARGB_4444_Config == fConfig) {
                 v = pack_8888_to_4444(a, r, g, b);
             } else {
diff --git a/src/core/SkDevice.cpp b/src/core/SkDevice.cpp
index 97d5748..6290c4e 100644
--- a/src/core/SkDevice.cpp
+++ b/src/core/SkDevice.cpp
@@ -32,7 +32,7 @@
 {
     fOrigin.setZero();
     fMetaData = NULL;
-    
+
     SkASSERT(SkBitmap::kARGB_4444_Config != bitmap.config());
 }
 
diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp
index 2d819c1..35f4772 100644
--- a/src/core/SkPath.cpp
+++ b/src/core/SkPath.cpp
@@ -592,7 +592,7 @@
     if (!this->isRectContour(false, &currVerb, &pts, isClosed, direction)) {
         return false;
     }
-    
+
     if (rect) {
         rect->set(first, SkToS32(pts - first));
     }
diff --git a/tests/PathTest.cpp b/tests/PathTest.cpp
index 41151a5..36d7d06 100644
--- a/tests/PathTest.cpp
+++ b/tests/PathTest.cpp
@@ -2420,7 +2420,7 @@
         REPORTER_ASSERT(reporter, p.isRect(&r));
         REPORTER_ASSERT(reporter, r == bounds);
     }
-    
+
     test_isLine(reporter);
     test_isRect(reporter);
     test_isNestedRects(reporter);
