fix skpdiff viewer bug when using relative paths

BUG=skia:1463
R=djsollen@google.com

Review URL: https://codereview.chromium.org/21601002

git-svn-id: http://skia.googlecode.com/svn/trunk@10515 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tools/skpdiff/skpdiff_util.cpp b/tools/skpdiff/skpdiff_util.cpp
index 0047959..5b19c73 100644
--- a/tools/skpdiff/skpdiff_util.cpp
+++ b/tools/skpdiff/skpdiff_util.cpp
@@ -15,10 +15,15 @@
 #   include <glob.h>
 #endif
 
+#if SK_BUILD_FOR_MAC
+#   include <sys/syslimits.h> // PATH_MAX is here for Macs
+#endif
+
 #if SK_BUILD_FOR_WIN32
 #   include <windows.h>
 #endif
 
+#include <stdlib.h>
 #include <time.h>
 #include "SkOSFile.h"
 #include "skpdiff_util.h"
@@ -181,3 +186,21 @@
     return false;
 #endif
 }
+
+SkString get_absolute_path(const SkString& path) {
+#if SK_BUILD_FOR_MAC || SK_BUILD_FOR_UNIX || SK_BUILD_FOR_ANDROID
+    SkString fullPath(PATH_MAX + 1);
+    if (realpath(path.c_str(), fullPath.writable_str()) == NULL) {
+        fullPath.reset();
+    }
+    return fullPath;
+#elif SK_BUILD_FOR_WIN32
+    SkString fullPath(MAX_PATH);
+    if (_fullpath(fullPath.writable_str(), path.c_str(), MAX_PATH) == NULL) {
+        fullPath.reset();
+    }
+    return fullPath;
+#else
+    return SkString();
+#endif
+}