diff options
| -rw-r--r-- | util/nvmutil/nvmutil.c | 27 | 
1 files changed, 11 insertions, 16 deletions
| diff --git a/util/nvmutil/nvmutil.c b/util/nvmutil/nvmutil.c index 55d7e5f6..b6deaeaa 100644 --- a/util/nvmutil/nvmutil.c +++ b/util/nvmutil/nvmutil.c @@ -24,7 +24,6 @@ void showmac(int partnum);  void hexdump(int partnum);  void cmd_setchecksum(void);  void cmd_brick(void); -void cmd_swap(void);  void cmd_copy(void);  int validChecksum(int partnum);  void setWord(int pos16, int partnum, uint16_t val16); @@ -52,7 +51,7 @@ typedef struct op {  op_t op[] = {  { .str = "dump", .cmd = cmd_dump, .args = 3},  { .str = "setmac", .cmd = cmd_setmac, .args = 3}, -{ .str = "swap", .cmd = cmd_swap, .args = 3}, +{ .str = "swap", .cmd = writeGbeFile, .args = 3},  { .str = "copy", .cmd = cmd_copy, .args = 4},  { .str = "brick", .cmd = cmd_brick, .args = 4},  { .str = "setchecksum", .cmd = cmd_setchecksum, .args = 4}, @@ -102,7 +101,7 @@ main(int argc, char *argv[])  	readGbeFile();  	(*cmd)(); -	if ((gbeFileModified) && (flags != O_RDONLY)) +	if ((gbeFileModified) && (flags != O_RDONLY) && (cmd != writeGbeFile))  		writeGbeFile();  	err_if((errno != 0) && (cmd != &cmd_dump));  	return errno; @@ -122,7 +121,7 @@ openFiles(const char *path)  void  readGbeFile(void)  { -	nf = ((cmd == cmd_swap) || (cmd == cmd_copy)) ? SIZE_4KB : nf; +	nf = ((cmd == writeGbeFile) || (cmd == cmd_copy)) ? SIZE_4KB : nf;  	skipread[part ^ 1] = (cmd == &cmd_copy) | (cmd == &cmd_setchecksum)  	    | (cmd == &cmd_brick);  	gbe[1] = (gbe[0] = (size_t) buf) + SIZE_4KB; @@ -243,14 +242,6 @@ cmd_brick(void)  }  void -cmd_swap(void) -{ -	if ((gbeFileModified = nvmPartModified[0] = nvmPartModified[1] -	    = validChecksum(1) | validChecksum(0))) -		xorswap(gbe[0], gbe[1]); /* speedhack: swap ptr, not words */ -} - -void  cmd_copy(void)  {  	if ((gbeFileModified = nvmPartModified[part ^ 1] = validChecksum(part))) @@ -288,11 +279,15 @@ void  writeGbeFile(void)  {  	errno = 0; -	for (int x = gbe[0] > gbe[1] ? 1 : 0, p = 0; p < 2; p++, x ^= 1) { -		if (!nvmPartModified[x]) +	if (cmd == writeGbeFile) { +		err_if(!(validChecksum(0) || validChecksum(1))); +		xorswap(gbe[0], gbe[1]); +	} +	for (int p = 0; p < 2; p++) { +		if ((!nvmPartModified[p]) && (gbe[0] <= gbe[1]))  			continue; -		handle_endianness(x); -		err_if(pwrite(fd, (uint8_t *) gbe[x], nf, x << 12) == -1); +		handle_endianness(p); +		err_if(pwrite(fd, (uint8_t *) gbe[p], nf, p << 12) == -1);  	}  	err_if(close(fd) == -1);  } | 
