ga_clone.lc 1.4 KB

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