diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp
index 52b93a9..06eb84d 100644
--- a/tools/aapt/ResourceTable.cpp
+++ b/tools/aapt/ResourceTable.cpp
@@ -18,13 +18,10 @@
 #include <utils/TypeHelpers.h>
 #include <stdarg.h>
 
-// SSIZE: mingw does not have signed size_t == ssize_t.
 // STATUST: mingw does seem to redefine UNKNOWN_ERROR from our enum value, so a cast is necessary.
 #if !defined(_WIN32)
-#  define SSIZE(x) x
 #  define STATUST(x) x
 #else
-#  define SSIZE(x) (signed size_t)x
 #  define STATUST(x) (status_t)x
 #endif
 
@@ -3040,7 +3037,7 @@
         sp<AaptFile> strFile = p->getTypeStringsData();
         ssize_t amt = data->writeData(strFile->getData(), strFile->getSize());
         if (kPrintStringMetrics) {
-            fprintf(stderr, "**** type strings: %zd\n", SSIZE(amt));
+            fprintf(stderr, "**** type strings: %zd\n", amt);
         }
         strAmt += amt;
         if (amt < 0) {
@@ -3050,7 +3047,7 @@
         strFile = p->getKeyStringsData();
         amt = data->writeData(strFile->getData(), strFile->getSize());
         if (kPrintStringMetrics) {
-            fprintf(stderr, "**** key strings: %zd\n", SSIZE(amt));
+            fprintf(stderr, "**** key strings: %zd\n", amt);
         }
         strAmt += amt;
         if (amt < 0) {
@@ -3322,8 +3319,8 @@
     ssize_t amt = (dest->getSize()-strStart);
     strAmt += amt;
     if (kPrintStringMetrics) {
-        fprintf(stderr, "**** value strings: %zd\n", SSIZE(amt));
-        fprintf(stderr, "**** total strings: %zd\n", SSIZE(strAmt));
+        fprintf(stderr, "**** value strings: %zd\n", amt);
+        fprintf(stderr, "**** total strings: %zd\n", amt);
     }
 
     for (pi=0; pi<flatPackages.size(); pi++) {
diff --git a/tools/aapt/StringPool.cpp b/tools/aapt/StringPool.cpp
index 866291a..37b61bf 100644
--- a/tools/aapt/StringPool.cpp
+++ b/tools/aapt/StringPool.cpp
@@ -12,13 +12,6 @@
 
 #include "ResourceTable.h"
 
-// SSIZE: mingw does not have signed size_t == ssize_t.
-#if !defined(_WIN32)
-#  define SSIZE(x) x
-#else
-#  define SSIZE(x) (signed size_t)x
-#endif
-
 // Set to true for noisy debug output.
 static const bool kIsDebug = false;
 
@@ -202,7 +195,7 @@
 
     if (kIsDebug) {
         printf("Adding string %s to pool: pos=%zd eidx=%zd vidx=%zd\n",
-                String8(value).string(), SSIZE(pos), SSIZE(eidx), SSIZE(vidx));
+                String8(value).string(), pos, eidx, vidx);
     }
 
     return pos;
@@ -598,7 +591,7 @@
     const Vector<size_t>* indices = offsetsForString(val);
     ssize_t res = indices != NULL && indices->size() > 0 ? indices->itemAt(0) : -1;
     if (kIsDebug) {
-        printf("Offset for string %s: %zd (%s)\n", String8(val).string(), SSIZE(res),
+        printf("Offset for string %s: %zd (%s)\n", String8(val).string(), res,
                 res >= 0 ? String8(mEntries[mEntryArray[res]].value).string() : String8());
     }
     return res;
diff --git a/tools/aapt/XMLNode.cpp b/tools/aapt/XMLNode.cpp
index 15ec4af..861efd5 100644
--- a/tools/aapt/XMLNode.cpp
+++ b/tools/aapt/XMLNode.cpp
@@ -16,13 +16,10 @@
 #define O_BINARY 0
 #endif
 
-// SSIZE: mingw does not have signed size_t == ssize_t.
 // STATUST: mingw does seem to redefine UNKNOWN_ERROR from our enum value, so a cast is necessary.
 #if !defined(_WIN32)
-#  define SSIZE(x) x
 #  define STATUST(x) x
 #else
-#  define SSIZE(x) (signed size_t)x
 #  define STATUST(x) (status_t)x
 #endif
 
@@ -1426,7 +1423,7 @@
                 idx = outPool->add(attr.name);
                 if (kIsDebug) {
                     printf("Adding attr %s (resid 0x%08x) to pool: idx=%zd\n",
-                            String8(attr.name).string(), id, SSIZE(idx));
+                            String8(attr.name).string(), id, idx);
                 }
                 if (id != 0) {
                     while ((ssize_t)outResIds->size() <= idx) {
@@ -1437,7 +1434,7 @@
             }
             attr.namePoolIdx = idx;
             if (kIsDebug) {
-                printf("String %s offset=0x%08zd\n", String8(attr.name).string(), SSIZE(idx));
+                printf("String %s offset=0x%08zd\n", String8(attr.name).string(), idx);
             }
         }
     }
