Browse Source

add fmt_strm

master
Felix von Leitner 14 years ago
parent
commit
1c8ffa9021
  1. 1
      CHANGES
  2. 3
      fmt.h
  3. 17
      fmt/fmt_strm_internal.c
  4. 14
      test/fmt.c

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

@ -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

@ -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

@ -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…
Cancel
Save