1*5a923131SAndroid Build Coastguard Worker //
2*5a923131SAndroid Build Coastguard Worker // Copyright (C) 2012 The Android Open Source Project
3*5a923131SAndroid Build Coastguard Worker //
4*5a923131SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
5*5a923131SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
6*5a923131SAndroid Build Coastguard Worker // You may obtain a copy of the License at
7*5a923131SAndroid Build Coastguard Worker //
8*5a923131SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0
9*5a923131SAndroid Build Coastguard Worker //
10*5a923131SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
11*5a923131SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
12*5a923131SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*5a923131SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
14*5a923131SAndroid Build Coastguard Worker // limitations under the License.
15*5a923131SAndroid Build Coastguard Worker //
16*5a923131SAndroid Build Coastguard Worker
17*5a923131SAndroid Build Coastguard Worker // This is a simple program used to test interaction with update_engine when
18*5a923131SAndroid Build Coastguard Worker // executing other programs. This program receives pre-programmed actions in the
19*5a923131SAndroid Build Coastguard Worker // command line and executes them in order.
20*5a923131SAndroid Build Coastguard Worker
21*5a923131SAndroid Build Coastguard Worker #include <errno.h>
22*5a923131SAndroid Build Coastguard Worker #include <stdlib.h>
23*5a923131SAndroid Build Coastguard Worker #include <sys/stat.h>
24*5a923131SAndroid Build Coastguard Worker #include <sys/types.h>
25*5a923131SAndroid Build Coastguard Worker #include <unistd.h>
26*5a923131SAndroid Build Coastguard Worker
27*5a923131SAndroid Build Coastguard Worker #include <string>
28*5a923131SAndroid Build Coastguard Worker
29*5a923131SAndroid Build Coastguard Worker #define EX_USAGE_ERROR 100
30*5a923131SAndroid Build Coastguard Worker
usage(const char * program,const char * error)31*5a923131SAndroid Build Coastguard Worker void usage(const char* program, const char* error) {
32*5a923131SAndroid Build Coastguard Worker if (error)
33*5a923131SAndroid Build Coastguard Worker fprintf(stderr, "ERROR: %s\n", error);
34*5a923131SAndroid Build Coastguard Worker fprintf(stderr, "Usage: %s <cmd> [args..]\n", program);
35*5a923131SAndroid Build Coastguard Worker exit(EX_USAGE_ERROR);
36*5a923131SAndroid Build Coastguard Worker }
37*5a923131SAndroid Build Coastguard Worker
main(int argc,char ** argv,char ** envp)38*5a923131SAndroid Build Coastguard Worker int main(int argc, char** argv, char** envp) {
39*5a923131SAndroid Build Coastguard Worker if (argc < 2)
40*5a923131SAndroid Build Coastguard Worker usage(argv[0], "No command passed");
41*5a923131SAndroid Build Coastguard Worker
42*5a923131SAndroid Build Coastguard Worker std::string cmd(argv[1]);
43*5a923131SAndroid Build Coastguard Worker if (cmd == "fstat") {
44*5a923131SAndroid Build Coastguard Worker // Call fstat on the passed file descriptor number
45*5a923131SAndroid Build Coastguard Worker if (argc < 3)
46*5a923131SAndroid Build Coastguard Worker usage(argv[0], "No fd passed to fstat");
47*5a923131SAndroid Build Coastguard Worker int fd = atoi(argv[2]);
48*5a923131SAndroid Build Coastguard Worker struct stat buf;
49*5a923131SAndroid Build Coastguard Worker int rc = fstat(fd, &buf);
50*5a923131SAndroid Build Coastguard Worker if (rc < 0) {
51*5a923131SAndroid Build Coastguard Worker int ret = errno;
52*5a923131SAndroid Build Coastguard Worker perror("fstat");
53*5a923131SAndroid Build Coastguard Worker return ret;
54*5a923131SAndroid Build Coastguard Worker }
55*5a923131SAndroid Build Coastguard Worker return 0;
56*5a923131SAndroid Build Coastguard Worker }
57*5a923131SAndroid Build Coastguard Worker
58*5a923131SAndroid Build Coastguard Worker usage(argv[0], "Unknown command");
59*5a923131SAndroid Build Coastguard Worker }
60