20 #include "ws_symbol_export.h"
73 typedef void (*uat_post_update_cb_t)(void);
87 typedef void* (*uat_copy_cb_t)(
void *dest,
const void *source,
size_t len);
139 typedef bool (*uat_fld_chk_cb_t)(
void *record,
const char *ptr,
unsigned len,
const void *chk_data,
const void *fld_data,
char **error);
148 typedef void (*uat_fld_set_cb_t)(
void *record,
const char *ptr,
unsigned len,
const void *set_data,
const void *fld_data);
157 typedef void (*uat_fld_tostr_cb_t)(
void *record,
char **out_ptr,
unsigned *out_len,
const void *tostr_data,
const void *fld_data);
167 typedef enum _uat_text_mode_t {
213 PT_TXTMOD_DIRECTORYNAME,
215 PT_TXTMOD_DISPLAY_FILTER,
217 PT_TXTMOD_PROTO_FIELD,
231 uat_text_mode_t mode;
234 uat_fld_chk_cb_t chk;
235 uat_fld_set_cb_t set;
236 uat_fld_tostr_cb_t tostr;
245 const void* fld_data;
252 #define UAT_END_FIELDS {NULL,NULL,PT_TXTMOD_NONE,{0,0,0},{0,0,0},0,0,FLDFILL}
263 #define UAT_AFFECTS_DISSECTION 0x00000001
264 #define UAT_AFFECTS_FIELDS 0x00000002
288 const char* filename,
291 unsigned* num_items_ptr,
297 uat_post_update_cb_t post_update_cb,
337 uat_t* uat_get_table_by_name(
const char* name);
359 bool uat_fld_chk_str(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
360 bool uat_fld_chk_oid(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
362 bool uat_fld_chk_proto(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
364 bool uat_fld_chk_num_dec(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
366 bool uat_fld_chk_num_dec64(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
368 bool uat_fld_chk_num_hex(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
370 bool uat_fld_chk_num_hex64(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
372 bool uat_fld_chk_num_signed_dec(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
374 bool uat_fld_chk_num_signed_dec64(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
376 bool uat_fld_chk_bool(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
378 bool uat_fld_chk_enum(
void*,
const char*,
unsigned,
const void*,
const void*,
char**);
380 bool uat_fld_chk_range(
void*,
const char*,
unsigned,
const void*,
const void*,
char**);
382 bool uat_fld_chk_color(
void*,
const char*,
unsigned,
const void*,
const void*,
char**);
384 typedef void (*uat_cb_t)(
void* uat,
void* user_data);
386 void uat_foreach_table(uat_cb_t cb,
void* user_data);
387 void uat_unload_all(
void);
389 char* uat_undquote(
const char* si,
unsigned in_len,
unsigned* len_p);
390 char* uat_unbinstring(
const char* si,
unsigned in_len,
unsigned* len_p);
391 char* uat_unesc(
const char* si,
unsigned in_len,
unsigned* len_p);
392 char* uat_esc(
const char* buf,
unsigned len);
397 bool uat_fld_chk_str_isprint(
void*,
const char*,
unsigned,
const void*,
const void*,
char**);
400 bool uat_fld_chk_str_isalpha(
void*,
const char*,
unsigned,
const void*,
const void*,
char**);
403 bool uat_fld_chk_str_isalnum(
void*,
const char*,
unsigned,
const void*,
const void*,
char**);
406 bool uat_fld_chk_str_isdigit(
void*,
const char*,
unsigned,
const void*,
const void*,
char**);
409 bool uat_fld_chk_str_isxdigit(
void*,
const char*,
unsigned,
const void*,
const void*,
char**);
419 #define UNUSED_PARAMETER(n)
421 #define UNUSED_PARAMETER(n) n _U_
428 #define UAT_CSTRING_CB_DEF(basename,field_name,rec_t) \
429 static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
430 char* new_buf = g_strndup(buf,len); \
431 g_free((((rec_t*)rec)->field_name)); \
432 (((rec_t*)rec)->field_name) = new_buf; } \
433 static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
434 if (((rec_t*)rec)->field_name ) { \
435 *out_ptr = g_strdup((((rec_t*)rec)->field_name)); \
436 *out_len = (unsigned)strlen((((rec_t*)rec)->field_name)); \
438 *out_ptr = g_strdup(""); *out_len = 0; } }
440 #define UAT_FLD_CSTRING(basename,field_name,title,desc) \
441 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_str,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
443 #define UAT_FLD_CSTRING_ISPRINT(basename,field_name,title,desc) \
444 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_str_isprint,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
446 #define UAT_FLD_CSTRING_OTHER(basename,field_name,title,chk,desc) \
447 {#field_name, title, PT_TXTMOD_STRING,{ chk ,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
453 #define UAT_FILENAME_CB_DEF(basename,field_name,rec_t) UAT_CSTRING_CB_DEF(basename,field_name,rec_t)
456 #define UAT_FLD_FILENAME(basename,field_name,title,desc) \
457 {#field_name, title, PT_TXTMOD_FILENAME,{uat_fld_chk_str,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
465 #define UAT_FLD_FILENAME_OTHER(basename,field_name,title,chk,desc) \
466 {#field_name, title, PT_TXTMOD_FILENAME,{chk,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
468 #define UAT_DIRECTORYNAME_CB_DEF(basename,field_name,rec_t) UAT_CSTRING_CB_DEF(basename,field_name,rec_t)
470 #define UAT_FLD_DIRECTORYNAME(basename,field_name,title,desc) \
471 {#field_name, title, PT_TXTMOD_DIRECTORYNAME,{uat_fld_chk_str,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
477 #define UAT_DISPLAY_FILTER_CB_DEF(basename,field_name,rec_t) UAT_CSTRING_CB_DEF(basename,field_name,rec_t)
479 #define UAT_FLD_DISPLAY_FILTER(basename,field_name,title,desc) \
480 {#field_name, title, PT_TXTMOD_DISPLAY_FILTER, {uat_fld_chk_str,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
486 #define UAT_PROTO_FIELD_CB_DEF(basename,field_name,rec_t) UAT_CSTRING_CB_DEF(basename,field_name,rec_t)
488 #define UAT_FLD_PROTO_FIELD(basename,field_name,title,desc) \
489 {#field_name, title, PT_TXTMOD_PROTO_FIELD, {uat_fld_chk_str,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
494 #define UAT_FLD_OID(basename,field_name,title,desc) \
495 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_oid,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
501 #define UAT_LSTRING_CB_DEF(basename,field_name,rec_t,ptr_element,len_element) \
502 static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
503 char* new_val = uat_unesc(buf,len,&(((rec_t*)rec)->len_element)); \
504 g_free((((rec_t*)rec)->ptr_element)); \
505 (((rec_t*)rec)->ptr_element) = new_val; }\
506 static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
507 if (((rec_t*)rec)->ptr_element ) { \
508 *out_ptr = uat_esc(((rec_t*)rec)->ptr_element, (((rec_t*)rec)->len_element)); \
509 *out_len = (unsigned)strlen(*out_ptr); \
511 *out_ptr = g_strdup(""); \
516 #define UAT_FLD_LSTRING(basename,field_name,title, desc) \
517 {#field_name, title, PT_TXTMOD_STRING,{0,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
525 #define UAT_BUFFER_CB_DEF(basename,field_name,rec_t,ptr_element,len_element) \
526 static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
527 unsigned char* new_buf = len ? (unsigned char *)g_memdup2(buf,len) : NULL; \
528 g_free((((rec_t*)rec)->ptr_element)); \
529 (((rec_t*)rec)->ptr_element) = new_buf; \
530 (((rec_t*)rec)->len_element) = len; } \
531 static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
532 *out_ptr = ((rec_t*)rec)->ptr_element ? (char*)g_memdup2(((rec_t*)rec)->ptr_element,((rec_t*)rec)->len_element) : g_strdup(""); \
533 *out_len = ((rec_t*)rec)->len_element; }
535 #define UAT_FLD_BUFFER(basename,field_name,title,desc) \
536 {#field_name, title, PT_TXTMOD_HEXBYTES,{0,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
543 #define UAT_DEC_CB_DEF(basename,field_name,rec_t) \
544 static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
545 char* tmp_str = g_strndup(buf,len); \
546 ws_strtou32(tmp_str, NULL, &((rec_t*)rec)->field_name); \
548 static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
549 *out_ptr = ws_strdup_printf("%u",((rec_t*)rec)->field_name); \
550 *out_len = (unsigned)strlen(*out_ptr); }
552 #define UAT_FLD_DEC(basename,field_name,title,desc) \
553 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_num_dec,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
558 #define UAT_DEC64_CB_DEF(basename,field_name,rec_t) \
559 static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
560 char* tmp_str = g_strndup(buf,len); \
561 ws_strtou64(tmp_str, NULL, &((rec_t*)rec)->field_name); \
563 static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
564 *out_ptr = ws_strdup_printf("%" PRIu64,((rec_t*)rec)->field_name); \
565 *out_len = (unsigned)strlen(*out_ptr); }
567 #define UAT_FLD_DEC64(basename,field_name,title,desc) \
568 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_num_dec64,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
573 #define UAT_SIGNED_DEC_CB_DEF(basename,field_name,rec_t) \
574 static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
575 char* tmp_str = g_strndup(buf,len); \
576 ws_strtoi32(tmp_str, NULL, &((rec_t*)rec)->field_name); \
578 static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
579 *out_ptr = ws_strdup_printf("%d",((rec_t*)rec)->field_name); \
580 *out_len = (unsigned)strlen(*out_ptr); }
582 #define UAT_FLD_SIGNED_DEC(basename,field_name,title,desc) \
583 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_num_signed_dec,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
588 #define UAT_SIGNED_DEC64_CB_DEF(basename,field_name,rec_t) \
589 static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
590 char* tmp_str = g_strndup(buf,len); \
591 ws_strtoi64(tmp_str, NULL, &((rec_t*)rec)->field_name); \
593 static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
594 *out_ptr = ws_strdup_printf("%" PRId64,((rec_t*)rec)->field_name); \
595 *out_len = (unsigned)strlen(*out_ptr); }
597 #define UAT_FLD_SIGNED_DEC64(basename,field_name,title,desc) \
598 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_num_signed_dec64,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
600 #define UAT_FLD_NONE(basename,field_name,title,desc) \
601 {#field_name, title, PT_TXTMOD_NONE,{uat_fld_chk_num_dec,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
608 #define UAT_HEX_CB_DEF(basename,field_name,rec_t) \
609 static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
610 char* tmp_str = g_strndup(buf,len); \
611 ws_hexstrtou32(tmp_str, NULL, &((rec_t*)rec)->field_name); \
613 static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
614 *out_ptr = ws_strdup_printf("%x",((rec_t*)rec)->field_name); \
615 *out_len = (unsigned)strlen(*out_ptr); }
617 #define UAT_FLD_HEX(basename,field_name,title,desc) \
618 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_num_hex,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
624 #define UAT_HEX64_CB_DEF(basename,field_name,rec_t) \
625 static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
626 char* tmp_str = g_strndup(buf,len); \
627 ws_hexstrtou64(tmp_str, NULL, &((rec_t*)rec)->field_name); \
629 static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
630 *out_ptr = ws_strdup_printf("%" PRIx64,((rec_t*)rec)->field_name); \
631 *out_len = (unsigned)strlen(*out_ptr); }
633 #define UAT_FLD_HEX64(basename,field_name,title,desc) \
634 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_num_hex64,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
640 #define UAT_BOOL_CB_DEF(basename,field_name,rec_t) \
641 static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
642 char* tmp_str = g_strndup(buf,len); \
643 if (g_strcmp0(tmp_str, "TRUE") == 0) \
644 ((rec_t*)rec)->field_name = 1; \
646 ((rec_t*)rec)->field_name = 0; \
648 static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
649 *out_ptr = ws_strdup_printf("%s",((rec_t*)rec)->field_name ? "TRUE" : "FALSE"); \
650 *out_len = (unsigned)strlen(*out_ptr); }
652 #define UAT_FLD_BOOL(basename,field_name,title,desc) \
653 {#field_name, title, PT_TXTMOD_BOOL,{uat_fld_chk_bool,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
662 #define UAT_VS_DEF(basename,field_name,rec_t,default_t,default_val,default_str) \
663 static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* vs, const void* UNUSED_PARAMETER(u2)) {\
665 char* str = g_strndup(buf,len); \
667 ((rec_t*)rec)->field_name = default_val; \
668 for(i=0; ( cstr = ((const value_string*)vs)[i].strptr ) ;i++) { \
669 if (g_str_equal(cstr,str)) { \
670 ((rec_t*)rec)->field_name = (default_t)((const value_string*)vs)[i].value; \
676 static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* vs, const void* UNUSED_PARAMETER(u2)) {\
678 for(i=0;((const value_string*)vs)[i].strptr;i++) { \
679 if ( ((const value_string*)vs)[i].value == ((rec_t*)rec)->field_name ) { \
680 *out_ptr = g_strdup(((const value_string*)vs)[i].strptr); \
681 *out_len = (unsigned)strlen(*out_ptr); \
685 *out_ptr = g_strdup(default_str); \
686 *out_len = (unsigned)strlen(default_str); }
688 #define UAT_VS_CSTRING_DEF(basename,field_name,rec_t,default_val,default_str) \
689 static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* vs, const void* UNUSED_PARAMETER(u2)) {\
691 char* str = g_strndup(buf,len); \
693 ((rec_t*)rec)->field_name = default_val; \
694 for(i=0; ( cstr = ((const value_string*)vs)[i].strptr ) ;i++) { \
695 if (g_str_equal(cstr,str)) { \
696 ((rec_t*)rec)->field_name = g_strdup(((const value_string*)vs)[i].strptr); \
702 static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(vs), const void* UNUSED_PARAMETER(u2)) {\
703 if (((rec_t*)rec)->field_name ) { \
704 *out_ptr = g_strdup((((rec_t*)rec)->field_name)); \
705 *out_len = (unsigned)strlen((((rec_t*)rec)->field_name)); \
707 *out_ptr = g_strdup(""); *out_len = 0; } }
709 #define UAT_FLD_VS(basename,field_name,title,enum,desc) \
710 {#field_name, title, PT_TXTMOD_ENUM,{uat_fld_chk_enum,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{&(enum),&(enum),&(enum)},&(enum),desc,FLDFILL}
717 #define UAT_COLOR_CB_DEF(basename,field_name,rec_t) \
718 static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
720 ((rec_t*)rec)->field_name = 0; \
723 char* tmp_str = g_strndup(buf+1,len-1); \
724 ((rec_t*)rec)->field_name = (unsigned)strtol(tmp_str,NULL,16); \
726 static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
727 *out_ptr = ws_strdup_printf("#%06X",((rec_t*)rec)->field_name); \
728 *out_len = (unsigned)strlen(*out_ptr); }
730 #define UAT_FLD_COLOR(basename,field_name,title,desc) \
731 {#field_name, title, PT_TXTMOD_COLOR,{uat_fld_chk_color,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
738 #define UAT_DISSECTOR_DEF(basename, field_name, dissector_field, name_field, rec_t) \
739 static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
741 ((rec_t*)rec)->name_field = g_strndup(buf, len); \
742 g_strstrip(((rec_t*)rec)->name_field); \
743 ((rec_t*)rec)->dissector_field = find_dissector(((rec_t*)rec)->name_field); \
745 ((rec_t*)rec)->dissector_field = find_dissector("data"); \
746 ((rec_t*)rec)->name_field = NULL; \
748 static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
749 if ( ((rec_t*)rec)->name_field ) { \
750 *out_ptr = g_strdup((((rec_t*)rec)->name_field)); \
751 *out_len = (unsigned)strlen(*out_ptr); \
753 *out_ptr = g_strdup(""); *out_len = 0; } }
756 #define UAT_FLD_DISSECTOR(basename,field_name,title,desc) \
757 {#field_name, title, PT_TXTMOD_DISSECTOR,{uat_fld_chk_proto,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
763 #define UAT_RANGE_CB_DEF(basename,field_name,rec_t) \
764 static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* u2) {\
765 char* rng = g_strndup(buf,len);\
766 range_convert_str(NULL, &(((rec_t*)rec)->field_name), rng,GPOINTER_TO_UINT(u2)); \
769 static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
770 if ( ((rec_t*)rec)->field_name ) { \
771 *out_ptr = range_convert_range(NULL, ((rec_t*)rec)->field_name); \
772 *out_len = (unsigned)strlen(*out_ptr); \
774 *out_ptr = g_strdup(""); *out_len = 0; } }
777 #define UAT_FLD_RANGE(basename,field_name,title,max,desc) \
778 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_range,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},\
779 {0,0,0},GUINT_TO_POINTER(max),desc,FLDFILL}
WS_DLL_PUBLIC void uat_set_default_values(uat_t *uat_in, const char *default_values[])
Definition: uat.c:269
uat_t * uat_find(char *name)
Definition: uat.c:449
void *(* uat_copy_cb_t)(void *dest, const void *source, size_t len)
Definition: uat.h:87
void(* uat_free_cb_t)(void *record)
Definition: uat.h:97
void uat_cleanup(void)
Definition: uat.c:502
WS_DLL_PUBLIC uat_t * uat_new(const char *name, size_t size, const char *filename, bool from_profile, void *data_ptr, unsigned *num_items_ptr, unsigned flags, const char *help, uat_copy_cb_t copy_cb, uat_update_cb_t update_cb, uat_free_cb_t free_cb, uat_post_update_cb_t post_update_cb, uat_reset_cb_t reset_cb, uat_field_t *flds_array)
Definition: uat.c:43
WS_DLL_PUBLIC bool uat_load(uat_t *uat_in, const char *filename, char **err)
bool uat_load_str(uat_t *uat_in, char *entry, char **err)
bool(* uat_update_cb_t)(void *record, char **error)
Definition: uat.h:119
void(* uat_reset_cb_t)(void)
Definition: uat.h:105