aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--tools/skpdiff/SkDiffContext.cpp7
-rw-r--r--tools/skpdiff/skpdiff_util.cpp23
-rw-r--r--tools/skpdiff/skpdiff_util.h7
3 files changed, 35 insertions, 2 deletions
diff --git a/tools/skpdiff/SkDiffContext.cpp b/tools/skpdiff/SkDiffContext.cpp
index cf2654ac05..f551ff3508 100644
--- a/tools/skpdiff/SkDiffContext.cpp
+++ b/tools/skpdiff/SkDiffContext.cpp
@@ -164,12 +164,15 @@ void SkDiffContext::outputRecords(SkWStream& stream, bool useJSONP) {
while (NULL != currentRecord) {
stream.writeText(" {\n");
+ SkString baselineAbsPath = get_absolute_path(currentRecord->fBaselinePath);
+ SkString testAbsPath = get_absolute_path(currentRecord->fTestPath);
+
stream.writeText(" \"baselinePath\": \"");
- stream.writeText(currentRecord->fBaselinePath.c_str());
+ stream.writeText(baselineAbsPath.c_str());
stream.writeText("\",\n");
stream.writeText(" \"testPath\": \"");
- stream.writeText(currentRecord->fTestPath.c_str());
+ stream.writeText(testAbsPath.c_str());
stream.writeText("\",\n");
stream.writeText(" \"diffs\": [\n");
diff --git a/tools/skpdiff/skpdiff_util.cpp b/tools/skpdiff/skpdiff_util.cpp
index 0047959b60..5b19c7311d 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 @@ bool glob_files(const char globPattern[], SkTArray<SkString>* entries) {
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
+}
diff --git a/tools/skpdiff/skpdiff_util.h b/tools/skpdiff/skpdiff_util.h
index 9df1bc0b2a..8750bf6b54 100644
--- a/tools/skpdiff/skpdiff_util.h
+++ b/tools/skpdiff/skpdiff_util.h
@@ -49,5 +49,12 @@ bool get_directory(const char path[], SkTArray<SkString>* entries);
*/
bool glob_files(const char globPattern[], SkTArray<SkString>* entries);
+/**
+ * Gets the absolute version of the given path.
+ * @param path The absolute or relative path to expand
+ * @return The absolute path of the given path on success, or an empty string on failure.
+ */
+SkString get_absolute_path(const SkString& path);
+
#endif