23 static ssize_t s_file_write(
void *user,
const void * ptr,
size_t count)
25 return fwrite(ptr, 1, count, (FILE *)user);
28 static int s_file_printf(
void *user,
const char * format, va_list arg)
30 return vfprintf((FILE *)user, format, arg);
33 static const struct userio s_userio_file = {
34 .
write = s_file_write,
35 .vprintf = s_file_printf,
41 return &s_userio_file;
49 ret = io->
vprintf(user, format, ap);
56 return io->
vprintf(user, format, arg);
61 return io->
write(user, ptr, count);
66 return io->
write(user, str, strlen(str));
72 return io->
write(user, &c,
sizeof(c));
78 const char *ptr = src;
79 const char *replacement;
85 case '&': replacement =
"&";
break;
86 case '\'': replacement =
"'";
break;
87 case '"': replacement =
""";
break;
88 case '<': replacement =
"<";
break;
89 case '>': replacement =
">";
break;
90 default: replacement = NULL;
93 if (replacement != NULL)
95 total +=
userio_write(io, user, src, (
size_t)(ptr - src));
97 total +=
userio_write(io, user, replacement, strlen(replacement));
100 total +=
userio_write(io, user, src, (
size_t)(ptr - src));
int(* vprintf)(void *user, const char *format, va_list arg)
ssize_t(* write)(void *user, const void *ptr, size_t count)
ssize_t userio_prints(const struct userio *io, void *user, const char *str)
ssize_t userio_vprintf(const struct userio *io, void *user, const char *format, va_list arg)
ssize_t userio_write(const struct userio *io, void *user, const void *ptr, size_t count)
ssize_t userio_printf(const struct userio *io, void *user, const char *format,...)
size_t userio_xml_escape(const struct userio *io, void *user, const char *src)
ssize_t userio_putc(const struct userio *io, void *user, int ch)
const struct userio * userio_file()
void userio_xmlv1(const userio *io, void *user)