From 316726a610a8d9313fd4714ab42bd04f39f225c4 Mon Sep 17 00:00:00 2001 From: Quinn Date: Thu, 16 Oct 2025 23:35:30 +0200 Subject: [PATCH] tmp: revert enabling a column limit --- .clang-format | 4 +-- src/dat/mcx.c | 23 +++++-------- src/io/input.c | 2 +- src/io/render.c | 6 ++-- src/io/render/mapcolour.h | 3 +- src/io/shader.c | 7 ++-- src/io/window.c | 23 ++++++------- src/main.c | 2 +- src/util/compat/io.h | 21 ++++-------- src/util/compat/os.h | 4 +-- src/util/conf.c | 69 ++++++++++++--------------------------- src/util/conf.h | 56 +++++++++++++++---------------- src/util/error.c | 3 +- 13 files changed, 85 insertions(+), 138 deletions(-) diff --git a/.clang-format b/.clang-format index b77657e..60fb2d9 100644 --- a/.clang-format +++ b/.clang-format @@ -7,7 +7,7 @@ # --------------------------- BasedOnStyle: GNU Standard: Auto -ColumnLimit: 100 +ColumnLimit: 0 LineEnding: LF UseTab: ForContinuationAndIndentation TabWidth: 8 @@ -39,7 +39,7 @@ AllowShortLambdasOnASingleLine: All AllowShortIfStatementsOnASingleLine: Never AllowShortCaseLabelsOnASingleLine: true AllowShortEnumsOnASingleLine: true -AllowShortLoopsOnASingleLine: false +AllowShortLoopsOnASingleLine: true # --------------------------- # break and wrapping options diff --git a/src/dat/mcx.c b/src/dat/mcx.c index 5c76bfe..fcc3d04 100644 --- a/src/dat/mcx.c +++ b/src/dat/mcx.c @@ -25,8 +25,7 @@ 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; @@ -98,15 +97,12 @@ 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; @@ -115,11 +111,9 @@ 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]; @@ -161,15 +155,14 @@ 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; // move the rest of the chunks + chunkids[chunkc] = CHUNKS; // set the spare chunk to the max chunks, so the rest of the chunks are moved u32 table[TABLE]; memcpy(table, buf, sizeof(table)); diff --git a/src/io/input.c b/src/io/input.c index 2382862..f3a8de2 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; + (void)win, (void)key, (void)scancode, (void)action, (void)mods; // make the compiler shut up as this is fine #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 3dcddf2..0804f88 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 + log[len - 1] = '\0'; // terminate the string one character sooner since the log includes a newline fatal("error whilst linking the pipe: '%s'", log); } diff --git a/src/io/render/mapcolour.h b/src/io/render/mapcolour.h index 8cdca23..75aff0a 100644 --- a/src/io/render/mapcolour.h +++ b/src/io/render/mapcolour.h @@ -72,6 +72,5 @@ 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 0517c1c..037f3a9 100644 --- a/src/io/shader.c +++ b/src/io/shader.c @@ -9,9 +9,7 @@ #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[]; @@ -33,8 +31,7 @@ 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 61d358f..fbed2e3 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,18 +39,19 @@ int window_init(void) glfwMakeContextCurrent(win); if (!gladLoadGL(glfwGetProcAddress)) return 1; - /* wait 1 screen update for a redraw a.k.a. "vsync". - (not really applicable in this case, but eh) */ - glfwSwapInterval(1); + glfwSwapInterval(1); // wait 1 screen update for a redraw a.k.a. "vsync". (not really applicable in this case but eh) 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 c95fad8..67f28ca 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); // we won't need them + glfwInitHint(GLFW_JOYSTICK_HAT_BUTTONS, GLFW_FALSE); // disable joystick buttons; since 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 91772a3..0d52f2c 100644 --- a/src/util/compat/io.h +++ b/src/util/compat/io.h @@ -11,9 +11,8 @@ #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, - 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 and 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 @@ -31,24 +30,16 @@ 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 527bc3d..8af6976 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 9b7bbd5..b8a2370 100644 --- a/src/util/conf.c +++ b/src/util/conf.c @@ -29,7 +29,9 @@ 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; @@ -44,8 +46,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 @@ -53,8 +55,7 @@ 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; @@ -95,8 +96,7 @@ 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,53 +116,25 @@ 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: - /* abort; this shouldn't be possible so I blame the programmer. */ - fatal("invalid switch state, all cases should be handled already"); + default: fatal("invalid switch state, all cases should be handled already"); // abort; this shouldn't be possible, so I blame the programmer } } /* 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 @@ -174,9 +146,8 @@ 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 c545468..f8885b0 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 - 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*` + 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 }; /* for outputting a fixed string as this config field */ @@ -42,33 +42,29 @@ struct conf_fstr { /* defines the structure of a config file entry */ struct conf_entry { const char *key; // the key of this entry - void *out; // where data will be written, is read when key is missing or invalid + void *out; // the pointer to which the data is written value is read if the given option is incorrect or missing 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 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. */ +/* 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 !! */ char *conf_getpat(const char *) MALLOC NONNULL((1)); diff --git a/src/util/error.c b/src/util/error.c index dbdd280..fb9dd89 100644 --- a/src/util/error.c +++ b/src/util/error.c @@ -7,8 +7,7 @@ #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);