Skip to content

Commit 4c8b4e4

Browse files
committed
Make suggested changes
1 parent dea002c commit 4c8b4e4

File tree

3 files changed

+44
-39
lines changed

3 files changed

+44
-39
lines changed

fatal.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#pragma once
2-
32
#define fatal(fmt, args...) do { \
43
fprintf(stderr, fmt, ##args); \
54
fprintf(stderr, "\n"); \

fru.c

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,17 @@
2929
#define DEBUG(f, args...)
3030
#endif
3131

32+
static time_t epoch_seconds_1996() {
33+
struct tm tm_1996 = {
34+
.tm_year = 96,
35+
.tm_mon = 0,
36+
.tm_mday = 1
37+
};
38+
// The argument to mktime is zoneless
39+
return mktime(&tm_1996);
40+
}
41+
42+
3243
/**
3344
* Strip trailing spaces
3445
*/
@@ -434,13 +445,7 @@ fru_info_area_t *fru_create_info_area(fru_area_type_t atype, ///< [in] Area t
434445

435446
if (FRU_AREA_HAS_DATE(atype)) {
436447
uint32_t fru_time;
437-
struct tm tm_1996 = {
438-
.tm_year = 96,
439-
.tm_mon = 0,
440-
.tm_mday = 1
441-
};
442448
const struct timeval tv_unspecified = { 0 };
443-
struct timeval tv_1996 = { 0 };
444449

445450
if (!tv) {
446451
errno = EFAULT;
@@ -455,10 +460,8 @@ fru_info_area_t *fru_create_info_area(fru_area_type_t atype, ///< [in] Area t
455460
printf("Using FRU_DATE_UNSPECIFIED\n");
456461
fru_time = FRU_DATE_UNSPECIFIED;
457462
} else {
458-
// The argument to mktime is zoneless
459-
tv_1996.tv_sec = mktime(&tm_1996);
460463
// FRU time is in minutes and we don't care about microseconds
461-
fru_time = (tv->tv_sec - tv_1996.tv_sec) / 60;
464+
fru_time = (tv->tv_sec - epoch_seconds_1996()) / 60;
462465
}
463466
header.mfgdate[0] = fru_time & 0xFF;
464467
header.mfgdate[1] = (fru_time >> 8) & 0xFF;
@@ -534,7 +537,7 @@ static bool fru_decode_custom_fields(const uint8_t *data, fru_reclist_t **reclis
534537

535538
fru_reclist_t *custom_field = add_reclist(reclist);
536539
if (custom_field == NULL)
537-
return false;
540+
return false;
538541

539542
// Create a NUL terminated version of the data for encoding
540543
// TODO pass the length into fru_encode_data instead
@@ -548,7 +551,7 @@ static bool fru_decode_custom_fields(const uint8_t *data, fru_reclist_t **reclis
548551
data += FRU_FIELDSIZE(field->typelen);
549552
}
550553

551-
return true;
554+
return true;
552555
}
553556

554557
/**
@@ -673,53 +676,53 @@ bool fru_decode_board_info(
673676
fru_exploded_board_t *board_out //< [out]
674677
)
675678
{
676-
fru_field_t *field;
679+
fru_field_t *field;
677680
const uint8_t *data = area->data;
678681

679-
board_out->lang = area->langtype;
682+
board_out->lang = area->langtype;
680683

681-
uint32_t *min_since_1996 = (uint32_t*)&(area->mfgdate);
682-
struct tm tm_1996 = {
684+
uint32_t *min_since_1996 = (uint32_t*)&(area->mfgdate);
685+
struct tm tm_1996 = {
683686
.tm_year = 96,
684687
.tm_mon = 0,
685688
.tm_mday = 1
686-
};
687-
// The argument to mktime is zoneless
688-
board_out->tv.tv_sec = mktime(&tm_1996) + 60 * (*min_since_1996);
689+
};
690+
// The argument to mktime is zoneless
691+
board_out->tv.tv_sec = mktime(&tm_1996) + 60 * (*min_since_1996);
689692

690693
field = (fru_field_t*)data;
691-
if (!fru_decode_data(field, board_out->mfg,
694+
if (!fru_decode_data(field, board_out->mfg,
692695
sizeof(board_out->mfg)))
693-
return false;
696+
return false;
694697
data += FRU_FIELDSIZE(field->typelen);
695698

696699
field = (fru_field_t*)data;
697-
if (!fru_decode_data(field, board_out->pname,
700+
if (!fru_decode_data(field, board_out->pname,
698701
sizeof(board_out->pname)))
699-
return false;
702+
return false;
700703
data += FRU_FIELDSIZE(field->typelen);
701704

702705
field = (fru_field_t*)data;
703-
if (!fru_decode_data(field, board_out->serial,
706+
if (!fru_decode_data(field, board_out->serial,
704707
sizeof(board_out->serial)))
705-
return false;
708+
return false;
706709
data += FRU_FIELDSIZE(field->typelen);
707710

708711
field = (fru_field_t*)data;
709-
if (!fru_decode_data(field, board_out->pn,
712+
if (!fru_decode_data(field, board_out->pn,
710713
sizeof(board_out->pn)))
711-
return false;
714+
return false;
712715
data += FRU_FIELDSIZE(field->typelen);
713716

714717
field = (fru_field_t*)data;
715-
if (!fru_decode_data(field, board_out->file,
718+
if (!fru_decode_data(field, board_out->file,
716719
sizeof(board_out->file)))
717-
return false;
720+
return false;
718721
data += FRU_FIELDSIZE(field->typelen);
719722

720-
fru_decode_custom_fields(data, &board_out->cust);
723+
fru_decode_custom_fields(data, &board_out->cust);
721724

722-
return true;
725+
return true;
723726
}
724727

725728
/**

fru_reader.c

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
#include "fru_reader.h"
55
#include "fatal.h"
66

7-
static void safe_read(int fd, void *buffer, size_t length) {
7+
static void safe_read(int fd, uint8_t *buffer, size_t length) {
8+
if (!buffer)
9+
fatal("Cannot read into NULL buffer");
10+
811
size_t total_bytes_read = 0;
912
while (total_bytes_read != length) {
1013
ssize_t bytes_read = read(
@@ -22,7 +25,7 @@ fru_t *read_fru_header(int fd) {
2225
fru_t *fru = malloc(sizeof(fru_t));
2326
if (!fru)
2427
return NULL;
25-
safe_read(fd, fru, sizeof(fru_t));
28+
safe_read(fd, (uint8_t*)fru, sizeof(fru_t));
2629
return fru;
2730
}
2831

@@ -34,12 +37,12 @@ fru_chassis_area_t *read_fru_chassis_area(int fd) {
3437
fru_chassis_area_t *area = malloc(base_len);
3538
if (!area)
3639
return NULL;
37-
safe_read(fd, area, base_len);
40+
safe_read(fd, (uint8_t*)area, base_len);
3841
size_t data_len = 8 * area->blocks;
3942
area = realloc(area, data_len);
4043
if (!area)
4144
return NULL;
42-
safe_read(fd, &area->data, data_len - base_len);
45+
safe_read(fd, (uint8_t*)&area->data, data_len - base_len);
4346

4447
return area;
4548
}
@@ -52,12 +55,12 @@ fru_board_area_t *read_fru_board_area(int fd) {
5255
fru_board_area_t *area = malloc(base_len);
5356
if (!area)
5457
return NULL;
55-
safe_read(fd, area, base_len);
58+
safe_read(fd, (uint8_t*)area, base_len);
5659
size_t data_len = 8 * area->blocks;
5760
area = realloc(area, data_len);
5861
if (!area)
5962
return NULL;
60-
safe_read(fd, &area->data, data_len - base_len);
63+
safe_read(fd, (uint8_t*)&area->data, data_len - base_len);
6164

6265
return area;
6366
}
@@ -70,12 +73,12 @@ fru_product_area_t *read_fru_product_area(int fd) {
7073
fru_product_area_t *area = malloc(base_len);
7174
if (!area)
7275
return NULL;
73-
safe_read(fd, area, base_len);
76+
safe_read(fd, (uint8_t*)area, base_len);
7477
size_t data_len = 8 * area->blocks;
7578
area = realloc(area, data_len);
7679
if (!area)
7780
return NULL;
78-
safe_read(fd, &area->data, data_len - base_len);
81+
safe_read(fd, (uint8_t*)&area->data, data_len - base_len);
7982

8083
return area;
8184
}

0 commit comments

Comments
 (0)