/src/barebox/commands/defaultenv.c
Line | Count | Source |
1 | | // SPDX-License-Identifier: GPL-2.0-only |
2 | | // SPDX-FileCopyrightText: © 2014 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix |
3 | | |
4 | | #include <common.h> |
5 | | #include <getopt.h> |
6 | | #include <command.h> |
7 | | #include <envfs.h> |
8 | | #include <errno.h> |
9 | | #include <fs.h> |
10 | | #include <libfile.h> |
11 | | #include <malloc.h> |
12 | | #include <globalvar.h> |
13 | | |
14 | | static int do_defaultenv(int argc, char *argv[]) |
15 | 0 | { |
16 | 0 | char *dirname; |
17 | 0 | int opt, ret; |
18 | 0 | char *restorepath = "/"; |
19 | 0 | char *from, *to; |
20 | 0 | int restore = 0, scrub = 0; |
21 | |
|
22 | 0 | while ((opt = getopt(argc, argv, "p:rs")) > 0) { |
23 | 0 | switch (opt) { |
24 | 0 | case 'r': |
25 | 0 | restore = 1; |
26 | 0 | break; |
27 | 0 | case 'p': |
28 | 0 | restorepath = optarg; |
29 | 0 | break; |
30 | 0 | case 's': |
31 | 0 | scrub = 1; |
32 | 0 | break; |
33 | 0 | default: |
34 | 0 | return COMMAND_ERROR_USAGE; |
35 | 0 | } |
36 | 0 | } |
37 | | |
38 | 0 | if (!restore || argc != optind) |
39 | 0 | return COMMAND_ERROR_USAGE; |
40 | | |
41 | 0 | dirname = "/env"; |
42 | |
|
43 | 0 | make_directory(dirname); |
44 | |
|
45 | 0 | ret = defaultenv_load("/.defaultenv", 0); |
46 | 0 | if (ret) |
47 | 0 | return ret; |
48 | | |
49 | 0 | from = basprintf("/.defaultenv/%s", restorepath); |
50 | 0 | to = basprintf("%s/%s", dirname, restorepath); |
51 | |
|
52 | 0 | printf("Restoring %s from default environment\n", restorepath); |
53 | |
|
54 | 0 | if (scrub) |
55 | 0 | unlink_recursive(to, NULL); |
56 | |
|
57 | 0 | ret = copy_recursive(from, to, 0); |
58 | 0 | free(from); |
59 | 0 | free(to); |
60 | |
|
61 | 0 | nvvar_load(); |
62 | |
|
63 | 0 | unlink_recursive("/.defaultenv", NULL); |
64 | |
|
65 | 0 | return ret; |
66 | 0 | } |
67 | | |
68 | | BAREBOX_CMD_HELP_START(defaultenv) |
69 | | BAREBOX_CMD_HELP_TEXT("Options:") |
70 | | BAREBOX_CMD_HELP_OPT("-r", "restore default environment") |
71 | | BAREBOX_CMD_HELP_OPT("-s", "scrub, remove files not in default environment") |
72 | | BAREBOX_CMD_HELP_OPT("-p <PATH>", "limit to <PATH>") |
73 | | BAREBOX_CMD_HELP_END |
74 | | |
75 | | BAREBOX_CMD_START(defaultenv) |
76 | | .cmd = do_defaultenv, |
77 | | BAREBOX_CMD_DESC("Restore environment from default environment") |
78 | | BAREBOX_CMD_OPTS("[-rs] [-p <PATH>]") |
79 | | BAREBOX_CMD_GROUP(CMD_GRP_ENV) |
80 | | BAREBOX_CMD_HELP(cmd_defaultenv_help) |
81 | | BAREBOX_CMD_END |