CLIT(3) Library Functions Manual CLIT(3)

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