зеркало из https://github.com/github/ruby.git
* win32/win32.c (setup_overlapped): seek to the file end only when
writing (mode:a), not reading (mode:a+, read). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50637 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
5c0fb216f7
Коммит
d4bafbb45f
|
@ -1,3 +1,8 @@
|
|||
Mon May 25 11:27:14 2015 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* win32/win32.c (setup_overlapped): seek to the file end only when
|
||||
writing (mode:a), not reading (mode:a+, read).
|
||||
|
||||
Mon May 25 00:27:37 2015 Benoit Daloze <eregontp@gmail.com>
|
||||
|
||||
* numeric.c (Numeric#negative?): [DOC] Fix call-seq.
|
||||
|
|
|
@ -6469,12 +6469,16 @@ rb_w32_close(int fd)
|
|||
}
|
||||
|
||||
static int
|
||||
setup_overlapped(OVERLAPPED *ol, int fd)
|
||||
setup_overlapped(OVERLAPPED *ol, int fd, int iswrite)
|
||||
{
|
||||
memset(ol, 0, sizeof(*ol));
|
||||
if (!(_osfile(fd) & (FDEV | FPIPE))) {
|
||||
LONG high = 0;
|
||||
DWORD method = _osfile(fd) & FAPPEND ? FILE_END : FILE_CURRENT;
|
||||
/* On mode:a, it can write only FILE_END.
|
||||
* On mode:a+, though it can write only FILE_END,
|
||||
* it can read from everywhere.
|
||||
*/
|
||||
DWORD method = ((_osfile(fd) & FAPPEND) && iswrite) ? FILE_END : FILE_CURRENT;
|
||||
DWORD low = SetFilePointer((HANDLE)_osfhnd(fd), 0, &high, method);
|
||||
#ifndef INVALID_SET_FILE_POINTER
|
||||
#define INVALID_SET_FILE_POINTER ((DWORD)-1)
|
||||
|
@ -6571,7 +6575,7 @@ rb_w32_read(int fd, void *buf, size_t size)
|
|||
|
||||
/* if have cancel_io, use Overlapped I/O */
|
||||
if (cancel_io) {
|
||||
if (setup_overlapped(&ol, fd)) {
|
||||
if (setup_overlapped(&ol, fd, FALSE)) {
|
||||
rb_acrt_lowio_unlock_fh(fd);
|
||||
return -1;
|
||||
}
|
||||
|
@ -6701,7 +6705,7 @@ rb_w32_write(int fd, const void *buf, size_t size)
|
|||
|
||||
/* if have cancel_io, use Overlapped I/O */
|
||||
if (cancel_io) {
|
||||
if (setup_overlapped(&ol, fd)) {
|
||||
if (setup_overlapped(&ol, fd, TRUE)) {
|
||||
rb_acrt_lowio_unlock_fh(fd);
|
||||
return -1;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче