clit - conv c99 esc string '\n\100' >> '(\n)@' etc
#include "clit.h"
char*
clit(const char*
s [,
int
ssz]
);
char*
clitv(const char*
s
,
int*
szptr);
#include <stdlib.h>
#include <stdio.h>
#include "clit.h"
int main(int argc, char** argv){
int sz;
char* s = "abc\\n\\100\\u0070\\U00000071"; // \n @ p q
char* rp = clit(s); //use strlen(s) if ag2 isnt/-1
puts(rp); //abc(\n)@pq
free(rp); //always needs free(rtn);
//--err
s = "\\u70 \\x61";
rp = clit(s, 7); // \u70 \x
puts(rp); //>> emsg. errno != 0
free(rp);
//--bin
s = "a\0b\\100";
sz = 7; //a(\0)b(\)100
rp = clitv(s, &sz);
puts(rp); // a
free(rp);
if(sz!=4){ return 1; }
return 0;
}
// ~$ cc src.c clit.c #..or libclit.a etc
// ~$ ./a.out; echo $?
- s
- str/bin holding esc '\' chars
- ssz
- conv size if set. use strlen(s) if noset/-1
- szptr
- pass s size and write rtnptr sz (verbose)
return malloc()ed bin/str. return emsg + errno!=0 if err. you always need free()
rtnptr.
conv c99 escaped literal to utf-8 binary.
char: \ + \"'?abfntv
oct : \ooo (1-3digits)
u4 : \u+ hhhh (4digits)
U8 : \U+ hhhhhhhh (8digits)
hex \xhhhh... isnt support. oct is restricted in 3digits==1byte but hex isnt.
hex value depends on env, endian etc.
unicode changes to utf-8 byte sequences.
set errno != 0 if err.
-
POSIX.1-2001+ (-D_XOPEN_SOURCE=600 etc)
Copyright 2022 momi-g, GPLv3+
2022-07-10 v1.0.2 (2022-06-27 v1.0.0)
https://kikakurui.com/x3/X3010-2003-01.html
https://www.dii.uchile.cl/~daespino/files/Iso_C_1999_definition.pdf