xref: /plan9/sys/src/libventi/parsescore.c (revision 368c31ab13393dea083228fdd1c3445076f83a4b)
1 #include <u.h>
2 #include <libc.h>
3 #include <venti.h>
4 
5 int
vtparsescore(char * s,char ** prefix,uchar score[VtScoreSize])6 vtparsescore(char *s, char **prefix, uchar score[VtScoreSize])
7 {
8 	int i, c;
9 	char *buf, *colon;
10 
11 	if((colon = strchr(s, ':')) != nil)
12 		buf = colon+1;
13 	else
14 		buf = s;
15 
16 	if(strlen(buf) != 2*VtScoreSize)
17 		return -1;
18 
19 	memset(score, 0, VtScoreSize);
20 	for(i=0; i<2*VtScoreSize; i++){
21 		if(buf[i] >= '0' && buf[i] <= '9')
22 			c = buf[i] - '0';
23 		else if(buf[i] >= 'a' && buf[i] <= 'z')
24 			c = buf[i] - 'a' + 10;
25 		else if(buf[i] >= 'A' && buf[i] <= 'Z')
26 			c = buf[i] - 'A' + 10;
27 		else
28 			return -1;
29 
30 		if((i & 1) == 0)
31 			c <<= 4;
32 		score[i>>1] |= c;
33 	}
34 	if(colon){
35 		*colon = 0;
36 		if(prefix)
37 			*prefix = s;
38 	}else{
39 		if(prefix)
40 			*prefix = nil;
41 	}
42 	return 0;
43 }
44