]> git.jsancho.org Git - lugaru.git/blob - Source/pack.c
Initial import.
[lugaru.git] / Source / pack.c
1 #include <stdlib.h>
2
3 #include "binio.h"
4 #include "private.h"
5 #include "pack_private.h"
6
7 extern void packf(const char *format, ...)
8 {
9     va_list args;
10     va_start(args, format);
11     vfpackf(stdout, format, args);
12     va_end(args);
13 }
14
15 extern void spackf(void *buffer, const char *format, ...)
16 {
17     va_list args;
18     va_start(args, format);
19     vspackf(buffer, format, args);
20     va_end(args);
21 }
22
23 extern void fpackf(FILE *file, const char *format, ...)
24 {
25     va_list args;
26     va_start(args, format);
27     vfpackf(file, format, args);
28     va_end(args);
29 }
30
31 extern void vspackf(void *buffer, const char *format, va_list args)
32 {
33     struct BinIOFormatCursor cursor;
34     struct BinIOPackContext context;
35
36     BinIOInitFormatCursor(&cursor, format);
37
38     context.buffer = (unsigned char *)buffer;
39     context.args = args;
40     
41     while (BinIONextChar(&context, &cursor, BinIOPack)) {}
42 }
43
44 extern void vfpackf(FILE *file, const char *format, va_list args)
45 {
46     size_t n_bytes = BinIOFormatByteCount(format);
47     void* buffer = malloc(n_bytes);
48     
49     vspackf(buffer, format, args);
50     
51     fwrite(buffer, n_bytes, 1, file);
52     free(buffer);
53 }