internal.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*
  2. * This code was written by Rich Felker in 2010; no copyright is claimed.
  3. * This code is in the public domain. Attribution is appreciated but
  4. * unnecessary.
  5. */
  6. #define LIBC
  7. #ifndef LIBC
  8. /* rename functions not to conflict with libc */
  9. #ifndef myprefix
  10. #define myprefix fsmu8_
  11. #endif
  12. #define concat2(a,b) a ## b
  13. #define concat(a,b) concat2(a,b)
  14. #define prefix(b) concat(myprefix,b)
  15. #undef mblen
  16. #undef mbrlen
  17. #undef mbrtowc
  18. #undef mbsinit
  19. #undef mbsnrtowcs
  20. #undef mbsrtowcs
  21. #undef wcrtomb
  22. #undef wcsrtombs
  23. #undef wcstombs
  24. #undef wctomb
  25. #define mblen prefix(mblen)
  26. #define mbrlen prefix(mbrlen)
  27. #define mbrtowc prefix(mbrtowc)
  28. #define mbsinit prefix(mbsinit)
  29. #define mbsnrtowcs prefix(mbsnrtowcs)
  30. #define mbsrtowcs prefix(mbsrtowcs)
  31. #define mbstowcs prefix(mbstowcs)
  32. #define wcrtomb prefix(wcrtomb)
  33. #define wcsnrtombs prefix(wcsnrtombs)
  34. #define wcsrtombs prefix(wcsrtombs)
  35. #define wcstombs prefix(wcstombs)
  36. #define wctomb prefix(wctomb)
  37. #define bittab prefix(bittab)
  38. #else
  39. #define bittab __fsmu8
  40. #endif
  41. extern const uint32_t bittab[];
  42. /* Upper 6 state bits are a negative integer offset to bound-check next byte */
  43. /* equivalent to: ( (b-0x80) | (b+offset) ) & ~0x3f */
  44. #define OOB(c,b) (((((b)>>3)-0x10)|(((b)>>3)+((int32_t)(c)>>26))) & ~7)
  45. /* Interval [a,b). Either a must be 80 or b must be c0, lower 3 bits clear. */
  46. #define R(a,b) ((uint32_t)((a==0x80 ? 0x40-b : -a) << 23))
  47. #define FAILSTATE R(0x80,0x80)
  48. #ifdef I_FAILED_TO_RTFM_RFC3629
  49. #define SA 0xc2u
  50. #define SB 0xfeu
  51. #else
  52. #define SA 0xc2u
  53. #define SB 0xf5u
  54. #endif