1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6#ifndef _IO_H_
7#define _IO_H_
8
9#include <crtdefs.h>
10#include <string.h>
11
12#pragma pack(push,_CRT_PACKING)
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
18_CRTIMP char* __cdecl _getcwd (char*, int);
19#ifndef _FSIZE_T_DEFINED
20  typedef unsigned long _fsize_t;
21#define _FSIZE_T_DEFINED
22#endif
23
24#ifndef _FINDDATA_T_DEFINED
25
26  struct _finddata32_t {
27    unsigned attrib;
28    __time32_t time_create;
29    __time32_t time_access;
30    __time32_t time_write;
31    _fsize_t size;
32    char name[260];
33  };
34
35  struct _finddata32i64_t {
36    unsigned attrib;
37    __time32_t time_create;
38    __time32_t time_access;
39    __time32_t time_write;
40    __MINGW_EXTENSION __int64 size;
41    char name[260];
42  };
43
44  struct _finddata64i32_t {
45    unsigned attrib;
46    __time64_t time_create;
47    __time64_t time_access;
48    __time64_t time_write;
49    _fsize_t size;
50    char name[260];
51  };
52
53  struct __finddata64_t {
54    unsigned attrib;
55    __time64_t time_create;
56    __time64_t time_access;
57    __time64_t time_write;
58    __MINGW_EXTENSION __int64 size;
59    char name[260];
60  };
61
62#ifdef _USE_32BIT_TIME_T
63#define _finddata_t _finddata32_t
64#define _finddatai64_t _finddata32i64_t
65
66#define _findfirst32 _findfirst
67#define _findnext32 _findnext
68#define _findfirsti64 _findfirst32i64
69#define _findnexti64 _findnext32i64
70#else
71#define _finddata_t _finddata64i32_t
72#define _finddatai64_t __finddata64_t
73
74#define _findfirst _findfirst64i32
75#define _findnext _findnext64i32
76#define _findfirsti64 _findfirst64
77#define _findnexti64 _findnext64
78#endif /* _USE_32BIT_TIME_T */
79
80#define _FINDDATA_T_DEFINED
81#endif /* _FINDDATA_T_DEFINED */
82
83#ifndef _WFINDDATA_T_DEFINED
84
85  struct _wfinddata32_t {
86    unsigned attrib;
87    __time32_t time_create;
88    __time32_t time_access;
89    __time32_t time_write;
90    _fsize_t size;
91    wchar_t name[260];
92  };
93
94  struct _wfinddata32i64_t {
95    unsigned attrib;
96    __time32_t time_create;
97    __time32_t time_access;
98    __time32_t time_write;
99    __MINGW_EXTENSION __int64 size;
100    wchar_t name[260];
101  };
102
103  struct _wfinddata64i32_t {
104    unsigned attrib;
105    __time64_t time_create;
106    __time64_t time_access;
107    __time64_t time_write;
108    _fsize_t size;
109    wchar_t name[260];
110  };
111
112  struct _wfinddata64_t {
113    unsigned attrib;
114    __time64_t time_create;
115    __time64_t time_access;
116    __time64_t time_write;
117    __MINGW_EXTENSION __int64 size;
118    wchar_t name[260];
119  };
120
121#ifdef _USE_32BIT_TIME_T
122#define _wfinddata_t _wfinddata32_t
123#define _wfinddatai64_t _wfinddata32i64_t
124
125#define _wfindfirst32 _wfindfirst
126#define _wfindnext32 _wfindnext
127#define _wfindfirst32i64 _wfindfirsti64
128#define _wfindnext32i64 _wfindnexti64
129#else
130#define _wfinddata_t _wfinddata64i32_t
131#define _wfinddatai64_t _wfinddata64_t
132
133#define _wfindfirst _wfindfirst64i32
134#define _wfindnext _wfindnext64i32
135#define _wfindfirsti64 _wfindfirst64
136#define _wfindnexti64 _wfindnext64
137#endif /* _USE_32BIT_TIME_T */
138
139#define _WFINDDATA_T_DEFINED
140#endif /* _WFINDDATA_T_DEFINED */
141
142#define _A_NORMAL 0x00
143#define _A_RDONLY 0x01
144#define _A_HIDDEN 0x02
145#define _A_SYSTEM 0x04
146#define _A_SUBDIR 0x10
147#define _A_ARCH 0x20
148
149#ifndef _SIZE_T_DEFINED
150#define _SIZE_T_DEFINED
151#undef size_t
152#ifdef _WIN64
153  __MINGW_EXTENSION typedef unsigned __int64 size_t;
154#else
155  typedef unsigned int size_t;
156#endif /* _WIN64 */
157#endif /* _SIZE_T_DEFINED */
158
159#ifndef _SSIZE_T_DEFINED
160#define _SSIZE_T_DEFINED
161#undef ssize_t
162#ifdef _WIN64
163  __MINGW_EXTENSION typedef __int64 ssize_t;
164#else
165  typedef int ssize_t;
166#endif /* _WIN64 */
167#endif /* _SSIZE_T_DEFINED */
168
169#include <_mingw_off_t.h>
170
171  /* Some defines for _access nAccessMode (MS doesn't define them, but
172  * it doesn't seem to hurt to add them). */
173#define	F_OK	0	/* Check for file existence */
174#define	X_OK	1	/* Check for execute permission. */
175#define	W_OK	2	/* Check for write permission */
176#define	R_OK	4	/* Check for read permission */
177
178  _CRTIMP int __cdecl _access(const char *_Filename,int _AccessMode);
179  _CRTIMP int __cdecl _chmod(const char *_Filename,int _Mode);
180  _CRTIMP int __cdecl _chsize(int _FileHandle,long _Size) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
181  _CRTIMP int __cdecl _close(int _FileHandle);
182  _CRTIMP int __cdecl _commit(int _FileHandle);
183  _CRTIMP int __cdecl _creat(const char *_Filename,int _PermissionMode) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
184  _CRTIMP int __cdecl _dup(int _FileHandle);
185  _CRTIMP int __cdecl _dup2(int _FileHandleSrc,int _FileHandleDst);
186  _CRTIMP int __cdecl _eof(int _FileHandle);
187  _CRTIMP long __cdecl _filelength(int _FileHandle);
188  _CRTIMP intptr_t __cdecl _findfirst32(const char *_Filename,struct _finddata32_t *_FindData);
189  _CRTIMP int __cdecl _findnext32(intptr_t _FindHandle,struct _finddata32_t *_FindData);
190  _CRTIMP int __cdecl _findclose(intptr_t _FindHandle);
191  _CRTIMP int __cdecl _isatty(int _FileHandle);
192  _CRTIMP int __cdecl _locking(int _FileHandle,int _LockMode,long _NumOfBytes);
193  _CRTIMP long __cdecl _lseek(int _FileHandle,long _Offset,int _Origin);
194  _off64_t lseek64(int fd,_off64_t offset, int whence);
195  _CRTIMP char *__cdecl _mktemp(char *_TemplateName) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
196  _CRTIMP int __cdecl _pipe(int *_PtHandles,unsigned int _PipeSize,int _TextMode);
197  _CRTIMP int __cdecl _read(int _FileHandle,void *_DstBuf,unsigned int _MaxCharCount);
198
199#ifndef _CRT_DIRECTORY_DEFINED
200#define _CRT_DIRECTORY_DEFINED
201  int __cdecl remove(const char *_Filename);
202  int __cdecl rename(const char *_OldFilename,const char *_NewFilename);
203  _CRTIMP int __cdecl _unlink(const char *_Filename);
204#ifndef	NO_OLDNAMES
205  int __cdecl unlink(const char *_Filename) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
206#endif
207#endif
208
209  _CRTIMP int __cdecl _setmode(int _FileHandle,int _Mode);
210  _CRTIMP long __cdecl _tell(int _FileHandle);
211  _CRTIMP int __cdecl _umask(int _Mode) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
212  _CRTIMP int __cdecl _write(int _FileHandle,const void *_Buf,unsigned int _MaxCharCount);
213
214  __MINGW_EXTENSION _CRTIMP __int64 __cdecl _filelengthi64(int _FileHandle);
215  _CRTIMP intptr_t __cdecl _findfirst32i64(const char *_Filename,struct _finddata32i64_t *_FindData);
216  _CRTIMP intptr_t __cdecl _findfirst64(const char *_Filename,struct __finddata64_t *_FindData);
217#ifdef __cplusplus
218#include <string.h>
219#endif
220  intptr_t __cdecl _findfirst64i32(const char *_Filename,struct _finddata64i32_t *_FindData);
221#ifndef __CRT__NO_INLINE
222  __CRT_INLINE intptr_t __cdecl _findfirst64i32(const char *_Filename,struct _finddata64i32_t *_FindData)
223  {
224    struct __finddata64_t fd;
225    intptr_t ret = _findfirst64(_Filename,&fd);
226    if (ret == -1) {
227      memset(_FindData,0,sizeof(struct _finddata64i32_t));
228      return -1;
229    }
230    _FindData->attrib=fd.attrib;
231    _FindData->time_create=fd.time_create;
232    _FindData->time_access=fd.time_access;
233    _FindData->time_write=fd.time_write;
234    _FindData->size=(_fsize_t) fd.size;
235    strncpy(_FindData->name,fd.name,260);
236    return ret;
237  }
238#endif /* __CRT__NO_INLINE */
239  _CRTIMP int __cdecl _findnext32i64(intptr_t _FindHandle,struct _finddata32i64_t *_FindData);
240  _CRTIMP int __cdecl _findnext64(intptr_t _FindHandle,struct __finddata64_t *_FindData);
241  int __cdecl _findnext64i32(intptr_t _FindHandle,struct _finddata64i32_t *_FindData);
242#ifndef __CRT__NO_INLINE
243  __CRT_INLINE int __cdecl _findnext64i32(intptr_t _FindHandle,struct _finddata64i32_t *_FindData)
244  {
245    struct __finddata64_t fd;
246    int ret = _findnext64(_FindHandle,&fd);
247    if (ret == -1) {
248      memset(_FindData,0,sizeof(struct _finddata64i32_t));
249      return -1;
250    }
251    _FindData->attrib=fd.attrib;
252    _FindData->time_create=fd.time_create;
253    _FindData->time_access=fd.time_access;
254    _FindData->time_write=fd.time_write;
255    _FindData->size=(_fsize_t) fd.size;
256    strncpy(_FindData->name,fd.name,260);
257    return ret;
258  }
259#endif /* __CRT__NO_INLINE */
260  __MINGW_EXTENSION __int64 __cdecl _lseeki64(int _FileHandle,__int64 _Offset,int _Origin);
261  __MINGW_EXTENSION __int64 __cdecl _telli64(int _FileHandle);
262
263#ifndef NO_OLDNAMES
264#ifndef _UWIN
265  int __cdecl chdir (const char *) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
266  char *__cdecl getcwd (char *, int) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
267  int __cdecl mkdir (const char *) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
268  char *__cdecl mktemp(char *) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
269  int __cdecl rmdir (const char*) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
270  int __cdecl chmod (const char *, int) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
271#endif /* _UWIN */
272#endif /* Not NO_OLDNAMES */
273
274  _CRTIMP errno_t __cdecl _sopen_s(int *_FileHandle,const char *_Filename,int _OpenFlag,int _ShareFlag,int _PermissionMode);
275
276  _CRTIMP int __cdecl _open(const char *_Filename,int _OpenFlag,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
277  _CRTIMP int __cdecl _sopen(const char *_Filename,int _OpenFlag,int _ShareFlag,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
278
279#ifndef _WIO_DEFINED
280#define _WIO_DEFINED
281  _CRTIMP int __cdecl _waccess(const wchar_t *_Filename,int _AccessMode);
282  _CRTIMP int __cdecl _wchmod(const wchar_t *_Filename,int _Mode);
283  _CRTIMP int __cdecl _wcreat(const wchar_t *_Filename,int _PermissionMode) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
284  _CRTIMP intptr_t __cdecl _wfindfirst32(const wchar_t *_Filename,struct _wfinddata32_t *_FindData);
285  _CRTIMP int __cdecl _wfindnext32(intptr_t _FindHandle,struct _wfinddata32_t *_FindData);
286  _CRTIMP int __cdecl _wunlink(const wchar_t *_Filename);
287  _CRTIMP int __cdecl _wrename(const wchar_t *_OldFilename,const wchar_t *_NewFilename);
288  _CRTIMP wchar_t *__cdecl _wmktemp(wchar_t *_TemplateName) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
289
290  _CRTIMP intptr_t __cdecl _wfindfirst32i64(const wchar_t *_Filename,struct _wfinddata32i64_t *_FindData);
291  intptr_t __cdecl _wfindfirst64i32(const wchar_t *_Filename,struct _wfinddata64i32_t *_FindData);
292  _CRTIMP intptr_t __cdecl _wfindfirst64(const wchar_t *_Filename,struct _wfinddata64_t *_FindData);
293  _CRTIMP int __cdecl _wfindnext32i64(intptr_t _FindHandle,struct _wfinddata32i64_t *_FindData);
294  int __cdecl _wfindnext64i32(intptr_t _FindHandle,struct _wfinddata64i32_t *_FindData);
295  _CRTIMP int __cdecl _wfindnext64(intptr_t _FindHandle,struct _wfinddata64_t *_FindData);
296
297  _CRTIMP errno_t __cdecl _wsopen_s(int *_FileHandle,const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,int _PermissionFlag);
298
299  _CRTIMP int __cdecl _wopen(const wchar_t *_Filename,int _OpenFlag,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
300  _CRTIMP int __cdecl _wsopen(const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
301
302#endif
303
304  int __cdecl __lock_fhandle(int _Filehandle);
305  void __cdecl _unlock_fhandle(int _Filehandle);
306  _CRTIMP intptr_t __cdecl _get_osfhandle(int _FileHandle);
307  _CRTIMP int __cdecl _open_osfhandle(intptr_t _OSFileHandle,int _Flags);
308
309#ifndef NO_OLDNAMES
310  int __cdecl access(const char *_Filename,int _AccessMode) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
311  int __cdecl chmod(const char *_Filename,int _AccessMode) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
312  int __cdecl chsize(int _FileHandle,long _Size) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
313  int __cdecl close(int _FileHandle) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
314  int __cdecl creat(const char *_Filename,int _PermissionMode) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
315  int __cdecl dup(int _FileHandle) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
316  int __cdecl dup2(int _FileHandleSrc,int _FileHandleDst) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
317  int __cdecl eof(int _FileHandle) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
318  long __cdecl filelength(int _FileHandle) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
319  int __cdecl isatty(int _FileHandle) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
320  int __cdecl locking(int _FileHandle,int _LockMode,long _NumOfBytes) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
321  long __cdecl lseek(int _FileHandle,long _Offset,int _Origin) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
322  char *__cdecl mktemp(char *_TemplateName)  __MINGW_ATTRIB_DEPRECATED_MSVC2005;
323  int __cdecl open(const char *_Filename,int _OpenFlag,...)  __MINGW_ATTRIB_DEPRECATED_MSVC2005;
324  int __cdecl read(int _FileHandle,void *_DstBuf,unsigned int _MaxCharCount)  __MINGW_ATTRIB_DEPRECATED_MSVC2005;
325  int __cdecl setmode(int _FileHandle,int _Mode) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
326  int __cdecl sopen(const char *_Filename,int _OpenFlag,int _ShareFlag,...) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
327  long __cdecl tell(int _FileHandle) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
328  int __cdecl umask(int _Mode) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
329  int __cdecl write(int _Filehandle,const void *_Buf,unsigned int _MaxCharCount) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
330#endif
331
332#ifndef _FILE_OFFSET_BITS_SET_LSEEK
333#define _FILE_OFFSET_BITS_SET_LSEEK
334#if (defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64))
335#define lseek lseek64
336#endif /* (defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)) */
337#endif /* _FILE_OFFSET_BITS_SET_LSEEK */
338
339#ifdef _POSIX
340
341/* Misc stuff */
342char *getlogin(void);
343#ifdef __USE_MINGW_ALARM
344unsigned int alarm(unsigned int seconds);
345#endif
346
347#endif
348
349#ifdef __USE_MINGW_ACCESS
350/*  Old versions of MSVCRT access() just ignored X_OK, while the version
351    shipped with Vista, returns an error code.  This will restore the
352    old behaviour  */
353static inline int __mingw_access (const char *__fname, int __mode) {
354  return  _access (__fname, __mode & ~X_OK);
355}
356
357#define access(__f,__m)  __mingw_access (__f, __m)
358#endif
359
360
361#ifdef __cplusplus
362}
363#endif
364
365
366#pragma pack(pop)
367
368#include <sec_api/io_s.h>
369
370#endif /* End _IO_H_ */
371
372