mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-16 23:08:49 +02:00
util/nvmutil: general code cleanup
Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
+43
-25
@@ -13,11 +13,28 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* On the platforms below, we will use arc4random
|
||||||
|
* for random MAC address generation.
|
||||||
|
*
|
||||||
|
* Later on, the code has fallbacks for other systems.
|
||||||
|
*/
|
||||||
|
#if defined(__OpenBSD__) || defined(__FreeBSD__) || \
|
||||||
|
defined(__NetBSD__) || defined(__APPLE__) || \
|
||||||
|
defined(__DragonFly__)
|
||||||
|
#ifndef HAVE_ARC4RANDOM
|
||||||
|
#define HAVE_ARC4RANDOM
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
static void reset_global_state(void);
|
static void reset_global_state(void);
|
||||||
static void set_cmd(int, char **);
|
static void set_cmd(int, char **);
|
||||||
static void check_cmd_args(int, char **);
|
static void check_cmd_args(int, char **);
|
||||||
static void set_io_flags(int, char **);
|
static void set_io_flags(int, char **);
|
||||||
static void open_files(void);
|
static void open_gbe_file(void);
|
||||||
|
#ifndef HAVE_ARC4RANDOM
|
||||||
|
static void open_dev_urandom(void);
|
||||||
|
#endif
|
||||||
static void xopen(int *, const char *, int, struct stat *);
|
static void xopen(int *, const char *, int, struct stat *);
|
||||||
static void read_gbe(void);
|
static void read_gbe(void);
|
||||||
static void read_gbe_part(size_t, unsigned char);
|
static void read_gbe_part(size_t, unsigned char);
|
||||||
@@ -28,7 +45,7 @@ static void check_mac_separator(size_t);
|
|||||||
static void set_mac_nib(size_t, size_t);
|
static void set_mac_nib(size_t, size_t);
|
||||||
static uint8_t hextonum(char);
|
static uint8_t hextonum(char);
|
||||||
static uint8_t rhex(void);
|
static uint8_t rhex(void);
|
||||||
static void read_file_PERFECTLY_or_die(int, void *, size_t,
|
static void xread(int, void *, size_t,
|
||||||
off_t, const char *, const char *);
|
off_t, const char *, const char *);
|
||||||
static int write_mac_part(size_t);
|
static int write_mac_part(size_t);
|
||||||
static void cmd_dump(void);
|
static void cmd_dump(void);
|
||||||
@@ -53,20 +70,6 @@ static void err(int, const char *, ...);
|
|||||||
static const char *getnvmprogname(void);
|
static const char *getnvmprogname(void);
|
||||||
static void set_err(int);
|
static void set_err(int);
|
||||||
|
|
||||||
/*
|
|
||||||
* On the platforms below, we will use arc4random
|
|
||||||
* for random MAC address generation.
|
|
||||||
*
|
|
||||||
* Later on, the code has fallbacks for other systems.
|
|
||||||
*/
|
|
||||||
#if defined(__OpenBSD__) || defined(__FreeBSD__) || \
|
|
||||||
defined(__NetBSD__) || defined(__APPLE__) || \
|
|
||||||
defined(__DragonFly__)
|
|
||||||
#ifndef HAVE_ARC4RANDOM
|
|
||||||
#define HAVE_ARC4RANDOM
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sizes in bytes:
|
* Sizes in bytes:
|
||||||
*/
|
*/
|
||||||
@@ -201,7 +204,10 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
open_files();
|
#ifndef HAVE_ARC4RANDOM
|
||||||
|
open_dev_urandom();
|
||||||
|
#endif
|
||||||
|
open_gbe_file();
|
||||||
|
|
||||||
#ifdef __OpenBSD__
|
#ifdef __OpenBSD__
|
||||||
if (pledge("stdio", NULL) == -1)
|
if (pledge("stdio", NULL) == -1)
|
||||||
@@ -301,18 +307,22 @@ static void
|
|||||||
set_io_flags(int argc, char *argv[])
|
set_io_flags(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
flags = O_RDWR;
|
flags = O_RDWR;
|
||||||
|
|
||||||
if (argc < 3)
|
if (argc < 3)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (strcmp(argv[2], "dump") == 0)
|
if (strcmp(argv[2], "dump") == 0)
|
||||||
flags = O_RDONLY;
|
flags = O_RDONLY;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
open_files(void)
|
|
||||||
{
|
|
||||||
#ifndef HAVE_ARC4RANDOM
|
#ifndef HAVE_ARC4RANDOM
|
||||||
|
static void
|
||||||
|
open_dev_urandom(void)
|
||||||
|
{
|
||||||
struct stat st_rfd;
|
struct stat st_rfd;
|
||||||
|
|
||||||
rname = newrandom;
|
rname = newrandom;
|
||||||
|
|
||||||
if ((rfd = open(rname, O_RDONLY)) == -1) {
|
if ((rfd = open(rname, O_RDONLY)) == -1) {
|
||||||
/*
|
/*
|
||||||
* Fall back to /dev/random on old platforms
|
* Fall back to /dev/random on old platforms
|
||||||
@@ -321,7 +331,12 @@ open_files(void)
|
|||||||
rname = oldrandom;
|
rname = oldrandom;
|
||||||
xopen(&rfd, rname, O_RDONLY, &st_rfd);
|
xopen(&rfd, rname, O_RDONLY, &st_rfd);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void
|
||||||
|
open_gbe_file(void)
|
||||||
|
{
|
||||||
xopen(&fd, fname, flags, &st);
|
xopen(&fd, fname, flags, &st);
|
||||||
|
|
||||||
switch(st.st_size) {
|
switch(st.st_size) {
|
||||||
@@ -370,7 +385,7 @@ read_gbe(void)
|
|||||||
static void
|
static void
|
||||||
read_gbe_part(size_t p, unsigned char invert)
|
read_gbe_part(size_t p, unsigned char invert)
|
||||||
{
|
{
|
||||||
read_file_PERFECTLY_or_die(fd, gbe_mem_offset(p ^ invert, "pread"),
|
xread(fd, gbe_mem_offset(p ^ invert, "pread"),
|
||||||
GBE_PART_SIZE, gbe_file_offset(p, "pread"), fname, "pread");
|
GBE_PART_SIZE, gbe_file_offset(p, "pread"), fname, "pread");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -410,6 +425,7 @@ static void
|
|||||||
set_mac_byte(size_t mac_pos)
|
set_mac_byte(size_t mac_pos)
|
||||||
{
|
{
|
||||||
size_t nib;
|
size_t nib;
|
||||||
|
|
||||||
check_mac_separator(mac_pos);
|
check_mac_separator(mac_pos);
|
||||||
|
|
||||||
for (nib = 0; nib < 2; nib++)
|
for (nib = 0; nib < 2; nib++)
|
||||||
@@ -487,15 +503,15 @@ hextonum(char ch)
|
|||||||
static uint8_t
|
static uint8_t
|
||||||
rhex(void)
|
rhex(void)
|
||||||
{
|
{
|
||||||
static uint8_t rnum[12];
|
|
||||||
static size_t n = 0;
|
static size_t n = 0;
|
||||||
|
static uint8_t rnum[12];
|
||||||
|
|
||||||
if (!n) {
|
if (!n) {
|
||||||
n = sizeof(rnum);
|
n = sizeof(rnum);
|
||||||
#ifdef HAVE_ARC4RANDOM
|
#ifdef HAVE_ARC4RANDOM
|
||||||
arc4random_buf(rnum, n);
|
arc4random_buf(rnum, n);
|
||||||
#else
|
#else
|
||||||
read_file_PERFECTLY_or_die(rfd, rnum, n, 0, rname, NULL);
|
xread(rfd, rnum, n, 0, rname, NULL);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -503,11 +519,11 @@ rhex(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
read_file_PERFECTLY_or_die(int fd, void *buf, size_t len,
|
xread(int fd, void *buf, size_t len,
|
||||||
off_t off, const char *path, const char *op)
|
off_t off, const char *path, const char *op)
|
||||||
{
|
{
|
||||||
ssize_t rval;
|
|
||||||
int retry;
|
int retry;
|
||||||
|
ssize_t rval;
|
||||||
|
|
||||||
for (retry = 0; retry < MAX_RETRY_READ; retry++) {
|
for (retry = 0; retry < MAX_RETRY_READ; retry++) {
|
||||||
if (op)
|
if (op)
|
||||||
@@ -576,6 +592,7 @@ static void
|
|||||||
print_mac_address(size_t partnum)
|
print_mac_address(size_t partnum)
|
||||||
{
|
{
|
||||||
size_t c;
|
size_t c;
|
||||||
|
|
||||||
for (c = 0; c < 3; c++) {
|
for (c = 0; c < 3; c++) {
|
||||||
uint16_t val16 = word(c, partnum);
|
uint16_t val16 = word(c, partnum);
|
||||||
printf("%02x:%02x", val16 & 0xff, val16 >> 8);
|
printf("%02x:%02x", val16 & 0xff, val16 >> 8);
|
||||||
@@ -688,6 +705,7 @@ good_checksum(size_t partnum)
|
|||||||
{
|
{
|
||||||
size_t w;
|
size_t w;
|
||||||
uint16_t total = 0;
|
uint16_t total = 0;
|
||||||
|
|
||||||
for (w = 0; w <= NVM_CHECKSUM_WORD; w++)
|
for (w = 0; w <= NVM_CHECKSUM_WORD; w++)
|
||||||
total += word(w, partnum);
|
total += word(w, partnum);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user