* NOTE: The file manipulation functions provided by Microsoft seem to
* work with either slash (/) or backslash (\) as the directory separator.
*
+ * TODO: File requires review; rationalization and refactoring recommended.
*/
#ifndef _STDIO_H_
#define fileno(__F) ((__F)->_file)
#endif
-#if defined (__MSVCRT__) && !defined (__NO_MINGW_LFS)
+#if defined (__MSVCRT__) && ! defined (__NO_MINGW_LFS)
#include <sys/types.h>
__CRT_INLINE __JMPSTUB__(( FUNCTION = fopen64, REMAPPED = fopen ))
FILE* __cdecl __MINGW_NOTHROW fopen64 (const char* filename, const char* mode)
{ return fopen (filename, mode); }
-int __cdecl __MINGW_NOTHROW fseeko64 (FILE*, off64_t, int);
+int __cdecl __MINGW_NOTHROW fseeko64 (FILE*, __off64_t, int);
#ifdef __USE_MINGW_FSEEK
-int __cdecl __MINGW_NOTHROW __mingw_fseeko64 (FILE *, off64_t, int);
+int __cdecl __MINGW_NOTHROW __mingw_fseeko64 (FILE *, __off64_t, int);
#define fseeko64(fp, offset, whence) __mingw_fseeko64(fp, offset, whence)
#endif
__CRT_INLINE __LIBIMPL__(( FUNCTION = ftello64 ))
-off64_t __cdecl __MINGW_NOTHROW ftello64 (FILE * stream)
-{
- fpos_t pos;
- if (fgetpos(stream, &pos))
- return -1LL;
- else
- return ((off64_t) pos);
-}
-#endif /* __NO_MINGW_LFS */
+__off64_t __cdecl __MINGW_NOTHROW ftello64 (FILE * stream)
+{ fpos_t __pos; return (fgetpos(stream, &__pos)) ? -1LL : (__off64_t)(__pos); }
-#endif /* Not __STRICT_ANSI__ */
+#endif /* __MSVCRT__ && !__NO_MINGW_LFS */
+#endif /* !__STRICT_ANSI__ */
/* Wide versions */
-
#ifndef _WSTDIO_DEFINED
/* also in wchar.h - keep in sync */
_CRTIMP int __cdecl __MINGW_NOTHROW fwprintf (FILE*, const wchar_t*, ...);
/*
- * Workaround for limitations on win9x where a file contents are
- * not zero'd out if you seek past the end and then write.
- * Copied from ming local-patch to binutils/bfd/libbfd.c written by
- * Mumit Khan <khan@xraylith.wisc.edu>
+ * mingw-fseek.c
+ *
+ * Workaround for limitations on Win9x where extended file content
+ * is not zeroed out if you seek past the end and then write.
+ *
+ * $Id$
+ *
+ * Written by Mumit Khan <khan@xraylith.wisc.edu>
+ * Copyright (C) 1999, 2002-2005, 2011, 2015, MinGW.org Project.
+ *
+ * Abstracted from MinGW local patch to binutils/bfd/libbfd.c
+ *
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice, this permission notice, and the following
+ * disclaimer shall be included in all copies or substantial portions of
+ * the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
*/
+#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
static int __mingw_fseek_called;
/* The fseek in Win9x runtime does not zero out the file if seeking past
- the end; if you don't want random stuff from your disk included in your
- output DLL/executable, use this version instead. On WinNT/Win2k, it
- just calls runtime fseek().
-
- CHECK/FIXME: Does this work for both text and binary modes?? */
-
-
+ * the end; if you don't want random stuff from your disk included in your
+ * output DLL/executable, use this version instead. On WinNT/Win2k, it
+ * just calls runtime fseek().
+ *
+ * CHECK/FIXME: Does this work for both text and binary modes??
+ */
int
__mingw_fseek (FILE *fp, long offset, int whence)
{
}
int
-__mingw_fseeko64 (FILE *fp, off64_t offset, int whence)
+__mingw_fseeko64 (FILE *fp, __off64_t offset, int whence)
{
# undef fseeko64
__mingw_fseek_called = 1;
{
# undef fwrite
if ((_osver & 0x8000) && __mingw_fseek_called)
- {
- ULARGE_INTEGER actual_length;
- LARGE_INTEGER current_position = {{0LL}};
- __mingw_fseek_called = 0;
- fflush (fp);
- actual_length.u.LowPart = GetFileSize ((HANDLE) _get_osfhandle (fileno (fp)),
- &actual_length.u.HighPart);
- if (actual_length.u.LowPart == 0xFFFFFFFF
- && GetLastError() != NO_ERROR )
- return -1;
- current_position.u.LowPart = SetFilePointer ((HANDLE) _get_osfhandle (fileno (fp)),
- current_position.u.LowPart,
- ¤t_position.u.HighPart,
- FILE_CURRENT);
- if (current_position.u.LowPart == 0xFFFFFFFF
- && GetLastError() != NO_ERROR )
- return -1;
+ {
+ ULARGE_INTEGER actual_length;
+ LARGE_INTEGER current_position = {{0LL}};
+ __mingw_fseek_called = 0;
+ fflush (fp);
+ actual_length.u.LowPart = GetFileSize
+ ( (HANDLE) _get_osfhandle (fileno (fp)), &actual_length.u.HighPart
+ );
+ if (actual_length.u.LowPart == 0xFFFFFFFF && GetLastError() != NO_ERROR )
+ return -1;
+ current_position.u.LowPart = SetFilePointer
+ ( (HANDLE) _get_osfhandle (fileno (fp)), current_position.u.LowPart,
+ ¤t_position.u.HighPart, FILE_CURRENT
+ );
+ if (current_position.u.LowPart == 0xFFFFFFFF && GetLastError() != NO_ERROR )
+ return -1;
-#ifdef DEBUG
- printf ("__mingw_fwrite: current %I64u, actual %I64u\n",
- current_position.QuadPart, actual_length.QuadPart);
-#endif /* DEBUG */
- if (current_position.QuadPart > actual_length.QuadPart)
- {
- static char __mingw_zeros[ZEROBLOCKSIZE];
- long long numleft;
-
- SetFilePointer ((HANDLE) _get_osfhandle (fileno (fp)),
- 0, 0, FILE_END);
- numleft = current_position.QuadPart - actual_length.QuadPart;
+# ifdef DEBUG
+ printf( "__mingw_fwrite: current %I64u, actual %I64u\n",
+ current_position.QuadPart, actual_length.QuadPart
+ );
+# endif /* DEBUG */
+ if( current_position.QuadPart > actual_length.QuadPart )
+ {
+ static char __mingw_zeros[ZEROBLOCKSIZE];
+ long long numleft;
-#ifdef DEBUG
- printf ("__mingw_fwrite: Seeking %I64d bytes past end\n", numleft);
-#endif /* DEBUG */
- while (numleft > 0LL)
- {
- DWORD nzeros = (numleft > ZEROBLOCKSIZE)
- ? ZEROBLOCKSIZE : numleft;
- DWORD written;
- if (! WriteFile ((HANDLE) _get_osfhandle (fileno (fp)),
- __mingw_zeros, nzeros, &written, NULL))
- {
- /* Best we can hope for, or at least DJ says so. */
- SetFilePointer ((HANDLE) _get_osfhandle (fileno (fp)),
- 0, 0, FILE_BEGIN);
- return -1;
- }
- if (written < nzeros)
- {
- /* Likewise. */
- SetFilePointer ((HANDLE) _get_osfhandle (fileno (fp)),
- 0, 0, FILE_BEGIN);
- return -1;
- }
+ SetFilePointer( (HANDLE) _get_osfhandle (fileno (fp)), 0, 0, FILE_END );
+ numleft = current_position.QuadPart - actual_length.QuadPart;
- numleft -= written;
- }
- FlushFileBuffers ((HANDLE) _get_osfhandle (fileno (fp)));
+# ifdef DEBUG
+ printf( "__mingw_fwrite: Seeking %I64d bytes past end\n", numleft );
+# endif /* DEBUG */
+ while( numleft > 0LL )
+ {
+ DWORD nzeros = (numleft > ZEROBLOCKSIZE)
+ ? ZEROBLOCKSIZE
+ : numleft;
+ DWORD written;
+ if( ! WriteFile ((HANDLE) _get_osfhandle (fileno (fp)),
+ __mingw_zeros, nzeros, &written, NULL)
+ )
+ { /* Best we can hope for, or at least DJ says so.
+ */
+ SetFilePointer( (HANDLE) _get_osfhandle (fileno (fp)),
+ 0, 0, FILE_BEGIN
+ );
+ return -1;
+ }
+ if( written < nzeros )
+ {
+ /* Likewise. */
+ SetFilePointer( (HANDLE) _get_osfhandle (fileno (fp)),
+ 0, 0, FILE_BEGIN
+ );
+ return -1;
}
+ numleft -= written;
+ }
+ FlushFileBuffers ((HANDLE) _get_osfhandle (fileno (fp)));
}
- return (fwrite) (buffer, size, count, fp);
+ }
+ return (fwrite)(buffer, size, count, fp);
}
+
+/* $RCSfile$: end of file */
-#include <stdio.h>
+/*
+ * fseeko64.c
+ *
+ * Seek to 64-offset within a file stream; uses same reference bases
+ * as fseek(), but offset is an implementation specific __off64_t type.
+ *
+ * $Id$
+ *
+ * Written by Kees Zeelenberg <kzlg@users.sourceforge.net>
+ * and Danny Smith <dannysmith@users.sourceforge.net>
+ * Copyright (C) 2004, 2005, 2015, MinGW.org Project
+ *
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice, this permission notice, and the following
+ * disclaimer shall be included in all copies or substantial portions of
+ * the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ */
#include <io.h>
+#include <stdio.h>
#include <errno.h>
int __cdecl
-fseeko64 (FILE* stream, off64_t offset, int whence)
+fseeko64 (FILE* stream, __off64_t offset, int whence)
{
fpos_t pos;
if (whence == SEEK_CUR)
/* If stream is invalid, fgetpos sets errno. */
if (fgetpos (stream, &pos))
return (-1);
- pos += (fpos_t) offset;
+ pos += (fpos_t)(offset);
}
else if (whence == SEEK_END)
{
/* If writing, we need to flush before getting file length. */
fflush (stream);
- pos = (fpos_t) (_filelengthi64 (_fileno (stream)) + offset);
+ pos = (fpos_t)(_filelengthi64 (_fileno (stream)) + offset);
}
else if (whence == SEEK_SET)
- pos = (fpos_t) offset;
+ pos = (fpos_t)(offset);
else
{
errno = EINVAL;
}
return fsetpos (stream, &pos);
}
+
+/* $RCSfile$: end of file */