size_t _dispatch_object_debug_attr(dispatch_object_t dou, char* buf, size_t bufsiz) { return dsnprintf(buf, bufsiz, "xrefcnt = 0x%x, refcnt = 0x%x, " "suspend_cnt = 0x%x, locked = %d, ", dou._do->do_xref_cnt + 1, dou._do->do_ref_cnt + 1, dou._do->do_suspend_cnt / DISPATCH_OBJECT_SUSPEND_INTERVAL, dou._do->do_suspend_cnt & 1); }
/* Put 'fname\0sname\0' into buf and return pointer to sname * Put '\0hexval\0' into buf and return pointer to hexval if * sym cannot be resolved */ unsigned char * dbug_resolve_symbol(void *sym, unsigned char *buf, unsigned char *blim) { Dl_info info; const char *name; if (dladdr(sym, &info) == 0) { *buf++ = '\0'; /* no filename */ dsnprintf(buf, blim - buf, "%p", sym); return buf; } name = info.dli_fname; name = path_name((unsigned char *)name, (unsigned char *)name + 255, '/'); buf += str_copy(name, name + 255, buf, blim, -1) + 1; name = info.dli_sname; str_copy(name, name + 255, buf, blim, -1); return buf; }
static int vr_resolve_inet(sds name, int port, struct sockinfo *si) { int status; struct addrinfo *ai, *cai; /* head and current addrinfo */ struct addrinfo hints; char *node, service[VR_UINTMAX_MAXLEN]; bool found; ASSERT(vr_valid_port(port)); memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_NUMERICSERV; hints.ai_family = AF_UNSPEC; /* AF_INET or AF_INET6 */ hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = 0; hints.ai_addrlen = 0; hints.ai_addr = NULL; hints.ai_canonname = NULL; if (name != NULL) { node = (char *)name; } else { /* * If AI_PASSIVE flag is specified in hints.ai_flags, and node is * NULL, then the returned socket addresses will be suitable for * bind(2)ing a socket that will accept(2) connections. The returned * socket address will contain the wildcard IP address. */ node = NULL; hints.ai_flags |= AI_PASSIVE; } dsnprintf(service, VR_UINTMAX_MAXLEN, "%d", port); /* * getaddrinfo() returns zero on success or one of the error codes listed * in gai_strerror(3) if an error occurs */ status = getaddrinfo(node, service, &hints, &ai); if (status != 0) { log_error("address resolution of node '%s' service '%s' failed: %s", node, service, gai_strerror(status)); return -1; } /* * getaddrinfo() can return a linked list of more than one addrinfo, * since we requested for both AF_INET and AF_INET6 addresses and the * host itself can be multi-homed. Since we don't care whether we are * using ipv4 or ipv6, we just use the first address from this collection * in the order in which it was returned. * * The sorting function used within getaddrinfo() is defined in RFC 3484; * the order can be tweaked for a particular system by editing * /etc/gai.conf */ for (cai = ai, found = false; cai != NULL; cai = cai->ai_next) { si->family = cai->ai_family; si->addrlen = cai->ai_addrlen; vr_memcpy(&si->addr, cai->ai_addr, si->addrlen); found = true; break; } freeaddrinfo(ai); return !found ? -1 : 0; }