| 219 | } |
| 220 | |
| 221 | void mp_encode_int(lua_State *L, mp_buf *buf, int64_t n) { |
| 222 | unsigned char b[9]; |
| 223 | int enclen; |
| 224 | |
| 225 | if (n >= 0) { |
| 226 | if (n <= 127) { |
| 227 | b[0] = n & 0x7f; /* positive fixnum */ |
| 228 | enclen = 1; |
| 229 | } else if (n <= 0xff) { |
| 230 | b[0] = 0xcc; /* uint 8 */ |
| 231 | b[1] = n & 0xff; |
| 232 | enclen = 2; |
| 233 | } else if (n <= 0xffff) { |
| 234 | b[0] = 0xcd; /* uint 16 */ |
| 235 | b[1] = (n & 0xff00) >> 8; |
| 236 | b[2] = n & 0xff; |
| 237 | enclen = 3; |
| 238 | } else if (n <= 0xffffffffLL) { |
| 239 | b[0] = 0xce; /* uint 32 */ |
| 240 | b[1] = (n & 0xff000000) >> 24; |
| 241 | b[2] = (n & 0xff0000) >> 16; |
| 242 | b[3] = (n & 0xff00) >> 8; |
| 243 | b[4] = n & 0xff; |
| 244 | enclen = 5; |
| 245 | } else { |
| 246 | b[0] = 0xcf; /* uint 64 */ |
| 247 | b[1] = (n & 0xff00000000000000LL) >> 56; |
| 248 | b[2] = (n & 0xff000000000000LL) >> 48; |
| 249 | b[3] = (n & 0xff0000000000LL) >> 40; |
| 250 | b[4] = (n & 0xff00000000LL) >> 32; |
| 251 | b[5] = (n & 0xff000000) >> 24; |
| 252 | b[6] = (n & 0xff0000) >> 16; |
| 253 | b[7] = (n & 0xff00) >> 8; |
| 254 | b[8] = n & 0xff; |
| 255 | enclen = 9; |
| 256 | } |
| 257 | } else { |
| 258 | if (n >= -32) { |
| 259 | b[0] = ((signed char)n); /* negative fixnum */ |
| 260 | enclen = 1; |
| 261 | } else if (n >= -128) { |
| 262 | b[0] = 0xd0; /* int 8 */ |
| 263 | b[1] = n & 0xff; |
| 264 | enclen = 2; |
| 265 | } else if (n >= -32768) { |
| 266 | b[0] = 0xd1; /* int 16 */ |
| 267 | b[1] = (n & 0xff00) >> 8; |
| 268 | b[2] = n & 0xff; |
| 269 | enclen = 3; |
| 270 | } else if (n >= -2147483648LL) { |
| 271 | b[0] = 0xd2; /* int 32 */ |
| 272 | b[1] = (n & 0xff000000) >> 24; |
| 273 | b[2] = (n & 0xff0000) >> 16; |
| 274 | b[3] = (n & 0xff00) >> 8; |
| 275 | b[4] = n & 0xff; |
| 276 | enclen = 5; |
| 277 | } else { |
| 278 | b[0] = 0xd3; /* int 64 */ |
no test coverage detected