src
asn_internal.c
Go to the documentation of this file.
1
#include <
etsi_its_cpm_ts_coding/asn_internal.h
>
2
3
ssize_t
4
asn__format_to_callback
(
int
(*cb)(
const
void
*,
size_t
,
void
*
key
),
void
*
key
,
5
const
char
*
fmt
, ...) {
6
char
scratch[64];
7
char
*buf = scratch;
8
size_t
buf_size =
sizeof
(scratch);
9
int
wrote;
10
int
cb_ret;
11
12
do
{
13
va_list args;
14
va_start(args,
fmt
);
15
16
wrote = vsnprintf(buf, buf_size,
fmt
, args);
17
va_end(args);
18
if
(wrote < (ssize_t)buf_size) {
19
if
(wrote < 0) {
20
if
(buf != scratch)
FREEMEM
(buf);
21
return
-1;
22
}
23
break
;
24
}
25
26
buf_size <<= 1;
27
if
(buf == scratch) {
28
buf =
MALLOC
(buf_size);
29
if
(!buf) {
30
return
-1;
31
}
32
}
else
{
33
void
*p =
REALLOC
(buf, buf_size);
34
if
(!p) {
35
FREEMEM
(buf);
36
return
-1;
37
}
38
buf = p;
39
}
40
}
while
(1);
41
42
cb_ret = cb(buf, wrote,
key
);
43
if
(buf != scratch)
FREEMEM
(buf);
44
if
(cb_ret < 0) {
45
return
-1;
46
}
47
48
return
wrote;
49
}
50
REALLOC
#define REALLOC(oldptr, size)
Definition:
asn_internal.h:39
FREEMEM
#define FREEMEM(ptr)
Definition:
asn_internal.h:40
fmt
static void ssize_t void void const char * fmt
Definition:
asn_internal.h:97
MALLOC
#define MALLOC(size)
Definition:
asn_internal.h:38
key
static void ssize_t void * key
Definition:
asn_internal.h:96
asn_internal.h
asn__format_to_callback
ssize_t asn__format_to_callback(int(*cb)(const void *, size_t, void *key), void *key, const char *fmt,...)
Definition:
asn_internal.c:4
etsi_its_cpm_ts_coding
Author(s): Jean-Pierre Busch
, Guido Küppers
, Lennart Reiher
autogenerated on Sun May 18 2025 02:22:37