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
Leah Rowe 2025-01-27 04:55:05 +00:00
parent 5c9edb8ffe
commit 508509e4e5
1 changed files with 9 additions and 4 deletions

View File

@ -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;
} }