Magellan Linux

Annotation of /tags/mkinitrd-6_2_0/libbb/xatonum.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 994 - (hide annotations) (download)
Sun May 30 11:53:18 2010 UTC (14 years ago) by niro
File MIME type: text/plain
File size: 1701 byte(s)
tagged 'mkinitrd-6_2_0'
1 niro 532 /* vi: set sw=4 ts=4: */
2     /*
3     * ascii-to-numbers implementations for busybox
4     *
5     * Copyright (C) 2003 Manuel Novoa III <mjn3@codepoet.org>
6     *
7     * Licensed under GPLv2, see file LICENSE in this tarball for details.
8     */
9    
10     #include "libbb.h"
11    
12     #define type long long
13     #define xstrtou(rest) xstrtoull##rest
14     #define xstrto(rest) xstrtoll##rest
15     #define xatou(rest) xatoull##rest
16     #define xato(rest) xatoll##rest
17     #define XSTR_UTYPE_MAX ULLONG_MAX
18     #define XSTR_TYPE_MAX LLONG_MAX
19     #define XSTR_TYPE_MIN LLONG_MIN
20     #define XSTR_STRTOU strtoull
21     #include "xatonum_template.c"
22    
23     #if ULONG_MAX != ULLONG_MAX
24     #define type long
25     #define xstrtou(rest) xstrtoul##rest
26     #define xstrto(rest) xstrtol##rest
27     #define xatou(rest) xatoul##rest
28     #define xato(rest) xatol##rest
29     #define XSTR_UTYPE_MAX ULONG_MAX
30     #define XSTR_TYPE_MAX LONG_MAX
31     #define XSTR_TYPE_MIN LONG_MIN
32     #define XSTR_STRTOU strtoul
33     #include "xatonum_template.c"
34     #endif
35    
36     #if UINT_MAX != ULONG_MAX
37 niro 816 static ALWAYS_INLINE
38 niro 532 unsigned bb_strtoui(const char *str, char **end, int b)
39     {
40     unsigned long v = strtoul(str, end, b);
41     if (v > UINT_MAX) {
42     errno = ERANGE;
43     return UINT_MAX;
44     }
45     return v;
46     }
47     #define type int
48     #define xstrtou(rest) xstrtou##rest
49     #define xstrto(rest) xstrtoi##rest
50     #define xatou(rest) xatou##rest
51     #define xato(rest) xatoi##rest
52     #define XSTR_UTYPE_MAX UINT_MAX
53     #define XSTR_TYPE_MAX INT_MAX
54     #define XSTR_TYPE_MIN INT_MIN
55     /* libc has no strtoui, so we need to create/use our own */
56     #define XSTR_STRTOU bb_strtoui
57     #include "xatonum_template.c"
58     #endif
59    
60     /* A few special cases */
61    
62 niro 816 int FAST_FUNC xatoi_u(const char *numstr)
63 niro 532 {
64     return xatou_range(numstr, 0, INT_MAX);
65     }
66    
67 niro 816 uint16_t FAST_FUNC xatou16(const char *numstr)
68 niro 532 {
69     return xatou_range(numstr, 0, 0xffff);
70     }