1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-12 06:41:13 +02:00

(gh_chars2byvect): Reimplemented with scm_make_s8vector.

(gh_scm2chars): Handle s8vectors, removed code for scm_tc7_byvect.
This commit is contained in:
Marius Vollmer 2004-10-27 18:29:20 +00:00
parent d315ee57b4
commit 2a7bd73833

View file

@ -133,9 +133,10 @@ makvect (char *m, size_t len, int type)
SCM SCM
gh_chars2byvect (const char *d, long n) gh_chars2byvect (const char *d, long n)
{ {
char *m = scm_gc_malloc (n * sizeof (char), "vector"); SCM uvec = scm_make_s8vector (scm_from_long (n), SCM_UNDEFINED);
char *m = scm_s8vector_elements (uvec);
memcpy (m, d, n * sizeof (char)); memcpy (m, d, n * sizeof (char));
return makvect (m, n, scm_tc7_byvect); return uvec;
} }
SCM SCM
@ -250,14 +251,20 @@ gh_scm2chars (SCM obj, char *m)
m[i] = SCM_I_INUM (SCM_VELTS (obj)[i]); m[i] = SCM_I_INUM (SCM_VELTS (obj)[i]);
break; break;
#if SCM_HAVE_ARRAYS #if SCM_HAVE_ARRAYS
case scm_tc7_byvect: case scm_tc7_smob:
n = SCM_UVECTOR_LENGTH (obj); if (scm_is_true (scm_s8vector_p (obj)))
if (m == 0) {
m = (char *) malloc (n * sizeof (char)); n = scm_to_long (scm_s8vector_length (obj));
if (m == NULL) if (m == 0)
return NULL; m = (char *) malloc (n * sizeof (char));
memcpy (m, SCM_VELTS (obj), n * sizeof (char)); if (m == NULL)
break; return NULL;
memcpy (m, scm_s8vector_elements (obj), n * sizeof (char));
scm_remember_upto_here_1 (obj);
break;
}
else
goto wrong_type;
#endif #endif
case scm_tc7_string: case scm_tc7_string:
n = scm_i_string_length (obj); n = scm_i_string_length (obj);
@ -268,6 +275,7 @@ gh_scm2chars (SCM obj, char *m)
memcpy (m, scm_i_string_chars (obj), n * sizeof (char)); memcpy (m, scm_i_string_chars (obj), n * sizeof (char));
break; break;
default: default:
wrong_type:
scm_wrong_type_arg (0, 0, obj); scm_wrong_type_arg (0, 0, obj);
} }
return m; return m;