| Index: net/base/address_list.cc
|
| ===================================================================
|
| --- net/base/address_list.cc (revision 85841)
|
| +++ net/base/address_list.cc (working copy)
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| @@ -22,56 +22,6 @@
|
| #endif
|
| }
|
|
|
| -// Make a copy of |info| (the dynamically-allocated parts are copied as well).
|
| -// If |recursive| is true, chained entries via ai_next are copied too.
|
| -// Copy returned by this function should be deleted using
|
| -// DeleteCopyOfAddrinfo(), and NOT freeaddrinfo().
|
| -struct addrinfo* CreateCopyOfAddrinfo(const struct addrinfo* info,
|
| - bool recursive) {
|
| - DCHECK(info);
|
| - struct addrinfo* copy = new addrinfo;
|
| -
|
| - // Copy all the fields (some of these are pointers, we will fix that next).
|
| - memcpy(copy, info, sizeof(addrinfo));
|
| -
|
| - // ai_canonname is a NULL-terminated string.
|
| - if (info->ai_canonname) {
|
| - copy->ai_canonname = do_strdup(info->ai_canonname);
|
| - }
|
| -
|
| - // ai_addr is a buffer of length ai_addrlen.
|
| - if (info->ai_addr) {
|
| - copy->ai_addr = reinterpret_cast<sockaddr *>(new char[info->ai_addrlen]);
|
| - memcpy(copy->ai_addr, info->ai_addr, info->ai_addrlen);
|
| - }
|
| -
|
| - // Recursive copy.
|
| - if (recursive && info->ai_next)
|
| - copy->ai_next = CreateCopyOfAddrinfo(info->ai_next, recursive);
|
| - else
|
| - copy->ai_next = NULL;
|
| -
|
| - return copy;
|
| -}
|
| -
|
| -// Free an addrinfo that was created by CreateCopyOfAddrinfo().
|
| -void FreeMyAddrinfo(struct addrinfo* info) {
|
| - DCHECK(info);
|
| - if (info->ai_canonname)
|
| - free(info->ai_canonname); // Allocated by strdup.
|
| -
|
| - if (info->ai_addr)
|
| - delete [] reinterpret_cast<char*>(info->ai_addr);
|
| -
|
| - struct addrinfo* next = info->ai_next;
|
| -
|
| - delete info;
|
| -
|
| - // Recursive free.
|
| - if (next)
|
| - FreeMyAddrinfo(next);
|
| -}
|
| -
|
| // Assign the port for all addresses in the list.
|
| void SetPortRecursive(struct addrinfo* info, int port) {
|
| uint16* port_field = GetPortFieldFromAddrinfo(info);
|
| @@ -283,12 +233,12 @@
|
| }
|
|
|
| AddressList::Data::~Data() {
|
| - // Call either freeaddrinfo(head), or FreeMyAddrinfo(head), depending who
|
| - // created the data.
|
| + // Call either freeaddrinfo(head), or FreeCopyOfAddrinfo(head), depending on
|
| + // who created the data.
|
| if (is_system_created)
|
| freeaddrinfo(head);
|
| else
|
| - FreeMyAddrinfo(head);
|
| + FreeCopyOfAddrinfo(head);
|
| }
|
|
|
| } // namespace net
|
|
|