summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNigel Sandever <njsandever@hotmail.com>2003-09-25 21:49:07 +0000
committerNicholas Clark <nick@ccl4.org>2003-12-28 11:49:20 +0000
commita810272a6ed1d575996a7f738dfe73d9ccdf15d5 (patch)
tree2d42781bc11b55efbe1de5dc421e45ff85959e57
parent1f45b5fd150bd570a059be0dbe0b8aa6502efb07 (diff)
downloadperl-a810272a6ed1d575996a7f738dfe73d9ccdf15d5.tar.gz
5.8.1 / bcc55 / win32 / Enable PerlIO and/ or USE_LARGE_FILES
From: "Nigel Sandever" <njsandever@hotmail.com> Message-ID: <Law9-F94BdsnvUFcxT500000ea5@hotmail.com> Date: Thu, 25 Sep 2003 21:49:07 +0000 p4raw-id: //depot/perl@21989
-rw-r--r--dosish.h5
-rw-r--r--win32/win32.c57
-rw-r--r--win32/win32sck.c8
3 files changed, 70 insertions, 0 deletions
diff --git a/dosish.h b/dosish.h
index 86284725a3..e7be877d84 100644
--- a/dosish.h
+++ b/dosish.h
@@ -80,7 +80,12 @@
* information.
*/
#if defined(WIN64) || defined(USE_LARGE_FILES)
+# if defined(__BORLANDC__) /* buk */
+# include <sys\stat.h>
+# define Stat_t struct stati64
+# else
#define Stat_t struct _stati64
+# endif
#else
#if defined(UNDER_CE)
#define Stat_t struct xcestat
diff --git a/win32/win32.c b/win32/win32.c
index 4d8a6213ee..66ff52ca8e 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -2578,10 +2578,14 @@ DllExport Off_t
win32_ftell(FILE *pf)
{
#if defined(WIN64) || defined(USE_LARGE_FILES)
+#if defined(__BORLAND__) /* buk */
+ return win32_tell( fileno( pf ) );
+#else
fpos_t pos;
if (fgetpos(pf, &pos))
return -1;
return (Off_t)pos;
+#endif
#else
return ftell(pf);
#endif
@@ -2591,6 +2595,13 @@ DllExport int
win32_fseek(FILE *pf, Off_t offset,int origin)
{
#if defined(WIN64) || defined(USE_LARGE_FILES)
+#if defined(__BORLANDC__) /* buk */
+ return win32_lseek(
+ fileno(pf),
+ offset,
+ origin
+ );
+#else
fpos_t pos;
switch (origin) {
case SEEK_CUR:
@@ -2610,6 +2621,7 @@ win32_fseek(FILE *pf, Off_t offset,int origin)
return -1;
}
return fsetpos(pf, &offset);
+#endif
#else
return fseek(pf, offset, origin);
#endif
@@ -2618,13 +2630,25 @@ win32_fseek(FILE *pf, Off_t offset,int origin)
DllExport int
win32_fgetpos(FILE *pf,fpos_t *p)
{
+#if defined(__BORLANDC__) && defined(USE_LARGE_FILES) /* buk */
+ if( win32_tell(fileno(pf)) == -1L ) {
+ errno = EBADF;
+ return -1;
+ }
+ return 0;
+#else
return fgetpos(pf, p);
+#endif
}
DllExport int
win32_fsetpos(FILE *pf,const fpos_t *p)
{
+#if defined(__BORLANDC__) && defined(USE_LARGE_FILES) /* buk */
+ return win32_lseek(fileno(pf), *p, SEEK_CUR);
+#else
return fsetpos(pf, p);
+#endif
}
DllExport void
@@ -3157,7 +3181,23 @@ DllExport Off_t
win32_lseek(int fd, Off_t offset, int origin)
{
#if defined(WIN64) || defined(USE_LARGE_FILES)
+#if defined(__BORLANDC__) /* buk */
+ LARGE_INTEGER pos;
+ pos.QuadPart = offset;
+ pos.LowPart = SetFilePointer(
+ (HANDLE)_get_osfhandle(fd),
+ pos.LowPart,
+ &pos.HighPart,
+ origin
+ );
+ if (pos.LowPart == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) {
+ pos.QuadPart = -1;
+ }
+
+ return pos.QuadPart;
+#else
return _lseeki64(fd, offset, origin);
+#endif
#else
return lseek(fd, offset, origin);
#endif
@@ -3167,7 +3207,24 @@ DllExport Off_t
win32_tell(int fd)
{
#if defined(WIN64) || defined(USE_LARGE_FILES)
+#if defined(__BORLANDC__) /* buk *//
+ LARGE_INTEGER pos;
+ pos.QuadPart = 0;
+ pos.LowPart = SetFilePointer(
+ (HANDLE)_get_osfhandle(fd),
+ pos.LowPart,
+ &pos.HighPart,
+ FILE_CURRENT
+ );
+ if (pos.LowPart == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) {
+ pos.QuadPart = -1;
+ }
+
+ return pos.QuadPart;
+ /* return tell(fd); */
+#else
return _telli64(fd);
+#endif
#else
return tell(fd);
#endif
diff --git a/win32/win32sck.c b/win32/win32sck.c
index 2c51cbc630..86cdc5f9ca 100644
--- a/win32/win32sck.c
+++ b/win32/win32sck.c
@@ -497,7 +497,11 @@ my_fstat(int fd, Stat_t *sbufptr)
int osf;
if (!wsock_started || IsWinNT()) {
#if defined(WIN64) || defined(USE_LARGE_FILES)
+#if defined(__BORLANDC__) /* buk */
+ return win32_fstat(fd, sbufptr );
+#else
return _fstati64(fd, sbufptr);
+#endif
#else
return fstat(fd, sbufptr);
#endif
@@ -525,7 +529,11 @@ my_fstat(int fd, Stat_t *sbufptr)
}
}
#if defined(WIN64) || defined(USE_LARGE_FILES)
+#if defined(__BORLANDC__) /* buk */
+ return win32_fstat(fd, sbufptr );
+#else
return _fstati64(fd, sbufptr);
+#endif
#else
return fstat(fd, sbufptr);
#endif