summaryrefslogtreecommitdiff
path: root/libguile/fports.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2015-01-22 14:37:52 +0100
committerAndy Wingo <wingo@pobox.com>2015-01-22 14:37:52 +0100
commitbaa74d36959739d7669cefb1918ab777ce9dcf56 (patch)
tree34fe4bddaf9844135e68ee5f99498cb16ea27a06 /libguile/fports.c
parent6f248df1f67cfc18b210a431d540077f9f4b8da2 (diff)
parent37b1453032488de582175270d1b3a1653ea81457 (diff)
downloadguile-baa74d36959739d7669cefb1918ab777ce9dcf56.tar.gz
Merge commit '37b1453032488de582175270d1b3a1653ea81457'
Diffstat (limited to 'libguile/fports.c')
-rw-r--r--libguile/fports.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/libguile/fports.c b/libguile/fports.c
index cbd3a618f..8395f0e65 100644
--- a/libguile/fports.c
+++ b/libguile/fports.c
@@ -1,6 +1,6 @@
/* Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
* 2004, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
- * 2014 Free Software Foundation, Inc.
+ * 2014, 2015 Free Software Foundation, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
@@ -342,7 +342,8 @@ scm_open_file_with_encoding (SCM filename, SCM mode,
SCM port;
int fdes, flags = 0, binary = 0;
unsigned int retries;
- char *file, *md, *ptr;
+ char *file;
+ const char *md, *ptr;
if (SCM_UNLIKELY (!(scm_is_false (encoding) || scm_is_string (encoding))))
scm_wrong_type_arg_msg (FUNC_NAME, 0, encoding,
@@ -353,8 +354,10 @@ scm_open_file_with_encoding (SCM filename, SCM mode,
file = scm_to_locale_string (filename);
scm_dynwind_free (file);
- md = scm_to_locale_string (mode);
- scm_dynwind_free (md);
+ if (SCM_UNLIKELY (!scm_i_try_narrow_string (mode)))
+ scm_out_of_range (FUNC_NAME, mode);
+
+ md = scm_i_string_chars (mode);
switch (*md)
{