diff options
author | 2025-04-08 01:32:41 +0100 | |
---|---|---|
committer | 2025-04-08 01:35:13 +0100 | |
commit | 6c8cd62277a9c81d1d24c146067c405ec90cbfb2 (patch) | |
tree | e2560cc8b3174b4481770464b886f7af3a2234a7 /src/build/cmeta.c | |
parent | 25838ab4eb1fc94f59186cb24b75f440f9062f9a (diff) | |
download | sst-6c8cd62277a9c81d1d24c146067c405ec90cbfb2.tar.gz sst-6c8cd62277a9c81d1d24c146067c405ec90cbfb2.zip |
Put some error paths in the fridge
Diffstat (limited to 'src/build/cmeta.c')
-rw-r--r-- | src/build/cmeta.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/build/cmeta.c b/src/build/cmeta.c index 78b3887..434be76 100644 --- a/src/build/cmeta.c +++ b/src/build/cmeta.c @@ -67,21 +67,21 @@ Type *array_of(Type *base, int len) { #include "../3p/openbsd/asprintf.c" // missing from libc; plonked here for now #endif -static noreturn die(int status, const char *s) { +static cold noreturn die(int status, const char *s) { fprintf(stderr, "cmeta: fatal: %s\n", s); exit(status); } struct cmeta cmeta_loadfile(const os_char *path) { int f = os_open_read(path); - if (f == -1) die(100, "couldn't open file"); + if_cold (f == -1) die(100, "couldn't open file"); vlong len = os_fsize(f); - if (len > 1u << 30 - 1) die(2, "input file is far too large"); + if_cold (len > 1u << 30 - 1) die(2, "input file is far too large"); struct cmeta ret; ret.sbase = malloc(len + 1); ret.sbase[len] = '\0'; // chibicc needs a null terminator - if (!ret.sbase) die(100, "couldn't allocate memory"); - if (os_read(f, ret.sbase, len) != len) die(100, "couldn't read file"); + if_cold (!ret.sbase) die(100, "couldn't allocate memory"); + if_cold (os_read(f, ret.sbase, len) != len) die(100, "couldn't read file"); int maxitems = len / 4; // shortest word is "END" ret.nitems = 0; // eventual overall memory requirement: file size * 6. seems fine to me. @@ -90,13 +90,13 @@ struct cmeta cmeta_loadfile(const os_char *path) { //ret.itemoffs = malloc(maxitems * sizeof(*ret.itemoffs)); //if (!ret.itemoffs) die(100, "couldn't allocate memory"); ret.itemtoks = malloc(maxitems * sizeof(*ret.itemtoks)); - if (!ret.itemtoks) die(100, "couldn't allocate memory"); + if_cold (!ret.itemtoks) die(100, "couldn't allocate memory"); ret.itemtypes = malloc(maxitems * sizeof(*ret.itemtypes)); - if (!ret.itemtypes) die(100, "couldn't allocate memory"); + if_cold (!ret.itemtypes) die(100, "couldn't allocate memory"); os_close(f); #ifdef _WIN32 char *realname = malloc(wcslen(path) + 1); - if (!realname) die(100, "couldn't allocate memory"); + if_cold (!realname) die(100, "couldn't allocate memory"); // XXX: being lazy about Unicode right now; a general purpose tool should // implement WTF8 or something. SST itself doesn't have any unicode paths // though, so we don't really care as much. this code still sucks though. |