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)11 uintmax_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