Unknown type name uint32/uint16

3

In this header file, I am getting error: unknown type name uint32, uint16. I am new to Objective-C and I am trying to import a project in Xcode. Build is failing due to the above issues. Google didn't help.Tried adding /stdint/stdint.h in header search path ( xcode unknown type name, unknown type name 'uint8_t', MinGW, Xcode - how to include c library and header file to cocoa project?). Build still failing.

   /*-------------------------------------------------------------------------
     *
     * block.h
     *    POSTGRES disk block definitions.
     *
     *
     * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
     * Portions Copyright (c) 1994, Regents of the University of California
     *
     * $PostgreSQL: pgsql/src/include/storage/block.h,v 1.26 2010/01/02 16:58:08 momjian Exp $
     *
     *-------------------------------------------------------------------------
     */
    #ifndef BLOCK_H
    #define BLOCK_H

    /*
     * BlockNumber:
     *
     * each data file (heap or index) is divided into postgres disk blocks
     * (which may be thought of as the unit of i/o -- a postgres buffer
     * contains exactly one disk block).  the blocks are numbered
     * sequentially, 0 to 0xFFFFFFFE.
     *
     * InvalidBlockNumber is the same thing as P_NEW in buf.h.
     *
     * the access methods, the buffer manager and the storage manager are
     * more or less the only pieces of code that should be accessing disk
     * blocks directly.
     */
    typedef uint32 BlockNumber;

    #define InvalidBlockNumber      ((BlockNumber) 0xFFFFFFFF)

    #define MaxBlockNumber          ((BlockNumber) 0xFFFFFFFE)

    /*
     * BlockId:
     *
     * this is a storage type for BlockNumber.  in other words, this type
     * is used for on-disk structures (e.g., in HeapTupleData) whereas
     * BlockNumber is the type on which calculations are performed (e.g.,
     * in access method code).
     *
     * there doesn't appear to be any reason to have separate types except
     * for the fact that BlockIds can be SHORTALIGN'd (and therefore any
     * structures that contains them, such as ItemPointerData, can also be
     * SHORTALIGN'd).  this is an important consideration for reducing the
     * space requirements of the line pointer (ItemIdData) array on each
     * page and the header of each heap or index tuple, so it doesn't seem
     * wise to change this without good reason.
     */
    typedef struct BlockIdData
    {
        uint16      bi_hi;
        uint16      bi_lo;
    } BlockIdData;
objective-c
xcode
xcode4.2
asked on Stack Overflow Mar 8, 2012 by Ava • edited Apr 23, 2020 by endolith

2 Answers

5

The types one should normally use are named like uint32_t (these are defined in C99, header file stdint.h). All others are non-standard and should be avoided if you can. Now in your case, you can't avoid the non-standard types :-) So to make your code compile, you need to map the non-standard names to the standard ones like this:

typedef uint32_t uint32;

You need to add this mapping for all of the types used in PostgreSQL. One way would be either to add them to your precompiled header (.pch) file or to create a header with these typedefs that you #include before you include the PostgreSQL headers.

answered on Stack Overflow Mar 8, 2012 by DarkDust
1

uint32 should UInt32. You'll want to adjust the name or:

typedef UInt32 uint32;
typedef uint32 BlockNumber;
answered on Stack Overflow Mar 8, 2012 by Sandoze

User contributions licensed under CC BY-SA 3.0