util/nvmutil: optimise rhex() for speed
don't constantly open/close the file: /dev/urandom only read 12 bytes at a time because of this change, the readFromFile() function now only handles gbe filesfsdg20230625
parent
88a51531cf
commit
ef84329a81
|
@ -32,8 +32,8 @@
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <err.h>
|
#include <err.h>
|
||||||
|
|
||||||
ssize_t readFromFile(int *fd, uint8_t *buf, const char *path, int flags,
|
ssize_t readGbeFile(int *fd, uint8_t *buf, const char *path, int flags,
|
||||||
size_t size);
|
size_t nr);
|
||||||
void cmd_setmac(const char *strMac);
|
void cmd_setmac(const char *strMac);
|
||||||
uint8_t hextonum(char chs);
|
uint8_t hextonum(char chs);
|
||||||
uint8_t rhex(void);
|
uint8_t rhex(void);
|
||||||
|
@ -119,7 +119,7 @@ main(int argc, char *argv[])
|
||||||
|
|
||||||
if ((strMac == NULL) && (cmd == NULL))
|
if ((strMac == NULL) && (cmd == NULL))
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
else if (readFromFile(&fd, buf, FILENAME, flags, SIZE_8KB) != SIZE_8KB)
|
else if (readGbeFile(&fd, buf, FILENAME, flags, SIZE_8KB) != SIZE_8KB)
|
||||||
goto nvmutil_exit;
|
goto nvmutil_exit;
|
||||||
|
|
||||||
if (errno == 0) {
|
if (errno == 0) {
|
||||||
|
@ -141,31 +141,29 @@ nvmutil_exit:
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
readFromFile(int *fd, uint8_t *buf, const char *path, int flags, size_t size)
|
readGbeFile(int *fd, uint8_t *buf, const char *path, int flags, size_t nr)
|
||||||
{
|
{
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
if (opendir(path) != NULL) {
|
if (opendir(path) != NULL) {
|
||||||
errno = EISDIR;
|
errno = EISDIR;
|
||||||
return -1;
|
return -1;
|
||||||
} else if (((*fd) = open(path, flags)) == -1) {
|
|
||||||
return -1;
|
|
||||||
} else if (size == SIZE_8KB) {
|
|
||||||
if (fstat((*fd), &st) == -1)
|
|
||||||
return -1;
|
|
||||||
if ((st.st_size != SIZE_8KB) && strcmp(path, "/dev/urandom")) {
|
|
||||||
fprintf(stderr, "Bad file size\n");
|
|
||||||
errno = ECANCELED;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (((*fd) = open(path, flags)) == -1) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (fstat((*fd), &st) == -1)
|
||||||
|
return -1;
|
||||||
|
if ((st.st_size != SIZE_8KB)) {
|
||||||
|
fprintf(stderr, "%s: Bad file size\n", path);
|
||||||
|
errno = ECANCELED;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
if (errno == ENOTDIR)
|
if (errno == ENOTDIR)
|
||||||
errno = 0;
|
errno = 0;
|
||||||
else if (errno != 0)
|
if (errno != 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
return read((*fd), buf, nr);
|
||||||
return read((*fd), buf, size);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -251,23 +249,17 @@ rhex(void)
|
||||||
{
|
{
|
||||||
static int rfd = -1;
|
static int rfd = -1;
|
||||||
static uint8_t *rbuf = NULL;
|
static uint8_t *rbuf = NULL;
|
||||||
static size_t rindex = BUFSIZ;
|
static size_t rindex = 12;
|
||||||
int bsize = BUFSIZ;
|
|
||||||
|
|
||||||
if (rindex == bsize) {
|
if (rindex == 12) {
|
||||||
rindex = 0;
|
rindex = 0;
|
||||||
if (rbuf == NULL)
|
if (rbuf == NULL)
|
||||||
if ((rbuf = (uint8_t *) malloc(bsize)) == NULL)
|
if ((rbuf = (uint8_t *) malloc(BUFSIZ)) == NULL)
|
||||||
err(errno, NULL);
|
err(errno, NULL);
|
||||||
if (rfd != -1) {
|
if (rfd == -1)
|
||||||
if (close(rfd))
|
if ((rfd = open("/dev/urandom", O_RDONLY)) == -1)
|
||||||
err(errno, "/dev/urandom");
|
err(errno, "/dev/urandom");
|
||||||
rfd = -1;
|
if (read(rfd, rbuf, 12) == -1)
|
||||||
}
|
|
||||||
if (readFromFile(&rfd, rbuf, "/dev/urandom", O_RDONLY, bsize)
|
|
||||||
!= bsize)
|
|
||||||
err(errno, "/dev/urandom");
|
|
||||||
if (errno != 0)
|
|
||||||
err(errno, "/dev/urandom");
|
err(errno, "/dev/urandom");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue