ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/CBOR-XS/XS.xs
(Generate patch)

Comparing CBOR-XS/XS.xs (file contents):
Revision 1.1 by root, Fri Oct 25 23:09:45 2013 UTC vs.
Revision 1.2 by root, Sat Oct 26 10:41:12 2013 UTC

504 504
505 for (;;) 505 for (;;)
506 { 506 {
507 WANT (1); 507 WANT (1);
508 508
509 if (*dec->cur == 0xe0 | 31) 509 if (*dec->cur == (0xe0 | 31))
510 { 510 {
511 ++dec->cur; 511 ++dec->cur;
512 break; 512 break;
513 } 513 }
514 514
547 547
548 for (;;) 548 for (;;)
549 { 549 {
550 WANT (1); 550 WANT (1);
551 551
552 if (*dec->cur == 0xe0 | 31) 552 if (*dec->cur == (0xe0 | 31))
553 { 553 {
554 ++dec->cur; 554 ++dec->cur;
555 break; 555 break;
556 } 556 }
557 557
752 // not very fast, and certainly not robust against illegal input 752 // not very fast, and certainly not robust against illegal input
753 for (;;) 753 for (;;)
754 { 754 {
755 WANT (1); 755 WANT (1);
756 756
757 if (*dec->cur == 0xe0 | 31) 757 if (*dec->cur == (0xe0 | 31))
758 { 758 {
759 ++dec->cur; 759 ++dec->cur;
760 break; 760 break;
761 } 761 }
762 762
820 return newSVsv (cbor_true); 820 return newSVsv (cbor_true);
821 case 22: 821 case 22:
822 return newSVsv (&PL_sv_undef); 822 return newSVsv (&PL_sv_undef);
823 823
824 case 25: 824 case 25:
825 // half float
826 abort ();
827 break; 825 {
826 WANT (2);
827
828 uint16_t fp = (dec->cur[0] << 8) | dec->cur[1];
829 dec->cur += 2;
830
831 return newSVnv (ecb_binary16_to_float (fp));
832 }
828 833
829 case 26: 834 case 26:
830 { 835 {
831 uint32_t fp; 836 uint32_t fp;
832 WANT (4); 837 WANT (4);
975 980
976 if (offset_return) 981 if (offset_return)
977 *offset_return = dec.cur; 982 *offset_return = dec.cur;
978 983
979 if (!(offset_return || !sv)) 984 if (!(offset_return || !sv))
980 {
981 if (*dec.cur && !dec.err) 985 if (dec.cur != dec.end && !dec.err)
982 {
983 dec.err = "garbage after CBOR object"; 986 dec.err = "garbage after CBOR object";
987
988 if (dec.err)
989 {
984 SvREFCNT_dec (sv); 990 SvREFCNT_dec (sv);
985 sv = 0;
986 }
987 }
988
989 if (!sv)
990 croak ("%s, at offset %d (octet 0x%02x)", dec.err, dec.cur - (U8 *)SvPVX (string), (int)(uint8_t)*dec.cur); 991 croak ("%s, at offset %d (octet 0x%02x)", dec.err, dec.cur - (U8 *)SvPVX (string), (int)(uint8_t)*dec.cur);
992 }
991 993
992 sv = sv_2mortal (sv); 994 sv = sv_2mortal (sv);
993 995
994 return sv; 996 return sv;
995} 997}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines