@@ -291,44 +291,47 @@ map_load_line_ie_defs(map_t *map, char *ur_name, int ur_type, char *ur_type_str,
291291 char * subsave_ptr_list = NULL ;
292292 struct map_ipfix_s * ipfix = & rec .ipfix ;
293293 rec .ipfix .next = NULL ;
294+
294295 for (char * list = subtoken ; ;list = NULL ) {
295- char * list_token = strtok_r (list , "/" , & subsave_ptr_list );
296- if (!list_token ) {
297- break ;
298- }
299-
300- elem_def = map_elem_get_ipfix (map -> iemgr , list_token );
301- if (elem_def != NULL ) {
302- if (list == NULL ) {
303- ipfix -> next = malloc (sizeof (struct map_ipfix_s ));
304- if (!ipfix -> next ) {
305- rc = IPX_ERR_NOMEM ;
306- elem_def = NULL ;
307- break ;
308- }
309- ipfix = ipfix -> next ;
310- }
311- // Store the "IPFIX element" record
312- ipfix -> source = MAP_SRC_IPFIX ;
313- ipfix -> def = elem_def ;
314- ipfix -> id = elem_def -> id ;
315- ipfix -> en = elem_def -> scope -> pen ;
316- ipfix -> next = NULL ;
317-
318- continue ;
319- }
320- break ;
296+ // Test if the specifier describes basicList
297+ char * list_token = strtok_r (list , "/" , & subsave_ptr_list );
298+ if (!list_token ) {
299+ break ;
300+ }
301+
302+ elem_def = map_elem_get_ipfix (map -> iemgr , list_token );
303+ if (elem_def != NULL ) {
304+ if (list == NULL ) {
305+ ipfix -> next = malloc (sizeof (struct map_ipfix_s ));
306+ if (!ipfix -> next ) {
307+ rc = IPX_ERR_NOMEM ;
308+ elem_def = NULL ;
309+ break ;
310+ }
311+ ipfix = ipfix -> next ;
312+ }
313+
314+ // Store the "IPFIX element" record
315+ ipfix -> source = MAP_SRC_IPFIX ;
316+ ipfix -> def = elem_def ;
317+ ipfix -> id = elem_def -> id ;
318+ ipfix -> en = elem_def -> scope -> pen ;
319+ ipfix -> next = NULL ;
320+ continue ;
321+ }
322+ break ;
321323 }
324+
322325 if (elem_def != NULL ) {
323- rc = map_rec_add (map , & rec );
324- continue ;
326+ rc = map_rec_add (map , & rec );
327+ continue ;
325328 }
326329
327330 ipfix = rec .ipfix .next ;
328331 while (ipfix ) {
329- struct map_ipfix_s * tmp = ipfix -> next ;
330- free (ipfix );
331- ipfix = tmp ;
332+ struct map_ipfix_s * tmp = ipfix -> next ;
333+ free (ipfix );
334+ ipfix = tmp ;
332335 }
333336
334337 enum MAP_SRC fn_id = map_elem_get_internal (subtoken );
@@ -459,28 +462,28 @@ map_sort_fn(const void *p1, const void *p2)
459462 const struct map_ipfix_s * ipfix2 = & (* (struct map_rec * * ) p2 )-> ipfix ;
460463
461464 while (ipfix1 && ipfix2 ) {
462- if (ipfix1 -> source != ipfix2 -> source ) {
463- return (ipfix1 -> source < ipfix2 -> source ) ? (-1 ) : 1 ;
464- }
465-
466- // Primary sort by PEN
467- if (ipfix1 -> en != ipfix2 -> en ) {
468- return (ipfix1 -> en < ipfix2 -> en ) ? (-1 ) : 1 ;
469- }
470-
471- // Secondary sort by ID
472- if (ipfix1 -> id != ipfix2 -> id ) {
473- return (ipfix1 -> id < ipfix2 -> id ) ? (-1 ) : 1 ;
474- }
475-
476- ipfix1 = ipfix1 -> next ;
477- ipfix2 = ipfix2 -> next ;
465+ if (ipfix1 -> source != ipfix2 -> source ) {
466+ return (ipfix1 -> source < ipfix2 -> source ) ? (-1 ) : 1 ;
467+ }
468+
469+ // Primary sort by PEN
470+ if (ipfix1 -> en != ipfix2 -> en ) {
471+ return (ipfix1 -> en < ipfix2 -> en ) ? (-1 ) : 1 ;
472+ }
473+
474+ // Secondary sort by ID
475+ if (ipfix1 -> id != ipfix2 -> id ) {
476+ return (ipfix1 -> id < ipfix2 -> id ) ? (-1 ) : 1 ;
477+ }
478+
479+ ipfix1 = ipfix1 -> next ;
480+ ipfix2 = ipfix2 -> next ;
478481 }
479482
480483 if (ipfix1 -> next ) {
481- return -1 ;
484+ return -1 ;
482485 } else if (ipfix2 -> next ) {
483- return 1 ;
486+ return 1 ;
484487 }
485488
486489 return 0 ;
@@ -563,20 +566,21 @@ map_load(map_t *map, const char *file)
563566 const struct map_ipfix_s * ipfix_prev = & rec_prev -> ipfix ;
564567 const struct map_ipfix_s * ipfix_now = & rec_now -> ipfix ;
565568 while (1 ) {
566- if (ipfix_prev -> en != ipfix_now -> en || ipfix_prev -> id != ipfix_now -> id || !ipfix_prev || !ipfix_now ) {
567- rec_prev = rec_now ;
568- break ;
569- }
570-
571- ipfix_prev = ipfix_prev -> next ;
572- ipfix_now = ipfix_now -> next ;
573- if (!ipfix_prev && !ipfix_now ) {
574- collision = true;
575- break ;
576- }
569+ if (!ipfix_prev || !ipfix_now || ipfix_prev -> en != ipfix_now -> en
570+ || ipfix_prev -> id != ipfix_now -> id ) {
571+ rec_prev = rec_now ;
572+ break ;
573+ }
574+
575+ ipfix_prev = ipfix_prev -> next ;
576+ ipfix_now = ipfix_now -> next ;
577+ if (!ipfix_prev && !ipfix_now ) {
578+ collision = true;
579+ break ;
580+ }
577581 }
578582 if (!collision ) {
579- continue ;
583+ continue ;
580584 }
581585
582586 // Collision detected!
0 commit comments