Patrick Georgi ([email protected]) just uploaded a new patch set to 
gerrit, which you can find at http://review.coreboot.org/154

-gerrit

commit c630800f75d9c73def4c36021af7353d4c02d978
Author: Patrick Georgi <[email protected]>
Date:   Tue Jul 26 12:51:59 2011 +0200

    libpayload: Some more compatibility (for flashrom)
    
    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 <[email protected]>
---
 payloads/libpayload/include/inttypes.h   |  267 ++++++++++++++++++++++++++++++
 payloads/libpayload/include/pci/pci.h    |    2 +
 payloads/libpayload/include/stdlib.h     |    1 +
 payloads/libpayload/include/sys/stdint.h |  185 +++++++++++++++++++++
 payloads/libpayload/libc/string.c        |   13 ++-
 5 files changed, 466 insertions(+), 2 deletions(-)

diff --git a/payloads/libpayload/include/inttypes.h 
b/payloads/libpayload/include/inttypes.h
new file mode 100644
index 0000000..922f08a
--- /dev/null
+++ b/payloads/libpayload/include/inttypes.h
@@ -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 <[email protected]>
+ *
+ * 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_ */
diff --git a/payloads/libpayload/include/pci/pci.h 
b/payloads/libpayload/include/pci/pci.h
index 53da0e1..565bdb5 100644
--- a/payloads/libpayload/include/pci/pci.h
+++ b/payloads/libpayload/include/pci/pci.h
@@ -65,6 +65,8 @@
 #define PCI_ROM_ADDRESS1       0x38 // on bridges
 #define PCI_ROM_ADDRESS_MASK   ~0x7ff
 
+#define PCI_VENDOR_ID_INTEL 0x8086
+
 struct pci_dev {
        u16 domain;
        u8 bus, dev, func;
diff --git a/payloads/libpayload/include/stdlib.h 
b/payloads/libpayload/include/stdlib.h
index 47b666a..cf37c80 100644
--- a/payloads/libpayload/include/stdlib.h
+++ b/payloads/libpayload/include/stdlib.h
@@ -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
index 0000000..c1b1044
--- /dev/null
+++ b/payloads/libpayload/include/sys/stdint.h
@@ -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 <[email protected]>
+ *
+ * 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_ */
diff --git a/payloads/libpayload/libc/string.c 
b/payloads/libpayload/libc/string.c
index 8c6ea99..cfa0b4a 100644
--- a/payloads/libpayload/libc/string.c
+++ b/payloads/libpayload/libc/string.c
@@ -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

-- 
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to