# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: petr.koupy@gmail.com-20110328003358-figohl0siqh1j288
# target_branch: bzr://bzr.helenos.org/mainline
# testament_sha1: 75d9dab3c202f95b9a28b5a3c742cd8ba14a6e8f
# timestamp: 2011-03-28 02:36:28 +0200
# base_revision_id: jakub@jermar.eu-20110326152906-4nqf7cc7vwgs62cc
# 
# Begin patch
=== modified file 'uspace/lib/c/generic/net/packet.c'
--- uspace/lib/c/generic/net/packet.c	2010-12-27 20:04:22 +0000
+++ uspace/lib/c/generic/net/packet.c	2011-03-28 00:33:58 +0000
@@ -189,7 +189,7 @@
 				munmap(packet, packet->length);
 		}
 	}
-	gpm_destroy(&pm_globals.packet_map);
+	gpm_destroy(&pm_globals.packet_map, free);
 	/* leave locked */
 }
 

=== modified file 'uspace/lib/c/generic/net/socket_client.c'
--- uspace/lib/c/generic/net/socket_client.c	2011-01-29 11:35:03 +0000
+++ uspace/lib/c/generic/net/socket_client.c	2011-03-28 00:33:58 +0000
@@ -748,7 +748,7 @@
 
 	dyn_fifo_destroy(&socket->received);
 	dyn_fifo_destroy(&socket->accepted);
-	sockets_exclude(socket_get_sockets(), socket->socket_id);
+	sockets_exclude(socket_get_sockets(), socket->socket_id, free);
 }
 
 /** Closes the socket.

=== modified file 'uspace/lib/c/include/adt/generic_char_map.h'
--- uspace/lib/c/include/adt/generic_char_map.h	2011-01-07 18:57:55 +0000
+++ uspace/lib/c/include/adt/generic_char_map.h	2011-03-28 00:33:58 +0000
@@ -46,6 +46,10 @@
 /** Internal magic value for a&nbsp;map consistency check. */
 #define GENERIC_CHAR_MAP_MAGIC_VALUE	0x12345622
 
+/** Generic destructor function pointer. */
+#define DTOR_T(identifier) \
+	void (*identifier)(const void *)
+
 /** Character string to generic type map declaration.
  *  @param[in] name	Name of the map.
  *  @param[in] type	Inner object type.
@@ -63,8 +67,8 @@
 	\
 	int name##_add(name##_t *, const uint8_t *, const size_t, type *); \
 	int name##_count(name##_t *); \
-	void name##_destroy(name##_t *); \
-	void name##_exclude(name##_t *, const uint8_t *, const size_t); \
+	void name##_destroy(name##_t *, DTOR_T()); \
+	void name##_exclude(name##_t *, const uint8_t *, const size_t, DTOR_T()); \
 	type *name##_find(name##_t *, const uint8_t *, const size_t); \
 	int name##_initialize(name##_t *); \
 	int name##_is_valid(name##_t *);
@@ -83,19 +87,13 @@
 	int name##_add(name##_t *map, const uint8_t *name, const size_t length, \
 	     type *value) \
 	{ \
-		int rc; \
 		int index; \
 		if (!name##_is_valid(map)) \
 			return EINVAL; \
 		index = name##_items_add(&map->values, value); \
 		if (index < 0) \
 			return index; \
-		rc = char_map_add(&map->names, name, length, index); \
-		if (rc != EOK) { \
-			name##_items_exclude_index(&map->values, index); \
-			return rc; \
-		} \
-		return EOK; \
+		return char_map_add(&map->names, name, length, index); \
 	} \
 	\
 	int name##_count(name##_t *map) \
@@ -104,23 +102,23 @@
 		    name##_items_count(&map->values) : -1; \
 	} \
 	\
-	void name##_destroy(name##_t *map) \
+	void name##_destroy(name##_t *map, DTOR_T(dtor)) \
 	{ \
 		if (name##_is_valid(map)) { \
 			char_map_destroy(&map->names); \
-			name##_items_destroy(&map->values); \
+			name##_items_destroy(&map->values, dtor); \
 		} \
 	} \
 	\
 	void name##_exclude(name##_t *map, const uint8_t *name, \
-	    const size_t length) \
+	    const size_t length, DTOR_T(dtor)) \
 	{ \
 		if (name##_is_valid(map)) { \
 			int index; \
 			index = char_map_exclude(&map->names, name, length); \
 			if (index != CHAR_MAP_NULL) \
 				name##_items_exclude_index(&map->values, \
-				     index); \
+				     index, dtor); \
 		} \
 	} \
 	\

=== modified file 'uspace/lib/c/include/adt/generic_field.h'
--- uspace/lib/c/include/adt/generic_field.h	2010-12-04 14:15:20 +0000
+++ uspace/lib/c/include/adt/generic_field.h	2011-03-28 00:33:58 +0000
@@ -45,6 +45,10 @@
 /** Internal magic value for a&nbsp;field consistency check. */
 #define GENERIC_FIELD_MAGIC_VALUE		0x55667788
 
+/** Generic destructor function pointer. */
+#define DTOR_T(identifier) \
+	void (*identifier)(const void *)
+
 /** Generic type field declaration.
  *
  * @param[in] name	Name of the field.
@@ -62,8 +66,8 @@
 	\
 	int name##_add(name##_t *, type *); \
 	int name##_count(name##_t *); \
-	void name##_destroy(name##_t *); \
-	void name##_exclude_index(name##_t *, int); \
+	void name##_destroy(name##_t *, DTOR_T()); \
+	void name##_exclude_index(name##_t *, int, DTOR_T()); \
 	type **name##_get_field(name##_t *); \
 	type *name##_get_index(name##_t *, int); \
 	int name##_initialize(name##_t *); \
@@ -102,24 +106,27 @@
 		return name##_is_valid(field) ? field->next : -1; \
 	} \
 	\
-	void name##_destroy(name##_t *field) \
+	void name##_destroy(name##_t *field, DTOR_T(dtor)) \
 	{ \
 		if (name##_is_valid(field)) { \
 			int index; \
 			field->magic = 0; \
-			for (index = 0; index < field->next; index++) { \
-				if (field->items[index]) \
-					free(field->items[index]); \
+			if (dtor) { \
+				for (index = 0; index < field->next; index++) { \
+					if (field->items[index]) \
+						dtor(field->items[index]); \
+				} \
 			} \
 			free(field->items); \
 		} \
 	} \
 	 \
-	void name##_exclude_index(name##_t *field, int index) \
+	void name##_exclude_index(name##_t *field, int index, DTOR_T(dtor)) \
 	{ \
 		if (name##_is_valid(field) && (index >= 0) && \
 		    (index < field->next) && (field->items[index])) { \
-			free(field->items[index]); \
+			if (dtor) \
+				dtor(field->items[index]); \
 			field->items[index] = NULL; \
 		} \
 	} \

=== modified file 'uspace/lib/c/include/adt/int_map.h'
--- uspace/lib/c/include/adt/int_map.h	2010-11-19 21:26:08 +0000
+++ uspace/lib/c/include/adt/int_map.h	2011-03-28 00:33:58 +0000
@@ -48,6 +48,10 @@
 /** Internal magic value for an item consistency check. */
 #define INT_MAP_ITEM_MAGIC_VALUE	0x55667788
 
+/** Generic destructor function pointer. */
+#define DTOR_T(identifier) \
+	void (*identifier)(const void *)
+
 /** Integer to generic type map declaration.
  *
  * @param[in] name	Name of the map.
@@ -71,17 +75,17 @@
 	}; \
 	\
 	int name##_add(name##_t *, int, type *); \
-	void name##_clear(name##_t *); \
+	void name##_clear(name##_t *, DTOR_T()); \
 	int name##_count(name##_t *); \
-	void name##_destroy(name##_t *); \
-	void name##_exclude(name##_t *, int); \
-	void name##_exclude_index(name##_t *, int); \
+	void name##_destroy(name##_t *, DTOR_T()); \
+	void name##_exclude(name##_t *, int, DTOR_T()); \
+	void name##_exclude_index(name##_t *, int, DTOR_T()); \
 	type *name##_find(name##_t *, int); \
 	int name##_update(name##_t *, int, int); \
 	type *name##_get_index(name##_t *, int); \
 	int name##_initialize(name##_t *); \
 	int name##_is_valid(name##_t *); \
-	void name##_item_destroy(name##_item_t *); \
+	void name##_item_destroy(name##_item_t *, DTOR_T()); \
 	int name##_item_is_valid(name##_item_t *);
 
 /** Integer to generic type map implementation.
@@ -114,14 +118,14 @@
 		return EINVAL; \
 	} \
 	\
-	void name##_clear(name##_t *map) \
+	void name##_clear(name##_t *map, DTOR_T(dtor)) \
 	{ \
 		if (name##_is_valid(map)) { \
 			int index; \
 			for (index = 0; index < map->next; ++index) { \
 				if (name##_item_is_valid(&map->items[index])) { \
 					name##_item_destroy( \
-					    &map->items[index]); \
+					    &map->items[index], dtor); \
 				} \
 			} \
 			map->next = 0; \
@@ -134,7 +138,7 @@
 		return name##_is_valid(map) ? map->next : -1; \
 	} \
 	\
-	void name##_destroy(name##_t *map) \
+	void name##_destroy(name##_t *map, DTOR_T(dtor)) \
 	{ \
 		if (name##_is_valid(map)) { \
 			int index; \
@@ -142,14 +146,14 @@
 			for (index = 0; index < map->next; ++index) { \
 				if (name##_item_is_valid(&map->items[index])) { \
 					name##_item_destroy( \
-					    &map->items[index]); \
+					    &map->items[index], dtor); \
 				} \
 			} \
 			free(map->items); \
 		} \
 	} \
 	\
-	void name##_exclude(name##_t *map, int key) \
+	void name##_exclude(name##_t *map, int key, DTOR_T(dtor)) \
 	{ \
 		if (name##_is_valid(map)) { \
 			int index; \
@@ -157,18 +161,18 @@
 				if (name##_item_is_valid(&map->items[index]) && \
 				    (map->items[index].key == key)) { \
 					name##_item_destroy( \
-					    &map->items[index]); \
+					    &map->items[index], dtor); \
 				} \
 			} \
 		} \
 	} \
 	\
-	void name##_exclude_index(name##_t *map, int index) \
+	void name##_exclude_index(name##_t *map, int index, DTOR_T(dtor)) \
 	{ \
 		if (name##_is_valid(map) && (index >= 0) && \
 		    (index < map->next) && \
 		    name##_item_is_valid(&map->items[index])) { \
-			name##_item_destroy(&map->items[index]); \
+			name##_item_destroy(&map->items[index], dtor); \
 		} \
 	} \
 	\
@@ -235,12 +239,13 @@
 		return map && (map->magic == INT_MAP_MAGIC_VALUE); \
 	} \
 	\
-	void name##_item_destroy(name##_item_t *item) \
+	void name##_item_destroy(name##_item_t *item, DTOR_T(dtor)) \
 	{ \
 		if (name##_item_is_valid(item)) { \
 			item->magic = 0; \
 			if (item->value) { \
-				free(item->value); \
+				if (dtor) \
+					free(item->value); \
 				item->value = NULL; \
 			} \
 		} \

=== modified file 'uspace/lib/net/tl/socket_core.c'
--- uspace/lib/net/tl/socket_core.c	2011-01-07 18:57:55 +0000
+++ uspace/lib/net/tl/socket_core.c	2011-03-28 00:33:58 +0000
@@ -106,7 +106,7 @@
 	if (socket_release)
 		socket_release(socket);
 
-	socket_cores_exclude(local_sockets, socket->socket_id);
+	socket_cores_exclude(local_sockets, socket->socket_id, free);
 }
 
 /** Destroys local sockets.
@@ -229,7 +229,7 @@
 	return EOK;
 
 fail:
-	socket_port_map_destroy(&socket_port->map);
+	socket_port_map_destroy(&socket_port->map, free);
 	free(socket_port);
 	return rc;
 	
@@ -648,14 +648,14 @@
 			// release if empty
 			if (socket_port->count <= 0) {
 				// destroy the map
-				socket_port_map_destroy(&socket_port->map);
+				socket_port_map_destroy(&socket_port->map, free);
 				// release the port
 				socket_ports_exclude(global_sockets,
-				    socket->port);
+				    socket->port, free);
 			} else {
 				// remove
 				socket_port_map_exclude(&socket_port->map,
-				    socket->key, socket->key_length);
+				    socket->key, socket->key_length, free);
 			}
 		}
 	}

=== modified file 'uspace/lib/net/tl/tl_common.c'
--- uspace/lib/net/tl/tl_common.c	2011-01-17 15:41:30 +0000
+++ uspace/lib/net/tl/tl_common.c	2011-03-28 00:33:58 +0000
@@ -181,7 +181,7 @@
 				packet_dimension->content = content;
 			else
 				packet_dimensions_exclude(packet_dimensions,
-				    DEVICE_INVALID_ID);
+				    DEVICE_INVALID_ID, free);
 		}
 	}
 

=== modified file 'uspace/srv/net/il/arp/arp.c'
--- uspace/srv/net/il/arp/arp.c	2011-01-29 11:36:08 +0000
+++ uspace/srv/net/il/arp/arp.c	2011-03-28 00:33:58 +0000
@@ -156,11 +156,11 @@
 				free(proto->addr_data);
 			
 			arp_clear_addr(&proto->addresses);
-			arp_addr_destroy(&proto->addresses);
+			arp_addr_destroy(&proto->addresses, free);
 		}
 	}
 	
-	arp_protos_clear(&device->protos);
+	arp_protos_clear(&device->protos, free);
 }
 
 static int arp_clean_cache_req(int arp_phone)
@@ -183,7 +183,7 @@
 		}
 	}
 	
-	arp_cache_clear(&arp_globals.cache);
+	arp_cache_clear(&arp_globals.cache, free);
 	fibril_mutex_unlock(&arp_globals.lock);
 	
 	return EOK;
@@ -211,7 +211,7 @@
 	if (trans)
 		arp_clear_trans(trans);
 	
-	arp_addr_exclude(&proto->addresses, address->value, address->length);
+	arp_addr_exclude(&proto->addresses, address->value, address->length, free);
 	
 	fibril_mutex_unlock(&arp_globals.lock);
 	return EOK;
@@ -344,7 +344,7 @@
 			rc = arp_addr_add(&proto->addresses, src_proto,
 			    header->protocol_length, trans);
 			if (rc != EOK) {
-				/* The generic char map has already freed trans! */
+				free(trans);
 				return rc;
 			}
 		}
@@ -555,7 +555,7 @@
 		index = arp_protos_add(&device->protos, proto->service, proto);
 		if (index < 0) {
 			fibril_mutex_unlock(&arp_globals.lock);
-			arp_protos_destroy(&device->protos);
+			arp_protos_destroy(&device->protos, free);
 			free(device);
 			return index;
 		}
@@ -568,7 +568,7 @@
 		    arp_receiver);
 		if (device->phone < 0) {
 			fibril_mutex_unlock(&arp_globals.lock);
-			arp_protos_destroy(&device->protos);
+			arp_protos_destroy(&device->protos, free);
 			free(device);
 			return EREFUSED;
 		}
@@ -578,7 +578,7 @@
 		    &device->packet_dimension);
 		if (rc != EOK) {
 			fibril_mutex_unlock(&arp_globals.lock);
-			arp_protos_destroy(&device->protos);
+			arp_protos_destroy(&device->protos, free);
 			free(device);
 			return rc;
 		}
@@ -588,7 +588,7 @@
 		    &device->addr_data);
 		if (rc != EOK) {
 			fibril_mutex_unlock(&arp_globals.lock);
-			arp_protos_destroy(&device->protos);
+			arp_protos_destroy(&device->protos, free);
 			free(device);
 			return rc;
 		}
@@ -600,7 +600,7 @@
 			fibril_mutex_unlock(&arp_globals.lock);
 			free(device->addr);
 			free(device->addr_data);
-			arp_protos_destroy(&device->protos);
+			arp_protos_destroy(&device->protos, free);
 			free(device);
 			return rc;
 		}
@@ -613,7 +613,7 @@
 			free(device->addr_data);
 			free(device->broadcast_addr);
 			free(device->broadcast_data);
-			arp_protos_destroy(&device->protos);
+			arp_protos_destroy(&device->protos, free);
 			free(device);
 			return rc;
 		}
@@ -745,7 +745,7 @@
 			 */
 			arp_clear_trans(trans);
 			arp_addr_exclude(&proto->addresses, target->value,
-			    target->length);
+			    target->length, free);
 			return EAGAIN;
 		}
 		
@@ -793,7 +793,7 @@
 	rc = arp_addr_add(&proto->addresses, target->value, target->length,
 	    trans);
 	if (rc != EOK) {
-		/* The generic char map has already freed trans! */
+		free(trans);
 		return rc;
 	}
 	
@@ -806,7 +806,7 @@
 		 */
 		arp_clear_trans(trans);
 		arp_addr_exclude(&proto->addresses, target->value,
-		    target->length);
+		    target->length, free);
 		return ENOENT;
 	}
 	

=== modified file 'uspace/srv/net/il/ip/ip.c'
--- uspace/srv/net/il/ip/ip.c	2011-01-29 11:36:08 +0000
+++ uspace/srv/net/il/ip/ip.c	2011-03-28 00:33:58 +0000
@@ -504,7 +504,7 @@
 	rc = ip_netif_initialize(ip_netif);
 	if (rc != EOK) {
 		fibril_rwlock_write_unlock(&ip_globals.netifs_lock);
-		ip_routes_destroy(&ip_netif->routes);
+		ip_routes_destroy(&ip_netif->routes, free);
 		free(ip_netif);
 		return rc;
 	}

=== modified file 'uspace/srv/net/net/net.c'
--- uspace/srv/net/net/net.c	2011-03-24 18:36:57 +0000
+++ uspace/srv/net/net/net.c	2011-03-28 00:33:58 +0000
@@ -554,7 +554,7 @@
 		/* Read configuration files */
 		rc = read_netif_configuration(conf_files[i], netif);
 		if (rc != EOK) {
-			measured_strings_destroy(&netif->configuration);
+			measured_strings_destroy(&netif->configuration, free);
 			free(netif);
 			return rc;
 		}
@@ -564,7 +564,7 @@
 		    measured_strings_find(&netif->configuration, (uint8_t *) CONF_NAME, 0);
 		if (!setting) {
 			fprintf(stderr, "%s: Network interface name is missing\n", NAME);
-			measured_strings_destroy(&netif->configuration);
+			measured_strings_destroy(&netif->configuration, free);
 			free(netif);
 			return EINVAL;
 		}
@@ -573,7 +573,7 @@
 		/* Add to the netifs map */
 		int index = netifs_add(&net_globals.netifs, netif->id, netif);
 		if (index < 0) {
-			measured_strings_destroy(&netif->configuration);
+			measured_strings_destroy(&netif->configuration, free);
 			free(netif);
 			return index;
 		}
@@ -585,8 +585,8 @@
 		rc = char_map_add(&net_globals.netif_names, netif->name, 0,
 		    index);
 		if (rc != EOK) {
-			measured_strings_destroy(&netif->configuration);
-			netifs_exclude_index(&net_globals.netifs, index);
+			measured_strings_destroy(&netif->configuration, free);
+			netifs_exclude_index(&net_globals.netifs, index, free);
 			return rc;
 		}
 		
@@ -594,8 +594,8 @@
 		if (rc != EOK) {
 			printf("%s: Ignoring failed interface %s (%s)\n", NAME,
 			    netif->name, str_error(rc));
-			measured_strings_destroy(&netif->configuration);
-			netifs_exclude_index(&net_globals.netifs, index);
+			measured_strings_destroy(&netif->configuration, free);
+			netifs_exclude_index(&net_globals.netifs, index, free);
 			continue;
 		}
 		

=== modified file 'uspace/srv/net/nil/eth/eth.c'
--- uspace/srv/net/nil/eth/eth.c	2011-01-29 11:36:08 +0000
+++ uspace/srv/net/nil/eth/eth.c	2011-03-28 00:33:58 +0000
@@ -213,7 +213,7 @@
 	rc = eth_protos_initialize(&eth_globals.protos);
 	if (rc != EOK) {
 		free(eth_globals.broadcast_addr);
-		eth_devices_destroy(&eth_globals.devices);
+		eth_devices_destroy(&eth_globals.devices, free);
 	}
 out:
 	fibril_rwlock_write_unlock(&eth_globals.protos_lock);

=== modified file 'uspace/srv/net/tl/tcp/tcp.c'
--- uspace/srv/net/tl/tcp/tcp.c	2011-01-29 11:36:08 +0000
+++ uspace/srv/net/tl/tcp/tcp.c	2011-03-28 00:33:58 +0000
@@ -1706,7 +1706,7 @@
 		/* Unbind if bound */
 		if (socket->port > 0) {
 			socket_ports_exclude(&tcp_globals.sockets,
-			    socket->port);
+			    socket->port, free);
 			socket->port = 0;
 		}
 	}
@@ -2491,7 +2491,7 @@
 
 	rc = packet_dimensions_initialize(&tcp_globals.dimensions);
 	if (rc != EOK) {
-		socket_ports_destroy(&tcp_globals.sockets);
+		socket_ports_destroy(&tcp_globals.sockets, free);
 		goto out;
 	}
 

=== modified file 'uspace/srv/net/tl/udp/udp.c'
--- uspace/srv/net/tl/udp/udp.c	2011-03-21 14:23:19 +0000
+++ uspace/srv/net/tl/udp/udp.c	2011-03-28 00:33:58 +0000
@@ -416,7 +416,7 @@
 	
 	rc = packet_dimensions_initialize(&udp_globals.dimensions);
 	if (rc != EOK) {
-		socket_ports_destroy(&udp_globals.sockets);
+		socket_ports_destroy(&udp_globals.sockets, free);
 		fibril_rwlock_write_unlock(&udp_globals.lock);
 		return rc;
 	}
@@ -433,7 +433,7 @@
 	rc = net_get_conf_req(udp_globals.net_phone, &configuration, count,
 	    &data);
 	if (rc != EOK) {
-		socket_ports_destroy(&udp_globals.sockets);
+		socket_ports_destroy(&udp_globals.sockets, free);
 		fibril_rwlock_write_unlock(&udp_globals.lock);
 		return rc;
 	}

# Begin bundle
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
zgeP/xdyRThQkPL/qOg=
