X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/d7b6f0d1cda54fe872145ab6ee20bf5bc131be8d..3d2988f6a628ac0da7a8b02ec9839f508cbff987:/lib/basen.c diff --git a/lib/basen.c b/lib/basen.c index 362ab58..7b66725 100644 --- a/lib/basen.c +++ b/lib/basen.c @@ -17,6 +17,12 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA */ +/** @file lib/basen.c @brief Arbitrary base conversion + * + * The functions in this file handle arbitrary-size non-negative integers, + * represented as a bigendian (MSW first) sequence of @c unsigned @c long + * words. The words themselves use the native byte order. + */ #include #include "types.h" @@ -66,7 +72,7 @@ static unsigned divide(unsigned long *v, int nwords, unsigned long m) { } /** @brief Convert v to a chosen base - * @param v Pointer to bigendian bignum + * @param v Pointer to bigendian bignum (modified!) * @param nwords Length of bignum * @param buffer Output buffer * @param bufsize Size of output buffer @@ -85,7 +91,8 @@ int basen(unsigned long *v, static const char chars[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; do { - if(i <= 1) return -1; /* overflow */ + if(i <= 1) + return -1; /* overflow */ buffer[--i] = chars[divide(v, nwords, base)]; } while(!zero(v, nwords)); memmove(buffer, buffer + i, bufsize - i);