Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcvs2svn <>2010-12-18 01:10:07 +0300
committercvs2svn <>2010-12-18 01:10:07 +0300
commit27ab486f12c627f6780cb59815f0a36fe69d1497 (patch)
tree1d25fbce04b6a00d7b7d8f8fd64fa4209b57f42f /winsup/mingw/mingwex/stdio/pformat.c
parentafeb58b9ae7d03780fd695beeb64203994252c71 (diff)
This commit was manufactured by cvs2svn to create tag 'newlib-1_19_0'.newlib-1_19_0
Sprout from master 2010-12-17 22:10:05 UTC Jeff Johnston <jjohnstn@redhat.com> '' Cherrypick from cygnus 1999-05-03 07:29:06 UTC Richard Henderson <rth@redhat.com> '19990502 sourceware import': README config/mt-d30v config/mt-netware config/mt-ospace etc/add-log.el etc/add-log.vi etc/configbuild.ein etc/configbuild.fig etc/configbuild.jin etc/configbuild.tin etc/configdev.ein etc/configdev.fig etc/configdev.jin etc/configdev.tin makefile.vms Delete: djunpack.bat include/COPYING include/COPYING3 include/ChangeLog include/ChangeLog-9103 include/MAINTAINERS include/alloca-conf.h include/ansidecl.h include/aout/ChangeLog include/aout/adobe.h include/aout/aout64.h include/aout/ar.h include/aout/dynix3.h include/aout/encap.h include/aout/host.h include/aout/hp.h include/aout/hp300hpux.h include/aout/hppa.h include/aout/ranlib.h include/aout/reloc.h include/aout/stab.def include/aout/stab_gnu.h include/aout/sun4.h include/bfdlink.h include/binary-io.h include/bout.h include/cgen/ChangeLog include/cgen/basic-modes.h include/cgen/basic-ops.h include/cgen/bitset.h include/coff/ChangeLog include/coff/ChangeLog-9103 include/coff/alpha.h include/coff/apollo.h include/coff/arm.h include/coff/aux-coff.h include/coff/ecoff.h include/coff/external.h include/coff/go32exe.h include/coff/h8300.h include/coff/h8500.h include/coff/i386.h include/coff/i860.h include/coff/i960.h include/coff/ia64.h include/coff/internal.h include/coff/m68k.h include/coff/m88k.h include/coff/mcore.h include/coff/mips.h include/coff/mipspe.h include/coff/or32.h include/coff/pe.h include/coff/powerpc.h include/coff/rs6000.h include/coff/rs6k64.h include/coff/sh.h include/coff/sparc.h include/coff/sym.h include/coff/symconst.h include/coff/ti.h include/coff/tic30.h include/coff/tic4x.h include/coff/tic54x.h include/coff/tic80.h include/coff/w65.h include/coff/we32k.h include/coff/x86_64.h include/coff/xcoff.h include/coff/z80.h include/coff/z8k.h include/demangle.h include/dis-asm.h include/dwarf2.h include/dyn-string.h include/elf/ChangeLog include/elf/ChangeLog-9103 include/elf/alpha.h include/elf/arc.h include/elf/arm.h include/elf/avr.h include/elf/bfin.h include/elf/common.h include/elf/cr16.h include/elf/cr16c.h include/elf/cris.h include/elf/crx.h include/elf/d10v.h include/elf/d30v.h include/elf/dlx.h include/elf/dwarf.h include/elf/external.h include/elf/fr30.h include/elf/frv.h include/elf/h8.h include/elf/hppa.h include/elf/i370.h include/elf/i386.h include/elf/i860.h include/elf/i960.h include/elf/ia64.h include/elf/internal.h include/elf/ip2k.h include/elf/iq2000.h include/elf/lm32.h include/elf/m32c.h include/elf/m32r.h include/elf/m68hc11.h include/elf/m68k.h include/elf/mcore.h include/elf/mep.h include/elf/microblaze.h include/elf/mips.h include/elf/mmix.h include/elf/mn10200.h include/elf/mn10300.h include/elf/moxie.h include/elf/msp430.h include/elf/mt.h include/elf/openrisc.h include/elf/or32.h include/elf/pj.h include/elf/ppc.h include/elf/ppc64.h include/elf/reloc-macros.h include/elf/rx.h include/elf/s390.h include/elf/score.h include/elf/sh.h include/elf/sparc.h include/elf/spu.h include/elf/tic6x-attrs.h include/elf/tic6x.h include/elf/v850.h include/elf/vax.h include/elf/vxworks.h include/elf/x86-64.h include/elf/xc16x.h include/elf/xstormy16.h include/elf/xtensa.h include/fibheap.h include/filenames.h include/floatformat.h include/fnmatch.h include/fopen-bin.h include/fopen-same.h include/fopen-vms.h include/gdb/ChangeLog include/gdb/callback.h include/gdb/fileio.h include/gdb/remote-sim.h include/gdb/signals.def include/gdb/signals.h include/gdb/sim-arm.h include/gdb/sim-cr16.h include/gdb/sim-d10v.h include/gdb/sim-frv.h include/gdb/sim-h8300.h include/gdb/sim-lm32.h include/gdb/sim-m32c.h include/gdb/sim-ppc.h include/gdb/sim-rx.h include/gdb/sim-sh.h include/gdbm.h include/getopt.h include/hashtab.h include/hp-symtab.h include/ieee.h include/libiberty.h include/lto-symtab.h include/md5.h include/nlm/ChangeLog include/nlm/alpha-ext.h include/nlm/common.h include/nlm/external.h include/nlm/i386-ext.h include/nlm/internal.h include/nlm/ppc-ext.h include/nlm/sparc32-ext.h include/oasys.h include/objalloc.h include/obstack.h include/opcode/ChangeLog include/opcode/ChangeLog-9103 include/opcode/alpha.h include/opcode/arc.h include/opcode/arm.h include/opcode/avr.h include/opcode/bfin.h include/opcode/cgen.h include/opcode/convex.h include/opcode/cr16.h include/opcode/cris.h include/opcode/crx.h include/opcode/d10v.h include/opcode/d30v.h include/opcode/dlx.h include/opcode/h8300.h include/opcode/hppa.h include/opcode/i370.h include/opcode/i386.h include/opcode/i860.h include/opcode/i960.h include/opcode/ia64.h include/opcode/m68hc11.h include/opcode/m68k.h include/opcode/m88k.h include/opcode/mips.h include/opcode/mmix.h include/opcode/mn10200.h include/opcode/mn10300.h include/opcode/moxie.h include/opcode/msp430.h include/opcode/np1.h include/opcode/ns32k.h include/opcode/or32.h include/opcode/pdp11.h include/opcode/pj.h include/opcode/pn.h include/opcode/ppc.h include/opcode/pyr.h include/opcode/rx.h include/opcode/s390.h include/opcode/score-datadep.h include/opcode/score-inst.h include/opcode/sparc.h include/opcode/spu-insns.h include/opcode/spu.h include/opcode/tahoe.h include/opcode/tic30.h include/opcode/tic4x.h include/opcode/tic54x.h include/opcode/tic6x-control-registers.h include/opcode/tic6x-insn-formats.h include/opcode/tic6x-opcode-table.h include/opcode/tic6x.h include/opcode/tic80.h include/opcode/v850.h include/opcode/vax.h include/os9k.h include/partition.h include/plugin-api.h include/progress.h include/safe-ctype.h include/sha1.h include/simple-object.h include/som/ChangeLog include/som/aout.h include/som/clock.h include/som/internal.h include/som/lst.h include/som/reloc.h include/sort.h include/splay-tree.h include/symcat.h include/vms/ChangeLog include/vms/dcx.h include/vms/dmt.h include/vms/dsc.h include/vms/dst.h include/vms/eeom.h include/vms/egps.h include/vms/egsd.h include/vms/egst.h include/vms/egsy.h include/vms/eiaf.h include/vms/eicp.h include/vms/eidc.h include/vms/eiha.h include/vms/eihd.h include/vms/eihi.h include/vms/eihs.h include/vms/eihvn.h include/vms/eisd.h include/vms/emh.h include/vms/eobjrec.h include/vms/esdf.h include/vms/esdfm.h include/vms/esdfv.h include/vms/esgps.h include/vms/esrf.h include/vms/etir.h include/vms/internal.h include/vms/lbr.h include/vms/prt.h include/vms/shl.h include/xregex.h include/xregex2.h include/xtensa-config.h include/xtensa-isa-internal.h include/xtensa-isa.h winsup/COPYING winsup/CYGWIN_LICENSE winsup/ChangeLog winsup/Makefile.common winsup/Makefile.in winsup/README winsup/acinclude.m4 winsup/aclocal.m4 winsup/configure winsup/configure.in winsup/cygserver/ChangeLog winsup/cygserver/Makefile.in winsup/cygserver/README winsup/cygserver/aclocal.m4 winsup/cygserver/bsd_helper.cc winsup/cygserver/bsd_helper.h winsup/cygserver/bsd_log.cc winsup/cygserver/bsd_log.h winsup/cygserver/bsd_mutex.cc winsup/cygserver/bsd_mutex.h winsup/cygserver/client.cc winsup/cygserver/configure winsup/cygserver/configure.in winsup/cygserver/cygserver-config winsup/cygserver/cygserver.cc winsup/cygserver/cygserver.conf winsup/cygserver/msg.cc winsup/cygserver/process.cc winsup/cygserver/process.h winsup/cygserver/sem.cc winsup/cygserver/setpwd.cc winsup/cygserver/shm.cc winsup/cygserver/sysv_msg.cc winsup/cygserver/sysv_sem.cc winsup/cygserver/sysv_shm.cc winsup/cygserver/threaded_queue.cc winsup/cygserver/threaded_queue.h winsup/cygserver/transport.cc winsup/cygserver/transport.h winsup/cygserver/transport_pipes.cc winsup/cygserver/transport_pipes.h winsup/cygserver/woutsup.h winsup/cygwin/ChangeLog winsup/cygwin/ChangeLog-1995 winsup/cygwin/ChangeLog-1996 winsup/cygwin/ChangeLog-1997 winsup/cygwin/ChangeLog-1998 winsup/cygwin/ChangeLog-1999 winsup/cygwin/ChangeLog-2000 winsup/cygwin/ChangeLog-2001 winsup/cygwin/ChangeLog-2002 winsup/cygwin/ChangeLog-2003 winsup/cygwin/ChangeLog-2004 winsup/cygwin/ChangeLog-2005 winsup/cygwin/ChangeLog-2006 winsup/cygwin/ChangeLog-2007 winsup/cygwin/ChangeLog-2008 winsup/cygwin/ChangeLog-2009 winsup/cygwin/Makefile.in winsup/cygwin/ROADMAP winsup/cygwin/acconfig.h winsup/cygwin/aclocal.m4 winsup/cygwin/analyze_sigfe winsup/cygwin/assert.cc winsup/cygwin/autoload.cc winsup/cygwin/automode.c winsup/cygwin/binmode.c winsup/cygwin/child_info.h winsup/cygwin/config.h.in winsup/cygwin/config/i386/profile.h winsup/cygwin/configure winsup/cygwin/configure.in winsup/cygwin/cpuid.h winsup/cygwin/crt0.c winsup/cygwin/ctype.cc winsup/cygwin/cxx.cc winsup/cygwin/cygerrno.h winsup/cygwin/cygheap.cc winsup/cygwin/cygheap.h winsup/cygwin/cygheap_malloc.h winsup/cygwin/cyglsa.h winsup/cygwin/cygmagic winsup/cygwin/cygmalloc.h winsup/cygwin/cygprops.h winsup/cygwin/cygserver.h winsup/cygwin/cygserver_ipc.h winsup/cygwin/cygserver_msg.h winsup/cygwin/cygserver_sem.h winsup/cygwin/cygserver_setpwd.h winsup/cygwin/cygserver_shm.h winsup/cygwin/cygthread.cc winsup/cygwin/cygthread.h winsup/cygwin/cygtls.cc winsup/cygwin/cygtls.h winsup/cygwin/cygwin-cxx.h winsup/cygwin/cygwin-shilka winsup/cygwin/cygwin.din winsup/cygwin/cygwin.sc winsup/cygwin/cygwin_version.h winsup/cygwin/cygxdr.cc winsup/cygwin/cygxdr.h winsup/cygwin/dcrt0.cc winsup/cygwin/debug.cc winsup/cygwin/debug.h winsup/cygwin/devices.cc winsup/cygwin/devices.h winsup/cygwin/devices.in winsup/cygwin/dir.cc winsup/cygwin/dlfcn.cc winsup/cygwin/dll_init.cc winsup/cygwin/dll_init.h winsup/cygwin/dll_init.sgml winsup/cygwin/dllfixdbg winsup/cygwin/dlmalloc.c winsup/cygwin/dlmalloc.h winsup/cygwin/dtable.cc winsup/cygwin/dtable.h winsup/cygwin/dtable.sgml winsup/cygwin/environ.cc winsup/cygwin/environ.h winsup/cygwin/errno.cc winsup/cygwin/exception.h winsup/cygwin/exceptions.cc winsup/cygwin/exec.cc winsup/cygwin/external.cc winsup/cygwin/external.sgml winsup/cygwin/fcntl.cc winsup/cygwin/fenv.cc winsup/cygwin/fhandler.cc winsup/cygwin/fhandler.h winsup/cygwin/fhandler_clipboard.cc winsup/cygwin/fhandler_console.cc winsup/cygwin/fhandler_disk_file.cc winsup/cygwin/fhandler_dsp.cc winsup/cygwin/fhandler_fifo.cc winsup/cygwin/fhandler_floppy.cc winsup/cygwin/fhandler_mailslot.cc winsup/cygwin/fhandler_mem.cc winsup/cygwin/fhandler_netdrive.cc winsup/cygwin/fhandler_nodevice.cc winsup/cygwin/fhandler_proc.cc winsup/cygwin/fhandler_process.cc winsup/cygwin/fhandler_procnet.cc winsup/cygwin/fhandler_procsys.cc winsup/cygwin/fhandler_random.cc winsup/cygwin/fhandler_raw.cc winsup/cygwin/fhandler_registry.cc winsup/cygwin/fhandler_serial.cc winsup/cygwin/fhandler_socket.cc winsup/cygwin/fhandler_tape.cc winsup/cygwin/fhandler_termios.cc winsup/cygwin/fhandler_tty.cc winsup/cygwin/fhandler_virtual.cc winsup/cygwin/fhandler_virtual.h winsup/cygwin/fhandler_windows.cc winsup/cygwin/fhandler_zero.cc winsup/cygwin/flock.cc winsup/cygwin/fork.cc winsup/cygwin/gcrt0.c winsup/cygwin/gendef winsup/cygwin/gendevices winsup/cygwin/gentls_offsets winsup/cygwin/glob.cc winsup/cygwin/glob_pattern_p.cc winsup/cygwin/globals.cc winsup/cygwin/gmon.c winsup/cygwin/gmon.h winsup/cygwin/grp.cc winsup/cygwin/heap.cc winsup/cygwin/heap.h winsup/cygwin/hires.h winsup/cygwin/hookapi.cc winsup/cygwin/how-autoload-works.txt winsup/cygwin/how-cygheap-works.txt winsup/cygwin/how-cygtls-works.txt winsup/cygwin/how-fhandlers-work.txt winsup/cygwin/how-signals-work.txt winsup/cygwin/how-spawn-works.txt winsup/cygwin/how-startup-shutdown-works.txt winsup/cygwin/how-to-debug-cygwin.txt winsup/cygwin/how-vfork-works.txt winsup/cygwin/include/a.out.h winsup/cygwin/include/arpa/ftp.h winsup/cygwin/include/arpa/inet.h winsup/cygwin/include/arpa/nameser.h winsup/cygwin/include/arpa/nameser_compat.h winsup/cygwin/include/arpa/telnet.h winsup/cygwin/include/asm/byteorder.h winsup/cygwin/include/asm/socket.h winsup/cygwin/include/asm/types.h winsup/cygwin/include/attr/xattr.h winsup/cygwin/include/bits/wordsize.h winsup/cygwin/include/byteswap.h winsup/cygwin/include/cygwin/_types.h winsup/cygwin/include/cygwin/acl.h winsup/cygwin/include/cygwin/config.h winsup/cygwin/include/cygwin/core_dump.h winsup/cygwin/include/cygwin/cygwin_dll.h winsup/cygwin/include/cygwin/fs.h winsup/cygwin/include/cygwin/grp.h winsup/cygwin/include/cygwin/hdreg.h winsup/cygwin/include/cygwin/icmp.h winsup/cygwin/include/cygwin/if.h winsup/cygwin/include/cygwin/in.h winsup/cygwin/include/cygwin/in6.h winsup/cygwin/include/cygwin/in_systm.h winsup/cygwin/include/cygwin/ipc.h winsup/cygwin/include/cygwin/kd.h winsup/cygwin/include/cygwin/msg.h winsup/cygwin/include/cygwin/mtio.h winsup/cygwin/include/cygwin/rdevio.h winsup/cygwin/include/cygwin/sem.h winsup/cygwin/include/cygwin/shm.h winsup/cygwin/include/cygwin/signal.h winsup/cygwin/include/cygwin/socket.h winsup/cygwin/include/cygwin/sockios.h winsup/cygwin/include/cygwin/stat.h winsup/cygwin/include/cygwin/stdlib.h winsup/cygwin/include/cygwin/sys_time.h winsup/cygwin/include/cygwin/sysproto.h winsup/cygwin/include/cygwin/time.h winsup/cygwin/include/cygwin/types.h winsup/cygwin/include/cygwin/utmp.h winsup/cygwin/include/cygwin/version.h winsup/cygwin/include/cygwin/wait.h winsup/cygwin/include/dlfcn.h winsup/cygwin/include/elf.h winsup/cygwin/include/endian.h winsup/cygwin/include/err.h winsup/cygwin/include/exceptions.h winsup/cygwin/include/fcntl.h winsup/cygwin/include/features.h winsup/cygwin/include/fenv.h winsup/cygwin/include/fnmatch.h winsup/cygwin/include/fts.h winsup/cygwin/include/ftw.h winsup/cygwin/include/getopt.h winsup/cygwin/include/glob.h winsup/cygwin/include/icmp.h winsup/cygwin/include/ifaddrs.h winsup/cygwin/include/inttypes.h winsup/cygwin/include/io.h winsup/cygwin/include/lastlog.h winsup/cygwin/include/libgen.h winsup/cygwin/include/limits.h winsup/cygwin/include/machine/stdlib.h winsup/cygwin/include/mapi.h winsup/cygwin/include/memory.h winsup/cygwin/include/mntent.h winsup/cygwin/include/monetary.h winsup/cygwin/include/mqueue.h winsup/cygwin/include/net/if.h winsup/cygwin/include/netdb.h winsup/cygwin/include/netinet/in.h winsup/cygwin/include/netinet/in_systm.h winsup/cygwin/include/netinet/ip.h winsup/cygwin/include/netinet/ip_icmp.h winsup/cygwin/include/netinet/tcp.h winsup/cygwin/include/netinet/udp.h winsup/cygwin/include/paths.h winsup/cygwin/include/poll.h winsup/cygwin/include/pthread.h winsup/cygwin/include/pty.h winsup/cygwin/include/regex.h winsup/cygwin/include/resolv.h winsup/cygwin/include/search.h winsup/cygwin/include/semaphore.h winsup/cygwin/include/stdint.h winsup/cygwin/include/sys/acl.h winsup/cygwin/include/sys/copying.dj winsup/cygwin/include/sys/cygwin.h winsup/cygwin/include/sys/dirent.h winsup/cygwin/include/sys/elf32.h winsup/cygwin/include/sys/elf64.h winsup/cygwin/include/sys/elf_common.h winsup/cygwin/include/sys/elf_generic.h winsup/cygwin/include/sys/file.h winsup/cygwin/include/sys/ioctl.h winsup/cygwin/include/sys/ipc.h winsup/cygwin/include/sys/kd.h winsup/cygwin/include/sys/lock.h winsup/cygwin/include/sys/mman.h winsup/cygwin/include/sys/mount.h winsup/cygwin/include/sys/msg.h winsup/cygwin/include/sys/mtio.h winsup/cygwin/include/sys/param.h winsup/cygwin/include/sys/poll.h winsup/cygwin/include/sys/procfs.h winsup/cygwin/include/sys/queue.h winsup/cygwin/include/sys/resource.h winsup/cygwin/include/sys/select.h winsup/cygwin/include/sys/sem.h winsup/cygwin/include/sys/shm.h winsup/cygwin/include/sys/smallprint.h winsup/cygwin/include/sys/socket.h winsup/cygwin/include/sys/soundcard.h winsup/cygwin/include/sys/statfs.h winsup/cygwin/include/sys/statvfs.h winsup/cygwin/include/sys/stdio.h winsup/cygwin/include/sys/strace.h winsup/cygwin/include/sys/sysinfo.h winsup/cygwin/include/sys/syslimits.h winsup/cygwin/include/sys/syslog.h winsup/cygwin/include/sys/sysmacros.h winsup/cygwin/include/sys/sysproto.h winsup/cygwin/include/sys/termio.h winsup/cygwin/include/sys/termios.h winsup/cygwin/include/sys/ttychars.h winsup/cygwin/include/sys/uio.h winsup/cygwin/include/sys/un.h winsup/cygwin/include/sys/utime.h winsup/cygwin/include/sys/utmp.h winsup/cygwin/include/sys/utsname.h winsup/cygwin/include/sys/vfs.h winsup/cygwin/include/sys/wait.h winsup/cygwin/include/sysexits.h winsup/cygwin/include/syslog.h winsup/cygwin/include/termio.h winsup/cygwin/include/tzfile.h winsup/cygwin/include/utmpx.h winsup/cygwin/include/wait.h winsup/cygwin/init.cc winsup/cygwin/ioctl.cc winsup/cygwin/ipc.cc winsup/cygwin/kernel32.cc winsup/cygwin/lc_era.h winsup/cygwin/lc_msg.h winsup/cygwin/lib/_cygwin_crt0_common.cc winsup/cygwin/lib/crt0.h winsup/cygwin/lib/cygwin_attach_dll.c winsup/cygwin/lib/cygwin_crt0.c winsup/cygwin/lib/dll_entry.c winsup/cygwin/lib/dll_main.cc winsup/cygwin/lib/libcmain.c winsup/cygwin/lib/premain0.c winsup/cygwin/lib/premain1.c winsup/cygwin/lib/premain2.c winsup/cygwin/lib/premain3.c winsup/cygwin/lib/pseudo-reloc-dummy.c winsup/cygwin/libc/bsdlib.cc winsup/cygwin/libc/fnmatch.c winsup/cygwin/libc/fts.c winsup/cygwin/libc/ftw.c winsup/cygwin/libc/getopt.c winsup/cygwin/libc/inet_addr.c winsup/cygwin/libc/inet_network.c winsup/cygwin/libc/minires-os-if.c winsup/cygwin/libc/minires.c winsup/cygwin/libc/minires.h winsup/cygwin/libc/nftw.c winsup/cygwin/libc/rcmd.cc winsup/cygwin/libc/rexec.cc winsup/cygwin/libc/strfmon.c winsup/cygwin/libc/strptime.cc winsup/cygwin/libc/xsique.cc winsup/cygwin/libstdcxx_wrapper.cc winsup/cygwin/localtime.cc winsup/cygwin/lsearch.cc winsup/cygwin/malloc.cc winsup/cygwin/malloc_wrapper.cc winsup/cygwin/mcount.c winsup/cygwin/miscfuncs.cc winsup/cygwin/miscfuncs.h winsup/cygwin/mkglobals_h winsup/cygwin/mkimport winsup/cygwin/mkstatic winsup/cygwin/mktemp.cc winsup/cygwin/mkvers.sh winsup/cygwin/mmap.cc winsup/cygwin/mmap_helper.h winsup/cygwin/mount.cc winsup/cygwin/mount.h winsup/cygwin/msg.cc winsup/cygwin/mtinfo.h winsup/cygwin/net.cc winsup/cygwin/netdb.cc winsup/cygwin/nfs.cc winsup/cygwin/nfs.h winsup/cygwin/nlsfuncs.cc winsup/cygwin/ntdll.h winsup/cygwin/ntea.cc winsup/cygwin/passwd.cc winsup/cygwin/path.cc winsup/cygwin/path.h winsup/cygwin/path.sgml winsup/cygwin/perprocess.h winsup/cygwin/pinfo.cc winsup/cygwin/pinfo.h winsup/cygwin/pipe.cc winsup/cygwin/poll.cc winsup/cygwin/posix.sgml winsup/cygwin/posix_ipc.cc winsup/cygwin/profil.c winsup/cygwin/profil.h winsup/cygwin/pseudo-reloc.cc winsup/cygwin/pthread.cc winsup/cygwin/pwdgrp.h winsup/cygwin/random.cc winsup/cygwin/regex/COPYRIGHT winsup/cygwin/regex/cname.h winsup/cygwin/regex/engine.c winsup/cygwin/regex/regcomp.c winsup/cygwin/regex/regerror.c winsup/cygwin/regex/regex.3 winsup/cygwin/regex/regex.7 winsup/cygwin/regex/regex2.h winsup/cygwin/regex/regexec.c winsup/cygwin/regex/regfree.c winsup/cygwin/regex/utils.h winsup/cygwin/registry.cc winsup/cygwin/registry.h winsup/cygwin/resource.cc winsup/cygwin/scandir.cc winsup/cygwin/sched.cc winsup/cygwin/sec_acl.cc winsup/cygwin/sec_auth.cc winsup/cygwin/sec_helper.cc winsup/cygwin/security.cc winsup/cygwin/security.h winsup/cygwin/security.sgml winsup/cygwin/select.cc winsup/cygwin/select.h winsup/cygwin/sem.cc winsup/cygwin/setlsapwd.cc winsup/cygwin/shared.cc winsup/cygwin/shared_info.h winsup/cygwin/shm.cc winsup/cygwin/signal.cc winsup/cygwin/sigproc.cc winsup/cygwin/sigproc.h winsup/cygwin/smallprint.cc winsup/cygwin/sortdin winsup/cygwin/spawn.cc winsup/cygwin/speclib winsup/cygwin/spinlock.h winsup/cygwin/stackdump.sgml winsup/cygwin/strace.cc winsup/cygwin/strfuncs.cc winsup/cygwin/string.h winsup/cygwin/strsep.cc winsup/cygwin/strsig.cc winsup/cygwin/sync.cc winsup/cygwin/sync.h winsup/cygwin/syscalls.cc winsup/cygwin/sysconf.cc winsup/cygwin/syslog.cc winsup/cygwin/termios.cc winsup/cygwin/textmode.c winsup/cygwin/textreadmode.c winsup/cygwin/thread.cc winsup/cygwin/thread.h winsup/cygwin/timer.cc winsup/cygwin/times.cc winsup/cygwin/tls_pbuf.cc winsup/cygwin/tls_pbuf.h winsup/cygwin/tlsoffsets.h winsup/cygwin/tmpbuf.h winsup/cygwin/tty.cc winsup/cygwin/tty.h winsup/cygwin/tz_posixrules.h winsup/cygwin/uinfo.cc winsup/cygwin/uname.cc winsup/cygwin/wait.cc winsup/cygwin/wchar.h winsup/cygwin/winbase.h winsup/cygwin/wincap.cc winsup/cygwin/wincap.h winsup/cygwin/window.cc winsup/cygwin/winf.cc winsup/cygwin/winf.h winsup/cygwin/wininfo.h winsup/cygwin/winlean.h winsup/cygwin/winsup.h winsup/cygwin/winver.rc winsup/doc/ChangeLog winsup/doc/Makefile.in winsup/doc/README winsup/doc/aclocal.m4 winsup/doc/configure winsup/doc/configure.in winsup/doc/cygserver.sgml winsup/doc/cygwin-api.in.sgml winsup/doc/cygwin-ug-net.in.sgml winsup/doc/cygwin-ug.in.sgml winsup/doc/cygwin.dsl winsup/doc/cygwinenv.sgml winsup/doc/dll.sgml winsup/doc/doctool.c winsup/doc/doctool.txt winsup/doc/effectively.sgml winsup/doc/faq-api.xml winsup/doc/faq-programming.xml winsup/doc/faq-resources.xml winsup/doc/faq-sections.xml winsup/doc/faq-setup.xml winsup/doc/faq-using.xml winsup/doc/faq-what.xml winsup/doc/faq.xml winsup/doc/fhandler-tut.txt winsup/doc/filemodes.sgml winsup/doc/gcc.sgml winsup/doc/gdb.sgml winsup/doc/legal.sgml winsup/doc/new-features.sgml winsup/doc/ntsec.sgml winsup/doc/overview.sgml winsup/doc/overview2.sgml winsup/doc/pathnames.sgml winsup/doc/programming.sgml winsup/doc/setup-net.sgml winsup/doc/setup.sgml winsup/doc/setup2.sgml winsup/doc/textbinary.sgml winsup/doc/using.sgml winsup/doc/windres.sgml winsup/lsaauth/ChangeLog winsup/lsaauth/Makefile.in winsup/lsaauth/aclocal.m4 winsup/lsaauth/configure winsup/lsaauth/configure.in winsup/lsaauth/cyglsa-config winsup/lsaauth/cyglsa.c winsup/lsaauth/cyglsa.din winsup/lsaauth/cyglsa64.dll winsup/lsaauth/make-64bit-version-with-visual-c.bat winsup/lsaauth/mslsa.def winsup/mingw/CONTRIBUTORS winsup/mingw/CRT_fp10.c winsup/mingw/CRT_fp8.c winsup/mingw/CRT_noglob.c winsup/mingw/CRTfmode.c winsup/mingw/CRTglob.c winsup/mingw/CRTinit.c winsup/mingw/ChangeLog winsup/mingw/DISCLAIMER winsup/mingw/Makefile.in winsup/mingw/README winsup/mingw/TODO winsup/mingw/aclocal.m4 winsup/mingw/binmode.c winsup/mingw/config.guess winsup/mingw/config.sub winsup/mingw/configure winsup/mingw/configure.in winsup/mingw/cpu_features.c winsup/mingw/cpu_features.h winsup/mingw/crt1.c winsup/mingw/crtdll.def winsup/mingw/crtmt.c winsup/mingw/crtst.c winsup/mingw/dllcrt1.c winsup/mingw/dllmain.c winsup/mingw/gccmain.c winsup/mingw/include/_mingw.h winsup/mingw/include/assert.h winsup/mingw/include/complex.h winsup/mingw/include/conio.h winsup/mingw/include/ctype.h winsup/mingw/include/dir.h winsup/mingw/include/direct.h winsup/mingw/include/dirent.h winsup/mingw/include/dos.h winsup/mingw/include/errno.h winsup/mingw/include/excpt.h winsup/mingw/include/fcntl.h winsup/mingw/include/fenv.h winsup/mingw/include/float.h winsup/mingw/include/getopt.h winsup/mingw/include/inttypes.h winsup/mingw/include/io.h winsup/mingw/include/libgen.h winsup/mingw/include/limits.h winsup/mingw/include/locale.h winsup/mingw/include/malloc.h winsup/mingw/include/math.h winsup/mingw/include/mbctype.h winsup/mingw/include/mbstring.h winsup/mingw/include/mem.h winsup/mingw/include/memory.h winsup/mingw/include/process.h winsup/mingw/include/search.h winsup/mingw/include/setjmp.h winsup/mingw/include/share.h winsup/mingw/include/signal.h winsup/mingw/include/stdint.h winsup/mingw/include/stdio.h winsup/mingw/include/stdlib.h winsup/mingw/include/string.h winsup/mingw/include/strings.h winsup/mingw/include/sys/fcntl.h winsup/mingw/include/sys/file.h winsup/mingw/include/sys/locking.h winsup/mingw/include/sys/param.h winsup/mingw/include/sys/stat.h winsup/mingw/include/sys/time.h winsup/mingw/include/sys/timeb.h winsup/mingw/include/sys/types.h winsup/mingw/include/sys/unistd.h winsup/mingw/include/sys/utime.h winsup/mingw/include/tchar.h winsup/mingw/include/time.h winsup/mingw/include/unistd.h winsup/mingw/include/utime.h winsup/mingw/include/values.h winsup/mingw/include/varargs.h winsup/mingw/include/wchar.h winsup/mingw/include/wctype.h winsup/mingw/init.c winsup/mingw/install-sh winsup/mingw/isascii.c winsup/mingw/iscsym.c winsup/mingw/iscsymf.c winsup/mingw/jamfile winsup/mingw/main.c winsup/mingw/man/dirname.man winsup/mingw/mingwex/Makefile.in winsup/mingw/mingwex/_Exit.c winsup/mingw/mingwex/atoll.c winsup/mingw/mingwex/basename.c winsup/mingw/mingwex/btowc.c winsup/mingw/mingwex/complex/cabs.c winsup/mingw/mingwex/complex/cabsf.c winsup/mingw/mingwex/complex/cabsl.c winsup/mingw/mingwex/complex/cacos.c winsup/mingw/mingwex/complex/cacosf.c winsup/mingw/mingwex/complex/cacosh.c winsup/mingw/mingwex/complex/cacoshf.c winsup/mingw/mingwex/complex/cacoshl.c winsup/mingw/mingwex/complex/cacosl.c winsup/mingw/mingwex/complex/carg.c winsup/mingw/mingwex/complex/cargf.c winsup/mingw/mingwex/complex/cargl.c winsup/mingw/mingwex/complex/casin.c winsup/mingw/mingwex/complex/casinf.c winsup/mingw/mingwex/complex/casinh.c winsup/mingw/mingwex/complex/casinhf.c winsup/mingw/mingwex/complex/casinhl.c winsup/mingw/mingwex/complex/casinl.c winsup/mingw/mingwex/complex/catan.c winsup/mingw/mingwex/complex/catanf.c winsup/mingw/mingwex/complex/catanh.c winsup/mingw/mingwex/complex/catanhf.c winsup/mingw/mingwex/complex/catanhl.c winsup/mingw/mingwex/complex/catanl.c winsup/mingw/mingwex/complex/ccos.c winsup/mingw/mingwex/complex/ccosf.c winsup/mingw/mingwex/complex/ccosh.c winsup/mingw/mingwex/complex/ccoshf.c winsup/mingw/mingwex/complex/ccoshl.c winsup/mingw/mingwex/complex/ccosl.c winsup/mingw/mingwex/complex/cexp.c winsup/mingw/mingwex/complex/cexpf.c winsup/mingw/mingwex/complex/cexpl.c winsup/mingw/mingwex/complex/cimag.c winsup/mingw/mingwex/complex/cimagf.c winsup/mingw/mingwex/complex/cimagl.c winsup/mingw/mingwex/complex/clog.c winsup/mingw/mingwex/complex/clogf.c winsup/mingw/mingwex/complex/clogl.c winsup/mingw/mingwex/complex/cpow.c winsup/mingw/mingwex/complex/cpowf.c winsup/mingw/mingwex/complex/cpowl.c winsup/mingw/mingwex/complex/cproj.c winsup/mingw/mingwex/complex/cprojf.c winsup/mingw/mingwex/complex/cprojl.c winsup/mingw/mingwex/complex/creal.c winsup/mingw/mingwex/complex/crealf.c winsup/mingw/mingwex/complex/creall.c winsup/mingw/mingwex/complex/csin.c winsup/mingw/mingwex/complex/csinf.c winsup/mingw/mingwex/complex/csinh.c winsup/mingw/mingwex/complex/csinhf.c winsup/mingw/mingwex/complex/csinhl.c winsup/mingw/mingwex/complex/csinl.c winsup/mingw/mingwex/complex/csqrt.c winsup/mingw/mingwex/complex/csqrtf.c winsup/mingw/mingwex/complex/csqrtl.c winsup/mingw/mingwex/complex/ctan.c winsup/mingw/mingwex/complex/ctanf.c winsup/mingw/mingwex/complex/ctanh.c winsup/mingw/mingwex/complex/ctanhf.c winsup/mingw/mingwex/complex/ctanhl.c winsup/mingw/mingwex/complex/ctanl.c winsup/mingw/mingwex/dirent.c winsup/mingw/mingwex/dirname.c winsup/mingw/mingwex/feclearexcept.c winsup/mingw/mingwex/fegetenv.c winsup/mingw/mingwex/fegetexceptflag.c winsup/mingw/mingwex/fegetround.c winsup/mingw/mingwex/feholdexcept.c winsup/mingw/mingwex/feraiseexcept.c winsup/mingw/mingwex/fesetenv.c winsup/mingw/mingwex/fesetexceptflag.c winsup/mingw/mingwex/fesetround.c winsup/mingw/mingwex/fetestexcept.c winsup/mingw/mingwex/feupdateenv.c winsup/mingw/mingwex/ftruncate.c winsup/mingw/mingwex/fwide.c winsup/mingw/mingwex/gdtoa/README winsup/mingw/mingwex/gdtoa/README.mingw winsup/mingw/mingwex/gdtoa/arithchk.c winsup/mingw/mingwex/gdtoa/dmisc.c winsup/mingw/mingwex/gdtoa/dtoa.c winsup/mingw/mingwex/gdtoa/g__fmt.c winsup/mingw/mingwex/gdtoa/g_dfmt.c winsup/mingw/mingwex/gdtoa/g_ffmt.c winsup/mingw/mingwex/gdtoa/g_xfmt.c winsup/mingw/mingwex/gdtoa/gd_arith.h winsup/mingw/mingwex/gdtoa/gd_qnan.h winsup/mingw/mingwex/gdtoa/gdtoa.c winsup/mingw/mingwex/gdtoa/gdtoa.h winsup/mingw/mingwex/gdtoa/gdtoa_fltrnds.h winsup/mingw/mingwex/gdtoa/gdtoaimp.h winsup/mingw/mingwex/gdtoa/gethex.c winsup/mingw/mingwex/gdtoa/gmisc.c winsup/mingw/mingwex/gdtoa/hd_init.c winsup/mingw/mingwex/gdtoa/hexnan.c winsup/mingw/mingwex/gdtoa/misc.c winsup/mingw/mingwex/gdtoa/qnan.c winsup/mingw/mingwex/gdtoa/smisc.c winsup/mingw/mingwex/gdtoa/strtodg.c winsup/mingw/mingwex/gdtoa/strtodnrp.c winsup/mingw/mingwex/gdtoa/strtof.c winsup/mingw/mingwex/gdtoa/strtopx.c winsup/mingw/mingwex/gdtoa/sum.c winsup/mingw/mingwex/gdtoa/ulp.c winsup/mingw/mingwex/getopt.c winsup/mingw/mingwex/gettimeofday.c winsup/mingw/mingwex/imaxabs.c winsup/mingw/mingwex/imaxdiv.c winsup/mingw/mingwex/isblank.c winsup/mingw/mingwex/iswblank.c winsup/mingw/mingwex/lltoa.c winsup/mingw/mingwex/lltow.c winsup/mingw/mingwex/math/acosf.c winsup/mingw/mingwex/math/acosh.c winsup/mingw/mingwex/math/acoshf.c winsup/mingw/mingwex/math/acoshl.c winsup/mingw/mingwex/math/acosl.c winsup/mingw/mingwex/math/asinf.c winsup/mingw/mingwex/math/asinh.c winsup/mingw/mingwex/math/asinhf.c winsup/mingw/mingwex/math/asinhl.c winsup/mingw/mingwex/math/asinl.c winsup/mingw/mingwex/math/atan2f.c winsup/mingw/mingwex/math/atan2l.c winsup/mingw/mingwex/math/atanf.c winsup/mingw/mingwex/math/atanh.c winsup/mingw/mingwex/math/atanhf.c winsup/mingw/mingwex/math/atanhl.c winsup/mingw/mingwex/math/atanl.c winsup/mingw/mingwex/math/cbrt.c winsup/mingw/mingwex/math/cbrtf.c winsup/mingw/mingwex/math/cbrtl.c winsup/mingw/mingwex/math/ceilf.S winsup/mingw/mingwex/math/ceill.S winsup/mingw/mingwex/math/cephes_mconf.h winsup/mingw/mingwex/math/copysign.S winsup/mingw/mingwex/math/copysignf.S winsup/mingw/mingwex/math/copysignl.S winsup/mingw/mingwex/math/cosf.S winsup/mingw/mingwex/math/coshf.c winsup/mingw/mingwex/math/coshl.c winsup/mingw/mingwex/math/cosl.S winsup/mingw/mingwex/math/erfl.c winsup/mingw/mingwex/math/exp2.S winsup/mingw/mingwex/math/exp2f.S winsup/mingw/mingwex/math/exp2l.S winsup/mingw/mingwex/math/expf.c winsup/mingw/mingwex/math/expl.c winsup/mingw/mingwex/math/expm1.c winsup/mingw/mingwex/math/expm1f.c winsup/mingw/mingwex/math/expm1l.c winsup/mingw/mingwex/math/fabs.c winsup/mingw/mingwex/math/fabsf.c winsup/mingw/mingwex/math/fabsl.c winsup/mingw/mingwex/math/fastmath.h winsup/mingw/mingwex/math/fdim.c winsup/mingw/mingwex/math/fdimf.c winsup/mingw/mingwex/math/fdiml.c winsup/mingw/mingwex/math/floorf.S winsup/mingw/mingwex/math/floorl.S winsup/mingw/mingwex/math/fma.S winsup/mingw/mingwex/math/fmaf.S winsup/mingw/mingwex/math/fmal.c winsup/mingw/mingwex/math/fmax.c winsup/mingw/mingwex/math/fmaxf.c winsup/mingw/mingwex/math/fmaxl.c winsup/mingw/mingwex/math/fmin.c winsup/mingw/mingwex/math/fminf.c winsup/mingw/mingwex/math/fminl.c winsup/mingw/mingwex/math/fmodf.c winsup/mingw/mingwex/math/fmodl.c winsup/mingw/mingwex/math/fp_consts.c winsup/mingw/mingwex/math/fp_consts.h winsup/mingw/mingwex/math/fp_constsf.c winsup/mingw/mingwex/math/fp_constsl.c winsup/mingw/mingwex/math/fpclassify.c winsup/mingw/mingwex/math/fpclassifyf.c winsup/mingw/mingwex/math/fpclassifyl.c winsup/mingw/mingwex/math/frexpf.c winsup/mingw/mingwex/math/frexpl.S winsup/mingw/mingwex/math/fucom.c winsup/mingw/mingwex/math/hypotf.c winsup/mingw/mingwex/math/hypotl.c winsup/mingw/mingwex/math/ilogb.S winsup/mingw/mingwex/math/ilogbf.S winsup/mingw/mingwex/math/ilogbl.S winsup/mingw/mingwex/math/isnan.c winsup/mingw/mingwex/math/isnanf.c winsup/mingw/mingwex/math/isnanl.c winsup/mingw/mingwex/math/ldexpf.c winsup/mingw/mingwex/math/ldexpl.c winsup/mingw/mingwex/math/lgamma.c winsup/mingw/mingwex/math/lgammaf.c winsup/mingw/mingwex/math/lgammal.c winsup/mingw/mingwex/math/llrint.c winsup/mingw/mingwex/math/llrintf.c winsup/mingw/mingwex/math/llrintl.c winsup/mingw/mingwex/math/log10f.S winsup/mingw/mingwex/math/log10l.S winsup/mingw/mingwex/math/log1p.S winsup/mingw/mingwex/math/log1pf.S winsup/mingw/mingwex/math/log1pl.S winsup/mingw/mingwex/math/log2.S winsup/mingw/mingwex/math/log2f.S winsup/mingw/mingwex/math/log2l.S winsup/mingw/mingwex/math/logb.c winsup/mingw/mingwex/math/logbf.c winsup/mingw/mingwex/math/logbl.c winsup/mingw/mingwex/math/logf.S winsup/mingw/mingwex/math/logl.S winsup/mingw/mingwex/math/lrint.c winsup/mingw/mingwex/math/lrintf.c winsup/mingw/mingwex/math/lrintl.c winsup/mingw/mingwex/math/lround_generic.c winsup/mingw/mingwex/math/modff.c winsup/mingw/mingwex/math/modfl.c winsup/mingw/mingwex/math/nearbyint.S winsup/mingw/mingwex/math/nearbyintf.S winsup/mingw/mingwex/math/nearbyintl.S winsup/mingw/mingwex/math/nextafterf.c winsup/mingw/mingwex/math/nextafterl.c winsup/mingw/mingwex/math/nexttoward.c winsup/mingw/mingwex/math/nexttowardf.c winsup/mingw/mingwex/math/pow.c winsup/mingw/mingwex/math/powf.c winsup/mingw/mingwex/math/powi.c winsup/mingw/mingwex/math/powif.c winsup/mingw/mingwex/math/powil.c winsup/mingw/mingwex/math/powl.c winsup/mingw/mingwex/math/remainder.S winsup/mingw/mingwex/math/remainderf.S winsup/mingw/mingwex/math/remainderl.S winsup/mingw/mingwex/math/remquo.S winsup/mingw/mingwex/math/remquof.S winsup/mingw/mingwex/math/remquol.S winsup/mingw/mingwex/math/rint.c winsup/mingw/mingwex/math/rintf.c winsup/mingw/mingwex/math/rintl.c winsup/mingw/mingwex/math/round_generic.c winsup/mingw/mingwex/math/round_internal.h winsup/mingw/mingwex/math/s_erf.c winsup/mingw/mingwex/math/scalbn.S winsup/mingw/mingwex/math/scalbnf.S winsup/mingw/mingwex/math/scalbnl.S winsup/mingw/mingwex/math/sf_erf.c winsup/mingw/mingwex/math/signbit.c winsup/mingw/mingwex/math/signbitf.c winsup/mingw/mingwex/math/signbitl.c winsup/mingw/mingwex/math/sinf.S winsup/mingw/mingwex/math/sinhf.c winsup/mingw/mingwex/math/sinhl.c winsup/mingw/mingwex/math/sinl.S winsup/mingw/mingwex/math/sqrtf.c winsup/mingw/mingwex/math/sqrtl.c winsup/mingw/mingwex/math/tanf.S winsup/mingw/mingwex/math/tanhf.c winsup/mingw/mingwex/math/tanhl.c winsup/mingw/mingwex/math/tanl.S winsup/mingw/mingwex/math/tgamma.c winsup/mingw/mingwex/math/tgammaf.c winsup/mingw/mingwex/math/tgammal.c winsup/mingw/mingwex/math/trunc.c winsup/mingw/mingwex/math/truncf.c winsup/mingw/mingwex/math/truncl.c winsup/mingw/mingwex/mb_wc_common.h winsup/mingw/mingwex/mbrtowc.c winsup/mingw/mingwex/mbsinit.c winsup/mingw/mingwex/mingw-aligned-malloc.c winsup/mingw/mingwex/mingw-fseek.c winsup/mingw/mingwex/sitest.c winsup/mingw/mingwex/stdio/fopen64.c winsup/mingw/mingwex/stdio/fprintf.c winsup/mingw/mingwex/stdio/fseeko64.c winsup/mingw/mingwex/stdio/ftello64.c winsup/mingw/mingwex/stdio/lseek64.c winsup/mingw/mingwex/stdio/pformat.c winsup/mingw/mingwex/stdio/pformat.h winsup/mingw/mingwex/stdio/printf.c winsup/mingw/mingwex/stdio/snprintf.c winsup/mingw/mingwex/stdio/snwprintf.c winsup/mingw/mingwex/stdio/sprintf.c winsup/mingw/mingwex/stdio/vfprintf.c winsup/mingw/mingwex/stdio/vfscanf.c winsup/mingw/mingwex/stdio/vfwscanf.c winsup/mingw/mingwex/stdio/vprintf.c winsup/mingw/mingwex/stdio/vscanf.c winsup/mingw/mingwex/stdio/vsnprintf.c winsup/mingw/mingwex/stdio/vsnwprintf.c winsup/mingw/mingwex/stdio/vsprintf.c winsup/mingw/mingwex/stdio/vsscanf.c winsup/mingw/mingwex/stdio/vswscanf.c winsup/mingw/mingwex/stdio/vwscanf.c winsup/mingw/mingwex/strtoimax.c winsup/mingw/mingwex/strtoumax.c winsup/mingw/mingwex/tdelete.c winsup/mingw/mingwex/testwmem.c winsup/mingw/mingwex/tfind.c winsup/mingw/mingwex/tsearch.c winsup/mingw/mingwex/tst-aligned-malloc.c winsup/mingw/mingwex/twalk.c winsup/mingw/mingwex/ulltoa.c winsup/mingw/mingwex/ulltow.c winsup/mingw/mingwex/usleep.c winsup/mingw/mingwex/wcrtomb.c winsup/mingw/mingwex/wcstof.c winsup/mingw/mingwex/wcstoimax.c winsup/mingw/mingwex/wcstold.c winsup/mingw/mingwex/wcstoumax.c winsup/mingw/mingwex/wctob.c winsup/mingw/mingwex/wctrans.c winsup/mingw/mingwex/wctype.c winsup/mingw/mingwex/wdirent.c winsup/mingw/mingwex/wmemchr.c winsup/mingw/mingwex/wmemcmp.c winsup/mingw/mingwex/wmemcpy.c winsup/mingw/mingwex/wmemmove.c winsup/mingw/mingwex/wmemset.c winsup/mingw/mingwex/wtoll.c winsup/mingw/mkinstalldirs winsup/mingw/moldname.def.in winsup/mingw/msvcrt.def.in winsup/mingw/mthr.c winsup/mingw/mthr_init.c winsup/mingw/ofmt_stub.s winsup/mingw/profile/COPYING winsup/mingw/profile/CYGWIN_LICENSE winsup/mingw/profile/Makefile.in winsup/mingw/profile/gcrt0.c winsup/mingw/profile/gmon.c winsup/mingw/profile/gmon.h winsup/mingw/profile/mcount.c winsup/mingw/profile/profil.c winsup/mingw/profile/profil.h winsup/mingw/profile/profile.h winsup/mingw/pseudo-reloc-list.c winsup/mingw/pseudo-reloc.c winsup/mingw/readme.txt winsup/mingw/samples/dirent/jamfile winsup/mingw/samples/dirent/test.c winsup/mingw/samples/dirent/wtest.c winsup/mingw/samples/dlltest/dll.c winsup/mingw/samples/dlltest/dll.def winsup/mingw/samples/dlltest/dll.h winsup/mingw/samples/dlltest/exe.c winsup/mingw/samples/dlltest/exe.exp winsup/mingw/samples/dlltest/expexe.c winsup/mingw/samples/dlltest/expexe.def winsup/mingw/samples/dlltest/jamfile winsup/mingw/samples/dlltest/loaddll.c winsup/mingw/samples/dlltest/loadexe.c winsup/mingw/samples/dlltest/readme.txt winsup/mingw/samples/dlltest/silly.cpp winsup/mingw/samples/dlltest/silly.def winsup/mingw/samples/dlltest/silly.exp winsup/mingw/samples/dlltest/silly.h winsup/mingw/samples/dlltest/sillydll.cpp winsup/mingw/samples/filehand/filehand.c winsup/mingw/samples/filehand/jamfile winsup/mingw/samples/filehand/junk.txt winsup/mingw/samples/fixargv/fixargv.c winsup/mingw/samples/fixargv/fixargv.h winsup/mingw/samples/fixargv/readme.txt winsup/mingw/samples/fmode/all.c winsup/mingw/samples/fmode/jamfile winsup/mingw/samples/fmode/readme.txt winsup/mingw/samples/fmode/test.c winsup/mingw/samples/fmode/test2.c winsup/mingw/samples/globbing/glob.c winsup/mingw/samples/globbing/jamfile winsup/mingw/samples/globbing/noglob.c winsup/mingw/samples/globbing/readme.txt winsup/mingw/samples/print/jamfile winsup/mingw/samples/print/prntest.c winsup/mingw/samples/seh/eh3.c winsup/mingw/samples/seh/exutil.c winsup/mingw/samples/seh/exutil.def winsup/mingw/samples/seh/exutil.h winsup/mingw/samples/seh/jamfile winsup/mingw/samples/seh/sehfix.c winsup/mingw/samples/seh/sehsub.c winsup/mingw/samples/seh/sehtest.c winsup/mingw/samples/simpledll/dll.c winsup/mingw/samples/simpledll/dll.cpp winsup/mingw/samples/simpledll/dll.def winsup/mingw/samples/simpledll/exe.c winsup/mingw/samples/simpledll/jamfile winsup/mingw/samples/simpledll/makedll.bat winsup/mingw/samples/test/jamfile winsup/mingw/samples/test/test.c winsup/mingw/samples/wintest/jamfile winsup/mingw/samples/wintest/test.c winsup/mingw/strcasecmp.c winsup/mingw/strncasecmp.c winsup/mingw/test_headers.c winsup/mingw/tlsmcrt.c winsup/mingw/tlsmthread.c winsup/mingw/tlssup.c winsup/mingw/tlsthrd.c winsup/mingw/toascii.c winsup/mingw/txtmode.c winsup/mingw/wcscmpi.c winsup/testsuite/ChangeLog winsup/testsuite/Makefile.in winsup/testsuite/README winsup/testsuite/aclocal.m4 winsup/testsuite/config/default.exp winsup/testsuite/configure winsup/testsuite/configure.in winsup/testsuite/cygrun.c winsup/testsuite/libltp/include/dataascii.h winsup/testsuite/libltp/include/databin.h winsup/testsuite/libltp/include/file_lock.h winsup/testsuite/libltp/include/forker.h winsup/testsuite/libltp/include/open_flags.h winsup/testsuite/libltp/include/pattern.h winsup/testsuite/libltp/include/random_range.h winsup/testsuite/libltp/include/rmobj.h winsup/testsuite/libltp/include/search_path.h winsup/testsuite/libltp/include/str_to_bytes.h winsup/testsuite/libltp/include/string_to_tokens.h winsup/testsuite/libltp/include/test.h winsup/testsuite/libltp/include/tlibio.h winsup/testsuite/libltp/include/usctest.h winsup/testsuite/libltp/include/write_log.h winsup/testsuite/libltp/lib/dataascii.c winsup/testsuite/libltp/lib/databin.c winsup/testsuite/libltp/lib/datapid.c winsup/testsuite/libltp/lib/forker.c winsup/testsuite/libltp/lib/get_high_address.c winsup/testsuite/libltp/lib/libtestsuite.c winsup/testsuite/libltp/lib/open_flags.c winsup/testsuite/libltp/lib/parse_opts.c winsup/testsuite/libltp/lib/pattern.c winsup/testsuite/libltp/lib/rmobj.c winsup/testsuite/libltp/lib/search_path.c winsup/testsuite/libltp/lib/str_to_bytes.c winsup/testsuite/libltp/lib/string_to_tokens.c winsup/testsuite/libltp/lib/tst_res.c winsup/testsuite/libltp/lib/tst_sig.c winsup/testsuite/libltp/lib/tst_tmpdir.c winsup/testsuite/libltp/lib/write_log.c winsup/testsuite/winsup.api/checksignal.c winsup/testsuite/winsup.api/crlf.c winsup/testsuite/winsup.api/cygload.cc winsup/testsuite/winsup.api/cygload.exp winsup/testsuite/winsup.api/cygload.h winsup/testsuite/winsup.api/devdsp.c winsup/testsuite/winsup.api/devdsp_okay.h winsup/testsuite/winsup.api/devzero.c winsup/testsuite/winsup.api/iospeed.c winsup/testsuite/winsup.api/known_bugs.tcl winsup/testsuite/winsup.api/ltp/access01.c winsup/testsuite/winsup.api/ltp/access03.c winsup/testsuite/winsup.api/ltp/access04.c winsup/testsuite/winsup.api/ltp/access05.c winsup/testsuite/winsup.api/ltp/alarm01.c winsup/testsuite/winsup.api/ltp/alarm02.c winsup/testsuite/winsup.api/ltp/alarm03.c winsup/testsuite/winsup.api/ltp/alarm07.c winsup/testsuite/winsup.api/ltp/asyncio02.c winsup/testsuite/winsup.api/ltp/chdir02.c winsup/testsuite/winsup.api/ltp/chdir04.c winsup/testsuite/winsup.api/ltp/chmod01.c winsup/testsuite/winsup.api/ltp/chmod02.c winsup/testsuite/winsup.api/ltp/chown01.c winsup/testsuite/winsup.api/ltp/close01.c winsup/testsuite/winsup.api/ltp/close02.c winsup/testsuite/winsup.api/ltp/close08.c winsup/testsuite/winsup.api/ltp/creat01.c winsup/testsuite/winsup.api/ltp/creat03.c winsup/testsuite/winsup.api/ltp/creat09.c winsup/testsuite/winsup.api/ltp/dup01.c winsup/testsuite/winsup.api/ltp/dup02.c winsup/testsuite/winsup.api/ltp/dup03.c winsup/testsuite/winsup.api/ltp/dup04.c winsup/testsuite/winsup.api/ltp/dup05.c winsup/testsuite/winsup.api/ltp/execl01.c winsup/testsuite/winsup.api/ltp/execle01.c winsup/testsuite/winsup.api/ltp/execlp01.c winsup/testsuite/winsup.api/ltp/execv01.c winsup/testsuite/winsup.api/ltp/execve01.c winsup/testsuite/winsup.api/ltp/execvp01.c winsup/testsuite/winsup.api/ltp/exit01.c winsup/testsuite/winsup.api/ltp/exit02.c winsup/testsuite/winsup.api/ltp/fchdir01.c winsup/testsuite/winsup.api/ltp/fchdir02.c winsup/testsuite/winsup.api/ltp/fchmod01.c winsup/testsuite/winsup.api/ltp/fchown01.c winsup/testsuite/winsup.api/ltp/fcntl02.c winsup/testsuite/winsup.api/ltp/fcntl03.c winsup/testsuite/winsup.api/ltp/fcntl04.c winsup/testsuite/winsup.api/ltp/fcntl05.c winsup/testsuite/winsup.api/ltp/fcntl07.c winsup/testsuite/winsup.api/ltp/fcntl07B.c winsup/testsuite/winsup.api/ltp/fcntl08.c winsup/testsuite/winsup.api/ltp/fcntl09.c winsup/testsuite/winsup.api/ltp/fcntl10.c winsup/testsuite/winsup.api/ltp/fork01.c winsup/testsuite/winsup.api/ltp/fork02.c winsup/testsuite/winsup.api/ltp/fork03.c winsup/testsuite/winsup.api/ltp/fork04.c winsup/testsuite/winsup.api/ltp/fork06.c winsup/testsuite/winsup.api/ltp/fork07.c winsup/testsuite/winsup.api/ltp/fork09.c winsup/testsuite/winsup.api/ltp/fork10.c winsup/testsuite/winsup.api/ltp/fork11.c winsup/testsuite/winsup.api/ltp/fpathconf01.c winsup/testsuite/winsup.api/ltp/fstat01.c winsup/testsuite/winsup.api/ltp/fstat02.c winsup/testsuite/winsup.api/ltp/fstat03.c winsup/testsuite/winsup.api/ltp/fstat04.c winsup/testsuite/winsup.api/ltp/fsync01.c winsup/testsuite/winsup.api/ltp/ftruncate01.c winsup/testsuite/winsup.api/ltp/ftruncate02.c winsup/testsuite/winsup.api/ltp/ftruncate03.c winsup/testsuite/winsup.api/ltp/getegid01.c winsup/testsuite/winsup.api/ltp/geteuid01.c winsup/testsuite/winsup.api/ltp/getgid01.c winsup/testsuite/winsup.api/ltp/getgid02.c winsup/testsuite/winsup.api/ltp/getgid03.c winsup/testsuite/winsup.api/ltp/getgroups01.c winsup/testsuite/winsup.api/ltp/getgroups02.c winsup/testsuite/winsup.api/ltp/gethostid01.c winsup/testsuite/winsup.api/ltp/gethostname01.c winsup/testsuite/winsup.api/ltp/getpgid01.c winsup/testsuite/winsup.api/ltp/getpgid02.c winsup/testsuite/winsup.api/ltp/getpgrp01.c winsup/testsuite/winsup.api/ltp/getpid01.c winsup/testsuite/winsup.api/ltp/getpid02.c winsup/testsuite/winsup.api/ltp/getppid01.c winsup/testsuite/winsup.api/ltp/getppid02.c winsup/testsuite/winsup.api/ltp/getuid01.c winsup/testsuite/winsup.api/ltp/getuid02.c winsup/testsuite/winsup.api/ltp/getuid03.c winsup/testsuite/winsup.api/ltp/kill01.c winsup/testsuite/winsup.api/ltp/kill02.c winsup/testsuite/winsup.api/ltp/kill03.c winsup/testsuite/winsup.api/ltp/kill04.c winsup/testsuite/winsup.api/ltp/kill09.c winsup/testsuite/winsup.api/ltp/link02.c winsup/testsuite/winsup.api/ltp/link03.c winsup/testsuite/winsup.api/ltp/link04.c winsup/testsuite/winsup.api/ltp/link05.c winsup/testsuite/winsup.api/ltp/lseek01.c winsup/testsuite/winsup.api/ltp/lseek02.c winsup/testsuite/winsup.api/ltp/lseek03.c winsup/testsuite/winsup.api/ltp/lseek04.c winsup/testsuite/winsup.api/ltp/lseek05.c winsup/testsuite/winsup.api/ltp/lseek06.c winsup/testsuite/winsup.api/ltp/lseek07.c winsup/testsuite/winsup.api/ltp/lseek08.c winsup/testsuite/winsup.api/ltp/lseek09.c winsup/testsuite/winsup.api/ltp/lseek10.c winsup/testsuite/winsup.api/ltp/lstat02.c winsup/testsuite/winsup.api/ltp/mkdir01.c winsup/testsuite/winsup.api/ltp/mkdir08.c winsup/testsuite/winsup.api/ltp/mknod01.c winsup/testsuite/winsup.api/ltp/mmap001.c winsup/testsuite/winsup.api/ltp/mmap02.c winsup/testsuite/winsup.api/ltp/mmap03.c winsup/testsuite/winsup.api/ltp/mmap04.c winsup/testsuite/winsup.api/ltp/mmap05.c winsup/testsuite/winsup.api/ltp/mmap06.c winsup/testsuite/winsup.api/ltp/mmap07.c winsup/testsuite/winsup.api/ltp/mmap08.c winsup/testsuite/winsup.api/ltp/munmap01.c winsup/testsuite/winsup.api/ltp/munmap02.c winsup/testsuite/winsup.api/ltp/nice05.c winsup/testsuite/winsup.api/ltp/open02.c winsup/testsuite/winsup.api/ltp/open03.c winsup/testsuite/winsup.api/ltp/pathconf01.c winsup/testsuite/winsup.api/ltp/pause01.c winsup/testsuite/winsup.api/ltp/pipe01.c winsup/testsuite/winsup.api/ltp/pipe08.c winsup/testsuite/winsup.api/ltp/pipe09.c winsup/testsuite/winsup.api/ltp/pipe10.c winsup/testsuite/winsup.api/ltp/pipe11.c winsup/testsuite/winsup.api/ltp/poll01.c winsup/testsuite/winsup.api/ltp/read01.c winsup/testsuite/winsup.api/ltp/read04.c winsup/testsuite/winsup.api/ltp/readdir01.c winsup/testsuite/winsup.api/ltp/readlink01.c winsup/testsuite/winsup.api/ltp/readlink02.c winsup/testsuite/winsup.api/ltp/readlink03.c winsup/testsuite/winsup.api/ltp/rename01.c winsup/testsuite/winsup.api/ltp/rename02.c winsup/testsuite/winsup.api/ltp/rename08.c winsup/testsuite/winsup.api/ltp/rename10.c winsup/testsuite/winsup.api/ltp/rmdir01.c winsup/testsuite/winsup.api/ltp/rmdir04.c winsup/testsuite/winsup.api/ltp/rmdir05.c winsup/testsuite/winsup.api/ltp/sbrk01.c winsup/testsuite/winsup.api/ltp/select01.c winsup/testsuite/winsup.api/ltp/select02.c winsup/testsuite/winsup.api/ltp/select03.c winsup/testsuite/winsup.api/ltp/setgid01.c winsup/testsuite/winsup.api/ltp/setgroups01.c winsup/testsuite/winsup.api/ltp/setpgid01.c winsup/testsuite/winsup.api/ltp/setregid01.c winsup/testsuite/winsup.api/ltp/setreuid01.c winsup/testsuite/winsup.api/ltp/setuid01.c winsup/testsuite/winsup.api/ltp/setuid02.c winsup/testsuite/winsup.api/ltp/signal03.c winsup/testsuite/winsup.api/ltp/stat01.c winsup/testsuite/winsup.api/ltp/stat02.c winsup/testsuite/winsup.api/ltp/stat03.c winsup/testsuite/winsup.api/ltp/stat05.c winsup/testsuite/winsup.api/ltp/stat06.c winsup/testsuite/winsup.api/ltp/symlink01.c winsup/testsuite/winsup.api/ltp/symlink02.c winsup/testsuite/winsup.api/ltp/symlink03.c winsup/testsuite/winsup.api/ltp/symlink04.c winsup/testsuite/winsup.api/ltp/symlink05.c winsup/testsuite/winsup.api/ltp/sync01.c winsup/testsuite/winsup.api/ltp/sync02.c winsup/testsuite/winsup.api/ltp/time01.c winsup/testsuite/winsup.api/ltp/time02.c winsup/testsuite/winsup.api/ltp/times01.c winsup/testsuite/winsup.api/ltp/times02.c winsup/testsuite/winsup.api/ltp/times03.c winsup/testsuite/winsup.api/ltp/truncate01.c winsup/testsuite/winsup.api/ltp/truncate02.c winsup/testsuite/winsup.api/ltp/ulimit01.c winsup/testsuite/winsup.api/ltp/umask01.c winsup/testsuite/winsup.api/ltp/umask02.c winsup/testsuite/winsup.api/ltp/umask03.c winsup/testsuite/winsup.api/ltp/uname01.c winsup/testsuite/winsup.api/ltp/unlink05.c winsup/testsuite/winsup.api/ltp/unlink06.c winsup/testsuite/winsup.api/ltp/unlink07.c winsup/testsuite/winsup.api/ltp/unlink08.c winsup/testsuite/winsup.api/ltp/vfork01.c winsup/testsuite/winsup.api/ltp/wait02.c winsup/testsuite/winsup.api/ltp/wait401.c winsup/testsuite/winsup.api/ltp/wait402.c winsup/testsuite/winsup.api/ltp/write01.c winsup/testsuite/winsup.api/ltp/write02.c winsup/testsuite/winsup.api/ltp/write03.c winsup/testsuite/winsup.api/mmaptest01.c winsup/testsuite/winsup.api/mmaptest02.c winsup/testsuite/winsup.api/mmaptest03.c winsup/testsuite/winsup.api/mmaptest04.c winsup/testsuite/winsup.api/msgtest.c winsup/testsuite/winsup.api/nullgetcwd.c winsup/testsuite/winsup.api/pthread/cancel1.c winsup/testsuite/winsup.api/pthread/cancel10.c winsup/testsuite/winsup.api/pthread/cancel11.c winsup/testsuite/winsup.api/pthread/cancel12.c winsup/testsuite/winsup.api/pthread/cancel2.c winsup/testsuite/winsup.api/pthread/cancel3.c winsup/testsuite/winsup.api/pthread/cancel4.c winsup/testsuite/winsup.api/pthread/cancel5.c winsup/testsuite/winsup.api/pthread/cancel6.c winsup/testsuite/winsup.api/pthread/cancel7.c winsup/testsuite/winsup.api/pthread/cancel8.c winsup/testsuite/winsup.api/pthread/cancel9.c winsup/testsuite/winsup.api/pthread/cleanup2.c winsup/testsuite/winsup.api/pthread/cleanup3.c winsup/testsuite/winsup.api/pthread/condvar1.c winsup/testsuite/winsup.api/pthread/condvar2.c winsup/testsuite/winsup.api/pthread/condvar2_1.c winsup/testsuite/winsup.api/pthread/condvar3.c winsup/testsuite/winsup.api/pthread/condvar3_1.c winsup/testsuite/winsup.api/pthread/condvar3_2.c winsup/testsuite/winsup.api/pthread/condvar3_3.c winsup/testsuite/winsup.api/pthread/condvar4.c winsup/testsuite/winsup.api/pthread/condvar5.c winsup/testsuite/winsup.api/pthread/condvar6.c winsup/testsuite/winsup.api/pthread/condvar7.c winsup/testsuite/winsup.api/pthread/condvar8.c winsup/testsuite/winsup.api/pthread/condvar9.c winsup/testsuite/winsup.api/pthread/count1.c winsup/testsuite/winsup.api/pthread/create1.c winsup/testsuite/winsup.api/pthread/create2.c winsup/testsuite/winsup.api/pthread/equal1.c winsup/testsuite/winsup.api/pthread/exit1.c winsup/testsuite/winsup.api/pthread/exit2.c winsup/testsuite/winsup.api/pthread/exit3.c winsup/testsuite/winsup.api/pthread/inherit1.c winsup/testsuite/winsup.api/pthread/join0.c winsup/testsuite/winsup.api/pthread/join1.c winsup/testsuite/winsup.api/pthread/join2.c winsup/testsuite/winsup.api/pthread/mainthreadexits.c winsup/testsuite/winsup.api/pthread/mutex1.c winsup/testsuite/winsup.api/pthread/mutex1d.c winsup/testsuite/winsup.api/pthread/mutex1e.c winsup/testsuite/winsup.api/pthread/mutex1n.c winsup/testsuite/winsup.api/pthread/mutex1r.c winsup/testsuite/winsup.api/pthread/mutex2.c winsup/testsuite/winsup.api/pthread/mutex3.c winsup/testsuite/winsup.api/pthread/mutex4.c winsup/testsuite/winsup.api/pthread/mutex5.c winsup/testsuite/winsup.api/pthread/mutex6d.c winsup/testsuite/winsup.api/pthread/mutex6e.c winsup/testsuite/winsup.api/pthread/mutex6n.c winsup/testsuite/winsup.api/pthread/mutex6r.c winsup/testsuite/winsup.api/pthread/mutex7.c winsup/testsuite/winsup.api/pthread/mutex7d.c winsup/testsuite/winsup.api/pthread/mutex7e.c winsup/testsuite/winsup.api/pthread/mutex7n.c winsup/testsuite/winsup.api/pthread/mutex7r.c winsup/testsuite/winsup.api/pthread/mutex8e.c winsup/testsuite/winsup.api/pthread/mutex8n.c winsup/testsuite/winsup.api/pthread/mutex8r.c winsup/testsuite/winsup.api/pthread/once1.c winsup/testsuite/winsup.api/pthread/priority1.c winsup/testsuite/winsup.api/pthread/priority2.c winsup/testsuite/winsup.api/pthread/rwlock1.c winsup/testsuite/winsup.api/pthread/rwlock2.c winsup/testsuite/winsup.api/pthread/rwlock3.c winsup/testsuite/winsup.api/pthread/rwlock4.c winsup/testsuite/winsup.api/pthread/rwlock5.c winsup/testsuite/winsup.api/pthread/rwlock6.c winsup/testsuite/winsup.api/pthread/rwlock7.c winsup/testsuite/winsup.api/pthread/self1.c winsup/testsuite/winsup.api/pthread/self2.c winsup/testsuite/winsup.api/pthread/test.h winsup/testsuite/winsup.api/pthread/threadidafterfork.c winsup/testsuite/winsup.api/pthread/tsd1.c winsup/testsuite/winsup.api/resethand.c winsup/testsuite/winsup.api/samples/sample-fail.c winsup/testsuite/winsup.api/samples/sample-miscompile.c winsup/testsuite/winsup.api/samples/sample-pass.c winsup/testsuite/winsup.api/semtest.c winsup/testsuite/winsup.api/shmtest.c winsup/testsuite/winsup.api/sigchld.c winsup/testsuite/winsup.api/signal-into-win32-api.c winsup/testsuite/winsup.api/systemcall.c winsup/testsuite/winsup.api/user_malloc.c winsup/testsuite/winsup.api/waitpid.c winsup/testsuite/winsup.api/winsup.exp winsup/utils/COPYING.dumper winsup/utils/ChangeLog winsup/utils/ChangeLog-2000 winsup/utils/Makefile.in winsup/utils/aclocal.m4 winsup/utils/bloda.cc winsup/utils/configure winsup/utils/configure.in winsup/utils/cygcheck.cc winsup/utils/cygpath.cc winsup/utils/cygwin-console-helper.cc winsup/utils/dump_setup.cc winsup/utils/dumper.cc winsup/utils/dumper.h winsup/utils/getfacl.c winsup/utils/kill.cc winsup/utils/ldd.cc winsup/utils/ldh.cc winsup/utils/loadlib.h winsup/utils/locale.cc winsup/utils/mingw winsup/utils/mkgroup.c winsup/utils/mkpasswd.c winsup/utils/module_info.cc winsup/utils/mount.cc winsup/utils/parse_pe.cc winsup/utils/passwd.c winsup/utils/path.cc winsup/utils/path.h winsup/utils/ps.cc winsup/utils/regtool.cc winsup/utils/setfacl.c winsup/utils/setmetamode.c winsup/utils/ssp.c winsup/utils/ssp.txt winsup/utils/strace.cc winsup/utils/testsuite.cc winsup/utils/testsuite.h winsup/utils/umount.cc winsup/utils/utils.sgml winsup/utils/wide_path.h winsup/w32api/CONTRIBUTIONS winsup/w32api/ChangeLog winsup/w32api/Makefile.in winsup/w32api/README.w32api winsup/w32api/TODO winsup/w32api/aclocal.m4 winsup/w32api/config.guess winsup/w32api/config.sub winsup/w32api/configure winsup/w32api/configure.in winsup/w32api/include/GL/gl.h winsup/w32api/include/GL/glext.h winsup/w32api/include/GL/glu.h winsup/w32api/include/accctrl.h winsup/w32api/include/aclapi.h winsup/w32api/include/aclui.h winsup/w32api/include/adsprop.h winsup/w32api/include/afxres.h winsup/w32api/include/amaudio.h winsup/w32api/include/amvideo.h winsup/w32api/include/audevcod.h winsup/w32api/include/aviriff.h winsup/w32api/include/aygshell.h winsup/w32api/include/basetsd.h winsup/w32api/include/basetyps.h winsup/w32api/include/bdatypes.h winsup/w32api/include/cderr.h winsup/w32api/include/cguid.h winsup/w32api/include/cmnquery.h winsup/w32api/include/comcat.h winsup/w32api/include/commctrl.h winsup/w32api/include/commdlg.h winsup/w32api/include/control.h winsup/w32api/include/cpl.h winsup/w32api/include/cplext.h winsup/w32api/include/custcntl.h winsup/w32api/include/dbt.h winsup/w32api/include/dde.h winsup/w32api/include/ddeml.h winsup/w32api/include/ddk/atm.h winsup/w32api/include/ddk/batclass.h winsup/w32api/include/ddk/cfg.h winsup/w32api/include/ddk/cfgmgr32.h winsup/w32api/include/ddk/d4drvif.h winsup/w32api/include/ddk/d4iface.h winsup/w32api/include/ddk/ddkmapi.h winsup/w32api/include/ddk/hidclass.h winsup/w32api/include/ddk/hidpi.h winsup/w32api/include/ddk/hidsdi.h winsup/w32api/include/ddk/hidusage.h winsup/w32api/include/ddk/kbdmou.h winsup/w32api/include/ddk/mcd.h winsup/w32api/include/ddk/miniport.h winsup/w32api/include/ddk/minitape.h winsup/w32api/include/ddk/mountdev.h winsup/w32api/include/ddk/mountmgr.h winsup/w32api/include/ddk/ndis.h winsup/w32api/include/ddk/ndisguid.h winsup/w32api/include/ddk/ndistapi.h winsup/w32api/include/ddk/ndiswan.h winsup/w32api/include/ddk/netevent.h winsup/w32api/include/ddk/netpnp.h winsup/w32api/include/ddk/newdev.h winsup/w32api/include/ddk/ntapi.h winsup/w32api/include/ddk/ntdd8042.h winsup/w32api/include/ddk/ntddbeep.h winsup/w32api/include/ddk/ntddcdrm.h winsup/w32api/include/ddk/ntddcdvd.h winsup/w32api/include/ddk/ntddchgr.h winsup/w32api/include/ddk/ntdddisk.h winsup/w32api/include/ddk/ntddk.h winsup/w32api/include/ddk/ntddkbd.h winsup/w32api/include/ddk/ntddmou.h winsup/w32api/include/ddk/ntddndis.h winsup/w32api/include/ddk/ntddpar.h winsup/w32api/include/ddk/ntddpcm.h winsup/w32api/include/ddk/ntddscsi.h winsup/w32api/include/ddk/ntddser.h winsup/w32api/include/ddk/ntddstor.h winsup/w32api/include/ddk/ntddtape.h winsup/w32api/include/ddk/ntddtdi.h winsup/w32api/include/ddk/ntddvdeo.h winsup/w32api/include/ddk/ntddvol.h winsup/w32api/include/ddk/ntifs.h winsup/w32api/include/ddk/ntpoapi.h winsup/w32api/include/ddk/ntstatus.h winsup/w32api/include/ddk/parallel.h winsup/w32api/include/ddk/pfhook.h winsup/w32api/include/ddk/poclass.h winsup/w32api/include/ddk/scsi.h winsup/w32api/include/ddk/scsiscan.h winsup/w32api/include/ddk/scsiwmi.h winsup/w32api/include/ddk/smbus.h winsup/w32api/include/ddk/srb.h winsup/w32api/include/ddk/storport.h winsup/w32api/include/ddk/tdi.h winsup/w32api/include/ddk/tdiinfo.h winsup/w32api/include/ddk/tdikrnl.h winsup/w32api/include/ddk/tdistat.h winsup/w32api/include/ddk/tvout.h winsup/w32api/include/ddk/upssvc.h winsup/w32api/include/ddk/usb.h winsup/w32api/include/ddk/usb100.h winsup/w32api/include/ddk/usbcamdi.h winsup/w32api/include/ddk/usbdi.h winsup/w32api/include/ddk/usbioctl.h winsup/w32api/include/ddk/usbiodef.h winsup/w32api/include/ddk/usbscan.h winsup/w32api/include/ddk/usbuser.h winsup/w32api/include/ddk/video.h winsup/w32api/include/ddk/videoagp.h winsup/w32api/include/ddk/win2k.h winsup/w32api/include/ddk/winddi.h winsup/w32api/include/ddk/winddk.h winsup/w32api/include/ddk/winnt4.h winsup/w32api/include/ddk/winxp.h winsup/w32api/include/ddk/ws2san.h winsup/w32api/include/ddk/xfilter.h winsup/w32api/include/devguid.h winsup/w32api/include/dhcpcsdk.h winsup/w32api/include/directx/d3d9.h winsup/w32api/include/directx/d3d9caps.h winsup/w32api/include/directx/d3d9types.h winsup/w32api/include/directx/dxerr8.h winsup/w32api/include/directx/dxerr9.h winsup/w32api/include/dlgs.h winsup/w32api/include/docobj.h winsup/w32api/include/dsadmin.h winsup/w32api/include/dsclient.h winsup/w32api/include/dsgetdc.h winsup/w32api/include/dshow.h winsup/w32api/include/dsquery.h winsup/w32api/include/dsrole.h winsup/w32api/include/dvdevcod.h winsup/w32api/include/dvdmedia.h winsup/w32api/include/edevdefs.h winsup/w32api/include/errorrep.h winsup/w32api/include/errors.h winsup/w32api/include/evcode.h winsup/w32api/include/exdisp.h winsup/w32api/include/exdispid.h winsup/w32api/include/fltdefs.h winsup/w32api/include/gdiplus.h winsup/w32api/include/gdiplus/gdiplus.h winsup/w32api/include/gdiplus/gdiplusbase.h winsup/w32api/include/gdiplus/gdiplusbrush.h winsup/w32api/include/gdiplus/gdipluscolor.h winsup/w32api/include/gdiplus/gdipluscolormatrix.h winsup/w32api/include/gdiplus/gdipluseffects.h winsup/w32api/include/gdiplus/gdiplusenums.h winsup/w32api/include/gdiplus/gdiplusflat.h winsup/w32api/include/gdiplus/gdiplusgpstubs.h winsup/w32api/include/gdiplus/gdiplusgraphics.h winsup/w32api/include/gdiplus/gdiplusheaders.h winsup/w32api/include/gdiplus/gdiplusimageattributes.h winsup/w32api/include/gdiplus/gdiplusimagecodec.h winsup/w32api/include/gdiplus/gdiplusimaging.h winsup/w32api/include/gdiplus/gdiplusimpl.h winsup/w32api/include/gdiplus/gdiplusinit.h winsup/w32api/include/gdiplus/gdipluslinecaps.h winsup/w32api/include/gdiplus/gdiplusmatrix.h winsup/w32api/include/gdiplus/gdiplusmem.h winsup/w32api/include/gdiplus/gdiplusmetafile.h winsup/w32api/include/gdiplus/gdiplusmetaheader.h winsup/w32api/include/gdiplus/gdipluspath.h winsup/w32api/include/gdiplus/gdipluspen.h winsup/w32api/include/gdiplus/gdipluspixelformats.h winsup/w32api/include/gdiplus/gdiplusstringformat.h winsup/w32api/include/gdiplus/gdiplustypes.h winsup/w32api/include/httpext.h winsup/w32api/include/icm.h winsup/w32api/include/idispids.h winsup/w32api/include/il21dec.h winsup/w32api/include/imagehlp.h winsup/w32api/include/imm.h winsup/w32api/include/initguid.h winsup/w32api/include/intshcut.h winsup/w32api/include/ipexport.h winsup/w32api/include/iphlpapi.h winsup/w32api/include/ipifcons.h winsup/w32api/include/ipinfoid.h winsup/w32api/include/iprtrmib.h winsup/w32api/include/iptypes.h winsup/w32api/include/ipxconst.h winsup/w32api/include/ipxrtdef.h winsup/w32api/include/ipxtfflt.h winsup/w32api/include/isguids.h winsup/w32api/include/ks.h winsup/w32api/include/ksmedia.h winsup/w32api/include/largeint.h winsup/w32api/include/lm.h winsup/w32api/include/lmaccess.h winsup/w32api/include/lmalert.h winsup/w32api/include/lmapibuf.h winsup/w32api/include/lmat.h winsup/w32api/include/lmaudit.h winsup/w32api/include/lmbrowsr.h winsup/w32api/include/lmchdev.h winsup/w32api/include/lmconfig.h winsup/w32api/include/lmcons.h winsup/w32api/include/lmerr.h winsup/w32api/include/lmerrlog.h winsup/w32api/include/lmmsg.h winsup/w32api/include/lmremutl.h winsup/w32api/include/lmrepl.h winsup/w32api/include/lmserver.h winsup/w32api/include/lmshare.h winsup/w32api/include/lmsname.h winsup/w32api/include/lmstats.h winsup/w32api/include/lmsvc.h winsup/w32api/include/lmuse.h winsup/w32api/include/lmuseflg.h winsup/w32api/include/lmwksta.h winsup/w32api/include/lzexpand.h winsup/w32api/include/mapi.h winsup/w32api/include/mciavi.h winsup/w32api/include/mcx.h winsup/w32api/include/mgm.h winsup/w32api/include/mgmtapi.h winsup/w32api/include/mlang.h winsup/w32api/include/mmreg.h winsup/w32api/include/mmsystem.h winsup/w32api/include/mpegtype.h winsup/w32api/include/mprapi.h winsup/w32api/include/mq.h winsup/w32api/include/msacm.h winsup/w32api/include/mshtml.h winsup/w32api/include/mswsock.h winsup/w32api/include/nb30.h winsup/w32api/include/nddeapi.h winsup/w32api/include/nspapi.h winsup/w32api/include/ntdef.h winsup/w32api/include/ntdll.h winsup/w32api/include/ntdsapi.h winsup/w32api/include/ntdsbcli.h winsup/w32api/include/ntldap.h winsup/w32api/include/ntsecapi.h winsup/w32api/include/ntsecpkg.h winsup/w32api/include/oaidl.h winsup/w32api/include/objbase.h winsup/w32api/include/objfwd.h winsup/w32api/include/objidl.h winsup/w32api/include/objsafe.h winsup/w32api/include/objsel.h winsup/w32api/include/ocidl.h winsup/w32api/include/odbcinst.h winsup/w32api/include/ole.h winsup/w32api/include/ole2.h winsup/w32api/include/ole2ver.h winsup/w32api/include/oleacc.h winsup/w32api/include/oleauto.h winsup/w32api/include/olectl.h winsup/w32api/include/olectlid.h winsup/w32api/include/oledlg.h winsup/w32api/include/oleidl.h winsup/w32api/include/pbt.h winsup/w32api/include/poppack.h winsup/w32api/include/powrprof.h winsup/w32api/include/prsht.h winsup/w32api/include/psapi.h winsup/w32api/include/pshpack1.h winsup/w32api/include/pshpack2.h winsup/w32api/include/pshpack4.h winsup/w32api/include/pshpack8.h winsup/w32api/include/qedit.h winsup/w32api/include/rapi.h winsup/w32api/include/ras.h winsup/w32api/include/rasdlg.h winsup/w32api/include/raserror.h winsup/w32api/include/rassapi.h winsup/w32api/include/reason.h winsup/w32api/include/regstr.h winsup/w32api/include/richedit.h winsup/w32api/include/richole.h winsup/w32api/include/routprot.h winsup/w32api/include/rpc.h winsup/w32api/include/rpcdce.h winsup/w32api/include/rpcdce2.h winsup/w32api/include/rpcdcep.h winsup/w32api/include/rpcndr.h winsup/w32api/include/rpcnsi.h winsup/w32api/include/rpcnsip.h winsup/w32api/include/rpcnterr.h winsup/w32api/include/rpcproxy.h winsup/w32api/include/rtutils.h winsup/w32api/include/schannel.h winsup/w32api/include/schnlsp.h winsup/w32api/include/scrnsave.h winsup/w32api/include/sddl.h winsup/w32api/include/secext.h winsup/w32api/include/security.h winsup/w32api/include/servprov.h winsup/w32api/include/setupapi.h winsup/w32api/include/shellapi.h winsup/w32api/include/shldisp.h winsup/w32api/include/shlguid.h winsup/w32api/include/shlobj.h winsup/w32api/include/shlwapi.h winsup/w32api/include/snmp.h winsup/w32api/include/specstrings.h winsup/w32api/include/sql.h winsup/w32api/include/sqlext.h winsup/w32api/include/sqltypes.h winsup/w32api/include/sqlucode.h winsup/w32api/include/sspi.h winsup/w32api/include/stm.h winsup/w32api/include/strmif.h winsup/w32api/include/subauth.h winsup/w32api/include/svcguid.h winsup/w32api/include/tlhelp32.h winsup/w32api/include/tmschema.h winsup/w32api/include/unknwn.h winsup/w32api/include/userenv.h winsup/w32api/include/usp10.h winsup/w32api/include/uxtheme.h winsup/w32api/include/vfw.h winsup/w32api/include/vidcap.h winsup/w32api/include/vmr9.h winsup/w32api/include/vptype.h winsup/w32api/include/w32api.h winsup/w32api/include/winable.h winsup/w32api/include/winbase.h winsup/w32api/include/winber.h winsup/w32api/include/wincon.h winsup/w32api/include/wincrypt.h winsup/w32api/include/windef.h winsup/w32api/include/windns.h winsup/w32api/include/windows.h winsup/w32api/include/windowsx.h winsup/w32api/include/winerror.h winsup/w32api/include/wingdi.h winsup/w32api/include/wininet.h winsup/w32api/include/winioctl.h winsup/w32api/include/winldap.h winsup/w32api/include/winnetwk.h winsup/w32api/include/winnls.h winsup/w32api/include/winnt.h winsup/w32api/include/winperf.h winsup/w32api/include/winreg.h winsup/w32api/include/winresrc.h winsup/w32api/include/winsnmp.h winsup/w32api/include/winsock.h winsup/w32api/include/winsock2.h winsup/w32api/include/winspool.h winsup/w32api/include/winsvc.h winsup/w32api/include/winuser.h winsup/w32api/include/winver.h winsup/w32api/include/ws2spi.h winsup/w32api/include/ws2tcpip.h winsup/w32api/include/wsahelp.h winsup/w32api/include/wsipx.h winsup/w32api/include/wsnetbs.h winsup/w32api/include/wtsapi32.h winsup/w32api/include/wtypes.h winsup/w32api/include/xprtdefs.h winsup/w32api/include/zmouse.h winsup/w32api/install-sh winsup/w32api/lib/CheckConflicts.sh winsup/w32api/lib/Makefile.in winsup/w32api/lib/aclui.def winsup/w32api/lib/advapi32.def winsup/w32api/lib/ativscp-uuid.c winsup/w32api/lib/avicap32.def winsup/w32api/lib/avifil32.def winsup/w32api/lib/bthprops.def winsup/w32api/lib/cap.def winsup/w32api/lib/cguid-uuid.c winsup/w32api/lib/comcat-uuid.c winsup/w32api/lib/comctl32.def winsup/w32api/lib/comdlg32.def winsup/w32api/lib/crypt32.def winsup/w32api/lib/ctl3d32.def winsup/w32api/lib/ddk/Makefile.in winsup/w32api/lib/ddk/apcups.def winsup/w32api/lib/ddk/cfgmgr32.def winsup/w32api/lib/ddk/dxapi.def winsup/w32api/lib/ddk/hal.def winsup/w32api/lib/ddk/hid.def winsup/w32api/lib/ddk/hidparse.def winsup/w32api/lib/ddk/mcd.def winsup/w32api/lib/ddk/ndis.def winsup/w32api/lib/ddk/newdev.def winsup/w32api/lib/ddk/ntoskrnl.def winsup/w32api/lib/ddk/scsiport.def winsup/w32api/lib/ddk/tdi.def winsup/w32api/lib/ddk/usbcamd.def winsup/w32api/lib/ddk/usbcamd2.def winsup/w32api/lib/ddk/videoprt.def winsup/w32api/lib/ddk/win32k.def winsup/w32api/lib/devguid.c winsup/w32api/lib/dhcpcsvc.def winsup/w32api/lib/directx/Makefile.in winsup/w32api/lib/directx/d3d8.def winsup/w32api/lib/directx/d3d9.def winsup/w32api/lib/directx/d3dim.def winsup/w32api/lib/directx/d3drm.def winsup/w32api/lib/directx/d3dx8d.def winsup/w32api/lib/directx/d3dx9d.def winsup/w32api/lib/directx/d3dxof.def winsup/w32api/lib/directx/ddraw.def winsup/w32api/lib/directx/dinput.def winsup/w32api/lib/directx/dinput8.def winsup/w32api/lib/directx/dinput_joy.c winsup/w32api/lib/directx/dinput_joy2.c winsup/w32api/lib/directx/dinput_kbd.c winsup/w32api/lib/directx/dinput_mouse.c winsup/w32api/lib/directx/dinput_mouse2.c winsup/w32api/lib/directx/dinput_private.h winsup/w32api/lib/directx/dmoguids.c winsup/w32api/lib/directx/dplayx.def winsup/w32api/lib/directx/dpnaddr.def winsup/w32api/lib/directx/dpnet.def winsup/w32api/lib/directx/dpnlobby.def winsup/w32api/lib/directx/dpvoice.def winsup/w32api/lib/directx/dsetup.def winsup/w32api/lib/directx/dsound.def winsup/w32api/lib/directx/dxerr.c winsup/w32api/lib/directx/dxerr8.c winsup/w32api/lib/directx/dxerr8w.c winsup/w32api/lib/directx/dxerr9.c winsup/w32api/lib/directx/dxerr9w.c winsup/w32api/lib/directx/dxguid.c winsup/w32api/lib/directx/ksproxy.def winsup/w32api/lib/directx/ksuser.c winsup/w32api/lib/directx/ksuser.def winsup/w32api/lib/directx/msdmo.def winsup/w32api/lib/directx/strmiids.c winsup/w32api/lib/directx/test.c winsup/w32api/lib/dlcapi.def winsup/w32api/lib/dnsapi.def winsup/w32api/lib/docobj-uuid.c winsup/w32api/lib/exdisp-uuid.c winsup/w32api/lib/extras-uuid.c winsup/w32api/lib/faultrep.def winsup/w32api/lib/gdi32.def winsup/w32api/lib/gdiplus.c winsup/w32api/lib/gdiplus.def winsup/w32api/lib/glaux.def winsup/w32api/lib/glu32.def winsup/w32api/lib/hlguids-uuid.c winsup/w32api/lib/hlink-uuid.c winsup/w32api/lib/icmui.def winsup/w32api/lib/igmpagnt.def winsup/w32api/lib/imagehlp.def winsup/w32api/lib/imm32.def winsup/w32api/lib/iphlpapi.def winsup/w32api/lib/kernel32.def winsup/w32api/lib/largeint.c winsup/w32api/lib/lz32.def winsup/w32api/lib/mapi32.def winsup/w32api/lib/mfcuia32.def winsup/w32api/lib/mgmtapi.def winsup/w32api/lib/mlang-uuid.c winsup/w32api/lib/mpr.def winsup/w32api/lib/mprapi.def winsup/w32api/lib/mqrt.def winsup/w32api/lib/msacm32.def winsup/w32api/lib/mscms.def winsup/w32api/lib/mshtml-uuid.c winsup/w32api/lib/msimg32.def winsup/w32api/lib/msvcp60.def winsup/w32api/lib/msvfw32.def winsup/w32api/lib/mswsock.def winsup/w32api/lib/msxml-uuid.c winsup/w32api/lib/nddeapi.def winsup/w32api/lib/netapi32.def winsup/w32api/lib/ntdll.def winsup/w32api/lib/oaidl-uuid.c winsup/w32api/lib/objidl-uuid.c winsup/w32api/lib/objsafe-uuid.c winsup/w32api/lib/ocidl-uuid.c winsup/w32api/lib/odbc32.def winsup/w32api/lib/odbccp32.def winsup/w32api/lib/ole32.def winsup/w32api/lib/oleacc-uuid.c winsup/w32api/lib/oleacc.def winsup/w32api/lib/oleaut32.def winsup/w32api/lib/olecli32.def winsup/w32api/lib/olectlid-uuid.c winsup/w32api/lib/oledlg.def winsup/w32api/lib/oleidl-uuid.c winsup/w32api/lib/olepro32.def winsup/w32api/lib/olesvr32.def winsup/w32api/lib/opengl32.def winsup/w32api/lib/penwin32.def winsup/w32api/lib/pkpd32.def winsup/w32api/lib/power-uuid.c winsup/w32api/lib/powrprof.def winsup/w32api/lib/psapi.def winsup/w32api/lib/quartz.def winsup/w32api/lib/rapi.def winsup/w32api/lib/rasapi32.def winsup/w32api/lib/rasdlg.def winsup/w32api/lib/res.rc winsup/w32api/lib/rpcdce4.def winsup/w32api/lib/rpcns4.def winsup/w32api/lib/rpcrt4.def winsup/w32api/lib/rtm.def winsup/w32api/lib/rtutils.def winsup/w32api/lib/scrnsave.c winsup/w32api/lib/secur32.def winsup/w32api/lib/servprov-uuid.c winsup/w32api/lib/setupapi.def winsup/w32api/lib/shell32.c winsup/w32api/lib/shell32.def winsup/w32api/lib/shfolder.def winsup/w32api/lib/shlwapi.def winsup/w32api/lib/snmpapi.def winsup/w32api/lib/svrapi.def winsup/w32api/lib/tapi32.def winsup/w32api/lib/test.c winsup/w32api/lib/thunk32.def winsup/w32api/lib/unknwn-uuid.c winsup/w32api/lib/url.def winsup/w32api/lib/urlmon-uuid.c winsup/w32api/lib/user32.def winsup/w32api/lib/userenv.def winsup/w32api/lib/usp10.def winsup/w32api/lib/uxtheme.def winsup/w32api/lib/vdmdbg.def winsup/w32api/lib/version.def winsup/w32api/lib/vfw32.mri winsup/w32api/lib/win32spl.def winsup/w32api/lib/wininet.def winsup/w32api/lib/winmm.def winsup/w32api/lib/winspool.def winsup/w32api/lib/winstrm.def winsup/w32api/lib/wldap32.def winsup/w32api/lib/wow32.def winsup/w32api/lib/ws2_32.c winsup/w32api/lib/ws2_32.def winsup/w32api/lib/wsnmp32.def winsup/w32api/lib/wsock32.def winsup/w32api/lib/wst.def winsup/w32api/lib/wtsapi32.def
Diffstat (limited to 'winsup/mingw/mingwex/stdio/pformat.c')
-rw-r--r--winsup/mingw/mingwex/stdio/pformat.c2537
1 files changed, 0 insertions, 2537 deletions
diff --git a/winsup/mingw/mingwex/stdio/pformat.c b/winsup/mingw/mingwex/stdio/pformat.c
deleted file mode 100644
index 55972fc45..000000000
--- a/winsup/mingw/mingwex/stdio/pformat.c
+++ /dev/null
@@ -1,2537 +0,0 @@
-/* FIXME: to be removed one day; for now we explicitly are not
- * prepared to support the POSIX-XSI additions to the C99 standard.
- */
-#undef WITH_XSI_FEATURES
-
-/* pformat.c
- *
- * $Id$
- *
- * Provides a core implementation of the formatting capabilities
- * common to the entire `printf()' family of functions; it conforms
- * generally to C99 and SUSv3/POSIX specifications, with extensions
- * to support Microsoft's non-standard format specifications.
- *
- * Written by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- * This is free software. You may redistribute and/or modify it as you
- * see fit, without restriction of copyright.
- *
- * This software is provided "as is", in the hope that it may be useful,
- * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
- * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
- * time will the author accept any form of liability for any damages,
- * however caused, resulting from the use of this software.
- *
- * The elements of this implementation which deal with the formatting
- * of floating point numbers, (i.e. the `%e', `%E', `%f', `%F', `%g'
- * and `%G' format specifiers, but excluding the hexadecimal floating
- * point `%a' and `%A' specifiers), make use of the `__gdtoa' function
- * written by David M. Gay, and are modelled on his sample code, which
- * has been deployed under its accompanying terms of use:--
- *
- ******************************************************************
- * Copyright (C) 1997, 1999, 2001 Lucent Technologies
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice appear in all
- * copies and that both that the copyright notice and this
- * permission notice and warranty disclaimer appear in supporting
- * documentation, and that the name of Lucent or any of its entities
- * not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission.
- *
- * LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
- * IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- ******************************************************************
- *
- */
-#include <stdio.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <locale.h>
-#include <wchar.h>
-#include <math.h>
-
-/* FIXME: The following belongs in values.h, but current MinGW
- * has nothing useful there! OTOH, values.h is not a standard
- * header, and it's use may be considered obsolete; perhaps it
- * is better to just keep these definitions here.
- */
-#ifndef _VALUES_H
-/*
- * values.h
- *
- */
-#define _VALUES_H
-
-#include <limits.h>
-
-#define _TYPEBITS(type) (sizeof(type) * CHAR_BIT)
-
-#define LLONGBITS _TYPEBITS(long long)
-
-#endif /* !defined _VALUES_H -- end of file */
-
-#include "pformat.h"
-
-/* Bit-map constants, defining the internal format control
- * states, which propagate through the flags.
- */
-#define PFORMAT_HASHED 0x0800
-#define PFORMAT_LJUSTIFY 0x0400
-#define PFORMAT_ZEROFILL 0x0200
-
-#define PFORMAT_JUSTIFY (PFORMAT_LJUSTIFY | PFORMAT_ZEROFILL)
-#define PFORMAT_IGNORE -1
-
-#define PFORMAT_SIGNED 0x01C0
-#define PFORMAT_POSITIVE 0x0100
-#define PFORMAT_NEGATIVE 0x0080
-#define PFORMAT_ADDSPACE 0x0040
-
-#define PFORMAT_XCASE 0x0020
-
-#define PFORMAT_LDOUBLE 0x0004
-
-/* `%o' format digit extraction mask, and shift count...
- * (These are constant, and do not propagate through the flags).
- */
-#define PFORMAT_OMASK 0x0007
-#define PFORMAT_OSHIFT 0x0003
-
-/* `%x' and `%X' format digit extraction mask, and shift count...
- * (These are constant, and do not propagate through the flags).
- */
-#define PFORMAT_XMASK 0x000F
-#define PFORMAT_XSHIFT 0x0004
-
-/* The radix point character, used in floating point formats, is
- * localised on the basis of the active LC_NUMERIC locale category.
- * It is stored locally, as a `wchar_t' entity, which is converted
- * to a (possibly multibyte) character on output. Initialisation
- * of the stored `wchar_t' entity, together with a record of its
- * effective multibyte character length, is required each time
- * `__pformat()' is entered, (static storage would not be thread
- * safe), but this initialisation is deferred until it is actually
- * needed; on entry, the effective character length is first set to
- * the following value, (and the `wchar_t' entity is zeroed), to
- * indicate that a call of `localeconv()' is needed, to complete
- * the initialisation.
- */
-#define PFORMAT_RPINIT -3
-
-/* The floating point format handlers return the following value
- * for the radix point position index, when the argument value is
- * infinite, or not a number.
- */
-#define PFORMAT_INFNAN -32768
-
-#ifdef _WIN32
-/*
- * The Microsoft standard for printing `%e' format exponents is
- * with a minimum of three digits, unless explicitly set otherwise,
- * by a prior invocation of the `_set_output_format()' function.
- *
- * The following macro allows us to replicate this behaviour.
- */
-# define PFORMAT_MINEXP __pformat_exponent_digits()
- /*
- * However, this feature is unsupported for versions of the
- * MSVC runtime library prior to msvcr80.dll, and by default,
- * MinGW uses an earlier version, (equivalent to msvcr60.dll),
- * for which `_TWO_DIGIT_EXPONENT' will be undefined.
- */
-# ifndef _TWO_DIGIT_EXPONENT
- /*
- * This hack works around the lack of the `_set_output_format()'
- * feature, when supporting versions of the MSVC runtime library
- * prior to msvcr80.dll; it simply enforces Microsoft's original
- * convention, for all cases where the feature is unsupported.
- */
-# define _get_output_format() 0
-# define _TWO_DIGIT_EXPONENT 1
-# endif
-/*
- * Irrespective of the MSVCRT version supported, *we* will add
- * an additional capability, through the following inline function,
- * which will allow the user to choose his own preferred default
- * for `PRINTF_EXPONENT_DIGITS', through the simple expedient
- * of defining it as an environment variable.
- */
-static __inline__ __attribute__((__always_inline__))
-int __pformat_exponent_digits( void )
-{
- char *exponent_digits = getenv( "PRINTF_EXPONENT_DIGITS" );
- return ((exponent_digits != NULL) && ((unsigned)(*exponent_digits - '0') < 3))
- || (_get_output_format() & _TWO_DIGIT_EXPONENT)
- ? 2
- : 3
- ;
-}
-#else
-/*
- * When we don't care to mimic Microsoft's standard behaviour,
- * we adopt the C99/POSIX standard of two digit exponents.
- */
-# define PFORMAT_MINEXP 2
-#endif
-
-typedef union
-{
- /* A data type agnostic representation,
- * for printf arguments of any integral data type...
- */
- signed long __pformat_long_t;
- signed long long __pformat_llong_t;
- unsigned long __pformat_ulong_t;
- unsigned long long __pformat_ullong_t;
- unsigned short __pformat_ushort_t;
- unsigned char __pformat_uchar_t;
- signed short __pformat_short_t;
- signed char __pformat_char_t;
- void * __pformat_ptr_t;
-} __pformat_intarg_t;
-
-typedef enum
-{
- /* Format interpreter state indices...
- * (used to identify the active phase of format string parsing).
- */
- PFORMAT_INIT = 0,
- PFORMAT_SET_WIDTH,
- PFORMAT_GET_PRECISION,
- PFORMAT_SET_PRECISION,
- PFORMAT_END
-} __pformat_state_t;
-
-typedef enum
-{
- /* Argument length classification indices...
- * (used for arguments representing integer data types).
- */
- PFORMAT_LENGTH_INT = 0,
- PFORMAT_LENGTH_SHORT,
- PFORMAT_LENGTH_LONG,
- PFORMAT_LENGTH_LLONG,
- PFORMAT_LENGTH_CHAR
-} __pformat_length_t;
-/*
- * And a macro to map any arbitrary data type to an appropriate
- * matching index, selected from those above; the compiler should
- * collapse this to a simple assignment.
- */
-#define __pformat_arg_length( type ) \
- sizeof( type ) == sizeof( long long ) ? PFORMAT_LENGTH_LLONG : \
- sizeof( type ) == sizeof( long ) ? PFORMAT_LENGTH_LONG : \
- sizeof( type ) == sizeof( short ) ? PFORMAT_LENGTH_SHORT : \
- sizeof( type ) == sizeof( char ) ? PFORMAT_LENGTH_CHAR : \
- /* should never need this default */ PFORMAT_LENGTH_INT
-
-typedef struct
-{
- /* Formatting and output control data...
- * An instance of this control block is created, (on the stack),
- * for each call to `__pformat()', and is passed by reference to
- * each of the output handlers, as required.
- */
- void * dest;
- int flags;
- int width;
- int precision;
- int rplen;
- wchar_t rpchr;
- int count;
- int quota;
- int expmin;
-} __pformat_t;
-
-static
-void __pformat_putc( int c, __pformat_t *stream )
-{
- /* Place a single character into the `__pformat()' output queue,
- * provided any specified output quota has not been exceeded.
- */
- if( (stream->flags & PFORMAT_NOLIMIT) || (stream->quota > stream->count) )
- {
- /* Either there was no quota specified,
- * or the active quota has not yet been reached.
- */
- if( stream->flags & PFORMAT_TO_FILE )
- /*
- * This is single character output to a FILE stream...
- */
- fputc( c, (FILE *)(stream->dest) );
-
- else
- /* Whereas, this is to an internal memory buffer...
- */
- ((char *)(stream->dest))[stream->count] = c;
- }
- ++stream->count;
-}
-
-static
-void __pformat_putchars( const char *s, int count, __pformat_t *stream )
-{
- /* Handler for `%c' and (indirectly) `%s' conversion specifications.
- *
- * Transfer characters from the string buffer at `s', character by
- * character, up to the number of characters specified by `count', or
- * if `precision' has been explicitly set to a value less than `count',
- * stopping after the number of characters specified for `precision',
- * to the `__pformat()' output stream.
- *
- * Characters to be emitted are passed through `__pformat_putc()', to
- * ensure that any specified output quota is honoured.
- */
- if( (stream->precision >= 0) && (count > stream->precision) )
- /*
- * Ensure that the maximum number of characters transferred doesn't
- * exceed any explicitly set `precision' specification.
- */
- count = stream->precision;
-
- /* Establish the width of any field padding required...
- */
- if( stream->width > count )
- /*
- * as the number of spaces equivalent to the number of characters
- * by which those to be emitted is fewer than the field width...
- */
- stream->width -= count;
-
- else
- /* ignoring any width specification which is insufficient.
- */
- stream->width = PFORMAT_IGNORE;
-
- if( (stream->width > 0) && ((stream->flags & PFORMAT_LJUSTIFY) == 0) )
- /*
- * When not doing flush left justification, (i.e. the `-' flag
- * is not set), any residual unreserved field width must appear
- * as blank padding, to the left of the output string.
- */
- while( stream->width-- )
- __pformat_putc( '\x20', stream );
-
- /* Emit the data...
- */
- while( count-- )
- /*
- * copying the requisite number of characters from the input.
- */
- __pformat_putc( *s++, stream );
-
- /* If we still haven't consumed the entire specified field width,
- * we must be doing flush left justification; any residual width
- * must be filled with blanks, to the right of the output value.
- */
- while( stream->width-- > 0 )
- __pformat_putc( '\x20', stream );
-}
-
-static __inline__
-void __pformat_puts( const char *s, __pformat_t *stream )
-{
- /* Handler for `%s' conversion specifications.
- *
- * Transfer a NUL terminated character string, character by character,
- * stopping when the end of the string is encountered, or if `precision'
- * has been explicitly set, when the specified number of characters has
- * been emitted, if that is less than the length of the input string,
- * to the `__pformat()' output stream.
- *
- * This is implemented as a trivial call to `__pformat_putchars()',
- * passing the length of the input string as the character count,
- * (after first verifying that the input pointer is not NULL).
- */
- if( s == NULL ) s = "(null)";
- __pformat_putchars( s, strlen( s ), stream );
-}
-
-static
-void __pformat_wputchars( const wchar_t *s, int count, __pformat_t *stream )
-{
- /* Handler for `%C'(`%lc') and `%S'(`%ls') conversion specifications;
- * (this is a wide character variant of `__pformat_putchars()').
- *
- * Each multibyte character sequence to be emitted is passed, byte
- * by byte, through `__pformat_putc()', to ensure that any specified
- * output quota is honoured.
- */
- char buf[16]; mbstate_t state; int len = wcrtomb( buf, L'\0', &state );
-
- if( (stream->precision >= 0) && (count > stream->precision) )
- /*
- * Ensure that the maximum number of characters transferred doesn't
- * exceed any explicitly set `precision' specification.
- */
- count = stream->precision;
-
- /* Establish the width of any field padding required...
- */
- if( stream->width > count )
- /*
- * as the number of spaces equivalent to the number of characters
- * by which those to be emitted is fewer than the field width...
- */
- stream->width -= count;
-
- else
- /* ignoring any width specification which is insufficient.
- */
- stream->width = PFORMAT_IGNORE;
-
- if( (stream->width > 0) && ((stream->flags & PFORMAT_LJUSTIFY) == 0) )
- /*
- * When not doing flush left justification, (i.e. the `-' flag
- * is not set), any residual unreserved field width must appear
- * as blank padding, to the left of the output string.
- */
- while( stream->width-- )
- __pformat_putc( '\x20', stream );
-
- /* Emit the data, converting each character from the wide
- * to the multibyte domain as we go...
- */
- while( (count-- > 0) && ((len = wcrtomb( buf, *s++, &state )) > 0) )
- {
- char *p = buf;
- while( len-- > 0 )
- __pformat_putc( *p++, stream );
- }
-
- /* If we still haven't consumed the entire specified field width,
- * we must be doing flush left justification; any residual width
- * must be filled with blanks, to the right of the output value.
- */
- while( stream->width-- > 0 )
- __pformat_putc( '\x20', stream );
-}
-
-static __inline__ __attribute__((__always_inline__))
-void __pformat_wcputs( const wchar_t *s, __pformat_t *stream )
-{
- /* Handler for `%S' (`%ls') conversion specifications.
- *
- * Transfer a NUL terminated wide character string, character by
- * character, converting to its equivalent multibyte representation
- * on output, and stopping when the end of the string is encountered,
- * or if `precision' has been explicitly set, when the specified number
- * of characters has been emitted, if that is less than the length of
- * the input string, to the `__pformat()' output stream.
- *
- * This is implemented as a trivial call to `__pformat_wputchars()',
- * passing the length of the input string as the character count,
- * (after first verifying that the input pointer is not NULL).
- */
- if( s == NULL ) s = L"(null)";
- __pformat_wputchars( s, wcslen( s ), stream );
-}
-
-static __inline__
-int __pformat_int_bufsiz( int bias, int size, __pformat_t *stream )
-{
- /* Helper to establish the size of the internal buffer, which
- * is required to queue the ASCII decomposition of an integral
- * data value, prior to transfer to the output stream.
- */
- size = ((size - 1 + LLONGBITS) / size) + bias;
- size += (stream->precision > 0) ? stream->precision : 0;
- return (size > stream->width) ? size : stream->width;
-}
-
-static
-void __pformat_int( __pformat_intarg_t value, __pformat_t *stream )
-{
- /* Handler for `%d', `%i' and `%u' conversion specifications.
- *
- * Transfer the ASCII representation of an integer value parameter,
- * formatted as a decimal number, to the `__pformat()' output queue;
- * output will be truncated, if any specified quota is exceeded.
- */
- char buf[__pformat_int_bufsiz(1, PFORMAT_OSHIFT, stream)];
- char *p = buf; int precision;
-
- if( stream->flags & PFORMAT_NEGATIVE )
- {
- /* The input value might be negative, (i.e. it is a signed value)...
- */
- if( value.__pformat_llong_t < 0LL )
- /*
- * It IS negative, but we want to encode it as unsigned,
- * displayed with a leading minus sign, so convert it...
- */
- value.__pformat_llong_t = -value.__pformat_llong_t;
-
- else
- /* It is unequivocally a POSITIVE value, so turn off the
- * request to prefix it with a minus sign...
- */
- stream->flags &= ~PFORMAT_NEGATIVE;
- }
-
- /* Encode the input value for display...
- */
- while( value.__pformat_ullong_t )
- {
- /* decomposing it into its constituent decimal digits,
- * in order from least significant to most significant, using
- * the local buffer as a LIFO queue in which to store them.
- */
- *p++ = '0' + (unsigned char)(value.__pformat_ullong_t % 10LL);
- value.__pformat_ullong_t /= 10LL;
- }
-
- if( (stream->precision > 0)
- && ((precision = stream->precision - (p - buf)) > 0) )
- /*
- * We have not yet queued sufficient digits to fill the field width
- * specified for minimum `precision'; pad with zeros to achieve this.
- */
- while( precision-- > 0 )
- *p++ = '0';
-
- if( (p == buf) && (stream->precision != 0) )
- /*
- * Input value was zero; make sure we print at least one digit,
- * unless the precision is also explicitly zero.
- */
- *p++ = '0';
-
- if( (stream->width > 0) && ((stream->width -= p - buf) > 0) )
- {
- /* We have now queued sufficient characters to display the input value,
- * at the desired precision, but this will not fill the output field...
- */
- if( stream->flags & PFORMAT_SIGNED )
- /*
- * We will fill one additional space with a sign...
- */
- stream->width--;
-
- if( (stream->precision < 0)
- && ((stream->flags & PFORMAT_JUSTIFY) == PFORMAT_ZEROFILL) )
- /*
- * and the `0' flag is in effect, so we pad the remaining spaces,
- * to the left of the displayed value, with zeros.
- */
- while( stream->width-- > 0 )
- *p++ = '0';
-
- else if( (stream->flags & PFORMAT_LJUSTIFY) == 0 )
- /*
- * the `0' flag is not in effect, and neither is the `-' flag,
- * so we pad to the left of the displayed value with spaces, so that
- * the value appears right justified within the output field.
- */
- while( stream->width-- > 0 )
- __pformat_putc( '\x20', stream );
- }
-
- if( stream->flags & PFORMAT_NEGATIVE )
- /*
- * A negative value needs a sign...
- */
- *p++ = '-';
-
- else if( stream->flags & PFORMAT_POSITIVE )
- /*
- * A positive value may have an optionally displayed sign...
- */
- *p++ = '+';
-
- else if( stream->flags & PFORMAT_ADDSPACE )
- /*
- * Space was reserved for displaying a sign, but none was emitted...
- */
- *p++ = '\x20';
-
- while( p > buf )
- /*
- * Emit the accumulated constituent digits,
- * in order from most significant to least significant...
- */
- __pformat_putc( *--p, stream );
-
- while( stream->width-- > 0 )
- /*
- * The specified output field has not yet been completely filled;
- * the `-' flag must be in effect, resulting in a displayed value which
- * appears left justified within the output field; we must pad the field
- * to the right of the displayed value, by emitting additional spaces,
- * until we reach the rightmost field boundary.
- */
- __pformat_putc( '\x20', stream );
-}
-
-static
-void __pformat_xint( int fmt, __pformat_intarg_t value, __pformat_t *stream )
-{
- /* Handler for `%o', `%p', `%x' and `%X' conversions.
- *
- * These can be implemented using a simple `mask and shift' strategy;
- * set up the mask and shift values appropriate to the conversion format,
- * and allocate a suitably sized local buffer, in which to queue encoded
- * digits of the formatted value, in preparation for output.
- */
- int width;
- int mask = (fmt == 'o') ? PFORMAT_OMASK : PFORMAT_XMASK;
- int shift = (fmt == 'o') ? PFORMAT_OSHIFT : PFORMAT_XSHIFT;
- char buf[__pformat_int_bufsiz(2, shift, stream)];
- char *p = buf;
-
- while( value.__pformat_ullong_t )
- {
- /* Encode the specified non-zero input value as a sequence of digits,
- * in the appropriate `base' encoding and in reverse digit order, each
- * encoded in its printable ASCII form, with no leading zeros, using
- * the local buffer as a LIFO queue in which to store them.
- */
- char *q;
- if( (*(q = p++) = '0' + (value.__pformat_ullong_t & mask)) > '9' )
- *q = (*q + 'A' - '9' - 1) | (fmt & PFORMAT_XCASE);
- value.__pformat_ullong_t >>= shift;
- }
-
- if( p == buf )
- /*
- * Nothing was queued; input value must be zero, which should never be
- * emitted in the `alternative' PFORMAT_HASHED style.
- */
- stream->flags &= ~PFORMAT_HASHED;
-
- if( ((width = stream->precision) > 0) && ((width -= p - buf) > 0) )
- /*
- * We have not yet queued sufficient digits to fill the field width
- * specified for minimum `precision'; pad with zeros to achieve this.
- */
- while( width-- > 0 )
- *p++ = '0';
-
- else if( (fmt == 'o') && (stream->flags & PFORMAT_HASHED) )
- /*
- * The field width specified for minimum `precision' has already
- * been filled, but the `alternative' PFORMAT_HASHED style for octal
- * output requires at least one initial zero; that will not have
- * been queued, so add it now.
- */
- *p++ = '0';
-
- if( (p == buf) && (stream->precision != 0) )
- /*
- * Still nothing queued for output, but the `precision' has not been
- * explicitly specified as zero, (which is necessary if no output for
- * an input value of zero is desired); queue exactly one zero digit.
- */
- *p++ = '0';
-
- if( stream->width > (width = p - buf) )
- /*
- * Specified field width exceeds the minimum required...
- * Adjust so that we retain only the additional padding width.
- */
- stream->width -= width;
-
- else
- /* Ignore any width specification which is insufficient.
- */
- stream->width = PFORMAT_IGNORE;
-
- if( ((width = stream->width) > 0)
- && (fmt != 'o') && (stream->flags & PFORMAT_HASHED) )
- /*
- * For `%#x' or `%#X' formats, (which have the `#' flag set),
- * further reduce the padding width to accommodate the radix
- * indicating prefix.
- */
- width -= 2;
-
- if( (width > 0) && (stream->precision < 0)
- && ((stream->flags & PFORMAT_JUSTIFY) == PFORMAT_ZEROFILL) )
- /*
- * When the `0' flag is set, and not overridden by the `-' flag,
- * or by a specified precision, add sufficient leading zeros to
- * consume the remaining field width.
- */
- while( width-- > 0 )
- *p++ = '0';
-
- if( (fmt != 'o') && (stream->flags & PFORMAT_HASHED) )
- {
- /* For formats other than octal, the PFORMAT_HASHED output style
- * requires the addition of a two character radix indicator, as a
- * prefix to the actual encoded numeric value.
- */
- *p++ = fmt;
- *p++ = '0';
- }
-
- if( (width > 0) && ((stream->flags & PFORMAT_LJUSTIFY) == 0) )
- /*
- * When not doing flush left justification, (i.e. the `-' flag
- * is not set), any residual unreserved field width must appear
- * as blank padding, to the left of the output value.
- */
- while( width-- > 0 )
- __pformat_putc( '\x20', stream );
-
- while( p > buf )
- /*
- * Move the queued output from the local buffer to the ultimate
- * destination, in LIFO order.
- */
- __pformat_putc( *--p, stream );
-
- /* If we still haven't consumed the entire specified field width,
- * we must be doing flush left justification; any residual width
- * must be filled with blanks, to the right of the output value.
- */
- while( width-- > 0 )
- __pformat_putc( '\x20', stream );
-}
-
-typedef union
-{
- /* A multifaceted representation of an IEEE extended precision,
- * (80-bit), floating point number, facilitating access to its
- * component parts.
- */
- double __pformat_fpreg_double_t;
- long double __pformat_fpreg_ldouble_t;
- struct
- { unsigned long long __pformat_fpreg_mantissa;
- signed short __pformat_fpreg_exponent;
- };
- unsigned short __pformat_fpreg_bitmap[5];
- unsigned long __pformat_fpreg_bits;
-} __pformat_fpreg_t;
-
-#ifdef _WIN32
-/* TODO: make this unconditional in final release...
- * (see note at head of associated `#else' block.
- */
-#include "gdtoa.h"
-
-static
-char *__pformat_cvt( int mode, __pformat_fpreg_t x, int nd, int *dp, int *sign )
-{
- /* Helper function, derived from David M. Gay's `g_xfmt()', calling
- * his `__gdtoa()' function in a manner to provide extended precision
- * replacements for `ecvt()' and `fcvt()'.
- */
- int k; unsigned int e = 0; char *ep;
- static FPI fpi = { 64, 1-16383-64+1, 32766-16383-64+1, FPI_Round_near, 0 };
-
- /* Classify the argument into an appropriate `__gdtoa()' category...
- */
- if( (k = __fpclassifyl( x.__pformat_fpreg_ldouble_t )) & FP_NAN )
- /*
- * identifying infinities or not-a-number...
- */
- k = (k & FP_NORMAL) ? STRTOG_Infinite : STRTOG_NaN;
-
- else if( k & FP_NORMAL )
- {
- /* normal and near-zero `denormals'...
- */
- if( k & FP_ZERO )
- {
- /* with appropriate exponent adjustment for a `denormal'...
- */
- k = STRTOG_Denormal;
- e = 1 - 0x3FFF - 63;
- }
- else
- {
- /* or with `normal' exponent adjustment...
- */
- k = STRTOG_Normal;
- e = (x.__pformat_fpreg_exponent & 0x7FFF) - 0x3FFF - 63;
- }
- }
-
- else
- /* or, if none of the above, it's a zero, (positive or negative).
- */
- k = STRTOG_Zero;
-
- /* Check for negative values, always treating NaN as unsigned...
- * (return value is zero for positive/unsigned; non-zero for negative).
- */
- *sign = (k == STRTOG_NaN) ? 0 : x.__pformat_fpreg_exponent & 0x8000;
-
- /* Finally, get the raw digit string, and radix point position index.
- */
- return __gdtoa( &fpi, e, &x.__pformat_fpreg_bits, &k, mode, nd, dp, &ep );
-}
-
-static __inline__ __attribute__((__always_inline__))
-char *__pformat_ecvt( long double x, int precision, int *dp, int *sign )
-{
- /* A convenience wrapper for the above...
- * it emulates `ecvt()', but takes a `long double' argument.
- */
- __pformat_fpreg_t z; z.__pformat_fpreg_ldouble_t = x;
- return __pformat_cvt( 2, z, precision, dp, sign );
-}
-
-static __inline__ __attribute__((__always_inline__))
-char *__pformat_fcvt( long double x, int precision, int *dp, int *sign )
-{
- /* A convenience wrapper for the above...
- * it emulates `fcvt()', but takes a `long double' argument.
- */
- __pformat_fpreg_t z; z.__pformat_fpreg_ldouble_t = x;
- return __pformat_cvt( 3, z, precision, dp, sign );
-}
-
-/* The following are required, to clean up the `__gdtoa()' memory pool,
- * after processing the data returned by the above.
- */
-#define __pformat_ecvt_release( value ) __freedtoa( value )
-#define __pformat_fcvt_release( value ) __freedtoa( value )
-
-#else
-/*
- * TODO: remove this before final release; it is included here as a
- * convenience for testing, without requiring a working `__gdtoa()'.
- */
-static __inline__
-char *__pformat_ecvt( long double x, int precision, int *dp, int *sign )
-{
- /* Define in terms of `ecvt()'...
- */
- char *retval = ecvt( (double)(x), precision, dp, sign );
- if( isinf( x ) || isnan( x ) )
- {
- /* emulating `__gdtoa()' reporting for infinities and NaN.
- */
- *dp = PFORMAT_INFNAN;
- if( *retval == '-' )
- {
- /* Need to force the `sign' flag, (particularly for NaN).
- */
- ++retval; *sign = 1;
- }
- }
- return retval;
-}
-
-static __inline__
-char *__pformat_fcvt( long double x, int precision, int *dp, int *sign )
-{
- /* Define in terms of `fcvt()'...
- */
- char *retval = fcvt( (double)(x), precision, dp, sign );
- if( isinf( x ) || isnan( x ) )
- {
- /* emulating `__gdtoa()' reporting for infinities and NaN.
- */
- *dp = PFORMAT_INFNAN;
- if( *retval == '-' )
- {
- /* Need to force the `sign' flag, (particularly for NaN).
- */
- ++retval; *sign = 1;
- }
- }
- return retval;
-}
-
-/* No memory pool clean up needed, for these emulated cases...
- */
-#define __pformat_ecvt_release( value ) /* nothing to be done */
-#define __pformat_fcvt_release( value ) /* nothing to be done */
-
-/* TODO: end of conditional to be removed. */
-#endif
-
-static __inline__
-void __pformat_emit_radix_point( __pformat_t *stream )
-{
- /* Helper to place a localised representation of the radix point
- * character at the ultimate destination, when formatting fixed or
- * floating point numbers.
- */
- if( stream->rplen == PFORMAT_RPINIT )
- {
- /* Radix point initialisation not yet completed;
- * establish a multibyte to `wchar_t' converter...
- */
- int len; wchar_t rpchr; mbstate_t state;
-
- /* Initialise the conversion state...
- */
- memset( &state, 0, sizeof( state ) );
-
- /* Fetch and convert the localised radix point representation...
- */
- if( (len = mbrtowc( &rpchr, localeconv()->decimal_point, 16, &state )) > 0 )
- /*
- * and store it, if valid.
- */
- stream->rpchr = rpchr;
-
- /* In any case, store the reported effective multibyte length,
- * (or the error flag), marking initialisation as `done'.
- */
- stream->rplen = len;
- }
-
- if( stream->rpchr != (wchar_t)(0) )
- {
- /* We have a localised radix point mark;
- * establish a converter to make it a multibyte character...
- */
- int len; char buf[len = stream->rplen]; mbstate_t state;
-
- /* Initialise the conversion state...
- */
- memset( &state, 0, sizeof( state ) );
-
- /* Convert the `wchar_t' representation to multibyte...
- */
- if( (len = wcrtomb( buf, stream->rpchr, &state )) > 0 )
- {
- /* and copy to the output destination, when valid...
- */
- char *p = buf;
- while( len-- > 0 )
- __pformat_putc( *p++, stream );
- }
-
- else
- /* otherwise fall back to plain ASCII '.'...
- */
- __pformat_putc( '.', stream );
- }
-
- else
- /* No localisation: just use ASCII '.'...
- */
- __pformat_putc( '.', stream );
-}
-
-static __inline__ __attribute__((__always_inline__))
-void __pformat_emit_numeric_value( int c, __pformat_t *stream )
-{
- /* Convenience helper to transfer numeric data from an internal
- * formatting buffer to the ultimate destination...
- */
- if( c == '.' )
- /*
- * converting this internal representation of the the radix
- * point to the appropriately localised representation...
- */
- __pformat_emit_radix_point( stream );
-
- else
- /* and passing all other characters through, unmodified.
- */
- __pformat_putc( c, stream );
-}
-
-static
-void __pformat_emit_inf_or_nan( int sign, char *value, __pformat_t *stream )
-{
- /* Helper to emit INF or NAN where a floating point value
- * resolves to one of these special states.
- */
- int i;
- char buf[4];
- char *p = buf;
-
- /* We use the string formatting helper to display INF/NAN,
- * but we don't want truncation if the precision set for the
- * original floating point output request was insufficient;
- * ignore it!
- */
- stream->precision = PFORMAT_IGNORE;
-
- if( sign )
- /*
- * Negative infinity: emit the sign...
- */
- *p++ = '-';
-
- else if( stream->flags & PFORMAT_POSITIVE )
- /*
- * Not negative infinity, but '+' flag is in effect;
- * thus, we emit a positive sign...
- */
- *p++ = '+';
-
- else if( stream->flags & PFORMAT_ADDSPACE )
- /*
- * No sign required, but space was reserved for it...
- */
- *p++ = '\x20';
-
- /* Copy the appropriate status indicator, up to a maximum of
- * three characters, transforming to the case corresponding to
- * the format specification...
- */
- for( i = 3; i > 0; --i )
- *p++ = (*value++ & ~PFORMAT_XCASE) | (stream->flags & PFORMAT_XCASE);
-
- /* and emit the result.
- */
- __pformat_putchars( buf, p - buf, stream );
-}
-
-static
-void __pformat_emit_float( int sign, char *value, int len, __pformat_t *stream )
-{
- /* Helper to emit a fixed point representation of numeric data,
- * as encoded by a prior call to `ecvt()' or `fcvt()'; (this does
- * NOT include the exponent, for floating point format).
- */
- if( len > 0 )
- {
- /* The magnitude of `x' is greater than or equal to 1.0...
- * reserve space in the output field, for the required number of
- * decimal digits to be placed before the decimal point...
- */
- if( stream->width > len )
- /*
- * adjusting as appropriate, when width is sufficient...
- */
- stream->width -= len;
-
- else
- /* or simply ignoring the width specification, if not.
- */
- stream->width = PFORMAT_IGNORE;
- }
-
- else if( stream->width > 0 )
- /*
- * The magnitude of `x' is less than 1.0...
- * reserve space for exactly one zero before the decimal point.
- */
- stream->width--;
-
- /* Reserve additional space for the digits which will follow the
- * decimal point...
- */
- if( (stream->width >= 0) && (stream->width > stream->precision) )
- /*
- * adjusting appropriately, when sufficient width remains...
- * (note that we must check both of these conditions, because
- * precision may be more negative than width, as a result of
- * adjustment to provide extra padding when trailing zeros
- * are to be discarded from "%g" format conversion with a
- * specified field width, but if width itself is negative,
- * then there is explicitly to be no padding anyway).
- */
- stream->width -= stream->precision;
-
- else
- /* or again, ignoring the width specification, if not.
- */
- stream->width = PFORMAT_IGNORE;
-
- /* Reserve space in the output field, for display of the decimal point,
- * unless the precision is explicity zero, with the `#' flag not set.
- */
- if( (stream->width > 0)
- && ((stream->precision > 0) || (stream->flags & PFORMAT_HASHED)) )
- stream->width--;
-
- /* Reserve space in the output field, for display of the sign of the
- * formatted value, if required; (i.e. if the value is negative, or if
- * either the `space' or `+' formatting flags are set).
- */
- if( (stream->width > 0) && (sign || (stream->flags & PFORMAT_SIGNED)) )
- stream->width--;
-
- /* Emit any padding space, as required to correctly right justify
- * the output within the alloted field width.
- */
- if( (stream->width > 0) && ((stream->flags & PFORMAT_JUSTIFY) == 0) )
- while( stream->width-- > 0 )
- __pformat_putc( '\x20', stream );
-
- /* Emit the sign indicator, as appropriate...
- */
- if( sign )
- /*
- * mandatory, for negative values...
- */
- __pformat_putc( '-', stream );
-
- else if( stream->flags & PFORMAT_POSITIVE )
- /*
- * optional, for positive values...
- */
- __pformat_putc( '+', stream );
-
- else if( stream->flags & PFORMAT_ADDSPACE )
- /*
- * or just fill reserved space, when the space flag is in effect.
- */
- __pformat_putc( '\x20', stream );
-
- /* If the `0' flag is in effect, and not overridden by the `-' flag,
- * then zero padding, to fill out the field, goes here...
- */
- if( (stream->width > 0)
- && ((stream->flags & PFORMAT_JUSTIFY) == PFORMAT_ZEROFILL) )
- while( stream->width-- > 0 )
- __pformat_putc( '0', stream );
-
- /* Emit the digits of the encoded numeric value...
- */
- if( len > 0 )
- /*
- * ...beginning with those which precede the radix point,
- * and appending any necessary significant trailing zeros.
- */
- do __pformat_putc( *value ? *value++ : '0', stream );
- while( --len > 0 );
-
- else
- /* The magnitude of the encoded value is less than 1.0, so no
- * digits precede the radix point; we emit a mandatory initial
- * zero, followed immediately by the radix point.
- */
- __pformat_putc( '0', stream );
-
- /* Unless the encoded value is integral, AND the radix point
- * is not expressly demanded by the `#' flag, we must insert
- * the appropriately localised radix point mark here...
- */
- if( (stream->precision > 0) || (stream->flags & PFORMAT_HASHED) )
- __pformat_emit_radix_point( stream );
-
- /* When the radix point offset, `len', is negative, this implies
- * that additional zeros must appear, following the radix point,
- * and preceding the first significant digit...
- */
- if( len < 0 )
- {
- /* To accommodate these, we adjust the precision, (reducing it
- * by adding a negative value), and then we emit as many zeros
- * as are required.
- */
- stream->precision += len;
- do __pformat_putc( '0', stream );
- while( ++len < 0 );
- }
-
- /* Now we emit any remaining significant digits, or trailing zeros,
- * until the required precision has been achieved.
- */
- while( stream->precision-- > 0 )
- __pformat_putc( *value ? *value++ : '0', stream );
-}
-
-static
-void __pformat_emit_efloat( int sign, char *value, int e, __pformat_t *stream )
-{
- /* Helper to emit a floating point representation of numeric data,
- * as encoded by a prior call to `ecvt()' or `fcvt()'; (this DOES
- * include the following exponent).
- */
- int exp_width = 1;
- __pformat_intarg_t exponent; exponent.__pformat_llong_t = e -= 1;
-
- /* Determine how many digit positions are required for the exponent.
- */
- while( (e /= 10) != 0 )
- exp_width++;
-
- /* Ensure that this is at least as many as the standard requirement.
- */
- if( exp_width < stream->expmin )
- exp_width = stream->expmin;
-
- /* Adjust the residual field width allocation, to allow for the
- * number of exponent digits to be emitted, together with a sign
- * and exponent separator...
- */
- if( stream->width > (exp_width += 2) )
- stream->width -= exp_width;
-
- else
- /* ignoring the field width specification, if insufficient.
- */
- stream->width = PFORMAT_IGNORE;
-
- /* Emit the significand, as a fixed point value with one digit
- * preceding the radix point.
- */
- __pformat_emit_float( sign, value, 1, stream );
-
- /* Reset precision, to ensure the mandatory minimum number of
- * exponent digits will be emitted, and set the flags to ensure
- * the sign is displayed.
- */
- stream->precision = stream->expmin;
- stream->flags |= PFORMAT_SIGNED;
-
- /* Emit the exponent separator.
- */
- __pformat_putc( ('E' | (stream->flags & PFORMAT_XCASE)), stream );
-
- /* Readjust the field width setting, such that it again allows
- * for the digits of the exponent, (which had been discounted when
- * computing any left side padding requirement), so that they are
- * correctly included in the computation of any right side padding
- * requirement, (but here we exclude the exponent separator, which
- * has been emitted, and so counted already).
- */
- stream->width += exp_width - 1;
-
- /* And finally, emit the exponent itself, as a signed integer,
- * with any padding required to achieve flush left justification,
- * (which will be added automatically, by `__pformat_int()').
- */
- __pformat_int( exponent, stream );
-}
-
-static
-void __pformat_float( long double x, __pformat_t *stream )
-{
- /* Handler for `%f' and `%F' format specifiers.
- *
- * This wraps calls to `__pformat_cvt()', `__pformat_emit_float()'
- * and `__pformat_emit_inf_or_nan()', as appropriate, to achieve
- * output in fixed point format.
- */
- int sign, intlen; char *value;
-
- /* Establish the precision for the displayed value, defaulting to six
- * digits following the decimal point, if not explicitly specified.
- */
- if( stream->precision < 0 )
- stream->precision = 6;
-
- /* Encode the input value as ASCII, for display...
- */
- value = __pformat_fcvt( x, stream->precision, &intlen, &sign );
-
- if( intlen == PFORMAT_INFNAN )
- /*
- * handle cases of `infinity' or `not-a-number'...
- */
- __pformat_emit_inf_or_nan( sign, value, stream );
-
- else
- { /* or otherwise, emit the formatted result.
- */
- __pformat_emit_float( sign, value, intlen, stream );
-
- /* and, if there is any residual field width as yet unfilled,
- * then we must be doing flush left justification, so pad out to
- * the right hand field boundary.
- */
- while( stream->width-- > 0 )
- __pformat_putc( '\x20', stream );
- }
-
- /* Clean up `__pformat_fcvt()' memory allocation for `value'...
- */
- __pformat_fcvt_release( value );
-}
-
-static
-void __pformat_efloat( long double x, __pformat_t *stream )
-{
- /* Handler for `%e' and `%E' format specifiers.
- *
- * This wraps calls to `__pformat_cvt()', `__pformat_emit_efloat()'
- * and `__pformat_emit_inf_or_nan()', as appropriate, to achieve
- * output in floating point format.
- */
- int sign, intlen; char *value;
-
- /* Establish the precision for the displayed value, defaulting to six
- * digits following the decimal point, if not explicitly specified.
- */
- if( stream->precision < 0 )
- stream->precision = 6;
-
- /* Encode the input value as ASCII, for display...
- */
- value = __pformat_ecvt( x, stream->precision + 1, &intlen, &sign );
-
- if( intlen == PFORMAT_INFNAN )
- /*
- * handle cases of `infinity' or `not-a-number'...
- */
- __pformat_emit_inf_or_nan( sign, value, stream );
-
- else
- /* or otherwise, emit the formatted result.
- */
- __pformat_emit_efloat( sign, value, intlen, stream );
-
- /* Clean up `__pformat_ecvt()' memory allocation for `value'...
- */
- __pformat_ecvt_release( value );
-}
-
-static
-void __pformat_gfloat( long double x, __pformat_t *stream )
-{
- /* Handler for `%g' and `%G' format specifiers.
- *
- * This wraps calls to `__pformat_cvt()', `__pformat_emit_float()',
- * `__pformat_emit_efloat()' and `__pformat_emit_inf_or_nan()', as
- * appropriate, to achieve output in the more suitable of either
- * fixed or floating point format.
- */
- int sign, intlen; char *value;
-
- /* Establish the precision for the displayed value, defaulting to
- * six significant digits, if not explicitly specified...
- */
- if( stream->precision < 0 )
- stream->precision = 6;
-
- /* or to a minimum of one digit, otherwise...
- */
- else if( stream->precision == 0 )
- stream->precision = 1;
-
- /* Encode the input value as ASCII, for display.
- */
- value = __pformat_ecvt( x, stream->precision, &intlen, &sign );
-
- if( intlen == PFORMAT_INFNAN )
- /*
- * Handle cases of `infinity' or `not-a-number'.
- */
- __pformat_emit_inf_or_nan( sign, value, stream );
-
- else if( (-4 < intlen) && (intlen <= stream->precision) )
- {
- /* Value lies in the acceptable range for fixed point output,
- * (i.e. the exponent is no less than minus four, and the number
- * of significant digits which precede the radix point is fewer
- * than the least number which would overflow the field width,
- * specified or implied by the established precision).
- */
- if( (stream->flags & PFORMAT_HASHED) == PFORMAT_HASHED )
- /*
- * The `#' flag is in effect...
- * Adjust precision to retain the specified number of significant
- * digits, with the proper number preceding the radix point, and
- * the balance following it...
- */
- stream->precision -= intlen;
-
- else
- /* The `#' flag is not in effect...
- * Here we adjust the precision to accommodate all digits which
- * precede the radix point, but we truncate any balance following
- * it, to suppress output of non-significant trailing zeros...
- */
- if( ((stream->precision = strlen( value ) - intlen) < 0)
- /*
- * This may require a compensating adjustment to the field
- * width, to accommodate significant trailing zeros, which
- * precede the radix point...
- */
- && (stream->width > 0) )
- stream->width += stream->precision;
-
- /* Now, we format the result as any other fixed point value.
- */
- __pformat_emit_float( sign, value, intlen, stream );
-
- /* If there is any residual field width as yet unfilled, then
- * we must be doing flush left justification, so pad out to the
- * right hand field boundary.
- */
- while( stream->width-- > 0 )
- __pformat_putc( '\x20', stream );
- }
-
- else
- { /* Value lies outside the acceptable range for fixed point;
- * one significant digit will precede the radix point, so we
- * decrement the precision to retain only the appropriate number
- * of additional digits following it, when we emit the result
- * in floating point format.
- */
- if( (stream->flags & PFORMAT_HASHED) == PFORMAT_HASHED )
- /*
- * The `#' flag is in effect...
- * Adjust precision to emit the specified number of significant
- * digits, with one preceding the radix point, and the balance
- * following it, retaining any non-significant trailing zeros
- * which are required to exactly match the requested precision...
- */
- stream->precision--;
-
- else
- /* The `#' flag is not in effect...
- * Adjust precision to emit only significant digits, with one
- * preceding the radix point, and any others following it, but
- * suppressing non-significant trailing zeros...
- */
- stream->precision = strlen( value ) - 1;
-
- /* Now, we format the result as any other floating point value.
- */
- __pformat_emit_efloat( sign, value, intlen, stream );
- }
-
- /* Clean up `__pformat_ecvt()' memory allocation for `value'.
- */
- __pformat_ecvt_release( value );
-}
-
-static
-void __pformat_emit_xfloat( __pformat_fpreg_t value, __pformat_t *stream )
-{
- /* Helper for emitting floating point data, originating as
- * either `double' or `long double' type, as a hexadecimal
- * representation of the argument value.
- */
- char buf[18], *p = buf;
- __pformat_intarg_t exponent; short exp_width = 2;
-
- /* The mantissa field of the argument value representation can
- * accommodate at most 16 hexadecimal digits, of which one will
- * be placed before the radix point, leaving at most 15 digits
- * to satisfy any requested precision; thus...
- */
- if( (stream->precision >= 0) && (stream->precision < 15) )
- {
- /* When the user specifies a precision within this range,
- * we want to adjust the mantissa, to retain just the number
- * of digits required, rounding up when the high bit of the
- * leftmost discarded digit is set; (mask of 0x08 accounts
- * for exactly one digit discarded, shifting 4 bits per
- * digit, with up to 14 additional digits, to consume the
- * full availability of 15 precision digits).
- *
- * However, before we perform the rounding operation, we
- * normalise the mantissa, shifting it to the left by as many
- * bit positions may be necessary, until its highest order bit
- * is set, thus preserving the maximum number of bits in the
- * rounded result as possible.
- */
- while( value.__pformat_fpreg_mantissa < (LLONG_MAX + 1ULL) )
- value.__pformat_fpreg_mantissa <<= 1;
-
- /* We then shift the mantissa one bit position back to the
- * right, to guard against possible overflow when the rounding
- * adjustment is added.
- */
- value.__pformat_fpreg_mantissa >>= 1;
-
- /* We now add the rounding adjustment, noting that to keep the
- * 0x08 mask aligned with the shifted mantissa, we also need to
- * shift it right by one bit initially, changing its starting
- * value to 0x04...
- */
- value.__pformat_fpreg_mantissa += 0x04LL << (4 * (14 - stream->precision));
- if( (value.__pformat_fpreg_mantissa & (LLONG_MAX + 1ULL)) == 0ULL )
- /*
- * When the rounding adjustment would not have overflowed,
- * then we shift back to the left again, to fill the vacated
- * bit we reserved to accommodate the carry.
- */
- value.__pformat_fpreg_mantissa <<= 1;
-
- else
- /* Otherwise the rounding adjustment would have overflowed,
- * so the carry has already filled the vacated bit; the effect
- * of this is equivalent to an increment of the exponent.
- */
- value.__pformat_fpreg_exponent++;
-
- /* We now complete the rounding to the required precision, by
- * shifting the unwanted digits out, from the right hand end of
- * the mantissa.
- */
- value.__pformat_fpreg_mantissa >>= 4 * (15 - stream->precision);
- }
-
- /* Encode the significant digits of the mantissa in hexadecimal
- * ASCII notation, ready for transfer to the output stream...
- */
- while( value.__pformat_fpreg_mantissa )
- {
- /* taking the rightmost digit in each pass...
- */
- int c = value.__pformat_fpreg_mantissa & 0xF;
- if( c == value.__pformat_fpreg_mantissa )
- {
- /* inserting the radix point, when we reach the last,
- * (i.e. the most significant digit), unless we found no
- * less significant digits, with no mandatory radix point
- * inclusion, and no additional required precision...
- */
- if( (p > buf)
- || (stream->flags & PFORMAT_HASHED) || (stream->precision > 0) )
- /*
- * Internally, we represent the radix point as an ASCII '.';
- * we will replace it with any locale specific alternative,
- * at the time of transfer to the ultimate destination.
- */
- *p++ = '.';
-
- /* If the most significant hexadecimal digit of the encoded
- * output value is greater than one, then the indicated value
- * will appear too large, by an additional binary exponent
- * corresponding to the number of higher order bit positions
- * which it occupies...
- */
- while( value.__pformat_fpreg_mantissa > 1 )
- {
- /* so reduce the exponent value to compensate...
- */
- value.__pformat_fpreg_exponent--;
- value.__pformat_fpreg_mantissa >>= 1;
- }
- }
-
- else if( stream->precision > 0 )
- /*
- * we have not yet fulfilled the desired precision,
- * and we have not yet found the most significant digit,
- * so account for the current digit, within the field
- * width required to meet the specified precision.
- */
- stream->precision--;
-
- if( (c > 0) || (p > buf) || (stream->precision >= 0) )
- /*
- * Ignoring insignificant trailing zeros, (unless required to
- * satisfy specified precision), store the current encoded digit
- * into the pending output buffer, in LIFO order, and using the
- * appropriate case for digits in the `A'..`F' range.
- */
- *p++ = c > 9 ? (c - 10 + 'A') | (stream->flags & PFORMAT_XCASE) : c + '0';
-
- /* Shift out the current digit, (4-bit logical shift right),
- * to align the next more significant digit to be extracted,
- * and encoded in the next pass.
- */
- value.__pformat_fpreg_mantissa >>= 4;
- }
-
- if( p == buf )
- {
- /* Nothing has been queued for output...
- * We need at least one zero, and possibly a radix point.
- */
- if( (stream->precision > 0) || (stream->flags & PFORMAT_HASHED) )
- *p++ = '.';
-
- *p++ = '0';
- }
-
- if( stream->width > 0 )
- {
- /* Adjust the user specified field width, to account for the
- * number of digits minimally required, to display the encoded
- * value, at the requested precision.
- *
- * FIXME: this uses the minimum number of digits possible for
- * representation of the binary exponent, in strict conformance
- * with C99 and POSIX specifications. Although there appears to
- * be no Microsoft precedent for doing otherwise, we may wish to
- * relate this to the `_get_output_format()' result, to maintain
- * consistency with `%e', `%f' and `%g' styles.
- */
- int min_width = p - buf;
- int exponent = value.__pformat_fpreg_exponent;
-
- /* If we have not yet queued sufficient digits to fulfil the
- * requested precision, then we must adjust the minimum width
- * specification, to accommodate the additional digits which
- * are required to do so.
- */
- if( stream->precision > 0 )
- min_width += stream->precision;
-
- /* Adjust the minimum width requirement, to accomodate the
- * sign, radix indicator and at least one exponent digit...
- */
- min_width += stream->flags & PFORMAT_SIGNED ? 6 : 5;
- while( (exponent = exponent / 10) != 0 )
- {
- /* and increase as required, if additional exponent digits
- * are needed, also saving the exponent field width adjustment,
- * for later use when that is emitted.
- */
- min_width++;
- exp_width++;
- }
-
- if( stream->width > min_width )
- {
- /* When specified field width exceeds the minimum required,
- * adjust to retain only the excess...
- */
- stream->width -= min_width;
-
- /* and then emit any required left side padding spaces.
- */
- if( (stream->flags & PFORMAT_JUSTIFY) == 0 )
- while( stream->width-- > 0 )
- __pformat_putc( '\x20', stream );
- }
-
- else
- /* Specified field width is insufficient; just ignore it!
- */
- stream->width = PFORMAT_IGNORE;
- }
-
- /* Emit the sign of the encoded value, as required...
- */
- if( stream->flags & PFORMAT_NEGATIVE )
- /*
- * this is mandatory, to indicate a negative value...
- */
- __pformat_putc( '-', stream );
-
- else if( stream->flags & PFORMAT_POSITIVE )
- /*
- * but this is optional, for a positive value...
- */
- __pformat_putc( '+', stream );
-
- else if( stream->flags & PFORMAT_ADDSPACE )
- /*
- * with this optional alternative.
- */
- __pformat_putc( '\x20', stream );
-
- /* Prefix a `0x' or `0X' radix indicator to the encoded value,
- * with case appropriate to the format specification.
- */
- __pformat_putc( '0', stream );
- __pformat_putc( 'X' | (stream->flags & PFORMAT_XCASE), stream );
-
- /* If the `0' flag is in effect...
- * Zero padding, to fill out the field, goes here...
- */
- if( (stream->width > 0) && (stream->flags & PFORMAT_ZEROFILL) )
- while( stream->width-- > 0 )
- __pformat_putc( '0', stream );
-
- /* Next, we emit the encoded value, without its exponent...
- */
- while( p > buf )
- __pformat_emit_numeric_value( *--p, stream );
-
- /* followed by any additional zeros needed to satisfy the
- * precision specification...
- */
- while( stream->precision-- > 0 )
- __pformat_putc( '0', stream );
-
- /* then the exponent prefix, (C99 and POSIX specify `p'),
- * in the case appropriate to the format specification...
- */
- __pformat_putc( 'P' | (stream->flags & PFORMAT_XCASE), stream );
-
- /* and finally, the decimal representation of the binary exponent,
- * as a signed value with mandatory sign displayed, in a field width
- * adjusted to accommodate it, LEFT justified, with any additional
- * right side padding remaining from the original field width.
- */
- stream->width += exp_width;
- stream->flags |= PFORMAT_SIGNED;
- exponent.__pformat_llong_t = value.__pformat_fpreg_exponent;
- __pformat_int( exponent, stream );
-}
-
-static
-void __pformat_xdouble( double x, __pformat_t *stream )
-{
- /* Handler for `%a' and `%A' format specifiers, (with argument
- * value specified as `double' type).
- */
- unsigned sign_bit = 0;
- __pformat_fpreg_t z; z.__pformat_fpreg_double_t = x;
-
- /* First check for NaN; it is emitted unsigned...
- */
- if( isnan( x ) )
- __pformat_emit_inf_or_nan( sign_bit, "NaN", stream );
-
- else
- { /* Capture the sign bit up-front, so we can show it correctly
- * even when the argument value is zero or infinite.
- */
- if( (sign_bit = (z.__pformat_fpreg_bitmap[3] & 0x8000)) != 0 )
- stream->flags |= PFORMAT_NEGATIVE;
-
- /* Check for infinity, (positive or negative)...
- */
- if( isinf( x ) )
- /*
- * displaying the appropriately signed indicator,
- * when appropriate.
- */
- __pformat_emit_inf_or_nan( sign_bit, "Inf", stream );
-
- else
- { /* The argument value is a representable number...
- * first move its exponent into the appropriate field...
- */
- z.__pformat_fpreg_bitmap[4] = (z.__pformat_fpreg_bitmap[3] >> 4) & 0x7FF;
-
- /* Realign the mantissa, leaving space for a
- * normalised most significant digit...
- */
- z.__pformat_fpreg_mantissa <<= 8;
- z.__pformat_fpreg_bitmap[3] = (z.__pformat_fpreg_bitmap[3] & 0x0FFF);
-
- /* Check for zero value...
- */
- if( z.__pformat_fpreg_exponent || z.__pformat_fpreg_mantissa )
- {
- /* and only when the value is non-zero,
- * eliminate the bias from the exponent...
- */
- z.__pformat_fpreg_exponent -= 0x3FF;
-
- /* Check for a possible denormalised value...
- */
- if( z.__pformat_fpreg_exponent > -126 )
- /*
- * and normalise when it isn't.
- */
- z.__pformat_fpreg_bitmap[3] += 0x1000;
- }
-
- /* Finally, hand the adjusted representation off to the generalised
- * hexadecimal floating point format handler...
- */
- __pformat_emit_xfloat( z, stream );
- }
- }
-}
-
-static
-void __pformat_xldouble( long double x, __pformat_t *stream )
-{
- /* Handler for `%La' and `%LA' format specifiers, (with argument
- * value specified as `long double' type).
- */
- unsigned sign_bit = 0;
- __pformat_fpreg_t z; z.__pformat_fpreg_ldouble_t = x;
-
- /* First check for NaN; it is emitted unsigned...
- */
- if( isnan( x ) )
- __pformat_emit_inf_or_nan( sign_bit, "NaN", stream );
-
- else
- { /* Capture the sign bit up-front, so we can show it correctly
- * even when the argument value is zero or infinite.
- */
- if( (sign_bit = (z.__pformat_fpreg_exponent & 0x8000)) != 0 )
- stream->flags |= PFORMAT_NEGATIVE;
-
- /* Check for infinity, (positive or negative)...
- */
- if( isinf( x ) )
- /*
- * displaying the appropriately signed indicator,
- * when appropriate.
- */
- __pformat_emit_inf_or_nan( sign_bit, "Inf", stream );
-
- else
- { /* The argument value is a representable number...
- * extract the effective value of the biased exponent...
- */
- z.__pformat_fpreg_exponent &= 0x7FFF;
- if( z.__pformat_fpreg_exponent || z.__pformat_fpreg_mantissa )
- /*
- * and if the argument value itself is non-zero,
- * eliminate the bias from the exponent...
- */
- z.__pformat_fpreg_exponent -= 0x3FFF;
-
- /* Finally, hand the adjusted representation off to the
- * generalised hexadecimal floating point format handler...
- */
- __pformat_emit_xfloat( z, stream );
- }
- }
-}
-
-int __pformat( int flags, void *dest, int max, const char *fmt, va_list argv )
-{
- int c;
-
- __pformat_t stream =
- {
- /* Create and initialise a format control block
- * for this output request.
- */
- dest, /* output goes to here */
- flags &= PFORMAT_TO_FILE | PFORMAT_NOLIMIT, /* only these valid initially */
- PFORMAT_IGNORE, /* no field width yet */
- PFORMAT_IGNORE, /* nor any precision spec */
- PFORMAT_RPINIT, /* radix point uninitialised */
- (wchar_t)(0), /* leave it unspecified */
- 0, /* zero output char count */
- max, /* establish output limit */
- PFORMAT_MINEXP /* exponent chars preferred */
- };
-
- format_scan: while( (c = *fmt++) != 0 )
- {
- /* Format string parsing loop...
- * The entry point is labelled, so that we can return to the start state
- * from within the inner `conversion specification' interpretation loop,
- * as soon as a conversion specification has been resolved.
- */
- if( c == '%' )
- {
- /* Initiate parsing of a `conversion specification'...
- */
- __pformat_intarg_t argval;
- __pformat_state_t state = PFORMAT_INIT;
- __pformat_length_t length = PFORMAT_LENGTH_INT;
-
- /* Save the current format scan position, so that we can backtrack
- * in the event of encountering an invalid format specification...
- */
- const char *backtrack = fmt;
-
- /* Restart capture for dynamic field width and precision specs...
- */
- int *width_spec = &stream.width;
-
- /* Reset initial state for flags, width and precision specs...
- */
- stream.flags = flags;
- stream.width = stream.precision = PFORMAT_IGNORE;
-
- while( *fmt )
- {
- switch( c = *fmt++ )
- {
- /* Data type specifiers...
- * All are terminal, so exit the conversion spec parsing loop
- * with a `goto format_scan', thus resuming at the outer level
- * in the regular format string parser.
- */
- case '%':
- /*
- * Not strictly a data type specifier...
- * it simply converts as a literal `%' character.
- *
- * FIXME: should we require this to IMMEDIATELY follow the
- * initial `%' of the "conversion spec"? (glibc `printf()'
- * on GNU/Linux does NOT appear to require this, but POSIX
- * and SUSv3 do seem to demand it).
- */
- __pformat_putc( c, &stream );
- goto format_scan;
-
- case 'C':
- /*
- * Equivalent to `%lc'; set `length' accordingly,
- * and simply fall through.
- */
- length = PFORMAT_LENGTH_LONG;
-
- case 'c':
- /*
- * Single, (or single multibyte), character output...
- *
- * We handle these by copying the argument into our local
- * `argval' buffer, and then we pass the address of that to
- * either `__pformat_putchars()' or `__pformat_wputchars()',
- * as appropriate, effectively formatting it as a string of
- * the appropriate type, with a length of one.
- *
- * A side effect of this method of handling character data
- * is that, if the user sets a precision of zero, then no
- * character is actually emitted; we don't want that, so we
- * forcibly override any user specified precision.
- */
- stream.precision = PFORMAT_IGNORE;
-
- /* Now we invoke the appropriate format handler...
- */
- if( (length == PFORMAT_LENGTH_LONG)
- || (length == PFORMAT_LENGTH_LLONG) )
- {
- /* considering any `long' type modifier as a reference to
- * `wchar_t' data, (which is promoted to an `int' argument)...
- */
- wchar_t argval = (wchar_t)(va_arg( argv, int ));
- __pformat_wputchars( &argval, 1, &stream );
- }
-
- else
- { /* while anything else is simply taken as `char', (which
- * is also promoted to an `int' argument)...
- */
- argval.__pformat_uchar_t = (unsigned char)(va_arg( argv, int ));
- __pformat_putchars( (char *)(&argval), 1, &stream );
- }
- goto format_scan;
-
- case 'S':
- /*
- * Equivalent to `%ls'; set `length' accordingly,
- * and simply fall through.
- */
- length = PFORMAT_LENGTH_LONG;
-
- case 's':
- if( (length == PFORMAT_LENGTH_LONG)
- || (length == PFORMAT_LENGTH_LLONG) )
- {
- /* considering any `long' type modifier as a reference to
- * a `wchar_t' string...
- */
- __pformat_wcputs( va_arg( argv, wchar_t * ), &stream );
- }
-
- else
- /* This is normal string output;
- * we simply invoke the appropriate handler...
- */
- __pformat_puts( va_arg( argv, char * ), &stream );
-
- goto format_scan;
-
- case 'o':
- case 'u':
- case 'x':
- case 'X':
- /*
- * Unsigned integer values; octal, decimal or hexadecimal format...
- */
- if( length == PFORMAT_LENGTH_LLONG )
- /*
- * with an `unsigned long long' argument, which we
- * process `as is'...
- */
- argval.__pformat_ullong_t = va_arg( argv, unsigned long long );
-
- else if( length == PFORMAT_LENGTH_LONG )
- /*
- * or with an `unsigned long', which we promote to
- * `unsigned long long'...
- */
- argval.__pformat_ullong_t = va_arg( argv, unsigned long );
-
- else
- { /* or for any other size, which will have been promoted
- * to `unsigned int', we select only the appropriately sized
- * least significant segment, and again promote to the same
- * size as `unsigned long long'...
- */
- argval.__pformat_ullong_t = va_arg( argv, unsigned int );
- if( length == PFORMAT_LENGTH_SHORT )
- /*
- * from `unsigned short'...
- */
- argval.__pformat_ullong_t = argval.__pformat_ushort_t;
-
- else if( length == PFORMAT_LENGTH_CHAR )
- /*
- * or even from `unsigned char'...
- */
- argval.__pformat_ullong_t = argval.__pformat_uchar_t;
- }
-
- /* so we can pass any size of argument to either of two
- * common format handlers...
- */
- if( c == 'u' )
- /*
- * depending on whether output is to be encoded in
- * decimal format...
- */
- __pformat_int( argval, &stream );
-
- else
- /* or in octal or hexadecimal format...
- */
- __pformat_xint( c, argval, &stream );
-
- goto format_scan;
-
- case 'd':
- case 'i':
- /*
- * Signed integer values; decimal format...
- * This is similar to `u', but must process `argval' as signed,
- * and be prepared to handle negative numbers.
- */
- stream.flags |= PFORMAT_NEGATIVE;
-
- if( length == PFORMAT_LENGTH_LLONG )
- /*
- * The argument is a `long long' type...
- */
- argval.__pformat_llong_t = va_arg( argv, long long );
-
- else if( length == PFORMAT_LENGTH_LONG )
- /*
- * or here, a `long' type...
- */
- argval.__pformat_llong_t = va_arg( argv, long );
-
- else
- { /* otherwise, it's an `int' type...
- */
- argval.__pformat_llong_t = va_arg( argv, int );
- if( length == PFORMAT_LENGTH_SHORT )
- /*
- * but it was promoted from a `short' type...
- */
- argval.__pformat_llong_t = argval.__pformat_short_t;
- else if( length == PFORMAT_LENGTH_CHAR )
- /*
- * or even from a `char' type...
- */
- argval.__pformat_llong_t = argval.__pformat_char_t;
- }
-
- /* In any case, all share a common handler...
- */
- __pformat_int( argval, &stream );
- goto format_scan;
-
- case 'p':
- /*
- * Pointer argument; format as hexadecimal, subject to...
- */
- if( (state == PFORMAT_INIT) && (stream.flags == flags) )
- {
- /* Here, the user didn't specify any particular
- * formatting attributes. We must choose a default
- * which will be compatible with Microsoft's (broken)
- * scanf() implementation, (i.e. matching the default
- * used by MSVCRT's printf(), which appears to resemble
- * "%0.8X" for 32-bit pointers); in particular, we MUST
- * NOT adopt a GNU-like format resembling "%#x", because
- * Microsoft's scanf() will choke on the "0x" prefix.
- */
- stream.flags |= PFORMAT_ZEROFILL;
- stream.precision = 2 * sizeof( uintptr_t );
- }
- argval.__pformat_ullong_t = va_arg( argv, uintptr_t );
- __pformat_xint( 'x', argval, &stream );
- goto format_scan;
-
- case 'e':
- /*
- * Floating point format, with lower case exponent indicator
- * and lower case `inf' or `nan' representation when required;
- * select lower case mode, and simply fall through...
- */
- stream.flags |= PFORMAT_XCASE;
-
- case 'E':
- /*
- * Floating point format, with upper case exponent indicator
- * and upper case `INF' or `NAN' representation when required,
- * (or lower case for all of these, on fall through from above);
- * select lower case mode, and simply fall through...
- */
- if( stream.flags & PFORMAT_LDOUBLE )
- /*
- * for a `long double' argument...
- */
- __pformat_efloat( va_arg( argv, long double ), &stream );
-
- else
- /* or just a `double', which we promote to `long double',
- * so the two may share a common format handler.
- */
- __pformat_efloat( (long double)(va_arg( argv, double )), &stream );
-
- goto format_scan;
-
- case 'f':
- /*
- * Fixed point format, using lower case for `inf' and
- * `nan', when appropriate; select lower case mode, and
- * simply fall through...
- */
- stream.flags |= PFORMAT_XCASE;
-
- case 'F':
- /*
- * Fixed case format using upper case, or lower case on
- * fall through from above, for `INF' and `NAN'...
- */
- if( stream.flags & PFORMAT_LDOUBLE )
- /*
- * for a `long double' argument...
- */
- __pformat_float( va_arg( argv, long double ), &stream );
-
- else
- /* or just a `double', which we promote to `long double',
- * so the two may share a common format handler.
- */
- __pformat_float( (long double)(va_arg( argv, double )), &stream );
-
- goto format_scan;
-
- case 'g':
- /*
- * Generalised floating point format, with lower case
- * exponent indicator when required; select lower case
- * mode, and simply fall through...
- */
- stream.flags |= PFORMAT_XCASE;
-
- case 'G':
- /*
- * Generalised floating point format, with upper case,
- * or on fall through from above, with lower case exponent
- * indicator when required...
- */
- if( stream.flags & PFORMAT_LDOUBLE )
- /*
- * for a `long double' argument...
- */
- __pformat_gfloat( va_arg( argv, long double ), &stream );
-
- else
- /* or just a `double', which we promote to `long double',
- * so the two may share a common format handler.
- */
- __pformat_gfloat( (long double)(va_arg( argv, double )), &stream );
-
- goto format_scan;
-
- case 'a':
- /*
- * Hexadecimal floating point format, with lower case radix
- * and exponent indicators; select the lower case mode, and
- * fall through...
- */
- stream.flags |= PFORMAT_XCASE;
-
- case 'A':
- /*
- * Hexadecimal floating point format; handles radix and
- * exponent indicators in either upper or lower case...
- */
- if( stream.flags & PFORMAT_LDOUBLE )
- /*
- * with a `long double' argument...
- */
- __pformat_xldouble( va_arg( argv, long double ), &stream );
-
- else
- /* or just a `double'.
- */
- __pformat_xdouble( va_arg( argv, double ), &stream );
-
- goto format_scan;
-
- case 'n':
- /*
- * Save current output character count...
- */
- if( length == PFORMAT_LENGTH_CHAR )
- /*
- * to a signed `char' destination...
- */
- *va_arg( argv, char * ) = stream.count;
-
- else if( length == PFORMAT_LENGTH_SHORT )
- /*
- * or to a signed `short'...
- */
- *va_arg( argv, short * ) = stream.count;
-
- else if( length == PFORMAT_LENGTH_LONG )
- /*
- * or to a signed `long'...
- */
- *va_arg( argv, long * ) = stream.count;
-
- else if( length == PFORMAT_LENGTH_LLONG )
- /*
- * or to a signed `long long'...
- */
- *va_arg( argv, long long * ) = stream.count;
-
- else
- /*
- * or, by default, to a signed `int'.
- */
- *va_arg( argv, int * ) = stream.count;
-
- goto format_scan;
-
- /* Argument length modifiers...
- * These are non-terminal; each sets the format parser
- * into the PFORMAT_END state, and ends with a `break'.
- */
- case 'h':
- /*
- * Interpret the argument as explicitly of a `short'
- * or `char' data type, truncated from the standard
- * length defined for integer promotion.
- */
- if( *fmt == 'h' )
- {
- /* Modifier is `hh'; data type is `char' sized...
- * Skip the second `h', and set length accordingly.
- */
- ++fmt;
- length = PFORMAT_LENGTH_CHAR;
- }
-
- else
- /* Modifier is `h'; data type is `short' sized...
- */
- length = PFORMAT_LENGTH_SHORT;
-
- state = PFORMAT_END;
- break;
-
- case 'j':
- /*
- * Interpret the argument as being of the same size as
- * a `intmax_t' entity...
- */
- length = __pformat_arg_length( intmax_t );
- state = PFORMAT_END;
- break;
-
-# ifdef _WIN32
-
- case 'I':
- /*
- * The MSVCRT implementation of the printf() family of
- * functions explicitly uses...
- */
- if( (fmt[0] == '6') && (fmt[1] == '4') )
- {
- /* I64' instead of `ll',
- * when referring to `long long' integer types...
- */
- length = PFORMAT_LENGTH_LLONG;
- fmt += 2;
- }
-
- else if( (fmt[0] == '3') && (fmt[1] == '2') )
- {
- /* and `I32' instead of `l',
- * when referring to `long' integer types...
- */
- length = PFORMAT_LENGTH_LONG;
- fmt += 2;
- }
-
- else
- /* or unqualified `I' instead of `t' or `z',
- * when referring to `ptrdiff_t' or `size_t' entities;
- * (we will choose to map it to `ptrdiff_t').
- */
- length = __pformat_arg_length( ptrdiff_t );
-
- state = PFORMAT_END;
- break;
-
-# endif
-
- case 'l':
- /*
- * Interpret the argument as explicitly of a
- * `long' or `long long' data type.
- */
- if( *fmt == 'l' )
- {
- /* Modifier is `ll'; data type is `long long' sized...
- * Skip the second `l', and set length accordingly.
- */
- ++fmt;
- length = PFORMAT_LENGTH_LLONG;
- }
-
- else
- /* Modifier is `l'; data type is `long' sized...
- */
- length = PFORMAT_LENGTH_LONG;
-
-# ifndef _WIN32
- /*
- * Microsoft's MSVCRT implementation also uses `l'
- * as a modifier for `long double'; if we don't want
- * to support that, we end this case here...
- */
- state = PFORMAT_END;
- break;
-
- /* otherwise, we simply fall through...
- */
-# endif
-
- case 'L':
- /*
- * Identify the appropriate argument as a `long double',
- * when associated with `%a', `%A', `%e', `%E', `%f', `%F',
- * `%g' or `%G' format specifications.
- */
- stream.flags |= PFORMAT_LDOUBLE;
- state = PFORMAT_END;
- break;
-
- case 't':
- /*
- * Interpret the argument as being of the same size as
- * a `ptrdiff_t' entity...
- */
- length = __pformat_arg_length( ptrdiff_t );
- state = PFORMAT_END;
- break;
-
- case 'z':
- /*
- * Interpret the argument as being of the same size as
- * a `size_t' entity...
- */
- length = __pformat_arg_length( size_t );
- state = PFORMAT_END;
- break;
-
- /* Precision indicator...
- * May appear once only; it must precede any modifier
- * for argument length, or any data type specifier.
- */
- case '.':
- if( state < PFORMAT_GET_PRECISION )
- {
- /* We haven't seen a precision specification yet,
- * so initialise it to zero, (in case no digits follow),
- * and accept any following digits as the precision.
- */
- stream.precision = 0;
- width_spec = &stream.precision;
- state = PFORMAT_GET_PRECISION;
- }
-
- else
- /* We've already seen a precision specification,
- * so this is just junk; proceed to end game.
- */
- state = PFORMAT_END;
-
- /* Either way, we must not fall through here.
- */
- break;
-
- /* Variable field width, or precision specification,
- * derived from the argument list...
- */
- case '*':
- /*
- * When this appears...
- */
- if( width_spec
- && ((state == PFORMAT_INIT) || (state == PFORMAT_GET_PRECISION)) )
- {
- /* in proper context; assign to field width
- * or precision, as appropriate.
- */
- if( (*width_spec = va_arg( argv, int )) < 0 )
- {
- /* Assigned value was negative...
- */
- if( state == PFORMAT_INIT )
- {
- /* For field width, this is equivalent to
- * a positive value with the `-' flag...
- */
- stream.flags |= PFORMAT_LJUSTIFY;
- stream.width = -stream.width;
- }
-
- else
- /* while as a precision specification,
- * it should simply be ignored.
- */
- stream.precision = PFORMAT_IGNORE;
- }
- }
-
- else
- /* out of context; give up on width and precision
- * specifications for this conversion.
- */
- state = PFORMAT_END;
-
- /* Mark as processed...
- * we must not see `*' again, in this context.
- */
- width_spec = NULL;
- break;
-
- /* Formatting flags...
- * Must appear while in the PFORMAT_INIT state,
- * and are non-terminal, so again, end with `break'.
- */
- case '#':
- /*
- * Select alternate PFORMAT_HASHED output style.
- */
- if( state == PFORMAT_INIT )
- stream.flags |= PFORMAT_HASHED;
- break;
-
- case '+':
- /*
- * Print a leading sign with numeric output,
- * for both positive and negative values.
- */
- if( state == PFORMAT_INIT )
- stream.flags |= PFORMAT_POSITIVE;
- break;
-
- case '-':
- /*
- * Select left justification of displayed output
- * data, within the output field width, instead of
- * the default flush right justification.
- */
- if( state == PFORMAT_INIT )
- stream.flags |= PFORMAT_LJUSTIFY;
- break;
-
-# ifdef WITH_XSI_FEATURES
-
- case '\'':
- /*
- * This is an XSI extension to the POSIX standard,
- * which we do not support, at present.
- */
- if( state == PFORMAT_INIT )
- stream.flags |= PFORMAT_GROUPED;
- break;
-
-# endif
-
- case '\x20':
- /*
- * Reserve a single space, within the output field,
- * for display of the sign of signed data; this will
- * be occupied by the minus sign, if the data value
- * is negative, or by a plus sign if the data value
- * is positive AND the `+' flag is also present, or
- * by a space otherwise. (Technically, this flag
- * is redundant, if the `+' flag is present).
- */
- if( state == PFORMAT_INIT )
- stream.flags |= PFORMAT_ADDSPACE;
- break;
-
- case '0':
- /*
- * May represent a flag, to activate the `pad with zeros'
- * option, or it may simply be a digit in a width or in a
- * precision specification...
- */
- if( state == PFORMAT_INIT )
- {
- /* This is the flag usage...
- */
- stream.flags |= PFORMAT_ZEROFILL;
- break;
- }
-
- default:
- /*
- * If we didn't match anything above, then we will check
- * for digits, which we may accumulate to generate field
- * width or precision specifications...
- */
- if( (state < PFORMAT_END) && ('9' >= c) && (c >= '0') )
- {
- if( state == PFORMAT_INIT )
- /*
- * Initial digits explicitly relate to field width...
- */
- state = PFORMAT_SET_WIDTH;
-
- else if( state == PFORMAT_GET_PRECISION )
- /*
- * while those following a precision indicator
- * explicitly relate to precision.
- */
- state = PFORMAT_SET_PRECISION;
-
- if( width_spec )
- {
- /* We are accepting a width or precision specification...
- */
- if( *width_spec < 0 )
- /*
- * and accumulation hasn't started yet; we simply
- * initialise the accumulator with the current digit
- * value, converting from ASCII to decimal.
- */
- *width_spec = c - '0';
-
- else
- /* Accumulation has already started; we perform a
- * `leftwise decimal digit shift' on the accumulator,
- * (i.e. multiply it by ten), then add the decimal
- * equivalent value of the current digit.
- */
- *width_spec = *width_spec * 10 + c - '0';
- }
- }
-
- else
- {
- /* We found a digit out of context, or some other character
- * with no designated meaning; reject this format specification,
- * backtrack, and emit it as literal text...
- */
- fmt = backtrack;
- __pformat_putc( '%', &stream );
- goto format_scan;
- }
- }
- }
- }
-
- else
- /* We just parsed a character which is not included within any format
- * specification; we simply emit it as a literal.
- */
- __pformat_putc( c, &stream );
- }
-
- /* When we have fully dispatched the format string, the return value is the
- * total number of bytes we transferred to the output destination.
- */
- return stream.count;
-}
-
-/* $RCSfile$Revision$: end of file */