Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

#include        "mk.h"

int
match(char *name, char *template, char *stem)
{
        Rune r;
        int n;

        while(*name && *template){
                n = chartorune(&r, template);
                if (PERCENT(r))
                        break;
                while (n--)
                        if(*name++ != *template++)
                                return 0;
        }
        if(!PERCENT(*template))
                return 0;
        n = strlen(name)-strlen(template+1);
        if (n < 0)
                return 0;
        if (strcmp(template+1, name+n))
                return 0;
        strncpy(stem, name, n);
        stem[n] = 0;
        if(*template == '&')
                return !charin(stem, "./");
        return 1;
}

void
subst(char *stem, char *template, char *dest, int dlen)
{
        Rune r;
        char *s, *e;
        int n;

        e = dest+dlen-1;
        while(*template){
                n = chartorune(&r, template);
                if (PERCENT(r)) {
                        template += n;
                        for (s = stem; *s; s++)
                                if(dest < e)
                                        *dest++ = *s;
                } else
                        while (n--){
                                if(dest < e)
                                        *dest++ = *template;
                                template++;
                        }
        }
        *dest = 0;
}