Subversion Repositories planix.SVN

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include <u.h>
#include <libc.h>
#include <venti.h>

int
vtparsescore(char *s, char **prefix, uchar score[VtScoreSize])
{
        int i, c;
        char *buf, *colon;

        if((colon = strchr(s, ':')) != nil)
                buf = colon+1;
        else
                buf = s;

        if(strlen(buf) != 2*VtScoreSize)
                return -1;

        memset(score, 0, VtScoreSize);
        for(i=0; i<2*VtScoreSize; i++){
                if(buf[i] >= '0' && buf[i] <= '9')
                        c = buf[i] - '0';
                else if(buf[i] >= 'a' && buf[i] <= 'z')
                        c = buf[i] - 'a' + 10;
                else if(buf[i] >= 'A' && buf[i] <= 'Z')
                        c = buf[i] - 'A' + 10;
                else
                        return -1;

                if((i & 1) == 0)
                        c <<= 4;
                score[i>>1] |= c;
        }
        if(colon){
                *colon = 0;
                if(prefix)
                        *prefix = s;
        }else{
                if(prefix)
                        *prefix = nil;
        }
        return 0;
}