123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- #ifndef _PRINTF_H
- #define _PRINTF_H 1
- #include <features.h>
- __BEGIN_DECLS
- #define __need_FILE
- #include <stdio.h>
- #define __need_size_t
- #define __need_wchar_t
- #include <stddef.h>
- #include <endian.h>
- struct printf_info {
- int prec;
- int width;
- #ifdef __UCLIBC_HAS_WCHAR__
- wchar_t spec;
- #else
- int spec;
- #endif
- #ifndef _LIBC
- #if __BYTE_ORDER == __LITTLE_ENDIAN
- unsigned int space:1;
- unsigned int showsign:1;
- unsigned int extra:1;
- unsigned int left:1;
- unsigned int alt:1;
- unsigned int group:1;
- unsigned int i18n:1;
- unsigned int wide:1;
- unsigned int is_char:1;
- unsigned int is_short:1;
- unsigned int is_long:1;
- unsigned int is_long_double:1;
- unsigned int __padding:20;
- #elif __BYTE_ORDER == __BIG_ENDIAN
- unsigned int __padding:20;
- unsigned int is_long_double:1;
- unsigned int is_long:1;
- unsigned int is_short:1;
- unsigned int is_char:1;
- unsigned int wide:1;
- unsigned int i18n:1;
- unsigned int group:1;
- unsigned int alt:1;
- unsigned int left:1;
- unsigned int extra:1;
- unsigned int showsign:1;
- unsigned int space:1;
- #else
- #error unsupported byte order!
- #endif
- #else
- uint32_t _flags;
- #define __PRINT_INFO_FLAG_space (1<<0)
- #define __PRINT_INFO_FLAG_showsign (1<<1)
- #define __PRINT_INFO_FLAG_extra (1<<2)
- #define __PRINT_INFO_FLAG_left (1<<3)
- #define __PRINT_INFO_FLAG_alt (1<<4)
- #define __PRINT_INFO_FLAG_group (1<<5)
- #define __PRINT_INFO_FLAG_i18n (1<<6)
- #define __PRINT_INFO_FLAG_wide (1<<7)
- #define __PRINT_INFO_FLAG_is_char (1<<8)
- #define __PRINT_INFO_FLAG_is_short (1<<9)
- #define __PRINT_INFO_FLAG_is_long (1<<10)
- #define __PRINT_INFO_FLAG_is_long_double (1<<11)
- #define PRINT_INFO_FLAG_VAL(INFO_PTR,BITFIELD) \
- ((INFO_PTR)->_flags & __PRINT_INFO_FLAG_##BITFIELD)
- #define PRINT_INFO_SET_FLAG(INFO_PTR,BITFIELD) \
- ((INFO_PTR)->_flags |= __PRINT_INFO_FLAG_##BITFIELD)
- #define PRINT_INFO_CLR_FLAG(INFO_PTR,BITFIELD) \
- ((INFO_PTR)->_flags &= ~__PRINT_INFO_FLAG_##BITFIELD)
- #define PRINT_INFO_SET_extra(INFO_PTR,VAL) \
- ((INFO_PTR)->_flags |= (((INFO_PTR)->_flags & ~1) | ((VAL) & 1)))
- #endif
- #ifdef __UCLIBC_HAS_WCHAR__
- wchar_t pad;
- #else
- int pad;
- #endif
- };
- #ifdef __UCLIBC_HAS_GLIBC_CUSTOM_PRINTF__
- typedef int (*printf_function) (FILE *__stream,
- const struct printf_info *__info,
- const void *const *__args);
- typedef int printf_arginfo_function (const struct printf_info *__info,
- size_t __n, int *__argtypes);
- extern int register_printf_function (int __spec, printf_function __func,
- printf_arginfo_function __arginfo);
- #endif
- extern size_t parse_printf_format (const char *__restrict __fmt, size_t __n,
- int *__restrict __argtypes) __THROW;
- enum {
- PA_INT,
- PA_CHAR,
- PA_WCHAR,
- PA_STRING,
- PA_WSTRING,
- PA_POINTER,
- PA_FLOAT,
- PA_DOUBLE,
- __PA_NOARG,
- PA_LAST
- };
- #define PA_FLAG_MASK (0xff00)
- #define __PA_FLAG_CHAR (0x0100)
- #define PA_FLAG_SHORT (0x0200)
- #define PA_FLAG_LONG (0x0400)
- #define PA_FLAG_LONG_LONG (0x0800)
- #define PA_FLAG_LONG_DOUBLE PA_FLAG_LONG_LONG
- #define PA_FLAG_PTR (0x1000)
- #define __PA_INTMASK (0x0f00)
- #if 0
- extern int printf_size (FILE *__restrict __fp,
- const struct printf_info *__info,
- const void *const *__restrict __args) __THROW;
- extern int printf_size_info (const struct printf_info *__restrict
- __info, size_t __n, int *__restrict __argtypes)
- __THROW;
- #endif
- __END_DECLS
- #endif
|