summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark H Weaver <mhw@netris.org>2011-03-09 01:14:43 -0500
committerMark H Weaver <mhw@netris.org>2011-03-09 01:14:43 -0500
commitc428e58681fbd006d253bda51b3543110b317b8d (patch)
tree9b8f3108cab9cad997bc876aba8af64362336dad
parentce3ce21c623771ecafdf80c98519e80048cfedb7 (diff)
downloadguile-c428e58681fbd006d253bda51b3543110b317b8d.tar.gz
Add scm_from_latin1_keyword and scm_from_utf8_keyword
* libguile/keywords.c (scm_from_latin1_keyword, scm_from_utf8_keyword): New functions appropriate for use when keyword name is a constant. (scm_from_locale_keyword, scm_from_locale_keywordn): Change formal parameter from `str' to `name'. * libguile/keywords.h: Add prototypes for new functions. Change formal parameter of scm_from_locale_keyword* from `str' to `name'. * doc/ref/api-data.texi: Document new functions. Remind users that scm_from_locale_keyword should not be used when the name is a C string constant. Change formal parameter from `str' to `name'.
-rw-r--r--doc/ref/api-data.texi20
-rw-r--r--libguile/keywords.c20
-rw-r--r--libguile/keywords.h6
3 files changed, 36 insertions, 10 deletions
diff --git a/doc/ref/api-data.texi b/doc/ref/api-data.texi
index 7fa38d18a..e519cab60 100644
--- a/doc/ref/api-data.texi
+++ b/doc/ref/api-data.texi
@@ -5730,11 +5730,23 @@ Return the keyword with the same name as @var{symbol}.
Equivalent to @code{scm_is_true (scm_keyword_p (@var{obj}))}.
@end deftypefn
-@deftypefn {C Function} SCM scm_from_locale_keyword (const char *str)
-@deftypefnx {C Function} SCM scm_from_locale_keywordn (const char *str, size_t len)
+@deftypefn {C Function} SCM scm_from_locale_keyword (const char *name)
+@deftypefnx {C Function} SCM scm_from_locale_keywordn (const char *name, size_t len)
Equivalent to @code{scm_symbol_to_keyword (scm_from_locale_symbol
-(@var{str}))} and @code{scm_symbol_to_keyword (scm_from_locale_symboln
-(@var{str}, @var{len}))}, respectively.
+(@var{name}))} and @code{scm_symbol_to_keyword (scm_from_locale_symboln
+(@var{name}, @var{len}))}, respectively.
+
+Note that these functions should @emph{not} be used when @var{name} is a
+C string constant, because there is no guarantee that the current locale
+will match that of the source code. In such cases, use
+@code{scm_from_latin1_keyword} or @code{scm_from_utf8_keyword}.
+@end deftypefn
+
+@deftypefn {C Function} SCM scm_from_latin1_keyword (const char *name)
+@deftypefnx {C Function} SCM scm_from_utf8_keyword (const char *name)
+Equivalent to @code{scm_symbol_to_keyword (scm_from_latin1_symbol
+(@var{name}))} and @code{scm_symbol_to_keyword (scm_from_utf8_symbol
+(@var{name}))}, respectively.
@end deftypefn
@node Other Types
diff --git a/libguile/keywords.c b/libguile/keywords.c
index 0740801ae..3b9a9228c 100644
--- a/libguile/keywords.c
+++ b/libguile/keywords.c
@@ -101,15 +101,27 @@ scm_is_keyword (SCM val)
}
SCM
-scm_from_locale_keyword (const char *str)
+scm_from_locale_keyword (const char *name)
{
- return scm_symbol_to_keyword (scm_from_locale_symbol (str));
+ return scm_symbol_to_keyword (scm_from_locale_symbol (name));
}
SCM
-scm_from_locale_keywordn (const char *str, size_t len)
+scm_from_locale_keywordn (const char *name, size_t len)
{
- return scm_symbol_to_keyword (scm_from_locale_symboln (str, len));
+ return scm_symbol_to_keyword (scm_from_locale_symboln (name, len));
+}
+
+SCM
+scm_from_latin1_keyword (const char *name)
+{
+ return scm_symbol_to_keyword (scm_from_latin1_symbol (name));
+}
+
+SCM
+scm_from_utf8_keyword (const char *name)
+{
+ return scm_symbol_to_keyword (scm_from_utf8_symbol (name));
}
/* njrev: critical sections reviewed so far up to here */
diff --git a/libguile/keywords.h b/libguile/keywords.h
index bfffe5923..c9e6af14b 100644
--- a/libguile/keywords.h
+++ b/libguile/keywords.h
@@ -36,8 +36,10 @@ SCM_API SCM scm_symbol_to_keyword (SCM symbol);
SCM_API SCM scm_keyword_to_symbol (SCM keyword);
SCM_API int scm_is_keyword (SCM val);
-SCM_API SCM scm_from_locale_keyword (const char *str);
-SCM_API SCM scm_from_locale_keywordn (const char *str, size_t len);
+SCM_API SCM scm_from_locale_keyword (const char *name);
+SCM_API SCM scm_from_locale_keywordn (const char *name, size_t len);
+SCM_API SCM scm_from_latin1_keyword (const char *name);
+SCM_API SCM scm_from_utf8_keyword (const char *name);
SCM_INTERNAL void scm_init_keywords (void);