diff --git a/.clang-format b/.clang-format index 60fb2d9..b77657e 100644 --- a/.clang-format +++ b/.clang-format @@ -7,7 +7,7 @@ # --------------------------- BasedOnStyle: GNU Standard: Auto -ColumnLimit: 0 +ColumnLimit: 100 LineEnding: LF UseTab: ForContinuationAndIndentation TabWidth: 8 @@ -39,7 +39,7 @@ AllowShortLambdasOnASingleLine: All AllowShortIfStatementsOnASingleLine: Never AllowShortCaseLabelsOnASingleLine: true AllowShortEnumsOnASingleLine: true -AllowShortLoopsOnASingleLine: true +AllowShortLoopsOnASingleLine: false # --------------------------- # break and wrapping options diff --git a/src/dat/mcx.c b/src/dat/mcx.c index fcc3d04..5c76bfe 100644 --- a/src/dat/mcx.c +++ b/src/dat/mcx.c @@ -25,7 +25,8 @@ enum mcx_compression { MCX_COMPRESSION_CUSTOM = 0x7F, }; -/* first 4 bytes is an i32 indicating remaining bytes, the following byte defines the compression scheme */ +/* First 4 bytes is an i32 indicating remaining bytes. + * The following byte defines the compression scheme */ static int mcx_loadchunk(const u8 *restrict buf, const i32 *restrict table, int idx) { const u8 *chunk = buf + (be32toh(table[idx]) >> 8) * SECTOR; @@ -97,12 +98,15 @@ static usize delchunk(u8 *restrict buf, u32 *restrict table, usize rmb, int sidx // load the table data usize slen, bidx, blen; slen = be32toh(table[sidx]) & 0xFF; // acquire the sector length of the chunk - bidx = (be32toh(table[sidx]) >> 8) * SECTOR; // acquire and compute the byte offset the chunk starts at + bidx = (be32toh(table[sidx]) >> 8) * SECTOR; // acquire and compute the byte offset the + // chunk starts at blen = slen * SECTOR; // compute the byte length of the chunk // reset the table data table[sidx] = 0; - table[sidx + CHUNKS] = htobe32(time(NULL)); // assign the current time to the timestamp, for correctness NOTE: might need to zero-out instead + table[sidx + CHUNKS] = htobe32(time(NULL)); // assign the current time to the timestamp, for + // correctness NOTE: might need to zero-out + // instead // move the succeeding chunks over the deleted chunk u8 *dst = buf + bidx - rmb; @@ -111,9 +115,11 @@ static usize delchunk(u8 *restrict buf, u32 *restrict table, usize rmb, int sidx return blen; } -/* Call `delchunk` with the parameters and some defaults. Ensuring the table is copied correctly as well. - * This is done instead of `delchunk` being globally linked, because - * `delchunk` requests more specific parameters, which is confusing outside this module. */ +/* Call `delchunk` with the parameters and some defaults. + * Ensuring the table is copied correctly as well. + * This is done instead of `delchunk` being globally linked, + * because `delchunk` requests more specific parameters, + * which is confusing outside this module. */ usize mcx_delchunk(u8 *restrict buf, int chunk) { u32 table[TABLE]; @@ -155,14 +161,15 @@ static int cmp_chunkids(const void *restrict x, const void *restrict y) } /* Sorts the chunks marked for deletion from smallest to greatest index. - * Then performs the deletion in this order. Making sure to only update the chunks up to the next. */ + * Then performs the deletion in this order. + * Making sure to only update the chunks up to the next. */ usize mcx_delchunk_bulk(u8 *restrict buf, const u16 *restrict chunks, int chunkc) { // ensure the chunks ids we're working on are sorted from least to greatest u16 chunkids[chunkc + 1]; memcpy(chunkids, chunks, chunkc); qsort(chunkids, chunkc, sizeof(int), cmp_chunkids); - chunkids[chunkc] = CHUNKS; // set the spare chunk to the max chunks, so the rest of the chunks are moved + chunkids[chunkc] = CHUNKS; // move the rest of the chunks u32 table[TABLE]; memcpy(table, buf, sizeof(table)); diff --git a/src/io/input.c b/src/io/input.c index f3a8de2..2382862 100644 --- a/src/io/input.c +++ b/src/io/input.c @@ -6,7 +6,7 @@ void input_callback(GLFWwindow *win, int key, int scancode, int action, int mods) { - (void)win, (void)key, (void)scancode, (void)action, (void)mods; // make the compiler shut up as this is fine + (void)win, (void)key, (void)scancode, (void)action, (void)mods; #ifndef NDEBUG if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) glfwSetWindowShouldClose(win, 1); diff --git a/src/io/render.c b/src/io/render.c index 0804f88..3dcddf2 100644 --- a/src/io/render.c +++ b/src/io/render.c @@ -25,8 +25,8 @@ static void screen_resize(int w, int h) {0, h, w, -20 }, }; - glUniform2i(screen_loc, w, h); // send the screen dimensions to the shader pipeline - glViewport(0, 0, w, h); // update the viewport + glUniform2i(screen_loc, w, h); // send the screen dimensions to the shader pipeline + glViewport(0, 0, w, h); // update the viewport glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_DYNAMIC_DRAW); // bind the data to it win_w = w; win_h = h; @@ -44,7 +44,7 @@ int render_init(void) if (len > 0) { char log[len]; glGetProgramInfoLog(pipe, len, &len, log); - log[len - 1] = '\0'; // terminate the string one character sooner since the log includes a newline + log[len - 1] = '\0'; // terminate the string one character sooner fatal("error whilst linking the pipe: '%s'", log); } diff --git a/src/io/render/mapcolour.h b/src/io/render/mapcolour.h index 75aff0a..8cdca23 100644 --- a/src/io/render/mapcolour.h +++ b/src/io/render/mapcolour.h @@ -72,5 +72,6 @@ enum map_colour_id { MAP_COLOUR_COUNT, }; -/* contains the colours of the map on their' respective index - 1. (NONE should be handled separately) */ +/* contains the colours of the map on their' respective index - 1. + * (NONE should be handled separately) */ extern u8vec4 map_colours[MAP_COLOUR_COUNT]; diff --git a/src/io/shader.c b/src/io/shader.c index 037f3a9..0517c1c 100644 --- a/src/io/shader.c +++ b/src/io/shader.c @@ -9,7 +9,9 @@ #include "../util/error.h" -// NOTE: we are currently just sucking up the memory costs for ease. We can either include the source files themselves. Or use compression, where I'd prefer the latter for ease of installation. +/* NOTE: we are currently just sucking up the memory costs for ease. We can either include the + * source files themselves. Or use compression, where I'd prefer the latter for ease of + * installation. */ extern const char sh_vert_glsl[]; extern const char sh_frag_glsl[]; extern const char sh_geom_glsl[]; @@ -31,7 +33,8 @@ static GLuint shader_compile(GLenum type, const char *src, usize len) if (ilen > 0) { char log[ilen]; glGetShaderInfoLog(shader, ilen, &ilen, log); - log[ilen - 1] = '\0'; // terminate the string one character sooner since the log includes a newline + log[ilen - 1] = '\0'; // terminate the string one character sooner since the log + // includes a newline error("error whilst compiling shader type '0x%X': '%s'", type, log); } diff --git a/src/io/window.c b/src/io/window.c index fbed2e3..61d358f 100644 --- a/src/io/window.c +++ b/src/io/window.c @@ -30,8 +30,8 @@ int window_init(void) glfwWindowHint(GLFW_GREEN_BITS, 8); glfwWindowHint(GLFW_BLUE_BITS, 8); glfwWindowHint(GLFW_ALPHA_BITS, 0); - /* NOTE: on my system; x86_64, GTX 1650 580.82.09-2, X11, i3, this causes one direct, 2 indirect memory leaks. - * This is not my fault, and can safely be ignored. */ + /* NOTE: on my system; x86_64, GTX 1650 580.82.09-2, X11, i3, this causes one direct, + * 2 indirect memory leaks. This is not my fault, and can safely be ignored. */ win = glfwCreateWindow(640, 480, "MCA-Selector lite", NULL, NULL); if (!win) return 1; @@ -39,19 +39,18 @@ int window_init(void) glfwMakeContextCurrent(win); if (!gladLoadGL(glfwGetProcAddress)) return 1; - glfwSwapInterval(1); // wait 1 screen update for a redraw a.k.a. "vsync". (not really applicable in this case but eh) + /* wait 1 screen update for a redraw a.k.a. "vsync". + (not really applicable in this case, but eh) */ + glfwSwapInterval(1); glfwSetKeyCallback(win, input_callback); - debug( - "version info:\n" - "\tvendor: %s\n" - "\trenderer: %s\n" - "\tversion: %s\n" - "\tshading lang: %s\n", - glGetString(GL_VENDOR), - glGetString(GL_RENDERER), - glGetString(GL_VERSION), + debug("version info:\n" + "\tvendor: %s\n" + "\trenderer: %s\n" + "\tversion: %s\n" + "\tshading lang: %s\n", + glGetString(GL_VENDOR), glGetString(GL_RENDERER), glGetString(GL_VERSION), glGetString(GL_SHADING_LANGUAGE_VERSION)); return 0; } diff --git a/src/main.c b/src/main.c index 67f28ca..c95fad8 100644 --- a/src/main.c +++ b/src/main.c @@ -32,7 +32,7 @@ int main(int argc, char **argv) atexit(quit); glfwSetErrorCallback(error_callback); - glfwInitHint(GLFW_JOYSTICK_HAT_BUTTONS, GLFW_FALSE); // disable joystick buttons; since we won't need them + glfwInitHint(GLFW_JOYSTICK_HAT_BUTTONS, GLFW_FALSE); // we won't need them if (!glfwInit() || window_init()) fatal("failed to initialise!"); diff --git a/src/util/compat/io.h b/src/util/compat/io.h index 0d52f2c..91772a3 100644 --- a/src/util/compat/io.h +++ b/src/util/compat/io.h @@ -11,8 +11,9 @@ #error platform not supported! #endif -/* tests a files access with F_OK, X_OK, R_OK, W_OK OR'd together - returns 0 upon success. -1 when errno is set and anything else when one or more of the permissions isn't set */ +/* Tests a files access with F_OK, X_OK, R_OK, W_OK OR'd together. + Returns 0 upon success, -1 when errno is set, + anything else when one or more of the permissions isn't set */ static inline int faccess(const char *restrict fname, int perms); // define the constants if they haven't been @@ -30,16 +31,24 @@ static inline int faccess(const char *restrict fname, int perms); #endif #if defined __unix__ && _POSIX_C_SOURCE >= 200809L -#define PATH_SEP '/' // contains the path separator as a character. Yes it is extremely annoying that this has to exist. -#define PATH_SEP_STR "/" // contains the path separator as a string, useful for concatenation. Yes it is extremely annoying that this has to exist. +#define PATH_SEP \ + '/' // contains the path separator as a character. Yes it is extremely annoying that this + // has to exist. +#define PATH_SEP_STR \ + "/" // contains the path separator as a string, useful for concatenation. Yes it is + // extremely annoying that this has to exist. int faccess(char const *restrict fname, int perms) { return access(fname, perms); } #elif defined(_WIN32) -#define PATH_SEP '\\' // contains the path separator as a character. Yes it is extremely annoying that this has to exist. -#define PATH_SEP_STR "\\" // contains the path separator as a string, useful for concatenation. Yes it is extremely annoying that this has to exist. +#define PATH_SEP \ + '\\' // contains the path separator as a character. Yes it is extremely annoying that this + // has to exist. +#define PATH_SEP_STR \ + "\\" // contains the path separator as a string, useful for concatenation. Yes it is + // extremely annoying that this has to exist. int faccess(char const *restrict fname, int perms) { diff --git a/src/util/compat/os.h b/src/util/compat/os.h index 8af6976..527bc3d 100644 --- a/src/util/compat/os.h +++ b/src/util/compat/os.h @@ -4,9 +4,9 @@ #if defined(__unix__) #define unixonly(_exec) _exec // executes inline code when __unix__ is defined, otherwise is no-op -#define winonly(_exec) // (no-op) executes inline code when _WIN32 is defined, otherwise is no-op +#define winonly(_exec) // (no-op) executes inline code when _WIN32 is defined, otherwise is no-op #elif defined(_WIN32) -#define unixonly(_exec) // (no-op) executes inline code when __unix__ is defined, otherwise is no-op +#define unixonly(_exec) // (no-op) executes inline code when __unix__ is defined, otherwise is no-op #define winonly(_exec) _exec // executes inline code when _WIN32 is defined, otherwise is no-op #else #error platform unsupported!! diff --git a/src/util/conf.c b/src/util/conf.c index b8a2370..9b7bbd5 100644 --- a/src/util/conf.c +++ b/src/util/conf.c @@ -29,9 +29,7 @@ int conf_procbuf(const char *restrict buf, char *restrict kout, char *restrict v case '\n': case '\r': case '\0': - case '#': - brk = true; - break; + case '#': brk = true; break; } if (brk) break; @@ -46,8 +44,8 @@ int conf_procbuf(const char *restrict buf, char *restrict kout, char *restrict v *pos = buf[i]; // copy over the buffer's data pos++; // increment the position pointer } - // null-terminate what we've got now (yes, there should be enough space for this since \0 isn't stored) - // this also ensures the value is valid, even if none is given + // null-terminate what we've got now (yes, there should be enough space for this since \0 + // isn't stored) this also ensures the value is valid, even if none is given *pos = '\0'; // no data if we didn't move from the key position @@ -55,7 +53,8 @@ int conf_procbuf(const char *restrict buf, char *restrict kout, char *restrict v return (pos == kout) ? CONF_ENODAT : (!feq ? CONF_ESYNTAX : 0); } -struct conf_entry const *conf_matchopt(struct conf_entry const *opts, usize optc, const char *restrict key) +struct conf_entry const *conf_matchopt(struct conf_entry const *opts, usize optc, + const char *restrict key) { // find a match for the current key usize i = 0; @@ -96,7 +95,8 @@ int conf_procval(struct conf_entry const *opt, const char *restrict val) // string data parsing case CONF_STR: if (*(char **)opt->out) { - free(*(char **)opt->out); // if the same key is given multiple times, free the memory so we don't leak. + free(*(char **)opt->out); // if the same key is given multiple times, free + // the memory so we don't leak. warn("encountered a dynamic string multiple times, this is sub-optimal."); } *(char **)opt->out = strdup(val); @@ -116,25 +116,53 @@ int conf_procval(struct conf_entry const *opt, const char *restrict val) } switch (opt->type) { - case CONF_U8: *(u8 *)opt->out = *(u64 *)dat >= UINT8_MAX ? UINT8_MAX : *(u64 *)dat; return 0; - case CONF_U16: *(u16 *)opt->out = *(u64 *)dat >= UINT16_MAX ? UINT16_MAX : *(u64 *)dat; return 0; - case CONF_U32: *(u32 *)opt->out = *(u64 *)dat >= UINT32_MAX ? UINT32_MAX : *(u64 *)dat; return 0; - case CONF_U64: *(u64 *)opt->out = *(u64 *)dat >= UINT64_MAX ? UINT64_MAX : *(u64 *)dat; return 0; - case CONF_I8: *(i8 *)opt->out = *(i64 *)dat >= INT8_MAX ? INT8_MAX : (*(i64 *)dat <= INT8_MIN ? INT8_MIN : *(i64 *)dat); return 0; - case CONF_I16: *(i16 *)opt->out = *(i64 *)dat >= INT16_MAX ? INT16_MAX : (*(i64 *)dat <= INT16_MIN ? INT16_MIN : *(i64 *)dat); return 0; - case CONF_I32: *(i32 *)opt->out = *(i64 *)dat >= INT32_MAX ? INT32_MAX : (*(i64 *)dat <= INT32_MIN ? INT32_MIN : *(i64 *)dat); return 0; - case CONF_I64: *(i64 *)opt->out = *(i64 *)dat >= INT64_MAX ? INT64_MAX : (*(i64 *)dat <= INT64_MIN ? INT64_MIN : *(i64 *)dat); return 0; + case CONF_U8: + *(u8 *)opt->out = *(u64 *)dat >= UINT8_MAX ? UINT8_MAX : *(u64 *)dat; + return 0; + case CONF_U16: + *(u16 *)opt->out = *(u64 *)dat >= UINT16_MAX ? UINT16_MAX : *(u64 *)dat; + return 0; + case CONF_U32: + *(u32 *)opt->out = *(u64 *)dat >= UINT32_MAX ? UINT32_MAX : *(u64 *)dat; + return 0; + case CONF_U64: + *(u64 *)opt->out = *(u64 *)dat >= UINT64_MAX ? UINT64_MAX : *(u64 *)dat; + return 0; + case CONF_I8: + *(i8 *)opt->out = *(i64 *)dat >= INT8_MAX ? + INT8_MAX : + (*(i64 *)dat <= INT8_MIN ? INT8_MIN : *(i64 *)dat); + return 0; + case CONF_I16: + *(i16 *)opt->out = *(i64 *)dat >= INT16_MAX ? + INT16_MAX : + (*(i64 *)dat <= INT16_MIN ? INT16_MIN : *(i64 *)dat); + return 0; + case CONF_I32: + *(i32 *)opt->out = *(i64 *)dat >= INT32_MAX ? + INT32_MAX : + (*(i64 *)dat <= INT32_MIN ? INT32_MIN : *(i64 *)dat); + return 0; + case CONF_I64: + *(i64 *)opt->out = *(i64 *)dat >= INT64_MAX ? + INT64_MAX : + (*(i64 *)dat <= INT64_MIN ? INT64_MIN : *(i64 *)dat); + return 0; case CONF_F32: *(f32 *)opt->out = *(f32 *)dat; return 0; case CONF_F64: *(f64 *)opt->out = *(f64 *)dat; return 0; - default: fatal("invalid switch state, all cases should be handled already"); // abort; this shouldn't be possible, so I blame the programmer + default: + /* abort; this shouldn't be possible so I blame the programmer. */ + fatal("invalid switch state, all cases should be handled already"); } } /* utility function for conf_getpat to concatenate 3 strings, where we already know the size */ NONNULL((1, 3)) -static char *conf_getpat_concat(const char *restrict s1, const char *restrict s2, const char *restrict s3, usize s1len, usize s2len, usize s3len) +static char *conf_getpat_concat(const char *restrict s1, const char *restrict s2, + const char *restrict s3, usize s1len, usize s2len, usize s3len) { - assert(s2 || (!s2 && !s2len)); // ensuring the programmer passes both s2 and s2len as 0, if they intend to + assert(s2 || (!s2 && !s2len)); // ensuring the programmer passes both s2 and s2len as 0, if + // they intend to char *buf, *ptr; // allocate enough data for all three to the buffer @@ -146,8 +174,9 @@ static char *conf_getpat_concat(const char *restrict s1, const char *restrict s2 // copy data to the buffer ptr = memcpy(ptr, s1, s1len) + s1len; // copy s1 data to the buffer if (s2len) - ptr = memcpy(ptr, s2, s2len) + s2len; // copy s2 data to the buffer (excluding null-terminator) - (void)strcpy(ptr, s3); // copy s3 as a string, thus including null-terminator + ptr = memcpy(ptr, s2, s2len) + s2len; // copy s2 data to the buffer (excluding + // null-terminator) + (void)strcpy(ptr, s3); // copy s3 as a string, thus including null-terminator // return the buffer return buf; diff --git a/src/util/conf.h b/src/util/conf.h index f8885b0..c545468 100644 --- a/src/util/conf.h +++ b/src/util/conf.h @@ -19,18 +19,18 @@ enum conf_err { /* defines the primitive types available in the config file */ enum conf_primitive { - CONF_STR = 0, // expects: `char**`, will output malloc'd data !!must be freed!! - CONF_I8 = 1, // expects: `int8_t*`, will point to a location in memory where an i8 is stored. - CONF_I16 = 2, // expects: `int16_t*`, will point to a location in memory where an i16 is stored. - CONF_I32 = 4, // expects: `int32_t*`, will point to a location in memory where an i32 is stored. - CONF_I64 = 8, // expects: `int64_t*`, will point to a location in memory where an i64 is stored. - CONF_U8 = CONF_I8 | 0x80, // expects: `uint8_t*`, will point to a location in memory where an u8 is stored. - CONF_U16 = CONF_I16 | 0x80, // expects: `uint16_t*`, will point to a location in memory where an u16 is stored. - CONF_U32 = CONF_I32 | 0x80, // expects: `uint32_t*`, will point to a location in memory where an u32 is stored. - CONF_U64 = CONF_I64 | 0x80, // expects: `uint64_t*`, will point to a location in memory where an u64 is stored. - CONF_F32 = CONF_I32 | 0x40, // expects: `float*`, will point to a location in memory where an f32 is stored. - CONF_F64 = CONF_I64 | 0x40, // expects: `double*`, will point to a location in memory where an f64 is stored. - CONF_FSTR = 0x40, // expects: `struct conf_fstr*`, which contains the data for a fixed-width string + CONF_STR = 0, // expects `char**`, will output malloc'd data + CONF_I8 = 1, // expects `int8_t*`, + CONF_I16 = 2, // expects `int16_t*`, + CONF_I32 = 4, // expects `int32_t*`, + CONF_I64 = 8, // expects `int64_t*`, + CONF_U8 = CONF_I8 | 0x80, // expects `uint8_t*`, + CONF_U16 = CONF_I16 | 0x80, // expects `uint16_t*`, + CONF_U32 = CONF_I32 | 0x80, // expects `uint32_t*`, + CONF_U64 = CONF_I64 | 0x80, // expects `uint64_t*`, + CONF_F32 = CONF_I32 | 0x40, // expects `float*`, + CONF_F64 = CONF_I64 | 0x40, // expects `double*`, + CONF_FSTR = 0x40, // expects `struct conf_fstr*` }; /* for outputting a fixed string as this config field */ @@ -42,29 +42,33 @@ struct conf_fstr { /* defines the structure of a config file entry */ struct conf_entry { const char *key; // the key of this entry - void *out; // the pointer to which the data is written value is read if the given option is incorrect or missing + void *out; // where data will be written, is read when key is missing or invalid u8 type; // the primitive type which we are querying for }; /* processes an incoming buffer. * `buf`, `kout` and `vout` mustn't overlap, and must be (at least) `len` bytes long! * `kout` and `vout` will contain a null-terminated string if the function returned successfully. - * returns `0` on success, `<0` when no data was found. `>0` when data was invalid but something went wrong. - * see `CONF_E*` or `enum conf_err` */ + * returns `0` on success, `<0` when no data was found. `>0` when data was invalid but something + * went wrong. see `CONF_E*` or `enum conf_err` */ int conf_procbuf(const char *restrict buf, char *restrict kout, char *restrict vout, usize len); -/* matches the key with one of the options and returns the pointer. Returns NULL if none could be found. */ -struct conf_entry const *conf_matchopt(struct conf_entry const *opts, usize optc, const char *restrict key); +/* matches the key with one of the options and returns the pointer. Returns NULL if none could be + * found. */ +struct conf_entry const *conf_matchopt(struct conf_entry const *opts, usize optc, + const char *restrict key); -/* processes the value belonging to the key and outputs the result to opts. - * - `val` points to a null-terminated string which contains the key and value. - * returns `0` upon success, non-zero upon failure. For information about specific error codes, see `enum conf_err` */ +/* Processes the value belonging to the key and outputs the result to opts. + * `val` points to a null-terminated string which contains the key and value. + * returns `0` upon success, non-zero upon failure. + * For information about specific error codes, see`enum conf_err` */ int conf_procval(struct conf_entry const *opts, const char *restrict val); -/* acquires the config file path, appending str to the end (you need to handle path separators yourself) - * expecting str to be null-terminated - * - linux: reads $XDG_CONFIG_HOME, if empty $HOME/.config is used, if $HOME is empty NULL is returned. - * - windows: reads %APPDATA%, if empty %USERPROFILE%\AppData\Roaming is used, if both are empty NULL is returned. - * - osx: reads $HOME, uses $HOME/Library/Application Support, if $HOME is empty NULL is returned. - * !! A malloc'd null-terminated string is returned !! */ +/* acquires the config file path, appending str to the end expecting str to be null-terminated + * note: you must handle path separators yourself. + * checks the following environment variables for each platform in order: + * LINUX: `$XDG_CONFIG_HOME`, `$HOME/.config`. + * WINDOWS: `%APPDATA%`, `%USERPROFILE%\AppData\Roaming`. + * MACOSX: `$HOME/Library/Application Support`. + * `NULL` is returned if the path couldn't be found. */ char *conf_getpat(const char *) MALLOC NONNULL((1)); diff --git a/src/util/error.c b/src/util/error.c index fb9dd89..dbdd280 100644 --- a/src/util/error.c +++ b/src/util/error.c @@ -7,7 +7,8 @@ #include "../types.h" -static void error_log(FILE *restrict stream, const char *restrict pfx, uint ln, const char *restrict file, const char *restrict fmt, va_list ap) +static void error_log(FILE *restrict stream, const char *restrict pfx, uint ln, + const char *restrict file, const char *restrict fmt, va_list ap) { fprintf(stream, "(%s:%u) [%s] '", file, ln, pfx); vfprintf(stream, fmt, ap);