#define _WDIRECT_DEFINED
#endif /* _WDIRECT_DEFINED */
+/* @TODO: Use sys/stat.h to define these instead of duplicated code. */
#ifndef _STAT_DEFINED
/*
* The structure manipulated and returned by stat and fstat.
#ifndef __STRICT_ANSI__
struct stat {
- _dev_t st_dev; /* Equivalent to drive number 0=A 1=B ... */
- _ino_t st_ino; /* Always zero ? */
- _mode_t st_mode; /* See above constants */
- short st_nlink; /* Number of links. */
- short st_uid; /* User: Maybe significant on NT ? */
- short st_gid; /* Group: Ditto */
- _dev_t st_rdev; /* Seems useless (not even filled in) */
- _off_t st_size; /* File size in bytes */
- time_t st_atime; /* Accessed date (always 00:00 hrs local
- * on FAT) */
- time_t st_mtime; /* Modified time */
- time_t st_ctime; /* Creation time */
-} ;
+ _dev_t st_dev; /* Equivalent to drive number 0=A 1=B ... */
+ _ino_t st_ino; /* Always zero ? */
+ _mode_t st_mode; /* See above constants */
+ short st_nlink; /* Number of links. */
+ short st_uid; /* User: Maybe significant on NT ? */
+ short st_gid; /* Group: Ditto */
+ _dev_t st_rdev; /* Seems useless (not even filled in) */
+ _off_t st_size; /* File size in bytes */
+ time_t st_atime; /* Accessed date (always 00:00 hrs local
+ * on FAT) */
+ time_t st_mtime; /* Modified time */
+ time_t st_ctime; /* Creation time */
+};
#endif /* __STRICT_ANSI__ */
struct _stat64 {
- dev_t st_dev; /* Equivalent to drive number 0=A 1=B ... */
- ino_t st_ino; /* Always zero ? */
- mode_t st_mode; /* See above constants */
- short st_nlink; /* Number of links. */
- short st_uid; /* User: Maybe significant on NT ? */
- short st_gid; /* Group: Ditto */
- dev_t st_rdev; /* Seems useless (not even filled in) */
- _off64_t st_size; /* File size in bytes */
+ dev_t st_dev; /* Equivalent to drive number 0=A 1=B ... */
+ ino_t st_ino; /* Always zero ? */
+ mode_t st_mode; /* See above constants */
+ short st_nlink; /* Number of links. */
+ short st_uid; /* User: Maybe significant on NT ? */
+ short st_gid; /* Group: Ditto */
+ dev_t st_rdev; /* Seems useless (not even filled in) */
+ _off64_t st_size; /* File size in bytes */
__time64_t st_atime; /* Accessed date (always 00:00 hrs local
* on FAT) */
__time64_t st_mtime; /* Modified time */
__time32_t st_atime;
__time32_t st_mtime;
__time32_t st_ctime;
-} ;
+};
struct _stat64i32 {
_dev_t st_dev;
__time64_t st_ctime;
};
+/* _stat32 does not exist in MSVCRT.DLL */
+_CRTIMP int __cdecl __MINGW_NOTHROW _stat (const char*, struct _stat32*);
+_CRTALIAS int __cdecl __MINGW_NOTHROW _stat32 (const char* _v1, struct _stat32* _v2) {
+ return _stat(_v1, _v2);
+}
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _stat64 (const char*, struct _stat64*);
+int __cdecl __MINGW_NOTHROW _stat32i64 (const char*, struct _stat32i64*);
+int __cdecl __MINGW_NOTHROW _stat64i32 (const char*, struct _stat64i32*);
+
+/* _fstat32 does not exist in MSVCRT.DLL */
+_CRTIMP int __cdecl __MINGW_NOTHROW _fstat (int, struct _stat32*);
+_CRTALIAS int __cdecl __MINGW_NOTHROW _fstat32 (int _v1, struct _stat32* _v2) {
+ return _fstat(_v1, _v2);
+}
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _fstat64 (int, struct _stat64*);
+int __cdecl __MINGW_NOTHROW _fstat32i64 (int, struct _stat32i64*);
+int __cdecl __MINGW_NOTHROW _fstat64i32 (int, struct _stat64i32*);
+
+__CRT_MAYBE_INLINE int __cdecl _fstat64i32(int desc, struct _stat64i32 *_stat) {
+ struct _stat64 st;
+ int ret = _fstat64(desc, &st);
+ if (ret == -1) {
+ memset(_stat, 0, sizeof(struct _stat64i32));
+ return -1;
+ }
+ _stat->st_dev = st.st_dev;
+ _stat->st_ino = st.st_ino;
+ _stat->st_mode = st.st_mode;
+ _stat->st_nlink = st.st_nlink;
+ _stat->st_uid = st.st_uid;
+ _stat->st_gid = st.st_gid;
+ _stat->st_rdev = st.st_rdev;
+ _stat->st_size = (_off_t) st.st_size;
+ _stat->st_atime = st.st_atime;
+ _stat->st_mtime = st.st_mtime;
+ _stat->st_ctime = st.st_ctime;
+ return ret;
+}
+__CRT_MAYBE_INLINE int __cdecl _fstat32i64(int desc, struct _stat32i64 *_stat) {
+ struct _stat32 st;
+ int ret = _fstat32(desc, &st);
+ if (ret == -1) {
+ memset(_stat, 0, sizeof(struct _stat32i64));
+ return -1;
+ }
+ _stat->st_dev = st.st_dev;
+ _stat->st_ino = st.st_ino;
+ _stat->st_mode = st.st_mode;
+ _stat->st_nlink = st.st_nlink;
+ _stat->st_uid = st.st_uid;
+ _stat->st_gid = st.st_gid;
+ _stat->st_rdev = st.st_rdev;
+ _stat->st_size = (_off_t) st.st_size;
+ _stat->st_atime = st.st_atime;
+ _stat->st_mtime = st.st_mtime;
+ _stat->st_ctime = st.st_ctime;
+ return ret;
+}
+__CRT_MAYBE_INLINE int __cdecl _stat64i32(const char *fname, struct _stat64i32 *_stat) {
+ struct _stat64 st;
+ int ret = _stat64(fname, &st);
+ if (ret == -1) {
+ memset(_stat, 0, sizeof(struct _stat64i32));
+ return -1;
+ }
+ _stat->st_dev = st.st_dev;
+ _stat->st_ino = st.st_ino;
+ _stat->st_mode = st.st_mode;
+ _stat->st_nlink = st.st_nlink;
+ _stat->st_uid = st.st_uid;
+ _stat->st_gid = st.st_gid;
+ _stat->st_rdev = st.st_rdev;
+ _stat->st_size = (_off_t) st.st_size;
+ _stat->st_atime = st.st_atime;
+ _stat->st_mtime = st.st_mtime;
+ _stat->st_ctime = st.st_ctime;
+ return ret;
+}
+__CRT_MAYBE_INLINE int __cdecl _stat32i64(const char *fname, struct _stat32i64 *_stat) {
+ struct _stat32 st;
+ int ret = _stat32(fname, &st);
+ if (ret == -1) {
+ memset(_stat, 0, sizeof(struct _stat32i64));
+ return -1;
+ }
+ _stat->st_dev = st.st_dev;
+ _stat->st_ino = st.st_ino;
+ _stat->st_mode = st.st_mode;
+ _stat->st_nlink = st.st_nlink;
+ _stat->st_uid = st.st_uid;
+ _stat->st_gid = st.st_gid;
+ _stat->st_rdev = st.st_rdev;
+ _stat->st_size = (_off_t) st.st_size;
+ _stat->st_atime = st.st_atime;
+ _stat->st_mtime = st.st_mtime;
+ _stat->st_ctime = st.st_ctime;
+ return ret;
+}
+
#define __stat64 _stat64
#if defined(_USE_32BIT_TIME_T)
#define _fstat _fstat32
#define _fstati64 _fstat32i64
#define _stat _stat32
#define _stati64 _stat32i64
-#else /* ! _USE_32BIT_TIME_T */
+
+#else /* !_USE_32BIT_TIME_T */
#define _fstat _fstat64i32
#define _fstati64 _fstat64
#define _stat _stat64i32
#define _stati64 _stat64
+
#endif /* _USE_32BIT_TIME_T */
#define _STAT_DEFINED
-#endif /* ! _STAT_DEFINED */
+
+#endif /* _STAT_DEFINED */
#if !defined ( _WSTAT_DEFINED) /* also declared in sys/stat.h */
/* _wstat32 does not exist in MSVCRT.DLL */