Просмотр исходного кода

totemsrp.c: avoid a const-correctness problem

* exec/totemsrp.c (message_handler_memb_merge_detect): Don't modify
the now-const "msg" parameter.  Instead, use a local copy.
Patch by Steven Dake.

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2063 fd59a12c-fef9-0310-b244-a6a79926bd2f
Jim Meyering 17 лет назад
Родитель
Сommit
0200fc95e9
1 измененных файлов с 10 добавлено и 6 удалено
  1. 10 6
      exec/totemsrp.c

+ 10 - 6
exec/totemsrp.c

@@ -3738,16 +3738,20 @@ static int message_handler_memb_merge_detect (
 	size_t msg_len,
 	int endian_conversion_needed)
 {
-	struct memb_merge_detect *memb_merge_detect = (struct memb_merge_detect *)msg;
+	struct memb_merge_detect memb_merge_detect;
+
 
 	if (endian_conversion_needed) {
-		memb_merge_detect_endian_convert (msg, msg);
+		memb_merge_detect_endian_convert (msg, &memb_merge_detect);
+	} else {
+		memcpy (&memb_merge_detect, msg,
+			sizeof (struct memb_merge_detect));
 	}
 
 	/*
 	 * do nothing if this is a merge detect from this configuration
 	 */
-	if (memcmp (&instance->my_ring_id, &memb_merge_detect->ring_id,
+	if (memcmp (&instance->my_ring_id, &memb_merge_detect.ring_id,
 		sizeof (struct memb_ring_id)) == 0) {
 
 		return (0);
@@ -3758,19 +3762,19 @@ static int message_handler_memb_merge_detect (
 	 */
 	switch (instance->memb_state) {
 	case MEMB_STATE_OPERATIONAL:
-		memb_set_merge (&memb_merge_detect->system_from, 1,
+		memb_set_merge (&memb_merge_detect.system_from, 1,
 			instance->my_proc_list, &instance->my_proc_list_entries);
 		memb_state_gather_enter (instance, 9);
 		break;
 
 	case MEMB_STATE_GATHER:
 		if (!memb_set_subset (
-			&memb_merge_detect->system_from,
+			&memb_merge_detect.system_from,
 			1,
 			instance->my_proc_list,
 			instance->my_proc_list_entries)) {
 
-			memb_set_merge (&memb_merge_detect->system_from, 1,
+			memb_set_merge (&memb_merge_detect.system_from, 1,
 				instance->my_proc_list, &instance->my_proc_list_entries);
 			memb_state_gather_enter (instance, 10);
 			return (0);