summaryrefslogtreecommitdiff
path: root/src/u8c
diff options
context:
space:
mode:
Diffstat (limited to 'src/u8c')
-rw-r--r--src/u8c/dat.c2
-rw-r--r--src/u8c/dattyp.h11
-rw-r--r--src/u8c/geterr.c2
-rw-r--r--src/u8c/init.c6
-rw-r--r--src/u8c/println.c3
-rw-r--r--src/u8c/regerrhandl.c41
-rw-r--r--src/u8c/seterr.c14
-rw-r--r--src/u8c/u32alloc.c7
-rw-r--r--src/u8c/u32cat.c8
-rw-r--r--src/u8c/u32cmp.c3
-rw-r--r--src/u8c/u32fndchr.c12
-rw-r--r--src/u8c/u32free.c2
-rw-r--r--src/u8c/u32ins.c49
-rw-r--r--src/u8c/u32substr.c4
-rw-r--r--src/u8c/u8alloc.c7
-rw-r--r--src/u8c/u8dec.c5
-rw-r--r--src/u8c/u8enc.c6
-rw-r--r--src/u8c/vprint.c3
18 files changed, 154 insertions, 31 deletions
diff --git a/src/u8c/dat.c b/src/u8c/dat.c
index 0fcf492..26d17ef 100644
--- a/src/u8c/dat.c
+++ b/src/u8c/dat.c
@@ -19,7 +19,7 @@
# include <stddef.h>
# include <stdint.h>
# include <u8c/SIZE_C.h>
-struct u8c_dattyp u8c_dat = (struct u8c_dattyp){
+struct u8c_dattyp u8c_dat = {
.err = NULL,
.fmtendian = false,
.stat = UINT8_C(0x0),
diff --git a/src/u8c/dattyp.h b/src/u8c/dattyp.h
index d094151..1a1e830 100644
--- a/src/u8c/dattyp.h
+++ b/src/u8c/dattyp.h
@@ -17,6 +17,8 @@
# define u8c_sym_dattyp
# include <stdbool.h>
# include <stdint.h>
+# include <u8c/errhandltyp.h>
+# include <u8c/errtyp.h>
# include <u8c/SIZE_C.h>
# include <uchar.h>
# if defined(u8c_bethrdsafe)
@@ -24,13 +26,16 @@
# endif
struct u8c_dattyp {
bool fmtendian;
+ unsigned char pad0[sizeof(void(*)(void)) - SIZE_C(0x1)]; /* Padding. */
char32_t const * err;
- unsigned char pad0[sizeof(void(*)(void)) - SIZE_C(0x1)];
+ u8c_errhandltyp errhandls[u8c_errtyp_maxerrtyp];
uint_least8_t fmtbase;
uint_least8_t stat;
# if defined(u8c_bethrdsafe)
- mtx_t errlock;
- mtx_t fmtlock;
+ unsigned char pad1[sizeof(void(*)(void)) - SIZE_C(0x2)]; /* Padding. */
+ mtx_t errlock;
+ mtx_t errhandlslock;
+ mtx_t fmtlock;
# endif
};
# endif
diff --git a/src/u8c/geterr.c b/src/u8c/geterr.c
index a63ae20..65b8eba 100644
--- a/src/u8c/geterr.c
+++ b/src/u8c/geterr.c
@@ -27,9 +27,9 @@ bool u8c_geterr(size_t * const _sz,char32_t const * * const _out) {
# endif
u8c_u32cp(_sz,_out,u8c_dat.err);
u8c_u32free(&u8c_dat.err);
+ u8c_u32cp(_sz,&u8c_dat.err,U"");
# if defined(u8c_bethrdsafe)
mtx_unlock(&u8c_dat.errlock);
# endif
- u8c_seterr((uint_least32_t[]){UINT32_C(0x0),});
return false;
}
diff --git a/src/u8c/init.c b/src/u8c/init.c
index f625bce..f2e4948 100644
--- a/src/u8c/init.c
+++ b/src/u8c/init.c
@@ -14,16 +14,18 @@
If not, see <https://www.gnu.org/licenses/>.
*/
# include "dat.h"
+# include <setjmp.h>
# include <stdbool.h>
# include <stddef.h>
# include <stdint.h>
+# include <u8c/errtyp.h>
# include <u8c/init.h>
# include <u8c/seterr.h>
# include <u8c/u32cp.h>
# if defined(u8c_bethrdsafe)
# include <threads.h>
# endif
-bool u8c_init(void) {
+bool u8c_init() {
/* Initialise mutexes: */
# if defined(u8c_bethrdsafe)
if(mtx_init(&u8c_dat.errlock,mtx_plain) == thrd_error) {
@@ -35,7 +37,7 @@ bool u8c_init(void) {
# endif
/* Set default error message: */
u8c_dat.err = NULL;
- u8c_seterr((uint_least32_t[]){UINT32_C(0x0),});
+ u8c_seterr(U"",u8c_errtyp_deferr);
/* Set status: */
u8c_dat.stat = UINT8_C(0x1);
return false;
diff --git a/src/u8c/println.c b/src/u8c/println.c
index fbfd046..76b0f72 100644
--- a/src/u8c/println.c
+++ b/src/u8c/println.c
@@ -18,6 +18,7 @@
# include <stdbool.h>
# include <stdint.h>
# include <stdio.h>
+# include <u8c/errtyp.h>
# include <u8c/println.h>
# include <u8c/seterr.h>
# include <u8c/vprint.h>
@@ -29,7 +30,7 @@ bool u8c_println(FILE * _fp,char32_t const * const _msg,...) {
return true;
}
if(fputc(0xA,stdout) == EOF) {
- u8c_seterr((uint_least32_t[]){UINT32_C(0x75),UINT32_C(0x38),UINT32_C(0x63),UINT32_C(0x5F),UINT32_C(0x70),UINT32_C(0x72),UINT32_C(0x69),UINT32_C(0x6E),UINT32_C(0x74),UINT32_C(0x6C),UINT32_C(0x6E),UINT32_C(0x3A),UINT32_C(0x20),UINT32_C(0x66),UINT32_C(0x70),UINT32_C(0x75),UINT32_C(0x74),UINT32_C(0x63),UINT32_C(0x3A),UINT32_C(0x20),UINT32_C(0x55),UINT32_C(0x6E),UINT32_C(0x61),UINT32_C(0x62),UINT32_C(0x6C),UINT32_C(0x65),UINT32_C(0x20),UINT32_C(0x74),UINT32_C(0x6F),UINT32_C(0x20),UINT32_C(0x77),UINT32_C(0x72),UINT32_C(0x69),UINT32_C(0x74),UINT32_C(0x65),UINT32_C(0x20),UINT32_C(0x74),UINT32_C(0x6F),UINT32_C(0x20),UINT32_C(0x73),UINT32_C(0x74),UINT32_C(0x64),UINT32_C(0x6F),UINT32_C(0x75),UINT32_C(0x74),UINT32_C(0x2E),UINT32_C(0x0),}); /* u8c_println: fputc: Unable to write to stdout. */
+ u8c_seterr(U"u8c_println: Unable to write to stdout (end of file).",u8c_errtyp_badio);
return false;
}
va_end(args);
diff --git a/src/u8c/regerrhandl.c b/src/u8c/regerrhandl.c
new file mode 100644
index 0000000..6a0d82f
--- /dev/null
+++ b/src/u8c/regerrhandl.c
@@ -0,0 +1,41 @@
+/*
+ Copyright 2021 Gabriel Jensen
+
+ This file is part of u8c.
+
+ u8c is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ u8c is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ See the GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with u8c.
+
+ If not, see <https://www.gnu.org/licenses/>.
+*/
+# include "dat.h"
+# include <stdbool.h>
+# include <stddef.h>
+# include <u8c/errhandltyp.h>
+# include <u8c/errtyp.h>
+# include <u8c/regerrhandl.h>
+static void u8c_regerrhandl_seterrhandl(enum u8c_errtyp _typ,u8c_errhandltyp _errhandl) {
+ u8c_dat.errhandls[(size_t)_typ] = _errhandl;
+}
+bool u8c_regerrhandl(enum u8c_errtyp _typ,u8c_errhandltyp _errhandl) {
+# if defined(u8c_bethrdsafe)
+ mtx_lock(&u8c_dat.errhandlslock);
+# endif
+ if(_typ == u8c_errtyp_all) {
+ for(register int n = 0x0;n < (int)u8c_errtyp_maxerrtyp;n += 0x1) {
+ u8c_regerrhandl_seterrhandl((enum u8c_errtyp)n,_errhandl);
+ }
+ }
+ else {
+ u8c_regerrhandl_seterrhandl(_typ,_errhandl);
+ }
+# if defined(u8c_bethrdsafe)
+ mtx_unlock(&u8c_dat.errhandlslock);
+# endif
+ return false;
+}
diff --git a/src/u8c/seterr.c b/src/u8c/seterr.c
index 7c7fb12..adde683 100644
--- a/src/u8c/seterr.c
+++ b/src/u8c/seterr.c
@@ -16,16 +16,17 @@
# include "dat.h"
# include <assert.h>
# include <stdbool.h>
+# include <stddef.h>
# include <stdint.h>
-# include <stdlib.h>
# include <u8c/dbgprint.h>
+# include <u8c/errtyp.h>
# include <u8c/seterr.h>
# include <u8c/u32cp.h>
# include <u8c/u32free.h>
# if defined(u8c_bethrdsafe)
# include <threads.h>
# endif
-bool u8c_seterr(char32_t const * const _msg) {
+bool u8c_seterr(char32_t const * const _msg,enum u8c_errtyp _typ) {
assert(_msg != NULL);
//u8c_dbgprint(_msg);
# if defined(u8c_bethrdsafe)
@@ -36,5 +37,14 @@ bool u8c_seterr(char32_t const * const _msg) {
# if defined(u8c_bethrdsafe)
mtx_unlock(&u8c_dat.errlock);
# endif
+# if defined(u8c_bethrdsafe)
+ mtx_lock(&u8c_dat.errhandlslock);
+# endif
+ if(u8c_dat.errhandls[(size_t)_typ] != NULL) {
+ u8c_dat.errhandls[(size_t)_typ](_typ);
+ }
+# if defined(u8c_bethrdsafe)
+ mtx_unlock(&u8c_dat.errhandlslock);
+# endif
return false;
}
diff --git a/src/u8c/u32alloc.c b/src/u8c/u32alloc.c
index 804d564..ddd5493 100644
--- a/src/u8c/u32alloc.c
+++ b/src/u8c/u32alloc.c
@@ -13,16 +13,19 @@
If not, see <https://www.gnu.org/licenses/>.
*/
+# include "dat.h"
+# include <setjmp.h>
# include <stdbool.h>
# include <stdlib.h>
+# include <u8c/errtyp.h>
# include <u8c/seterr.h>
# include <u8c/u32alloc.h>
# include <uchar.h>
bool u8c_u32alloc(char32_t * * const _u32,size_t const _sz) {
char32_t * arr = NULL;
if((arr = calloc(sizeof *arr,_sz)) == NULL) {
- u8c_seterr(U"u8c_u32alloc: Unable to allocate resources (not enough memory?).");
- return true;
+ u8c_seterr(U"u8c_u32alloc: Unable to allocate resources (not enough memory?).",u8c_errtyp_badalloc);
+ return false;
}
*_u32 = arr;
return false;
diff --git a/src/u8c/u32cat.c b/src/u8c/u32cat.c
index 409030e..b2b6773 100644
--- a/src/u8c/u32cat.c
+++ b/src/u8c/u32cat.c
@@ -33,19 +33,19 @@ bool u8c_u32cat(size_t * const _sz,char32_t const * * const _out,char32_t const
size_t rsz = SIZE_C(0x0);
u8c_u32sz(&lsz,_lstr);
u8c_u32sz(&rsz,_rstr);
- sz = lsz + rsz - SIZE_C(0x1);
+ sz = lsz + rsz;
if(_sz != NULL) {
*_sz = sz;
}
char32_t * out = NULL;
if(u8c_u32alloc(&out,sz + SIZE_C(0x1))) {
- return false;
+ return true;
}
- for(register size_t n = SIZE_C(0x0);n < lsz - SIZE_C(0x1);n += SIZE_C(0x1)) {
+ for(register size_t n = SIZE_C(0x0);n < lsz;n += SIZE_C(0x1)) {
out[n] = _lstr[n];
}
for(register size_t n = SIZE_C(0x0);n < rsz;n += SIZE_C(0x1)) {
- out[n + lsz - SIZE_C(0x1)] = _rstr[n];
+ out[n + lsz] = _rstr[n];
}
u8c_u32free(_out);
*_out = out;
diff --git a/src/u8c/u32cmp.c b/src/u8c/u32cmp.c
index 1dabfef..5c06e30 100644
--- a/src/u8c/u32cmp.c
+++ b/src/u8c/u32cmp.c
@@ -17,6 +17,7 @@
# include <stdbool.h>
# include <stddef.h>
# include <stdint.h>
+# include <u8c/errtyp.h>
# include <u8c/seterr.h>
# include <u8c/SIZE_C.h>
# include <u8c/u32cmp.h>
@@ -40,6 +41,6 @@ bool u8c_u32cmp(uint_least8_t * const _res,char32_t const * const _lstr,char32_t
return false;
}
}
- u8c_seterr((uint_least32_t[]){UINT32_C(0x75),UINT32_C(0x38),UINT32_C(0x63),UINT32_C(0x5F),UINT32_C(0x75),UINT32_C(0x33),UINT32_C(0x32),UINT32_C(0x63),UINT32_C(0x6D),UINT32_C(0x70),UINT32_C(0x3A),UINT32_C(0x20),UINT32_C(0x55),UINT32_C(0x6E),UINT32_C(0x74),UINT32_C(0x65),UINT32_C(0x72),UINT32_C(0x6D),UINT32_C(0x69),UINT32_C(0x6E),UINT32_C(0x61),UINT32_C(0x74),UINT32_C(0x65),UINT32_C(0x64),UINT32_C(0x20),UINT32_C(0x69),UINT32_C(0x6E),UINT32_C(0x70),UINT32_C(0x75),UINT32_C(0x74),UINT32_C(0x2E),UINT32_C(0x0),}); /* u8c_u32cmp: Unterminated input. */
+ u8c_seterr(U"u8c_u32cmp: Unterminated input.",u8c_errtyp_untermin);
return true;
}
diff --git a/src/u8c/u32fndchr.c b/src/u8c/u32fndchr.c
index ca83998..ab4b5e1 100644
--- a/src/u8c/u32fndchr.c
+++ b/src/u8c/u32fndchr.c
@@ -18,6 +18,7 @@
# include <stddef.h>
# include <stdint.h>
# include <u8c/SIZE_C.h>
+# include <u8c/errtyp.h>
# include <u8c/seterr.h>
# include <u8c/u32fndchr.h>
# include <u8c/u32sz.h>
@@ -25,16 +26,21 @@ bool u8c_u32fndchr(size_t * const _pos,char32_t const * const _in,char32_t const
assert(_pos != NULL);
assert(_in != NULL);
for(register size_t n = SIZE_C(0x0);n <= SIZE_MAX;n += SIZE_C(0x1)) {
- if(_in[n] == UINT32_C(0x0) && _chr != UINT32_C(0x0)) {
+ register uint_least32_t const tmp = _in[n];
+ if(tmp == UINT32_C(0x0)) {
+ if(_chr == UINT32_C(0x0)) {
+ *_pos = n;
+ return false;
+ }
*_pos = SIZE_C(-0x1);
return true;
}
- if(_in[n] == _chr) {
+ if(tmp == _chr) {
*_pos = n;
return false;
}
}
- u8c_seterr(U"u8c_u32fndchr: Unterminated input.");
+ u8c_seterr(U"u8c_u32fndchr: Unterminated input.",u8c_errtyp_badio);
*_pos = SIZE_C(-0x1);
return true;
}
diff --git a/src/u8c/u32free.c b/src/u8c/u32free.c
index 62b43ef..b57e392 100644
--- a/src/u8c/u32free.c
+++ b/src/u8c/u32free.c
@@ -18,7 +18,7 @@
# include <stdlib.h>
# include <u8c/u32free.h>
bool u8c_u32free(char32_t const * * const _u32) {
- free((char32_t *)*_u32);
+ free((char32_t *)*_u32); /* This cast does indeed discard a const-qualifier, but it is not undefined behaviour, as the array must have been allocated by calloc or malloc, meaning it's original type is not const-qualified. */
*_u32 = NULL;
return false;
}
diff --git a/src/u8c/u32ins.c b/src/u8c/u32ins.c
new file mode 100644
index 0000000..f5d9d4e
--- /dev/null
+++ b/src/u8c/u32ins.c
@@ -0,0 +1,49 @@
+/*
+ Copyright 2021 Gabriel Jensen
+
+ This file is part of u8c.
+
+ u8c is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ u8c is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ See the GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with u8c.
+
+ If not, see <https://www.gnu.org/licenses/>.
+*/
+# include <assert.h>
+# include <stdbool.h>
+# include <stddef.h>
+# include <u8c/SIZE_C.h>
+# include <u8c/u32alloc.h>
+# include <u8c/u32cat.h>
+# include <u8c/u32free.h>
+# include <u8c/u32ins.h>
+# include <u8c/u32substr.h>
+# include <uchar.h>
+bool u8c_u32ins(size_t * const _sz,char32_t const * * const _out,size_t const _pos,char32_t const * const _str0,char32_t const * const _str1) {
+ assert(_out != NULL);
+ assert(_str0 != NULL);
+ assert(_str1 != NULL);
+ char32_t const * lstr = NULL;
+ char32_t const * rstr = NULL;
+ u8c_u32substr(&lstr,SIZE_C(0x0),_pos - SIZE_C(0x1),_str0);
+ u8c_u32substr(&rstr,_pos,SIZE_C(0x0),_str0);
+ size_t sz = SIZE_C(0x0);
+ char32_t const * out = NULL;
+ {
+ char32_t const * tmp = NULL;
+ u8c_u32cat(NULL,&tmp,lstr,_str1);
+ u8c_u32free(&lstr);
+ u8c_u32cat(NULL,&out,tmp,rstr);
+ u8c_u32free(&rstr);
+ u8c_u32free(&tmp);
+ }
+ if(_sz != NULL) {
+ *_sz = sz;
+ }
+ *_out = out;
+ return false;
+}
diff --git a/src/u8c/u32substr.c b/src/u8c/u32substr.c
index 2a30b3b..f23cffa 100644
--- a/src/u8c/u32substr.c
+++ b/src/u8c/u32substr.c
@@ -33,12 +33,12 @@ bool u8c_u32substr(char32_t const * * const _out,size_t const _start,size_t cons
len = insz - _start;
}
if(insz < _start + len) {
- return false;
+ return true;
}
size_t const outsz = len + SIZE_C(0x2);
char32_t * out = NULL;
if(u8c_u32alloc(&out,outsz)) {
- return false;
+ return true;
}
for(register size_t n = SIZE_C(0x0);n <= len;n += SIZE_C(0x1)) {
out[n] = _in[n + _start];
diff --git a/src/u8c/u8alloc.c b/src/u8c/u8alloc.c
index a364acf..4e7bc3d 100644
--- a/src/u8c/u8alloc.c
+++ b/src/u8c/u8alloc.c
@@ -13,15 +13,18 @@
If not, see <https://www.gnu.org/licenses/>.
*/
+# include "dat.h"
+# include <setjmp.h>
# include <stdbool.h>
# include <stdlib.h>
+# include <u8c/errtyp.h>
# include <u8c/seterr.h>
# include <u8c/u8alloc.h>
bool u8c_u8alloc(unsigned char * * const _u8,size_t const _sz) {
unsigned char * arr = NULL;
if((arr = calloc(sizeof *arr,_sz)) == NULL) {
- u8c_seterr(U"u8c_u8alloc: Unable to allocate resources (not enough memory?).");
- return true;
+ u8c_seterr(U"u8c_u8alloc: Unable to allocate resources (not enough memory?).",u8c_errtyp_badalloc);
+ return false;
}
*_u8 = arr;
return false;
diff --git a/src/u8c/u8dec.c b/src/u8c/u8dec.c
index bbc6e94..8e9c2f2 100644
--- a/src/u8c/u8dec.c
+++ b/src/u8c/u8dec.c
@@ -18,6 +18,7 @@
# include <stddef.h>
# include <stdint.h>
# include <u8c/SIZE_C.h>
+# include <u8c/errtyp.h>
# include <u8c/seterr.h>
# include <u8c/u32alloc.h>
# include <u8c/u32free.h>
@@ -35,7 +36,7 @@ bool u8c_u8dec(size_t * const _sz,char32_t const * * const _out,unsigned char co
goto nottoobig;
}
if(tmp >= UINT8_C(0xF8)) { /* Too big. */
- u8c_seterr(U"u8c_u8dec: Character out of range (too big).");
+ u8c_seterr(U"u8c_u8dec: Character out of range (too big).",u8c_errtyp_u8oor);
return true;
}
if(tmp >= UINT8_C(0xF0)) { /* Four byte. */
@@ -54,7 +55,7 @@ bool u8c_u8dec(size_t * const _sz,char32_t const * * const _out,unsigned char co
n += SIZE_C(0x1);
}
/* Input is not null-terminated. */
- u8c_seterr(U"u8c_u8dec: Unterminated input.");
+ u8c_seterr(U"u8c_u8dec: Unterminated input.",u8c_errtyp_untermin);
return true;
nottoobig:;
if(_sz != NULL) {
diff --git a/src/u8c/u8enc.c b/src/u8c/u8enc.c
index 60bc724..541dd8d 100644
--- a/src/u8c/u8enc.c
+++ b/src/u8c/u8enc.c
@@ -18,6 +18,7 @@
# include <stddef.h>
# include <stdint.h>
# include <u8c/SIZE_C.h>
+# include <u8c/errtyp.h>
# include <u8c/seterr.h>
# include <u8c/u8alloc.h>
# include <u8c/u8enc.h>
@@ -32,7 +33,7 @@ bool u8c_u8enc(size_t * const _sz,unsigned char const * * const _out,char32_t co
for(register size_t n = SIZE_C(0x0);n <= SIZE_MAX;n += SIZE_C(0x1)) { /* First pass: get size of input array, and determine size of output array. */
register char32_t const tmp = _in[n];
if(tmp > u8c_unimax) { /* Codepoint out of range. */
- u8c_seterr(U"u8c_u8enc: Codepoint out of range (too big).");
+ u8c_seterr(U"u8c_u8enc: Codepoint out of range (too big).",u8c_errtyp_u32oor);
return true;
}
if(tmp >= UINT32_C(0x10000)) { /* 4 bytes. */
@@ -54,7 +55,7 @@ bool u8c_u8enc(size_t * const _sz,unsigned char const * * const _out,char32_t co
goto nottoobig;
}
}
- u8c_seterr(U"u8c_u8enc: Unterminated input.");
+ u8c_seterr(U"u8c_u8enc: Unterminated input.",u8c_errtyp_untermin);
return true;
nottoobig:;
if(_sz != NULL) {
@@ -62,7 +63,6 @@ nottoobig:;
}
unsigned char * out = NULL;
if(u8c_u8alloc(&out,outsz + SIZE_C(0x1))) {
- u8c_seterr(U"u8c_u32enc: Unable to allocate resources (not enough memory?).");
return true;
}
for(register size_t n = SIZE_C(0x0), outn = SIZE_C(0x0);n < insz;n += SIZE_C(0x1),outn += SIZE_C(0x1)) { /* Second pass: encode each codepoint into UTF-8. */
diff --git a/src/u8c/vprint.c b/src/u8c/vprint.c
index 6dc30ae..a86afcf 100644
--- a/src/u8c/vprint.c
+++ b/src/u8c/vprint.c
@@ -20,6 +20,7 @@
# include <stdio.h>
# include <stdlib.h>
# include <u8c/SIZE_C.h>
+# include <u8c/errtyp.h>
# include <u8c/seterr.h>
# include <u8c/u32free.h>
# include <u8c/u8enc.h>
@@ -36,7 +37,7 @@ bool u8c_vprint(FILE * _fp,char32_t const * const _msg,va_list _args) {
u8c_u8enc(&str1sz,&str1,str0);
assert(str1sz > SIZE_C(0x0));
if(fwrite(str1,sizeof(uint_least8_t),str1sz - SIZE_C(0x1),_fp) < str1sz - SIZE_C(0x1)) {
- u8c_seterr(U"u8c_vprint: fwrite: Unable to write to stdout.");
+ u8c_seterr(U"u8c_vprint: fwrite: Unable to write to stdout.",u8c_errtyp_badio);
return true;
}
u8c_u32free(&str0);