mirror of /home/gitosis/repositories/libowfat.git

4 changed files with 58 additions and 1 deletions
@ -0,0 +1,26 @@
|
||||
#include "fmt.h" |
||||
#include "textcode.h" |
||||
#include "str.h" |
||||
#include "haveinline.h" |
||||
|
||||
size_t fmt_html_tagarg(char* dest,const char* src,size_t len) { |
||||
register const unsigned char* s=(const unsigned char*) src; |
||||
size_t written=0,i; |
||||
const char* seq; |
||||
for (i=0; i<len; ++i) { |
||||
switch (s[i]) { |
||||
case '&': seq="&"; goto doit; |
||||
case '<': seq="<"; goto doit; |
||||
case '>': seq=">"; goto doit; |
||||
case '"': |
||||
seq="&dquot;"; |
||||
doit: |
||||
written+=fmt_str(dest?dest+written:0,seq); |
||||
break; |
||||
default: if (dest) dest[written]=s[i]; ++written; break; |
||||
} |
||||
/* in case someone gives us malicious input */ |
||||
if (written>((size_t)-1)/2) return (size_t)-1; |
||||
} |
||||
return written; |
||||
} |
@ -0,0 +1,23 @@
|
||||
#include "fmt.h" |
||||
#include "textcode.h" |
||||
#include "str.h" |
||||
#include "haveinline.h" |
||||
|
||||
size_t fmt_xml(char* dest,const char* src,size_t len) { |
||||
register const unsigned char* s=(const unsigned char*) src; |
||||
size_t written=0,i; |
||||
const char* seq; |
||||
for (i=0; i<len; ++i) { |
||||
switch (s[i]) { |
||||
case '&': seq="&"; goto doit; |
||||
case '<': seq="<"; |
||||
doit: |
||||
written+=fmt_str(dest?dest+written:0,seq); |
||||
break; |
||||
default: if (dest) dest[written]=s[i]; ++written; break; |
||||
} |
||||
/* in case someone gives us malicious input */ |
||||
if (written>((size_t)-1)/2) return (size_t)-1; |
||||
} |
||||
return written; |
||||
} |
Loading…
Reference in new issue