1 /* Copyright (C) 2004 Manuel Novoa III <mjn3@codepoet.org> 2 * 3 * GNU Library General Public License (LGPL) version 2 or later. 4 * 5 * Dedicated to Toni. See uClibc/DEDICATION.mjn3 for details. 6 */ 7 8 #include "_stdio.h" 9 #include <printf.h> 10 _load_inttype(int desttype,register const void * src,int uflag)11uintmax_t _load_inttype(int desttype, register const void *src, int uflag) 12 { 13 if (uflag >= 0) { /* unsigned */ 14 #if LONG_MAX != INT_MAX 15 if (desttype & (PA_FLAG_LONG|PA_FLAG_LONG_LONG)) { 16 #ifdef LLONG_MAX 17 if (desttype == PA_FLAG_LONG_LONG) { 18 return *((unsigned long long int *) src); 19 } 20 #endif 21 return *((unsigned long int *) src); 22 } 23 #else /* LONG_MAX != INT_MAX */ 24 #ifdef LLONG_MAX 25 if (desttype & PA_FLAG_LONG_LONG) { 26 return *((unsigned long long int *) src); 27 } 28 #endif 29 #endif /* LONG_MAX != INT_MAX */ 30 { 31 unsigned int x; 32 x = *((unsigned int *) src); 33 if (desttype == __PA_FLAG_CHAR) x = (unsigned char) x; 34 #if SHRT_MAX != INT_MAX 35 if (desttype == PA_FLAG_SHORT) x = (unsigned short int) x; 36 #endif 37 return x; 38 } 39 } else { /* signed */ 40 #if LONG_MAX != INT_MAX 41 if (desttype & (PA_FLAG_LONG|PA_FLAG_LONG_LONG)) { 42 #ifdef LLONG_MAX 43 if (desttype == PA_FLAG_LONG_LONG) { 44 return *((long long int *) src); 45 } 46 #endif 47 return *((long int *) src); 48 } 49 #else /* LONG_MAX != INT_MAX */ 50 #ifdef LLONG_MAX 51 if (desttype & PA_FLAG_LONG_LONG) { 52 return *((long long int *) src); 53 } 54 #endif 55 #endif /* LONG_MAX != INT_MAX */ 56 { 57 int x; 58 x = *((int *) src); 59 if (desttype == __PA_FLAG_CHAR) x = (signed char) x; 60 #if SHRT_MAX != INT_MAX 61 if (desttype == PA_FLAG_SHORT) x = (short int) x; 62 #endif 63 return x; 64 } 65 } 66 } 67