ga_clone.c 691 B

1234567891011121314151617181920212223242526272829303132
  1. #include "gai_hdr.h"
  2. /*
  3. * Clone a new addrinfo structure from an existing one.
  4. */
  5. /* include ga_clone */
  6. struct addrinfo *
  7. ga_clone(struct addrinfo *ai)
  8. {
  9. struct addrinfo *new;
  10. if ( (new = calloc(1, sizeof(struct addrinfo))) == NULL)
  11. return(NULL);
  12. new->ai_next = ai->ai_next;
  13. ai->ai_next = new;
  14. new->ai_flags = 0; /* make sure AI_CLONE is off */
  15. new->ai_family = ai->ai_family;
  16. new->ai_socktype = ai->ai_socktype;
  17. new->ai_protocol = ai->ai_protocol;
  18. new->ai_canonname = NULL;
  19. new->ai_addrlen = ai->ai_addrlen;
  20. if ( (new->ai_addr = malloc(ai->ai_addrlen)) == NULL)
  21. return(NULL);
  22. memcpy(new->ai_addr, ai->ai_addr, ai->ai_addrlen);
  23. return(new);
  24. }
  25. /* end ga_clone */