plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

parsescore.c (719B)


      1 #include <u.h>
      2 #include <libc.h>
      3 #include <venti.h>
      4 
      5 int
      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 }