mirror of /home/gitosis/repositories/libowfat.git
Mirror of :pserver:cvs@cvs.fefe.de:/cvs libowfat
https://www.fefe.de/libowfat/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
861 B
42 lines
861 B
#include "fmt.h" |
|
#include "textcode.h" |
|
#include "scan.h" |
|
|
|
unsigned long scan_cescape(const char *src,char *dest,unsigned long *destlen) { |
|
register const unsigned char* s=(const unsigned char*) src; |
|
unsigned long written=0,i; |
|
char c; |
|
for (i=0; s[i]; ++i) { |
|
if ((c=s[i])=='\\') { |
|
switch (s[i+1]) { |
|
case 'a': c='\a'; break; |
|
case 'b': c='\b'; break; |
|
case 'e': c=0x1b; break; |
|
case 'f': c='\f'; break; |
|
case 'n': c='\n'; break; |
|
case 'r': c='\r'; break; |
|
case 't': c='\t'; break; |
|
case 'v': c='\v'; |
|
case '\\': break; |
|
case 'x': |
|
{ |
|
unsigned char a,b; |
|
a=scan_fromhex(s[i+2]); |
|
b=scan_fromhex(s[i+3]); |
|
if (a<16 && b<16) { |
|
c=(a<<4)+b; |
|
i+=2; |
|
} |
|
} |
|
break; |
|
default: |
|
--i; |
|
} |
|
++i; |
|
} |
|
dest[written]=c; |
|
++written; |
|
} |
|
*destlen=written; |
|
return i; |
|
}
|
|
|