105 #define STR(x) vstring_str(x)
106 #define LEN(x) VSTRING_LEN(x)
110 static void attr_print64_str(
VSTREAM *fp,
const char *str, ssize_t len)
121 static void attr_print64_num(
VSTREAM *fp,
unsigned num)
129 attr_print64_str(fp,
STR(plain),
LEN(plain));
132 static void attr_print64_long_num(
VSTREAM *fp,
unsigned long long_num)
140 attr_print64_str(fp,
STR(plain),
LEN(plain));
147 const char *myname =
"attr_print64";
151 unsigned long long_val;
163 msg_panic(
"%s: bad flags: 0x%x", myname, flags);
172 attr_name = va_arg(ap,
char *);
173 attr_print64_str(fp, attr_name, strlen(attr_name));
174 int_val = va_arg(ap,
int);
176 attr_print64_num(fp, (
unsigned) int_val);
179 msg_info(
"send attr %s = %u", attr_name, int_val);
182 attr_name = va_arg(ap,
char *);
183 attr_print64_str(fp, attr_name, strlen(attr_name));
184 long_val = va_arg(ap,
long);
186 attr_print64_long_num(fp, (
unsigned long) long_val);
189 msg_info(
"send attr %s = %lu", attr_name, long_val);
192 attr_name = va_arg(ap,
char *);
193 attr_print64_str(fp, attr_name, strlen(attr_name));
194 str_val = va_arg(ap,
char *);
196 attr_print64_str(fp, str_val, strlen(str_val));
199 msg_info(
"send attr %s = %s", attr_name, str_val);
202 attr_name = va_arg(ap,
char *);
203 attr_print64_str(fp, attr_name, strlen(attr_name));
204 len_val = va_arg(ap, ssize_t);
205 str_val = va_arg(ap,
char *);
207 attr_print64_str(fp, str_val, len_val);
210 msg_info(
"send attr %s = [data %ld bytes]",
211 attr_name, (
long) len_val);
215 print_arg = va_arg(ap,
void *);
222 for (ht = ht_info_list; *ht; ht++) {
223 attr_print64_str(fp, ht[0]->key, strlen(ht[0]->key));
225 attr_print64_str(fp, ht[0]->value, strlen(ht[0]->value));
228 msg_info(
"send attr name %s value %s",
229 ht[0]->key, (
char *) ht[0]->value);
231 myfree((
void *) ht_info_list);
236 msg_panic(
"%s: unknown type code: %d", myname, attr_type);
263 int main(
int unused_argc,
char **argv)
void htable_free(HTABLE *table, void(*free_fn)(void *))
char * mystrdup(const char *str)
#define SEND_ATTR_HASH(val)
NORETURN msg_panic(const char *fmt,...)
int main(int argc, char **argv)
int(* ATTR_PRINT_SLAVE_FN)(ATTR_PRINT_MASTER_FN, VSTREAM *, int, void *)
int attr_print64(VSTREAM *fp, int flags,...)
HTABLE * htable_create(ssize_t size)
HTABLE_INFO ** htable_list(HTABLE *table)
VSTRING * vstring_alloc(ssize_t len)
int attr_vprint64(VSTREAM *fp, int flags, va_list ap)
VSTRING * vstring_sprintf(VSTRING *vp, const char *format,...)
#define SEND_ATTR_INT(name, val)
#define SEND_ATTR_LONG(name, val)
NORETURN msg_fatal(const char *fmt,...)
int vstream_fflush(VSTREAM *stream)
VSTRING * base64_encode(VSTRING *, const char *, ssize_t)
void msg_vstream_init(const char *name, VSTREAM *vp)
#define VSTREAM_PUTC(ch, vp)
#define vstream_ferror(vp)
#define SEND_ATTR_STR(name, val)
#define SEND_ATTR_DATA(name, len, val)
int vstream_fputs(const char *str, VSTREAM *stream)
HTABLE_INFO * htable_enter(HTABLE *table, const char *key, void *value)
void msg_info(const char *fmt,...)