libpayload: Some more compatibility (for flashrom)
authorPatrick Georgi <patrick.georgi@secunet.com>
Tue, 26 Jul 2011 10:51:59 +0000 (12:51 +0200)
committerPatrick Georgi <patrick@georgi-clan.de>
Wed, 17 Aug 2011 14:26:20 +0000 (16:26 +0200)
libpci defines an arbitrary set of PCI vendor IDs, flashrom uses the
Intel definition. Add it.

flashrom also requires inttypes.h, so add the OpenBSD version

Change-Id: I9bffd8193f635c375ac4d6b6eae8d3d876b95f5f
Signed-off-by: Patrick Georgi <patrick.georgi@secunet.com>
Reviewed-on: http://review.coreboot.org/154
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
payloads/libpayload/include/inttypes.h [new file with mode: 0644]
payloads/libpayload/include/pci/pci.h
payloads/libpayload/include/stdlib.h
payloads/libpayload/include/sys/stdint.h [new file with mode: 0644]
payloads/libpayload/libc/string.c

diff --git a/payloads/libpayload/include/inttypes.h b/payloads/libpayload/include/inttypes.h
new file mode 100644 (file)
index 0000000..922f08a
--- /dev/null
@@ -0,0 +1,267 @@
+/*     $OpenBSD: inttypes.h,v 1.10 2009/01/13 18:13:51 kettenis Exp $  */
+
+/*
+ * Copyright (c) 1997, 2005 Todd C. Miller <Todd.Miller@courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef        _INTTYPES_H_
+#define        _INTTYPES_H_
+
+#include <sys/stdint.h>
+
+#ifdef __cplusplus
+#define __wchar_t      wchar_t
+#endif
+
+#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)
+/*
+ * 7.8.1 Macros for format specifiers
+ *
+ * Each of the following object-like macros expands to a string
+ * literal containing a conversion specifier, possibly modified by
+ * a prefix such as hh, h, l, or ll, suitable for use within the
+ * format argument of a formatted input/output function when
+ * converting the corresponding integer type.  These macro names
+ * have the general form of PRI (character string literals for the
+ * fprintf family) or SCN (character string literals for the fscanf
+ * family), followed by the conversion specifier, followed by a
+ * name corresponding to a similar typedef name.  For example,
+ * PRIdFAST32 can be used in a format string to print the value of
+ * an integer of type int_fast32_t.
+ */
+
+/* fprintf macros for signed integers */
+#define        PRId8                   "d"             /* int8_t */
+#define        PRId16                  "d"             /* int16_t */
+#define        PRId32                  "d"             /* int32_t */
+#define        PRId64                  "lld"           /* int64_t */
+
+#define        PRIdLEAST8              "d"             /* int_least8_t */
+#define        PRIdLEAST16             "d"             /* int_least16_t */
+#define        PRIdLEAST32             "d"             /* int_least32_t */
+#define        PRIdLEAST64             "lld"           /* int_least64_t */
+
+#define        PRIdFAST8               "d"             /* int_fast8_t */
+#define        PRIdFAST16              "d"             /* int_fast16_t */
+#define        PRIdFAST32              "d"             /* int_fast32_t */
+#define        PRIdFAST64              "lld"           /* int_fast64_t */
+
+#define        PRIdMAX                 "jd"            /* intmax_t */
+#define        PRIdPTR                 "ld"            /* intptr_t */
+
+#define        PRIi8                   "i"             /* int8_t */
+#define        PRIi16                  "i"             /* int16_t */
+#define        PRIi32                  "i"             /* int32_t */
+#define        PRIi64                  "lli"           /* int64_t */
+
+#define        PRIiLEAST8              "i"             /* int_least8_t */
+#define        PRIiLEAST16             "i"             /* int_least16_t */
+#define        PRIiLEAST32             "i"             /* int_least32_t */
+#define        PRIiLEAST64             "lli"           /* int_least64_t */
+
+#define        PRIiFAST8               "i"             /* int_fast8_t */
+#define        PRIiFAST16              "i"             /* int_fast16_t */
+#define        PRIiFAST32              "i"             /* int_fast32_t */
+#define        PRIiFAST64              "lli"           /* int_fast64_t */
+
+#define        PRIiMAX                 "ji"            /* intmax_t */
+#define        PRIiPTR                 "li"            /* intptr_t */
+
+/* fprintf macros for unsigned integers */
+#define        PRIo8                   "o"             /* int8_t */
+#define        PRIo16                  "o"             /* int16_t */
+#define        PRIo32                  "o"             /* int32_t */
+#define        PRIo64                  "llo"           /* int64_t */
+
+#define        PRIoLEAST8              "o"             /* int_least8_t */
+#define        PRIoLEAST16             "o"             /* int_least16_t */
+#define        PRIoLEAST32             "o"             /* int_least32_t */
+#define        PRIoLEAST64             "llo"           /* int_least64_t */
+
+#define        PRIoFAST8               "o"             /* int_fast8_t */
+#define        PRIoFAST16              "o"             /* int_fast16_t */
+#define        PRIoFAST32              "o"             /* int_fast32_t */
+#define        PRIoFAST64              "llo"           /* int_fast64_t */
+
+#define        PRIoMAX                 "jo"            /* intmax_t */
+#define        PRIoPTR                 "lo"            /* intptr_t */
+
+#define        PRIu8                   "u"             /* uint8_t */
+#define        PRIu16                  "u"             /* uint16_t */
+#define        PRIu32                  "u"             /* uint32_t */
+#define        PRIu64                  "llu"           /* uint64_t */
+
+#define        PRIuLEAST8              "u"             /* uint_least8_t */
+#define        PRIuLEAST16             "u"             /* uint_least16_t */
+#define        PRIuLEAST32             "u"             /* uint_least32_t */
+#define        PRIuLEAST64             "llu"           /* uint_least64_t */
+
+#define        PRIuFAST8               "u"             /* uint_fast8_t */
+#define        PRIuFAST16              "u"             /* uint_fast16_t */
+#define        PRIuFAST32              "u"             /* uint_fast32_t */
+#define        PRIuFAST64              "llu"           /* uint_fast64_t */
+
+#define        PRIuMAX                 "ju"            /* uintmax_t */
+#define        PRIuPTR                 "lu"            /* uintptr_t */
+
+#define        PRIx8                   "x"             /* uint8_t */
+#define        PRIx16                  "x"             /* uint16_t */
+#define        PRIx32                  "x"             /* uint32_t */
+#define        PRIx64                  "llx"           /* uint64_t */
+
+#define        PRIxLEAST8              "x"             /* uint_least8_t */
+#define        PRIxLEAST16             "x"             /* uint_least16_t */
+#define        PRIxLEAST32             "x"             /* uint_least32_t */
+#define        PRIxLEAST64             "llx"           /* uint_least64_t */
+
+#define        PRIxFAST8               "x"             /* uint_fast8_t */
+#define        PRIxFAST16              "x"             /* uint_fast16_t */
+#define        PRIxFAST32              "x"             /* uint_fast32_t */
+#define        PRIxFAST64              "llx"           /* uint_fast64_t */
+
+#define        PRIxMAX                 "jx"            /* uintmax_t */
+#define        PRIxPTR                 "lx"            /* uintptr_t */
+
+#define        PRIX8                   "X"             /* uint8_t */
+#define        PRIX16                  "X"             /* uint16_t */
+#define        PRIX32                  "X"             /* uint32_t */
+#define        PRIX64                  "llX"           /* uint64_t */
+
+#define        PRIXLEAST8              "X"             /* uint_least8_t */
+#define        PRIXLEAST16             "X"             /* uint_least16_t */
+#define        PRIXLEAST32             "X"             /* uint_least32_t */
+#define        PRIXLEAST64             "llX"           /* uint_least64_t */
+
+#define        PRIXFAST8               "X"             /* uint_fast8_t */
+#define        PRIXFAST16              "X"             /* uint_fast16_t */
+#define        PRIXFAST32              "X"             /* uint_fast32_t */
+#define        PRIXFAST64              "llX"           /* uint_fast64_t */
+
+#define        PRIXMAX                 "jX"            /* uintmax_t */
+#define        PRIXPTR                 "lX"            /* uintptr_t */
+
+/* fscanf macros for signed integers */
+#define        SCNd8                   "hhd"           /* int8_t */
+#define        SCNd16                  "hd"            /* int16_t */
+#define        SCNd32                  "d"             /* int32_t */
+#define        SCNd64                  "lld"           /* int64_t */
+
+#define        SCNdLEAST8              "hhd"           /* int_least8_t */
+#define        SCNdLEAST16             "hd"            /* int_least16_t */
+#define        SCNdLEAST32             "d"             /* int_least32_t */
+#define        SCNdLEAST64             "lld"           /* int_least64_t */
+
+#define        SCNdFAST8               "hhd"           /* int_fast8_t */
+#define        SCNdFAST16              "hd"            /* int_fast16_t */
+#define        SCNdFAST32              "d"             /* int_fast32_t */
+#define        SCNdFAST64              "lld"           /* int_fast64_t */
+
+#define        SCNdMAX                 "jd"            /* intmax_t */
+#define        SCNdPTR                 "ld"            /* intptr_t */
+
+#define        SCNi8                   "hhi"           /* int8_t */
+#define        SCNi16                  "hi"            /* int16_t */
+#define        SCNi32                  "i"             /* int32_t */
+#define        SCNi64                  "lli"           /* int64_t */
+
+#define        SCNiLEAST8              "hhi"           /* int_least8_t */
+#define        SCNiLEAST16             "hi"            /* int_least16_t */
+#define        SCNiLEAST32             "i"             /* int_least32_t */
+#define        SCNiLEAST64             "lli"           /* int_least64_t */
+
+#define        SCNiFAST8               "hhi"           /* int_fast8_t */
+#define        SCNiFAST16              "hi"            /* int_fast16_t */
+#define        SCNiFAST32              "i"             /* int_fast32_t */
+#define        SCNiFAST64              "lli"           /* int_fast64_t */
+
+#define        SCNiMAX                 "ji"            /* intmax_t */
+#define        SCNiPTR                 "li"            /* intptr_t */
+
+/* fscanf macros for unsigned integers */
+#define        SCNo8                   "hho"           /* uint8_t */
+#define        SCNo16                  "ho"            /* uint16_t */
+#define        SCNo32                  "o"             /* uint32_t */
+#define        SCNo64                  "llo"           /* uint64_t */
+
+#define        SCNoLEAST8              "hho"           /* uint_least8_t */
+#define        SCNoLEAST16             "ho"            /* uint_least16_t */
+#define        SCNoLEAST32             "o"             /* uint_least32_t */
+#define        SCNoLEAST64             "llo"           /* uint_least64_t */
+
+#define        SCNoFAST8               "hho"           /* uint_fast8_t */
+#define        SCNoFAST16              "ho"            /* uint_fast16_t */
+#define        SCNoFAST32              "o"             /* uint_fast32_t */
+#define        SCNoFAST64              "llo"           /* uint_fast64_t */
+
+#define        SCNoMAX                 "jo"            /* uintmax_t */
+#define        SCNoPTR                 "lo"            /* uintptr_t */
+
+#define        SCNu8                   "hhu"           /* uint8_t */
+#define        SCNu16                  "hu"            /* uint16_t */
+#define        SCNu32                  "u"             /* uint32_t */
+#define        SCNu64                  "llu"           /* uint64_t */
+
+#define        SCNuLEAST8              "hhu"           /* uint_least8_t */
+#define        SCNuLEAST16             "hu"            /* uint_least16_t */
+#define        SCNuLEAST32             "u"             /* uint_least32_t */
+#define        SCNuLEAST64             "llu"           /* uint_least64_t */
+
+#define        SCNuFAST8               "hhu"           /* uint_fast8_t */
+#define        SCNuFAST16              "hu"            /* uint_fast16_t */
+#define        SCNuFAST32              "u"             /* uint_fast32_t */
+#define        SCNuFAST64              "llu"           /* uint_fast64_t */
+
+#define        SCNuMAX                 "ju"            /* uintmax_t */
+#define        SCNuPTR                 "lu"            /* uintptr_t */
+
+#define        SCNx8                   "hhx"           /* uint8_t */
+#define        SCNx16                  "hx"            /* uint16_t */
+#define        SCNx32                  "x"             /* uint32_t */
+#define        SCNx64                  "llx"           /* uint64_t */
+
+#define        SCNxLEAST8              "hhx"           /* uint_least8_t */
+#define        SCNxLEAST16             "hx"            /* uint_least16_t */
+#define        SCNxLEAST32             "x"             /* uint_least32_t */
+#define        SCNxLEAST64             "llx"           /* uint_least64_t */
+
+#define        SCNxFAST8               "hhx"           /* uint_fast8_t */
+#define        SCNxFAST16              "hx"            /* uint_fast16_t */
+#define        SCNxFAST32              "x"             /* uint_fast32_t */
+#define        SCNxFAST64              "llx"           /* uint_fast64_t */
+
+#define        SCNxMAX                 "jx"            /* uintmax_t */
+#define        SCNxPTR                 "lx"            /* uintptr_t */
+
+#endif /* __cplusplus || __STDC_FORMAT_MACROS */
+
+typedef struct {
+       intmax_t quot;          /* quotient */
+       intmax_t rem;           /* remainder */
+} imaxdiv_t;
+
+//__BEGIN_DECLS
+intmax_t       imaxabs(intmax_t);
+imaxdiv_t      imaxdiv(intmax_t, intmax_t);
+intmax_t       strtoimax(const char *, char **, int);
+uintmax_t      strtoumax(const char *, char **, int);
+#if 0
+intmax_t       wcstoimax(const __wchar_t * __restrict,
+                   __wchar_t ** __restrict, int);
+uintmax_t      wcstoumax(const __wchar_t * __restrict,
+                   __wchar_t ** __restrict, int);
+#endif
+//__END_DECLS
+
+#endif /* _INTTYPES_H_ */
index 53da0e17560250fd59682c14433917ec967fea20..565bdb5d7d09e80b99908a630044b5fa7a8ca5e2 100644 (file)
@@ -65,6 +65,8 @@
 #define PCI_ROM_ADDRESS1       0x38 // on bridges\r
 #define PCI_ROM_ADDRESS_MASK   ~0x7ff\r
 \r
+#define PCI_VENDOR_ID_INTEL 0x8086\r
+\r
 struct pci_dev {\r
        u16 domain;\r
        u8 bus, dev, func;\r
index 47b666a7612b378b63daee5da672f4921799d1c0..cf37c8056f91074fca33684a49dbb5b15cd8ef64 100644 (file)
@@ -120,6 +120,7 @@ void *memalign(size_t align, size_t size);
  */
 long int strtol(const char *s, char **nptr, int base);
 unsigned long int strtoul(const char *s, char **nptr, int base);
+unsigned long long int strtoull(const char *s, char **nptr, int base);
 long atol(const char *nptr);
 
 /** @} */
diff --git a/payloads/libpayload/include/sys/stdint.h b/payloads/libpayload/include/sys/stdint.h
new file mode 100644 (file)
index 0000000..c1b1044
--- /dev/null
@@ -0,0 +1,185 @@
+/*     $OpenBSD: stdint.h,v 1.4 2006/12/10 22:17:55 deraadt Exp $      */
+
+/*
+ * Copyright (c) 1997, 2005 Todd C. Miller <Todd.Miller@courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef        _SYS_STDINT_H_
+#define _SYS_STDINT_H_
+
+#include <arch/types.h>
+//#include <sys/cdefs.h>
+//#include <machine/_types.h>
+
+#ifndef        __BIT_TYPES_DEFINED__
+#define        __BIT_TYPES_DEFINED__
+#endif
+
+/* 7.18.1.2 Minimum-width integer types */
+typedef        int8_t          int_least8_t;
+typedef        uint8_t         uint_least8_t;
+typedef        int16_t         int_least16_t;
+typedef        uint16_t        uint_least16_t;
+typedef        int32_t         int_least32_t;
+typedef        uint32_t        uint_least32_t;
+typedef        int64_t         int_least64_t;
+typedef        uint64_t        uint_least64_t;
+
+/* 7.18.1.3 Fastest minimum-width integer types */
+typedef        int8_t          int_fast8_t;
+typedef        uint8_t         uint_fast8_t;
+typedef        int16_t         int_fast16_t;
+typedef        uint16_t        uint_fast16_t;
+typedef        int32_t         int_fast32_t;
+typedef        uint32_t        uint_fast32_t;
+typedef        int64_t         int_fast64_t;
+typedef        uint64_t        uint_fast64_t;
+
+/* 7.18.1.5 Greatest-width integer types */
+typedef        int64_t         intmax_t;
+typedef        uint64_t        uintmax_t;
+
+#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
+/*
+ * 7.18.2 Limits of specified-width integer types.
+ *
+ * The following object-like macros specify the minimum and maximum limits
+ * of integer types corresponding to the typedef names defined above.
+ */
+
+/* 7.18.2.1 Limits of exact-width integer types */
+#define        INT8_MIN                (-0x7f - 1)
+#define        INT16_MIN               (-0x7fff - 1)
+#define        INT32_MIN               (-0x7fffffff - 1)
+#define        INT64_MIN               (-0x7fffffffffffffffLL - 1)
+
+#define        INT8_MAX                0x7f
+#define        INT16_MAX               0x7fff
+#define        INT32_MAX               0x7fffffff
+#define        INT64_MAX               0x7fffffffffffffffLL
+
+#define        UINT8_MAX               0xff
+#define        UINT16_MAX              0xffff
+#define        UINT32_MAX              0xffffffffU
+#define        UINT64_MAX              0xffffffffffffffffULL
+
+/* 7.18.2.2 Limits of minimum-width integer types */
+#define        INT_LEAST8_MIN          INT8_MIN
+#define        INT_LEAST16_MIN         INT16_MIN
+#define        INT_LEAST32_MIN         INT32_MIN
+#define        INT_LEAST64_MIN         INT64_MIN
+
+#define        INT_LEAST8_MAX          INT8_MAX
+#define        INT_LEAST16_MAX         INT16_MAX
+#define        INT_LEAST32_MAX         INT32_MAX
+#define        INT_LEAST64_MAX         INT64_MAX
+
+#define        UINT_LEAST8_MAX         UINT8_MAX
+#define        UINT_LEAST16_MAX        UINT16_MAX
+#define        UINT_LEAST32_MAX        UINT32_MAX
+#define        UINT_LEAST64_MAX        UINT64_MAX
+
+/* 7.18.2.3 Limits of fastest minimum-width integer types */
+#define        INT_FAST8_MIN           INT8_MIN
+#define        INT_FAST16_MIN          INT16_MIN
+#define        INT_FAST32_MIN          INT32_MIN
+#define        INT_FAST64_MIN          INT64_MIN
+
+#define        INT_FAST8_MAX           INT8_MAX
+#define        INT_FAST16_MAX          INT16_MAX
+#define        INT_FAST32_MAX          INT32_MAX
+#define        INT_FAST64_MAX          INT64_MAX
+
+#define        UINT_FAST8_MAX          UINT8_MAX
+#define        UINT_FAST16_MAX         UINT16_MAX
+#define        UINT_FAST32_MAX         UINT32_MAX
+#define        UINT_FAST64_MAX         UINT64_MAX
+
+/* 7.18.2.4 Limits of integer types capable of holding object pointers */
+#ifdef __LP64__
+#define        INTPTR_MIN              INT64_MIN
+#define        INTPTR_MAX              INT64_MAX
+#define        UINTPTR_MAX             UINT64_MAX
+#else
+#define        INTPTR_MIN              INT32_MIN
+#define        INTPTR_MAX              INT32_MAX
+#define        UINTPTR_MAX             UINT32_MAX
+#endif
+
+/* 7.18.2.5 Limits of greatest-width integer types */
+#define        INTMAX_MIN              INT64_MIN
+#define        INTMAX_MAX              INT64_MAX
+#define        UINTMAX_MAX             UINT64_MAX
+
+/*
+ * 7.18.3 Limits of other integer types.
+ *
+ * The following object-like macros specify the minimum and maximum limits
+ * of integer types corresponding to types specified in other standard
+ * header files.
+ */
+
+/* Limits of ptrdiff_t */
+#define        PTRDIFF_MIN             INTPTR_MIN
+#define        PTRDIFF_MAX             INTPTR_MAX
+
+/* Limits of sig_atomic_t */
+#define        SIG_ATOMIC_MIN          INT32_MIN
+#define        SIG_ATOMIC_MAX          INT32_MAX
+
+/* Limits of size_t (also in limits.h) */
+#ifndef        SIZE_MAX
+#define        SIZE_MAX                UINTPTR_MAX
+#endif
+
+/* Limits of wchar_t */
+#define        WCHAR_MIN               INT32_MIN
+#define        WCHAR_MAX               INT32_MAX
+
+/* Limits of wint_t */
+#define        WINT_MIN                INT32_MIN
+#define        WINT_MAX                INT32_MAX
+
+#endif /* __cplusplus || __STDC_LIMIT_MACROS */
+
+#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
+/*
+ * 7.18.4 Macros for integer constants.
+ *
+ * The following function-like macros expand to integer constants
+ * suitable for initializing objects that have integer types corresponding
+ * to types defined in <stdint.h>.  The argument in any instance of
+ * these macros shall be a decimal, octal, or hexadecimal constant with
+ * a value that does not exceed the limits for the corresponding type.
+ */
+
+/* 7.18.4.1 Macros for minimum-width integer constants. */
+#define        INT8_C(_c)              (_c)
+#define        INT16_C(_c)             (_c)
+#define        INT32_C(_c)             (_c)
+#define        INT64_C(_c)             __CONCAT(_c, LL)
+
+#define        UINT8_C(_c)             (_c)
+#define        UINT16_C(_c)            (_c)
+#define        UINT32_C(_c)            __CONCAT(_c, U)
+#define        UINT64_C(_c)            __CONCAT(_c, ULL)
+
+/* 7.18.4.2 Macros for greatest-width integer constants. */
+#define        INTMAX_C(_c)            __CONCAT(_c, LL)
+#define        UINTMAX_C(_c)           __CONCAT(_c, ULL)
+
+#endif /* __cplusplus || __STDC_CONSTANT_MACROS */
+
+#endif /* _SYS_STDINT_H_ */
index 8c6ea99115d3dcef0286656e751bb8f3c7927b13..cfa0b4ada445879e7e7d6f20f2e8971e4bdaf4df 100644 (file)
@@ -32,6 +32,7 @@
 #include <libpayload.h>
 #include <string.h>
 #include <ctype.h>
+#include <inttypes.h>
 #include <errno.h>
 
 /**
@@ -486,9 +487,9 @@ long atol(const char *nptr)
  * @return An unsigned integer representation of the string
  */
 
-unsigned long int strtoul(const char *ptr, char **endptr, int base)
+unsigned long long int strtoull(const char *ptr, char **endptr, int base)
 {
-        int ret = 0;
+        unsigned long long int ret = 0;
 
        if (endptr != NULL)
                *endptr = (char *) ptr;
@@ -535,6 +536,14 @@ unsigned long int strtoul(const char *ptr, char **endptr, int base)
         return ret;
 }
 
+unsigned long int strtoul(const char *ptr, char **endptr, int base)
+{
+       unsigned long long val = strtoull(ptr, endptr, base);
+       if (val > UINT32_MAX) return UINT32_MAX;
+       return val;
+}
+
+
 /**
  * Determine the number of leading characters in s that match characters in a
  * @param s A pointer to the string to analyse