add fmt_strm
This commit is contained in:
parent
3c5ca2a2ad
commit
aa435fbee3
1
CHANGES
1
CHANGES
@ -1,4 +1,5 @@
|
||||
0.27:
|
||||
add fmt_strm
|
||||
|
||||
0.26:
|
||||
fix really pathological case where io_timeouted would never
|
||||
|
3
fmt.h
3
fmt.h
@ -90,4 +90,7 @@ size_t fmt_httpdate(char* dest,time_t t);
|
||||
/* internal functions, may be independently useful */
|
||||
char fmt_tohex(char c);
|
||||
|
||||
#define fmt_strm(b,...) fmt_strm_internal(b,__VA_ARGS__,(char*)0)
|
||||
size_t fmt_strm_internal(char* dest,...);
|
||||
|
||||
#endif
|
||||
|
17
fmt/fmt_strm_internal.c
Normal file
17
fmt/fmt_strm_internal.c
Normal file
@ -0,0 +1,17 @@
|
||||
#include <stdarg.h>
|
||||
#include "fmt.h"
|
||||
|
||||
size_t fmt_strm_internal(char* dest, ...) {
|
||||
size_t n;
|
||||
va_list a;
|
||||
const char* s;
|
||||
va_start(a,dest);
|
||||
for (n=0; s=va_arg(a,const char*); ) {
|
||||
size_t inc=fmt_str(dest,s);
|
||||
if (n+inc<n) return (size_t)-1;
|
||||
if (dest) dest+=inc;
|
||||
n+=inc;
|
||||
}
|
||||
va_end(a);
|
||||
return n;
|
||||
}
|
14
test/fmt.c
Normal file
14
test/fmt.c
Normal file
@ -0,0 +1,14 @@
|
||||
#include <fmt.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
int main() {
|
||||
char buf[100];
|
||||
buf[5]='x';
|
||||
assert(fmt_str(buf,"fnord")==5);
|
||||
assert(buf[5]=='x');
|
||||
buf[5]=0;
|
||||
assert(!strcmp(buf,"fnord"));
|
||||
assert(fmt_strm(buf,"Fn","0rd")==5);
|
||||
assert(!strcmp(buf,"Fn0rd"));
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user