diff options
author | Ludovic Courtès <ludo@gnu.org> | 2009-11-27 17:00:51 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2009-11-27 17:00:51 +0100 |
commit | 49bb5bd30714af627ae78b0897ab05ba566e7c00 (patch) | |
tree | 44de262969308a5a9eccc1bc40105b4e11feef94 | |
parent | 2858deaf47f339eff71574e42536f8d6955fb5a9 (diff) | |
download | guile-49bb5bd30714af627ae78b0897ab05ba566e7c00.tar.gz |
Disable encoding scanning on non-seekable file ports.
* libguile/read.c (scm_i_scan_for_encoding): Don't attempt to scan
non-seekable file ports.
-rw-r--r-- | libguile/read.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/libguile/read.c b/libguile/read.c index 4772c3218..5219334b4 100644 --- a/libguile/read.c +++ b/libguile/read.c @@ -42,6 +42,7 @@ #include "libguile/hashtab.h" #include "libguile/hash.h" #include "libguile/ports.h" +#include "libguile/fports.h" #include "libguile/root.h" #include "libguile/strings.h" #include "libguile/strports.h" @@ -1476,7 +1477,13 @@ scm_i_scan_for_encoding (SCM port) int i; int in_comment; - bytes_read = scm_c_read (port, header, SCM_ENCODING_SEARCH_SIZE); + if (SCM_FPORTP (port) && !SCM_FDES_RANDOM_P (SCM_FPORT_FDES (port))) + /* PORT is a non-seekable file port (e.g., as created by Bash when using + "guile <(echo '(display "hello")')") so bail out. */ + return NULL; + + bytes_read = scm_c_read (port, header, SCM_ENCODING_SEARCH_SIZE); + scm_seek (port, scm_from_int (0), scm_from_int (SEEK_SET)); if (bytes_read > 3 |