- moved here from sysv/
[util-vserver.git] / lib / uint2str.c
1 // $Id: uint2str.c,v 1.1.2.1 2003/10/14 15:19:14 ensc Exp $    --*- c++ -*--
2
3 // Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
4 //  
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; version 2 of the License.
8 //  
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //  
14 // You should have received a copy of the GNU General Public License
15 // along with this program; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17
18
19 #ifdef HAVE_CONFIG_H
20 #  include <config.h>
21 #endif
22 #include "compat.h"
23
24 #include <assert.h>
25 #include <stdbool.h>
26 #include <string.h>
27
28 size_t
29 utilvserver_uint2str(char *buf, size_t len, unsigned int val, unsigned char base)
30 {
31   char                  *ptr = buf+len-1;
32   register size_t       res;
33   if (base>=36 || len==0) return 0;
34
35   *ptr = '\0';
36   while (ptr>buf) {
37     unsigned char       digit = val%base;
38     
39     --ptr;
40     *ptr = (digit<10 ? '0'+digit :
41             digit<36 ? 'a'+digit-10 :
42             (assert(false),'?'));
43
44     val /= base;
45     if (val==0) break;
46   }
47
48   assert(ptr>=buf && ptr<=buf+len-1);
49          
50   res = buf+len-ptr;
51   memmove(buf, ptr, res);
52
53   return res-1;
54 }