summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>2009-06-12 14:02:07 +0000
committerCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>2009-06-12 14:02:07 +0000
commit504e7ef181145a3d59332bfdc57df85747f9b16a (patch)
treeaa97f1646cc8c4183e8329d94ce43c05c89ddb8d
parent45d6475e39e0672df6e56aed427a131813392c48 (diff)
downloadflashrom-504e7ef181145a3d59332bfdc57df85747f9b16a.zip
flashrom-504e7ef181145a3d59332bfdc57df85747f9b16a.tar.gz
Flashrom does not honor argument ordering for operations
Not only does this violate the principle of least surprise, it also caused one bug where -Ewv was specified and the flash ended up being empty. Support only one operation at a time. As a side benefit, this allows us to clean up main() quite a bit. Corresponding to flashrom svn r585. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Uwe Hermann <uwe@hermann-uwe.de>
-rw-r--r--flashrom.85
-rw-r--r--flashrom.c26
2 files changed, 27 insertions, 4 deletions
diff --git a/flashrom.8 b/flashrom.8
index 406e5b0..b652f66 100644
--- a/flashrom.8
+++ b/flashrom.8
@@ -2,7 +2,7 @@
.SH NAME
flashrom \- detect, read, write, verify and erase flash chips
.SH SYNOPSIS
-.B flashrom \fR[\fB\-EVfLhR\fR] [\fB\-r\fR file] [\fB\-w\fR file] [\fB\-v\fR file]
+.B flashrom \fR[\fB\-VfLhR\fR] [\fB\-E\fR|\fB\-r\fR file|\fB\-w\fR file|\fB\-v\fR file]
[\fB\-c\fR chipname] [\fB\-s\fR addr] [\fB\-e\fR addr] [\fB\-m\fR [vendor:]part]
[\fB\-l\fR file] [\fB\-i\fR image] [\fB\-p\fR programmer] [file]
.SH DESCRIPTION
@@ -25,7 +25,8 @@ Please note that the command line interface for flashrom will change before
flashrom 1.0. Do not use flashrom in scripts or other automated tools without
checking that your flashrom version won't interpret options in a different way.
.PP
-If no file is specified, then all that happens
+You can specify one of -E, -r, -w, -v or no operation.
+If no operation is specified, then all that happens
is that flash info is dumped and the flash chip is set to writable.
.TP
.B "\-r, \-\-read <file>"
diff --git a/flashrom.c b/flashrom.c
index 2bb904e..7c3c7f3 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -471,7 +471,7 @@ void print_supported_chips(void)
void usage(const char *name)
{
- printf("usage: %s [-EVfLhR] [-r file] [-w file] [-v file] [-c chipname] [-s addr]\n"
+ printf("usage: %s [-VfLhR] [-E|-r file|-w file|-v file] [-c chipname] [-s addr]\n"
" [-e addr] [-m [vendor:]part] [-l file] [-i image] [-p programmer] [file]\n\n",
name);
@@ -498,7 +498,8 @@ void usage(const char *name)
" (internal, dummy, nic3com, satasii, it87spi)\n"
" -h | --help: print this help text\n"
" -R | --version: print the version (release)\n"
- "\nIf no file is specified, then all that happens"
+ "\nYou can specify one of -E, -r, -w, -v or no operation.\n"
+ "If no operation is specified, then all that happens"
" is that flash info is dumped.\n\n");
exit(1);
}
@@ -520,6 +521,7 @@ int main(int argc, char *argv[])
int force = 0;
int read_it = 0, write_it = 0, erase_it = 0, verify_it = 0;
int list_supported = 0;
+ int operation_specified = 0;
int ret = 0, i;
static struct option long_options[] = {
@@ -562,12 +564,27 @@ int main(int argc, char *argv[])
long_options, &option_index)) != EOF) {
switch (opt) {
case 'r':
+ if (++operation_specified > 1) {
+ fprintf(stderr, "More than one operation "
+ "specified. Aborting.\n");
+ exit(1);
+ }
read_it = 1;
break;
case 'w':
+ if (++operation_specified > 1) {
+ fprintf(stderr, "More than one operation "
+ "specified. Aborting.\n");
+ exit(1);
+ }
write_it = 1;
break;
case 'v':
+ if (++operation_specified > 1) {
+ fprintf(stderr, "More than one operation "
+ "specified. Aborting.\n");
+ exit(1);
+ }
verify_it = 1;
break;
case 'c':
@@ -577,6 +594,11 @@ int main(int argc, char *argv[])
verbose = 1;
break;
case 'E':
+ if (++operation_specified > 1) {
+ fprintf(stderr, "More than one operation "
+ "specified. Aborting.\n");
+ exit(1);
+ }
erase_it = 1;
break;
case 's':
OpenPOWER on IntegriCloud