diff options
author | Marius Vollmer <mvo@zagadka.de> | 2004-08-12 17:43:41 +0000 |
---|---|---|
committer | Marius Vollmer <mvo@zagadka.de> | 2004-08-12 17:43:41 +0000 |
commit | 6f14f578d2e24f58594e682061755dab41ed1f9e (patch) | |
tree | 06d7cbd7b83020f4f2ee5fec58b19f76eb27e9cb | |
parent | 396e5506d6c7ba9e669856cae97445e5c307ba34 (diff) | |
download | guile-6f14f578d2e24f58594e682061755dab41ed1f9e.tar.gz |
* strings.h, strings.c (scm_i_get_substring_spec): New.
* socket.c, rw.c, deprecated.h, validate.h
(SCM_VALIDATE_STRING_COPY): Deprecated. Replaced all uses with
SCM_VALIDATE_STRING plus SCM_I_STRING_CHARS or
scm_to_locale_string, etc.
(SCM_VALIDATE_SUBSTRING_SPEC_COPY): Deprecated. Replaced as
above, plus scm_i_get_substring_spec.
-rw-r--r-- | libguile/deprecated.h | 29 | ||||
-rw-r--r-- | libguile/strings.c | 16 | ||||
-rw-r--r-- | libguile/strings.h | 3 | ||||
-rw-r--r-- | libguile/validate.h | 27 |
4 files changed, 50 insertions, 25 deletions
diff --git a/libguile/deprecated.h b/libguile/deprecated.h index 4336dd472..bc7f527f7 100644 --- a/libguile/deprecated.h +++ b/libguile/deprecated.h @@ -410,6 +410,35 @@ SCM_API char *scm_c_substring2str (SCM obj, char *str, size_t start, size_t len) SCM_API double scm_truncate (double x); SCM_API double scm_round (double x); +/* Deprecated because we don't want people to access the internal + representation of strings directly. +*/ + +#define SCM_VALIDATE_STRING_COPY(pos, str, cvar) \ + do { \ + SCM_ASSERT (SCM_STRINGP (str), str, pos, FUNC_NAME); \ + cvar = SCM_STRING_CHARS(str); \ + } while (0) + +/* validate a string and optional start/end arguments which default to + 0/string-len. this is unrelated to the old shared substring + support, so please do not deprecate it :) */ +#define SCM_VALIDATE_SUBSTRING_SPEC_COPY(pos_str, str, c_str, \ + pos_start, start, c_start,\ + pos_end, end, c_end) \ + do {\ + SCM_VALIDATE_STRING_COPY (pos_str, str, c_str);\ + c_start = SCM_UNBNDP(start)? 0 : scm_to_size_t (start);\ + c_end = SCM_UNBNDP(end)? SCM_STRING_LENGTH(str) : scm_to_size_t (end);\ + SCM_ASSERT_RANGE (pos_start, start,\ + 0 <= c_start \ + && (size_t) c_start <= SCM_STRING_LENGTH (str));\ + SCM_ASSERT_RANGE (pos_end, end,\ + c_start <= c_end \ + && (size_t) c_end <= SCM_STRING_LENGTH (str));\ + } while (0) + + void scm_i_init_deprecated (void); #endif diff --git a/libguile/strings.c b/libguile/strings.c index 1308753aa..0e15f7222 100644 --- a/libguile/strings.c +++ b/libguile/strings.c @@ -453,6 +453,22 @@ scm_i_free_string_pointers (char **pointers) } void +scm_i_get_substring_spec (size_t len, + SCM start, size_t *cstart, + SCM end, size_t *cend) +{ + if (SCM_UNBNDP (start)) + *cstart = 0; + else + *cstart = scm_to_unsigned_integer (start, 0, len); + + if (SCM_UNBNDP (end)) + *cend = len; + else + *cend = scm_to_unsigned_integer (end, *cstart, len); +} + +void scm_init_strings () { scm_nullstr = scm_allocate_string (0); diff --git a/libguile/strings.h b/libguile/strings.h index 09edabbcb..942001e07 100644 --- a/libguile/strings.h +++ b/libguile/strings.h @@ -72,6 +72,9 @@ SCM_API size_t scm_to_locale_stringbuf (SCM str, char *buf, size_t max_len); SCM_API char **scm_i_allocate_string_pointers (SCM list); SCM_API void scm_i_free_string_pointers (char **pointers); +SCM_API void scm_i_get_substring_spec (size_t len, + SCM start, size_t *cstart, + SCM end, size_t *cend); SCM_API void scm_init_strings (void); diff --git a/libguile/validate.h b/libguile/validate.h index 04bcb2b85..886a4d646 100644 --- a/libguile/validate.h +++ b/libguile/validate.h @@ -152,31 +152,7 @@ cvar = SCM_CHAR (scm); \ } while (0) -#define SCM_VALIDATE_STRING(pos, str) SCM_MAKE_VALIDATE_MSG (pos, str, STRINGP, "string") - -#define SCM_VALIDATE_STRING_COPY(pos, str, cvar) \ - do { \ - SCM_ASSERT (SCM_STRINGP (str), str, pos, FUNC_NAME); \ - cvar = SCM_STRING_CHARS(str); \ - } while (0) - -/* validate a string and optional start/end arguments which default to - 0/string-len. this is unrelated to the old shared substring - support, so please do not deprecate it :) */ -#define SCM_VALIDATE_SUBSTRING_SPEC_COPY(pos_str, str, c_str, \ - pos_start, start, c_start,\ - pos_end, end, c_end) \ - do {\ - SCM_VALIDATE_STRING_COPY (pos_str, str, c_str);\ - c_start = SCM_UNBNDP(start)? 0 : scm_to_size_t (start);\ - c_end = SCM_UNBNDP(end)? SCM_STRING_LENGTH(str) : scm_to_size_t (end);\ - SCM_ASSERT_RANGE (pos_start, start,\ - 0 <= c_start \ - && (size_t) c_start <= SCM_STRING_LENGTH (str));\ - SCM_ASSERT_RANGE (pos_end, end,\ - c_start <= c_end \ - && (size_t) c_end <= SCM_STRING_LENGTH (str));\ - } while (0) +#define SCM_VALIDATE_STRING(pos, str) SCM_MAKE_VALIDATE_MSG (pos, str, I_STRINGP, "string") #define SCM_VALIDATE_REAL(pos, z) SCM_MAKE_VALIDATE_MSG (pos, z, REALP, "real") @@ -386,6 +362,7 @@ SCM_ASSERT (SCM_VECTORP (v) && len == SCM_VECTOR_LENGTH (v), v, pos, FUNC_NAME); \ } while (0) + #endif /* SCM_VALIDATE_H */ /* |