@@ -511,20 +511,21 @@ static int vcf_getter_info_str2str(args_t *args, bcf1_t *rec, annot_col_t *col,
511511static int vcf_getter_id2str (args_t * args , bcf1_t * rec , annot_col_t * col , void * * ptr , int * mptr )
512512{
513513 char * str = * ((char * * )ptr );
514- int len = strlen (rec -> d .id );
514+ int i , len = strlen (rec -> d .id );
515515 if ( len >= * mptr ) str = realloc (str , len + 1 );
516- strcpy (str , rec -> d .id );
516+ for (i = 0 ; i < len ; i ++ )
517+ str [i ] = rec -> d .id [i ]== ';' ? ',' : rec -> d .id [i ];
518+ str [len ] = 0 ;
517519 * ((char * * )ptr ) = str ;
518520 * mptr = len + 1 ;
519521 return len ;
520522}
521- static int vcf_getter_filter2str_local ( args_t * args , bcf1_t * rec , annot_col_t * col , void * * ptr , int * mptr )
523+ inline static int vcf_getter_filter2str_core ( bcf_hdr_t * hdr , bcf1_t * rec , char * * ptr , int * mptr )
522524{
523- rec = args -> current_rec ;
524525 if ( !(rec -> unpacked & BCF_UN_FLT ) ) bcf_unpack (rec , BCF_UN_FLT );
525526
526527 kstring_t str ;
527- str .s = * (( char * * ) ptr ) ;
528+ str .s = * ptr ;
528529 str .m = * mptr ;
529530 str .l = 0 ;
530531
@@ -533,39 +534,23 @@ static int vcf_getter_filter2str_local(args_t *args, bcf1_t *rec, annot_col_t *c
533534 {
534535 for (i = 0 ; i < rec -> d .n_flt ; i ++ )
535536 {
536- if (i ) kputc ('; ' , & str );
537- kputs (bcf_hdr_int2id (args -> hdr_out ,BCF_DT_ID ,rec -> d .flt [i ]), & str );
537+ if (i ) kputc (', ' , & str );
538+ kputs (bcf_hdr_int2id (hdr ,BCF_DT_ID ,rec -> d .flt [i ]), & str );
538539 }
539540 }
540541 else kputc ('.' , & str );
541542
542- * (( char * * ) ptr ) = str .s ;
543+ * ptr = str .s ;
543544 * mptr = str .m ;
544545 return str .l ;
545546}
547+ static int vcf_getter_filter2str_local (args_t * args , bcf1_t * rec , annot_col_t * col , void * * ptr , int * mptr )
548+ {
549+ return vcf_getter_filter2str_core (args -> hdr_out , args -> current_rec , (char * * )ptr , mptr );
550+ }
546551static int vcf_getter_filter2str (args_t * args , bcf1_t * rec , annot_col_t * col , void * * ptr , int * mptr )
547552{
548- if ( !(rec -> unpacked & BCF_UN_FLT ) ) bcf_unpack (rec , BCF_UN_FLT );
549-
550- kstring_t str ;
551- str .s = * ((char * * )ptr );
552- str .m = * mptr ;
553- str .l = 0 ;
554-
555- int i ;
556- if ( rec -> d .n_flt )
557- {
558- for (i = 0 ; i < rec -> d .n_flt ; i ++ )
559- {
560- if (i ) kputc (';' , & str );
561- kputs (bcf_hdr_int2id (args -> tgts_hdr ,BCF_DT_ID ,rec -> d .flt [i ]), & str );
562- }
563- }
564- else kputc ('.' , & str );
565-
566- * ((char * * )ptr ) = str .s ;
567- * mptr = str .m ;
568- return str .l ;
553+ return vcf_getter_filter2str_core (args -> tgts_hdr , rec , (char * * )ptr , mptr );
569554}
570555static int setter_filter (args_t * args , bcf1_t * line , annot_col_t * col , void * data )
571556{
0 commit comments