must_be_characters(Bs),
'$chars_base64'(Cs, Bs, Padding, Charset)
; must_be_characters(Cs),
- '$chars_base64'(Cs, Bs, Padding, Charset)
+ ( '$first_non_octet'(Cs, N) ->
+ domain_error(byte_char, N, chars_base64/3)
+ ; '$chars_base64'(Cs, Bs, Padding, Charset)
+ )
).
must_be_characters(Cs) :-
format(Stream, Fs, Args) :-
phrase(format_(Fs, Args), Cs),
+ ( stream_property(Stream, type(binary)) ->
+ ( '$first_non_octet'(Cs, N) ->
+ domain_error(byte_char, N, format/3)
+ ; true
+ )
+ ; true
+ ),
% we use a specialised internal predicate that uses only a
% single "write" operation for efficiency. It is equivalent to
% maplist(put_char(Stream), Cs). It also works for binary streams.
if stream.options().stream_type == StreamType::Binary {
for c in string.chars() {
- if c as u32 > 255 {
- let stub = MachineError::functor_stub(clause_name!("$put_chars"), 2);
-
- let err = MachineError::type_error(
- self.heap.h(),
- ValidType::Byte,
- Addr::Char(c),
- );
-
- return Err(self.error_form(err, stub));
- }
-
bytes.push(c as u8);
}
} else {
} else {
let mut bytes = vec![];
for c in self.heap_pstr_iter(self[temp_v!(1)]).to_string().chars() {
- if c as u32 > 255 {
- let stub = MachineError::functor_stub(clause_name!("chars_base64"), 3);
-
- let err = MachineError::type_error(
- self.heap.h(),
- ValidType::Byte,
- Addr::Char(c),
- );
-
- return Err(self.error_form(err, stub));
- }
-
bytes.push(c as u8);
}
let b64 = base64::encode_config(bytes, config);