diff druntime/import/core/sys/posix/sys/stat.d @ 1458:e0b2d67cfe7c

Added druntime (this should be removed once it works).
author Robert Clipsham <robert@octarineparrot.com>
date Tue, 02 Jun 2009 17:43:06 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/druntime/import/core/sys/posix/sys/stat.d	Tue Jun 02 17:43:06 2009 +0100
@@ -0,0 +1,425 @@
+/**
+ * D header file for POSIX.
+ *
+ * Copyright: Copyright Sean Kelly 2005 - 2009.
+ * License:   <a href="http://www.boost.org/LICENSE_1_0.txt>Boost License 1.0</a>.
+ * Authors:   Sean Kelly
+ * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
+ *
+ *          Copyright Sean Kelly 2005 - 2009.
+ * Distributed under the Boost Software License, Version 1.0.
+ *    (See accompanying file LICENSE_1_0.txt or copy at
+ *          http://www.boost.org/LICENSE_1_0.txt)
+ */
+module core.sys.posix.sys.stat;
+
+private import core.sys.posix.config;
+private import core.stdc.stdint;
+private import core.sys.posix.time;     // for timespec
+public import core.stdc.stddef;          // for size_t
+public import core.sys.posix.sys.types; // for off_t, mode_t
+
+extern (C):
+
+//
+// Required
+//
+/*
+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;
+    off_t   st_size;
+    time_t  st_atime;
+    time_t  st_mtime;
+    time_t  st_ctime;
+}
+
+S_IRWXU
+    S_IRUSR
+    S_IWUSR
+    S_IXUSR
+S_IRWXG
+    S_IRGRP
+    S_IWGRP
+    S_IXGRP
+S_IRWXO
+    S_IROTH
+    S_IWOTH
+    S_IXOTH
+S_ISUID
+S_ISGID
+S_ISVTX
+
+S_ISBLK(m)
+S_ISCHR(m)
+S_ISDIR(m)
+S_ISFIFO(m)
+S_ISREG(m)
+S_ISLNK(m)
+S_ISSOCK(m)
+
+S_TYPEISMQ(buf)
+S_TYPEISSEM(buf)
+S_TYPEISSHM(buf)
+
+int    chmod(in char*, mode_t);
+int    fchmod(int, mode_t);
+int    fstat(int, stat*);
+int    lstat(in char*, stat*);
+int    mkdir(in char*, mode_t);
+int    mkfifo(in char*, mode_t);
+int    stat(in char*, stat*);
+mode_t umask(mode_t);
+*/
+
+version( linux )
+{
+    static if( __USE_LARGEFILE64 )
+    {
+        private alias uint _pad_t;
+    }
+    else
+    {
+        private alias ushort _pad_t;
+    }
+
+    struct stat_t
+    {
+        dev_t       st_dev;
+        _pad_t      __pad1;
+      static if( __USE_FILE_OFFSET64 )
+      {
+        ino_t       __st_ino;
+      }
+      else
+      {
+        ino_t       st_ino;
+      }
+        mode_t      st_mode;
+        nlink_t     st_nlink;
+        uid_t       st_uid;
+        gid_t       st_gid;
+        dev_t       st_rdev;
+        _pad_t      __pad2;
+        off_t       st_size;
+        blksize_t   st_blksize;
+        blkcnt_t    st_blocks;
+      static if( false /*__USE_MISC*/ ) // true if _BSD_SOURCE || _SVID_SOURCE
+      {
+        timespec    st_atim;
+        timespec    st_mtim;
+        timespec    st_ctim;
+        alias st_atim.tv_sec st_atime;
+        alias st_mtim.tv_sec st_mtime;
+        alias st_ctim.tv_sec st_ctime;
+      }
+      else
+      {
+        time_t      st_atime;
+        c_ulong     st_atimensec;
+        time_t      st_mtime;
+        c_ulong     st_mtimensec;
+        time_t      st_ctime;
+        c_ulong     st_ctimensec;
+      }
+      static if( __USE_FILE_OFFSET64 )
+      {
+        ino_t       st_ino;
+      }
+      else
+      {
+        c_ulong     __unused4;
+        c_ulong     __unused5;
+      }
+    }
+
+    enum S_IRUSR    = 0400;
+    enum S_IWUSR    = 0200;
+    enum S_IXUSR    = 0100;
+    enum S_IRWXU    = S_IRUSR | S_IWUSR | S_IXUSR;
+
+    enum S_IRGRP    = S_IRUSR >> 3;
+    enum S_IWGRP    = S_IWUSR >> 3;
+    enum S_IXGRP    = S_IXUSR >> 3;
+    enum S_IRWXG    = S_IRWXU >> 3;
+
+    enum S_IROTH    = S_IRGRP >> 3;
+    enum S_IWOTH    = S_IWGRP >> 3;
+    enum S_IXOTH    = S_IXGRP >> 3;
+    enum S_IRWXO    = S_IRWXG >> 3;
+
+    enum S_ISUID    = 04000;
+    enum S_ISGID    = 02000;
+    enum S_ISVTX    = 01000;
+
+    private
+    {
+        extern (D) bool S_ISTYPE( mode_t mode, uint mask )
+        {
+            return ( mode & S_IFMT ) == mask;
+        }
+    }
+
+    extern (D) bool S_ISBLK( mode_t mode )  { return S_ISTYPE( mode, S_IFBLK );  }
+    extern (D) bool S_ISCHR( mode_t mode )  { return S_ISTYPE( mode, S_IFCHR );  }
+    extern (D) bool S_ISDIR( mode_t mode )  { return S_ISTYPE( mode, S_IFDIR );  }
+    extern (D) bool S_ISFIFO( mode_t mode ) { return S_ISTYPE( mode, S_IFIFO );  }
+    extern (D) bool S_ISREG( mode_t mode )  { return S_ISTYPE( mode, S_IFREG );  }
+    extern (D) bool S_ISLNK( mode_t mode )  { return S_ISTYPE( mode, S_IFLNK );  }
+    extern (D) bool S_ISSOCK( mode_t mode ) { return S_ISTYPE( mode, S_IFSOCK ); }
+
+    static if( true /*__USE_POSIX199309*/ )
+    {
+        extern bool S_TYPEISMQ( stat_t* buf )  { return false; }
+        extern bool S_TYPEISSEM( stat_t* buf ) { return false; }
+        extern bool S_TYPEISSHM( stat_t* buf ) { return false; }
+    }
+}
+else version( OSX )
+{
+    struct stat_t
+    {
+        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;
+      static if( false /*!_POSIX_C_SOURCE || _DARWIN_C_SOURCE*/ )
+      {
+          timespec  st_atimespec;
+          timespec  st_mtimespec;
+          timespec  st_ctimespec;          
+      }
+      else
+      {
+        time_t      st_atime;
+        c_long      st_atimensec;
+        time_t      st_mtime;
+        c_long      st_mtimensec;
+        time_t      st_ctime;
+        c_long      st_ctimensec;
+      }
+        off_t       st_size;
+        blkcnt_t    st_blocks;
+        blksize_t   st_blksize;
+        uint        st_flags;
+        uint        st_gen;
+        int         st_lspare;
+        long        st_qspare[2];
+    }
+
+    enum S_IRUSR    = 0400;
+    enum S_IWUSR    = 0200;
+    enum S_IXUSR    = 0100;
+    enum S_IRWXU    = S_IRUSR | S_IWUSR | S_IXUSR;
+
+    enum S_IRGRP    = S_IRUSR >> 3;
+    enum S_IWGRP    = S_IWUSR >> 3;
+    enum S_IXGRP    = S_IXUSR >> 3;
+    enum S_IRWXG    = S_IRWXU >> 3;
+
+    enum S_IROTH    = S_IRGRP >> 3;
+    enum S_IWOTH    = S_IWGRP >> 3;
+    enum S_IXOTH    = S_IXGRP >> 3;
+    enum S_IRWXO    = S_IRWXG >> 3;
+
+    enum S_ISUID    = 04000;
+    enum S_ISGID    = 02000;
+    enum S_ISVTX    = 01000;
+
+    private
+    {
+        extern (D) bool S_ISTYPE( mode_t mode, uint mask )
+        {
+            return ( mode & S_IFMT ) == mask;
+        }
+    }
+
+    extern (D) bool S_ISBLK( mode_t mode )  { return S_ISTYPE( mode, S_IFBLK );  }
+    extern (D) bool S_ISCHR( mode_t mode )  { return S_ISTYPE( mode, S_IFCHR );  }
+    extern (D) bool S_ISDIR( mode_t mode )  { return S_ISTYPE( mode, S_IFDIR );  }
+    extern (D) bool S_ISFIFO( mode_t mode ) { return S_ISTYPE( mode, S_IFIFO );  }
+    extern (D) bool S_ISREG( mode_t mode )  { return S_ISTYPE( mode, S_IFREG );  }
+    extern (D) bool S_ISLNK( mode_t mode )  { return S_ISTYPE( mode, S_IFLNK );  }
+    extern (D) bool S_ISSOCK( mode_t mode ) { return S_ISTYPE( mode, S_IFSOCK ); }
+}
+else version( freebsd )
+{
+    struct stat_t
+    {
+        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;
+
+        timespec st_atimespec;
+        timespec st_mtimespec;
+        timespec st_ctimespec;
+        time_t st_atime()
+        {
+            return st_atimespec.tv_sec;
+        }
+        time_t st_mtime()
+        {
+            return st_mtimespec.tv_sec;
+        }
+        time_t st_ctime()
+        {
+            return st_ctimespec.tv_sec;
+        }
+
+        off_t       st_size;
+        blkcnt_t    st_blocks;
+        blksize_t   st_blksize;
+        fflags_t    st_flags;
+        uint        st_gen;
+        int         st_lspare;
+        timespec    st_birthtimespec;
+
+        byte[16 - timespec.sizeof] padding;
+    }
+
+    enum S_IRUSR    = 0000400;
+    enum S_IWUSR    = 0000200;
+    enum S_IXUSR    = 0000100;
+    enum S_IRWXU    = 0000700;
+
+    enum S_IRGRP    = 0000040;
+    enum S_IWGRP    = 0000020;
+    enum S_IXGRP    = 0000010;
+    enum S_IRWXG    = 0000070;
+
+    enum S_IROTH    = 0000004;
+    enum S_IWOTH    = 0000002;
+    enum S_IXOTH    = 0000001;
+    enum S_IRWXO    = 0000007;
+
+    enum S_ISUID    = 0004000;
+    enum S_ISGID    = 0002000;
+    enum S_ISVTX    = 0001000;
+
+    private
+    {
+        extern (D) bool S_ISTYPE( mode_t mode, uint mask )
+        {
+            return ( mode & S_IFMT ) == mask;
+        }
+    }
+
+    extern (D) bool S_ISBLK( mode_t mode )  { return S_ISTYPE( mode, S_IFBLK );  }
+    extern (D) bool S_ISCHR( mode_t mode )  { return S_ISTYPE( mode, S_IFCHR );  }
+    extern (D) bool S_ISDIR( mode_t mode )  { return S_ISTYPE( mode, S_IFDIR );  }
+    extern (D) bool S_ISFIFO( mode_t mode ) { return S_ISTYPE( mode, S_IFIFO );  }
+    extern (D) bool S_ISREG( mode_t mode )  { return S_ISTYPE( mode, S_IFREG );  }
+    extern (D) bool S_ISLNK( mode_t mode )  { return S_ISTYPE( mode, S_IFLNK );  }
+    extern (D) bool S_ISSOCK( mode_t mode ) { return S_ISTYPE( mode, S_IFSOCK ); }
+}
+
+int    chmod(in char*, mode_t);
+int    fchmod(int, mode_t);
+//int    fstat(int, stat_t*);
+//int    lstat(in char*, stat_t*);
+int    mkdir(in char*, mode_t);
+int    mkfifo(in char*, mode_t);
+//int    stat(in char*, stat_t*);
+mode_t umask(mode_t);
+
+version( linux )
+{
+  static if( __USE_LARGEFILE64 )
+  {
+    int   fstat64(int, stat_t*);
+    alias fstat64 fstat;
+
+    int   lstat64(in char*, stat_t*);
+    alias lstat64 lstat;
+
+    int   stat64(in char*, stat_t*);
+    alias stat64 stat;
+  }
+  else
+  {
+    int   fstat(int, stat_t*);
+    int   lstat(in char*, stat_t*);
+    int   stat(in char*, stat_t*);
+  }
+}
+else
+{
+    int   fstat(int, stat_t*);
+    int   lstat(in char*, stat_t*);
+    int   stat(in char*, stat_t*);
+}
+
+//
+// Typed Memory Objects (TYM)
+//
+/*
+S_TYPEISTMO(buf)
+*/
+
+//
+// XOpen (XSI)
+//
+/*
+S_IFMT
+S_IFBLK
+S_IFCHR
+S_IFIFO
+S_IFREG
+S_IFDIR
+S_IFLNK
+S_IFSOCK
+
+int mknod(in 3char*, mode_t, dev_t);
+*/
+
+version( linux )
+{
+    enum S_IFMT     = 0170000;
+    enum S_IFBLK    = 0060000;
+    enum S_IFCHR    = 0020000;
+    enum S_IFIFO    = 0010000;
+    enum S_IFREG    = 0100000;
+    enum S_IFDIR    = 0040000;
+    enum S_IFLNK    = 0120000;
+    enum S_IFSOCK   = 0140000;
+
+    int mknod(in char*, mode_t, dev_t);
+}
+else version( OSX )
+{
+    enum S_IFMT     = 0170000;
+    enum S_IFBLK    = 0060000;
+    enum S_IFCHR    = 0020000;
+    enum S_IFIFO    = 0010000;
+    enum S_IFREG    = 0100000;
+    enum S_IFDIR    = 0040000;
+    enum S_IFLNK    = 0120000;
+    enum S_IFSOCK   = 0140000;
+
+    int mknod(in char*, mode_t, dev_t);
+}
+else version( freebsd )
+{
+    enum S_IFMT     = 0170000;
+    enum S_IFBLK    = 0060000;
+    enum S_IFCHR    = 0020000;
+    enum S_IFIFO    = 0010000;
+    enum S_IFREG    = 0100000;
+    enum S_IFDIR    = 0040000;
+    enum S_IFLNK    = 0120000;
+    enum S_IFSOCK   = 0140000;
+
+    int mknod(in char*, mode_t, dev_t);
+}