1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* io.c (io_fwrite): avoid context switch before writing to stderr.

[ruby-dev:25080]

* rubyio.h: refine deprecated declaration.

* configure.in, file.c, io.c: remove useless check: fseeko, etc.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7490 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2004-12-07 06:44:42 +00:00
parent 638bbb1946
commit a435e52259
5 changed files with 24 additions and 98 deletions

View file

@ -1,3 +1,12 @@
Tue Dec 7 15:40:38 2004 Tanaka Akira <akr@m17n.org>
* io.c (io_fwrite): avoid context switch before writing to stderr.
[ruby-dev:25080]
* rubyio.h: refine deprecated declaration.
* configure.in, file.c, io.c: remove useless check: fseeko, etc.
Tue Dec 7 13:42:07 2004 NAKAMURA Usaku <usa@ruby-lang.org> Tue Dec 7 13:42:07 2004 NAKAMURA Usaku <usa@ruby-lang.org>
* dir.c (dir_s_mkdir): win32 special processing doesn't need any * dir.c (dir_s_mkdir): win32 special processing doesn't need any

View file

@ -439,8 +439,6 @@ AC_TYPE_GETGROUPS
AC_TYPE_SIGNAL AC_TYPE_SIGNAL
AC_FUNC_ALLOCA AC_FUNC_ALLOCA
AC_FUNC_MEMCMP AC_FUNC_MEMCMP
AC_FUNC_FSEEKO
AC_CHECK_FUNCS(ftello)
AC_REPLACE_FUNCS(dup2 memmove mkdir strcasecmp strncasecmp strerror strftime\ AC_REPLACE_FUNCS(dup2 memmove mkdir strcasecmp strncasecmp strerror strftime\
strchr strstr strtoul crypt flock vsnprintf\ strchr strstr strtoul crypt flock vsnprintf\
isnan finite isinf hypot acosh erf) isnan finite isinf hypot acosh erf)
@ -656,69 +654,6 @@ else
fi fi
fi fi
AC_DEFUN(RUBY_CHECK_IO_NEED,
[AC_CACHE_CHECK(whether need to [$1], [$2],
[AC_TRY_RUN([
#include <stdio.h>
#ifndef SEEK_SET
#define SEEK_SET 0
#endif
#ifndef SEEK_CUR
#define SEEK_CUR 1
#endif
#define before_seek(f) ]ifelse(index($2,flush_before_seek),-1,[fflush(f)],[(f,0)])[
#define reset_rw(f) ]ifelse(index($2,seek_between_rw),-1,[do_seek(f,SEEK_CUR)],[(f,0)])[
#define do_seek(f, w) (before_seek(f), fseek(f,0,w))
char *fn = "conftest.dat";
char *wombat = "wombat\n";
char *koara = "koara\n";
char *kangaroo = "kangaroo\n";
int main()
{
char buf[BUFSIZ];
FILE *f;
int r = 1;
if (!(f = fopen(fn, "w+"))) return 1;
fputs(wombat, f);
do_seek(f, SEEK_SET);
if (!fgets(buf, BUFSIZ, f) || strcmp(buf, wombat)) goto fail;
reset_rw(f);
fputs(koara, f);
fputs(kangaroo, f);
do_seek(f, SEEK_SET);
if (!fgets(buf, BUFSIZ, f) || strcmp(buf, wombat)) goto fail;
if (!fgets(buf, BUFSIZ, f) || strcmp(buf, koara)) goto fail;
if (!fgets(buf, BUFSIZ, f) || strcmp(buf, kangaroo)) goto fail;
do_seek(f, SEEK_SET);
if (!fgets(buf, BUFSIZ, f) || strcmp(buf, wombat)) goto fail;
reset_rw(f);
fputc('X', f);
reset_rw(f);
if (!fgets(buf, BUFSIZ, f) || strcmp(buf, koara+1)) goto fail;
if (!fgets(buf, BUFSIZ, f) || strcmp(buf, kangaroo)) goto fail;
do_seek(f, SEEK_SET);
if (!fgets(buf, BUFSIZ, f) || strcmp(buf, wombat)) goto fail;
if (!fgets(buf, BUFSIZ, f) || buf[0] != 'X' || strcmp(buf+1, koara+1)) goto fail;
if (!fgets(buf, BUFSIZ, f) || strcmp(buf, kangaroo)) goto fail;
r = 0;
fail:
fclose(f);
unlink(fn);
return r;
}
], [$2]=no, [$2]=yes, [$2]=[$3])])])
RUBY_CHECK_IO_NEED(seek between R/W, rb_cv_need_io_seek_between_rw, yes)
if test "$rb_cv_need_io_seek_between_rw" = yes; then
AC_DEFINE(NEED_IO_SEEK_BETWEEN_RW, 1)
fi
dnl RUBY_CHECK_IO_NEED(flush before seek, rb_cv_need_io_flush_before_seek, no)
dnl if test "$rb_cv_need_io_flush_before_seek" = yes; then
dnl AC_DEFINE(NEED_IO_FLUSH_BEFORE_SEEK, 1)
dnl fi
AC_CACHE_CHECK([whether st_ino is huge], rb_cv_huge_st_ino, AC_CACHE_CHECK([whether st_ino is huge], rb_cv_huge_st_ino,
[AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([ [AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([
#include <sys/stat.h> #include <sys/stat.h>

3
file.c
View file

@ -67,9 +67,6 @@ char *strrchr _((const char*,const char));
#ifndef HAVE_LSTAT #ifndef HAVE_LSTAT
#define lstat(path,st) stat(path,st) #define lstat(path,st) stat(path,st)
#endif #endif
#if !HAVE_FSEEKO && !defined(fseeko)
# define fseeko fseek
#endif
VALUE rb_cFile; VALUE rb_cFile;
VALUE rb_mFileTest; VALUE rb_mFileTest;

12
io.c
View file

@ -57,12 +57,6 @@
#if !HAVE_OFF_T && !defined(off_t) #if !HAVE_OFF_T && !defined(off_t)
# define off_t long # define off_t long
#endif #endif
#if !HAVE_FSEEKO && !defined(fseeko)
# define fseeko fseek
#endif
#if !HAVE_FTELLO && !defined(ftello)
# define ftello ftell
#endif
#include <sys/stat.h> #include <sys/stat.h>
@ -475,7 +469,7 @@ io_fwrite(str, fptr)
(fptr->wbuf && fptr->wbuf_capa <= fptr->wbuf_len + len) || (fptr->wbuf && fptr->wbuf_capa <= fptr->wbuf_len + len) ||
((fptr->mode & FMODE_LINEBUF) && memchr(RSTRING(str)->ptr+offset, '\n', len))) { ((fptr->mode & FMODE_LINEBUF) && memchr(RSTRING(str)->ptr+offset, '\n', len))) {
/* xxx: use writev to avoid double write if available */ /* xxx: use writev to avoid double write if available */
if (fptr->wbuf_len+len <= fptr->wbuf_capa) { if (fptr->wbuf_len && fptr->wbuf_len+len <= fptr->wbuf_capa) {
if (fptr->wbuf_capa < fptr->wbuf_off+fptr->wbuf_len+len) { if (fptr->wbuf_capa < fptr->wbuf_off+fptr->wbuf_len+len) {
MEMMOVE(fptr->wbuf, fptr->wbuf+fptr->wbuf_off, char, fptr->wbuf_len); MEMMOVE(fptr->wbuf, fptr->wbuf+fptr->wbuf_off, char, fptr->wbuf_len);
fptr->wbuf_off = 0; fptr->wbuf_off = 0;
@ -488,7 +482,9 @@ io_fwrite(str, fptr)
return -1L; return -1L;
if (n == 0) if (n == 0)
return len; return len;
if (!rb_thread_fd_writable(fptr->fd)) { /* avoid context switch between "a" and "\n" in STDERR.puts "a".
[ruby-dev:25080] */
if (fptr->f != stderr && !rb_thread_fd_writable(fptr->fd)) {
rb_io_check_closed(fptr); rb_io_check_closed(fptr);
} }
retry: retry:

View file

@ -99,29 +99,18 @@ NORETURN(void rb_eof_error _((void)));
void rb_io_read_check _((OpenFile*)); void rb_io_read_check _((OpenFile*));
int rb_io_read_pending _((OpenFile*)); int rb_io_read_pending _((OpenFile*));
int rb_getc _((FILE*))
#ifdef __GNUC__ #ifdef __GNUC__
__attribute__ ((deprecated)) # if ( __GNUC__ == 3 && __GNUC_MINOR__ > 0 ) || __GNUC__ > 3
# define DEPRECATED(x) x __attribute__ ((deprecated))
# endif
#endif #endif
; #ifndef DEPRECATED
long rb_io_fread _((char *, long, FILE *)) # define DEPRECATED(x) x
#ifdef __GNUC__
__attribute__ ((deprecated))
#endif #endif
;
long rb_io_fwrite _((const char *, long, FILE *)) DEPRECATED(int rb_getc _((FILE*)));
#ifdef __GNUC__ DEPRECATED(long rb_io_fread _((char *, long, FILE *)));
__attribute__ ((deprecated)) DEPRECATED(long rb_io_fwrite _((const char *, long, FILE *)));
#endif DEPRECATED(void rb_read_check _((FILE*)));
; DEPRECATED(int rb_read_pending _((FILE*)));
void rb_read_check _((FILE*))
#ifdef __GNUC__
__attribute__ ((deprecated))
#endif
;
int rb_read_pending _((FILE*))
#ifdef __GNUC__
__attribute__ ((deprecated))
#endif
;
#endif #endif