Parcourir la source

icmap: Add map copy function

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
Reviewed-by: Christine Caulfield <ccaulfie@redhat.com>
Jan Friesse il y a 12 ans
Parent
commit
26ef8e15db
2 fichiers modifiés avec 39 ajouts et 0 suppressions
  1. 34 0
      exec/icmap.c
  2. 5 0
      include/corosync/icmap.h

+ 34 - 0
exec/icmap.c

@@ -1280,3 +1280,37 @@ int icmap_is_key_ro(const char *key_name)
 	return (CS_FALSE);
 
 }
+
+cs_error_t icmap_copy_map(icmap_map_t dst_map, const icmap_map_t src_map)
+{
+	icmap_iter_t iter;
+	size_t value_len;
+	icmap_value_types_t value_type;
+	const char *key_name;
+	cs_error_t err;
+	void *value;
+
+	iter = icmap_iter_init_r(src_map, NULL);
+	if (iter == NULL) {
+		return (CS_ERR_NO_MEMORY);
+	}
+
+	err = CS_OK;
+
+	while ((key_name = icmap_iter_next(iter, &value_len, &value_type)) != NULL) {
+		err = icmap_get_ref_r(src_map, key_name, &value, &value_len, &value_type);
+		if (err != CS_OK) {
+			goto exit_iter_finalize;
+		}
+
+		err = icmap_set_r(dst_map, key_name, value, value_len, value_type);
+		if (err != CS_OK) {
+			goto exit_iter_finalize;
+		}
+	}
+
+exit_iter_finalize:
+	icmap_iter_finalize(iter);
+
+	return (err);
+}

+ 5 - 0
include/corosync/icmap.h

@@ -368,6 +368,11 @@ extern int icmap_is_key_ro(const char *key_name);
  */
 extern void icmap_convert_name_to_valid_name(char *key_name);
 
+/*
+ * Copy content of src_map icmap to dst_map icmap.
+ */
+extern cs_error_t icmap_copy_map(icmap_map_t dst_map, const icmap_map_t src_map);
+
 #ifdef __cplusplus
 }
 #endif