diff --git a/client/client_state.cpp b/client/client_state.cpp
index 76db980007..5245851e04 100644
--- a/client/client_state.cpp
+++ b/client/client_state.cpp
@@ -1958,6 +1958,15 @@ int CLIENT_STATE::reset_project(PROJECT* project, bool detaching) {
}
garbage_collect_always();
}
+#ifdef ANDROID
+ // space is likely to be an issue on Android, so clean out project dir
+ // If we did this on other platforms we'd need to avoid deleting
+ // app_config.xml, but this isn't likely to exist on Android.
+ //
+ if (!project->anonymous_platform) {
+ client_clean_out_dir(project.project_dir(), "reset project");
+ }
+#endif
// force refresh of scheduler URLs
//
diff --git a/sched/script_validator.cpp b/sched/script_validator.cpp
new file mode 100644
index 0000000000..43b80dece8
--- /dev/null
+++ b/sched/script_validator.cpp
@@ -0,0 +1,128 @@
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2014 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see .
+
+// A validator that runs scripts to check and compare results
+// cmdline args:
+// --init_script scriptname
+// --compare_script scriptname
+//
+// the init script is called as
+// scriptname f1 ... fn
+// where f1 ... fn are the output files of a job (there may be just one)
+// It returns zero if the files are valid
+//
+// the compare script is called as
+// scriptname f1 ... fn g1 ... gn
+// where f1 ... fn are the output files of one job,
+// and g1 ... gn are the output files are another job.
+// It returns zero if the files are equivalent.
+
+#include
+
+#include "validate_util2.h"
+#include "error_numbers.h"
+#include "boinc_db.h"
+#include "sched_util.h"
+#include "validate_util.h"
+#include "validator.h"
+
+using std::string;
+using std::vector;
+
+bool first = true;
+char init_script[MAXPATHLEN], compare_script[MAXPATHLEN];
+
+void parse_cmdline() {
+ strcpy(init_script, "");
+ strcpy(compare_script, "");
+ for (int i=1; i paths;
+ int retval;
+ retval = get_output_file_paths(result, paths);
+ if (retval) {
+ fprintf(stderr, "get_output_file_paths() returned %d\n", retval);
+ return retval;
+ }
+ char cmd[4096];
+ strcpy(cmd, init_script);
+ for (unsigned int i=0; i paths1, paths2;
+ int retval;
+ retval = get_output_file_paths(r1, paths1);
+ if (retval) {
+ fprintf(stderr, "get_output_file_paths() returned %d\n", retval);
+ return retval;
+ }
+ retval = get_output_file_paths(r2, paths2);
+ if (retval) {
+ fprintf(stderr, "get_output_file_paths() returned %d\n", retval);
+ return retval;
+ }
+ char cmd[4096];
+ strcpy(cmd, compare_script);
+ for (unsigned int i=0; i