fix one more Windows file-position bug
svn: r7315
This commit is contained in:
parent
beca6ac5c4
commit
19c5c227c9
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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]) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user