util/nvmutil: err if fewer bytes written
it will probably never happen, and this is technically not an error condition of pread/pwrite, but we need it to read and write that exact number of bytes, as per nf Signed-off-by: Leah Rowe <leah@libreboot.org>master
parent
5c9edb8ffe
commit
508509e4e5
|
@ -34,7 +34,8 @@ uint8_t hextonum(char chs), rhex(void);
|
||||||
#define SIZE_128KB 0x20000
|
#define SIZE_128KB 0x20000
|
||||||
|
|
||||||
uint16_t mac[3] = {0, 0, 0};
|
uint16_t mac[3] = {0, 0, 0};
|
||||||
size_t partsize, nf, gbe[2];
|
ssize_t nf;
|
||||||
|
size_t partsize, gbe[2];
|
||||||
uint8_t nvmPartChanged[2] = {0, 0}, do_read[2] = {1, 1};
|
uint8_t nvmPartChanged[2] = {0, 0}, do_read[2] = {1, 1};
|
||||||
int e = 1, flags, rfd, fd, part, gbeFileChanged = 0;
|
int e = 1, flags, rfd, fd, part, gbeFileChanged = 0;
|
||||||
|
|
||||||
|
@ -420,15 +421,19 @@ writeGbe(void)
|
||||||
if ((!gbeFileChanged) || (flags == O_RDONLY))
|
if ((!gbeFileChanged) || (flags == O_RDONLY))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
size_t tbw = 0; /* total bytes written */
|
ssize_t tbw = 0; /* total bytes written */
|
||||||
|
|
||||||
for (int p = 0; p < 2; p++) {
|
for (int p = 0; p < 2; p++) {
|
||||||
if ((!nvmPartChanged[p]))
|
if ((!nvmPartChanged[p]))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
swap(p); /* swap bytes on big-endian host CPUs */
|
swap(p); /* swap bytes on big-endian host CPUs */
|
||||||
err_if(pwrite(fd, (uint8_t *) gbe[p], nf, p * partsize)
|
ssize_t bw = pwrite(fd, (uint8_t *) gbe[p], nf, p * partsize);
|
||||||
== -1);
|
err_if(bw == -1);
|
||||||
|
if (bw != nf)
|
||||||
|
err(errno == ECANCELED,
|
||||||
|
"%ld bytes written on '%s', expected %ld bytes\n",
|
||||||
|
bw, filename, nf);
|
||||||
|
|
||||||
tbw += nf;
|
tbw += nf;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue