bug-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Feature Branch Solaris Build Broken - lib/glob.c errors


From: Conrad T. Pino
Subject: RE: Feature Branch Solaris Build Broken - lib/glob.c errors
Date: Tue, 24 May 2005 12:45:57 -0700

Hi Derek,

> From: Derek Price [mailto:derek@ximbiot.com]
> 
> Adding "#include <sys/stat.h>" to glob_.h doesn't help with this new
> error?  ...

That is correct.  

Neither of (1) uncondition inclusion nor (2) inclusion conditioned upon
"__USE_GNU" made a difference.

> ...  I wouldn't expect this error in glob.c anyhow, since it includes
> <sys/types.h> & <sys/stat.h> unconditionally.  According to POSIX.2,
> struct stat should be defined in <sys/stat.h>.  This same code, short of
> a few recent changes, was compiling and passing tests on Solaris 8 the
> other night.

This platform's "sys/stat.h" uses a *lot* of conditional compilation and
we may have triggered a case where no "struct stat" definition compiles.
I haven't proved this yet and testing this hypothesis is my next line of
investigation unless you favor another.

Can you take a quick look at this platform's "sys/stat.h" (below) to see
if there's something obvious to your greater experience?

> Regards,

Ditto,

> Derek

Conrad

/export/home/cvsusr:$ cat /usr/include/sys/stat.h
/*
 * Copyright (c) 1995-1999 by Sun Microsystems, Inc.
 * All rights reserved.
 */

/*      Copyright (c) 1990, 1991 UNIX System Laboratories, Inc. */
/*      Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T   */
/*      All Rights Reserved     */

/*      THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF          */
/*      UNIX System Laboratories, Inc.                          */
/*      The copyright notice above does not evidence any        */
/*      actual or intended publication of such source code.     */

#ifndef _SYS_STAT_H
#define _SYS_STAT_H

#pragma ident   "@(#)stat.h     1.2     99/05/19 SMI"

#include <sys/feature_tests.h>
#include <sys/types.h>

#ifdef  __cplusplus
extern "C" {
#endif

/*
 * The implementation specific header <sys/time_impl.h> includes a
 * definition for timestruc_t needed by the stat structure.  However,
 * including either <time.h>, which includes <sys/time_impl.h>, or
 * including <sys/time_impl.h> directly will break both X/Open and
 * POSIX namespace. Preceeding tag, structure, and structure member
 * names with underscores eliminates the namespace breakage and at the
 * same time, with unique type names, eliminates the possibility of
 * timespec_t or timestruct_t naming conflicts that could otherwise
 * result based on the order of inclusion of <sys/stat.h> and
 * <sys/time.h>.  The header <sys/time_std_impl.h> contains the
 * standards namespace safe versions of these definitions.
 */
#if !defined(_XOPEN_SOURCE) && !defined(_POSIX_C_SOURCE) || \
        defined(__EXTENSIONS__)
#include <sys/time_impl.h>
#else
#include <sys/time_std_impl.h>
#endif /* !defined(_XOPEN_SOURCE) && !defined(_POSIX_C_SOURCE) || ... */

#define _ST_FSTYPSZ 16          /* array size for file system type name */

/*
 * stat structure, used by stat(2) and fstat(2)
 */

#if defined(_KERNEL)

        /* Old SVID stat struct (SVR3.x) */

struct  o_stat {
        o_dev_t         st_dev;
        o_ino_t         st_ino;
        o_mode_t        st_mode;
        o_nlink_t       st_nlink;
        o_uid_t         st_uid;
        o_gid_t         st_gid;
        o_dev_t         st_rdev;
        off32_t         st_size;
        time32_t        st_atime;
        time32_t        st_mtime;
        time32_t        st_ctime;
};

        /* Expanded stat structure */

#if defined(_LP64)

struct stat {
        dev_t           st_dev;
        ino_t           st_ino;
        mode_t          st_mode;
        nlink_t         st_nlink;
        uid_t           st_uid;
        gid_t           st_gid;
        dev_t           st_rdev;
        off_t           st_size;
        timestruc_t     st_atim;
        timestruc_t     st_mtim;
        timestruc_t     st_ctim;
        blksize_t       st_blksize;
        blkcnt_t        st_blocks;
        char            st_fstype[_ST_FSTYPSZ];
};

struct stat64 {
        dev_t           st_dev;
        ino_t           st_ino;
        mode_t          st_mode;
        nlink_t         st_nlink;
        uid_t           st_uid;
        gid_t           st_gid;
        dev_t           st_rdev;
        off_t           st_size;
        timestruc_t     st_atim;
        timestruc_t     st_mtim;
        timestruc_t     st_ctim;
        blksize_t       st_blksize;
        blkcnt_t        st_blocks;
        char            st_fstype[_ST_FSTYPSZ];
};

#else   /* _LP64 */

struct  stat {
        dev_t           st_dev;
        long            st_pad1[3];     /* reserve for dev expansion, */
                                        /* sysid definition */
        ino_t           st_ino;
        mode_t          st_mode;
        nlink_t         st_nlink;
        uid_t           st_uid;
        gid_t           st_gid;
        dev_t           st_rdev;
        long            st_pad2[2];
        off_t           st_size;
        long            st_pad3;        /* pad for future off_t expansion */
        timestruc_t     st_atim;
        timestruc_t     st_mtim;
        timestruc_t     st_ctim;
        blksize_t       st_blksize;
        blkcnt_t        st_blocks;
        char            st_fstype[_ST_FSTYPSZ];
        long            st_pad4[8];     /* expansion area */
};

struct  stat64 {
        dev_t           st_dev;
        long            st_pad1[3];     /* reserve for dev expansion, */
                                /* sysid definition */
        ino64_t         st_ino;
        mode_t          st_mode;
        nlink_t         st_nlink;
        uid_t           st_uid;
        gid_t           st_gid;
        dev_t           st_rdev;
        long            st_pad2[2];
        off64_t         st_size;        /* large file support */
        timestruc_t     st_atim;
        timestruc_t     st_mtim;
        timestruc_t     st_ctim;
        blksize_t       st_blksize;
        blkcnt64_t      st_blocks;      /* large file support */
        char            st_fstype[_ST_FSTYPSZ];
        long            st_pad4[8];     /* expansion area */
};

#endif  /* _LP64 */

#else /* !defined(_KERNEL) */

/*
 * large file compilation environment setup
 */
#if !defined(_LP64) && _FILE_OFFSET_BITS == 64
#ifdef  __PRAGMA_REDEFINE_EXTNAME
#pragma redefine_extname        fstat   fstat64
#pragma redefine_extname        stat    stat64

#if (!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || \
        defined(_XPG4_2) || defined(__EXTENSIONS__)
#pragma redefine_extname        lstat   lstat64
#endif
#else   /* __PRAGMA_REDEFINE_EXTNAME */
#define fstat   fstat64
#define stat    stat64
#if (!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || \
        defined(_XPG4_2) || defined(__EXTENSIONS__)
#define lstat   lstat64
#endif
#endif  /* __PRAGMA_REDEFINE_EXTNAME */
#endif  /* !_LP64 && _FILE_OFFSET_BITS == 64 */

/*
 * In the LP64 compilation environment, map large file interfaces
 * back to native versions where possible.
 */
#if defined(_LP64) && defined(_LARGEFILE64_SOURCE)
#ifdef  __PRAGMA_REDEFINE_EXTNAME
#pragma redefine_extname        fstat64 fstat
#pragma redefine_extname        stat64  stat
#if (!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || \
        defined(_XPG4_2) || defined(__EXTENSIONS__)
#pragma redefine_extname        lstat64 lstat
#endif
#else   /* __PRAGMA_REDEFINE_EXTNAME */
#define fstat64 fstat
#define stat64  stat
#if (!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || \
        defined(_XPG4_2) || defined(__EXTENSIONS__)
#define lstat64 lstat
#endif
#endif  /* __PRAGMA_REDEFINE_EXTNAME */
#endif  /* _LP64 && _LARGEFILE64_SOURCE */

/*
 * User level stat structure definitions.
 */

#if defined(_LP64)

struct stat {
        dev_t           st_dev;
        ino_t           st_ino;
        mode_t          st_mode;
        nlink_t         st_nlink;
        uid_t           st_uid;
        gid_t           st_gid;
        dev_t           st_rdev;
        off_t           st_size;
#if !defined(_XOPEN_SOURCE) && !defined(_POSIX_C_SOURCE) || \
        defined(__EXTENSIONS__)
        timestruc_t     st_atim;
        timestruc_t     st_mtim;
        timestruc_t     st_ctim;
#else
        _timestruc_t    st_atim;
        _timestruc_t    st_mtim;
        _timestruc_t    st_ctim;
#endif
        blksize_t       st_blksize;
        blkcnt_t        st_blocks;
        char            st_fstype[_ST_FSTYPSZ];
};

#else   /* _LP64 */

struct  stat {
        dev_t           st_dev;
        long            st_pad1[3];     /* reserved for network id */
        ino_t           st_ino;
        mode_t          st_mode;
        nlink_t         st_nlink;
        uid_t           st_uid;
        gid_t           st_gid;
        dev_t           st_rdev;
        long            st_pad2[2];
        off_t           st_size;
#if _FILE_OFFSET_BITS != 64
        long            st_pad3;        /* future off_t expansion */
#endif
#if !defined(_XOPEN_SOURCE) && !defined(_POSIX_C_SOURCE) || \
        defined(__EXTENSIONS__)
        timestruc_t     st_atim;
        timestruc_t     st_mtim;
        timestruc_t     st_ctim;
#else
        _timestruc_t    st_atim;
        _timestruc_t    st_mtim;
        _timestruc_t    st_ctim;
#endif
        blksize_t       st_blksize;
        blkcnt_t        st_blocks;
        char            st_fstype[_ST_FSTYPSZ];
        long            st_pad4[8];     /* expansion area */
};

#endif  /* _LP64 */

/* transitional large file interface version */
#if     defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
            !defined(__PRAGMA_REDEFINE_EXTNAME))
#if defined(_LP64)

struct stat64 {
        dev_t           st_dev;
        ino_t           st_ino;
        mode_t          st_mode;
        nlink_t         st_nlink;
        uid_t           st_uid;
        gid_t           st_gid;
        dev_t           st_rdev;
        off_t           st_size;
#if !defined(_XOPEN_SOURCE) && !defined(_POSIX_C_SOURCE) || \
        defined(__EXTENSIONS__)
        timestruc_t     st_atim;
        timestruc_t     st_mtim;
        timestruc_t     st_ctim;
#else
        _timestruc_t    st_atim;
        _timestruc_t    st_mtim;
        _timestruc_t    st_ctim;
#endif
        blksize_t       st_blksize;
        blkcnt_t        st_blocks;
        char            st_fstype[_ST_FSTYPSZ];
};

#else   /* _LP64 */

struct  stat64 {
        dev_t           st_dev;
        long            st_pad1[3];     /* reserved for network id */
        ino64_t         st_ino;
        mode_t          st_mode;
        nlink_t         st_nlink;
        uid_t           st_uid;
        gid_t           st_gid;
        dev_t           st_rdev;
        long            st_pad2[2];
        off64_t         st_size;
#if !defined(_XOPEN_SOURCE) && !defined(_POSIX_C_SOURCE) || \
        defined(__EXTENSIONS__)
        timestruc_t     st_atim;
        timestruc_t     st_mtim;
        timestruc_t     st_ctim;
#else
        _timestruc_t    st_atim;
        _timestruc_t    st_mtim;
        _timestruc_t    st_ctim;
#endif
        blksize_t       st_blksize;
        blkcnt64_t      st_blocks;
        char            st_fstype[_ST_FSTYPSZ];
        long            st_pad4[8];     /* expansion area */
};

#endif  /* _LP64 */
#endif

#if !defined(_XOPEN_SOURCE) && !defined(_POSIX_C_SOURCE) || \
        defined(__EXTENSIONS__)
#define st_atime        st_atim.tv_sec
#define st_mtime        st_mtim.tv_sec
#define st_ctime        st_ctim.tv_sec
#else
#define st_atime        st_atim.__tv_sec
#define st_mtime        st_mtim.__tv_sec
#define st_ctime        st_ctim.__tv_sec
#endif /* !defined(_XOPEN_SOURCE) && !defined(_POSIX_C_SOURCE) || ... */

#endif /* end defined(_KERNEL) */

#if defined(_SYSCALL32)

/*
 * Kernel's view of user ILP32 stat and stat64 structures
 */

struct stat32 {
        dev32_t         st_dev;
        int32_t         st_pad1[3];
        ino32_t         st_ino;
        mode32_t        st_mode;
        nlink32_t       st_nlink;
        uid32_t         st_uid;
        gid32_t         st_gid;
        dev32_t         st_rdev;
        int32_t         st_pad2[2];
        off32_t         st_size;
        int32_t         st_pad3;
        timestruc32_t   st_atim;
        timestruc32_t   st_mtim;
        timestruc32_t   st_ctim;
        int32_t         st_blksize;
        blkcnt32_t      st_blocks;
        char            st_fstype[_ST_FSTYPSZ];
        int32_t         st_pad4[8];
};

#ifdef __ia64
#pragma pack(4)         /* data offset compatibility with ia32 */
#endif
struct stat64_32 {
        dev32_t         st_dev;
        int32_t         st_pad1[3];
        ino64_t         st_ino;
        mode32_t        st_mode;
        nlink32_t       st_nlink;
        uid32_t         st_uid;
        gid32_t         st_gid;
        dev32_t         st_rdev;
        int32_t         st_pad2[2];
        off64_t         st_size;
        timestruc32_t   st_atim;
        timestruc32_t   st_mtim;
        timestruc32_t   st_ctim;
        int32_t         st_blksize;
        blkcnt64_t      st_blocks;
        char            st_fstype[_ST_FSTYPSZ];
        int32_t         st_pad4[8];
};
#ifdef __ia64
#pragma pack()
#endif

#endif  /* _SYSCALL32 */

/* MODE MASKS */

/* de facto standard definitions */

#define S_IFMT          0xF000  /* type of file */
#define S_IAMB          0x1FF   /* access mode bits */
#define S_IFIFO         0x1000  /* fifo */
#define S_IFCHR         0x2000  /* character special */
#define S_IFDIR         0x4000  /* directory */
#define S_IFNAM         0x5000  /* XENIX special named file */
#define S_INSEM         0x1     /* XENIX semaphore subtype of IFNAM */
#define S_INSHD         0x2     /* XENIX shared data subtype of IFNAM */
#define S_IFBLK         0x6000  /* block special */
#define S_IFREG         0x8000  /* regular */
#define S_IFLNK         0xA000  /* symbolic link */
#define S_IFSOCK        0xC000  /* socket */
#define S_IFDOOR        0xD000  /* door */
#define S_ISUID         0x800   /* set user id on execution */
#define S_ISGID         0x400   /* set group id on execution */
#define S_ISVTX         0x200   /* save swapped text even after use */
#define S_IREAD         00400   /* read permission, owner */
#define S_IWRITE        00200   /* write permission, owner */
#define S_IEXEC         00100   /* execute/search permission, owner */
#define S_ENFMT         S_ISGID /* record locking enforcement flag */

/* the following macros are for POSIX conformance */

#define S_IRWXU         00700   /* read, write, execute: owner */
#define S_IRUSR         00400   /* read permission: owner */
#define S_IWUSR         00200   /* write permission: owner */
#define S_IXUSR         00100   /* execute permission: owner */
#define S_IRWXG         00070   /* read, write, execute: group */
#define S_IRGRP         00040   /* read permission: group */
#define S_IWGRP         00020   /* write permission: group */
#define S_IXGRP         00010   /* execute permission: group */
#define S_IRWXO         00007   /* read, write, execute: other */
#define S_IROTH         00004   /* read permission: other */
#define S_IWOTH         00002   /* write permission: other */
#define S_IXOTH         00001   /* execute permission: other */


#define S_ISFIFO(mode)  (((mode)&0xF000) == 0x1000)
#define S_ISCHR(mode)   (((mode)&0xF000) == 0x2000)
#define S_ISDIR(mode)   (((mode)&0xF000) == 0x4000)
#define S_ISBLK(mode)   (((mode)&0xF000) == 0x6000)
#define S_ISREG(mode)   (((mode)&0xF000) == 0x8000)
#define S_ISLNK(mode)   (((mode)&0xF000) == 0xa000)
#define S_ISSOCK(mode)  (((mode)&0xF000) == 0xc000)
#define S_ISDOOR(mode)  (((mode)&0xF000) == 0xd000)

/* POSIX.4 macros */
#define S_TYPEISMQ(_buf)        (0)
#define S_TYPEISSEM(_buf)       (0)
#define S_TYPEISSHM(_buf)       (0)

#if defined(i386) || defined(__i386) || (defined(__ia64) && defined(_KERNEL))
/*
 * A version number is included in the x86 SVR4 stat and mknod interfaces
 * so that SVR3 binaries can be supported.  The ia64 kernel needs to be
 * aware of this because it supports x86 applications too.
 */

#define _R3_MKNOD_VER   1       /* SVR3.0 mknod */
#define _MKNOD_VER      2       /* current version of mknod */
#define _R3_STAT_VER    1       /* SVR3.0 stat */
#define _STAT_VER       2       /* current version of stat */
#endif

#if !defined(_KERNEL)

#if defined(__STDC__)

#if (!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || \
        (_POSIX_C_SOURCE > 2) || defined(_XPG4_2) || \
        defined(__EXTENSIONS__)
extern int fchmod(int, mode_t);
#endif /* (!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || ... */

extern int chmod(const char *, mode_t);
extern int mkdir(const char *, mode_t);
extern int mkfifo(const char *, mode_t);
extern mode_t umask(mode_t);

/* transitional large file interfaces */
#if     defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
            !defined(__PRAGMA_REDEFINE_EXTNAME))
extern int fstat64(int, struct stat64 *);
extern int stat64(const char *, struct stat64 *);
extern int lstat64(const char *, struct stat64 *);
#endif

#else /* !__STDC__ */

#if !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE) || \
        (_POSIX_C_SOURCE > 2) || defined(_XPG4_2) || \
        defined(__EXTENSIONS__)
extern int fchmod();
#endif /* !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE) || ... */

extern int chmod();
extern int mkdir();
extern int mkfifo();
extern mode_t umask();

/* transitional large file interfaces */
#if     defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
            !defined(__PRAGMA_REDEFINE_EXTNAME))
extern int fstat64();
extern int stat64();
extern int lstat64();
#endif

#endif /* defined(__STDC__) */

#include <sys/stat_impl.h>

#endif /* !defined(_KERNEL) */

#ifdef  __cplusplus
}
#endif

#endif  /* _SYS_STAT_H */
/export/home/cvsusr:$ 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]