diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-01-09 08:05:32 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-01-09 08:05:32 +0000 |
commit | 99628bf1f0f401ef2ad877675321432ebb9a7586 (patch) | |
tree | 26c8cdcbb0f6a28883ad894bcfae033df866b1ce /configure.in | |
parent | 639ec768584589b8ebfc98dcb41dfe8db76a1aba (diff) |
* configure.in (RUBY_CHECK_IO_NEED): check whether fseek() and
fflush() are needed.
* io.c (flush_before_seek): flush write stream only.
* io.c (rb_io_check_readable): seek instead of flush if the last
operation was write.
* io.c (rb_io_check_writable): seek instead of flush if the last
operation was read.
* bcc32/Makefile.sub, win32/Makefile.sub: needs to seek between
R/W.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3318 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'configure.in')
-rw-r--r-- | configure.in | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/configure.in b/configure.in index b6bc0a03d4..1619b798df 100644 --- a/configure.in +++ b/configure.in @@ -265,14 +265,14 @@ darwin*) LIBS="-lobjc $LIBS";; human*) ac_cv_func_getpgrp_void=yes;; beos*) ;; cygwin*) rb_cv_have_daylight=no - rb_cv_need_io_flush_between_rw=no + rb_cv_need_io_seek_between_rw=no rb_cv_need_io_flush_before_seek=no ac_cv_var_tzname=no ac_cv_func__setjmp=no ac_cv_func_setitimer=no ;; mingw*) LIBS="-lwsock32 $LIBS" - rb_cv_need_io_flush_between_rw=yes + rb_cv_need_io_seek_between_rw=yes rb_cv_need_io_flush_before_seek=no ac_cv_header_a_out_h=no ac_cv_header_pwd_h=no @@ -559,10 +559,19 @@ else fi fi -AC_DEFUN(RUBY_CHECK_IO_NEED_FLUSH, -[AC_CACHE_CHECK(whether need to flush [$1], [$2], +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"; @@ -576,14 +585,11 @@ int main() if (!(f = fopen(fn, "w+"))) return 1; fputs(wombat, f); - fflush(f); - fseek(f, 0, 0); + do_seek(f, SEEK_SET); if (!fgets(buf, BUFSIZ, f) || strcmp(buf, wombat)) goto fail; - ]ifelse(index($2,between_rw),-1,fflush(f);)[ + reset_rw(f); fputs(koara, f); - ]ifelse(index($2,before_seek),-1,fflush(f);)[ - fseek(f, 0, 0); - ]ifelse(index($2,between_rw),-1,fflush(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; r = 0; @@ -593,14 +599,22 @@ int main() return r; } ], [$2]=no, [$2]=yes, [$2]=yes)])]) - -RUBY_CHECK_IO_NEED_FLUSH(between R/W, rb_cv_need_io_flush_between_rw) -RUBY_CHECK_IO_NEED_FLUSH(before seek, rb_cv_need_io_flush_before_seek) -if test "$rb_cv_need_io_flush_between_rw" = yes; then - AC_DEFINE(NEED_IO_FLUSH_BETWEEN_RW, 1) +RUBY_CHECK_IO_NEED(seek between R/W, rb_cv_need_io_seek_between_rw) +RUBY_CHECK_IO_NEED(flush before seek, rb_cv_need_io_flush_before_seek) +check_to_do_something_else=no +if test "$rb_cv_need_io_seek_between_rw" = yes; then + AC_DEFINE(NEED_IO_SEEK_BETWEEN_RW, 1) + check_to_do_something_else=yes fi if test "$rb_cv_need_io_flush_before_seek" = yes; then AC_DEFINE(NEED_IO_FLUSH_BEFORE_SEEK, 1) + check_to_do_something_else=yes +fi +if test "$cross_compiling" = no -a "$check_to_do_something_else" = yes; then + RUBY_CHECK_IO_NEED(do something else, unexpected_stdio_behavior) + if test "$unexpected_stdio_behavior" = yes; then + AC_MSG_FAILURE([unexpected stdio behavior]) + fi fi dnl default value for $KANJI |