Преглед изворни кода

Fixes to patterns and filters for B API spec support.

(Logical change 1.204)


git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@661 fd59a12c-fef9-0310-b244-a6a79926bd2f
Mark Haverkamp пре 20 година
родитељ
комит
b3767775c4
7 измењених фајлова са 133 додато и 95 уклоњено
  1. 7 2
      exec/evt.c
  2. 5 3
      include/saEvt.h
  3. 40 13
      lib/evt.c
  4. 19 18
      test/evtbench.c
  5. 18 17
      test/publish.c
  6. 9 8
      test/subscription.c
  7. 35 34
      test/testevt.c

+ 7 - 2
exec/evt.c

@@ -381,8 +381,10 @@ struct evt_pattern {
 	char 	str[sizeof(lost_evt)];
 	char 	str[sizeof(lost_evt)];
 };
 };
 static struct evt_pattern dropped_pattern = {
 static struct evt_pattern dropped_pattern = {
-		.pat	= 	{&dropped_pattern.str[0], 
-					sizeof(lost_evt)},
+		.pat	= 	{
+					sizeof(lost_evt),
+					sizeof(lost_evt),
+					&dropped_pattern.str[0]}, 
 		.str = {SA_EVT_LOST_EVENT}
 		.str = {SA_EVT_LOST_EVENT}
 };
 };
 
 
@@ -582,6 +584,8 @@ static SaErrorT evtfilt_to_aisfilt(struct req_evt_event_subscribe *req,
 		}
 		}
 		filters->filters[i].filter.patternSize = 
 		filters->filters[i].filter.patternSize = 
 			filt[i].filter.patternSize;
 			filt[i].filter.patternSize;
+		filters->filters[i].filter.allocatedSize = 
+			filt[i].filter.patternSize;
 		memcpy(filters->filters[i].filter.pattern,
 		memcpy(filters->filters[i].filter.pattern,
 				str, filters->filters[i].filter.patternSize);
 				str, filters->filters[i].filter.patternSize);
 		filters->filters[i].filterType = filt[i].filterType;
 		filters->filters[i].filterType = filt[i].filterType;
@@ -1816,6 +1820,7 @@ convert_event(struct lib_event_data *evt)
 	eps = (SaEvtEventPatternT *)evt->led_body;  
 	eps = (SaEvtEventPatternT *)evt->led_body;  
 	for (i = 0; i < evt->led_patterns_number; i++) {
 	for (i = 0; i < evt->led_patterns_number; i++) {
 		eps->patternSize = swab32(eps->patternSize);
 		eps->patternSize = swab32(eps->patternSize);
+		eps->allocatedSize = swab32(eps->allocatedSize);
 		eps++;
 		eps++;
 	}
 	}
 	
 	

+ 5 - 3
include/saEvt.h

@@ -67,8 +67,9 @@ typedef struct{
 typedef SaUint8T SaEvtChannelOpenFlagsT;
 typedef SaUint8T SaEvtChannelOpenFlagsT;
 
 
 typedef struct {
 typedef struct {
-    SaUint8T *pattern;
+	SaSizeT	allocatedSize;
     SaSizeT patternSize;
     SaSizeT patternSize;
+    SaUint8T *pattern;
 } SaEvtEventPatternT;
 } SaEvtEventPatternT;
 
 
 
 
@@ -101,8 +102,9 @@ typedef struct {
 #define SA_EVT_DATA_MAX_LEN (64 * 1024)
 #define SA_EVT_DATA_MAX_LEN (64 * 1024)
 
 
 typedef struct {
 typedef struct {
-    SaEvtEventPatternT *patterns;
+	SaSizeT allocatedNumber;
     SaSizeT patternsNumber;
     SaSizeT patternsNumber;
+    SaEvtEventPatternT *patterns;
 } SaEvtEventPatternArrayT;
 } SaEvtEventPatternArrayT;
 
 
 typedef SaUint8T SaEvtEventPriorityT;
 typedef SaUint8T SaEvtEventPriorityT;
@@ -121,8 +123,8 @@ typedef struct {
 } SaEvtEventFilterT;
 } SaEvtEventFilterT;
 
 
 typedef struct {
 typedef struct {
-    SaEvtEventFilterT *filters;
     SaSizeT filtersNumber;
     SaSizeT filtersNumber;
+    SaEvtEventFilterT *filters;
 } SaEvtEventFilterArrayT;
 } SaEvtEventFilterArrayT;
 
 
 
 

+ 40 - 13
lib/evt.c

@@ -420,6 +420,7 @@ static SaAisErrorT make_event(SaEvtEventHandleT *event_handle,
 	 * Move the pattern bits into the SaEvtEventPatternArrayT
 	 * Move the pattern bits into the SaEvtEventPatternArrayT
 	 */
 	 */
 	edi->edi_patterns.patternsNumber = evt->led_patterns_number;
 	edi->edi_patterns.patternsNumber = evt->led_patterns_number;
+	edi->edi_patterns.allocatedNumber = evt->led_patterns_number;
 	edi->edi_patterns.patterns = malloc(sizeof(SaEvtEventPatternT) * 
 	edi->edi_patterns.patterns = malloc(sizeof(SaEvtEventPatternT) * 
 					edi->edi_patterns.patternsNumber);
 					edi->edi_patterns.patternsNumber);
 	pat = (SaEvtEventPatternT *)evt->led_body;
 	pat = (SaEvtEventPatternT *)evt->led_body;
@@ -427,6 +428,7 @@ static SaAisErrorT make_event(SaEvtEventHandleT *event_handle,
 						edi->edi_patterns.patternsNumber;
 						edi->edi_patterns.patternsNumber;
 	for (i = 0; i < evt->led_patterns_number; i++) {
 	for (i = 0; i < evt->led_patterns_number; i++) {
 		edi->edi_patterns.patterns[i].patternSize = pat->patternSize;
 		edi->edi_patterns.patterns[i].patternSize = pat->patternSize;
+		edi->edi_patterns.patterns[i].allocatedSize = pat->patternSize;
 		edi->edi_patterns.patterns[i].pattern = malloc(pat->patternSize);
 		edi->edi_patterns.patterns[i].pattern = malloc(pat->patternSize);
 		if (!edi->edi_patterns.patterns[i].pattern) {
 		if (!edi->edi_patterns.patterns[i].pattern) {
 			printf("make_event: couldn't alloc %lld bytes\n", pat->patternSize);
 			printf("make_event: couldn't alloc %lld bytes\n", pat->patternSize);
@@ -1262,6 +1264,7 @@ saEvtEventAttributesSet(
 		goto attr_set_done_reset;
 		goto attr_set_done_reset;
 	}
 	}
 	edi->edi_patterns.patternsNumber = patternArray->patternsNumber;
 	edi->edi_patterns.patternsNumber = patternArray->patternsNumber;
+	edi->edi_patterns.allocatedNumber = patternArray->patternsNumber;
 
 
 	/*
 	/*
 	 * copy the patterns from the caller. allocating memory for
 	 * copy the patterns from the caller. allocating memory for
@@ -1284,6 +1287,8 @@ saEvtEventAttributesSet(
 				patternArray->patterns[i].patternSize);
 				patternArray->patterns[i].patternSize);
 		edi->edi_patterns.patterns[i].patternSize = 
 		edi->edi_patterns.patterns[i].patternSize = 
 			patternArray->patterns[i].patternSize;
 			patternArray->patterns[i].patternSize;
+		edi->edi_patterns.patterns[i].allocatedSize = 
+			patternArray->patterns[i].patternSize;
 	}
 	}
 
 
 	/*
 	/*
@@ -1372,31 +1377,53 @@ saEvtEventAttributesGet(
 		goto attr_get_unlock;
 		goto attr_get_unlock;
 	}
 	}
 
 
-	npats = min(patternArray->patternsNumber, 
-				edi->edi_patterns.patternsNumber);
 	/*
 	/*
-	 * We set the returned number of patterns to the actual
-	 * pattern count of the event.  This way the caller can tell
-	 * if it got all the possible patterns. If the returned number
-	 * is more that the number supplied, then some available patterns
-	 * were not returned. We indicate that by returning SA_AIS_ERR_NO_SPACE.
+	 * The spec says that if the called passes in a NULL patterns array,
+	 * then we allocate the required data and the caller is responsible
+	 * for dealocating later. Otherwise, we copy to pre-allocated space.
+	 * If there are more patterns than allcated space, we set the return
+	 * code to SA_AIS_ERR_NO_SPACE and copy as much as will fit. We will
+	 * return the total number of patterns available in the patternsNumber
+	 * regardless of how much was allocated.
 	 *
 	 *
-	 * The same thing happens when copying the pattern strings.
 	 */
 	 */
-	if (patternArray->patternsNumber < edi->edi_patterns.patternsNumber) {
-		error = SA_AIS_ERR_NO_SPACE;
+	if (patternArray->patterns == NULL) {
+		npats = edi->edi_patterns.patternsNumber;
+		patternArray->allocatedNumber = edi->edi_patterns.patternsNumber;
+		patternArray->patternsNumber = edi->edi_patterns.patternsNumber;
+		patternArray->patterns = malloc(sizeof(*patternArray->patterns) * 
+				edi->edi_patterns.patternsNumber);
+		for (i = 0; i < edi->edi_patterns.patternsNumber; i++) {
+			patternArray->patterns[i].allocatedSize = 
+				edi->edi_patterns.patterns[i].allocatedSize;
+			patternArray->patterns[i].patternSize = 
+				edi->edi_patterns.patterns[i].patternSize;
+			patternArray->patterns[i].pattern = 
+				malloc(edi->edi_patterns.patterns[i].patternSize);
+		}
+	} else {
+		if (patternArray->allocatedNumber < edi->edi_patterns.allocatedNumber) {
+			error = SA_AIS_ERR_NO_SPACE;
+			npats = patternArray->allocatedNumber;
+		} else {
+			npats = edi->edi_patterns.patternsNumber;
+		}
 	}
 	}
-
 	patternArray->patternsNumber = edi->edi_patterns.patternsNumber;
 	patternArray->patternsNumber = edi->edi_patterns.patternsNumber;
 
 
+	/*
+	 * copy the patterns to the callers structure.  If we have pre-allocated
+	 * data, the patterns may not fit in the supplied space. In that case we
+	 * return NO_SPACE.
+	 */
 	for (i = 0; i < npats; i++) {
 	for (i = 0; i < npats; i++) {
 
 
 		memcpy(patternArray->patterns[i].pattern,
 		memcpy(patternArray->patterns[i].pattern,
 			edi->edi_patterns.patterns[i].pattern,
 			edi->edi_patterns.patterns[i].pattern,
-			min(patternArray->patterns[i].patternSize,
+			min(patternArray->patterns[i].allocatedSize,
 				edi->edi_patterns.patterns[i].patternSize));
 				edi->edi_patterns.patterns[i].patternSize));
 
 
-		if (patternArray->patterns[i].patternSize < 
+		if (patternArray->patterns[i].allocatedSize < 
 								edi->edi_patterns.patterns[i].patternSize) {
 								edi->edi_patterns.patterns[i].patternSize) {
 			error = SA_AIS_ERR_NO_SPACE;
 			error = SA_AIS_ERR_NO_SPACE;
 		}
 		}

+ 19 - 18
test/evtbench.c

@@ -48,15 +48,15 @@ char pubname[256] = "Test Pub Name";
 
 
 
 
 SaEvtEventFilterT filters[] = {
 SaEvtEventFilterT filters[] = {
-	{SA_EVT_PREFIX_FILTER, {patt1, patt1_size}},
-	{SA_EVT_SUFFIX_FILTER, {patt2, patt2_size}},
-	{SA_EVT_EXACT_FILTER, {patt3, patt3_size}},
-	{SA_EVT_PASS_ALL_FILTER, {patt4, patt4_size}}
+	{SA_EVT_PREFIX_FILTER, {patt1_size, patt1_size, patt1}},
+	{SA_EVT_SUFFIX_FILTER, {patt2_size, patt2_size, patt2}},
+	{SA_EVT_EXACT_FILTER, {patt3_size, patt3_size, patt3}},
+	{SA_EVT_PASS_ALL_FILTER, {patt4_size, patt4_size, patt4}}
 };
 };
 
 
 SaEvtEventFilterArrayT subscribe_filters = {
 SaEvtEventFilterArrayT subscribe_filters = {
-	filters, 
-	sizeof(filters)/sizeof(SaEvtEventFilterT)
+	sizeof(filters)/sizeof(SaEvtEventFilterT),
+	filters 
 };
 };
 
 
 
 
@@ -66,25 +66,26 @@ SaEvtEventFilterArrayT subscribe_filters = {
 	SaUint8T pat3[100];
 	SaUint8T pat3[100];
 	SaUint8T pat4[100];
 	SaUint8T pat4[100];
 	SaEvtEventPatternT evt_patts[5] = {
 	SaEvtEventPatternT evt_patts[5] = {
-		{pat0, 100},
-		{pat1, 100},
-		{pat2, 100},
-		{pat3, 100},
-		{pat4, 100}};
-	SaEvtEventPatternArrayT	evt_pat_get_array = { evt_patts, 0 };
+		{100, 100, pat0},
+		{100, 100, pat1},
+		{100, 100, pat2},
+		{100, 100, pat3},
+		{100, 100, pat4}};
+	SaEvtEventPatternArrayT	evt_pat_get_array = { 100, 0, evt_patts };
 
 
 SaEvtEventPatternT patterns[] = {
 SaEvtEventPatternT patterns[] = {
-	{patt1, patt1_size},
-	{patt2, patt2_size},
-	{patt3, patt3_size},
-	{patt4, patt4_size}
+	{patt1_size, patt1_size, patt1},
+	{patt2_size, patt2_size, patt2},
+	{patt3_size, patt3_size, patt3},
+	{patt4_size, patt4_size, patt4}
 };
 };
 SaNameT test_pub_name;
 SaNameT test_pub_name;
 #define TEST_PRIORITY 2
 #define TEST_PRIORITY 2
 
 
 SaEvtEventPatternArrayT evt_pat_set_array = {
 SaEvtEventPatternArrayT evt_pat_set_array = {
-	patterns,
-	sizeof(patterns)/sizeof(SaEvtEventPatternT)
+	sizeof(patterns)/sizeof(SaEvtEventPatternT),
+	sizeof(patterns)/sizeof(SaEvtEventPatternT),
+	patterns
 };
 };
 
 
 char user_data_file[256];
 char user_data_file[256];

+ 18 - 17
test/publish.c

@@ -58,15 +58,15 @@ char pubname[256] = "Test Pub Name";
 
 
 
 
 SaEvtEventFilterT filters[] = {
 SaEvtEventFilterT filters[] = {
-	{SA_EVT_PREFIX_FILTER, {patt1, patt1_size}},
-	{SA_EVT_SUFFIX_FILTER, {patt2, patt2_size}},
-	{SA_EVT_EXACT_FILTER, {patt3, patt3_size}},
-	{SA_EVT_PASS_ALL_FILTER, {patt4, patt4_size}}
+	{SA_EVT_PREFIX_FILTER, {patt1_size, patt1_size, patt1}},
+	{SA_EVT_SUFFIX_FILTER, {patt2_size, patt2_size, patt2}},
+	{SA_EVT_EXACT_FILTER, {patt3_size, patt3_size, patt3}},
+	{SA_EVT_PASS_ALL_FILTER, {patt4_size, patt4_size, patt4}}
 };
 };
 
 
 SaEvtEventFilterArrayT subscribe_filters = {
 SaEvtEventFilterArrayT subscribe_filters = {
+	sizeof(filters)/sizeof(SaEvtEventFilterT),
 	filters, 
 	filters, 
-	sizeof(filters)/sizeof(SaEvtEventFilterT)
 };
 };
 
 
 
 
@@ -76,25 +76,26 @@ SaEvtEventFilterArrayT subscribe_filters = {
 	SaUint8T pat3[100];
 	SaUint8T pat3[100];
 	SaUint8T pat4[100];
 	SaUint8T pat4[100];
 	SaEvtEventPatternT evt_patts[5] = {
 	SaEvtEventPatternT evt_patts[5] = {
-		{pat0, 100},
-		{pat1, 100},
-		{pat2, 100},
-		{pat3, 100},
-		{pat4, 100}};
-	SaEvtEventPatternArrayT	evt_pat_get_array = { evt_patts, 0 };
+		{100, 100, pat0},
+		{100, 100, pat1},
+		{100, 100, pat2},
+		{100, 100, pat3},
+		{100, 100, pat4}};
+	SaEvtEventPatternArrayT	evt_pat_get_array = { 5, 0, evt_patts };
 
 
 SaEvtEventPatternT patterns[] = {
 SaEvtEventPatternT patterns[] = {
-	{patt1, patt1_size},
-	{patt2, patt2_size},
-	{patt3, patt3_size},
-	{patt4, patt4_size}
+	{patt1_size, patt1_size, patt1},
+	{patt2_size, patt2_size, patt2},
+	{patt3_size, patt3_size, patt3},
+	{patt4_size, patt4_size, patt4}
 };
 };
 SaNameT test_pub_name;
 SaNameT test_pub_name;
 #define TEST_PRIORITY 2
 #define TEST_PRIORITY 2
 
 
 SaEvtEventPatternArrayT evt_pat_set_array = {
 SaEvtEventPatternArrayT evt_pat_set_array = {
-	patterns,
-	sizeof(patterns)/sizeof(SaEvtEventPatternT)
+	sizeof(patterns)/sizeof(SaEvtEventPatternT),
+	sizeof(patterns)/sizeof(SaEvtEventPatternT),
+	patterns
 };
 };
 
 
 char user_data_file[256];
 char user_data_file[256];

+ 9 - 8
test/subscription.c

@@ -57,8 +57,9 @@ SaEvtEventFilterT filters[MAX_SUB] = {
 };
 };
 
 
 SaEvtEventFilterArrayT subscribe_filters[MAX_SUB] = {
 SaEvtEventFilterArrayT subscribe_filters[MAX_SUB] = {
-	{ &filters[0] , 
-	1},
+	{ 
+		1, &filters[0] 
+	},
 };
 };
 
 
 
 
@@ -69,12 +70,12 @@ SaUint8T pat2[PAT_SIZE];
 SaUint8T pat3[PAT_SIZE];
 SaUint8T pat3[PAT_SIZE];
 SaUint8T pat4[PAT_SIZE];
 SaUint8T pat4[PAT_SIZE];
 SaEvtEventPatternT evt_patts[5] = {
 SaEvtEventPatternT evt_patts[5] = {
-	{pat0, PAT_SIZE},
-	{pat1, PAT_SIZE},
-	{pat2, PAT_SIZE},
-	{pat3, PAT_SIZE},
-	{pat4, PAT_SIZE}};
-SaEvtEventPatternArrayT	evt_pat_get_array = { evt_patts, 0 };
+	{PAT_SIZE, PAT_SIZE, pat0},
+	{PAT_SIZE, PAT_SIZE, pat1},
+	{PAT_SIZE, PAT_SIZE, pat2},
+	{PAT_SIZE, PAT_SIZE, pat3},
+	{PAT_SIZE, PAT_SIZE, pat4}};
+SaEvtEventPatternArrayT	evt_pat_get_array = { 5, 0, evt_patts };
 
 
 SaNameT test_pub_name = {13, "Test Pub Name"};
 SaNameT test_pub_name = {13, "Test Pub Name"};
 
 

+ 35 - 34
test/testevt.c

@@ -175,15 +175,15 @@ void test_initialize (void) {
 
 
 
 
 SaEvtEventFilterT filters[] = {
 SaEvtEventFilterT filters[] = {
-	{SA_EVT_PREFIX_FILTER, {patt1, patt1_size}},
-	{SA_EVT_SUFFIX_FILTER, {patt2, patt2_size}},
-	{SA_EVT_EXACT_FILTER, {patt3, patt3_size}},
-	{SA_EVT_PASS_ALL_FILTER, {patt4, patt4_size}}
+	{SA_EVT_PREFIX_FILTER, {patt1_size, patt1_size, patt1}},
+	{SA_EVT_SUFFIX_FILTER, {patt2_size, patt2_size, patt2}},
+	{SA_EVT_EXACT_FILTER, {patt3_size, patt3_size, patt3}},
+	{SA_EVT_PASS_ALL_FILTER, {patt4_size, patt4_size, patt4}}
 };
 };
 
 
 SaEvtEventFilterArrayT subscribe_filters = {
 SaEvtEventFilterArrayT subscribe_filters = {
-	filters, 
-	sizeof(filters)/sizeof(SaEvtEventFilterT)
+	sizeof(filters)/sizeof(SaEvtEventFilterT),
+	filters 
 };
 };
 
 
 /*
 /*
@@ -698,25 +698,26 @@ test_channel()
 	SaUint8T pat3[100];
 	SaUint8T pat3[100];
 	SaUint8T pat4[100];
 	SaUint8T pat4[100];
 	SaEvtEventPatternT evt_patts[5] = {
 	SaEvtEventPatternT evt_patts[5] = {
-		{pat0, 100},
-		{pat1, 100},
-		{pat2, 100},
-		{pat3, 100},
-		{pat4, 100}};
-	SaEvtEventPatternArrayT	evt_pat_get_array = { evt_patts, 0 };
+		{100, 100, pat0},
+		{100, 100, pat1},
+		{100, 100, pat2},
+		{100, 100, pat3},
+		{100, 100, pat4}};
+	SaEvtEventPatternArrayT	evt_pat_get_array = { 5, 0, evt_patts };
 
 
 SaEvtEventPatternT patterns[] = {
 SaEvtEventPatternT patterns[] = {
-	{patt1, patt1_size},
-	{patt2, patt2_size},
-	{patt3, patt3_size},
-	{patt4, patt4_size}
+	{patt1_size, patt1_size, patt1},
+	{patt2_size, patt2_size, patt2},
+	{patt3_size, patt3_size, patt3},
+	{patt4_size, patt4_size, patt4}
 };
 };
 SaNameT test_pub_name = {13, "Test Pub Name"};
 SaNameT test_pub_name = {13, "Test Pub Name"};
 #define TEST_PRIORITY 2
 #define TEST_PRIORITY 2
 
 
 SaEvtEventPatternArrayT evt_pat_set_array = {
 SaEvtEventPatternArrayT evt_pat_set_array = {
-	patterns,
-	sizeof(patterns)/sizeof(SaEvtEventPatternT)
+	sizeof(patterns)/sizeof(SaEvtEventPatternT),
+	sizeof(patterns)/sizeof(SaEvtEventPatternT),
+	patterns
 };
 };
 
 
 char event_data[1000];
 char event_data[1000];
@@ -1392,22 +1393,22 @@ test_multi_channel1()
 {
 {
 
 
 	SaEvtEventFilterT filt1[1] = {
 	SaEvtEventFilterT filt1[1] = {
-		{SA_EVT_EXACT_FILTER, {"ChanPat1", 8}},
+		{SA_EVT_EXACT_FILTER, {8,8, "ChanPat1"}},
 	};
 	};
 	SaEvtEventFilterT filt2[1] = {
 	SaEvtEventFilterT filt2[1] = {
-		{SA_EVT_EXACT_FILTER, {"ChanPat2", 8}},
+		{SA_EVT_EXACT_FILTER, {8, 8, "ChanPat2"}},
 	};
 	};
 
 
 	SaEvtEventFilterArrayT sub_filt = {
 	SaEvtEventFilterArrayT sub_filt = {
-		NULL, 1
+		1, NULL
 	};
 	};
 
 
-	SaEvtEventPatternT pat1 = {"ChanPat1", 8};
-	SaEvtEventPatternT pat2 = {"ChanPat2", 8};
-	SaEvtEventPatternT pat3 = {"ChanPat3", 8};
+	SaEvtEventPatternT pat1 = {8, 8, "ChanPat1"};
+	SaEvtEventPatternT pat2 = {8, 8, "ChanPat2"};
+	SaEvtEventPatternT pat3 = {8, 8, "ChanPat3"};
 
 
 	SaEvtEventPatternArrayT evt_pat = {
 	SaEvtEventPatternArrayT evt_pat = {
-		NULL, 1
+		1, 1, NULL
 	};
 	};
 
 
 
 
@@ -1736,17 +1737,17 @@ test_multi_channel2()
 {
 {
 
 
 	SaEvtEventFilterT filt1[1] = {
 	SaEvtEventFilterT filt1[1] = {
-		{SA_EVT_EXACT_FILTER, {"ChanPat1", 8}},
+		{SA_EVT_EXACT_FILTER, {8, 8, "ChanPat1"}},
 	};
 	};
 
 
 	SaEvtEventFilterArrayT sub_filt = {
 	SaEvtEventFilterArrayT sub_filt = {
-		NULL, 1
+		1, NULL
 	};
 	};
 
 
-	SaEvtEventPatternT pat1 = {"ChanPat1", 8};
+	SaEvtEventPatternT pat1 = {8, 8, "ChanPat1"};
 
 
 	SaEvtEventPatternArrayT evt_pat = {
 	SaEvtEventPatternArrayT evt_pat = {
-		NULL, 1
+		1, 1, NULL
 	};
 	};
 
 
 
 
@@ -2036,18 +2037,18 @@ test_multi_channel3()
 {
 {
 
 
 	SaEvtEventFilterT filt1[1] = {
 	SaEvtEventFilterT filt1[1] = {
-		{SA_EVT_PREFIX_FILTER, {"ChanPat", 7}},
+		{SA_EVT_PREFIX_FILTER, {7, 7, "ChanPat"}},
 	};
 	};
 
 
 	SaEvtEventFilterArrayT sub_filt = {
 	SaEvtEventFilterArrayT sub_filt = {
-		NULL, 1
+		1, NULL
 	};
 	};
 
 
-	SaEvtEventPatternT pat1 = {"ChanPat1", 8};
-	SaEvtEventPatternT pat2 = {"ChanPat2", 8};
+	SaEvtEventPatternT pat1 = {8, 8, "ChanPat1"};
+	SaEvtEventPatternT pat2 = {8, 8, "ChanPat2"};
 
 
 	SaEvtEventPatternArrayT evt_pat = {
 	SaEvtEventPatternArrayT evt_pat = {
-		NULL, 1
+		1, 1, NULL
 	};
 	};