mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-11 05:52:36 +02:00
util/nvmutil: don't use size_t/ssize_t
not portable. some old systems don't have it, or handle it very poorly unsigned long is a reasonable way to refer to indexes inside pointters Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
+150
-153
@@ -234,9 +234,6 @@ also consider:
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
typedef long ssize_t;
|
||||
typedef unsigned long size_t;
|
||||
|
||||
typedef unsigned char u8;
|
||||
typedef unsigned short ushort;
|
||||
typedef unsigned int uint;
|
||||
@@ -261,8 +258,8 @@ typedef char static_assert_twos_complement[
|
||||
typedef char assert_ulong_ptr[
|
||||
(sizeof(ulong) >= sizeof(void *)) ? 1 : -1
|
||||
];
|
||||
typedef char assert_size_t_ptr[
|
||||
(sizeof(size_t) >= sizeof(void *)) ? 1 : -1
|
||||
typedef char assert_unsigned_long_ptr[
|
||||
(sizeof(unsigned long) >= sizeof(void *)) ? 1 : -1
|
||||
];
|
||||
|
||||
/*
|
||||
@@ -327,15 +324,15 @@ typedef char static_assert_off_t_is_32[(sizeof(off_t) >= 4) ? 1 : -1];
|
||||
* Sanitize command tables.
|
||||
*/
|
||||
static void sanitize_command_list(void);
|
||||
static void sanitize_command_index(size_t c);
|
||||
static void sanitize_command_index(unsigned long c);
|
||||
|
||||
/*
|
||||
* Argument handling (user input)
|
||||
*/
|
||||
static void set_cmd(int argc, char *argv[]);
|
||||
static void set_cmd_args(int argc, char *argv[]);
|
||||
static size_t conv_argv_part_num(const char *part_str);
|
||||
static int xstrxcmp(const char *a, const char *b, size_t maxlen);
|
||||
static unsigned long conv_argv_part_num(const char *part_str);
|
||||
static int xstrxcmp(const char *a, const char *b, unsigned long maxlen);
|
||||
|
||||
/*
|
||||
* Prep files for reading
|
||||
@@ -352,15 +349,15 @@ static void xopen(int *fd, const char *path, int flags, struct stat *st);
|
||||
*/
|
||||
static void copy_gbe(void);
|
||||
static void read_checksums(void);
|
||||
static int good_checksum(size_t partnum);
|
||||
static int good_checksum(unsigned long partnum);
|
||||
|
||||
/*
|
||||
* Execute user command on GbE data.
|
||||
* These are stubs that call helpers.
|
||||
*/
|
||||
static void run_cmd(size_t c);
|
||||
static void check_command_num(size_t c);
|
||||
static u8 valid_command(size_t c);
|
||||
static void run_cmd(unsigned long c);
|
||||
static void check_command_num(unsigned long c);
|
||||
static u8 valid_command(unsigned long c);
|
||||
|
||||
/*
|
||||
* portable timeval
|
||||
@@ -375,23 +372,23 @@ struct x_st_timeval {
|
||||
*/
|
||||
static void cmd_helper_setmac(void);
|
||||
static void parse_mac_string(void);
|
||||
static size_t xstrxlen(const char *scmp, size_t maxlen);
|
||||
static void set_mac_byte(size_t mac_byte_pos);
|
||||
static void set_mac_nib(size_t mac_str_pos,
|
||||
size_t mac_byte_pos, size_t mac_nib_pos);
|
||||
static unsigned long xstrxlen(const char *scmp, unsigned long maxlen);
|
||||
static void set_mac_byte(unsigned long mac_byte_pos);
|
||||
static void set_mac_nib(unsigned long mac_str_pos,
|
||||
unsigned long mac_byte_pos, unsigned long mac_nib_pos);
|
||||
static ushort hextonum(char ch_s);
|
||||
static ushort rhex(void);
|
||||
static ushort read_urandom(void);
|
||||
static ulong entropy_jitter(void);
|
||||
static int x_i_gettimeofday(struct x_st_timeval *tv, void *tz);
|
||||
static void write_mac_part(size_t partnum);
|
||||
static void write_mac_part(unsigned long partnum);
|
||||
|
||||
/*
|
||||
* Helper functions for command: dump
|
||||
*/
|
||||
static void cmd_helper_dump(void);
|
||||
static void print_mac_from_nvm(size_t partnum);
|
||||
static void hexdump(size_t partnum);
|
||||
static void print_mac_from_nvm(unsigned long partnum);
|
||||
static void hexdump(unsigned long partnum);
|
||||
|
||||
/*
|
||||
* Helper functions for command: swap
|
||||
@@ -418,46 +415,46 @@ static void cat_buf(u8 *b);
|
||||
* below for the actual functions.
|
||||
*/
|
||||
static void write_gbe_file(void);
|
||||
static void set_checksum(size_t part);
|
||||
static ushort calculated_checksum(size_t p);
|
||||
static void set_checksum(unsigned long part);
|
||||
static ushort calculated_checksum(unsigned long p);
|
||||
|
||||
/*
|
||||
* Helper functions for accessing
|
||||
* the NVM area during operation.
|
||||
*/
|
||||
static ushort nvm_word(size_t pos16, size_t part);
|
||||
static void set_nvm_word(size_t pos16, size_t part, ushort val16);
|
||||
static void set_part_modified(size_t p);
|
||||
static void check_nvm_bound(size_t pos16, size_t part);
|
||||
static void check_bin(size_t a, const char *a_name);
|
||||
static ushort nvm_word(unsigned long pos16, unsigned long part);
|
||||
static void set_nvm_word(unsigned long pos16, unsigned long part, ushort val16);
|
||||
static void set_part_modified(unsigned long p);
|
||||
static void check_nvm_bound(unsigned long pos16, unsigned long part);
|
||||
static void check_bin(unsigned long a, const char *a_name);
|
||||
|
||||
/*
|
||||
* Helper functions for stub functions
|
||||
* that handle GbE file reads/writes.
|
||||
*/
|
||||
static void rw_gbe_file_part(size_t p, int rw_type,
|
||||
static void rw_gbe_file_part(unsigned long p, int rw_type,
|
||||
const char *rw_type_str);
|
||||
static void write_to_gbe_bin(void);
|
||||
static int gbe_mv(void);
|
||||
static void check_written_part(size_t p);
|
||||
static void check_written_part(unsigned long p);
|
||||
static void report_io_err_rw(void);
|
||||
static int fsync_dir(const char *path);
|
||||
static u8 *gbe_mem_offset(size_t part, const char *f_op);
|
||||
static off_t gbe_file_offset(size_t part, const char *f_op);
|
||||
static off_t gbe_x_offset(size_t part, const char *f_op,
|
||||
static u8 *gbe_mem_offset(unsigned long part, const char *f_op);
|
||||
static off_t gbe_file_offset(unsigned long part, const char *f_op);
|
||||
static off_t gbe_x_offset(unsigned long part, const char *f_op,
|
||||
const char *d_type, off_t nsize, off_t ncmp);
|
||||
static ssize_t rw_gbe_file_exact(int fd, u8 *mem, size_t nrw,
|
||||
static long rw_gbe_file_exact(int fd, u8 *mem, unsigned long nrw,
|
||||
off_t off, int rw_type);
|
||||
static ssize_t rw_file_exact(int fd, u8 *mem, size_t len,
|
||||
static long rw_file_exact(int fd, u8 *mem, unsigned long len,
|
||||
off_t off, int rw_type, int loop_eagain, int loop_eintr,
|
||||
size_t max_retries, int off_reset);
|
||||
static ssize_t prw(int fd, void *mem, size_t nrw,
|
||||
unsigned long max_retries, int off_reset);
|
||||
static long prw(int fd, void *mem, unsigned long nrw,
|
||||
off_t off, int rw_type, int loop_eagain, int loop_eintr,
|
||||
int off_reset);
|
||||
static int io_args(int fd, void *mem, size_t nrw,
|
||||
static int io_args(int fd, void *mem, unsigned long nrw,
|
||||
off_t off, int rw_type);
|
||||
static int check_file(int fd, struct stat *st);
|
||||
static ssize_t rw_over_nrw(ssize_t r, size_t nrw);
|
||||
static long rw_over_nrw(long r, unsigned long nrw);
|
||||
#if !defined(HAVE_REAL_PREAD_PWRITE) || \
|
||||
HAVE_REAL_PREAD_PWRITE < 1
|
||||
static off_t lseek_loop(int fd, off_t off,
|
||||
@@ -534,7 +531,7 @@ static off_t gbe_file_size;
|
||||
static off_t gbe_tmp_size;
|
||||
|
||||
static int gbe_fd = -1;
|
||||
static size_t part;
|
||||
static unsigned long part;
|
||||
static u8 part_modified[2];
|
||||
static u8 part_valid[2];
|
||||
|
||||
@@ -593,14 +590,14 @@ enum {
|
||||
};
|
||||
|
||||
struct commands {
|
||||
size_t chk;
|
||||
unsigned long chk;
|
||||
const char *str;
|
||||
void (*run)(void);
|
||||
int argc;
|
||||
u8 arg_part;
|
||||
u8 chksum_read;
|
||||
u8 chksum_write;
|
||||
size_t rw_size; /* within the 4KB GbE part */
|
||||
unsigned long rw_size; /* within the 4KB GbE part */
|
||||
int flags; /* e.g. O_RDWR or O_RDONLY */
|
||||
};
|
||||
|
||||
@@ -651,7 +648,7 @@ static const struct commands command[] = {
|
||||
/*
|
||||
* Index in command[], will be set later
|
||||
*/
|
||||
static size_t cmd_index = CMD_NULL;
|
||||
static unsigned long cmd_index = CMD_NULL;
|
||||
|
||||
/*
|
||||
* asserts (variables/defines sanity check)
|
||||
@@ -811,7 +808,7 @@ main(int argc, char *argv[])
|
||||
static void
|
||||
sanitize_command_list(void)
|
||||
{
|
||||
size_t c;
|
||||
unsigned long c;
|
||||
|
||||
for (c = 0; c < N_COMMANDS; c++)
|
||||
sanitize_command_index(c);
|
||||
@@ -821,9 +818,9 @@ sanitize_command_list(void)
|
||||
* TODO: specific config checks per command
|
||||
*/
|
||||
static void
|
||||
sanitize_command_index(size_t c)
|
||||
sanitize_command_index(unsigned long c)
|
||||
{
|
||||
size_t gbe_rw_size;
|
||||
unsigned long gbe_rw_size;
|
||||
|
||||
check_command_num(c);
|
||||
|
||||
@@ -915,7 +912,7 @@ set_cmd_args(int argc, char *argv[])
|
||||
part = conv_argv_part_num(argv[3]);
|
||||
}
|
||||
|
||||
static size_t
|
||||
static unsigned long
|
||||
conv_argv_part_num(const char *part_str)
|
||||
{
|
||||
u8 ch;
|
||||
@@ -928,7 +925,7 @@ conv_argv_part_num(const char *part_str)
|
||||
if (ch < '0' || ch > '1')
|
||||
err(EINVAL, "Bad part number (%c)", ch);
|
||||
|
||||
return (size_t)(ch - '0');
|
||||
return (unsigned long)(ch - '0');
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -936,9 +933,9 @@ conv_argv_part_num(const char *part_str)
|
||||
* strings. Even stricter than strncmp().
|
||||
*/
|
||||
static int
|
||||
xstrxcmp(const char *a, const char *b, size_t maxlen)
|
||||
xstrxcmp(const char *a, const char *b, unsigned long maxlen)
|
||||
{
|
||||
size_t i;
|
||||
unsigned long i;
|
||||
|
||||
if (a == NULL || b == NULL)
|
||||
err(EINVAL, "NULL input to xstrxcmp");
|
||||
@@ -1072,7 +1069,7 @@ xopen(int *fd_ptr, const char *path, int flags, struct stat *st)
|
||||
static void
|
||||
copy_gbe(void)
|
||||
{
|
||||
ssize_t r;
|
||||
long r;
|
||||
struct stat st;
|
||||
|
||||
/* read main file */
|
||||
@@ -1136,16 +1133,16 @@ copy_gbe(void)
|
||||
if (gbe_file_size == SIZE_8KB)
|
||||
return;
|
||||
|
||||
memcpy(buf + (size_t)GBE_PART_SIZE,
|
||||
buf + (size_t)(gbe_file_size >> 1),
|
||||
(size_t)GBE_PART_SIZE);
|
||||
memcpy(buf + (unsigned long)GBE_PART_SIZE,
|
||||
buf + (unsigned long)(gbe_file_size >> 1),
|
||||
(unsigned long)GBE_PART_SIZE);
|
||||
}
|
||||
|
||||
static void
|
||||
read_checksums(void)
|
||||
{
|
||||
size_t p;
|
||||
size_t skip_part;
|
||||
unsigned long p;
|
||||
unsigned long skip_part;
|
||||
u8 arg_part;
|
||||
u8 num_invalid;
|
||||
u8 max_invalid;
|
||||
@@ -1191,7 +1188,7 @@ read_checksums(void)
|
||||
}
|
||||
|
||||
static int
|
||||
good_checksum(size_t partnum)
|
||||
good_checksum(unsigned long partnum)
|
||||
{
|
||||
ushort expected_checksum = calculated_checksum(partnum);
|
||||
ushort current_checksum = nvm_word(NVM_CHECKSUM_WORD, partnum);
|
||||
@@ -1203,7 +1200,7 @@ good_checksum(size_t partnum)
|
||||
}
|
||||
|
||||
static void
|
||||
run_cmd(size_t c)
|
||||
run_cmd(unsigned long c)
|
||||
{
|
||||
check_command_num(c);
|
||||
|
||||
@@ -1214,7 +1211,7 @@ run_cmd(size_t c)
|
||||
}
|
||||
|
||||
static void
|
||||
check_command_num(size_t c)
|
||||
check_command_num(unsigned long c)
|
||||
{
|
||||
if (!valid_command(c))
|
||||
err(EINVAL, "Invalid run_cmd arg: %lu",
|
||||
@@ -1222,7 +1219,7 @@ check_command_num(size_t c)
|
||||
}
|
||||
|
||||
static u8
|
||||
valid_command(size_t c)
|
||||
valid_command(unsigned long c)
|
||||
{
|
||||
if (c >= N_COMMANDS)
|
||||
return 0;
|
||||
@@ -1237,7 +1234,7 @@ valid_command(size_t c)
|
||||
static void
|
||||
cmd_helper_setmac(void)
|
||||
{
|
||||
size_t partnum;
|
||||
unsigned long partnum;
|
||||
|
||||
printf("MAC address to be written: %s\n", mac_str);
|
||||
parse_mac_string();
|
||||
@@ -1249,7 +1246,7 @@ cmd_helper_setmac(void)
|
||||
static void
|
||||
parse_mac_string(void)
|
||||
{
|
||||
size_t mac_byte;
|
||||
unsigned long mac_byte;
|
||||
|
||||
if (xstrxlen(mac_str, 18) != 17)
|
||||
err(EINVAL, "MAC address is the wrong length");
|
||||
@@ -1272,10 +1269,10 @@ parse_mac_string(void)
|
||||
* strnlen() was standardized in POSIX.1-2008 and is not
|
||||
* available on some older systems, so we provide our own.
|
||||
*/
|
||||
static size_t
|
||||
xstrxlen(const char *scmp, size_t maxlen)
|
||||
static unsigned long
|
||||
xstrxlen(const char *scmp, unsigned long maxlen)
|
||||
{
|
||||
size_t xstr_index;
|
||||
unsigned long xstr_index;
|
||||
|
||||
if (scmp == NULL)
|
||||
err(EINVAL, "NULL input to xstrxlen");
|
||||
@@ -1294,10 +1291,10 @@ xstrxlen(const char *scmp, size_t maxlen)
|
||||
}
|
||||
|
||||
static void
|
||||
set_mac_byte(size_t mac_byte_pos)
|
||||
set_mac_byte(unsigned long mac_byte_pos)
|
||||
{
|
||||
size_t mac_str_pos = mac_byte_pos * 3;
|
||||
size_t mac_nib_pos;
|
||||
unsigned long mac_str_pos = mac_byte_pos * 3;
|
||||
unsigned long mac_nib_pos;
|
||||
char separator;
|
||||
|
||||
if (mac_str_pos < 15) {
|
||||
@@ -1311,8 +1308,8 @@ set_mac_byte(size_t mac_byte_pos)
|
||||
}
|
||||
|
||||
static void
|
||||
set_mac_nib(size_t mac_str_pos,
|
||||
size_t mac_byte_pos, size_t mac_nib_pos)
|
||||
set_mac_nib(unsigned long mac_str_pos,
|
||||
unsigned long mac_byte_pos, unsigned long mac_nib_pos)
|
||||
{
|
||||
char mac_ch;
|
||||
ushort hex_num;
|
||||
@@ -1399,7 +1396,7 @@ static ushort
|
||||
read_urandom(void)
|
||||
{
|
||||
static int fd = -1;
|
||||
static ssize_t n = -1;
|
||||
static long n = -1;
|
||||
|
||||
static u8 r[256];
|
||||
|
||||
@@ -1477,9 +1474,9 @@ x_i_gettimeofday(struct x_st_timeval *tv, void *tz)
|
||||
}
|
||||
|
||||
static void
|
||||
write_mac_part(size_t partnum)
|
||||
write_mac_part(unsigned long partnum)
|
||||
{
|
||||
size_t w;
|
||||
unsigned long w;
|
||||
|
||||
check_bin(partnum, "part number");
|
||||
if (!part_valid[partnum])
|
||||
@@ -1496,7 +1493,7 @@ write_mac_part(size_t partnum)
|
||||
static void
|
||||
cmd_helper_dump(void)
|
||||
{
|
||||
size_t partnum;
|
||||
unsigned long partnum;
|
||||
|
||||
part_valid[0] = good_checksum(0);
|
||||
part_valid[1] = good_checksum(1);
|
||||
@@ -1517,9 +1514,9 @@ cmd_helper_dump(void)
|
||||
}
|
||||
|
||||
static void
|
||||
print_mac_from_nvm(size_t partnum)
|
||||
print_mac_from_nvm(unsigned long partnum)
|
||||
{
|
||||
size_t c;
|
||||
unsigned long c;
|
||||
ushort val16;
|
||||
|
||||
for (c = 0; c < 3; c++) {
|
||||
@@ -1535,14 +1532,14 @@ print_mac_from_nvm(size_t partnum)
|
||||
}
|
||||
|
||||
static void
|
||||
hexdump(size_t partnum)
|
||||
hexdump(unsigned long partnum)
|
||||
{
|
||||
size_t c;
|
||||
size_t row;
|
||||
unsigned long c;
|
||||
unsigned long row;
|
||||
ushort val16;
|
||||
|
||||
for (row = 0; row < 8; row++) {
|
||||
printf("%08lx ", (ulong)((size_t)row << 4));
|
||||
printf("%08lx ", (ulong)((unsigned long)row << 4));
|
||||
for (c = 0; c < 8; c++) {
|
||||
val16 = nvm_word((row << 3) + c, partnum);
|
||||
if (c == 4)
|
||||
@@ -1559,18 +1556,18 @@ static void
|
||||
cmd_helper_swap(void)
|
||||
{
|
||||
memcpy(
|
||||
buf + (size_t)GBE_WORK_SIZE,
|
||||
buf + (unsigned long)GBE_WORK_SIZE,
|
||||
buf,
|
||||
GBE_PART_SIZE);
|
||||
|
||||
memcpy(
|
||||
buf,
|
||||
buf + (size_t)GBE_PART_SIZE,
|
||||
buf + (unsigned long)GBE_PART_SIZE,
|
||||
GBE_PART_SIZE);
|
||||
|
||||
memcpy(
|
||||
buf + (size_t)GBE_PART_SIZE,
|
||||
buf + (size_t)GBE_WORK_SIZE,
|
||||
buf + (unsigned long)GBE_PART_SIZE,
|
||||
buf + (unsigned long)GBE_WORK_SIZE,
|
||||
GBE_PART_SIZE);
|
||||
|
||||
set_part_modified(0);
|
||||
@@ -1581,8 +1578,8 @@ static void
|
||||
cmd_helper_copy(void)
|
||||
{
|
||||
memcpy(
|
||||
buf + (size_t)((part ^ 1) * GBE_PART_SIZE),
|
||||
buf + (size_t)(part * GBE_PART_SIZE),
|
||||
buf + (unsigned long)((part ^ 1) * GBE_PART_SIZE),
|
||||
buf + (unsigned long)(part * GBE_PART_SIZE),
|
||||
GBE_PART_SIZE);
|
||||
|
||||
set_part_modified(part ^ 1);
|
||||
@@ -1591,9 +1588,9 @@ cmd_helper_copy(void)
|
||||
static void
|
||||
cmd_helper_cat(void)
|
||||
{
|
||||
size_t p = 0;
|
||||
size_t ff = 0;
|
||||
size_t nff = 0;
|
||||
unsigned long p = 0;
|
||||
unsigned long ff = 0;
|
||||
unsigned long nff = 0;
|
||||
|
||||
fflush(NULL);
|
||||
|
||||
@@ -1614,7 +1611,7 @@ cmd_helper_cat(void)
|
||||
}
|
||||
|
||||
for (p = 0; p < 2; p++) {
|
||||
cat_buf(bufcmp + (size_t)(p * (gbe_file_size >> 1)));
|
||||
cat_buf(bufcmp + (unsigned long)(p * (gbe_file_size >> 1)));
|
||||
|
||||
for (ff = 0; ff < nff; ff++)
|
||||
cat_buf(pad);
|
||||
@@ -1636,7 +1633,7 @@ write_gbe_file(void)
|
||||
struct stat gbe_st;
|
||||
struct stat tmp_st;
|
||||
|
||||
size_t p;
|
||||
unsigned long p;
|
||||
u8 update_checksum;
|
||||
|
||||
if (command[cmd_index].flags == O_RDONLY)
|
||||
@@ -1674,16 +1671,16 @@ write_gbe_file(void)
|
||||
}
|
||||
|
||||
static void
|
||||
set_checksum(size_t p)
|
||||
set_checksum(unsigned long p)
|
||||
{
|
||||
check_bin(p, "part number");
|
||||
set_nvm_word(NVM_CHECKSUM_WORD, p, calculated_checksum(p));
|
||||
}
|
||||
|
||||
static ushort
|
||||
calculated_checksum(size_t p)
|
||||
calculated_checksum(unsigned long p)
|
||||
{
|
||||
size_t c;
|
||||
unsigned long c;
|
||||
uint val16 = 0;
|
||||
|
||||
for (c = 0; c < NVM_CHECKSUM_WORD; c++)
|
||||
@@ -1701,9 +1698,9 @@ calculated_checksum(size_t p)
|
||||
*/
|
||||
|
||||
static ushort
|
||||
nvm_word(size_t pos16, size_t p)
|
||||
nvm_word(unsigned long pos16, unsigned long p)
|
||||
{
|
||||
size_t pos;
|
||||
unsigned long pos;
|
||||
|
||||
check_nvm_bound(pos16, p);
|
||||
pos = (pos16 << 1) + (p * GBE_PART_SIZE);
|
||||
@@ -1713,9 +1710,9 @@ nvm_word(size_t pos16, size_t p)
|
||||
}
|
||||
|
||||
static void
|
||||
set_nvm_word(size_t pos16, size_t p, ushort val16)
|
||||
set_nvm_word(unsigned long pos16, unsigned long p, ushort val16)
|
||||
{
|
||||
size_t pos;
|
||||
unsigned long pos;
|
||||
|
||||
check_nvm_bound(pos16, p);
|
||||
pos = (pos16 << 1) + (p * GBE_PART_SIZE);
|
||||
@@ -1727,14 +1724,14 @@ set_nvm_word(size_t pos16, size_t p, ushort val16)
|
||||
}
|
||||
|
||||
static void
|
||||
set_part_modified(size_t p)
|
||||
set_part_modified(unsigned long p)
|
||||
{
|
||||
check_bin(p, "part number");
|
||||
part_modified[p] = 1;
|
||||
}
|
||||
|
||||
static void
|
||||
check_nvm_bound(size_t c, size_t p)
|
||||
check_nvm_bound(unsigned long c, unsigned long p)
|
||||
{
|
||||
/*
|
||||
* NVM_SIZE assumed as the limit, because this
|
||||
@@ -1750,7 +1747,7 @@ check_nvm_bound(size_t c, size_t p)
|
||||
}
|
||||
|
||||
static void
|
||||
check_bin(size_t a, const char *a_name)
|
||||
check_bin(unsigned long a, const char *a_name)
|
||||
{
|
||||
if (a > 1)
|
||||
err(EINVAL, "%s must be 0 or 1, but is %lu",
|
||||
@@ -1758,11 +1755,11 @@ check_bin(size_t a, const char *a_name)
|
||||
}
|
||||
|
||||
static void
|
||||
rw_gbe_file_part(size_t p, int rw_type,
|
||||
rw_gbe_file_part(unsigned long p, int rw_type,
|
||||
const char *rw_type_str)
|
||||
{
|
||||
ssize_t r;
|
||||
size_t gbe_rw_size = command[cmd_index].rw_size;
|
||||
long r;
|
||||
unsigned long gbe_rw_size = command[cmd_index].rw_size;
|
||||
|
||||
u8 *mem_offset;
|
||||
off_t file_offset;
|
||||
@@ -1781,7 +1778,7 @@ rw_gbe_file_part(size_t p, int rw_type,
|
||||
err(errno, "%s: %s: part %lu",
|
||||
fname, rw_type_str, (ulong)p);
|
||||
|
||||
if ((size_t)r != gbe_rw_size)
|
||||
if ((unsigned long)r != gbe_rw_size)
|
||||
err(EIO, "%s: partial %s: part %lu",
|
||||
fname, rw_type_str, (ulong)p);
|
||||
}
|
||||
@@ -1873,10 +1870,10 @@ write_to_gbe_bin(void)
|
||||
}
|
||||
|
||||
static void
|
||||
check_written_part(size_t p)
|
||||
check_written_part(unsigned long p)
|
||||
{
|
||||
ssize_t r;
|
||||
size_t gbe_rw_size;
|
||||
long r;
|
||||
unsigned long gbe_rw_size;
|
||||
u8 *mem_offset;
|
||||
off_t file_offset;
|
||||
u8 *buf_restore;
|
||||
@@ -1908,7 +1905,7 @@ check_written_part(size_t p)
|
||||
|
||||
if (r == -1)
|
||||
rw_check_err_read[p] = io_err_gbe = 1;
|
||||
else if ((size_t)r != gbe_rw_size)
|
||||
else if ((unsigned long)r != gbe_rw_size)
|
||||
rw_check_partial_read[p] = io_err_gbe = 1;
|
||||
else if (memcmp(mem_offset, pad, gbe_rw_size) != 0)
|
||||
rw_check_bad_part[p] = io_err_gbe = 1;
|
||||
@@ -1931,7 +1928,7 @@ check_written_part(size_t p)
|
||||
static void
|
||||
report_io_err_rw(void)
|
||||
{
|
||||
size_t p;
|
||||
unsigned long p;
|
||||
|
||||
if (!io_err_gbe)
|
||||
return;
|
||||
@@ -2107,11 +2104,11 @@ fsync_dir(const char *path)
|
||||
{
|
||||
#if defined(PATH_LEN) && \
|
||||
(PATH_LEN) >= 256
|
||||
size_t maxlen = PATH_LEN;
|
||||
unsigned long maxlen = PATH_LEN;
|
||||
#else
|
||||
size_t maxlen = 1024;
|
||||
unsigned long maxlen = 1024;
|
||||
#endif
|
||||
size_t pathlen;
|
||||
unsigned long pathlen;
|
||||
/* char dirbuf[maxlen]; */
|
||||
char *dirbuf = NULL;
|
||||
char *slash;
|
||||
@@ -2193,12 +2190,12 @@ err_fsync_dir:
|
||||
* and it is *also* used during file I/O.
|
||||
*/
|
||||
static u8 *
|
||||
gbe_mem_offset(size_t p, const char *f_op)
|
||||
gbe_mem_offset(unsigned long p, const char *f_op)
|
||||
{
|
||||
off_t gbe_off = gbe_x_offset(p, f_op, "mem",
|
||||
GBE_PART_SIZE, GBE_WORK_SIZE);
|
||||
|
||||
return (u8 *)(buf + (size_t)gbe_off);
|
||||
return (u8 *)(buf + (unsigned long)gbe_off);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2209,7 +2206,7 @@ gbe_mem_offset(size_t p, const char *f_op)
|
||||
* This check is called, to ensure just that.
|
||||
*/
|
||||
static off_t
|
||||
gbe_file_offset(size_t p, const char *f_op)
|
||||
gbe_file_offset(unsigned long p, const char *f_op)
|
||||
{
|
||||
off_t gbe_file_half_size = gbe_file_size >> 1;
|
||||
|
||||
@@ -2218,7 +2215,7 @@ gbe_file_offset(size_t p, const char *f_op)
|
||||
}
|
||||
|
||||
static off_t
|
||||
gbe_x_offset(size_t p, const char *f_op, const char *d_type,
|
||||
gbe_x_offset(unsigned long p, const char *f_op, const char *d_type,
|
||||
off_t nsize, off_t ncmp)
|
||||
{
|
||||
off_t off;
|
||||
@@ -2238,35 +2235,35 @@ gbe_x_offset(size_t p, const char *f_op, const char *d_type,
|
||||
return off;
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
rw_gbe_file_exact(int fd, u8 *mem, size_t nrw,
|
||||
static long
|
||||
rw_gbe_file_exact(int fd, u8 *mem, unsigned long nrw,
|
||||
off_t off, int rw_type)
|
||||
{
|
||||
size_t mem_addr;
|
||||
size_t buf_addr;
|
||||
ssize_t r;
|
||||
unsigned long mem_addr;
|
||||
unsigned long buf_addr;
|
||||
long r;
|
||||
|
||||
if (io_args(fd, mem, nrw, off, rw_type) == -1)
|
||||
return -1;
|
||||
|
||||
mem_addr = (size_t)(void *)mem;
|
||||
buf_addr = (size_t)(void *)buf;
|
||||
mem_addr = (unsigned long)(void *)mem;
|
||||
buf_addr = (unsigned long)(void *)buf;
|
||||
|
||||
if (mem != (void *)pad) {
|
||||
if (mem_addr < buf_addr)
|
||||
goto err_rw_gbe_file_exact;
|
||||
|
||||
if ((mem_addr - buf_addr) >= (size_t)GBE_WORK_SIZE)
|
||||
if ((mem_addr - buf_addr) >= (unsigned long)GBE_WORK_SIZE)
|
||||
goto err_rw_gbe_file_exact;
|
||||
}
|
||||
|
||||
if (off < 0 || off >= gbe_file_size)
|
||||
goto err_rw_gbe_file_exact;
|
||||
|
||||
if (nrw > (size_t)(gbe_file_size - off))
|
||||
if (nrw > (unsigned long)(gbe_file_size - off))
|
||||
goto err_rw_gbe_file_exact;
|
||||
|
||||
if (nrw > (size_t)GBE_PART_SIZE)
|
||||
if (nrw > (unsigned long)GBE_PART_SIZE)
|
||||
goto err_rw_gbe_file_exact;
|
||||
|
||||
r = rw_file_exact(fd, mem, nrw, off, rw_type,
|
||||
@@ -2310,17 +2307,17 @@ err_rw_gbe_file_exact:
|
||||
* times upon zero-return, to recover,
|
||||
* otherwise it will return an error.
|
||||
*/
|
||||
static ssize_t
|
||||
rw_file_exact(int fd, u8 *mem, size_t nrw,
|
||||
static long
|
||||
rw_file_exact(int fd, u8 *mem, unsigned long nrw,
|
||||
off_t off, int rw_type, int loop_eagain,
|
||||
int loop_eintr, size_t max_retries,
|
||||
int loop_eintr, unsigned long max_retries,
|
||||
int off_reset)
|
||||
{
|
||||
ssize_t rv = 0;
|
||||
ssize_t rc = 0;
|
||||
size_t retries_on_zero = 0;
|
||||
long rv = 0;
|
||||
long rc = 0;
|
||||
unsigned long retries_on_zero = 0;
|
||||
off_t off_cur;
|
||||
size_t nrw_cur;
|
||||
unsigned long nrw_cur;
|
||||
void *mem_cur;
|
||||
|
||||
if (io_args(fd, mem, nrw, off, rw_type) == -1)
|
||||
@@ -2329,15 +2326,15 @@ rw_file_exact(int fd, u8 *mem, size_t nrw,
|
||||
while (1) {
|
||||
|
||||
/* Prevent theoretical overflow */
|
||||
if (rv >= 0 && (size_t)rv > (nrw - rc))
|
||||
if (rv >= 0 && (unsigned long)rv > (nrw - rc))
|
||||
goto err_rw_file_exact;
|
||||
|
||||
rc += rv;
|
||||
if ((size_t)rc >= nrw)
|
||||
if ((unsigned long)rc >= nrw)
|
||||
break;
|
||||
|
||||
mem_cur = (void *)(mem + (size_t)rc);
|
||||
nrw_cur = (size_t)(nrw - (size_t)rc);
|
||||
mem_cur = (void *)(mem + (unsigned long)rc);
|
||||
nrw_cur = (unsigned long)(nrw - (unsigned long)rc);
|
||||
if (off < 0)
|
||||
goto err_rw_file_exact;
|
||||
off_cur = off + (off_t)rc;
|
||||
@@ -2358,7 +2355,7 @@ rw_file_exact(int fd, u8 *mem, size_t nrw,
|
||||
retries_on_zero = 0;
|
||||
}
|
||||
|
||||
if ((size_t)rc != nrw)
|
||||
if ((unsigned long)rc != nrw)
|
||||
goto err_rw_file_exact;
|
||||
|
||||
return rw_over_nrw(rc, nrw);
|
||||
@@ -2410,13 +2407,13 @@ err_rw_file_exact:
|
||||
* we reset and continue, and pray for the worst.
|
||||
*/
|
||||
|
||||
static ssize_t
|
||||
prw(int fd, void *mem, size_t nrw,
|
||||
static long
|
||||
prw(int fd, void *mem, unsigned long nrw,
|
||||
off_t off, int rw_type,
|
||||
int loop_eagain, int loop_eintr,
|
||||
int off_reset)
|
||||
{
|
||||
ssize_t r;
|
||||
long r;
|
||||
int positional_rw;
|
||||
struct stat st;
|
||||
#if !defined(HAVE_REAL_PREAD_PWRITE) || \
|
||||
@@ -2566,7 +2563,7 @@ err_prw:
|
||||
}
|
||||
|
||||
static int
|
||||
io_args(int fd, void *mem, size_t nrw,
|
||||
io_args(int fd, void *mem, unsigned long nrw,
|
||||
off_t off, int rw_type)
|
||||
{
|
||||
/* obviously */
|
||||
@@ -2586,11 +2583,11 @@ io_args(int fd, void *mem, size_t nrw,
|
||||
goto err_io_args;
|
||||
|
||||
/* prevent overflow */
|
||||
if (nrw > (size_t)X_LONG_MAX)
|
||||
if (nrw > (unsigned long)X_LONG_MAX)
|
||||
goto err_io_args;
|
||||
|
||||
/* prevent overflow */
|
||||
if (((size_t)off + nrw) < (size_t)off)
|
||||
if (((unsigned long)off + nrw) < (unsigned long)off)
|
||||
goto err_io_args;
|
||||
|
||||
if (rw_type > IO_PWRITE)
|
||||
@@ -2625,8 +2622,8 @@ err_is_file:
|
||||
* POSIX can say whatever it wants.
|
||||
* specification != implementation
|
||||
*/
|
||||
static ssize_t
|
||||
rw_over_nrw(ssize_t r, size_t nrw)
|
||||
static long
|
||||
rw_over_nrw(long r, unsigned long nrw)
|
||||
{
|
||||
/*
|
||||
* If a byte length of zero
|
||||
@@ -2639,7 +2636,7 @@ rw_over_nrw(ssize_t r, size_t nrw)
|
||||
if (r == -1)
|
||||
return r;
|
||||
|
||||
if ((size_t)r > X_LONG_MAX) {
|
||||
if ((unsigned long)r > X_LONG_MAX) {
|
||||
/*
|
||||
* Theoretical buggy libc
|
||||
* check. Extremely academic.
|
||||
@@ -2660,7 +2657,7 @@ rw_over_nrw(ssize_t r, size_t nrw)
|
||||
* Should never return a number of
|
||||
* bytes above the requested length.
|
||||
*/
|
||||
if ((size_t)r > nrw)
|
||||
if ((unsigned long)r > nrw)
|
||||
goto err_rw_over_nrw;
|
||||
|
||||
return r;
|
||||
@@ -2837,7 +2834,7 @@ getnvmprogname(void)
|
||||
static char *
|
||||
new_tmpfile(int *fd, int local, const char *path)
|
||||
{
|
||||
size_t maxlen;
|
||||
unsigned long maxlen;
|
||||
struct stat st;
|
||||
|
||||
/*
|
||||
@@ -2852,9 +2849,9 @@ new_tmpfile(int *fd, int local, const char *path)
|
||||
char *base = NULL;
|
||||
char *dest = NULL;
|
||||
|
||||
size_t tmpdir_len = 0;
|
||||
size_t tmpname_len = 0;
|
||||
size_t tmppath_len = 0;
|
||||
unsigned long tmpdir_len = 0;
|
||||
unsigned long tmpname_len = 0;
|
||||
unsigned long tmppath_len = 0;
|
||||
|
||||
int fd_tmp = -1;
|
||||
int flags;
|
||||
@@ -2931,9 +2928,9 @@ new_tmpfile(int *fd, int local, const char *path)
|
||||
|
||||
*dest = '.'; /* hidden file */
|
||||
|
||||
memcpy(dest + (size_t)1, tmpname, tmpname_len);
|
||||
memcpy(dest + (unsigned long)1, tmpname, tmpname_len);
|
||||
|
||||
memcpy(dest + (size_t)1 + tmpname_len,
|
||||
memcpy(dest + (unsigned long)1 + tmpname_len,
|
||||
default_tmpname, tmpdir_len);
|
||||
} else {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user