From patchwork Tue Apr 5 21:13:42 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Fenkart X-Patchwork-Id: 606759 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 3qfhSn1RCcz9s5l for ; Wed, 6 Apr 2016 07:14:49 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 2BAF5B3830; Tue, 5 Apr 2016 23:14:31 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id RwIOMh3w6yGI; Tue, 5 Apr 2016 23:14:31 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id B3612B383D; Tue, 5 Apr 2016 23:14:30 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 3F86FB3876 for ; Tue, 5 Apr 2016 23:14:28 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id QjsocCgyP1jZ for ; Tue, 5 Apr 2016 23:14:28 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail.newtechgroup.ch (mail.newtechgroup.ch [83.144.237.166]) by theia.denx.de (Postfix) with ESMTPS id 4D3AAB383D for ; Tue, 5 Apr 2016 23:14:21 +0200 (CEST) Received: from localhost (192.168.1.1) by vsrv-mailch01.newtechgroup.local (192.168.1.208) with Microsoft SMTP Server (TLS) id 15.0.775.38; Tue, 5 Apr 2016 23:14:20 +0200 From: Andreas Fenkart To: Date: Tue, 5 Apr 2016 23:13:42 +0200 Message-ID: <1459890822-11382-6-git-send-email-andreas.fenkart@digitalstrom.com> X-Mailer: git-send-email 2.8.0.rc3 In-Reply-To: <1459890822-11382-1-git-send-email-andreas.fenkart@digitalstrom.com> References: <1459890822-11382-1-git-send-email-andreas.fenkart@digitalstrom.com> MIME-Version: 1.0 X-Originating-IP: [192.168.1.1] X-ClientProxiedBy: VSRV-MAILCH01.newtechgroup.local (192.168.1.208) To vsrv-mailch01.newtechgroup.local (192.168.1.208) X-Brightmail-Tracker: H4sIAAAAAAAAC+NgFmpkVWLjYjmwgpFRd40WS7jB2n/XVjJbnHv3ltniQD+/xdcmYwfmAIYo1sy8pPyKBNaMg9PmsBSccaq4cGoRUwPjBJMuRi4OIYF1jBL/l+xm7GLk5GATsJB4eGcKC4gtIiAh8av/KlicWSBC4uS9dmYQW1ggSqJh+Vc2EJtFQEXi4cp9YDavQIDE2iW/mEBsCQEliQ0PLoDZnAKBEue3zWQHsYWAam6172WCqBeUODnzCQvEfAmJgy9eAM3nAKrRlejfLg0xJlDi0IFNrBC2u8Ts17eZIWx7iXUvvrGClEsIOEo8+RAKU/J520qocm2J7a/2Qdk6Esv3TWeHsOUlfm5dAnVlpcTFx5eh4vESTUe/QNWHSjw4e51pAqPELCSHzkJy6AJGplWMCmXFRWW6uYmZOckZBoZ6eanlJanJGelF+aUFejn5yYk5mxgh0XNhB2Pza/dDjJIcTEqivPveM4cL8SXlp1RmJBZnxBeV5qQWH2KU4OBREuE9oMESLsRbXJCYW5yZDpOS4eBQkuAV0wRKCRalpqdWpGXmlKQWQaRPMUpKifMGgvQJgPRllObB5S4xikoJ805RAcrxFKQW5WaWQMRvMQpzPGQSYsnLz0uVAjqRAQg0GF8xinMwKgnzcoAs4snMK4E74RXQdUxA19ULM4FcV5KIkJJqYDSpODEj7lm/bKFk6jxzt1uF94WrjyRHJu+ynK38+f7/7/+5ha4lLed0vvZmX/ufysZlny7v5Xi5bGWvdmFfgPX23bffTf7lcfZugkQw8zxTwezJJ7+LtsvFOmaxddV+f1/B/ULMdZ5VYM2q/RNeXktuzDvzcfkDzt/zb1y3E8/yV5fKeOd7mFGJpTgj0VCLuag4EQAiRThtFAMAAA== Subject: [U-Boot] [PATCH 5/5] tools/env: no global variable sharing between application and library X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Signed-off-by: Andreas Fenkart --- tools/env/fw_env.c | 50 +++++++++++++++++++++++-------------------------- tools/env/fw_env.h | 25 +++++++------------------ tools/env/fw_env_main.c | 28 +++++++++++++++++---------- 3 files changed, 48 insertions(+), 55 deletions(-) diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c index 3525563..9edefd7 100644 --- a/tools/env/fw_env.c +++ b/tools/env/fw_env.c @@ -35,10 +35,6 @@ #include "fw_env.h" -struct common_args common_args; -struct printenv_args printenv_args; -struct setenv_args setenv_args; - #define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) #define min(x, y) ({ \ @@ -121,7 +117,7 @@ static unsigned char obsolete_flag = 0; static int flash_io (int mode); static char *envmatch (char * s1, char * s2); -static int parse_config (void); +static int parse_config(struct env_opts *opts); #if defined(CONFIG_FILE) static int get_config (char *); @@ -229,12 +225,12 @@ int parse_aes_key(char *key, uint8_t *bin_key) * Print the current definition of one, or more, or all * environment variables */ -int fw_printenv(int argc, char *argv[], int value_only) +int fw_printenv(int argc, char *argv[], int value_only, struct env_opts *opts) { char *env, *nxt; int i, rc = 0; - if (fw_env_open()) + if (fw_env_open(opts)) return -1; if (argc == 0) { /* Print all env variables */ @@ -290,12 +286,13 @@ int fw_printenv(int argc, char *argv[], int value_only) return rc; } -int fw_env_close(void) +int fw_env_close(struct env_opts *opts) { int ret; - if (common_args.aes_flag) { + + if (opts->aes_flag) { ret = env_aes_cbc_crypt(environment.data, 1, - common_args.aes_key); + opts->aes_key); if (ret) { fprintf(stderr, "Error: can't encrypt env for flash\n"); @@ -448,7 +445,7 @@ int fw_env_write(char *name, char *value) * modified or deleted * */ -int fw_setenv(int argc, char *argv[]) +int fw_setenv(int argc, char *argv[], struct env_opts *opts) { int i; size_t len; @@ -462,7 +459,7 @@ int fw_setenv(int argc, char *argv[]) return -1; } - if (fw_env_open()) { + if (fw_env_open(opts)) { fprintf(stderr, "Error: environment not initialized\n"); return -1; } @@ -498,7 +495,7 @@ int fw_setenv(int argc, char *argv[]) free(value); - return fw_env_close(); + return fw_env_close(opts); } /* @@ -518,7 +515,7 @@ int fw_setenv(int argc, char *argv[]) * 0 - OK * -1 - Error */ -int fw_parse_script(char *fname) +int fw_parse_script(char *fname, struct env_opts *opts) { FILE *fp; char dump[1024]; /* Maximum line length in the file */ @@ -528,7 +525,7 @@ int fw_parse_script(char *fname) int len; int ret = 0; - if (fw_env_open()) { + if (fw_env_open(opts)) { fprintf(stderr, "Error: environment not initialized\n"); return -1; } @@ -616,10 +613,9 @@ int fw_parse_script(char *fname) if (strcmp(fname, "-") != 0) fclose(fp); - ret |= fw_env_close(); + ret |= fw_env_close(opts); return ret; - } /* @@ -1130,7 +1126,7 @@ static char *envmatch (char * s1, char * s2) /* * Prevent confusion if running from erased flash memory */ -int fw_env_open(void) +int fw_env_open(struct env_opts *opts) { int crc0, crc0_ok; unsigned char flag0; @@ -1145,7 +1141,7 @@ int fw_env_open(void) struct env_image_single *single; struct env_image_redundant *redundant; - if (parse_config ()) /* should fill envdevices */ + if (parse_config(opts)) /* should fill envdevices */ return -1; addr0 = calloc(1, CUR_ENVSIZE); @@ -1177,9 +1173,9 @@ int fw_env_open(void) crc0 = crc32 (0, (uint8_t *) environment.data, ENV_SIZE); - if (common_args.aes_flag) { + if (opts->aes_flag) { ret = env_aes_cbc_crypt(environment.data, 0, - common_args.aes_key); + opts->aes_key); if (ret) return ret; } @@ -1235,9 +1231,9 @@ int fw_env_open(void) crc1 = crc32 (0, (uint8_t *) redundant->data, ENV_SIZE); - if (common_args.aes_flag) { + if (opts->aes_flag) { ret = env_aes_cbc_crypt(redundant->data, 0, - common_args.aes_key); + opts->aes_key); if (ret) return ret; } @@ -1314,15 +1310,15 @@ int fw_env_open(void) } -static int parse_config () +static int parse_config(struct env_opts *opts) { struct stat st; #if defined(CONFIG_FILE) /* Fills in DEVNAME(), ENVSIZE(), DEVESIZE(). Or don't. */ - if (get_config(common_args.config_file)) { + if (get_config(opts->config_file)) { fprintf(stderr, "Cannot parse config file '%s': %m\n", - common_args.config_file); + opts->config_file); return -1; } #else @@ -1382,7 +1378,7 @@ static int parse_config () if (HaveRedundEnv) usable_envsize -= sizeof(char); - if (common_args.aes_flag) + if (opts->aes_flag) usable_envsize &= ~(AES_KEY_LENGTH - 1); return 0; diff --git a/tools/env/fw_env.h b/tools/env/fw_env.h index d4daeea..dac964d 100644 --- a/tools/env/fw_env.h +++ b/tools/env/fw_env.h @@ -57,33 +57,22 @@ "bootm" #endif -struct common_args { +struct env_opts { #ifdef CONFIG_FILE char *config_file; #endif - uint8_t aes_key[AES_KEY_LENGTH]; int aes_flag; /* Is AES encryption used? */ + uint8_t aes_key[AES_KEY_LENGTH]; }; -extern struct common_args common_args; - -struct printenv_args { - int value_only; -}; -extern struct printenv_args printenv_args; - -struct setenv_args { - char *script_file; -}; -extern struct setenv_args setenv_args; int parse_aes_key(char *key, uint8_t *bin_key); -int fw_printenv(int argc, char *argv[], int value_only); +int fw_printenv(int argc, char *argv[], int value_only, struct env_opts *opts); char *fw_getenv(char *name); -int fw_setenv(int argc, char *argv[]); -int fw_parse_script(char *fname); -int fw_env_open(void); +int fw_setenv(int argc, char *argv[], struct env_opts *opts); +int fw_parse_script(char *fname, struct env_opts *opts); +int fw_env_open(struct env_opts *opts); int fw_env_write(char *name, char *value); -int fw_env_close(void); +int fw_env_close(struct env_opts *opts); unsigned long crc32(unsigned long, const unsigned char *, unsigned); diff --git a/tools/env/fw_env_main.c b/tools/env/fw_env_main.c index 2a45a0d..7a17b28 100644 --- a/tools/env/fw_env_main.c +++ b/tools/env/fw_env_main.c @@ -49,6 +49,14 @@ static struct option long_options[] = { {NULL, 0, NULL, 0} }; +static struct env_opts env_opts; + +/* setenv options */ +static int noheader; + +/* getenv options */ +static char *script_file; + void usage_printenv(void) { @@ -108,22 +116,22 @@ static void parse_common_args(int argc, char *argv[]) int c; #ifdef CONFIG_FILE - common_args.config_file = CONFIG_FILE; + env_opts.config_file = CONFIG_FILE; #endif while ((c = getopt_long(argc, argv, ":a:c:h", long_options, NULL)) != EOF) { switch (c) { case 'a': - if (parse_aes_key(optarg, common_args.aes_key)) { + if (parse_aes_key(optarg, env_opts.aes_key)) { fprintf(stderr, "AES key parse error\n"); exit(EXIT_FAILURE); } - common_args.aes_flag = 1; + env_opts.aes_flag = 1; break; #ifdef CONFIG_FILE case 'c': - common_args.config_file = optarg; + env_opts.config_file = optarg; break; #endif case 'h': @@ -151,7 +159,7 @@ int parse_printenv_args(int argc, char *argv[]) EOF) { switch (c) { case 'n': - printenv_args.value_only = 1; + noheader = 1; break; case 'a': case 'c': @@ -177,7 +185,7 @@ int parse_setenv_args(int argc, char *argv[]) EOF) { switch (c) { case 's': - setenv_args.script_file = optarg; + script_file = optarg; break; case 'a': case 'c': @@ -240,14 +248,14 @@ int main(int argc, char *argv[]) } if (do_printenv) { - if (fw_printenv(argc, argv, printenv_args.value_only)) + if (fw_printenv(argc, argv, noheader, &env_opts) != 0) retval = EXIT_FAILURE; } else { - if (!setenv_args.script_file) { - if (fw_setenv(argc, argv) != 0) + if (!script_file) { + if (fw_setenv(argc, argv, &env_opts) != 0) retval = EXIT_FAILURE; } else { - if (fw_parse_script(setenv_args.script_file) != 0) + if (fw_parse_script(script_file, &env_opts) != 0) retval = EXIT_FAILURE; } }