42#define CHECK(cond, ...) \
46 "%s:%d CHECK(%s) failed: ", \
50 fprintf(stderr, "" __VA_ARGS__); \
51 fprintf(stderr, "\n"); \
60#define CHECK_ZSTD(fn) \
62 size_t const err = (fn); \
63 CHECK(!ZSTD_isError(err), "%s", ZSTD_getErrorName(err)); \
71static size_t fsize_orDie(
const char *filename)
74 if (stat(filename, &st) != 0) {
80 off_t
const fileSize = st.st_size;
81 size_t const size = (size_t)fileSize;
86 if ((fileSize < 0) || (fileSize != (off_t)
size)) {
87 fprintf(stderr,
"%s : filesize too large \n", filename);
99static FILE* fopen_orDie(
const char *filename,
const char *instruction)
101 FILE*
const inFile = fopen(filename, instruction);
102 if (inFile)
return inFile;
111static void fclose_orDie(FILE* file)
113 if (!fclose(file)) {
return; };
126static size_t fread_orDie(
void* buffer,
size_t sizeToRead, FILE* file)
128 size_t const readSize = fread(buffer, 1, sizeToRead, file);
129 if (readSize == sizeToRead)
return readSize;
130 if (feof(file))
return readSize;
146static size_t fwrite_orDie(
const void* buffer,
size_t sizeToWrite, FILE* file)
148 size_t const writtenSize = fwrite(buffer, 1, sizeToWrite, file);
149 if (writtenSize == sizeToWrite)
return sizeToWrite;
162static void* malloc_orDie(
size_t size)
164 void*
const buff = malloc(
size);
165 if (buff)
return buff;
180static size_t loadFile_orDie(
const char* fileName,
void* buffer,
size_t bufferSize)
182 size_t const fileSize = fsize_orDie(fileName);
183 CHECK(fileSize <= bufferSize,
"File too large!");
185 FILE*
const inFile = fopen_orDie(fileName,
"rb");
186 size_t const readSize = fread(buffer, 1, fileSize, inFile);
187 if (readSize != (
size_t)fileSize) {
188 fprintf(stderr,
"fread: %s : %s \n", fileName, strerror(errno));
204static void* mallocAndLoadFile_orDie(
const char* fileName,
size_t* bufferSize) {
205 size_t const fileSize = fsize_orDie(fileName);
206 *bufferSize = fileSize;
207 void*
const buffer = malloc_orDie(*bufferSize);
208 loadFile_orDie(fileName, buffer, *bufferSize);
220static void saveFile_orDie(
const char* fileName,
const void* buff,
size_t buffSize)
222 FILE*
const oFile = fopen_orDie(fileName,
"wb");
223 size_t const wSize = fwrite(buff, 1, buffSize, oFile);
224 if (wSize != (
size_t)buffSize) {
225 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