1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_imm.c Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,70 @@ 1.4 +#include "qword.h" 1.5 +#include "x86_imm.h" 1.6 + 1.7 +#include <stdio.h> 1.8 + 1.9 +unsigned int x86_imm_signsized( unsigned char * buf, size_t buf_len, 1.10 + void *dest, unsigned int size ) { 1.11 + signed char *cp = (signed char *) dest; 1.12 + signed short *sp = (signed short *) dest; 1.13 + int32_t *lp = (int32_t *) dest; 1.14 + qword_t *qp = (qword_t *) dest; 1.15 + 1.16 + if ( size > buf_len ) { 1.17 + return 0; 1.18 + } 1.19 + 1.20 + /* Copy 'size' bytes from *buf to *op 1.21 + * return number of bytes copied */ 1.22 + switch (size) { 1.23 + case 1: /* BYTE */ 1.24 + *cp = *((signed char *) buf); 1.25 + break; 1.26 + case 2: /* WORD */ 1.27 + *sp = *((signed short *) buf); 1.28 + break; 1.29 + case 6: 1.30 + case 8: /* QWORD */ 1.31 + *qp = *((qword_t *) buf); 1.32 + break; 1.33 + case 4: /* DWORD */ 1.34 + default: 1.35 + *lp = *((int32_t *) buf); 1.36 + break; 1.37 + } 1.38 + return (size); 1.39 +} 1.40 + 1.41 +unsigned int x86_imm_sized( unsigned char * buf, size_t buf_len, void *dest, 1.42 + unsigned int size ) { 1.43 + unsigned char *cp = (unsigned char *) dest; 1.44 + unsigned short *sp = (unsigned short *) dest; 1.45 + uint32_t *lp = (uint32_t *) dest; 1.46 + qword_t *qp = (qword_t *) dest; 1.47 + 1.48 + if ( size > buf_len ) { 1.49 + return 0; 1.50 + } 1.51 + 1.52 + /* Copy 'size' bytes from *buf to *op 1.53 + * return number of bytes copied */ 1.54 + switch (size) { 1.55 + case 1: /* BYTE */ 1.56 + *cp = *((unsigned char *) buf); 1.57 + break; 1.58 + case 2: /* WORD */ 1.59 + *sp = *((unsigned short *) buf); 1.60 + break; 1.61 + case 6: 1.62 + case 8: /* QWORD */ 1.63 + *qp = *((qword_t *) buf); 1.64 + break; 1.65 + case 4: /* DWORD */ 1.66 + default: 1.67 + *lp = *((uint32_t *) buf); 1.68 + break; 1.69 + } 1.70 + 1.71 + return (size); 1.72 +} 1.73 +