root/lib/libc/stdlib/l64a.c
/*      $OpenBSD: l64a.c,v 1.5 2005/08/08 08:05:36 espie Exp $ */
/*
 * Written by J.T. Conklin <jtc@netbsd.org>.
 * Public domain.
 */

#include <errno.h>
#include <stdlib.h>

char *
l64a(long value)
{
        static char buf[8];
        char *s = buf;
        int digit;
        int i;

        if (value < 0) {
                errno = EINVAL;
                return(NULL);
        }

        for (i = 0; value != 0 && i < 6; i++) {
                digit = value & 0x3f;

                if (digit < 2) 
                        *s = digit + '.';
                else if (digit < 12)
                        *s = digit + '0' - 2;
                else if (digit < 38)
                        *s = digit + 'A' - 12;
                else
                        *s = digit + 'a' - 38;

                value >>= 6;
                s++;
        }

        *s = '\0';

        return(buf);
}