1*d83cc019SAndroid Build Coastguard Worker #include <errno.h>
2*d83cc019SAndroid Build Coastguard Worker #include <fcntl.h>
3*d83cc019SAndroid Build Coastguard Worker #include <stdio.h>
4*d83cc019SAndroid Build Coastguard Worker #include <string.h>
5*d83cc019SAndroid Build Coastguard Worker #include <sys/stat.h>
6*d83cc019SAndroid Build Coastguard Worker #include <sys/types.h>
7*d83cc019SAndroid Build Coastguard Worker
8*d83cc019SAndroid Build Coastguard Worker #include "settings.h"
9*d83cc019SAndroid Build Coastguard Worker #include "job_list.h"
10*d83cc019SAndroid Build Coastguard Worker #include "executor.h"
11*d83cc019SAndroid Build Coastguard Worker #include "resultgen.h"
12*d83cc019SAndroid Build Coastguard Worker
main(int argc,char ** argv)13*d83cc019SAndroid Build Coastguard Worker int main(int argc, char **argv)
14*d83cc019SAndroid Build Coastguard Worker {
15*d83cc019SAndroid Build Coastguard Worker struct settings settings;
16*d83cc019SAndroid Build Coastguard Worker struct job_list job_list;
17*d83cc019SAndroid Build Coastguard Worker struct execute_state state;
18*d83cc019SAndroid Build Coastguard Worker int exitcode = 0;
19*d83cc019SAndroid Build Coastguard Worker int dirfd;
20*d83cc019SAndroid Build Coastguard Worker
21*d83cc019SAndroid Build Coastguard Worker init_settings(&settings);
22*d83cc019SAndroid Build Coastguard Worker init_job_list(&job_list);
23*d83cc019SAndroid Build Coastguard Worker
24*d83cc019SAndroid Build Coastguard Worker if (argc < 2) {
25*d83cc019SAndroid Build Coastguard Worker fprintf(stderr, "Usage: %s results-directory\n", argv[0]);
26*d83cc019SAndroid Build Coastguard Worker return 1;
27*d83cc019SAndroid Build Coastguard Worker }
28*d83cc019SAndroid Build Coastguard Worker
29*d83cc019SAndroid Build Coastguard Worker if ((dirfd = open(argv[1], O_RDONLY | O_DIRECTORY)) < 0) {
30*d83cc019SAndroid Build Coastguard Worker fprintf(stderr, "Failure opening %s: %s\n", argv[1], strerror(errno));
31*d83cc019SAndroid Build Coastguard Worker return 1;
32*d83cc019SAndroid Build Coastguard Worker }
33*d83cc019SAndroid Build Coastguard Worker
34*d83cc019SAndroid Build Coastguard Worker if (!initialize_execute_state_from_resume(dirfd, &state, &settings, &job_list)) {
35*d83cc019SAndroid Build Coastguard Worker return 1;
36*d83cc019SAndroid Build Coastguard Worker }
37*d83cc019SAndroid Build Coastguard Worker
38*d83cc019SAndroid Build Coastguard Worker if (!execute(&state, &settings, &job_list)) {
39*d83cc019SAndroid Build Coastguard Worker exitcode = 1;
40*d83cc019SAndroid Build Coastguard Worker }
41*d83cc019SAndroid Build Coastguard Worker
42*d83cc019SAndroid Build Coastguard Worker if (state.time_left == 0.0) {
43*d83cc019SAndroid Build Coastguard Worker /*
44*d83cc019SAndroid Build Coastguard Worker * Overall timeout happened. Results generation can
45*d83cc019SAndroid Build Coastguard Worker * override this
46*d83cc019SAndroid Build Coastguard Worker */
47*d83cc019SAndroid Build Coastguard Worker exitcode = 2;
48*d83cc019SAndroid Build Coastguard Worker }
49*d83cc019SAndroid Build Coastguard Worker
50*d83cc019SAndroid Build Coastguard Worker if (!generate_results_path(settings.results_path)) {
51*d83cc019SAndroid Build Coastguard Worker exitcode = 1;
52*d83cc019SAndroid Build Coastguard Worker }
53*d83cc019SAndroid Build Coastguard Worker
54*d83cc019SAndroid Build Coastguard Worker printf("Done.\n");
55*d83cc019SAndroid Build Coastguard Worker return exitcode;
56*d83cc019SAndroid Build Coastguard Worker }
57