fix one more Windows file-position bug

svn: r7315
This commit is contained in:
Matthew Flatt 2007-09-11 15:02:30 +00:00
parent beca6ac5c4
commit 19c5c227c9
4 changed files with 26 additions and 11 deletions

View File

@ -5384,10 +5384,10 @@ static Scheme_Object *file_size(int argc, Scheme_Object *argv[])
}
#else
{
struct MSC_IZE(BIG_OFF_T_IZE(stat)) buf;
struct BIG_OFF_T_IZE(stat) buf;
while (1) {
if (!MSC_W_IZE(BIG_OFF_T_IZE(stat))(MSC_WIDE_PATH(filename), &buf))
if (!BIG_OFF_T_IZE(stat)(MSC_WIDE_PATH(filename), &buf))
break;
else if (errno != EINTR)
goto failed;

View File

@ -7340,7 +7340,7 @@ long scheme_get_milliseconds(void)
# ifdef USE_FTIME
struct MSC_IZE(timeb) now;
MSC_IZE(ftime)(&now);
return now.time * 1000 + now.millitm;
return (long)(now.time * 1000 + now.millitm);
# else
# ifdef PALMOS_STUFF
/* FIXME */
@ -7439,7 +7439,7 @@ long scheme_get_seconds(void)
# ifdef USE_FTIME
struct MSC_IZE(timeb) now;
MSC_IZE(ftime)(&now);
return now.time;
return (long)now.time;
# else
# ifdef USE_PLAIN_TIME
time_t now;

View File

@ -241,6 +241,11 @@ typedef struct Scheme_FD {
# define FILENAME_EXN_E "%e"
#endif
#if defined(DOS_FILE_SYSTEM)
# define fseeko _fseeki64
# define ftello _ftelli64
#endif
/******************** Globals and Prototypes ********************/
/* globals */
@ -4160,10 +4165,17 @@ scheme_file_position(int argc, Scheme_Object *argv[])
# ifdef WINDOWS_FILE_HANDLES
{
if (!SetFilePointerEx((HANDLE)fd, nll, NULL,
((whence == SEEK_SET) ? FILE_BEGIN : FILE_END)))
DWORD r;
LONG lo_w, hi_w;
lo_w = (LONG)(nll & 0xFFFFFFFF);
hi_w = (LONG)(nll >> 32);
r = SetFilePointer((HANDLE)fd, lo_w, &hi_w,
((whence == SEEK_SET) ? FILE_BEGIN : FILE_END));
if ((r == INVALID_SET_FILE_POINTER)
&& GetLastError() != NO_ERROR)
lv = -1;
else
lv = 0;
}
# else
lv = BIG_OFF_T_IZE(lseek)(fd, nll, whence);
@ -4260,11 +4272,14 @@ scheme_file_position(int argc, Scheme_Object *argv[])
} else if (had_fd) {
# ifdef WINDOWS_FILE_HANDLES
{
LARGE_INTEGER li;
if (!SetFilePointerEx((HANDLE)fd, 0, &li, FILE_CURRENT))
DWORD lo_w, hi_w;
hi_w = 0;
lo_w = SetFilePointer((HANDLE)fd, 0, &hi_w, FILE_CURRENT);
if ((lo_w == INVALID_SET_FILE_POINTER)
&& GetLastError() != NO_ERROR)
pll = -1;
else
pll = li;
pll = ((mzlonglong)hi_w << 32) | lo_w;
}
# else
pll = BIG_OFF_T_IZE(lseek)(fd, 0, 1);

View File

@ -5283,7 +5283,7 @@ Scheme_Object *scheme_unmarshal_wrap_get(Scheme_Unmarshal_Tables *ut,
long l;
l = SCHEME_INT_VAL(wraps_key);
if ((l < 0) || (l >= ut->rp->symtab_size))
if ((l < 0) || ((unsigned long)l >= ut->rp->symtab_size))
scheme_ill_formed_code(ut->rp);
if (!ut->rp->symtab[l]) {