Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

#include <u.h>
#include <libc.h>
static char t16e[] = "0123456789ABCDEF";

int
dec16(uchar *out, int lim, char *in, int n)
{
        int c, w = 0, i = 0;
        uchar *start = out;
        uchar *eout = out + lim;

        while(n-- > 0){
                c = *in++;
                if('0' <= c && c <= '9')
                        c = c - '0';
                else if('a' <= c && c <= 'z')
                        c = c - 'a' + 10;
                else if('A' <= c && c <= 'Z')
                        c = c - 'A' + 10;
                else
                        continue;
                w = (w<<4) + c;
                i++;
                if(i == 2){
                        if(out + 1 > eout)
                                goto exhausted;
                        *out++ = w;
                        w = 0;
                        i = 0;
                }
        }
exhausted:
        return out - start;
}

int
enc16(char *out, int lim, uchar *in, int n)
{
        uint c;
        char *eout = out + lim;
        char *start = out;

        while(n-- > 0){
                c = *in++;
                if(out + 2 >= eout)
                        goto exhausted;
                *out++ = t16e[c>>4];
                *out++ = t16e[c&0xf];
        }
exhausted:
        *out = 0;
        return out - start;
}