|  | #include "qword.h" | 
|  | #include "x86_imm.h" | 
|  |  | 
|  | #include <stdio.h> | 
|  |  | 
|  | unsigned int x86_imm_signsized( unsigned char * buf, size_t buf_len, | 
|  | void *dest, unsigned int size ) { | 
|  | signed char *cp = (signed char *) dest; | 
|  | signed short *sp = (signed short *) dest; | 
|  | int32_t *lp = (int32_t *) dest; | 
|  | qword_t *qp = (qword_t *) dest; | 
|  |  | 
|  | if ( size > buf_len ) { | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | /* Copy 'size' bytes from *buf to *op | 
|  | * return number of bytes copied */ | 
|  | switch (size) { | 
|  | case 1:		/* BYTE */ | 
|  | *cp =  *((signed char *) buf); | 
|  | break; | 
|  | case 2:		/* WORD */ | 
|  | *sp =  *((signed short *) buf); | 
|  | break; | 
|  | case 6: | 
|  | case 8:		/* QWORD */ | 
|  | *qp = *((qword_t *) buf); | 
|  | break; | 
|  | case 4:		/* DWORD */ | 
|  | default: | 
|  | *lp = *((int32_t *) buf); | 
|  | break; | 
|  | } | 
|  | return (size); | 
|  | } | 
|  |  | 
|  | unsigned int x86_imm_sized( unsigned char * buf, size_t buf_len, void *dest, | 
|  | unsigned int size ) { | 
|  | unsigned char *cp = (unsigned char *) dest; | 
|  | unsigned short *sp = (unsigned short *) dest; | 
|  | uint32_t *lp = (uint32_t *) dest; | 
|  | qword_t *qp = (qword_t *) dest; | 
|  |  | 
|  | if ( size > buf_len ) { | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | /* Copy 'size' bytes from *buf to *op | 
|  | * return number of bytes copied */ | 
|  | switch (size) { | 
|  | case 1:		/* BYTE */ | 
|  | *cp =  *((unsigned char *) buf); | 
|  | break; | 
|  | case 2:		/* WORD */ | 
|  | *sp =  *((unsigned short *) buf); | 
|  | break; | 
|  | case 6: | 
|  | case 8:		/* QWORD */ | 
|  | *qp = *((qword_t *) buf); | 
|  | break; | 
|  | case 4:		/* DWORD */ | 
|  | default: | 
|  | *lp = *((uint32_t *) buf); | 
|  | break; | 
|  | } | 
|  |  | 
|  | return (size); | 
|  | } | 
|  |  |