12 #include <sys/types.h> 
   13 #include <arpa/inet.h> 
   14 #include <sys/socket.h> 
   15 #include <netinet/in.h> 
   16 #include <netinet/ip.h> 
   42     struct in6_addr addr6;
 
   43     char addrstr[INET_ADDRSTRLEN];
 
   50 #define Lsnprintf(...)                          \ 
   51     snprintf((buf != NULL) ? buf + nrc : NULL,(buflen != 0) ? buflen - nrc : 0, \ 
   75         nrc += 
Lsnprintf(
"{ .sun_family = AF_UNIX, .sun_path = \"@%s\" }",
 
   78         nrc += 
Lsnprintf(
"{ .sun_family = AF_UNIX, .sun_path = \"%s\" }",
 
   84     else if (family == AF_INET) {
 
   93     port = ntohs((uint16_t)
v_unum(v));
 
  100     addr.s_addr = (uint32_t)
v_unum(v);
 
  101     inet_ntop(AF_INET,&addr,addrstr,
sizeof(addrstr));
 
  103     nrc += 
Lsnprintf(
"{ .sin_family = AF_INET, .sin_port = %hu, .sin_addr = { .s_addr = \"%s\" } }",
 
  108     else if (family == AF_INET6) {
 
  114         verror(
"could not load sin6_port");
 
  118     port = ntohs((uint16_t)
v_unum(v));
 
  122         verror(
"could not load sin6_flowinfo");
 
  126     flowinfo = ntohl((uint32_t)
v_unum(v));
 
  130         verror(
"could not load sin6_addr");
 
  134     memcpy(&addr6.s6_addr,v->
buf,
 
  135            ((
unsigned)v->
bufsiz > 
sizeof(addr6.s6_addr)) ? 
sizeof(addr6.s6_addr) : (
unsigned)v->
bufsiz);
 
  136     inet_ntop(AF_INET6,&addr6,addrstr,
sizeof(addrstr));
 
  140         verror(
"could not load sin6_scope_id");
 
  144     scopeid = ntohl((uint32_t)
v_unum(v));
 
  146     nrc += 
Lsnprintf(
"{ .sin6_family = AF_INET6, .sin6_port = %hu, .sin6_flowinfo = %u, .sin6_addr = { .s6_addr = \"%s\" }, .sin6_scope_id = %u }",
 
  147              port,flowinfo,addrstr,scopeid);
 
  163     int iovlen_noload = 0;
 
  164     int iovbase_noload = 0;
 
  166     unsigned char *ibuf,*ibuf2;
 
  175 #define Lsnprintf(...)                          \ 
  176     snprintf((buf != NULL) ? buf + nrc : NULL,(buflen != 0) ? buflen - nrc : 0, \ 
  197     if (!iovbase_noload && iovbase != 0 && iovlen) {
 
  198     ibuf = 
malloc(iovlen + 1);
 
  207         for (j = 0; j < iovlen; ++j) {
 
  208         if (!isgraph(ibuf[j]) && !isspace(ibuf[j])) {
 
  216         ibuf2 = 
malloc(iovlen * 2 + 1);
 
  217         for (j = 0; j < iovlen; ++j) {
 
  219             sprintf((
char *)(ibuf2 + j * 2),
"%.2hhx",ibuf[j]);
 
  221         ibuf2[iovlen * 2] = 
'\0';
 
  223         nrc += 
Lsnprintf(
"{ .iov_base = 0h%s",ibuf2);
 
  227         nrc += 
Lsnprintf(
"{ .iov_base = \"%s\"",ibuf);
 
  231     else if (!iovbase_noload) {
 
  256     short iovlen_noload = 0,controllen_noload = 0;
 
  263     int32_t cmsglevel,cmsgtype;
 
  264     unsigned char *ibuf,*ibuf2;
 
  272 #define Lsnprintf(...)                          \ 
  273     snprintf((buf != NULL) ? buf + nrc : NULL,(buflen != 0) ? buflen - nrc : 0, \ 
  309     nrc += 
Lsnprintf(
", .msg_namelen = %u",namelen);
 
  324     controllen_noload = 1;
 
  345         for (i = 0; i < iovlen; ++
i) {
 
  350                            (buf != NULL) ? buf + nrc : NULL,
 
  351                            (buflen != 0) ? buflen - nrc : 0);
 
  352         if ((i + 1) >= iovlen)
 
  385     if (controllen > 0) {
 
  398         while ((i + typesize) <= controllen) {
 
  416         if ((cmsglen + i) > controllen) {
 
  431         cmsglevel = 
v_i32(v2);
 
  440         cmsgtype = 
v_i32(v2);
 
  447             ibuf = 
malloc(cmsglen - typesize + 1);
 
  449                       cmsglen - typesize,ibuf)) {
 
  450             nrc += 
Lsnprintf(
"{ .cmsg_len = %"PRIuNUM", .cmsg_level = %d, .cmsg_type = %d, .cmsg_data = ? }",
 
  451                      cmsglen,cmsglevel,cmsgtype);
 
  455             ibuf2 = 
malloc((cmsglen - typesize) * 2 + 1);
 
  456             for (j = 0; j < (cmsglen - typesize); ++j) {
 
  457                 sprintf((
char *)(ibuf2 + j * 2),
"%.2hhx",ibuf[j]);
 
  459             ibuf2[(cmsglen - typesize) * 2] = 
'\0';
 
  461             nrc += 
Lsnprintf(
"{ .cmsg_len = %"PRIuNUM", .cmsg_level = %d, .cmsg_type = %d, .cmsg_data = 0h%s }",
 
  462                      cmsglen,cmsglevel,cmsgtype,ibuf2);
 
  470             nrc += 
Lsnprintf(
"{ .cmsg_len = %"PRIuNUM", .cmsg_level = %d, .cmsg_type = %d, .cmsg_data = ? }",
 
  471                      cmsglen,cmsglevel,cmsgtype);
 
  491     if (controllen_noload)
 
  492     nrc += 
Lsnprintf(
", .msg_controllen = ?");
 
  588     .
name = 
"os_linux_generic_decoder_lib",
 
struct value * target_load_type(struct target *target, struct symbol *type, ADDR addr, load_flags_t flags)
int target_decoder_binding_add(struct target_decoder_binding *tdb, struct bsymbol *bsymbol, target_decoder_t dfn)
struct bsymbol * cmsghdr_type
static uint64_t unsigned int i
struct bsymbol * target_lookup_sym(struct target *target, const char *name, const char *delim, char *srcfile, symbol_type_flag_t ftype)
struct symbol * sockaddr_ptr_type
int os_linux_sockaddr_snprintf(struct target *target, void *_data, struct value *value, char *buf, int buflen)
#define verror(format,...)
unsigned char * target_read_addr(struct target *target, ADDR addr, unsigned long length, unsigned char *buf)
struct target_decoder_lib os_linux_generic_decoder_lib
REFCNT bsymbol_release(struct bsymbol *bsymbol)
struct bsymbol * sockaddr_in_type
void value_free(struct value *value)
struct value * target_load_value_member(struct target *target, struct target_location_ctxt *tlctxt, struct value *old_value, const char *member, const char *delim, load_flags_t flags)
struct bsymbol * sockaddr_un_type
REFCNT symbol_release(struct symbol *symbol)
ADDR v_addr(struct value *v)
struct value * value_reload_as_type(struct value *value, struct symbol *type, int force)
num_t v_num(struct value *v)
struct bsymbol * sockaddr_in6_type
void * calloc(size_t nmemb, size_t size)
struct bsymbol * msghdr_type
unsigned int symbol_type_full_bytesize(struct symbol *type)
struct symbol * symbol_type_skip_ptrs(struct symbol *type)
int os_linux_iovec_snprintf(struct target *target, void *_data, struct value *value, char *buf, int buflen)
struct symbol * bsymbol_get_symbol(struct bsymbol *bsymbol)
struct bsymbol * sockaddr_type
int32_t v_i32(struct value *v)
struct bsymbol * cmsgcred_type
struct symbol * target_create_synthetic_type_pointer(struct target *target, struct symbol *type)
void * malloc(size_t size)
void os_linux_generic_decoder_lib_register(void)
uint32_t v_u32(struct value *v)
int os_linux_generic_decoder_lib_unbind(struct target_decoder_binding *tdb, void *_data)
int target_decoder_lib_register(struct target_decoder_lib *lib)
unum_t v_unum(struct value *v)
ADDR value_addr(struct value *value)
int os_linux_msghdr_snprintf(struct target *target, void *_data, struct value *value, char *buf, int buflen)
void * os_linux_generic_decoder_lib_bind(struct target_decoder_binding *tdb)