27# define UNUSED_ATTR __attribute__((unused))
32#define HEADER_FUNCTION static UNUSED_ATTR
53#define CHECK(cond, ...) \
57 "%s:%d CHECK(%s) failed: ", \
61 fprintf(stderr, "" __VA_ARGS__); \
62 fprintf(stderr, "\n"); \
71#define CHECK_ZSTD(fn) \
73 size_t const err = (fn); \
74 CHECK(!ZSTD_isError(err), "%s", ZSTD_getErrorName(err)); \
85 if (stat(filename, &st) != 0) {
91 off_t
const fileSize = st.st_size;
92 size_t const size = (size_t)fileSize;
97 if ((fileSize < 0) || (fileSize != (off_t)
size)) {
98 fprintf(stderr,
"%s : filesize too large \n", filename);
112 FILE*
const inFile = fopen(filename, instruction);
113 if (inFile)
return inFile;
124 if (!fclose(file)) {
return; };
139 size_t const readSize = fread(buffer, 1, sizeToRead, file);
140 if (readSize == sizeToRead)
return readSize;
141 if (feof(file))
return readSize;
159 size_t const writtenSize = fwrite(buffer, 1, sizeToWrite, file);
160 if (writtenSize == sizeToWrite)
return sizeToWrite;
175 void*
const buff = malloc(
size);
176 if (buff)
return buff;
194 CHECK(fileSize <= bufferSize,
"File too large!");
197 size_t const readSize = fread(buffer, 1, fileSize, inFile);
198 if (readSize != (
size_t)fileSize) {
199 fprintf(stderr,
"fread: %s : %s \n", fileName, strerror(errno));
218 *bufferSize = fileSize;
235 size_t const wSize = fwrite(buff, 1, buffSize, oFile);
236 if (wSize != (
size_t)buffSize) {
237 fprintf(stderr,
"fwrite: %s : %s \n", fileName, strerror(errno));
#define CHECK(cond,...)
Definition common.h:42
COMMON_ErrorCode
Definition common.h:27
@ ERROR_largeFile
Definition common.h:36
@ ERROR_malloc
Definition common.h:35
@ ERROR_loadFile
Definition common.h:33
@ ERROR_saveFile
Definition common.h:34
@ ERROR_fopen
Definition common.h:29
@ ERROR_fclose
Definition common.h:30
@ ERROR_fread
Definition common.h:31
@ ERROR_fsize
Definition common.h:28
@ ERROR_fwrite
Definition common.h:32
HEADER_FUNCTION void * mallocAndLoadFile_orDie(const char *fileName, size_t *bufferSize)
Definition common.h:215
HEADER_FUNCTION void saveFile_orDie(const char *fileName, const void *buff, size_t buffSize)
Definition common.h:232
HEADER_FUNCTION size_t fwrite_orDie(const void *buffer, size_t sizeToWrite, FILE *file)
Definition common.h:157
HEADER_FUNCTION size_t loadFile_orDie(const char *fileName, void *buffer, size_t bufferSize)
Definition common.h:191
#define HEADER_FUNCTION
Definition common.h:32
HEADER_FUNCTION size_t fsize_orDie(const char *filename)
Definition common.h:82
HEADER_FUNCTION size_t fread_orDie(void *buffer, size_t sizeToRead, FILE *file)
Definition common.h:137
HEADER_FUNCTION void fclose_orDie(FILE *file)
Definition common.h:122
HEADER_FUNCTION void * malloc_orDie(size_t size)
Definition common.h:173
HEADER_FUNCTION FILE * fopen_orDie(const char *filename, const char *instruction)
Definition common.h:110