_load_inttype.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. #include "_stdio.h"
  8. #include <printf.h>
  9. uintmax_t _load_inttype(int desttype, register const void *src, int uflag) attribute_hidden;
  10. uintmax_t _load_inttype(int desttype, register const void *src, int uflag)
  11. {
  12. if (uflag >= 0) { /* unsigned */
  13. #if LONG_MAX != INT_MAX
  14. if (desttype & (PA_FLAG_LONG|PA_FLAG_LONG_LONG)) {
  15. #ifdef LLONG_MAX
  16. if (desttype == PA_FLAG_LONG_LONG) {
  17. return *((unsigned long long int *) src);
  18. }
  19. #endif
  20. return *((unsigned long int *) src);
  21. }
  22. #else /* LONG_MAX != INT_MAX */
  23. #ifdef LLONG_MAX
  24. if (desttype & PA_FLAG_LONG_LONG) {
  25. return *((unsigned long long int *) src);
  26. }
  27. #endif
  28. #endif /* LONG_MAX != INT_MAX */
  29. {
  30. unsigned int x;
  31. x = *((unsigned int *) src);
  32. if (desttype == __PA_FLAG_CHAR) x = (unsigned char) x;
  33. #if SHRT_MAX != INT_MAX
  34. if (desttype == PA_FLAG_SHORT) x = (unsigned short int) x;
  35. #endif
  36. return x;
  37. }
  38. } else { /* signed */
  39. #if LONG_MAX != INT_MAX
  40. if (desttype & (PA_FLAG_LONG|PA_FLAG_LONG_LONG)) {
  41. #ifdef LLONG_MAX
  42. if (desttype == PA_FLAG_LONG_LONG) {
  43. return *((long long int *) src);
  44. }
  45. #endif
  46. return *((long int *) src);
  47. }
  48. #else /* LONG_MAX != INT_MAX */
  49. #ifdef LLONG_MAX
  50. if (desttype & PA_FLAG_LONG_LONG) {
  51. return *((long long int *) src);
  52. }
  53. #endif
  54. #endif /* LONG_MAX != INT_MAX */
  55. {
  56. int x;
  57. x = *((int *) src);
  58. if (desttype == __PA_FLAG_CHAR) x = (char) x;
  59. #if SHRT_MAX != INT_MAX
  60. if (desttype == PA_FLAG_SHORT) x = (short int) x;
  61. #endif
  62. return x;
  63. }
  64. }
  65. }