Skip to content

Commit 1f51bce

Browse files
committed
Be extra-careful and use u8 character literals
This way, you could (theoretically) use this library on an EBCDIC system. I have no idea why you would *want* to, but that's another question.
1 parent ed2b677 commit 1f51bce

File tree

1 file changed

+19
-19
lines changed

1 file changed

+19
-19
lines changed

include/bencode.hpp

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -379,9 +379,9 @@ namespace bencode {
379379
return value;
380380

381381
if constexpr(std::is_signed_v<Integer>)
382-
value = value * 10 + (*begin++ - '0') * sgn;
382+
value = value * 10 + (*begin++ - u8'0') * sgn;
383383
else
384-
value = value * 10 + (*begin++ - '0');
384+
value = value * 10 + (*begin++ - u8'0');
385385
}
386386
if(begin == end)
387387
throw end_of_input_error();
@@ -391,10 +391,10 @@ namespace bencode {
391391
if(std::isdigit(*begin)) {
392392
Integer digit;
393393
if constexpr(std::is_signed_v<Integer>) {
394-
digit = (*begin++ - '0') * sgn;
394+
digit = (*begin++ - u8'0') * sgn;
395395
check_over_underflow(value, digit, sgn);
396396
} else {
397-
digit = (*begin++ - '0');
397+
digit = (*begin++ - u8'0');
398398
check_overflow(value, digit);
399399
}
400400
value = value * 10 + digit;
@@ -413,10 +413,10 @@ namespace bencode {
413413

414414
template<typename Integer, typename Iter>
415415
Integer decode_int(Iter &begin, Iter end) {
416-
assert(*begin == 'i');
416+
assert(*begin == u8'i');
417417
++begin;
418418
Integer sgn = 1;
419-
if(*begin == '-') {
419+
if(*begin == u8'-') {
420420
if constexpr(std::is_unsigned_v<Integer>) {
421421
throw std::underflow_error("expected unsigned integer");
422422
} else {
@@ -426,7 +426,7 @@ namespace bencode {
426426
}
427427

428428
Integer value = decode_digits<Integer>(begin, end, sgn);
429-
if(*begin != 'e')
429+
if(*begin != u8'e')
430430
throw syntax_error("expected 'e' token");
431431

432432
++begin;
@@ -490,7 +490,7 @@ namespace bencode {
490490
std::size_t len = decode_digits<std::size_t>(begin, end);
491491
if(begin == end)
492492
throw end_of_input_error();
493-
if(*begin != ':')
493+
if(*begin != u8':')
494494
throw syntax_error("expected ':' token");
495495
++begin;
496496

@@ -543,7 +543,7 @@ namespace bencode {
543543
if(begin == end)
544544
throw end_of_input_error();
545545

546-
if(*begin == 'e') {
546+
if(*begin == u8'e') {
547547
if(!state.empty()) {
548548
++begin;
549549
state.pop();
@@ -559,12 +559,12 @@ namespace bencode {
559559
throw end_of_input_error();
560560
}
561561

562-
if(*begin == 'i') {
562+
if(*begin == u8'i') {
563563
store(detail::decode_int<Integer>(begin, end));
564-
} else if(*begin == 'l') {
564+
} else if(*begin == u8'l') {
565565
++begin;
566566
state.push(store( List{} ));
567-
} else if(*begin == 'd') {
567+
} else if(*begin == u8'd') {
568568
++begin;
569569
state.push(store( Dict{} ));
570570
} else if(std::isdigit(*begin)) {
@@ -699,11 +699,11 @@ namespace bencode {
699699
class list_encoder {
700700
public:
701701
inline list_encoder(Iter &iter) : iter(iter) {
702-
*iter++ = 'l';
702+
*iter++ = u8'l';
703703
}
704704

705705
inline ~list_encoder() {
706-
*iter++ = 'e';
706+
*iter++ = u8'e';
707707
}
708708

709709
template<typename T>
@@ -716,11 +716,11 @@ namespace bencode {
716716
class dict_encoder {
717717
public:
718718
inline dict_encoder(Iter &iter) : iter(iter) {
719-
*iter++ = 'd';
719+
*iter++ = u8'd';
720720
}
721721

722722
inline ~dict_encoder() {
723-
*iter++ = 'e';
723+
*iter++ = u8'e';
724724
}
725725

726726
template<typename T>
@@ -744,15 +744,15 @@ namespace bencode {
744744

745745
template<detail::output_iterator_ref Iter>
746746
inline void encode(Iter &&iter, integer value) {
747-
*iter++ = 'i';
747+
*iter++ = u8'i';
748748
detail::write_integer(iter, value);
749-
*iter++ = 'e';
749+
*iter++ = u8'e';
750750
}
751751

752752
template<detail::output_iterator_ref Iter>
753753
inline void encode(Iter &&iter, const string_view &value) {
754754
detail::write_integer(iter, value.size());
755-
*iter++ = ':';
755+
*iter++ = u8':';
756756
std::copy(value.begin(), value.end(), iter);
757757
}
758758

0 commit comments

Comments
 (0)