* win32/win32.c (_filbuf): msvc14 doesn't have it, use _fgetc_nolock.
* win32/win32.c (_flsbuf): msvc14 doesn't have it, use _fputc_nolock. * win32/win32.c (vcruntime_file): define vcruntime_file on msvc14 because it doesn't export FILE's internal structure. * win32/win32.c (FILE_COUNT): added to abstract FILE->_cnt. * win32/win32.c (FILE_READPTR): added to abstract FILE->_ptr. * win32/win32.c (FILE_FILENO): added to abstract FILE->_file. * win32/win32.c (init_stdhandle): use FILE_FILENO. * win32/win32.c (rb_w32_getc): use FILE_COUNT and FILE_READPTR. * win32/win32.c (rb_w32_putc): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50378 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
cc622e2ac5
commit
3446537f1a
21
ChangeLog
21
ChangeLog
@ -1,3 +1,24 @@
|
|||||||
|
Fri Apr 24 06:47:19 2015 NARUSE, Yui <naruse@ruby-lang.org>
|
||||||
|
|
||||||
|
* win32/win32.c (_filbuf): msvc14 doesn't have it, use _fgetc_nolock.
|
||||||
|
|
||||||
|
* win32/win32.c (_flsbuf): msvc14 doesn't have it, use _fputc_nolock.
|
||||||
|
|
||||||
|
* win32/win32.c (vcruntime_file): define vcruntime_file on msvc14
|
||||||
|
because it doesn't export FILE's internal structure.
|
||||||
|
|
||||||
|
* win32/win32.c (FILE_COUNT): added to abstract FILE->_cnt.
|
||||||
|
|
||||||
|
* win32/win32.c (FILE_READPTR): added to abstract FILE->_ptr.
|
||||||
|
|
||||||
|
* win32/win32.c (FILE_FILENO): added to abstract FILE->_file.
|
||||||
|
|
||||||
|
* win32/win32.c (init_stdhandle): use FILE_FILENO.
|
||||||
|
|
||||||
|
* win32/win32.c (rb_w32_getc): use FILE_COUNT and FILE_READPTR.
|
||||||
|
|
||||||
|
* win32/win32.c (rb_w32_putc): ditto.
|
||||||
|
|
||||||
Fri Apr 24 06:37:07 2015 NARUSE, Yui <naruse@ruby-lang.org>
|
Fri Apr 24 06:37:07 2015 NARUSE, Yui <naruse@ruby-lang.org>
|
||||||
|
|
||||||
* win32/win32.c (dupfd): use _set_osfhnd.
|
* win32/win32.c (dupfd): use _set_osfhnd.
|
||||||
|
@ -95,6 +95,10 @@ static char *w32_getenv(const char *name, UINT cp);
|
|||||||
# define enough_to_get(n) (--(n) >= 0)
|
# define enough_to_get(n) (--(n) >= 0)
|
||||||
# define enough_to_put(n) (++(n) < 0)
|
# define enough_to_put(n) (++(n) < 0)
|
||||||
#else
|
#else
|
||||||
|
# if RUBY_MSVCRT_VERSION >= 140
|
||||||
|
# define _filbuf _fgetc_nolock
|
||||||
|
# define _flsbuf _fputc_nolock
|
||||||
|
# endif
|
||||||
# define enough_to_get(n) (--(n) >= 0)
|
# define enough_to_get(n) (--(n) >= 0)
|
||||||
# define enough_to_put(n) (--(n) >= 0)
|
# define enough_to_put(n) (--(n) >= 0)
|
||||||
#endif
|
#endif
|
||||||
@ -2255,6 +2259,32 @@ rb_w32_closedir(DIR *dirp)
|
|||||||
# define STHREAD_ONLY(x) x
|
# define STHREAD_ONLY(x) x
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if RUBY_MSVCRT_VERSION >= 140
|
||||||
|
typedef struct {
|
||||||
|
union
|
||||||
|
{
|
||||||
|
FILE _public_file;
|
||||||
|
char* _ptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
char* _base;
|
||||||
|
int _cnt;
|
||||||
|
long _flags;
|
||||||
|
long _file;
|
||||||
|
int _charbuf;
|
||||||
|
int _bufsiz;
|
||||||
|
char* _tmpfname;
|
||||||
|
CRITICAL_SECTION _lock;
|
||||||
|
} vcruntime_file;
|
||||||
|
#define FILE_COUNT(stream) ((vcruntime_file*)stream)->_cnt
|
||||||
|
#define FILE_READPTR(stream) ((vcruntime_file*)stream)->_ptr
|
||||||
|
#define FILE_FILENO(stream) ((vcruntime_file*)stream)->_file
|
||||||
|
#else
|
||||||
|
#define FILE_COUNT(stream) stream->_cnt
|
||||||
|
#define FILE_READPTR(stream) stream->_ptr
|
||||||
|
#define FILE_FILENO(stream) stream->_file
|
||||||
|
#endif
|
||||||
|
|
||||||
/* License: Ruby's */
|
/* License: Ruby's */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
intptr_t osfhnd; /* underlying OS file HANDLE */
|
intptr_t osfhnd; /* underlying OS file HANDLE */
|
||||||
@ -2395,16 +2425,16 @@ init_stdhandle(void)
|
|||||||
(fd))
|
(fd))
|
||||||
|
|
||||||
if (fileno(stdin) < 0) {
|
if (fileno(stdin) < 0) {
|
||||||
stdin->_file = open_null(0);
|
FILE_FILENO(stdin) = open_null(0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
setmode(fileno(stdin), O_BINARY);
|
setmode(fileno(stdin), O_BINARY);
|
||||||
}
|
}
|
||||||
if (fileno(stdout) < 0) {
|
if (fileno(stdout) < 0) {
|
||||||
stdout->_file = open_null(1);
|
FILE_FILENO(stdout) = open_null(1);
|
||||||
}
|
}
|
||||||
if (fileno(stderr) < 0) {
|
if (fileno(stderr) < 0) {
|
||||||
stderr->_file = open_null(2);
|
FILE_FILENO(stderr) = open_null(2);
|
||||||
}
|
}
|
||||||
if (nullfd >= 0 && !keep) close(nullfd);
|
if (nullfd >= 0 && !keep) close(nullfd);
|
||||||
setvbuf(stderr, NULL, _IONBF, 0);
|
setvbuf(stderr, NULL, _IONBF, 0);
|
||||||
@ -5629,18 +5659,14 @@ read(int fd, void *buf, size_t size)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define FILE_COUNT _cnt
|
|
||||||
#define FILE_READPTR _ptr
|
|
||||||
|
|
||||||
#undef fgetc
|
#undef fgetc
|
||||||
/* License: Ruby's */
|
/* License: Ruby's */
|
||||||
int
|
int
|
||||||
rb_w32_getc(FILE* stream)
|
rb_w32_getc(FILE* stream)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
if (enough_to_get(stream->FILE_COUNT)) {
|
if (enough_to_get(FILE_COUNT(stream))) {
|
||||||
c = (unsigned char)*stream->FILE_READPTR++;
|
c = (unsigned char)*FILE_READPTR(stream)++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
c = _filbuf(stream);
|
c = _filbuf(stream);
|
||||||
@ -5659,8 +5685,8 @@ rb_w32_getc(FILE* stream)
|
|||||||
int
|
int
|
||||||
rb_w32_putc(int c, FILE* stream)
|
rb_w32_putc(int c, FILE* stream)
|
||||||
{
|
{
|
||||||
if (enough_to_put(stream->FILE_COUNT)) {
|
if (enough_to_put(FILE_COUNT(stream))) {
|
||||||
c = (unsigned char)(*stream->FILE_READPTR++ = (char)c);
|
c = (unsigned char)(*FILE_READPTR(stream)++ = (char)c);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
c = _flsbuf(c, stream);
|
c = _flsbuf(c, stream);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user