@@ -683,6 +683,66 @@ static inline int msgpack_pack_raw_body(msgpack_packer* x, const void* b, size_t
683683 msgpack_pack_append_buffer (x , (const unsigned char * )b , l );
684684}
685685
686+ /*
687+ * Ext
688+ */
689+
690+ static inline int msgpack_pack_ext (msgpack_packer * x , int8_t typecode , size_t l )
691+ {
692+ if (l == 1 ) {
693+ unsigned char buf [2 ];
694+ buf [0 ] = 0xd4 ;
695+ buf [1 ] = (unsigned char )typecode ;
696+ msgpack_pack_append_buffer (x , buf , 2 );
697+ }
698+ else if (l == 2 ) {
699+ unsigned char buf [2 ];
700+ buf [0 ] = 0xd5 ;
701+ buf [1 ] = (unsigned char )typecode ;
702+ msgpack_pack_append_buffer (x , buf , 2 );
703+ }
704+ else if (l == 4 ) {
705+ unsigned char buf [2 ];
706+ buf [0 ] = 0xd6 ;
707+ buf [1 ] = (unsigned char )typecode ;
708+ msgpack_pack_append_buffer (x , buf , 2 );
709+ }
710+ else if (l == 8 ) {
711+ unsigned char buf [2 ];
712+ buf [0 ] = 0xd7 ;
713+ buf [1 ] = (unsigned char )typecode ;
714+ msgpack_pack_append_buffer (x , buf , 2 );
715+ }
716+ else if (l == 16 ) {
717+ unsigned char buf [2 ];
718+ buf [0 ] = 0xd8 ;
719+ buf [1 ] = (unsigned char )typecode ;
720+ msgpack_pack_append_buffer (x , buf , 2 );
721+ }
722+ else if (l < 256 ) {
723+ unsigned char buf [3 ];
724+ buf [0 ] = 0xc7 ;
725+ buf [1 ] = l ;
726+ buf [2 ] = (unsigned char )typecode ;
727+ msgpack_pack_append_buffer (x , buf , 3 );
728+ } else if (l < 65536 ) {
729+ unsigned char buf [4 ];
730+ buf [0 ] = 0xc8 ;
731+ _msgpack_store16 (& buf [1 ], (uint16_t )l );
732+ buf [3 ] = (unsigned char )typecode ;
733+ msgpack_pack_append_buffer (x , buf , 4 );
734+ } else {
735+ unsigned char buf [6 ];
736+ buf [0 ] = 0xc9 ;
737+ _msgpack_store32 (& buf [1 ], (uint32_t )l );
738+ buf [5 ] = (unsigned char )typecode ;
739+ msgpack_pack_append_buffer (x , buf , 6 );
740+ }
741+
742+ }
743+
744+
745+
686746#undef msgpack_pack_append_buffer
687747
688748#undef TAKE8_8
0 commit comments