mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
Fix bytevector-fill! to accept fill arguments greater than 127.
Fixes <http://bugs.gnu.org/19027>. * libguile/bytevectors.c (scm_bytevector_fill_x): Accept fill arguments between -128 and 255. * test-suite/tests/bytevectors.test ("2.2 General Operations"): Add tests.
This commit is contained in:
parent
81d2c84674
commit
ae6f77ddfa
2 changed files with 21 additions and 1 deletions
|
@ -537,9 +537,14 @@ SCM_DEFINE (scm_bytevector_fill_x, "bytevector-fill!", 2, 0, 0,
|
||||||
{
|
{
|
||||||
size_t c_len, i;
|
size_t c_len, i;
|
||||||
scm_t_uint8 *c_bv, c_fill;
|
scm_t_uint8 *c_bv, c_fill;
|
||||||
|
int value;
|
||||||
|
|
||||||
SCM_VALIDATE_BYTEVECTOR (1, bv);
|
SCM_VALIDATE_BYTEVECTOR (1, bv);
|
||||||
c_fill = scm_to_int8 (fill);
|
|
||||||
|
value = scm_to_int (fill);
|
||||||
|
if (SCM_UNLIKELY ((value < -128) || (value > 255)))
|
||||||
|
scm_out_of_range (FUNC_NAME, fill);
|
||||||
|
c_fill = (scm_t_uint8) value;
|
||||||
|
|
||||||
c_len = SCM_BYTEVECTOR_LENGTH (bv);
|
c_len = SCM_BYTEVECTOR_LENGTH (bv);
|
||||||
c_bv = (scm_t_uint8 *) SCM_BYTEVECTOR_CONTENTS (bv);
|
c_bv = (scm_t_uint8 *) SCM_BYTEVECTOR_CONTENTS (bv);
|
||||||
|
|
|
@ -46,6 +46,21 @@
|
||||||
(not (bytevector=? (make-bytevector 20 7)
|
(not (bytevector=? (make-bytevector 20 7)
|
||||||
(make-bytevector 20 0)))))
|
(make-bytevector 20 0)))))
|
||||||
|
|
||||||
|
;; This failed prior to Guile 2.0.12.
|
||||||
|
;; See <http://bugs.gnu.org/19027>.
|
||||||
|
(pass-if-equal "bytevector-fill! with fill 255"
|
||||||
|
#vu8(255 255 255 255)
|
||||||
|
(let ((bv (make-bytevector 4)))
|
||||||
|
(bytevector-fill! bv 255)
|
||||||
|
bv))
|
||||||
|
|
||||||
|
;; This is a Guile-specific extension.
|
||||||
|
(pass-if-equal "bytevector-fill! with fill -128"
|
||||||
|
#vu8(128 128 128 128)
|
||||||
|
(let ((bv (make-bytevector 4)))
|
||||||
|
(bytevector-fill! bv -128)
|
||||||
|
bv))
|
||||||
|
|
||||||
(pass-if "bytevector-copy! overlapping"
|
(pass-if "bytevector-copy! overlapping"
|
||||||
;; See <http://debbugs.gnu.org/10070>.
|
;; See <http://debbugs.gnu.org/10070>.
|
||||||
(let ((b (u8-list->bytevector '(1 2 3 4 5 6 7 8))))
|
(let ((b (u8-list->bytevector '(1 2 3 4 5 6 7 8))))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue