futurerestore/.github/workflows/MacOSX10.13.sdk/usr/include/printf.h
Liam(Cryptic) 029e768ca3
Fix FDR SEP Panic and a13 iPhone 11 family devices (#3)
Rose fix. Also Add working CI Static building.
2021-02-24 17:53:08 -08:00

285 lines
11 KiB
C

/*-
* Copyright (c) 2005 Poul-Henning Kamp
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD: src/include/printf.h,v 1.5 2011/03/06 17:45:37 pjd Exp $
*/
#ifndef _PRINTF_H_
#define _PRINTF_H_
/****************************************************************************
* This is the header file for extensible printf, a set of APIs that allow
* adding/modifying conversion specifier(s) for stdio formatted printing.
* It is based on the GLIBC API documented in:
*
* http://www.gnu.org/software/libc/manual/html_node/Customizing-Printf.html
*
* Because that API affects printf behavior process-wide and so is unsafe,
* we adapt a modified form, based on the concept of printf domains in which
* changes to conversion specifiers can be made independent of one another
* and which don't affect the normal printf behavior. In addition, there
* is now a set of printf variants that take a printf domain as an argument.
*
* See xprintf(5) for more details.
****************************************************************************/
#include <stdio.h>
#include <wchar.h>
#include <xlocale.h>
#include <Availability.h>
#ifdef __GNUC__
#define __XPRINTF_ATTR(x) __attribute__(x)
#else /* !__GNUC__ */
#define __XPRINTF_ATTR(x) /* nothing */
#endif /* !__GNUC__ */
/*
* The API defined by GLIBC allows a renderer to take multiple arguments
* This is obviously usable for things like (ptr+len) pairs etc.
* The current limit is to deal with up to __PRINTFMAXARG arguments (any
* above this limit are ignored).
*/
#define __PRINTFMAXARG 2
struct printf_info {
/* Mac OS X extensions */
void *context; /* User context pointer */
locale_t loc; /* Extended locale */
wchar_t vsep; /* Vector separator char */
/* one of ,:;_ flag or X by default */
/* GLIBC compatible */
int prec; /* precision */
int width; /* Width */
wchar_t spec; /* Format letter */
wchar_t pad; /* Padding char */
/* 0 if 0 flag set, otherwise space */
/* FreeBSD extensions */
wchar_t signchar; /* Sign char */
/* GLIBC compatible flags */
unsigned is_long_double :1; /* L or ll flag */
unsigned is_char :1; /* hh flag */
unsigned is_short :1; /* h flag */
unsigned is_long :1; /* l flag */
unsigned alt :1; /* # flag */
unsigned space :1; /* Space flag */
unsigned left :1; /* - flag */
unsigned showsign :1; /* + flag */
unsigned group :1; /* ' flag */
unsigned extra :1; /* For special use (currently unused) */
unsigned wide :1; /* Nonzero for wide character streams (currently unused) */
/* FreeBSD flags */
unsigned is_quad :1; /* q flag */
unsigned is_intmax :1; /* j flag */
unsigned is_ptrdiff :1; /* t flag */
unsigned is_size :1; /* z flag */
/* Mac OS X flags */
unsigned is_vec :1; /* v flag */
/* private */
int sofar;
unsigned get_width;
unsigned get_prec;
const char *begin;
const char *end;
void *arg[__PRINTFMAXARG];
};
enum {
PA_INT = (1 << 0), /* int */
PA_CHAR = (1 << 1), /* int, cast to char */
PA_WCHAR = (1 << 2), /* wide char */
PA_STRING = (1 << 3), /* const char * (with '\0') */
PA_WSTRING = (1 << 4), /* const wchar_t * */
PA_POINTER = (1 << 5), /* void * */
PA_FLOAT = (1 << 6), /* float (Defined but unused; best to avoid.) */
PA_DOUBLE = (1 << 7), /* double */
PA_VECTOR = (1 << 8), /* vector */
};
#define PA_FLAG_MASK 0xff0000
#define PA_FLAG_LONG_LONG (1 << 16)
#define PA_FLAG_LONG (1 << 17)
#define PA_FLAG_SHORT (1 << 18)
#define PA_FLAG_PTR (1 << 19)
#define PA_FLAG_QUAD (1 << 20)
#define PA_FLAG_INTMAX (1 << 21)
#define PA_FLAG_SIZE (1 << 22)
#define PA_FLAG_PTRDIFF (1 << 23)
#define PA_FLAG_LONG_DOUBLE PA_FLAG_LONG_LONG
/************************ Basic Extensible Printf APIs ************************/
typedef int printf_arginfo_function(const struct printf_info *__info,
size_t __n, int *__argtypes);
typedef int printf_function(FILE *__stream,
const struct printf_info *__info, const void *const *__args);
/*
* We don't support the GLIBC register_printf_function() or FreeBSD
* register_printf_render_std(), because they affect printf globally
* and are unsafe.
*/
/*************** Extensible Printf Domains APIs ****************/
struct _printf_domain; /* forward reference */
typedef struct _printf_domain *printf_domain_t;
__BEGIN_DECLS
printf_domain_t copy_printf_domain(printf_domain_t __domain)
__XPRINTF_ATTR((__nonnull__(1)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
void free_printf_domain(printf_domain_t __domain)
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
printf_domain_t new_printf_domain(void)
__XPRINTF_ATTR((__malloc__))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int register_printf_domain_function(printf_domain_t __domain,
int __spec, printf_function *__render,
printf_arginfo_function *__arginfo, void *__context)
__XPRINTF_ATTR((__nonnull__(1)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int register_printf_domain_render_std(printf_domain_t __domain,
const char *__specs)
__XPRINTF_ATTR((__nonnull__(1)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
/**** All-in-one extensible printf variants ****/
int asxprintf(char ** __restrict __ret,
printf_domain_t __restrict __domain, locale_t __restrict __loc,
const char * __restrict __format, ...)
__XPRINTF_ATTR((__nonnull__(1, 2, 4)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int dxprintf(int __fd, printf_domain_t __restrict __domain,
locale_t __restrict __loc, const char * __restrict __format, ...)
__XPRINTF_ATTR((__nonnull__(2, 4)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int fxprintf(FILE * __restrict __stream,
printf_domain_t __restrict __domain, locale_t __restrict __loc,
const char * __restrict __format, ...)
__XPRINTF_ATTR((__nonnull__(1, 2, 4)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int sxprintf(char * __restrict __str, size_t __size,
printf_domain_t __restrict __domain, locale_t __restrict __loc,
const char * __restrict __format, ...)
__XPRINTF_ATTR((__nonnull__(1, 3, 5)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int xprintf(printf_domain_t __restrict __domain,
locale_t __restrict __loc, const char * __restrict __format, ...)
__XPRINTF_ATTR((__nonnull__(1, 3)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int vasxprintf(char ** __restrict __ret,
printf_domain_t __restrict __domain, locale_t __restrict __loc,
const char * __restrict __format, va_list __ap)
__XPRINTF_ATTR((__nonnull__(1, 2, 4)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int vdxprintf(int __fd, printf_domain_t __restrict __domain,
locale_t __restrict __loc, const char * __restrict __format,
va_list __ap)
__XPRINTF_ATTR((__nonnull__(2, 4)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int vfxprintf(FILE * __restrict __stream,
printf_domain_t __restrict __domain, locale_t __restrict __loc,
const char * __restrict __format, va_list __ap)
__XPRINTF_ATTR((__nonnull__(1, 2, 4)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int vsxprintf(char * __restrict __str, size_t __size,
printf_domain_t __restrict __domain, locale_t __restrict __loc,
const char * __restrict __format, va_list __ap)
__XPRINTF_ATTR((__nonnull__(1, 3, 5)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int vxprintf(printf_domain_t __restrict __domain,
locale_t __restrict __loc, const char * __restrict __format,
va_list __ap)
__XPRINTF_ATTR((__nonnull__(1, 3)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
__END_DECLS
/******** Extensible Printf Compilation/Execution APIs *********/
struct _printf_compiled; /* forward reference */
typedef struct _printf_compiled *printf_comp_t;
__BEGIN_DECLS
void free_printf_comp(printf_comp_t __pc)
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
printf_comp_t new_printf_comp(printf_domain_t __restrict __domain,
locale_t __restrict __loc, const char * __restrict __fmt)
__XPRINTF_ATTR((__nonnull__(1, 3)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
/**** Extensible printf execution ****/
int asxprintf_exec(char ** __restrict __ret,
printf_comp_t __restrict __pc, ...)
__XPRINTF_ATTR((__nonnull__(1, 2)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int dxprintf_exec(int __fd, printf_comp_t __restrict __pc, ...)
__XPRINTF_ATTR((__nonnull__(2)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int fxprintf_exec(FILE * __restrict __stream,
printf_comp_t __restrict __pc, ...)
__XPRINTF_ATTR((__nonnull__(1, 2)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int sxprintf_exec(char * __restrict __str, size_t __size,
printf_comp_t __restrict __pc, ...)
__XPRINTF_ATTR((__nonnull__(1, 3)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int xprintf_exec(printf_comp_t __restrict __pc, ...)
__XPRINTF_ATTR((__nonnull__(1)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int vasxprintf_exec(char ** __restrict __ret,
printf_comp_t __restrict __pc, va_list __ap)
__XPRINTF_ATTR((__nonnull__(1, 2)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int vdxprintf_exec(int __fd, printf_comp_t __restrict __pc,
va_list __ap)
__XPRINTF_ATTR((__nonnull__(2)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int vfxprintf_exec(FILE * __restrict __stream,
printf_comp_t __restrict __pc, va_list __ap)
__XPRINTF_ATTR((__nonnull__(1, 2)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int vsxprintf_exec(char * __restrict __str, size_t __size,
printf_comp_t __restrict __pc, va_list __ap)
__XPRINTF_ATTR((__nonnull__(1, 3)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
int vxprintf_exec(printf_comp_t __restrict __pc, va_list __ap)
__XPRINTF_ATTR((__nonnull__(1)))
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
__END_DECLS
#endif /* !_PRINTF_H */