E
Everton da Silva Marques
Hi,
I need to allocate, using malloc(), a single
memory block to hold two structures and a
variable length string. Is it safe (portable,
alignment-wise) to sum up the sizeof's of those
structures and add the length of the string,
as in this snippet?
const char *canonname = "domain.tld";
struct addrinfo *ai;
struct sockaddr_in *sa;
ai = (struct addrinfo *) malloc(sizeof(struct addrinfo) +
sizeof(struct sockaddr_in) +
strlen(canonname) + 1);
sa = (struct sockaddr_in *) (((char *) ai) + sizeof(struct addrinfo));
sa->sin_family = PF_INET;
sa->sin_port = htons(80);
sa->sin_addr.s_addr = INADDR_ANY;
ai->ai_addr = (struct sockaddr *) sa;
ai->ai_addrlen = sizeof(struct sockaddr_in);
ai->ai_canonname = ((char *) ai) +
sizeof(struct addrinfo) +
sizeof(struct sockaddr_in);
strcpy(ai->ai_canonname, canonname);
Thanks,
Everton
I need to allocate, using malloc(), a single
memory block to hold two structures and a
variable length string. Is it safe (portable,
alignment-wise) to sum up the sizeof's of those
structures and add the length of the string,
as in this snippet?
const char *canonname = "domain.tld";
struct addrinfo *ai;
struct sockaddr_in *sa;
ai = (struct addrinfo *) malloc(sizeof(struct addrinfo) +
sizeof(struct sockaddr_in) +
strlen(canonname) + 1);
sa = (struct sockaddr_in *) (((char *) ai) + sizeof(struct addrinfo));
sa->sin_family = PF_INET;
sa->sin_port = htons(80);
sa->sin_addr.s_addr = INADDR_ANY;
ai->ai_addr = (struct sockaddr *) sa;
ai->ai_addrlen = sizeof(struct sockaddr_in);
ai->ai_canonname = ((char *) ai) +
sizeof(struct addrinfo) +
sizeof(struct sockaddr_in);
strcpy(ai->ai_canonname, canonname);
Thanks,
Everton