Commit 175de524 authored by Markus Armbruster's avatar Markus Armbruster

Clean up decorations and whitespace around header guards

Cleaned up with scripts/clean-header-guards.pl.
Signed-off-by: 's avatarMarkus Armbruster <armbru@redhat.com>
Reviewed-by: 's avatarRichard Henderson <rth@twiddle.net>
parent 2a6a4076
......@@ -21,6 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef QEMU_AUDIO_H
#define QEMU_AUDIO_H
......@@ -162,4 +163,4 @@ static inline void *advance (void *p, int incr)
int wav_start_capture (CaptureState *s, const char *path, int freq,
int bits, int nchannels);
#endif /* audio.h */
#endif /* QEMU_AUDIO_H */
......@@ -21,6 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef QEMU_AUDIO_INT_H
#define QEMU_AUDIO_INT_H
......@@ -257,4 +258,4 @@ static inline int audio_ring_dist (int dst, int src, int len)
#define AUDIO_FUNC __FILE__ ":" AUDIO_STRINGIFY (__LINE__)
#endif
#endif /* audio_int.h */
#endif /* QEMU_AUDIO_INT_H */
......@@ -19,4 +19,4 @@ int audio_pt_wait (struct audio_pt *, const char *);
int audio_pt_unlock_and_signal (struct audio_pt *, const char *);
int audio_pt_join (struct audio_pt *, void **, const char *);
#endif /* audio_pt_int.h */
#endif /* QEMU_AUDIO_PT_INT_H */
......@@ -21,6 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef QEMU_MIXENG_H
#define QEMU_MIXENG_H
......@@ -48,4 +49,4 @@ void st_rate_stop (void *opaque);
void mixeng_clear (struct st_sample *buf, int len);
void mixeng_volume (struct st_sample *buf, int len, struct mixeng_volume *vol);
#endif /* mixeng.h */
#endif /* QEMU_MIXENG_H */
......@@ -162,4 +162,4 @@ struct target_vm86plus_struct {
#define UNAME_MACHINE "i386"
#endif /* TARGET_SYSCALL_H */
#endif /* TARGET_SYSCALL_H */
......@@ -11,4 +11,4 @@ struct target_pt_regs {
#define UNAME_MACHINE "sun4"
#endif /* TARGET_SYSCALL_H */
#endif /* TARGET_SYSCALL_H */
......@@ -12,4 +12,4 @@ struct target_pt_regs {
#define UNAME_MACHINE "sun4u"
#endif /* TARGET_SYSCALL_H */
#endif /* TARGET_SYSCALL_H */
......@@ -118,4 +118,4 @@ struct target_msqid64_ds {
#define TARGET_ARCH_GET_FS 0x1003
#define TARGET_ARCH_GET_GS 0x1004
#endif /* TARGET_SYSCALL_H */
#endif /* TARGET_SYSCALL_H */
......@@ -101,4 +101,4 @@ void gus_irqgen(GUSEmuState *state, unsigned int elapsed_time);
/* lower values won´t provide any benefit at all, higher values can cause audible timing delays */
/* note: masked timers are also calculated by this function, thus it might be needed even without any IRQs in use! */
#endif /* gusemu.h */
#endif /* GUSEMU_H */
......@@ -129,4 +129,4 @@
#define gusdataend (VSRegsEnd+4)
#endif /* gustate.h */
#endif /* GUSTATE_H */
......@@ -40,4 +40,4 @@ uint32_t lm4549_read(lm4549_state *s, hwaddr offset);
void lm4549_write(lm4549_state *s, hwaddr offset, uint32_t value);
uint32_t lm4549_write_samples(lm4549_state *s, uint32_t left, uint32_t right);
#endif /* #ifndef HW_LM4549_H */
#endif /* HW_LM4549_H */
......@@ -132,4 +132,4 @@ enum {
#define RXTOFEC3 (1 << 11)
#define RXTOFEC4 (1 << 12)
#endif /* #ifndef HW_PL041_H */
#endif /* HW_PL041_H */
#ifndef HW_QXL_H
#define HW_QXL_H 1
#define HW_QXL_H
#include "qemu-common.h"
......
......@@ -21,8 +21,9 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef HW_VGA_INT_H
#define HW_VGA_INT_H 1
#define HW_VGA_INT_H
#include "hw/hw.h"
#include "exec/memory.h"
......
......@@ -100,4 +100,4 @@ static inline bool gic_test_pending(GICState *s, int irq, int cm)
}
}
#endif /* !QEMU_ARM_GIC_INTERNAL_H */
#endif /* QEMU_ARM_GIC_INTERNAL_H */
......@@ -328,4 +328,4 @@ static inline void gicv3_cache_all_target_cpustates(GICv3State *s)
}
}
#endif /* !QEMU_ARM_GIC_INTERNAL_H */
#endif /* QEMU_ARM_GICV3_INTERNAL_H */
#ifndef HW_LM32_H
#define HW_LM32_H 1
#define HW_LM32_H
#include "hw/char/lm32_juart.h"
......
#ifndef HW_NE2000_H
#define HW_NE2000_H 1
#define HW_NE2000_H
#define NE2000_PMEM_SIZE (32*1024)
#define NE2000_PMEM_START (16*1024)
......
#ifndef HW_PCNET_H
#define HW_PCNET_H 1
#define HW_PCNET_H
#define PCNET_IOPORT_SIZE 0x20
#define PCNET_PNPMMIO_SIZE 0x20
......
......@@ -7,4 +7,4 @@ PCIEPort *xio3130_upstream_init(PCIBus *bus, int devfn, bool multifunction,
const char *bus_name, pci_map_irq_fn map_irq,
uint8_t port);
#endif /* QEMU_XIO3130_H */
#endif /* QEMU_XIO3130_UPSTREAM_H */
......@@ -10,7 +10,7 @@
*/
#ifndef HW_S390_VIRTIO_H
#define HW_S390_VIRTIO_H 1
#define HW_S390_VIRTIO_H
#include "hw/nmi.h"
#include "standard-headers/asm-s390/kvm_virtio.h"
......
......@@ -55,4 +55,4 @@ int xen_host_pci_set_block(XenHostPCIDevice *d, int pos, uint8_t *buf,
int xen_host_pci_find_ext_cap_offset(XenHostPCIDevice *s, uint32_t cap);
#endif /* !XEN_HOST_PCI_DEVICE_H_ */
#endif /* XEN_HOST_PCI_DEVICE_H */
......@@ -332,4 +332,4 @@ int xen_pt_register_vga_regions(XenHostPCIDevice *dev);
int xen_pt_unregister_vga_regions(XenHostPCIDevice *dev);
void xen_pt_setup_vga(XenPCIPassthroughState *s, XenHostPCIDevice *dev,
Error **errp);
#endif /* !XEN_PT_H */
#endif /* XEN_PT_H */
#ifndef QEMU_HW_XEN_DOMAINBUILD_H
#define QEMU_HW_XEN_DOMAINBUILD_H 1
#define QEMU_HW_XEN_DOMAINBUILD_H
#include "hw/xen/xen_common.h"
......
......@@ -22,8 +22,9 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef BLOCKJOB_H
#define BLOCKJOB_H 1
#define BLOCKJOB_H
#include "block/block.h"
......
......@@ -16,7 +16,7 @@
*/
#ifndef QEMU_THREAD_POOL_H
#define QEMU_THREAD_POOL_H 1
#define QEMU_THREAD_POOL_H
#include "block/block.h"
......
#ifndef CPU_COMMON_H
#define CPU_COMMON_H 1
#define CPU_COMMON_H
/* CPU interfaces that are target independent. */
......@@ -117,4 +117,4 @@ int qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque);
#endif
#endif /* !CPU_COMMON_H */
#endif /* CPU_COMMON_H */
#ifndef GEN_ICOUNT_H
#define GEN_ICOUNT_H 1
#define GEN_ICOUNT_H
#include "qemu/timer.h"
......
......@@ -2,7 +2,7 @@
This one expands generation functions for tcg opcodes. */
#ifndef HELPER_GEN_H
#define HELPER_GEN_H 1
#define HELPER_GEN_H
#include "exec/helper-head.h"
......
......@@ -2,7 +2,7 @@
This one expands prototypes for the helper functions. */
#ifndef HELPER_PROTO_H
#define HELPER_PROTO_H 1
#define HELPER_PROTO_H
#include "exec/helper-head.h"
......
......@@ -2,7 +2,7 @@
This one defines data structures private to tcg.c. */
#ifndef HELPER_TCG_H
#define HELPER_TCG_H 1
#define HELPER_TCG_H
#include "exec/helper-head.h"
......
......@@ -6,8 +6,9 @@
*
* This code is licensed under the GPL
*/
#ifndef SOFTMMU_SEMI_H
#define SOFTMMU_SEMI_H 1
#define SOFTMMU_SEMI_H
static inline uint64_t softmmu_tget64(CPUArchState *env, target_ulong addr)
{
......
......@@ -751,4 +751,4 @@ static inline int float128_is_any_nan(float128 a)
*----------------------------------------------------------------------------*/
float128 float128_default_nan(float_status *status);
#endif /* !SOFTFLOAT_H */
#endif /* SOFTFLOAT_H */
#ifndef QEMU_HW_ACPI_H
#define QEMU_HW_ACPI_H
/*
* Copyright (c) 2009 Isaku Yamahata <yamahata at valinux co jp>
* VA Linux Systems Japan K.K.
......@@ -188,4 +189,4 @@ struct AcpiSlicOem {
};
int acpi_get_slic_oem(AcpiSlicOem *oem);
#endif /* !QEMU_HW_ACPI_H */
#endif /* QEMU_HW_ACPI_H */
......@@ -6,8 +6,9 @@
*
* This code is licensed under the GNU GPL v2.
*/
#ifndef PXA_H
# define PXA_H "pxa.h"
#define PXA_H
#include "exec/memory.h"
#include "target-arm/cpu-qom.h"
......@@ -189,4 +190,4 @@ PXA2xxState *pxa270_init(MemoryRegion *address_space, unsigned int sdram_size,
const char *revision);
PXA2xxState *pxa255_init(MemoryRegion *address_space, unsigned int sdram_size);
#endif /* PXA_H */
#endif /* PXA_H */
......@@ -19,8 +19,7 @@
*/
#ifndef HW_SOC_DMA_H
#define HW_SOC_DMA_H 1
#define HW_SOC_DMA_H
#include "exec/memory.h"
#include "hw/irq.h"
......
......@@ -44,4 +44,4 @@ static inline ISADevice *pcspk_init(ISABus *bus, ISADevice *pit)
return isadev;
}
#endif /* !HW_PCSPK_H */
#endif /* HW_PCSPK_H */
#ifndef HW_FLASH_H
#define HW_FLASH_H 1
#define HW_FLASH_H
/* NOR flash devices */
......
......@@ -24,7 +24,7 @@
*/
#ifndef HW_BT_H
#define HW_BT_H 1
#define HW_BT_H
#include "hw/irq.h"
......
#ifndef HW_ESCC_H
#define HW_ESCC_H 1
#define HW_ESCC_H
/* escc.c */
#define TYPE_ESCC "escc"
......
......@@ -10,4 +10,4 @@ uint32_t lm32_juart_get_jrx(DeviceState *d);
void lm32_juart_set_jtx(DeviceState *d, uint32_t jtx);
void lm32_juart_set_jrx(DeviceState *d, uint32_t jrx);
#endif /* QEMU_HW_LM32_JUART_H */
#endif /* QEMU_HW_CHAR_LM32_JUART_H */
......@@ -22,8 +22,9 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef HW_SERIAL_H
#define HW_SERIAL_H 1
#define HW_SERIAL_H
#include "hw/hw.h"
#include "sysemu/sysemu.h"
......
#ifndef HW_ETRAXFS_DMA_H
#define HW_ETRAXFS_DMA_H 1
#define HW_ETRAXFS_DMA_H
struct dma_context_metadata {
/* data descriptor md */
......
......@@ -102,4 +102,4 @@ typedef struct DPCDState DPCDState;
#define DPCD_SINK_STATUS 0x205
#define DPCD_RECEIVE_PORT_0_STATUS 0x01
#endif /* !DPCD_H */
#endif /* DPCD_H */
......@@ -82,4 +82,4 @@ void xlnx_dpdma_set_host_data_location(XlnxDPDMAState *s, uint8_t channel,
*/
void xlnx_dpdma_trigger_vsync_irq(XlnxDPDMAState *s);
#endif /* !XLNX_DPDMA_H */
#endif /* XLNX_DPDMA_H */
#ifndef HW_EMPTY_SLOT_H
#define HW_EMPTY_SLOT_H 1
#define HW_EMPTY_SLOT_H
/* empty_slot.c */
void empty_slot_init(hwaddr addr, uint64_t slot_size);
......
......@@ -16,7 +16,7 @@
*/
#ifndef FW_PATH_PROVIDER_H
#define FW_PATH_PROVIDER_H 1
#define FW_PATH_PROVIDER_H
#include "qemu-common.h"
#include "qom/object.h"
......
......@@ -17,4 +17,4 @@ typedef struct PMSMBus {
void pm_smbus_init(DeviceState *parent, PMSMBus *smb);
#endif /* !PM_SMBUS_H */
#endif /* PM_SMBUS_H */
......@@ -17,6 +17,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see <http://www.gnu.org/licenses/>
*/
#ifndef QEMU_APIC_INTERNAL_H
#define QEMU_APIC_INTERNAL_H
......@@ -222,4 +223,4 @@ static inline int apic_get_bit(uint32_t *tab, int index)
return !!(tab[i] & mask);
}
#endif /* !QEMU_APIC_INTERNAL_H */
#endif /* QEMU_APIC_INTERNAL_H */
......@@ -25,4 +25,4 @@
void ioapic_eoi_broadcast(int vector);
#endif /* !HW_IOAPIC_H */
#endif /* HW_IOAPIC_H */
......@@ -112,4 +112,4 @@ void ioapic_reset_common(DeviceState *dev);
void ioapic_print_redtbl(Monitor *mon, IOAPICCommonState *s);
#endif /* !QEMU_IOAPIC_INTERNAL_H */
#endif /* QEMU_IOAPIC_INTERNAL_H */
......@@ -35,4 +35,4 @@ void ps2_queue(void *, int b);
void ps2_keyboard_set_translation(void *opaque, int mode);
void ps2_mouse_fake_event(void *opaque);
#endif /* !HW_PS2_H */
#endif /* HW_PS2_H */
......@@ -39,4 +39,3 @@ typedef struct I8257State {
} I8257State;
#endif
......@@ -80,4 +80,4 @@ void pic_reset_common(PICCommonState *s);
ISADevice *i8259_init_chip(const char *name, ISABus *bus, bool master);
#endif /* !QEMU_I8259_INTERNAL_H */
#endif /* QEMU_I8259_INTERNAL_H */
......@@ -20,7 +20,7 @@
*/
#ifndef NMI_H
#define NMI_H 1
#define NMI_H
#include "qemu-common.h"
#include "qom/object.h"
......
......@@ -67,4 +67,4 @@ void pci_bridge_map_irq(PCIBridge *br, const char* bus_name,
#define PCI_BRIDGE_CTL_DISCARD_STATUS 0x400 /* Discard timer status */
#define PCI_BRIDGE_CTL_DISCARD_SERR 0x800 /* Discard timer SERR# enable */
#endif /* QEMU_PCI_BRIDGE_H */
#endif /* QEMU_PCI_BRIDGE_H */
......@@ -7,8 +7,9 @@
*
* QEMU-specific definitions belong in pci.h
*/
#ifndef HW_PCI_IDS_H
#define HW_PCI_IDS_H 1
#define HW_PCI_IDS_H
/* Device classes and subclasses */
......
#ifndef HW_PCMCIA_H
#define HW_PCMCIA_H 1
#define HW_PCMCIA_H
/* PCMCIA/Cardbus */
......
#ifndef HW_PLATFORM_BUS_H
#define HW_PLATFORM_BUS_H 1
#define HW_PLATFORM_BUS_H
/*
* Platform Bus device to support dynamic Sysbus devices
......@@ -54,4 +54,4 @@ int platform_bus_get_irqn(PlatformBusDevice *platform_bus, SysBusDevice *sbdev,
hwaddr platform_bus_get_mmio_addr(PlatformBusDevice *pbus, SysBusDevice *sbdev,
int n);
#endif /* !HW_PLATFORM_BUS_H */
#endif /* HW_PLATFORM_BUS_H */
......@@ -19,8 +19,9 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef HW_MAC_DBDMA_H
#define HW_MAC_DBDMA_H 1
#define HW_MAC_DBDMA_H
#include "exec/memory.h"
#include "qemu/iov.h"
......
#ifndef HW_PPC_H
#define HW_PPC_H 1
#define HW_PPC_H
#include "target-ppc/cpu-qom.h"
......
#ifndef QEMU_SMBIOS_H
#define QEMU_SMBIOS_H
/*
* SMBIOS Support
*
......@@ -266,4 +267,4 @@ void smbios_get_tables(const struct smbios_phys_mem_area *mem_array,
const unsigned int mem_array_size,
uint8_t **tables, size_t *tables_len,
uint8_t **anchor, size_t *anchor_len);
#endif /*QEMU_SMBIOS_H */
#endif /* QEMU_SMBIOS_H */
#ifndef STREAM_H
#define STREAM_H 1
#define STREAM_H
#include "qemu-common.h"
#include "qom/object.h"
......
#ifndef HW_SYSBUS_H
#define HW_SYSBUS_H 1
#define HW_SYSBUS_H
/* Devices attached directly to the main system bus. */
......@@ -118,4 +118,4 @@ static inline DeviceState *sysbus_try_create_simple(const char *name,
return sysbus_try_create_varargs(name, addr, irq, NULL);
}
#endif /* !HW_SYSBUS_H */
#endif /* HW_SYSBUS_H */
......@@ -80,4 +80,4 @@ static inline ISADevice *kvm_pit_init(ISABus *bus, int base)
void pit_set_gate(ISADevice *dev, int channel, int val);
void pit_get_channel_info(ISADevice *dev, int channel, PITChannelInfo *info);
#endif /* !HW_I8254_H */
#endif /* HW_I8254_H */
......@@ -73,4 +73,4 @@ void pit_get_channel_info_common(PITCommonState *s, PITChannelState *sc,
PITChannelInfo *info);
void pit_reset_common(PITCommonState *s);
#endif /* !QEMU_I8254_INTERNAL_H */
#endif /* QEMU_I8254_INTERNAL_H */
......@@ -10,4 +10,4 @@ ISADevice *rtc_init(ISABus *bus, int base_year, qemu_irq intercept_irq);
void rtc_set_memory(ISADevice *dev, int addr, int val);
int rtc_get_memory(ISADevice *dev, int addr);
#endif /* !MC146818RTC_H */
#endif /* MC146818RTC_H */
......@@ -8,6 +8,7 @@
* published by the Free Software Foundation, or any later version.
* See the COPYING file in the top-level directory.
*/
#ifndef QEMU_HW_PUV3_H
#define QEMU_HW_PUV3_H
......@@ -46,4 +47,4 @@
#define DPRINTF(fmt, ...) do {} while (0)
#endif
#endif /* !QEMU_HW_PUV3_H */
#endif /* QEMU_HW_PUV3_H */
#ifndef HW_USB_EHCI_REGS_H
#define HW_USB_EHCI_REGS_H 1
#define HW_USB_EHCI_REGS_H
/* Capability Registers Base Address - section 2.2 */
#define CAPLENGTH 0x0000 /* 1-byte, 0x0001 reserved */
......
#ifndef HW_USB_UHCI_REGS_H
#define HW_USB_UHCI_REGS_H 1
#define HW_USB_UHCI_REGS_H
#define UHCI_CMD_FGR (1 << 4)
#define UHCI_CMD_EGSM (1 << 3)
......
......@@ -17,6 +17,7 @@
* Copyright (C) 2008, Red Hat, Amit Shah (amit.shah@redhat.com)
* Copyright (C) 2008, IBM, Muli Ben-Yehuda (muli@il.ibm.com)
*/
#ifndef HW_VFIO_VFIO_COMMON_H
#define HW_VFIO_VFIO_COMMON_H
......@@ -174,4 +175,4 @@ int vfio_spapr_create_window(VFIOContainer *container,
int vfio_spapr_remove_window(VFIOContainer *container,
hwaddr offset_within_address_space);
#endif /* !HW_VFIO_VFIO_COMMON_H */
#endif /* HW_VFIO_VFIO_COMMON_H */
......@@ -74,4 +74,4 @@ typedef struct VFIOPlatformDeviceClass {
#define VFIO_PLATFORM_DEVICE_GET_CLASS(obj) \
OBJECT_GET_CLASS(VFIOPlatformDeviceClass, (obj), TYPE_VFIO_PLATFORM)
#endif /*HW_VFIO_VFIO_PLATFORM_H*/
#endif /* HW_VFIO_VFIO_PLATFORM_H */
......@@ -33,4 +33,4 @@ typedef struct DIAG288Class {
uint64_t func, uint64_t timeout);
} DIAG288Class;
#endif /* WDT_DIAG288_H */
#endif /* WDT_DIAG288_H */
#ifndef QEMU_HW_XEN_H
#define QEMU_HW_XEN_H 1
#define QEMU_HW_XEN_H
/*
* public xen header
* stuff needed outside xen-*.c, i.e. interfaces to qemu.
......
#ifndef QEMU_HW_XEN_BACKEND_H
#define QEMU_HW_XEN_BACKEND_H 1
#define QEMU_HW_XEN_BACKEND_H
#include "hw/xen/xen_common.h"
#include "sysemu/sysemu.h"
......
#ifndef QEMU_HW_XEN_COMMON_H
#define QEMU_HW_XEN_COMMON_H 1
#define QEMU_HW_XEN_COMMON_H
/*
* If we have new enough libxenctrl then we do not want/need these compat
......
......@@ -21,8 +21,10 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef QEMU_FILE_H
#define QEMU_FILE_H 1
#define QEMU_FILE_H
#include "qemu-common.h"
#include "exec/cpu-common.h"
#include "io/channel.h"
......
......@@ -23,8 +23,9 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef QEMU_VMSTATE_H
#define QEMU_VMSTATE_H 1
#define QEMU_VMSTATE_H
#ifndef CONFIG_USER_ONLY
#include "migration/qemu-file.h"
......
......@@ -51,4 +51,4 @@ int monitor_fdset_dup_fd_add(int64_t fdset_id, int dup_fd);
void monitor_fdset_dup_fd_remove(int dup_fd);
int monitor_fdset_dup_fd_find(int dup_fd);
#endif /* !MONITOR_H */
#endif /* MONITOR_H */
#ifndef QEMU_BCD_H
#define QEMU_BCD_H 1
#define QEMU_BCD_H
/* Convert a byte between binary and BCD. */
static inline uint8_t to_bcd(uint8_t val)
......
#ifndef QEMU_CUTILS_H
#define QEMU_CUTILS_H 1
#define QEMU_CUTILS_H
#include "qemu/fprintf-fn.h"
......
......@@ -6,8 +6,7 @@
*/
#ifndef QEMU_FPRINTF_FN_H
#define QEMU_FPRINTF_FN_H 1
#define QEMU_FPRINTF_FN_H
typedef int (*fprintf_function)(FILE *f, const char *fmt, ...)
GCC_FMT_ATTR(2, 3);
......