MCPcopy Create free account
hub / github.com/boostorg/build / var_edit_parse

Function var_edit_parse

src/engine/function.c:647–713  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

645 */
646
647static int var_edit_parse( char const * mods, VAR_EDITS * edits, int havezeroed
648 )
649{
650 while ( *mods )
651 {
652 PATHPART * fp;
653
654 switch ( *mods++ )
655 {
656 case 'L': edits->downshift = 1; continue;
657 case 'U': edits->upshift = 1; continue;
658 case 'P': edits->parent = edits->filemods = 1; continue;
659 case 'E': fp = &edits->empty; goto strval;
660 case 'J': fp = &edits->join; goto strval;
661 case 'G': fp = &edits->f.f_grist; goto fileval;
662 case 'R': fp = &edits->f.f_root; goto fileval;
663 case 'D': fp = &edits->f.f_dir; goto fileval;
664 case 'B': fp = &edits->f.f_base; goto fileval;
665 case 'S': fp = &edits->f.f_suffix; goto fileval;
666 case 'M': fp = &edits->f.f_member; goto fileval;
667 case 'T': edits->to_slashes = 1; continue;
668 case 'W': edits->to_windows = 1; continue;
669 default:
670 continue; /* Should complain, but so what... */
671 }
672
673 fileval:
674 /* Handle :CHARS, where each char (without a following =) selects a
675 * particular file path element. On the first such char, we deselect all
676 * others (by setting ptr = "", len = 0) and for each char we select
677 * that element (by setting ptr = 0).
678 */
679 edits->filemods = 1;
680
681 if ( *mods != '=' )
682 {
683 if ( !havezeroed++ )
684 {
685 int i;
686 for ( i = 0; i < 6; ++i )
687 {
688 edits->f.part[ i ].len = 0;
689 edits->f.part[ i ].ptr = "";
690 }
691 }
692
693 fp->ptr = 0;
694 continue;
695 }
696
697 strval:
698 /* Handle :X=value, or :X */
699 if ( *mods != '=' )
700 {
701 fp->ptr = "";
702 fp->len = 0;
703 }
704 else

Callers 1

expand_modifiersFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected