asn_internal.c
Go to the documentation of this file.
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_denm_coding
Author(s): Jean-Pierre Busch , Guido Küppers , Lennart Reiher
autogenerated on Sun May 18 2025 02:23:47