summaryrefslogtreecommitdiff
path: root/StdLib
diff options
context:
space:
mode:
Diffstat (limited to 'StdLib')
-rw-r--r--StdLib/BsdSocketLib/BsdSocketLib.inf114
-rw-r--r--StdLib/BsdSocketLib/Ip6Addr_Any.c18
-rw-r--r--StdLib/BsdSocketLib/Ip6Addr_LinkLocal_AllNodes.c18
-rw-r--r--StdLib/BsdSocketLib/Ip6Addr_LinkLocal_AllRouters.c18
-rw-r--r--StdLib/BsdSocketLib/Ip6Addr_Loopback.c18
-rw-r--r--StdLib/BsdSocketLib/Ip6Addr_NodeLocal_AllNodes.c18
-rw-r--r--StdLib/BsdSocketLib/SocketInternals.h205
-rw-r--r--StdLib/BsdSocketLib/Socklib_internals.h42
-rw-r--r--StdLib/BsdSocketLib/accept.c161
-rw-r--r--StdLib/BsdSocketLib/base64.c355
-rw-r--r--StdLib/BsdSocketLib/bind.c65
-rw-r--r--StdLib/BsdSocketLib/close.c108
-rw-r--r--StdLib/BsdSocketLib/connect.c95
-rw-r--r--StdLib/BsdSocketLib/errno.c21
-rw-r--r--StdLib/BsdSocketLib/getaddrinfo.c1965
-rw-r--r--StdLib/BsdSocketLib/gethostbydns.c814
-rw-r--r--StdLib/BsdSocketLib/gethostbyht.c207
-rw-r--r--StdLib/BsdSocketLib/gethostbynis.c134
-rw-r--r--StdLib/BsdSocketLib/gethostnamadr.c225
-rw-r--r--StdLib/BsdSocketLib/gethostname.c92
-rw-r--r--StdLib/BsdSocketLib/getnameinfo.c581
-rw-r--r--StdLib/BsdSocketLib/getnetbydns.c318
-rw-r--r--StdLib/BsdSocketLib/getnetbyht.c169
-rw-r--r--StdLib/BsdSocketLib/getnetbynis.c171
-rw-r--r--StdLib/BsdSocketLib/getnetnamadr.c186
-rw-r--r--StdLib/BsdSocketLib/getpeername.c74
-rw-r--r--StdLib/BsdSocketLib/getproto.c54
-rw-r--r--StdLib/BsdSocketLib/getprotoent.c118
-rw-r--r--StdLib/BsdSocketLib/getprotoname.c61
-rw-r--r--StdLib/BsdSocketLib/getservbyname.c77
-rw-r--r--StdLib/BsdSocketLib/getservbyport.c72
-rw-r--r--StdLib/BsdSocketLib/getservent.c277
-rw-r--r--StdLib/BsdSocketLib/getsockname.c74
-rw-r--r--StdLib/BsdSocketLib/getsockopt.c58
-rw-r--r--StdLib/BsdSocketLib/herror.c134
-rw-r--r--StdLib/BsdSocketLib/inet_net_ntop.c142
-rw-r--r--StdLib/BsdSocketLib/inet_net_pton.c252
-rw-r--r--StdLib/BsdSocketLib/inet_neta.c125
-rw-r--r--StdLib/BsdSocketLib/inet_pton.c257
-rw-r--r--StdLib/BsdSocketLib/listen.c56
-rw-r--r--StdLib/BsdSocketLib/map_v4v6.c135
-rw-r--r--StdLib/BsdSocketLib/ns_addr.c241
-rw-r--r--StdLib/BsdSocketLib/ns_name.c629
-rw-r--r--StdLib/BsdSocketLib/ns_netint.c50
-rw-r--r--StdLib/BsdSocketLib/ns_ntoa.c103
-rw-r--r--StdLib/BsdSocketLib/ns_parse.c232
-rw-r--r--StdLib/BsdSocketLib/ns_print.c776
-rw-r--r--StdLib/BsdSocketLib/ns_ttl.c187
-rw-r--r--StdLib/BsdSocketLib/nsap_addr.c104
-rw-r--r--StdLib/BsdSocketLib/poll.c45
-rw-r--r--StdLib/BsdSocketLib/read.c60
-rw-r--r--StdLib/BsdSocketLib/recv.c67
-rw-r--r--StdLib/BsdSocketLib/recvfrom.c201
-rw-r--r--StdLib/BsdSocketLib/res_comp.c283
-rw-r--r--StdLib/BsdSocketLib/res_config.h8
-rw-r--r--StdLib/BsdSocketLib/res_data.c83
-rw-r--r--StdLib/BsdSocketLib/res_debug.c988
-rw-r--r--StdLib/BsdSocketLib/res_init.c514
-rw-r--r--StdLib/BsdSocketLib/res_mkquery.c211
-rw-r--r--StdLib/BsdSocketLib/res_mkupdate.c459
-rw-r--r--StdLib/BsdSocketLib/res_query.c430
-rw-r--r--StdLib/BsdSocketLib/res_send.c933
-rw-r--r--StdLib/BsdSocketLib/res_update.c561
-rw-r--r--StdLib/BsdSocketLib/send.c54
-rw-r--r--StdLib/BsdSocketLib/sendto.c112
-rw-r--r--StdLib/BsdSocketLib/sethostname.c117
-rw-r--r--StdLib/BsdSocketLib/setsockopt.c57
-rw-r--r--StdLib/BsdSocketLib/shutdown.c73
-rw-r--r--StdLib/BsdSocketLib/socket.c301
-rw-r--r--StdLib/BsdSocketLib/write.c53
-rw-r--r--StdLib/Contributions.txt218
-rw-r--r--StdLib/Efi/StdLib/etc/host.conf4
-rw-r--r--StdLib/Efi/StdLib/etc/hosts9
-rw-r--r--StdLib/Efi/StdLib/etc/networks3
-rw-r--r--StdLib/Efi/StdLib/etc/protocols59
-rw-r--r--StdLib/Efi/StdLib/etc/resolv.conf19
-rw-r--r--StdLib/Efi/StdLib/etc/services576
-rw-r--r--StdLib/EfiSocketLib/DxeSupport.c228
-rw-r--r--StdLib/EfiSocketLib/EfiSocketLib.inf70
-rw-r--r--StdLib/EfiSocketLib/Init.c117
-rw-r--r--StdLib/EfiSocketLib/Ip4.c1380
-rw-r--r--StdLib/EfiSocketLib/ReleaseNotes.txt34
-rw-r--r--StdLib/EfiSocketLib/Service.c479
-rw-r--r--StdLib/EfiSocketLib/Socket.c5795
-rw-r--r--StdLib/EfiSocketLib/Socket.h1688
-rw-r--r--StdLib/EfiSocketLib/Tcp4.c2432
-rw-r--r--StdLib/EfiSocketLib/Tcp6.c2596
-rw-r--r--StdLib/EfiSocketLib/Udp4.c1232
-rw-r--r--StdLib/EfiSocketLib/Udp6.c1379
-rw-r--r--StdLib/EfiSocketLib/UseEfiSocketLib.c376
-rw-r--r--StdLib/Fixes.txt41
-rw-r--r--StdLib/ISSUES.txt62
-rw-r--r--StdLib/Include/Aarch64/arm-gcc.h110
-rw-r--r--StdLib/Include/Aarch64/machine/ansi.h106
-rw-r--r--StdLib/Include/Aarch64/machine/bswap.h13
-rw-r--r--StdLib/Include/Aarch64/machine/byte_swap.h63
-rw-r--r--StdLib/Include/Aarch64/machine/endian.h3
-rw-r--r--StdLib/Include/Aarch64/machine/endian_machdep.h3
-rw-r--r--StdLib/Include/Aarch64/machine/fenv.h39
-rw-r--r--StdLib/Include/Aarch64/machine/float.h59
-rw-r--r--StdLib/Include/Aarch64/machine/ieee.h31
-rw-r--r--StdLib/Include/Aarch64/machine/ieeefp.h45
-rw-r--r--StdLib/Include/Aarch64/machine/int_const.h63
-rw-r--r--StdLib/Include/Aarch64/machine/int_limits.h127
-rw-r--r--StdLib/Include/Aarch64/machine/int_mwgwtypes.h82
-rw-r--r--StdLib/Include/Aarch64/machine/int_types.h61
-rw-r--r--StdLib/Include/Aarch64/machine/limits.h100
-rw-r--r--StdLib/Include/Aarch64/machine/math.h3
-rw-r--r--StdLib/Include/Aarch64/machine/param.h124
-rw-r--r--StdLib/Include/Aarch64/machine/signal.h22
-rw-r--r--StdLib/Include/Aarch64/machine/types.h82
-rw-r--r--StdLib/Include/Aarch64/milieu.h52
-rw-r--r--StdLib/Include/Aarch64/softfloat.h316
-rw-r--r--StdLib/Include/Arm/arm-gcc.h114
-rw-r--r--StdLib/Include/Arm/machine/_math.h18
-rw-r--r--StdLib/Include/Arm/machine/ansi.h106
-rw-r--r--StdLib/Include/Arm/machine/asm.h167
-rw-r--r--StdLib/Include/Arm/machine/atomic.h102
-rw-r--r--StdLib/Include/Arm/machine/bswap.h11
-rw-r--r--StdLib/Include/Arm/machine/byte_swap.h63
-rw-r--r--StdLib/Include/Arm/machine/cpufunc.h558
-rw-r--r--StdLib/Include/Arm/machine/endian.h3
-rw-r--r--StdLib/Include/Arm/machine/endian_machdep.h8
-rw-r--r--StdLib/Include/Arm/machine/fenv.h55
-rw-r--r--StdLib/Include/Arm/machine/float.h31
-rw-r--r--StdLib/Include/Arm/machine/frame.h123
-rw-r--r--StdLib/Include/Arm/machine/ieee.h13
-rw-r--r--StdLib/Include/Arm/machine/ieeefp.h58
-rw-r--r--StdLib/Include/Arm/machine/int_const.h63
-rw-r--r--StdLib/Include/Arm/machine/int_limits.h127
-rw-r--r--StdLib/Include/Arm/machine/int_mwgwtypes.h82
-rw-r--r--StdLib/Include/Arm/machine/int_types.h61
-rw-r--r--StdLib/Include/Arm/machine/limits.h95
-rw-r--r--StdLib/Include/Arm/machine/lock.h89
-rw-r--r--StdLib/Include/Arm/machine/math.h3
-rw-r--r--StdLib/Include/Arm/machine/mcontext.h114
-rw-r--r--StdLib/Include/Arm/machine/param.h137
-rw-r--r--StdLib/Include/Arm/machine/proc.h55
-rw-r--r--StdLib/Include/Arm/machine/signal.h22
-rw-r--r--StdLib/Include/Arm/machine/types.h82
-rw-r--r--StdLib/Include/Arm/milieu.h38
-rw-r--r--StdLib/Include/Arm/softfloat.h316
-rw-r--r--StdLib/Include/Containers/Fifo.h208
-rw-r--r--StdLib/Include/Containers/ModuloUtil.h105
-rw-r--r--StdLib/Include/Efi/EfiSocketLib.h752
-rw-r--r--StdLib/Include/Ia32/machine/_math.h18
-rw-r--r--StdLib/Include/Ia32/machine/ansi.h106
-rw-r--r--StdLib/Include/Ia32/machine/asm.h208
-rw-r--r--StdLib/Include/Ia32/machine/bswap.h13
-rw-r--r--StdLib/Include/Ia32/machine/byte_swap.h79
-rw-r--r--StdLib/Include/Ia32/machine/endian.h3
-rw-r--r--StdLib/Include/Ia32/machine/endian_machdep.h3
-rw-r--r--StdLib/Include/Ia32/machine/float.h3
-rw-r--r--StdLib/Include/Ia32/machine/ieee.h3
-rw-r--r--StdLib/Include/Ia32/machine/int_const.h63
-rw-r--r--StdLib/Include/Ia32/machine/int_limits.h141
-rw-r--r--StdLib/Include/Ia32/machine/int_mwgwtypes.h82
-rw-r--r--StdLib/Include/Ia32/machine/int_types.h61
-rw-r--r--StdLib/Include/Ia32/machine/limits.h33
-rw-r--r--StdLib/Include/Ia32/machine/math.h3
-rw-r--r--StdLib/Include/Ia32/machine/param.h148
-rw-r--r--StdLib/Include/Ia32/machine/signal.h22
-rw-r--r--StdLib/Include/Ia32/machine/types.h81
-rw-r--r--StdLib/Include/Ipf/machine/_regset.h277
-rw-r--r--StdLib/Include/Ipf/machine/acpi_func.h107
-rw-r--r--StdLib/Include/Ipf/machine/acpi_machdep.h3
-rw-r--r--StdLib/Include/Ipf/machine/acpica_machdep.h1
-rw-r--r--StdLib/Include/Ipf/machine/ansi.h107
-rw-r--r--StdLib/Include/Ipf/machine/aout_machdep.h36
-rw-r--r--StdLib/Include/Ipf/machine/asm.h185
-rw-r--r--StdLib/Include/Ipf/machine/bootinfo.h52
-rw-r--r--StdLib/Include/Ipf/machine/bswap.h8
-rw-r--r--StdLib/Include/Ipf/machine/cdefs.h11
-rw-r--r--StdLib/Include/Ipf/machine/cpu.h180
-rw-r--r--StdLib/Include/Ipf/machine/cpu_counter.h78
-rw-r--r--StdLib/Include/Ipf/machine/db_machdep.h202
-rw-r--r--StdLib/Include/Ipf/machine/dig64.h92
-rw-r--r--StdLib/Include/Ipf/machine/disklabel.h73
-rw-r--r--StdLib/Include/Ipf/machine/efi.h165
-rw-r--r--StdLib/Include/Ipf/machine/elf_machdep.h150
-rw-r--r--StdLib/Include/Ipf/machine/endian.h3
-rw-r--r--StdLib/Include/Ipf/machine/endian_machdep.h3
-rw-r--r--StdLib/Include/Ipf/machine/float.h30
-rw-r--r--StdLib/Include/Ipf/machine/ia64_cpu.h427
-rw-r--r--StdLib/Include/Ipf/machine/ieee.h2
-rw-r--r--StdLib/Include/Ipf/machine/ieeefp.h48
-rw-r--r--StdLib/Include/Ipf/machine/int_const.h64
-rw-r--r--StdLib/Include/Ipf/machine/int_fmtio.h219
-rw-r--r--StdLib/Include/Ipf/machine/int_limits.h134
-rw-r--r--StdLib/Include/Ipf/machine/int_mwgwtypes.h83
-rw-r--r--StdLib/Include/Ipf/machine/int_types.h74
-rw-r--r--StdLib/Include/Ipf/machine/intr.h60
-rw-r--r--StdLib/Include/Ipf/machine/intrcnt.h43
-rw-r--r--StdLib/Include/Ipf/machine/limits.h89
-rw-r--r--StdLib/Include/Ipf/machine/loadfile_machdep.h97
-rw-r--r--StdLib/Include/Ipf/machine/math.h6
-rw-r--r--StdLib/Include/Ipf/machine/mca_machdep.h248
-rw-r--r--StdLib/Include/Ipf/machine/md_var.h95
-rw-r--r--StdLib/Include/Ipf/machine/pal.h111
-rw-r--r--StdLib/Include/Ipf/machine/param.h143
-rw-r--r--StdLib/Include/Ipf/machine/pcb.h78
-rw-r--r--StdLib/Include/Ipf/machine/pmap.h162
-rw-r--r--StdLib/Include/Ipf/machine/pte.h110
-rw-r--r--StdLib/Include/Ipf/machine/ptrace.h40
-rw-r--r--StdLib/Include/Ipf/machine/reg.h53
-rw-r--r--StdLib/Include/Ipf/machine/sal.h144
-rw-r--r--StdLib/Include/Ipf/machine/setjmp.h101
-rw-r--r--StdLib/Include/Ipf/machine/signal.h22
-rw-r--r--StdLib/Include/Ipf/machine/smp.h40
-rw-r--r--StdLib/Include/Ipf/machine/ssc.h18
-rw-r--r--StdLib/Include/Ipf/machine/stdarg.h61
-rw-r--r--StdLib/Include/Ipf/machine/types.h64
-rw-r--r--StdLib/Include/Ipf/machine/varargs.h52
-rw-r--r--StdLib/Include/Ipf/machine/vmparam.h132
-rw-r--r--StdLib/Include/Ipf/machine/wchar_limits.h42
-rw-r--r--StdLib/Include/Lua/lauxlib.h212
-rw-r--r--StdLib/Include/Lua/lua.h444
-rw-r--r--StdLib/Include/Lua/luaconf.h550
-rw-r--r--StdLib/Include/Lua/lualib.h55
-rw-r--r--StdLib/Include/Protocol/EfiSocket.h650
-rw-r--r--StdLib/Include/X64/machine/ansi.h106
-rw-r--r--StdLib/Include/X64/machine/asm.h146
-rw-r--r--StdLib/Include/X64/machine/atomic.h95
-rw-r--r--StdLib/Include/X64/machine/bswap.h13
-rw-r--r--StdLib/Include/X64/machine/byte_swap.h71
-rw-r--r--StdLib/Include/X64/machine/endian.h3
-rw-r--r--StdLib/Include/X64/machine/endian_machdep.h3
-rw-r--r--StdLib/Include/X64/machine/float.h3
-rw-r--r--StdLib/Include/X64/machine/fpu.h103
-rw-r--r--StdLib/Include/X64/machine/ieee.h3
-rw-r--r--StdLib/Include/X64/machine/int_const.h63
-rw-r--r--StdLib/Include/X64/machine/int_fmtio.h219
-rw-r--r--StdLib/Include/X64/machine/int_limits.h135
-rw-r--r--StdLib/Include/X64/machine/int_mwgwtypes.h82
-rw-r--r--StdLib/Include/X64/machine/int_types.h73
-rw-r--r--StdLib/Include/X64/machine/limits.h40
-rw-r--r--StdLib/Include/X64/machine/math.h3
-rw-r--r--StdLib/Include/X64/machine/param.h105
-rw-r--r--StdLib/Include/X64/machine/signal.h22
-rw-r--r--StdLib/Include/X64/machine/types.h74
-rw-r--r--StdLib/Include/arpa/ftp.h109
-rw-r--r--StdLib/Include/arpa/inet.h105
-rw-r--r--StdLib/Include/arpa/nameser.h598
-rw-r--r--StdLib/Include/arpa/nameser_compat.h236
-rw-r--r--StdLib/Include/arpa/telnet.h340
-rw-r--r--StdLib/Include/assert.h82
-rw-r--r--StdLib/Include/ctype.h241
-rw-r--r--StdLib/Include/dirent.h106
-rw-r--r--StdLib/Include/err.h25
-rw-r--r--StdLib/Include/errno.h174
-rw-r--r--StdLib/Include/fcntl.h1
-rw-r--r--StdLib/Include/float.h16
-rw-r--r--StdLib/Include/glob.h109
-rw-r--r--StdLib/Include/ieeefp.h46
-rw-r--r--StdLib/Include/inttypes.h63
-rw-r--r--StdLib/Include/iso646.h32
-rw-r--r--StdLib/Include/langinfo.h91
-rw-r--r--StdLib/Include/libgen.h14
-rw-r--r--StdLib/Include/limits.h115
-rw-r--r--StdLib/Include/locale.h194
-rw-r--r--StdLib/Include/math.h442
-rw-r--r--StdLib/Include/net/if.h227
-rw-r--r--StdLib/Include/net/if_dl.h86
-rw-r--r--StdLib/Include/net/radix.h170
-rw-r--r--StdLib/Include/net/route.h292
-rw-r--r--StdLib/Include/net/servent.h60
-rw-r--r--StdLib/Include/netatalk/at.h92
-rw-r--r--StdLib/Include/netdb.h270
-rw-r--r--StdLib/Include/netinet/in.h557
-rw-r--r--StdLib/Include/netinet/in_systm.h62
-rw-r--r--StdLib/Include/netinet/ip.h197
-rw-r--r--StdLib/Include/netinet/tcp.h143
-rw-r--r--StdLib/Include/netinet6/in6.h791
-rw-r--r--StdLib/Include/netns/ns.h157
-rw-r--r--StdLib/Include/nl_types.h98
-rw-r--r--StdLib/Include/nsswitch.h237
-rw-r--r--StdLib/Include/paths.h93
-rw-r--r--StdLib/Include/pwd.h145
-rw-r--r--StdLib/Include/resolv.h297
-rw-r--r--StdLib/Include/setjmp.h65
-rw-r--r--StdLib/Include/signal.h86
-rw-r--r--StdLib/Include/stdarg.h146
-rw-r--r--StdLib/Include/stdbool.h37
-rw-r--r--StdLib/Include/stddef.h68
-rw-r--r--StdLib/Include/stdint.h1
-rw-r--r--StdLib/Include/stdio.h1620
-rw-r--r--StdLib/Include/stdlib.h951
-rw-r--r--StdLib/Include/string.h493
-rw-r--r--StdLib/Include/stringlist.h65
-rw-r--r--StdLib/Include/strings.h56
-rw-r--r--StdLib/Include/sys/EfiCdefs.h376
-rw-r--r--StdLib/Include/sys/EfiSysCall.h350
-rw-r--r--StdLib/Include/sys/_ctype.h68
-rw-r--r--StdLib/Include/sys/_posix.h97
-rw-r--r--StdLib/Include/sys/ansi.h63
-rw-r--r--StdLib/Include/sys/bswap.h77
-rw-r--r--StdLib/Include/sys/callout.h131
-rw-r--r--StdLib/Include/sys/cdefs.h15
-rw-r--r--StdLib/Include/sys/cdefs_aout.h136
-rw-r--r--StdLib/Include/sys/dirent.h144
-rw-r--r--StdLib/Include/sys/endian.h309
-rw-r--r--StdLib/Include/sys/errno.h152
-rw-r--r--StdLib/Include/sys/fcntl.h200
-rw-r--r--StdLib/Include/sys/fd_set.h107
-rw-r--r--StdLib/Include/sys/featuretest.h73
-rw-r--r--StdLib/Include/sys/file.h102
-rw-r--r--StdLib/Include/sys/filio.h61
-rw-r--r--StdLib/Include/sys/float_ieee754.h105
-rw-r--r--StdLib/Include/sys/ieee754.h152
-rw-r--r--StdLib/Include/sys/inttypes.h52
-rw-r--r--StdLib/Include/sys/ioccom.h68
-rw-r--r--StdLib/Include/sys/ioctl.h101
-rw-r--r--StdLib/Include/sys/localedef.h100
-rw-r--r--StdLib/Include/sys/param.h321
-rw-r--r--StdLib/Include/sys/poll.h91
-rw-r--r--StdLib/Include/sys/pool.h311
-rw-r--r--StdLib/Include/sys/resource.h143
-rw-r--r--StdLib/Include/sys/select.h52
-rw-r--r--StdLib/Include/sys/signal.h68
-rw-r--r--StdLib/Include/sys/sigtypes.h123
-rw-r--r--StdLib/Include/sys/socket.h571
-rw-r--r--StdLib/Include/sys/sockio.h100
-rw-r--r--StdLib/Include/sys/stat.h217
-rw-r--r--StdLib/Include/sys/stdint.h107
-rw-r--r--StdLib/Include/sys/sysctl.h505
-rw-r--r--StdLib/Include/sys/syslimits.h67
-rw-r--r--StdLib/Include/sys/termios.h428
-rw-r--r--StdLib/Include/sys/time.h200
-rw-r--r--StdLib/Include/sys/types.h301
-rw-r--r--StdLib/Include/sys/uio.h124
-rw-r--r--StdLib/Include/sys/unistd.h95
-rw-r--r--StdLib/Include/sys/wait.h170
-rw-r--r--StdLib/Include/sysexits.h122
-rw-r--r--StdLib/Include/time.h434
-rw-r--r--StdLib/Include/unistd.h242
-rw-r--r--StdLib/Include/utime.h66
-rw-r--r--StdLib/Include/wchar.h1552
-rw-r--r--StdLib/Include/wctype.h343
-rw-r--r--StdLib/Include/x86/float.h35
-rw-r--r--StdLib/Include/x86/ieee.h107
-rw-r--r--StdLib/Include/x86/limits.h67
-rw-r--r--StdLib/Include/x86/math.h4
-rw-r--r--StdLib/LibC/CRT/Gcc.c195
-rw-r--r--StdLib/LibC/CRT/Ia32/ashrdi3.S66
-rw-r--r--StdLib/LibC/CRT/Ia32/lldiv.c97
-rw-r--r--StdLib/LibC/CRT/Ia32/lldvrm.c100
-rw-r--r--StdLib/LibC/CRT/Ia32/llmul.c79
-rw-r--r--StdLib/LibC/CRT/Ia32/llrem.c93
-rw-r--r--StdLib/LibC/CRT/Ia32/llshl.c54
-rw-r--r--StdLib/LibC/CRT/Ia32/llshr.c58
-rw-r--r--StdLib/LibC/CRT/Ia32/mulll.S77
-rw-r--r--StdLib/LibC/CRT/Ia32/shldi3.S62
-rw-r--r--StdLib/LibC/CRT/Ia32/udivdi3.S83
-rw-r--r--StdLib/LibC/CRT/Ia32/ulldiv.c88
-rw-r--r--StdLib/LibC/CRT/Ia32/ulldvrm.c100
-rw-r--r--StdLib/LibC/CRT/Ia32/ullrem.c93
-rw-r--r--StdLib/LibC/CRT/Ia32/ullshr.c57
-rw-r--r--StdLib/LibC/CRT/Ia32/umoddi3.S89
-rw-r--r--StdLib/LibC/Containers/Common/ModuloUtil.c149
-rw-r--r--StdLib/LibC/Containers/ContainerLib.inf46
-rw-r--r--StdLib/LibC/Containers/Queues/Fifo.c525
-rw-r--r--StdLib/LibC/Ctype/CClass.c271
-rw-r--r--StdLib/LibC/Ctype/CConv.c70
-rw-r--r--StdLib/LibC/Ctype/Ctype.inf50
-rw-r--r--StdLib/LibC/Ctype/iCtype.c308
-rw-r--r--StdLib/LibC/LibC.inf122
-rw-r--r--StdLib/LibC/Locale/Locale.inf64
-rw-r--r--StdLib/LibC/Locale/__mb_cur_max.c39
-rw-r--r--StdLib/LibC/Locale/__wctoint.h79
-rw-r--r--StdLib/LibC/Locale/_def_messages.c24
-rw-r--r--StdLib/LibC/Locale/_def_monetary.c42
-rw-r--r--StdLib/LibC/Locale/_def_numeric.c23
-rw-r--r--StdLib/LibC/Locale/_def_time.c42
-rw-r--r--StdLib/LibC/Locale/_wcstod.h126
-rw-r--r--StdLib/LibC/Locale/_wcstol.h153
-rw-r--r--StdLib/LibC/Locale/_wcstoul.h133
-rw-r--r--StdLib/LibC/Locale/aliasname.c129
-rw-r--r--StdLib/LibC/Locale/aliasname_local.h29
-rw-r--r--StdLib/LibC/Locale/ctypeio.c186
-rw-r--r--StdLib/LibC/Locale/ctypeio.h35
-rw-r--r--StdLib/LibC/Locale/iswctype_sb.c234
-rw-r--r--StdLib/LibC/Locale/localeconv.c85
-rw-r--r--StdLib/LibC/Locale/multibyte_Utf8.c1008
-rw-r--r--StdLib/LibC/Locale/multibyte_sb.c287
-rw-r--r--StdLib/LibC/Locale/nl_langinfo.c125
-rw-r--r--StdLib/LibC/Locale/rune.h100
-rw-r--r--StdLib/LibC/Locale/runetype.h221
-rw-r--r--StdLib/LibC/Locale/setlocale.c424
-rw-r--r--StdLib/LibC/Locale/setlocale1.c61
-rw-r--r--StdLib/LibC/Locale/setlocale32.c46
-rw-r--r--StdLib/LibC/Locale/wcscoll.c47
-rw-r--r--StdLib/LibC/Locale/wcsftime.c109
-rw-r--r--StdLib/LibC/Locale/wcstod.c51
-rw-r--r--StdLib/LibC/Locale/wcstof.c53
-rw-r--r--StdLib/LibC/Locale/wcstoimax.c59
-rw-r--r--StdLib/LibC/Locale/wcstol.c58
-rw-r--r--StdLib/LibC/Locale/wcstold.c53
-rw-r--r--StdLib/LibC/Locale/wcstoll.c58
-rw-r--r--StdLib/LibC/Locale/wcstoul.c58
-rw-r--r--StdLib/LibC/Locale/wcstoull.c58
-rw-r--r--StdLib/LibC/Locale/wcstoumax.c59
-rw-r--r--StdLib/LibC/Locale/wcsxfrm.c66
-rw-r--r--StdLib/LibC/Main/Arm/fixunsdfsi.c74
-rw-r--r--StdLib/LibC/Main/Arm/floatunsidf.c71
-rw-r--r--StdLib/LibC/Main/Arm/flt_rounds.c82
-rw-r--r--StdLib/LibC/Main/Arm/fp_lib.h282
-rw-r--r--StdLib/LibC/Main/Arm/int_endianness.h71
-rw-r--r--StdLib/LibC/Main/Arm/int_lib.h105
-rw-r--r--StdLib/LibC/Main/Arm/int_types.h170
-rw-r--r--StdLib/LibC/Main/Arm/int_util.h68
-rw-r--r--StdLib/LibC/Main/ByteSwap.c72
-rw-r--r--StdLib/LibC/Main/HtoNtoH.c90
-rw-r--r--StdLib/LibC/Main/Ia32/fpu_rmode.S22
-rw-r--r--StdLib/LibC/Main/Ia32/fpu_rmode.asm46
-rw-r--r--StdLib/LibC/Main/Ia32/ftol2.objbin2320 -> 0 bytes
-rw-r--r--StdLib/LibC/Main/Ia32/isinfl.c68
-rw-r--r--StdLib/LibC/Main/Ia32/isnanl.c69
-rw-r--r--StdLib/LibC/Main/Ipf/FpuRmode.s12
-rw-r--r--StdLib/LibC/Main/Ipf/flt_rounds.c25
-rw-r--r--StdLib/LibC/Main/Main.c210
-rw-r--r--StdLib/LibC/Main/X64/fpu_rmode.S20
-rw-r--r--StdLib/LibC/Main/X64/fpu_rmode.asm41
-rw-r--r--StdLib/LibC/Main/X64/isinfl.c63
-rw-r--r--StdLib/LibC/Main/X64/isnanl.c64
-rw-r--r--StdLib/LibC/Main/assert.c57
-rw-r--r--StdLib/LibC/Main/bswap16.c22
-rw-r--r--StdLib/LibC/Main/bswap32.c25
-rw-r--r--StdLib/LibC/Main/bswap64.c44
-rw-r--r--StdLib/LibC/Main/errno.c19
-rw-r--r--StdLib/LibC/Main/infinityf_ieee754.c20
-rw-r--r--StdLib/LibC/Main/isinfd_ieee754.c68
-rw-r--r--StdLib/LibC/Main/isinff_ieee754.c63
-rw-r--r--StdLib/LibC/Main/isnand_ieee754.c68
-rw-r--r--StdLib/LibC/Main/isnanf_ieee754.c63
-rw-r--r--StdLib/LibC/Main/longjmp.c20
-rw-r--r--StdLib/LibC/Main/x86flt_rounds.c22
-rw-r--r--StdLib/LibC/Math/Math.inf101
-rw-r--r--StdLib/LibC/Math/e_acos.c122
-rw-r--r--StdLib/LibC/Math/e_asin.c120
-rw-r--r--StdLib/LibC/Math/e_atan2.c128
-rw-r--r--StdLib/LibC/Math/e_cosh.c91
-rw-r--r--StdLib/LibC/Math/e_exp.c167
-rw-r--r--StdLib/LibC/Math/e_fmod.c138
-rw-r--r--StdLib/LibC/Math/e_log.c155
-rw-r--r--StdLib/LibC/Math/e_log10.c106
-rw-r--r--StdLib/LibC/Math/e_log2.c85
-rw-r--r--StdLib/LibC/Math/e_pow.c323
-rw-r--r--StdLib/LibC/Math/e_rem_pio2.c169
-rw-r--r--StdLib/LibC/Math/e_sinh.c79
-rw-r--r--StdLib/LibC/Math/e_sqrt.c464
-rw-r--r--StdLib/LibC/Math/k_cos.c89
-rw-r--r--StdLib/LibC/Math/k_rem_pio2.c305
-rw-r--r--StdLib/LibC/Math/k_sin.c72
-rw-r--r--StdLib/LibC/Math/k_tan.c156
-rw-r--r--StdLib/LibC/Math/math_private.h229
-rw-r--r--StdLib/LibC/Math/s_atan.c120
-rw-r--r--StdLib/LibC/Math/s_ceil.c74
-rw-r--r--StdLib/LibC/Math/s_copysign.c35
-rw-r--r--StdLib/LibC/Math/s_cos.c79
-rw-r--r--StdLib/LibC/Math/s_expm1.c228
-rw-r--r--StdLib/LibC/Math/s_fabs.c32
-rw-r--r--StdLib/LibC/Math/s_finite.c32
-rw-r--r--StdLib/LibC/Math/s_floor.c74
-rw-r--r--StdLib/LibC/Math/s_frexp.c52
-rw-r--r--StdLib/LibC/Math/s_infinity.c27
-rw-r--r--StdLib/LibC/Math/s_ldexp.c29
-rw-r--r--StdLib/LibC/Math/s_modf.c76
-rw-r--r--StdLib/LibC/Math/s_scalbn.c60
-rw-r--r--StdLib/LibC/Math/s_sin.c79
-rw-r--r--StdLib/LibC/Math/s_tan.c73
-rw-r--r--StdLib/LibC/Math/s_tanh.c79
-rw-r--r--StdLib/LibC/Math/w_acos.c40
-rw-r--r--StdLib/LibC/Math/w_asin.c41
-rw-r--r--StdLib/LibC/Math/w_atan2.c40
-rw-r--r--StdLib/LibC/Math/w_cosh.c39
-rw-r--r--StdLib/LibC/Math/w_exp.c46
-rw-r--r--StdLib/LibC/Math/w_fmod.c40
-rw-r--r--StdLib/LibC/Math/w_log.c40
-rw-r--r--StdLib/LibC/Math/w_log10.c43
-rw-r--r--StdLib/LibC/Math/w_log2.c43
-rw-r--r--StdLib/LibC/Math/w_pow.c62
-rw-r--r--StdLib/LibC/Math/w_sinh.c39
-rw-r--r--StdLib/LibC/Math/w_sqrt.c39
-rw-r--r--StdLib/LibC/NetUtil/NetUtil.inf50
-rw-r--r--StdLib/LibC/NetUtil/inet_addr.c225
-rw-r--r--StdLib/LibC/NetUtil/inet_lnaof.c70
-rw-r--r--StdLib/LibC/NetUtil/inet_makeaddr.c74
-rw-r--r--StdLib/LibC/NetUtil/inet_netof.c69
-rw-r--r--StdLib/LibC/NetUtil/inet_network.c120
-rw-r--r--StdLib/LibC/NetUtil/inet_ntoa.c69
-rw-r--r--StdLib/LibC/NetUtil/inet_ntop.c238
-rw-r--r--StdLib/LibC/Signal/Signal.c93
-rw-r--r--StdLib/LibC/Signal/Signal.inf39
-rw-r--r--StdLib/LibC/Softfloat/Arm/__aeabi_dcmpeq.c37
-rw-r--r--StdLib/LibC/Softfloat/Arm/__aeabi_dcmpge.c35
-rw-r--r--StdLib/LibC/Softfloat/Arm/__aeabi_dcmpgt.c37
-rw-r--r--StdLib/LibC/Softfloat/Arm/__aeabi_dcmple.c37
-rw-r--r--StdLib/LibC/Softfloat/Arm/__aeabi_dcmplt.c37
-rw-r--r--StdLib/LibC/Softfloat/Arm/__aeabi_dcmpun.c42
-rw-r--r--StdLib/LibC/Softfloat/Arm/__aeabi_fcmpeq.c37
-rw-r--r--StdLib/LibC/Softfloat/Arm/__aeabi_fcmpge.c37
-rw-r--r--StdLib/LibC/Softfloat/Arm/__aeabi_fcmpgt.c37
-rw-r--r--StdLib/LibC/Softfloat/Arm/__aeabi_fcmple.c37
-rw-r--r--StdLib/LibC/Softfloat/Arm/__aeabi_fcmplt.c37
-rw-r--r--StdLib/LibC/Softfloat/Arm/__aeabi_fcmpun.c42
-rw-r--r--StdLib/LibC/Softfloat/Makefile.inc42
-rw-r--r--StdLib/LibC/Softfloat/README.NetBSD8
-rw-r--r--StdLib/LibC/Softfloat/README.txt39
-rw-r--r--StdLib/LibC/Softfloat/Softfloat.inf74
-rw-r--r--StdLib/LibC/Softfloat/bits32/softfloat-macros648
-rw-r--r--StdLib/LibC/Softfloat/bits32/softfloat.c2355
-rw-r--r--StdLib/LibC/Softfloat/bits64/softfloat-macros745
-rw-r--r--StdLib/LibC/Softfloat/bits64/softfloat.c5602
-rw-r--r--StdLib/LibC/Softfloat/eqdf2.c38
-rw-r--r--StdLib/LibC/Softfloat/eqsf2.c38
-rw-r--r--StdLib/LibC/Softfloat/eqtf2.c40
-rw-r--r--StdLib/LibC/Softfloat/fpgetmask.c55
-rw-r--r--StdLib/LibC/Softfloat/fpgetround.c55
-rw-r--r--StdLib/LibC/Softfloat/fpgetsticky.c55
-rw-r--r--StdLib/LibC/Softfloat/fpsetmask.c60
-rw-r--r--StdLib/LibC/Softfloat/fpsetround.c60
-rw-r--r--StdLib/LibC/Softfloat/fpsetsticky.c60
-rw-r--r--StdLib/LibC/Softfloat/gedf2.c38
-rw-r--r--StdLib/LibC/Softfloat/gesf2.c38
-rw-r--r--StdLib/LibC/Softfloat/getf2.c40
-rw-r--r--StdLib/LibC/Softfloat/gexf2.c39
-rw-r--r--StdLib/LibC/Softfloat/gtdf2.c36
-rw-r--r--StdLib/LibC/Softfloat/gtsf2.c36
-rw-r--r--StdLib/LibC/Softfloat/gttf2.c40
-rw-r--r--StdLib/LibC/Softfloat/gtxf2.c39
-rw-r--r--StdLib/LibC/Softfloat/ledf2.c36
-rw-r--r--StdLib/LibC/Softfloat/lesf2.c36
-rw-r--r--StdLib/LibC/Softfloat/letf2.c40
-rw-r--r--StdLib/LibC/Softfloat/ltdf2.c36
-rw-r--r--StdLib/LibC/Softfloat/ltsf2.c36
-rw-r--r--StdLib/LibC/Softfloat/lttf2.c40
-rw-r--r--StdLib/LibC/Softfloat/nedf2.c36
-rw-r--r--StdLib/LibC/Softfloat/negdf2.c36
-rw-r--r--StdLib/LibC/Softfloat/negsf2.c36
-rw-r--r--StdLib/LibC/Softfloat/negtf2.c41
-rw-r--r--StdLib/LibC/Softfloat/negxf2.c39
-rw-r--r--StdLib/LibC/Softfloat/nesf2.c36
-rw-r--r--StdLib/LibC/Softfloat/netf2.c40
-rw-r--r--StdLib/LibC/Softfloat/nexf2.c39
-rw-r--r--StdLib/LibC/Softfloat/softfloat-for-gcc.h242
-rw-r--r--StdLib/LibC/Softfloat/softfloat-history.txt52
-rw-r--r--StdLib/LibC/Softfloat/softfloat-source.txt383
-rw-r--r--StdLib/LibC/Softfloat/softfloat-specialize529
-rw-r--r--StdLib/LibC/Softfloat/softfloat.txt372
-rw-r--r--StdLib/LibC/Softfloat/templates/milieu.h48
-rw-r--r--StdLib/LibC/Softfloat/templates/softfloat-specialize464
-rw-r--r--StdLib/LibC/Softfloat/templates/softfloat.h290
-rw-r--r--StdLib/LibC/Softfloat/timesoftfloat.c2641
-rw-r--r--StdLib/LibC/Softfloat/timesoftfloat.txt149
-rw-r--r--StdLib/LibC/Softfloat/unorddf2.c40
-rw-r--r--StdLib/LibC/Softfloat/unordsf2.c40
-rw-r--r--StdLib/LibC/Softfloat/unordtf2.c44
-rw-r--r--StdLib/LibC/StdLib/Bsearch.c105
-rw-r--r--StdLib/LibC/StdLib/Environs.c282
-rw-r--r--StdLib/LibC/StdLib/Malloc.c281
-rw-r--r--StdLib/LibC/StdLib/NumericInt.c498
-rw-r--r--StdLib/LibC/StdLib/Qsort.c205
-rw-r--r--StdLib/LibC/StdLib/Rand.c67
-rw-r--r--StdLib/LibC/StdLib/StdLib.inf69
-rw-r--r--StdLib/LibC/StdLib/Xabs.c36
-rw-r--r--StdLib/LibC/StdLib/Xdiv.c76
-rw-r--r--StdLib/LibC/StdLib/realpath.c54
-rw-r--r--StdLib/LibC/StdLib/setprogname.c64
-rw-r--r--StdLib/LibC/StdLib/strtoimax.c166
-rw-r--r--StdLib/LibC/StdLib/strtoumax.c141
-rw-r--r--StdLib/LibC/Stdio/Stdio.inf147
-rw-r--r--StdLib/LibC/Stdio/clrerr.c65
-rw-r--r--StdLib/LibC/Stdio/fclose.c87
-rw-r--r--StdLib/LibC/Stdio/fdopen.c112
-rw-r--r--StdLib/LibC/Stdio/feof.c72
-rw-r--r--StdLib/LibC/Stdio/ferror.c72
-rw-r--r--StdLib/LibC/Stdio/fflush.c119
-rw-r--r--StdLib/LibC/Stdio/fgetc.c71
-rw-r--r--StdLib/LibC/Stdio/fgetln.c71
-rw-r--r--StdLib/LibC/Stdio/fgetpos.c65
-rw-r--r--StdLib/LibC/Stdio/fgets.c122
-rw-r--r--StdLib/LibC/Stdio/fgetstr.c184
-rw-r--r--StdLib/LibC/Stdio/fgetwc.c117
-rw-r--r--StdLib/LibC/Stdio/fgetws.c101
-rw-r--r--StdLib/LibC/Stdio/fileext.h66
-rw-r--r--StdLib/LibC/Stdio/fileno.c78
-rw-r--r--StdLib/LibC/Stdio/findfp.c215
-rw-r--r--StdLib/LibC/Stdio/flags.c115
-rw-r--r--StdLib/LibC/Stdio/floatio.h55
-rw-r--r--StdLib/LibC/Stdio/flockfile.c192
-rw-r--r--StdLib/LibC/Stdio/fopen.c109
-rw-r--r--StdLib/LibC/Stdio/fparseln.c258
-rw-r--r--StdLib/LibC/Stdio/fprintf.c70
-rw-r--r--StdLib/LibC/Stdio/fpurge.c83
-rw-r--r--StdLib/LibC/Stdio/fputc.c71
-rw-r--r--StdLib/LibC/Stdio/fputs.c85
-rw-r--r--StdLib/LibC/Stdio/fputwc.c113
-rw-r--r--StdLib/LibC/Stdio/fputws.c74
-rw-r--r--StdLib/LibC/Stdio/fread.c100
-rw-r--r--StdLib/LibC/Stdio/freopen.c200
-rw-r--r--StdLib/LibC/Stdio/fscanf.c66
-rw-r--r--StdLib/LibC/Stdio/fseek.c74
-rw-r--r--StdLib/LibC/Stdio/fseeko.c303
-rw-r--r--StdLib/LibC/Stdio/fsetpos.c63
-rw-r--r--StdLib/LibC/Stdio/ftell.c103
-rw-r--r--StdLib/LibC/Stdio/ftello.c100
-rw-r--r--StdLib/LibC/Stdio/funopen.c82
-rw-r--r--StdLib/LibC/Stdio/fvwrite.c229
-rw-r--r--StdLib/LibC/Stdio/fvwrite.h50
-rw-r--r--StdLib/LibC/Stdio/fwalk.c70
-rw-r--r--StdLib/LibC/Stdio/fwide.c83
-rw-r--r--StdLib/LibC/Stdio/fwprintf.c53
-rw-r--r--StdLib/LibC/Stdio/fwrite.c94
-rw-r--r--StdLib/LibC/Stdio/fwscanf.c53
-rw-r--r--StdLib/LibC/Stdio/getc.c88
-rw-r--r--StdLib/LibC/Stdio/getchar.c72
-rw-r--r--StdLib/LibC/Stdio/gets.c80
-rw-r--r--StdLib/LibC/Stdio/gettemp.c177
-rw-r--r--StdLib/LibC/Stdio/getwc.c49
-rw-r--r--StdLib/LibC/Stdio/getwchar.c49
-rw-r--r--StdLib/LibC/Stdio/glue.h47
-rw-r--r--StdLib/LibC/Stdio/local.h113
-rw-r--r--StdLib/LibC/Stdio/makebuf.c138
-rw-r--r--StdLib/LibC/Stdio/mkdtemp.c69
-rw-r--r--StdLib/LibC/Stdio/mkstemp.c76
-rw-r--r--StdLib/LibC/Stdio/mktemp.c71
-rw-r--r--StdLib/LibC/Stdio/perror.c72
-rw-r--r--StdLib/LibC/Stdio/printf.c63
-rw-r--r--StdLib/LibC/Stdio/putc.c88
-rw-r--r--StdLib/LibC/Stdio/putchar.c75
-rw-r--r--StdLib/LibC/Stdio/puts.c85
-rw-r--r--StdLib/LibC/Stdio/putwc.c49
-rw-r--r--StdLib/LibC/Stdio/putwchar.c49
-rw-r--r--StdLib/LibC/Stdio/refill.c159
-rw-r--r--StdLib/LibC/Stdio/remove.c74
-rw-r--r--StdLib/LibC/Stdio/rewind.c65
-rw-r--r--StdLib/LibC/Stdio/rget.c72
-rw-r--r--StdLib/LibC/Stdio/scanf.c64
-rw-r--r--StdLib/LibC/Stdio/setbuf.c63
-rw-r--r--StdLib/LibC/Stdio/setbuffer.c75
-rw-r--r--StdLib/LibC/Stdio/setvbuf.c180
-rw-r--r--StdLib/LibC/Stdio/snprintf.c93
-rw-r--r--StdLib/LibC/Stdio/snprintf_ss.c69
-rw-r--r--StdLib/LibC/Stdio/sprintf.c78
-rw-r--r--StdLib/LibC/Stdio/sscanf.c89
-rw-r--r--StdLib/LibC/Stdio/stdio.c133
-rw-r--r--StdLib/LibC/Stdio/swprintf.c47
-rw-r--r--StdLib/LibC/Stdio/swscanf.c47
-rw-r--r--StdLib/LibC/Stdio/tempnam.c106
-rw-r--r--StdLib/LibC/Stdio/tmpfile.c94
-rw-r--r--StdLib/LibC/Stdio/tmpnam.c70
-rw-r--r--StdLib/LibC/Stdio/ungetc.c180
-rw-r--r--StdLib/LibC/Stdio/ungetwc.c75
-rw-r--r--StdLib/LibC/Stdio/vasprintf.c79
-rw-r--r--StdLib/LibC/Stdio/vfprintf.c2
-rw-r--r--StdLib/LibC/Stdio/vfscanf.c1137
-rw-r--r--StdLib/LibC/Stdio/vfwprintf.c2053
-rw-r--r--StdLib/LibC/Stdio/vfwscanf.c912
-rw-r--r--StdLib/LibC/Stdio/vprintf.c58
-rw-r--r--StdLib/LibC/Stdio/vscanf.c60
-rw-r--r--StdLib/LibC/Stdio/vsnprintf.c85
-rw-r--r--StdLib/LibC/Stdio/vsnprintf_ss.c494
-rw-r--r--StdLib/LibC/Stdio/vsprintf.c74
-rw-r--r--StdLib/LibC/Stdio/vsscanf.c83
-rw-r--r--StdLib/LibC/Stdio/vswprintf.c94
-rw-r--r--StdLib/LibC/Stdio/vswscanf.c100
-rw-r--r--StdLib/LibC/Stdio/vwprintf.c41
-rw-r--r--StdLib/LibC/Stdio/vwscanf.c47
-rw-r--r--StdLib/LibC/Stdio/wbuf.c106
-rw-r--r--StdLib/LibC/Stdio/wcio.h72
-rw-r--r--StdLib/LibC/Stdio/wprintf.c53
-rw-r--r--StdLib/LibC/Stdio/wscanf.c53
-rw-r--r--StdLib/LibC/Stdio/wsetup.c106
-rw-r--r--StdLib/LibC/String/Comparison.c111
-rw-r--r--StdLib/LibC/String/Concatenation.c83
-rw-r--r--StdLib/LibC/String/Copying.c146
-rw-r--r--StdLib/LibC/String/ErrorList.c144
-rw-r--r--StdLib/LibC/String/Misc.c99
-rw-r--r--StdLib/LibC/String/Searching.c262
-rw-r--r--StdLib/LibC/String/String.inf66
-rw-r--r--StdLib/LibC/String/strlcat.c86
-rw-r--r--StdLib/LibC/String/strlcpy.c82
-rw-r--r--StdLib/LibC/String/strncasecmp.c82
-rw-r--r--StdLib/LibC/String/strsep.c82
-rw-r--r--StdLib/LibC/Time/Theory.txt553
-rw-r--r--StdLib/LibC/Time/Time.c765
-rw-r--r--StdLib/LibC/Time/Time.inf56
-rw-r--r--StdLib/LibC/Time/TimeEfi.c110
-rw-r--r--StdLib/LibC/Time/TimeVals.h117
-rw-r--r--StdLib/LibC/Time/ZoneProc.c828
-rw-r--r--StdLib/LibC/Time/gettimeofday.c67
-rw-r--r--StdLib/LibC/Time/itimer.c277
-rw-r--r--StdLib/LibC/Time/strftime.c598
-rw-r--r--StdLib/LibC/Time/strptime.c400
-rw-r--r--StdLib/LibC/Time/timegm.c113
-rw-r--r--StdLib/LibC/Time/tzfile.h145
-rw-r--r--StdLib/LibC/Uefi/Devices/Console/daConsole.c765
-rw-r--r--StdLib/LibC/Uefi/Devices/UefiShell/daShell.c856
-rw-r--r--StdLib/LibC/Uefi/Devices/Utility/DevGenisis.c158
-rw-r--r--StdLib/LibC/Uefi/Devices/Utility/DevSearch.c112
-rw-r--r--StdLib/LibC/Uefi/Devices/Utility/Path.c431
-rw-r--r--StdLib/LibC/Uefi/Devices/daConsole.inf52
-rw-r--r--StdLib/LibC/Uefi/Devices/daShell.inf52
-rw-r--r--StdLib/LibC/Uefi/Devices/daUtility.inf44
-rw-r--r--StdLib/LibC/Uefi/InteractiveIO/CanonRead.c167
-rw-r--r--StdLib/LibC/Uefi/InteractiveIO/IIO.c373
-rw-r--r--StdLib/LibC/Uefi/InteractiveIO/IIO.inf51
-rw-r--r--StdLib/LibC/Uefi/InteractiveIO/IIOecho.c141
-rw-r--r--StdLib/LibC/Uefi/InteractiveIO/IIOechoCtrl.h33
-rw-r--r--StdLib/LibC/Uefi/InteractiveIO/IIOutilities.c290
-rw-r--r--StdLib/LibC/Uefi/InteractiveIO/IIOutilities.h129
-rw-r--r--StdLib/LibC/Uefi/InteractiveIO/IIOwrite.c207
-rw-r--r--StdLib/LibC/Uefi/InteractiveIO/NonCanonRead.c88
-rw-r--r--StdLib/LibC/Uefi/InteractiveIO/TerminalFunctions.c285
-rw-r--r--StdLib/LibC/Uefi/StubFunctions.c92
-rw-r--r--StdLib/LibC/Uefi/SysCalls.c1437
-rw-r--r--StdLib/LibC/Uefi/Uefi.inf53
-rw-r--r--StdLib/LibC/Uefi/Xform.c191
-rw-r--r--StdLib/LibC/Uefi/compat.c843
-rw-r--r--StdLib/LibC/Uefi/select.c256
-rw-r--r--StdLib/LibC/Uefi/writev.c144
-rw-r--r--StdLib/LibC/Wchar/Comparison.c97
-rw-r--r--StdLib/LibC/Wchar/Concatenation.c48
-rw-r--r--StdLib/LibC/Wchar/ConsDecons.c68
-rw-r--r--StdLib/LibC/Wchar/Copying.c80
-rw-r--r--StdLib/LibC/Wchar/Searching.c270
-rw-r--r--StdLib/LibC/Wchar/String.c43
-rw-r--r--StdLib/LibC/Wchar/Wchar.inf56
-rw-r--r--StdLib/LibC/gdtoa/Ipf/strtold.c18
-rw-r--r--StdLib/LibC/gdtoa/_strtof.c46
-rw-r--r--StdLib/LibC/gdtoa/_strtold.c47
-rw-r--r--StdLib/LibC/gdtoa/atof.c22
-rw-r--r--StdLib/LibC/gdtoa/dmisc.c228
-rw-r--r--StdLib/LibC/gdtoa/dtoa.c821
-rw-r--r--StdLib/LibC/gdtoa/gdtoa.c827
-rw-r--r--StdLib/LibC/gdtoa/gdtoa.h168
-rw-r--r--StdLib/LibC/gdtoa/gdtoa.inf82
-rw-r--r--StdLib/LibC/gdtoa/gdtoaimp.h634
-rw-r--r--StdLib/LibC/gdtoa/gethex.c249
-rw-r--r--StdLib/LibC/gdtoa/gmisc.c82
-rw-r--r--StdLib/LibC/gdtoa/hd_init.c58
-rw-r--r--StdLib/LibC/gdtoa/hexnan.c134
-rw-r--r--StdLib/LibC/gdtoa/ldtoa.c113
-rw-r--r--StdLib/LibC/gdtoa/misc.c909
-rw-r--r--StdLib/LibC/gdtoa/smisc.c209
-rw-r--r--StdLib/LibC/gdtoa/strtod.c1035
-rw-r--r--StdLib/LibC/gdtoa/strtodg.c1021
-rw-r--r--StdLib/LibC/gdtoa/strtof.c85
-rw-r--r--StdLib/LibC/gdtoa/strtold_px.c4
-rw-r--r--StdLib/LibC/gdtoa/strtold_subr.c45
-rw-r--r--StdLib/LibC/gdtoa/strtopx.c108
-rw-r--r--StdLib/LibC/gdtoa/sum.c105
-rw-r--r--StdLib/LibC/gdtoa/ulp.c73
-rw-r--r--StdLib/License.txt25
-rw-r--r--StdLib/PosixLib/Err/LibErr.inf42
-rw-r--r--StdLib/PosixLib/Err/warn_err.c99
-rw-r--r--StdLib/PosixLib/Gen/LibGen.inf47
-rw-r--r--StdLib/PosixLib/Gen/access.c118
-rw-r--r--StdLib/PosixLib/Gen/closedir.c88
-rw-r--r--StdLib/PosixLib/Gen/dirname.c105
-rw-r--r--StdLib/PosixLib/Gen/opendir.c136
-rw-r--r--StdLib/PosixLib/Gen/readdir.c136
-rw-r--r--StdLib/PosixLib/Gen/utime.c73
-rw-r--r--StdLib/PosixLib/GetPass/GetPass.c57
-rw-r--r--StdLib/PosixLib/Glob/LibGlob.inf45
-rw-r--r--StdLib/PosixLib/Glob/glob.c1043
-rw-r--r--StdLib/PosixLib/PosixLib.inf59
-rw-r--r--StdLib/PosixLib/Stringlist/LibStringlist.inf41
-rw-r--r--StdLib/PosixLib/Stringlist/stringlist.c155
-rw-r--r--StdLib/ReadMe.txt502
-rw-r--r--StdLib/SocketDxe/ComponentName.c182
-rw-r--r--StdLib/SocketDxe/DriverBinding.c241
-rw-r--r--StdLib/SocketDxe/EntryUnload.c351
-rw-r--r--StdLib/SocketDxe/Socket.h175
-rw-r--r--StdLib/SocketDxe/SocketDxe.inf62
-rw-r--r--StdLib/StdLib.dec49
-rw-r--r--StdLib/StdLib.dsc150
-rw-r--r--StdLib/StdLib.inc135
-rw-r--r--StdLib/UseSocketDxe/UseSocketDxe.c227
-rw-r--r--StdLib/UseSocketDxe/UseSocketDxe.inf45
780 files changed, 0 insertions, 142405 deletions
diff --git a/StdLib/BsdSocketLib/BsdSocketLib.inf b/StdLib/BsdSocketLib/BsdSocketLib.inf
deleted file mode 100644
index df699b19db..0000000000
--- a/StdLib/BsdSocketLib/BsdSocketLib.inf
+++ /dev/null
@@ -1,114 +0,0 @@
-#/** @file
-# Component description file for the socket library.
-#
-# This module implements the socket library.
-# Copyright (c) 2011, Intel Corporation
-#
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#**/
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = BsdSocketLib
- FILE_GUID = E7A79769-DD6E-48f7-B90B-D4C510AC1741
- MODULE_TYPE = BASE
- VERSION_STRING = 1.0
- LIBRARY_CLASS = BsdSocketLib
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF EBC
-#
-
-[Sources.common]
- accept.c
- base64.c
- bind.c
- close.c
- connect.c
- getaddrinfo.c
- gethostbydns.c
- gethostbyht.c
- gethostbynis.c
- gethostname.c
- gethostnamadr.c
- gethostbynis.c
- getnameinfo.c
- getnetbydns.c
- getnetbynis.c
- getnetbyht.c
- getnetnamadr.c
- getpeername.c
- getprotoent.c
- getprotoname.c
- getproto.c
- getservbyname.c
- getservbyport.c
- getservent.c
- getsockname.c
- getsockopt.c
- herror.c
- inet_net_ntop.c
- inet_net_pton.c
- inet_neta.c
- inet_pton.c
- Ip6Addr_Any.c
- Ip6Addr_Loopback.c
- Ip6Addr_NodeLocal_AllNodes.c
- Ip6Addr_LinkLocal_AllNodes.c
- Ip6Addr_LinkLocal_AllRouters.c
- listen.c
- map_v4v6.c
- ns_addr.c
- ns_name.c
- ns_netint.c
- ns_ntoa.c
- ns_parse.c
- ns_print.c
- ns_ttl.c
- nsap_addr.c
- poll.c
- read.c
- recv.c
- recvfrom.c
- res_comp.c
- res_config.h
- res_data.c
- res_debug.c
- res_init.c
- res_mkquery.c
- res_mkupdate.c
- res_query.c
- res_send.c
- res_update.c
- send.c
- sendto.c
- sethostname.c
- setsockopt.c
- shutdown.c
- socket.c
- SocketInternals.h
- write.c
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
-
-[LibraryClasses]
- BaseLib
- BaseMemoryLib
- DebugLib
- DevUtility
- UefiBootServicesTableLib
- UefiLib
-
-[Protocols]
- gEfiSocketServiceBindingProtocolGuid
- gEfiSocketProtocolGuid
diff --git a/StdLib/BsdSocketLib/Ip6Addr_Any.c b/StdLib/BsdSocketLib/Ip6Addr_Any.c
deleted file mode 100644
index b1bbe26100..0000000000
--- a/StdLib/BsdSocketLib/Ip6Addr_Any.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/** @file
- IP6 address: any
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <netinet/in.h>
-
-const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT;
-
diff --git a/StdLib/BsdSocketLib/Ip6Addr_LinkLocal_AllNodes.c b/StdLib/BsdSocketLib/Ip6Addr_LinkLocal_AllNodes.c
deleted file mode 100644
index 358055de4d..0000000000
--- a/StdLib/BsdSocketLib/Ip6Addr_LinkLocal_AllNodes.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/** @file
- IP6 address: link local, all nodes
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <netinet/in.h>
-
-const struct in6_addr in6addr_linklocal_allnodes = IN6ADDR_LINKLOCAL_ALLNODES_INIT;
-
diff --git a/StdLib/BsdSocketLib/Ip6Addr_LinkLocal_AllRouters.c b/StdLib/BsdSocketLib/Ip6Addr_LinkLocal_AllRouters.c
deleted file mode 100644
index ca8b847ee7..0000000000
--- a/StdLib/BsdSocketLib/Ip6Addr_LinkLocal_AllRouters.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/** @file
- IP6 address: link local, all routers
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <netinet/in.h>
-
-const struct in6_addr in6addr_linklocal_allrouters = IN6ADDR_LINKLOCAL_ALLROUTERS_INIT;
-
diff --git a/StdLib/BsdSocketLib/Ip6Addr_Loopback.c b/StdLib/BsdSocketLib/Ip6Addr_Loopback.c
deleted file mode 100644
index cc073f2e63..0000000000
--- a/StdLib/BsdSocketLib/Ip6Addr_Loopback.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/** @file
- IP6 address: loopback
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <netinet/in.h>
-
-const struct in6_addr in6addr_loopback = IN6ADDR_LOOPBACK_INIT;
-
diff --git a/StdLib/BsdSocketLib/Ip6Addr_NodeLocal_AllNodes.c b/StdLib/BsdSocketLib/Ip6Addr_NodeLocal_AllNodes.c
deleted file mode 100644
index b597e11f3c..0000000000
--- a/StdLib/BsdSocketLib/Ip6Addr_NodeLocal_AllNodes.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/** @file
- IP6 address: node local, all nodes
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <netinet/in.h>
-
-const struct in6_addr in6addr_nodelocal_allnodes = IN6ADDR_NODELOCAL_ALLNODES_INIT;
-
diff --git a/StdLib/BsdSocketLib/SocketInternals.h b/StdLib/BsdSocketLib/SocketInternals.h
deleted file mode 100644
index c30f7fb661..0000000000
--- a/StdLib/BsdSocketLib/SocketInternals.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/** @file
- Definitions for the socket library.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef _SOCKET_INTERNALS_H_
-#define _SOCKET_INTERNALS_H_
-
-#include <Uefi.h>
-
-//----------------------------------------------------------------------
-//
-// The following private files are required to support file descriptors
-//
-
-#include <kfile.h>
-#include <MainData.h>
-
-#include <Efi/SysEfi.h>
-
-//
-// End of private files
-//
-//----------------------------------------------------------------------
-
-#include <Library/DebugLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiLib.h>
-
-#include <Protocol/EfiSocket.h>
-#include <Protocol/ServiceBinding.h>
-
-#include <sys/errno.h>
-#include <sys/poll.h>
-#include <sys/EfiSysCall.h>
-#include <sys/socket.h>
-
-//------------------------------------------------------------------------------
-// Support Routines
-//------------------------------------------------------------------------------
-
-/**
- Translate from the socket file descriptor to the socket protocol.
-
- @param [in] s Socket file descriptor returned from ::socket.
-
- @param [in] ppDescriptor Address to receive the descriptor structure
- address for the file
- @param [in] pErrno Address of the errno variable
-
- @return A pointer to the EFI_SOCKET_PROTOCOL structure or NULL if
- an invalid file descriptor was passed in.
-
- **/
-EFI_SOCKET_PROTOCOL *
-BslFdToSocketProtocol (
- int s,
- struct __filedes ** ppDescriptor,
- int * pErrno
- );
-
-/**
- Close the socket
-
- The BslSocketClose routine is called indirectly from the close file
- system routine. This routine closes the socket and returns the
- status to the caller.
-
- @param[in] pDescriptor Descriptor address for the file
-
- @return This routine returns 0 upon success and -1 upon failure.
- In the case of failure, ::errno contains more information.
-
-**/
-int
-EFIAPI
-BslSocketClose (
- struct __filedes * pDescriptor
- );
-
-/**
- Worker routine to close the socket.
-
- @param[in] pSocketProtocol Socket protocol structure address
-
- @param[in] pErrno Address of the ::errno variable
-
- @retval EFI_SUCCESS Successfully closed the socket
-
-**/
-EFI_STATUS
-BslSocketCloseWork (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int * pErrno
- );
-
-/**
- Poll the socket for activity
-
- @param [in] pDescriptor Descriptor address for the file
-
- @param [in] Events Mask of events to detect
-
- @return Detected events for the socket
-
- **/
-short
-EFIAPI
-BslSocketPoll (
- IN struct __filedes * pDescriptor,
- IN short Events
- );
-
-/**
- Build a file descriptor for a socket.
-
- @param [in] pSocketProtocol Socket protocol structure address
-
- @param [in] pErrno Address of the errno variable
-
- @return The file descriptor for the socket or -1 if an error occurs.
-
- **/
-int
-BslSocketProtocolToFd (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int * pErrno
- );
-
-/**
- Read support routine for sockets
-
- The BslSocketRead routine is called indirectly by the read file
- system routine. This routine is typically used for SOCK_STREAM
- because it waits for receive data from the target system specified
- in the ::connect call.
-
- @param [in] pDescriptor Descriptor address for the file
- @param [in] pOffset File offset
- @param [in] LengthInBytes Number of bytes to read
- @param [in] pBuffer Address of the buffer to receive the data
-
- @return The number of bytes read or -1 if an error occurs.
- In the case of an error, ::errno contains more details.
-
-**/
-ssize_t
-EFIAPI
-BslSocketRead (
- struct __filedes *pDescriptor,
- off_t * pOffset,
- size_t LengthInBytes,
- void * pBuffer
- );
-
-/**
- Write support routine for sockets
-
- @param [in] pDescriptor Descriptor address for the file
- @param [in] pOffset File offset
- @param [in] LengthInBytes Number of bytes to write
- @param [in] pBuffer Address of the data
-
- @return The number of bytes written or -1 if an error occurs.
- In the case of an error, ::errno contains more details.
-
-**/
-ssize_t
-EFIAPI
-BslSocketWrite (
- struct __filedes *pDescriptor,
- off_t * pOffset,
- size_t LengthInBytes,
- const void * pBuffer
- );
-
-/**
- Validate the socket's file descriptor
-
- @param [in] pDescriptor Descriptor for the file
-
- @param [in] pErrno Address of the errno variable
-
- @return A pointer to the EFI_SOCKET_PROTOCOL structure or NULL if
- an invalid file descriptor was passed in.
-
- **/
-EFI_SOCKET_PROTOCOL *
-BslValidateSocketFd (
- struct __filedes * pDescriptor,
- int * pErrno
- );
-
-//------------------------------------------------------------------------------
-
-#endif // _SOCKET_INTERNALS_H_
diff --git a/StdLib/BsdSocketLib/Socklib_internals.h b/StdLib/BsdSocketLib/Socklib_internals.h
deleted file mode 100644
index 3e0119fd18..0000000000
--- a/StdLib/BsdSocketLib/Socklib_internals.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- Definitions for the socket library functions that are used internally.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-*/
-
-#ifndef _SOCKLIB_INTERNALS_H_
-#define _SOCKLIB_INTERNALS_H_
-
-void _sethosthtent (int);
-void _endhosthtent (void);
-void _sethostdnsent (int);
-void _endhostdnsent (void);
-void _setnethtent (int);
-void _endnethtent (void);
-void _setnetdnsent (int);
-void _endnetdnsent (void);
-
-struct hostent * _gethostbyhtname (const char *, int);
-struct hostent * _gethostbydnsname (const char *, int);
-struct hostent * _gethostbynisname (const char *, int);
-struct hostent * _gethostbyhtaddr (const char *, int, int);
-struct hostent * _gethostbydnsaddr (const char *, int, int);
-struct hostent * _gethostbynisaddr (const char *, int, int);
-struct netent * _getnetbyhtname (const char *);
-struct netent * _getnetbydnsname (const char *);
-struct netent * _getnetbynisname (const char *);
-struct netent * _getnetbyhtaddr (unsigned long, int);
-struct netent * _getnetbydnsaddr (unsigned long, int);
-struct netent * _getnetbynisaddr (unsigned long, int);
-void _map_v4v6_address (const char *src, char *dst);
-void _map_v4v6_hostent (struct hostent *hp, char **bp, int *len);
-#endif
-
diff --git a/StdLib/BsdSocketLib/accept.c b/StdLib/BsdSocketLib/accept.c
deleted file mode 100644
index 4f0dbac5f9..0000000000
--- a/StdLib/BsdSocketLib/accept.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/** @file
- Implement the accept API.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "SocketInternals.h"
-
-
-/**
- Worker routine for ::accept and ::AcceptNB
-
- @param [in] s Socket file descriptor returned from ::socket.
-
- @param [in] bBlockingAllowed TRUE if this is a blocking call
- @param [in] address Address of a buffer to receive the remote network address.
-
- @param [in, out] address_len Address of a buffer containing the Length in bytes
- of the remote network address buffer. Upon return,
- contains the length of the remote network address.
-
- @return AcceptWork returns zero if successful and -1 when an error occurs.
- In the case of an error, ::errno contains more details.
-
- **/
-int
-AcceptWork (
- int s,
- BOOLEAN bBlockingAllowed,
- struct sockaddr * address,
- socklen_t * address_len
- )
-{
- BOOLEAN bBlocking;
- INT32 NewSocketFd;
- struct __filedes * pDescriptor;
- EFI_SOCKET_PROTOCOL * pNewSocket;
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
- EFI_STATUS Status;
-
- //
- // Assume failure
- //
- NewSocketFd = -1;
-
- //
- // Locate the context for this socket
- //
- pSocketProtocol = BslFdToSocketProtocol ( s,
- &pDescriptor,
- &errno );
- if ( NULL != pSocketProtocol ) {
- //
- // Determine if the operation is blocking
- //
- bBlocking = (BOOLEAN)( 0 == ( pDescriptor->Oflags & O_NONBLOCK ));
- bBlocking &= bBlockingAllowed;
-
- //
- // Attempt to accept a new network connection
- //
- do {
- Status = pSocketProtocol->pfnAccept ( pSocketProtocol,
- address,
- address_len,
- &pNewSocket,
- &errno );
- } while ( bBlocking && ( EFI_NOT_READY == Status ));
-
- //
- // Convert the protocol to a socket
- //
- if ( !EFI_ERROR ( Status )) {
- NewSocketFd = BslSocketProtocolToFd ( pNewSocket, &errno );
- if ( -1 == NewSocketFd ) {
- //
- // Close the socket
- //
- BslSocketCloseWork ( pNewSocket, NULL );
- }
- }
- }
-
- //
- // Return the new socket file descriptor
- //
- return NewSocketFd;
-}
-
-
-/**
- Accept a network connection.
-
- The accept routine waits for a network connection to the socket.
- It returns the remote network address to the caller if requested.
-
- The
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/accept.html">POSIX</a>
- documentation is available online.
-
- @param [in] s Socket file descriptor returned from ::socket.
-
- @param [in] address Address of a buffer to receive the remote network address.
-
- @param [in, out] address_len Address of a buffer containing the Length in bytes
- of the remote network address buffer. Upon return,
- contains the length of the remote network address.
-
- @return The accept routine returns zero if successful and -1 when an error occurs.
- In the case of an error, ::errno contains more details.
-
- **/
-int
-accept (
- int s,
- struct sockaddr * address,
- socklen_t * address_len
- )
-{
- //
- // Wait for the accept call to complete
- //
- return AcceptWork ( s, TRUE, address, address_len );
-}
-
-
-/**
- Non blocking version of ::accept.
-
- @param [in] s Socket file descriptor returned from ::socket.
-
- @param [in] address Address of a buffer to receive the remote network address.
-
- @param [in, out] address_len Address of a buffer containing the Length in bytes
- of the remote network address buffer. Upon return,
- contains the length of the remote network address.
-
- @return This routine returns zero if successful and -1 when an error occurs.
- In the case of an error, ::errno contains more details.
-
- **/
-int
-AcceptNB (
- int s,
- struct sockaddr * address,
- socklen_t * address_len
- )
-{
- //
- // Attempt to accept a network connection
- //
- return AcceptWork ( s, FALSE, address, address_len );
-}
diff --git a/StdLib/BsdSocketLib/base64.c b/StdLib/BsdSocketLib/base64.c
deleted file mode 100644
index 363ee18591..0000000000
--- a/StdLib/BsdSocketLib/base64.c
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * Copyright (c) 1996, 1998 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * Portions Copyright (c) 1995 by International Business Machines, Inc.
- *
- * International Business Machines, Inc. (hereinafter called IBM) grants
- * permission under its copyrights to use, copy, modify, and distribute this
- * Software with or without fee, provided that the above copyright notice and
- * all paragraphs of this notice appear in all copies, and that the name of IBM
- * not be used in connection with the marketing of any product incorporating
- * the Software or modifications thereof, without specific, written prior
- * permission.
- *
- * To the extent it has a right to do so, IBM grants an immunity from suit
- * under its patents, if any, for the use, sale or manufacture of products to
- * the extent that such products are used for performing Domain Name System
- * dynamic updates in TCP/IP networks by means of the Software. No immunity is
- * granted for any product per se or for any other function of any product.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
- * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
- * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-/*
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and
- * its contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- base64.c,v 1.1.1.1 2003/11/19 01:51:25 kyu3 Exp
- */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <ctype.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define Assert(Cond) if (!(Cond)) abort()
-
-static const char Base64[] =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-static const char Pad64 = '=';
-
-/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt)
- The following encoding technique is taken from RFC 1521 by Borenstein
- and Freed. It is reproduced here in a slightly edited form for
- convenience.
-
- A 65-character subset of US-ASCII is used, enabling 6 bits to be
- represented per printable character. (The extra 65th character, "=",
- is used to signify a special processing function.)
-
- The encoding process represents 24-bit groups of input bits as output
- strings of 4 encoded characters. Proceeding from left to right, a
- 24-bit input group is formed by concatenating 3 8-bit input groups.
- These 24 bits are then treated as 4 concatenated 6-bit groups, each
- of which is translated into a single digit in the base64 alphabet.
-
- Each 6-bit group is used as an index into an array of 64 printable
- characters. The character referenced by the index is placed in the
- output string.
-
- Table 1: The Base64 Alphabet
-
- Value Encoding Value Encoding Value Encoding Value Encoding
- 0 A 17 R 34 i 51 z
- 1 B 18 S 35 j 52 0
- 2 C 19 T 36 k 53 1
- 3 D 20 U 37 l 54 2
- 4 E 21 V 38 m 55 3
- 5 F 22 W 39 n 56 4
- 6 G 23 X 40 o 57 5
- 7 H 24 Y 41 p 58 6
- 8 I 25 Z 42 q 59 7
- 9 J 26 a 43 r 60 8
- 10 K 27 b 44 s 61 9
- 11 L 28 c 45 t 62 +
- 12 M 29 d 46 u 63 /
- 13 N 30 e 47 v
- 14 O 31 f 48 w (pad) =
- 15 P 32 g 49 x
- 16 Q 33 h 50 y
-
- Special processing is performed if fewer than 24 bits are available
- at the end of the data being encoded. A full encoding quantum is
- always completed at the end of a quantity. When fewer than 24 input
- bits are available in an input group, zero bits are added (on the
- right) to form an integral number of 6-bit groups. Padding at the
- end of the data is performed using the '=' character.
-
- Since all base64 input is an integral number of octets, only the
- -------------------------------------------------
- following cases can arise:
-
- (1) the final quantum of encoding input is an integral
- multiple of 24 bits; here, the final unit of encoded
- output will be an integral multiple of 4 characters
- with no "=" padding,
- (2) the final quantum of encoding input is exactly 8 bits;
- here, the final unit of encoded output will be two
- characters followed by two "=" padding characters, or
- (3) the final quantum of encoding input is exactly 16 bits;
- here, the final unit of encoded output will be three
- characters followed by one "=" padding character.
- */
-
-int
-b64_ntop(u_char const *src, size_t srclength, char *target, size_t targsize) {
- size_t datalength = 0;
- u_char input[3];
- u_char output[4];
- size_t i;
-
- input[0] = input[1] = input[2] = '\0';
- while (2 < srclength) {
- input[0] = *src++;
- input[1] = *src++;
- input[2] = *src++;
- srclength -= 3;
-
- output[0] = input[0] >> 2;
- output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
- output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
- output[3] = input[2] & 0x3f;
- Assert(output[0] < 64);
- Assert(output[1] < 64);
- Assert(output[2] < 64);
- Assert(output[3] < 64);
-
- if (datalength + 4 > targsize)
- return (-1);
- target[datalength++] = Base64[output[0]];
- target[datalength++] = Base64[output[1]];
- target[datalength++] = Base64[output[2]];
- target[datalength++] = Base64[output[3]];
- }
-
- /* Now we worry about padding. */
- if (0 != srclength) {
- /* Get what's left. */
- input[0] = input[1] = input[2] = '\0';
- for (i = 0; i < srclength; i++)
- input[i] = *src++;
-
- output[0] = input[0] >> 2;
- output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
- output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
- Assert(output[0] < 64);
- Assert(output[1] < 64);
- Assert(output[2] < 64);
-
- if (datalength + 4 > targsize)
- return (-1);
- target[datalength++] = Base64[output[0]];
- target[datalength++] = Base64[output[1]];
- if (srclength == 1)
- target[datalength++] = Pad64;
- else
- target[datalength++] = Base64[output[2]];
- target[datalength++] = Pad64;
- }
- if (datalength >= targsize)
- return (-1);
- target[datalength] = '\0'; /* Returned value doesn't count \0. */
- return ((int)datalength);
-}
-
-/* skips all whitespace anywhere.
- converts characters, four at a time, starting at (or after)
- src from base - 64 numbers into three 8 bit bytes in the target area.
- it returns the number of data bytes stored at the target, or -1 on error.
- */
-
-int
-b64_pton(
- char const *src,
- u_char *target,
- size_t targsize
- )
-{
- int tarindex, state, ch;
- char *pos;
-
- state = 0;
- tarindex = 0;
-
- while ((ch = *src++) != '\0') {
- if (isspace(ch)) /* Skip whitespace anywhere. */
- continue;
-
- if (ch == Pad64)
- break;
-
- pos = strchr(Base64, ch);
- if (pos == 0) /* A non-base64 character. */
- return (-1);
-
- switch (state) {
- case 0:
- if (target) {
- if ((size_t)tarindex >= targsize)
- return (-1);
- target[tarindex] = (u_char)((pos - Base64) << 2);
- }
- state = 1;
- break;
- case 1:
- if (target) {
- if ((size_t)tarindex + 1 >= targsize)
- return (-1);
- target[tarindex] |= (u_char)((pos - Base64) >> 4);
- target[tarindex+1] = (u_char)(((pos - Base64) & 0x0f)
- << 4) ;
- }
- tarindex++;
- state = 2;
- break;
- case 2:
- if (target) {
- if ((size_t)tarindex + 1 >= targsize)
- return (-1);
- target[tarindex] |= (u_char)((pos - Base64) >> 2);
- target[tarindex+1] = (u_char)(((pos - Base64) & 0x03)
- << 6);
- }
- tarindex++;
- state = 3;
- break;
- case 3:
- if (target) {
- if ((size_t)tarindex >= targsize)
- return (-1);
- target[tarindex] |= (u_char)(pos - Base64);
- }
- tarindex++;
- state = 0;
- break;
- default:
- abort();
- }
- }
-
- /*
- * We are done decoding Base-64 chars. Let's see if we ended
- * on a byte boundary, and/or with erroneous trailing characters.
- */
-
- if (ch == Pad64) { /* We got a pad char. */
- ch = *src++; /* Skip it, get next. */
- switch (state) {
- case 0: /* Invalid = in first position */
- case 1: /* Invalid = in second position */
- return (-1);
-
- case 2: /* Valid, means one byte of info */
- /* Skip any number of spaces. */
- for ((void)NULL; ch != '\0'; ch = *src++)
- if (!isspace(ch))
- break;
- /* Make sure there is another trailing = sign. */
- if (ch != Pad64)
- return (-1);
- ch = *src++; /* Skip the = */
- /* Fall through to "single trailing =" case. */
- /* FALLTHROUGH */
-
- case 3: /* Valid, means two bytes of info */
- /*
- * We know this char is an =. Is there anything but
- * whitespace after it?
- */
- for ((void)NULL; ch != '\0'; ch = *src++)
- if (!isspace(ch))
- return (-1);
-
- /*
- * Now make sure for cases 2 and 3 that the "extra"
- * bits that slopped past the last full byte were
- * zeros. If we don't check them, they become a
- * subliminal channel.
- */
- if (target && target[tarindex] != 0)
- return (-1);
- }
- } else {
- /*
- * We ended by seeing the end of the string. Make sure we
- * have no partial bytes lying around.
- */
- if (state != 0)
- return (-1);
- }
-
- return (tarindex);
-}
diff --git a/StdLib/BsdSocketLib/bind.c b/StdLib/BsdSocketLib/bind.c
deleted file mode 100644
index a52272d7ce..0000000000
--- a/StdLib/BsdSocketLib/bind.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/** @file
- Implement the bind API.
-
- Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <SocketInternals.h>
-
-
-/** Bind a name to a socket.
-
- The bind routine connects a name (network address) to a socket on the local machine.
-
- The
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/bind.html">POSIX</a>
- documentation is available online.
-
- @param[in] s Socket file descriptor returned from ::socket.
-
- @param[in] name Address of a sockaddr structure that contains the
- connection point on the local machine. An IPv4 address
- of INADDR_ANY specifies that the connection is made to
- all of the network stacks on the platform. Specifying a
- specific IPv4 address restricts the connection to the
- network stack supporting that address. Specifying zero
- for the port causes the network layer to assign a port
- number from the dynamic range. Specifying a specific
- port number causes the network layer to use that port.
-
- @param[in] namelen Specifies the length in bytes of the sockaddr structure.
-
- @return The bind routine returns zero (0) if successful and -1 upon failure.
- In the case of an error, ::errno contains more information.
- **/
-int
-bind (
- IN int s,
- IN const struct sockaddr * name,
- IN socklen_t namelen
- )
-{
- int BindStatus;
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
-
- // Locate the context for this socket
- pSocketProtocol = BslFdToSocketProtocol ( s, NULL, &errno );
- if ( NULL != pSocketProtocol ) {
-
- // Bind the socket
- (void) pSocketProtocol->pfnBind ( pSocketProtocol,
- name,
- namelen,
- &errno );
- }
-
- // Return the operation stauts
- BindStatus = ( 0 == errno ) ? 0 : -1;
- return BindStatus;
-}
diff --git a/StdLib/BsdSocketLib/close.c b/StdLib/BsdSocketLib/close.c
deleted file mode 100644
index 01eb48ecb5..0000000000
--- a/StdLib/BsdSocketLib/close.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/** @file
- Implement the close API.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <SocketInternals.h>
-
-
-/**
- Worker routine to close the socket.
-
- @param[in] pSocketProtocol Socket protocol structure address
-
- @param[in] pErrno Address of the ::errno variable
-
- @retval EFI_SUCCESS Successfully closed the socket
-
-**/
-EFI_STATUS
-BslSocketCloseWork (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int * pErrno
- )
-{
- EFI_STATUS Status;
-
- //
- // Start closing the socket
- //
- Status = pSocketProtocol->pfnCloseStart ( pSocketProtocol,
- FALSE,
- pErrno );
-
- //
- // Wait for the socket to close or an error
- //
- while ( EFI_NOT_READY == Status ) {
- Status = pSocketProtocol->pfnClosePoll ( pSocketProtocol,
- pErrno );
- }
- if ( !EFI_ERROR ( Status )) {
- //
- // Release the socket resources
- //
- *pErrno = EslServiceFreeProtocol ( pSocketProtocol );
- }
- else {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Failed to close the socket: %r\r\n",
- Status ));
- *pErrno = EIO;
- }
-
- //
- // Return the close status
- //
- return Status;
-}
-
-
-/**
- Close the socket
-
- The BslSocketClose routine is called indirectly from the close file
- system routine. This routine closes the socket and returns the
- status to the caller.
-
- @param[in] pDescriptor Descriptor address for the file
-
- @return This routine returns 0 upon success and -1 upon failure.
- In the case of failure, ::errno contains more information.
-
-**/
-int
-EFIAPI
-BslSocketClose (
- struct __filedes * pDescriptor
- )
-{
- int CloseStatus;
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
-
- //
- // Locate the socket protocol
- //
- pSocketProtocol = BslValidateSocketFd ( pDescriptor, &errno );
- if ( NULL != pSocketProtocol ) {
- //
- // Close the socket
- //
- BslSocketCloseWork ( pSocketProtocol, &errno );
- }
-
- //
- // Return the close status
- //
- CloseStatus = ( errno == 0 ) ? 0 : -1;
- return CloseStatus;
-}
diff --git a/StdLib/BsdSocketLib/connect.c b/StdLib/BsdSocketLib/connect.c
deleted file mode 100644
index aa4df57d9f..0000000000
--- a/StdLib/BsdSocketLib/connect.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/** @file
- Implement the connect API.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <SocketInternals.h>
-
-
-/**
- Connect to a remote system via the network.
-
- The connect routine attempts to establish a connection to a
- socket on the local or remote system using the specified address.
-
- There are three states associated with a connection:
- <ul>
- <li>Not connected</li>
- <li>Connection in progress</li>
- <li>Connected</li>
- </ul>
- In the initial "Not connected" state, calls to connect start the connection
- processing and update the state to "Connection in progress". During
- the "Connection in progress" state, connect polls for connection completion
- and moves the state to "Connected" after the connection is established.
- Note that these states are only visible when the file descriptor is marked
- with O_NONBLOCK. Also, the POLLOUT bit is set when the connection
- completes and may be used by poll or select as an indicator to call
- connect again.
-
- The
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/connect.html">POSIX</a>
- documentation is available online.
-
- @param [in] s Socket file descriptor returned from ::socket.
-
- @param [in] address Network address of the remote system
-
- @param [in] address_len Length of the remote network address
-
- @return This routine returns zero if successful and -1 when an error occurs.
- In the case of an error, ::errno contains more details.
-
- **/
-int
-connect (
- int s,
- const struct sockaddr * address,
- socklen_t address_len
- )
-{
- BOOLEAN bBlocking;
- int ConnectStatus;
- struct __filedes * pDescriptor;
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
- EFI_STATUS Status;
-
- //
- // Locate the context for this socket
- //
- pSocketProtocol = BslFdToSocketProtocol ( s,
- &pDescriptor,
- &errno );
- if ( NULL != pSocketProtocol ) {
- //
- // Determine if the operation is blocking
- //
- bBlocking = (BOOLEAN)( 0 == ( pDescriptor->Oflags & O_NONBLOCK ));
-
- //
- // Attempt to connect to a remote system
- //
- do {
- errno = 0;
- Status = pSocketProtocol->pfnConnect ( pSocketProtocol,
- address,
- address_len,
- &errno );
- } while ( bBlocking && ( EFI_NOT_READY == Status ));
- }
-
- //
- // Return the new socket file descriptor
- //
- ConnectStatus = (0 == errno) ? 0 : -1;
- return ConnectStatus;
-}
diff --git a/StdLib/BsdSocketLib/errno.c b/StdLib/BsdSocketLib/errno.c
deleted file mode 100644
index 2f81506b7a..0000000000
--- a/StdLib/BsdSocketLib/errno.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/** @file
- errno variable
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <sys/errno.h>
-
-
-/**
- Variable that contains additional error information when an API call fails.
-**/
-int errno;
diff --git a/StdLib/BsdSocketLib/getaddrinfo.c b/StdLib/BsdSocketLib/getaddrinfo.c
deleted file mode 100644
index 5a0baf6d45..0000000000
--- a/StdLib/BsdSocketLib/getaddrinfo.c
+++ /dev/null
@@ -1,1965 +0,0 @@
-/* $NetBSD: getaddrinfo.c,v 1.91.6.1 2009/01/26 00:27:34 snj Exp $ */
-/* $KAME: getaddrinfo.c,v 1.29 2000/08/31 17:26:57 itojun Exp $ */
-
-/*
- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Issues to be discussed:
- * - Return values. There are nonstandard return values defined and used
- * in the source code. This is because RFC2553 is silent about which error
- * code must be returned for which situation.
- * - IPv4 classful (shortened) form. RFC2553 is silent about it. XNET 5.2
- * says to use inet_aton() to convert IPv4 numeric to binary (alows
- * classful form as a result).
- * current code - disallow classful form for IPv4 (due to use of inet_pton).
- * - freeaddrinfo(NULL). RFC2553 is silent about it. XNET 5.2 says it is
- * invalid.
- * current code - SEGV on freeaddrinfo(NULL)
- * Note:
- * - The code filters out AFs that are not supported by the kernel,
- * when globbing NULL hostname (to loopback, or wildcard). Is it the right
- * thing to do? What is the relationship with post-RFC2553 AI_ADDRCONFIG
- * in ai_flags?
- * - (post-2553) semantics of AI_ADDRCONFIG itself is too vague.
- * (1) what should we do against numeric hostname (2) what should we do
- * against NULL hostname (3) what is AI_ADDRCONFIG itself. AF not ready?
- * non-loopback address configured? global address configured?
- */
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: getaddrinfo.c,v 1.91.6.1 2009/01/26 00:27:34 snj Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#define INET6 1
-
-#include "namespace.h"
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <stdarg.h>
-#include <nsswitch.h>
-#include <resolv.h>
-
-//#ifdef YP
-//#include <rpc/rpc.h>
-//#include <rpcsvc/yp_prot.h>
-//#include <rpcsvc/ypclnt.h>
-//#endif
-
-#include <net/servent.h>
-
-#define endservent_r(svd) endservent()
-#define nsdispatch(pResult,dtab,database,routine,files,hostname,pai) NS_NOTFOUND
-#define res_nmkquery(state,op,dname,class,type,data,datalen,newrr_in,buf,buflen) res_mkquery( op, dname, class, type, data, datalen, newrr_in, buf, buflen )
-#define res_nsend(state,buf,buflen,ans,anssiz) res_send ( buf, buflen, ans, anssiz )
-
-/* Things involving an internal (static) resolver context. */
-__BEGIN_DECLS
-#define __res_get_state() (( 0 != _res.nscount ) ? &_res : NULL )
-#define __res_put_state(state)
-#define __res_state() _res
-__END_DECLS
-
-#ifdef __weak_alias
-__weak_alias(getaddrinfo,_getaddrinfo)
-__weak_alias(freeaddrinfo,_freeaddrinfo)
-__weak_alias(gai_strerror,_gai_strerror)
-#endif
-
-#define SUCCESS 0
-#define ANY 0
-#define YES 1
-#define NO 0
-
-static const char in_addrany[] = { 0, 0, 0, 0 };
-static const char in_loopback[] = { 127, 0, 0, 1 };
-#ifdef INET6
-static const char in6_addrany[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-static const char in6_loopback[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
-};
-#endif
-
-static const struct afd {
- int a_af;
- int a_addrlen;
- int a_socklen;
- int a_off;
- const char *a_addrany;
- const char *a_loopback;
- int a_scoped;
-} afdl [] = {
-#ifdef INET6
- {PF_INET6, sizeof(struct in6_addr),
- sizeof(struct sockaddr_in6),
- offsetof(struct sockaddr_in6, sin6_addr),
- in6_addrany, in6_loopback, 1},
-#endif
- {PF_INET, sizeof(struct in_addr),
- sizeof(struct sockaddr_in),
- offsetof(struct sockaddr_in, sin_addr),
- in_addrany, in_loopback, 0},
- {0, 0, 0, 0, NULL, NULL, 0},
-};
-
-struct explore {
- int e_af;
- int e_socktype;
- int e_protocol;
- const char *e_protostr;
- int e_wild;
-#define WILD_AF(ex) ((ex)->e_wild & 0x01)
-#define WILD_SOCKTYPE(ex) ((ex)->e_wild & 0x02)
-#define WILD_PROTOCOL(ex) ((ex)->e_wild & 0x04)
-};
-
-static const struct explore explore[] = {
-#if 0
- { PF_LOCAL, 0, ANY, ANY, NULL, 0x01 },
-#endif
-#ifdef INET6
- { PF_INET6, SOCK_DGRAM, IPPROTO_UDP, "udp", 0x07 },
- { PF_INET6, SOCK_STREAM, IPPROTO_TCP, "tcp", 0x07 },
- { PF_INET6, SOCK_RAW, ANY, NULL, 0x05 },
-#endif
- { PF_INET, SOCK_DGRAM, IPPROTO_UDP, "udp", 0x07 },
- { PF_INET, SOCK_STREAM, IPPROTO_TCP, "tcp", 0x07 },
- { PF_INET, SOCK_RAW, ANY, NULL, 0x05 },
- { PF_UNSPEC, SOCK_DGRAM, IPPROTO_UDP, "udp", 0x07 },
- { PF_UNSPEC, SOCK_STREAM, IPPROTO_TCP, "tcp", 0x07 },
- { PF_UNSPEC, SOCK_RAW, ANY, NULL, 0x05 },
- { -1, 0, 0, NULL, 0 },
-};
-
-#ifdef INET6
-#define PTON_MAX 16
-#else
-#define PTON_MAX 4
-#endif
-
-static const ns_src default_dns_files[] = {
- { NSSRC_FILES, NS_SUCCESS },
- { NSSRC_DNS, NS_SUCCESS },
- { 0, 0 }
-};
-
-#define MAXPACKET (64*1024)
-
-typedef union {
- HEADER hdr;
- u_char buf[MAXPACKET];
-} querybuf;
-
-struct res_target {
- struct res_target *next;
- const char *name; /* domain name */
- int qclass, qtype; /* class and type of query */
- u_char *answer; /* buffer to put answer */
- int anslen; /* size of answer buffer */
- int n; /* result length */
-};
-
-static int str2number(const char *);
-static int explore_fqdn(const struct addrinfo *, const char *,
- const char *, struct addrinfo **, struct servent_data *);
-static int explore_null(const struct addrinfo *,
- const char *, struct addrinfo **, struct servent_data *);
-static int explore_numeric(const struct addrinfo *, const char *,
- const char *, struct addrinfo **, const char *, struct servent_data *);
-static int explore_numeric_scope(const struct addrinfo *, const char *,
- const char *, struct addrinfo **, struct servent_data *);
-static int get_canonname(const struct addrinfo *,
- struct addrinfo *, const char *);
-static struct addrinfo *get_ai(const struct addrinfo *,
- const struct afd *, const char *);
-static int get_portmatch(const struct addrinfo *, const char *,
- struct servent_data *);
-static int get_port(const struct addrinfo *, const char *, int,
- struct servent_data *);
-static const struct afd *find_afd(int);
-#ifdef INET6
-static int ip6_str2scopeid(char *, struct sockaddr_in6 *, u_int32_t *);
-#endif
-
-static struct addrinfo *getanswer(const querybuf *, int, const char *, int,
- const struct addrinfo *);
-static void aisort(struct addrinfo *s, res_state res);
-static int _dns_getaddrinfo(void *, void *, va_list);
-static void _sethtent(FILE **);
-static void _endhtent(FILE **);
-static struct addrinfo *_gethtent(FILE **, const char *,
- const struct addrinfo *);
-static int _files_getaddrinfo(void *, void *, va_list);
-#ifdef YP
-static struct addrinfo *_yphostent(char *, const struct addrinfo *);
-static int _yp_getaddrinfo(void *, void *, va_list);
-#endif
-
-static int res_queryN(const char *, struct res_target *, res_state);
-static int res_searchN(const char *, struct res_target *, res_state);
-static int res_querydomainN(const char *, const char *,
- struct res_target *, res_state);
-
-static const char * const ai_errlist[] = {
- "Success",
- "Address family for hostname not supported", /* EAI_ADDRFAMILY */
- "Temporary failure in name resolution", /* EAI_AGAIN */
- "Invalid value for ai_flags", /* EAI_BADFLAGS */
- "Non-recoverable failure in name resolution", /* EAI_FAIL */
- "ai_family not supported", /* EAI_FAMILY */
- "Memory allocation failure", /* EAI_MEMORY */
- "No address associated with hostname", /* EAI_NODATA */
- "hostname nor servname provided, or not known", /* EAI_NONAME */
- "servname not supported for ai_socktype", /* EAI_SERVICE */
- "ai_socktype not supported", /* EAI_SOCKTYPE */
- "System error returned in errno", /* EAI_SYSTEM */
- "Invalid value for hints", /* EAI_BADHINTS */
- "Resolved protocol is unknown", /* EAI_PROTOCOL */
- "Argument buffer overflow", /* EAI_OVERFLOW */
- "Unknown error", /* EAI_MAX */
-};
-
-/* XXX macros that make external reference is BAD. */
-
-#define GET_AI(ai, afd, addr) \
-do { \
- /* external reference: pai, error, and label free */ \
- (ai) = get_ai(pai, (afd), (addr)); \
- if ((ai) == NULL) { \
- error = EAI_MEMORY; \
- goto free; \
- } \
-} while (/*CONSTCOND*/0)
-
-#define GET_PORT(ai, serv, svd) \
-do { \
- /* external reference: error and label free */ \
- error = get_port((ai), (serv), 0, (svd)); \
- if (error != 0) \
- goto free; \
-} while (/*CONSTCOND*/0)
-
-#define GET_CANONNAME(ai, str) \
-do { \
- /* external reference: pai, error and label free */ \
- error = get_canonname(pai, (ai), (str)); \
- if (error != 0) \
- goto free; \
-} while (/*CONSTCOND*/0)
-
-#define ERR(err) \
-do { \
- /* external reference: error, and label bad */ \
- error = (err); \
- goto bad; \
- /*NOTREACHED*/ \
-} while (/*CONSTCOND*/0)
-
-#define MATCH_FAMILY(x, y, w) \
- ((x) == (y) || (/*CONSTCOND*/(w) && ((x) == PF_UNSPEC || \
- (y) == PF_UNSPEC)))
-#define MATCH(x, y, w) \
- ((x) == (y) || (/*CONSTCOND*/(w) && ((x) == ANY || (y) == ANY)))
-
-const char *
-gai_strerror(int ecode)
-{
- if (ecode < 0 || ecode > EAI_MAX)
- ecode = EAI_MAX;
- return ai_errlist[ecode];
-}
-
-void
-freeaddrinfo(struct addrinfo *ai)
-{
- struct addrinfo *next;
-
- _DIAGASSERT(ai != NULL);
-
- do {
- next = ai->ai_next;
- if (ai->ai_canonname)
- free(ai->ai_canonname);
- /* no need to free(ai->ai_addr) */
- free(ai);
- ai = next;
- } while (ai);
-}
-
-static int
-str2number(const char *p)
-{
- char *ep;
- unsigned long v;
-
- _DIAGASSERT(p != NULL);
-
- if (*p == '\0')
- return -1;
- ep = NULL;
- errno = 0;
- v = strtoul(p, &ep, 10);
- if (errno == 0 && ep && *ep == '\0' && v <= UINT_MAX)
- return v;
- else
- return -1;
-}
-
-int
-getaddrinfo(const char *hostname, const char *servname,
- const struct addrinfo *hints, struct addrinfo **res)
-{
- struct addrinfo sentinel;
- struct addrinfo *cur;
- int error = 0;
- struct addrinfo ai;
- struct addrinfo ai0;
- struct addrinfo *pai;
- const struct explore *ex;
- struct servent_data svd;
-
- /* hostname is allowed to be NULL */
- /* servname is allowed to be NULL */
- /* hints is allowed to be NULL */
- _DIAGASSERT(res != NULL);
-
- (void)memset(&svd, 0, sizeof(svd));
- memset(&sentinel, 0, sizeof(sentinel));
- cur = &sentinel;
- memset(&ai, 0, sizeof(ai));
- pai = &ai;
- pai->ai_flags = 0;
- pai->ai_family = PF_UNSPEC;
- pai->ai_socktype = ANY;
- pai->ai_protocol = ANY;
- pai->ai_addrlen = 0;
- pai->ai_canonname = NULL;
- pai->ai_addr = NULL;
- pai->ai_next = NULL;
-
- if (hostname == NULL && servname == NULL)
- return EAI_NONAME;
- if (hints) {
- /* error check for hints */
- if (hints->ai_addrlen || hints->ai_canonname ||
- hints->ai_addr || hints->ai_next)
- ERR(EAI_BADHINTS); /* xxx */
- if (hints->ai_flags & ~AI_MASK)
- ERR(EAI_BADFLAGS);
- switch (hints->ai_family) {
- case PF_UNSPEC:
- case PF_INET:
-#ifdef INET6
- case PF_INET6:
-#endif
- break;
- default:
- ERR(EAI_FAMILY);
- }
- memcpy(pai, hints, sizeof(*pai));
-
- /*
- * if both socktype/protocol are specified, check if they
- * are meaningful combination.
- */
- if (pai->ai_socktype != ANY && pai->ai_protocol != ANY) {
- for (ex = explore; ex->e_af >= 0; ex++) {
- if (pai->ai_family != ex->e_af)
- continue;
- if (ex->e_socktype == ANY)
- continue;
- if (ex->e_protocol == ANY)
- continue;
- if (pai->ai_socktype == ex->e_socktype
- && pai->ai_protocol != ex->e_protocol) {
- ERR(EAI_BADHINTS);
- }
- }
- }
- }
-
- /*
- * check for special cases. (1) numeric servname is disallowed if
- * socktype/protocol are left unspecified. (2) servname is disallowed
- * for raw and other inet{,6} sockets.
- */
- if (MATCH_FAMILY(pai->ai_family, PF_INET, 1)
-#ifdef PF_INET6
- || MATCH_FAMILY(pai->ai_family, PF_INET6, 1)
-#endif
- ) {
- ai0 = *pai; /* backup *pai */
-
- if (pai->ai_family == PF_UNSPEC) {
-#ifdef PF_INET6
- pai->ai_family = PF_INET6;
-#else
- pai->ai_family = PF_INET;
-#endif
- }
- error = get_portmatch(pai, servname, &svd);
- if (error)
- ERR(error);
-
- *pai = ai0;
- }
-
- ai0 = *pai;
-
- /* NULL hostname, or numeric hostname */
- for (ex = explore; ex->e_af >= 0; ex++) {
- *pai = ai0;
-
- /* PF_UNSPEC entries are prepared for DNS queries only */
- if (ex->e_af == PF_UNSPEC)
- continue;
-
- if (!MATCH_FAMILY(pai->ai_family, ex->e_af, WILD_AF(ex)))
- continue;
- if (!MATCH(pai->ai_socktype, ex->e_socktype, WILD_SOCKTYPE(ex)))
- continue;
- if (!MATCH(pai->ai_protocol, ex->e_protocol, WILD_PROTOCOL(ex)))
- continue;
-
- if (pai->ai_family == PF_UNSPEC)
- pai->ai_family = ex->e_af;
- if (pai->ai_socktype == ANY && ex->e_socktype != ANY)
- pai->ai_socktype = ex->e_socktype;
- if (pai->ai_protocol == ANY && ex->e_protocol != ANY)
- pai->ai_protocol = ex->e_protocol;
-
- if (hostname == NULL)
- error = explore_null(pai, servname, &cur->ai_next,
- &svd);
- else
- error = explore_numeric_scope(pai, hostname, servname,
- &cur->ai_next, &svd);
-
- if (error)
- goto free;
-
- while (cur->ai_next)
- cur = cur->ai_next;
- }
-
- /*
- * XXX
- * If numeric representation of AF1 can be interpreted as FQDN
- * representation of AF2, we need to think again about the code below.
- */
- if (sentinel.ai_next)
- goto good;
-
- if (hostname == NULL)
- ERR(EAI_NODATA);
- if (pai->ai_flags & AI_NUMERICHOST)
- ERR(EAI_NONAME);
-
- /*
- * hostname as alphabetical name.
- * we would like to prefer AF_INET6 than AF_INET, so we'll make a
- * outer loop by AFs.
- */
- for (ex = explore; ex->e_af >= 0; ex++) {
- *pai = ai0;
-
- /* require exact match for family field */
- if (pai->ai_family != ex->e_af)
- continue;
-
- if (!MATCH(pai->ai_socktype, ex->e_socktype,
- WILD_SOCKTYPE(ex))) {
- continue;
- }
- if (!MATCH(pai->ai_protocol, ex->e_protocol,
- WILD_PROTOCOL(ex))) {
- continue;
- }
-
- if (pai->ai_socktype == ANY && ex->e_socktype != ANY)
- pai->ai_socktype = ex->e_socktype;
- if (pai->ai_protocol == ANY && ex->e_protocol != ANY)
- pai->ai_protocol = ex->e_protocol;
-
- error = explore_fqdn(pai, hostname, servname, &cur->ai_next,
- &svd);
-
- while (cur && cur->ai_next)
- cur = cur->ai_next;
- }
-
- /* XXX */
- if (sentinel.ai_next)
- error = 0;
-
- if (error)
- goto free;
-
- if (sentinel.ai_next) {
- good:
- endservent_r(&svd);
- *res = sentinel.ai_next;
- return SUCCESS;
- } else
- error = EAI_FAIL;
- free:
- bad:
- endservent_r(&svd);
- if (sentinel.ai_next)
- freeaddrinfo(sentinel.ai_next);
- *res = NULL;
- return error;
-}
-
-static const ns_dtab dtab[] = {
- NS_FILES_CB(((nss_method)_files_getaddrinfo), NULL)
- { NSSRC_DNS, ((nss_method)_dns_getaddrinfo), NULL }, /* force -DHESIOD */
- NS_NIS_CB(_yp_getaddrinfo, NULL)
- NS_NULL_CB
-};
-
-/*
- * FQDN hostname, DNS lookup
- */
-static int
-explore_fqdn(const struct addrinfo *pai, const char *hostname,
- const char *servname, struct addrinfo **res, struct servent_data *svd)
-{
- struct addrinfo *result;
- struct addrinfo *cur;
- int error = 0;
-
- _DIAGASSERT(pai != NULL);
- /* hostname may be NULL */
- /* servname may be NULL */
- _DIAGASSERT(res != NULL);
-
- result = NULL;
-
- /*
- * if the servname does not match socktype/protocol, ignore it.
- */
- if (get_portmatch(pai, servname, svd) != 0)
- return 0;
-
- switch (nsdispatch(&result, dtab, NSDB_HOSTS, "getaddrinfo",
- default_dns_files, hostname, pai)) {
- case NS_TRYAGAIN:
- error = EAI_AGAIN;
- goto free;
- case NS_UNAVAIL:
- error = EAI_FAIL;
- goto free;
- case NS_NOTFOUND:
- error = EAI_NODATA;
- goto free;
- case NS_SUCCESS:
- error = 0;
- for (cur = result; cur; cur = cur->ai_next) {
- GET_PORT(cur, servname, svd);
- /* canonname should be filled already */
- }
- break;
- }
-
- *res = result;
-
- return 0;
-
-free:
- if (result)
- freeaddrinfo(result);
- return error;
-}
-
-/*
- * hostname == NULL.
- * passive socket -> anyaddr (0.0.0.0 or ::)
- * non-passive socket -> localhost (127.0.0.1 or ::1)
- */
-static int
-explore_null(const struct addrinfo *pai, const char *servname,
- struct addrinfo **res, struct servent_data *svd)
-{
- int s;
- const struct afd *afd;
- struct addrinfo *cur;
- struct addrinfo sentinel;
- int error;
-
- _DIAGASSERT(pai != NULL);
- /* servname may be NULL */
- _DIAGASSERT(res != NULL);
-
- *res = NULL;
- sentinel.ai_next = NULL;
- cur = &sentinel;
-
- /*
- * filter out AFs that are not supported by the kernel
- * XXX errno?
- */
- s = socket(pai->ai_family, SOCK_DGRAM, 0);
- if (s < 0) {
- if (errno != EMFILE)
- return 0;
- } else
- close(s);
-
- /*
- * if the servname does not match socktype/protocol, ignore it.
- */
- if (get_portmatch(pai, servname, svd) != 0)
- return 0;
-
- afd = find_afd(pai->ai_family);
- if (afd == NULL)
- return 0;
-
- if (pai->ai_flags & AI_PASSIVE) {
- GET_AI(cur->ai_next, afd, afd->a_addrany);
- /* xxx meaningless?
- * GET_CANONNAME(cur->ai_next, "anyaddr");
- */
- GET_PORT(cur->ai_next, servname, svd);
- } else {
- GET_AI(cur->ai_next, afd, afd->a_loopback);
- /* xxx meaningless?
- * GET_CANONNAME(cur->ai_next, "localhost");
- */
- GET_PORT(cur->ai_next, servname, svd);
- }
- cur = cur->ai_next;
-
- *res = sentinel.ai_next;
- return 0;
-
-free:
- if (sentinel.ai_next)
- freeaddrinfo(sentinel.ai_next);
- return error;
-}
-
-/*
- * numeric hostname
- */
-static int
-explore_numeric(const struct addrinfo *pai, const char *hostname,
- const char *servname, struct addrinfo **res, const char *canonname,
- struct servent_data *svd)
-{
- const struct afd *afd;
- struct addrinfo *cur;
- struct addrinfo sentinel;
- int error;
- char pton[PTON_MAX];
-
- _DIAGASSERT(pai != NULL);
- /* hostname may be NULL */
- /* servname may be NULL */
- _DIAGASSERT(res != NULL);
-
- *res = NULL;
- sentinel.ai_next = NULL;
- cur = &sentinel;
-
- /*
- * if the servname does not match socktype/protocol, ignore it.
- */
- if (get_portmatch(pai, servname, svd) != 0)
- return 0;
-
- afd = find_afd(pai->ai_family);
- if (afd == NULL)
- return 0;
-
- switch (afd->a_af) {
-#if 0 /*X/Open spec*/
- case AF_INET:
- if (inet_aton(hostname, (struct in_addr *)pton) == 1) {
- if (pai->ai_family == afd->a_af ||
- pai->ai_family == PF_UNSPEC /*?*/) {
- GET_AI(cur->ai_next, afd, pton);
- GET_PORT(cur->ai_next, servname, svd);
- if ((pai->ai_flags & AI_CANONNAME)) {
- /*
- * Set the numeric address itself as
- * the canonical name, based on a
- * clarification in rfc2553bis-03.
- */
- GET_CANONNAME(cur->ai_next, canonname);
- }
- while (cur && cur->ai_next)
- cur = cur->ai_next;
- } else
- ERR(EAI_FAMILY); /*xxx*/
- }
- break;
-#endif
- default:
- if (inet_pton(afd->a_af, hostname, pton) == 1) {
- if (pai->ai_family == afd->a_af ||
- pai->ai_family == PF_UNSPEC /*?*/) {
- GET_AI(cur->ai_next, afd, pton);
- GET_PORT(cur->ai_next, servname, svd);
- if ((pai->ai_flags & AI_CANONNAME)) {
- /*
- * Set the numeric address itself as
- * the canonical name, based on a
- * clarification in rfc2553bis-03.
- */
- GET_CANONNAME(cur->ai_next, canonname);
- }
- while (cur->ai_next)
- cur = cur->ai_next;
- } else
- ERR(EAI_FAMILY); /*xxx*/
- }
- break;
- }
-
- *res = sentinel.ai_next;
- return 0;
-
-free:
-bad:
- if (sentinel.ai_next)
- freeaddrinfo(sentinel.ai_next);
- return error;
-}
-
-/*
- * numeric hostname with scope
- */
-static int
-explore_numeric_scope(const struct addrinfo *pai, const char *hostname,
- const char *servname, struct addrinfo **res, struct servent_data *svd)
-{
-#if !defined(SCOPE_DELIMITER) || !defined(INET6)
- return explore_numeric(pai, hostname, servname, res, hostname, svd);
-#else
- const struct afd *afd;
- struct addrinfo *cur;
- int error;
- char *cp, *hostname2 = NULL, *scope, *addr;
- struct sockaddr_in6 *sin6;
-
- _DIAGASSERT(pai != NULL);
- /* hostname may be NULL */
- /* servname may be NULL */
- _DIAGASSERT(res != NULL);
-
- /*
- * if the servname does not match socktype/protocol, ignore it.
- */
- if (get_portmatch(pai, servname, svd) != 0)
- return 0;
-
- afd = find_afd(pai->ai_family);
- if (afd == NULL)
- return 0;
-
- if (!afd->a_scoped)
- return explore_numeric(pai, hostname, servname, res, hostname,
- svd);
-
- cp = strchr(hostname, SCOPE_DELIMITER);
- if (cp == NULL)
- return explore_numeric(pai, hostname, servname, res, hostname,
- svd);
-
- /*
- * Handle special case of <scoped_address><delimiter><scope id>
- */
- hostname2 = strdup(hostname);
- if (hostname2 == NULL)
- return EAI_MEMORY;
- /* terminate at the delimiter */
- hostname2[cp - hostname] = '\0';
- addr = hostname2;
- scope = cp + 1;
-
- error = explore_numeric(pai, addr, servname, res, hostname, svd);
- if (error == 0) {
- u_int32_t scopeid;
-
- for (cur = *res; cur; cur = cur->ai_next) {
- if (cur->ai_family != AF_INET6)
- continue;
- sin6 = (struct sockaddr_in6 *)(void *)cur->ai_addr;
- if (ip6_str2scopeid(scope, sin6, &scopeid) == -1) {
- free(hostname2);
- return(EAI_NODATA); /* XXX: is return OK? */
- }
- sin6->sin6_scope_id = scopeid;
- }
- }
-
- free(hostname2);
-
- return error;
-#endif
-}
-
-static int
-get_canonname(const struct addrinfo *pai, struct addrinfo *ai, const char *str)
-{
-
- _DIAGASSERT(pai != NULL);
- _DIAGASSERT(ai != NULL);
- _DIAGASSERT(str != NULL);
-
- if ((pai->ai_flags & AI_CANONNAME) != 0) {
- ai->ai_canonname = strdup(str);
- if (ai->ai_canonname == NULL)
- return EAI_MEMORY;
- }
- return 0;
-}
-
-static struct addrinfo *
-get_ai(const struct addrinfo *pai, const struct afd *afd, const char *addr)
-{
- char *p;
- struct addrinfo *ai;
-
- _DIAGASSERT(pai != NULL);
- _DIAGASSERT(afd != NULL);
- _DIAGASSERT(addr != NULL);
-
- ai = (struct addrinfo *)malloc(sizeof(struct addrinfo)
- + (afd->a_socklen));
- if (ai == NULL)
- return NULL;
-
- memcpy(ai, pai, sizeof(struct addrinfo));
- ai->ai_addr = (struct sockaddr *)(void *)(ai + 1);
- memset(ai->ai_addr, 0, (size_t)afd->a_socklen);
- ai->ai_addr->sa_len = (uint8_t)afd->a_socklen;
- ai->ai_addrlen = afd->a_socklen;
- ai->ai_family = afd->a_af;
- ai->ai_addr->sa_family = (sa_family_t)ai->ai_family;
- p = (char *)(void *)(ai->ai_addr);
- memcpy(p + afd->a_off, addr, (size_t)afd->a_addrlen);
- return ai;
-}
-
-static int
-get_portmatch(const struct addrinfo *ai, const char *servname,
- struct servent_data *svd)
-{
-
- _DIAGASSERT(ai != NULL);
- /* servname may be NULL */
-
- return get_port(ai, servname, 1, svd);
-}
-
-static int
-get_port(const struct addrinfo *ai, const char *servname, int matchonly,
- struct servent_data *svd)
-{
- const char *proto;
- struct servent *sp;
- int port;
- int allownumeric;
-
- _DIAGASSERT(ai != NULL);
- /* servname may be NULL */
-
- if (servname == NULL)
- return 0;
- switch (ai->ai_family) {
- case AF_INET:
-#ifdef AF_INET6
- case AF_INET6:
-#endif
- break;
- default:
- return 0;
- }
-
- switch (ai->ai_socktype) {
- case SOCK_RAW:
- return EAI_SERVICE;
- case SOCK_DGRAM:
- case SOCK_STREAM:
- allownumeric = 1;
- break;
- case ANY:
- /*
- * This was 0. It is now 1 so that queries specifying
- * a NULL hint, or hint without socktype (but, hopefully,
- * with protocol) and numeric address actually work.
- */
- allownumeric = 1;
- break;
- default:
- return EAI_SOCKTYPE;
- }
-
- port = str2number(servname);
- if (port >= 0) {
- if (!allownumeric)
- return EAI_SERVICE;
- if (port < 0 || port > 65535)
- return EAI_SERVICE;
- port = htons(port);
- } else {
-// struct servent sv;
- if (ai->ai_flags & AI_NUMERICSERV)
- return EAI_NONAME;
-
- switch (ai->ai_socktype) {
- case SOCK_DGRAM:
- proto = "udp";
- break;
- case SOCK_STREAM:
- proto = "tcp";
- break;
- default:
- proto = NULL;
- break;
- }
-
-// sp = getservbyname_r(servname, proto, &sv, svd);
- sp = getservbyname ( servname, proto );
- if (sp == NULL)
- return EAI_SERVICE;
- port = sp->s_port;
- }
-
- if (!matchonly) {
- switch (ai->ai_family) {
- case AF_INET:
- ((struct sockaddr_in *)(void *)
- ai->ai_addr)->sin_port = (in_port_t)port;
- break;
-#ifdef INET6
- case AF_INET6:
- ((struct sockaddr_in6 *)(void *)
- ai->ai_addr)->sin6_port = (in_port_t)port;
- break;
-#endif
- }
- }
-
- return 0;
-}
-
-static const struct afd *
-find_afd(int af)
-{
- const struct afd *afd;
-
- if (af == PF_UNSPEC)
- return NULL;
- for (afd = afdl; afd->a_af; afd++) {
- if (afd->a_af == af)
- return afd;
- }
- return NULL;
-}
-
-#ifdef INET6
-/* convert a string to a scope identifier. XXX: IPv6 specific */
-static int
-ip6_str2scopeid(char *scope, struct sockaddr_in6 *sin6, u_int32_t *scopeid)
-{
- u_long lscopeid;
- struct in6_addr *a6;
- char *ep;
-
- _DIAGASSERT(scope != NULL);
- _DIAGASSERT(sin6 != NULL);
- _DIAGASSERT(scopeid != NULL);
-
- a6 = &sin6->sin6_addr;
-
- /* empty scopeid portion is invalid */
- if (*scope == '\0')
- return -1;
-
- if (IN6_IS_ADDR_LINKLOCAL(a6) || IN6_IS_ADDR_MC_LINKLOCAL(a6)) {
- /*
- * We currently assume a one-to-one mapping between links
- * and interfaces, so we simply use interface indices for
- * like-local scopes.
- */
-/*
- *scopeid = if_nametoindex(scope);
- if (*scopeid == 0)
- goto trynumeric;
- return 0;
-*/
- return -1;
- }
-
- /* still unclear about literal, allow numeric only - placeholder */
- if (IN6_IS_ADDR_SITELOCAL(a6) || IN6_IS_ADDR_MC_SITELOCAL(a6))
- goto trynumeric;
- if (IN6_IS_ADDR_MC_ORGLOCAL(a6))
- goto trynumeric;
- else
- goto trynumeric; /* global */
-
- /* try to convert to a numeric id as a last resort */
- trynumeric:
- errno = 0;
- lscopeid = strtoul(scope, &ep, 10);
- *scopeid = (u_int32_t)(lscopeid & 0xffffffffUL);
- if (errno == 0 && ep && *ep == '\0' && *scopeid == lscopeid)
- return 0;
- else
- return -1;
-}
-#endif
-
-/* code duplicate with gethnamaddr.c */
-
-static const char AskedForGot[] =
- "gethostby*.getanswer: asked for \"%s\", got \"%s\"";
-
-static struct addrinfo *
-getanswer(const querybuf *answer, int anslen, const char *qname, int qtype,
- const struct addrinfo *pai)
-{
- struct addrinfo sentinel, *cur;
- struct addrinfo ai;
- const struct afd *afd;
- char *canonname;
- const HEADER *hp;
- const u_char *cp;
- int n;
- const u_char *eom;
- char *bp, *ep;
- int type, class, ancount, qdcount;
- int haveanswer, had_error;
- char tbuf[MAXDNAME];
- int (*name_ok) (const char *);
- static char hostbuf[8*1024];
-
- _DIAGASSERT(answer != NULL);
- _DIAGASSERT(qname != NULL);
- _DIAGASSERT(pai != NULL);
-
- memset(&sentinel, 0, sizeof(sentinel));
- cur = &sentinel;
-
- canonname = NULL;
- eom = answer->buf + anslen;
- switch (qtype) {
- case T_A:
- case T_AAAA:
- case T_ANY: /*use T_ANY only for T_A/T_AAAA lookup*/
- name_ok = res_hnok;
- break;
- default:
- return NULL; /* XXX should be abort(); */
- }
- /*
- * find first satisfactory answer
- */
- hp = &answer->hdr;
- ancount = ntohs(hp->ancount);
- qdcount = ntohs(hp->qdcount);
- bp = hostbuf;
- ep = hostbuf + sizeof hostbuf;
- cp = answer->buf + HFIXEDSZ;
- if (qdcount != 1) {
- h_errno = NO_RECOVERY;
- return (NULL);
- }
- n = dn_expand(answer->buf, eom, cp, bp, (int)(ep - bp));
- if ((n < 0) || !(*name_ok)(bp)) {
- h_errno = NO_RECOVERY;
- return (NULL);
- }
- cp += n + QFIXEDSZ;
- if (qtype == T_A || qtype == T_AAAA || qtype == T_ANY) {
- /* res_send() has already verified that the query name is the
- * same as the one we sent; this just gets the expanded name
- * (i.e., with the succeeding search-domain tacked on).
- */
- n = (int)strlen(bp) + 1; /* for the \0 */
- if (n >= MAXHOSTNAMELEN) {
- h_errno = NO_RECOVERY;
- return (NULL);
- }
- canonname = bp;
- bp += n;
- /* The qname can be abbreviated, but h_name is now absolute. */
- qname = canonname;
- }
- haveanswer = 0;
- had_error = 0;
- while (ancount-- > 0 && cp < eom && !had_error) {
- n = dn_expand(answer->buf, eom, cp, bp, (int)(ep - bp));
- if ((n < 0) || !(*name_ok)(bp)) {
- had_error++;
- continue;
- }
- cp += n; /* name */
- type = _getshort(cp);
- cp += INT16SZ; /* type */
- class = _getshort(cp);
- cp += INT16SZ + INT32SZ; /* class, TTL */
- n = _getshort(cp);
- cp += INT16SZ; /* len */
- if (class != C_IN) {
- /* XXX - debug? syslog? */
- cp += n;
- continue; /* XXX - had_error++ ? */
- }
- if ((qtype == T_A || qtype == T_AAAA || qtype == T_ANY) &&
- type == T_CNAME) {
- n = dn_expand(answer->buf, eom, cp, tbuf, sizeof tbuf);
- if ((n < 0) || !(*name_ok)(tbuf)) {
- had_error++;
- continue;
- }
- cp += n;
- /* Get canonical name. */
- n = (int)strlen(tbuf) + 1; /* for the \0 */
- if (n > ep - bp || n >= MAXHOSTNAMELEN) {
- had_error++;
- continue;
- }
- strlcpy(bp, tbuf, (size_t)(ep - bp));
- canonname = bp;
- bp += n;
- continue;
- }
- if (qtype == T_ANY) {
- if (!(type == T_A || type == T_AAAA)) {
- cp += n;
- continue;
- }
- } else if (type != qtype) {
- if (type != T_KEY && type != T_SIG) {
-#ifdef _ORG_FREEBSD_
- struct syslog_data sd = SYSLOG_DATA_INIT;
- syslog_r(LOG_NOTICE|LOG_AUTH, &sd,
- "gethostby*.getanswer: asked for \"%s %s %s\", got type \"%s\"",
- qname, p_class(C_IN), p_type(qtype),
- p_type(type));
-#endif
- }
- cp += n;
- continue; /* XXX - had_error++ ? */
- }
- switch (type) {
- case T_A:
- case T_AAAA:
- if (strcasecmp(canonname, bp) != 0) {
-#ifdef _ORG_FREEBSD_
- struct syslog_data sd = SYSLOG_DATA_INIT;
- syslog_r(LOG_NOTICE|LOG_AUTH, &sd,
- AskedForGot, canonname, bp);
-#endif
- cp += n;
- continue; /* XXX - had_error++ ? */
- }
- if (type == T_A && n != INADDRSZ) {
- cp += n;
- continue;
- }
- if (type == T_AAAA && n != IN6ADDRSZ) {
- cp += n;
- continue;
- }
- if (type == T_AAAA) {
- struct in6_addr in6;
- memcpy(&in6, cp, IN6ADDRSZ);
- if (IN6_IS_ADDR_V4MAPPED(&in6)) {
- cp += n;
- continue;
- }
- }
- if (!haveanswer) {
- int nn;
-
- canonname = bp;
- nn = (int)strlen(bp) + 1; /* for the \0 */
- bp += nn;
- }
-
- /* don't overwrite pai */
- ai = *pai;
- ai.ai_family = (type == T_A) ? AF_INET : AF_INET6;
- afd = find_afd(ai.ai_family);
- if (afd == NULL) {
- cp += n;
- continue;
- }
- cur->ai_next = get_ai(&ai, afd, (const char *)cp);
- if (cur->ai_next == NULL)
- had_error++;
- while (cur && cur->ai_next)
- cur = cur->ai_next;
- cp += n;
- break;
- default:
- abort();
- }
- if (!had_error)
- haveanswer++;
- }
- if (haveanswer) {
- if (!canonname)
- (void)get_canonname(pai, sentinel.ai_next, qname);
- else
- (void)get_canonname(pai, sentinel.ai_next, canonname);
- h_errno = NETDB_SUCCESS;
- return sentinel.ai_next;
- }
-
- h_errno = NO_RECOVERY;
- return NULL;
-}
-
-#define SORTEDADDR(p) (((struct sockaddr_in *)(void *)(p->ai_next->ai_addr))->sin_addr.s_addr)
-#define SORTMATCH(p, s) ((SORTEDADDR(p) & (s).mask) == (s).addr.s_addr)
-
-static void
-aisort(struct addrinfo *s, res_state res)
-{
- struct addrinfo head, *t, *p;
- int i;
-
- head.ai_next = NULL;
- t = &head;
-
- for (i = 0; i < (int)res->nsort; i++) {
- p = s;
- while (p->ai_next) {
- if ((p->ai_next->ai_family != AF_INET)
- || SORTMATCH(p, res->sort_list[i])) {
- t->ai_next = p->ai_next;
- t = t->ai_next;
- p->ai_next = p->ai_next->ai_next;
- } else {
- p = p->ai_next;
- }
- }
- }
-
- /* add rest of list and reset s to the new list*/
- t->ai_next = s->ai_next;
- s->ai_next = head.ai_next;
-}
-
-/*ARGSUSED*/
-static int
-_dns_getaddrinfo(void *rv, void *cb_data, va_list ap)
-{
- struct addrinfo *ai;
- querybuf *buf, *buf2;
- const char *name;
- const struct addrinfo *pai;
- struct addrinfo sentinel, *cur;
- struct res_target q, q2;
- res_state res;
-
- name = va_arg(ap, char *);
- pai = va_arg(ap, const struct addrinfo *);
-
- memset(&q, 0, sizeof(q));
- memset(&q2, 0, sizeof(q2));
- memset(&sentinel, 0, sizeof(sentinel));
- cur = &sentinel;
-
- buf = malloc(sizeof(*buf));
- if (buf == NULL) {
- h_errno = NETDB_INTERNAL;
- return NS_NOTFOUND;
- }
- buf2 = malloc(sizeof(*buf2));
- if (buf2 == NULL) {
- free(buf);
- h_errno = NETDB_INTERNAL;
- return NS_NOTFOUND;
- }
-
- switch (pai->ai_family) {
- case AF_UNSPEC:
- /* prefer IPv6 */
- q.name = name;
- q.qclass = C_IN;
- q.qtype = T_AAAA;
- q.answer = buf->buf;
- q.anslen = sizeof(buf->buf);
- q.next = &q2;
- q2.name = name;
- q2.qclass = C_IN;
- q2.qtype = T_A;
- q2.answer = buf2->buf;
- q2.anslen = sizeof(buf2->buf);
- break;
- case AF_INET:
- q.name = name;
- q.qclass = C_IN;
- q.qtype = T_A;
- q.answer = buf->buf;
- q.anslen = sizeof(buf->buf);
- break;
- case AF_INET6:
- q.name = name;
- q.qclass = C_IN;
- q.qtype = T_AAAA;
- q.answer = buf->buf;
- q.anslen = sizeof(buf->buf);
- break;
- default:
- free(buf);
- free(buf2);
- return NS_UNAVAIL;
- }
-
- res = __res_get_state();
- if (res == NULL) {
- free(buf);
- free(buf2);
- return NS_NOTFOUND;
- }
-
- if (res_searchN(name, &q, res) < 0) {
- __res_put_state(res);
- free(buf);
- free(buf2);
- return NS_NOTFOUND;
- }
- ai = getanswer(buf, q.n, q.name, q.qtype, pai);
- if (ai) {
- cur->ai_next = ai;
- while (cur && cur->ai_next)
- cur = cur->ai_next;
- }
- if (q.next) {
- ai = getanswer(buf2, q2.n, q2.name, q2.qtype, pai);
- if (ai)
- cur->ai_next = ai;
- }
- free(buf);
- free(buf2);
- if (sentinel.ai_next == NULL) {
- __res_put_state(res);
- switch (h_errno) {
- case HOST_NOT_FOUND:
- return NS_NOTFOUND;
- case TRY_AGAIN:
- return NS_TRYAGAIN;
- default:
- return NS_UNAVAIL;
- }
- }
-
- if (res->nsort)
- aisort(&sentinel, res);
-
- __res_put_state(res);
-
- *((struct addrinfo **)rv) = sentinel.ai_next;
- return NS_SUCCESS;
-}
-
-static void
-_sethtent(FILE **hostf)
-{
-
- if (!*hostf)
- *hostf = fopen(_PATH_HOSTS, "r" );
- else
- rewind(*hostf);
-}
-
-static void
-_endhtent(FILE **hostf)
-{
-
- if (*hostf) {
- (void) fclose(*hostf);
- *hostf = NULL;
- }
-}
-
-static struct addrinfo *
-_gethtent(FILE **hostf, const char *name, const struct addrinfo *pai)
-{
- char *p;
- char *cp, *tname, *cname;
- struct addrinfo hints, *res0, *res;
- int error;
- const char *addr;
- static char hostbuf[8*1024];
-
- _DIAGASSERT(name != NULL);
- _DIAGASSERT(pai != NULL);
-
- if (!*hostf && ( NULL == (*hostf = fopen(_PATH_HOSTS, "r" ))))
- return (NULL);
- again:
- if ( NULL == (p = fgets(hostbuf, sizeof hostbuf, *hostf)))
- return (NULL);
- if (*p == '#')
- goto again;
- if ( NULL == (cp = strpbrk(p, "#\n")))
- goto again;
- *cp = '\0';
- if ( NULL == (cp = strpbrk(p, " \t")))
- goto again;
- *cp++ = '\0';
- addr = p;
- /* if this is not something we're looking for, skip it. */
- cname = NULL;
- while (cp && *cp) {
- if (*cp == ' ' || *cp == '\t') {
- cp++;
- continue;
- }
- if (!cname)
- cname = cp;
- tname = cp;
- if ((cp = strpbrk(cp, " \t")) != NULL)
- *cp++ = '\0';
- if (strcasecmp(name, tname) == 0)
- goto found;
- }
- goto again;
-
-found:
- hints = *pai;
- hints.ai_flags = AI_NUMERICHOST;
- error = getaddrinfo(addr, NULL, &hints, &res0);
- if (error)
- goto again;
- for (res = res0; res; res = res->ai_next) {
- /* cover it up */
- res->ai_flags = pai->ai_flags;
-
- if (pai->ai_flags & AI_CANONNAME) {
- if (get_canonname(pai, res, cname) != 0) {
- freeaddrinfo(res0);
- goto again;
- }
- }
- }
- return res0;
-}
-
-/*ARGSUSED*/
-static int
-_files_getaddrinfo(void *rv, void *cb_data, va_list ap)
-{
- const char *name;
- const struct addrinfo *pai;
- struct addrinfo sentinel, *cur;
- struct addrinfo *p;
-#ifndef _REENTRANT
- static
-#endif
- FILE *hostf = NULL;
-
- name = va_arg(ap, char *);
- pai = va_arg(ap, const struct addrinfo *);
-
- memset(&sentinel, 0, sizeof(sentinel));
- cur = &sentinel;
-
- _sethtent(&hostf);
- while ((p = _gethtent(&hostf, name, pai)) != NULL) {
- cur->ai_next = p;
- while (cur && cur->ai_next)
- cur = cur->ai_next;
- }
- _endhtent(&hostf);
-
- *((struct addrinfo **)rv) = sentinel.ai_next;
- if (sentinel.ai_next == NULL)
- return NS_NOTFOUND;
- return NS_SUCCESS;
-}
-
-#ifdef YP
-/*ARGSUSED*/
-static struct addrinfo *
-_yphostent(char *line, const struct addrinfo *pai)
-{
- struct addrinfo sentinel, *cur;
- struct addrinfo hints, *res, *res0;
- int error;
- char *p;
- const char *addr, *canonname;
- char *nextline;
- char *cp;
-
- _DIAGASSERT(line != NULL);
- _DIAGASSERT(pai != NULL);
-
- p = line;
- addr = canonname = NULL;
-
- memset(&sentinel, 0, sizeof(sentinel));
- cur = &sentinel;
-
-nextline:
- /* terminate line */
- cp = strchr(p, '\n');
- if (cp) {
- *cp++ = '\0';
- nextline = cp;
- } else
- nextline = NULL;
-
- cp = strpbrk(p, " \t");
- if (cp == NULL) {
- if (canonname == NULL)
- return (NULL);
- else
- goto done;
- }
- *cp++ = '\0';
-
- addr = p;
-
- while (cp && *cp) {
- if (*cp == ' ' || *cp == '\t') {
- cp++;
- continue;
- }
- if (!canonname)
- canonname = cp;
- if ((cp = strpbrk(cp, " \t")) != NULL)
- *cp++ = '\0';
- }
-
- hints = *pai;
- hints.ai_flags = AI_NUMERICHOST;
- error = getaddrinfo(addr, NULL, &hints, &res0);
- if (error == 0) {
- for (res = res0; res; res = res->ai_next) {
- /* cover it up */
- res->ai_flags = pai->ai_flags;
-
- if (pai->ai_flags & AI_CANONNAME)
- (void)get_canonname(pai, res, canonname);
- }
- } else
- res0 = NULL;
- if (res0) {
- cur->ai_next = res0;
- while (cur->ai_next)
- cur = cur->ai_next;
- }
-
- if (nextline) {
- p = nextline;
- goto nextline;
- }
-
-done:
- return sentinel.ai_next;
-}
-
-/*ARGSUSED*/
-static int
-_yp_getaddrinfo(void *rv, void *cb_data, va_list ap)
-{
- struct addrinfo sentinel, *cur;
- struct addrinfo *ai = NULL;
- char *ypbuf;
- int ypbuflen, r;
- const char *name;
- const struct addrinfo *pai;
- char *ypdomain;
-
- if (_yp_check(&ypdomain) == 0)
- return NS_UNAVAIL;
-
- name = va_arg(ap, char *);
- pai = va_arg(ap, const struct addrinfo *);
-
- memset(&sentinel, 0, sizeof(sentinel));
- cur = &sentinel;
-
- /* hosts.byname is only for IPv4 (Solaris8) */
- if (pai->ai_family == PF_UNSPEC || pai->ai_family == PF_INET) {
- r = yp_match(ypdomain, "hosts.byname", name,
- (int)strlen(name), &ypbuf, &ypbuflen);
- if (r == 0) {
- struct addrinfo ai4;
-
- ai4 = *pai;
- ai4.ai_family = AF_INET;
- ai = _yphostent(ypbuf, &ai4);
- if (ai) {
- cur->ai_next = ai;
- while (cur && cur->ai_next)
- cur = cur->ai_next;
- }
- }
- free(ypbuf);
- }
-
- /* ipnodes.byname can hold both IPv4/v6 */
- r = yp_match(ypdomain, "ipnodes.byname", name,
- (int)strlen(name), &ypbuf, &ypbuflen);
- if (r == 0) {
- ai = _yphostent(ypbuf, pai);
- if (ai)
- cur->ai_next = ai;
- free(ypbuf);
- }
-
- if (sentinel.ai_next == NULL) {
- h_errno = HOST_NOT_FOUND;
- return NS_NOTFOUND;
- }
- *((struct addrinfo **)rv) = sentinel.ai_next;
- return NS_SUCCESS;
-}
-#endif
-
-/* resolver logic */
-
-/*
- * Formulate a normal query, send, and await answer.
- * Returned answer is placed in supplied buffer "answer".
- * Perform preliminary check of answer, returning success only
- * if no error is indicated and the answer count is nonzero.
- * Return the size of the response on success, -1 on error.
- * Error number is left in h_errno.
- *
- * Caller must parse answer and determine whether it answers the question.
- */
-static int
-res_queryN(const char *name, /* domain name */ struct res_target *target,
- res_state res)
-{
- static u_char buf[MAXPACKET];
- HEADER *hp;
- int n;
- struct res_target *t;
- int rcode;
- int ancount;
-
- _DIAGASSERT(name != NULL);
- /* XXX: target may be NULL??? */
-
- rcode = NOERROR;
- ancount = 0;
-
- for (t = target; t; t = t->next) {
- int class, type;
- u_char *answer;
- int anslen;
-
- hp = (HEADER *)(void *)t->answer;
- hp->rcode = NOERROR; /* default */
-
- /* make it easier... */
- class = t->qclass;
- type = t->qtype;
- answer = t->answer;
- anslen = t->anslen;
-#ifdef DEBUG
- if (res->options & RES_DEBUG)
- printf(";; res_nquery(%s, %d, %d)\n", name, class, type);
-#endif
-
- n = res_nmkquery(res, QUERY, name, class, type, NULL, 0, NULL,
- buf, sizeof(buf));
-#ifdef RES_USE_EDNS0
- if (n > 0 && (res->options & RES_USE_EDNS0) != 0)
- n = res_nopt(res, n, buf, sizeof(buf), anslen);
-#endif
- if (n <= 0) {
-#ifdef DEBUG
- if (res->options & RES_DEBUG)
- printf(";; res_nquery: mkquery failed\n");
-#endif
- h_errno = NO_RECOVERY;
- return n;
- }
- n = res_nsend(res, buf, n, answer, anslen);
-#if 0
- if (n < 0) {
-#ifdef DEBUG
- if (res->options & RES_DEBUG)
- printf(";; res_query: send error\n");
-#endif
- h_errno = TRY_AGAIN;
- return n;
- }
-#endif
-
- if (n < 0 || hp->rcode != NOERROR || ntohs(hp->ancount) == 0) {
- rcode = hp->rcode; /* record most recent error */
-#ifdef DEBUG
- if (res->options & RES_DEBUG)
- printf(";; rcode = %u, ancount=%u\n", hp->rcode,
- ntohs(hp->ancount));
-#endif
- continue;
- }
-
- ancount += ntohs(hp->ancount);
-
- t->n = n;
- }
-
- if (ancount == 0) {
- switch (rcode) {
- case NXDOMAIN:
- h_errno = HOST_NOT_FOUND;
- break;
- case SERVFAIL:
- h_errno = TRY_AGAIN;
- break;
- case NOERROR:
- h_errno = NO_DATA;
- break;
- case FORMERR:
- case NOTIMP:
- case REFUSED:
- default:
- h_errno = NO_RECOVERY;
- break;
- }
- return -1;
- }
- return ancount;
-}
-
-/*
- * Formulate a normal query, send, and retrieve answer in supplied buffer.
- * Return the size of the response on success, -1 on error.
- * If enabled, implement search rules until answer or unrecoverable failure
- * is detected. Error code, if any, is left in h_errno.
- */
-static int
-res_searchN(const char *name, struct res_target *target, res_state res)
-{
- const char *cp, * const *domain;
- HEADER *hp;
- u_int dots;
- int trailing_dot, ret, saved_herrno;
- int got_nodata = 0, got_servfail = 0, tried_as_is = 0;
-
- _DIAGASSERT(name != NULL);
- _DIAGASSERT(target != NULL);
-
- hp = (HEADER *)(void *)target->answer; /*XXX*/
-
- errno = 0;
- h_errno = HOST_NOT_FOUND; /* default, if we never query */
- dots = 0;
- for (cp = name; *cp; cp++)
- dots += (*cp == '.');
- trailing_dot = 0;
- if (cp > name && *--cp == '.')
- trailing_dot++;
-
- /*
- * if there aren't any dots, it could be a user-level alias
- */
- if (!dots && (cp = __hostalias(name)) != NULL) {
- ret = res_queryN(cp, target, res);
- return ret;
- }
-
- /*
- * If there are dots in the name already, let's just give it a try
- * 'as is'. The threshold can be set with the "ndots" option.
- */
- saved_herrno = -1;
- if (dots >= res->ndots) {
- ret = res_querydomainN(name, NULL, target, res);
- if (ret > 0)
- return (ret);
- saved_herrno = h_errno;
- tried_as_is++;
- }
-
- /*
- * We do at least one level of search if
- * - there is no dot and RES_DEFNAME is set, or
- * - there is at least one dot, there is no trailing dot,
- * and RES_DNSRCH is set.
- */
- if ((!dots && (res->options & RES_DEFNAMES)) ||
- (dots && !trailing_dot && (res->options & RES_DNSRCH))) {
- int done = 0;
-
- for (domain = (const char * const *)res->dnsrch;
- *domain && !done;
- domain++) {
-
- ret = res_querydomainN(name, *domain, target, res);
- if (ret > 0)
- return ret;
-
- /*
- * If no server present, give up.
- * If name isn't found in this domain,
- * keep trying higher domains in the search list
- * (if that's enabled).
- * On a NO_DATA error, keep trying, otherwise
- * a wildcard entry of another type could keep us
- * from finding this entry higher in the domain.
- * If we get some other error (negative answer or
- * server failure), then stop searching up,
- * but try the input name below in case it's
- * fully-qualified.
- */
- if (errno == ECONNREFUSED) {
- h_errno = TRY_AGAIN;
- return -1;
- }
-
- switch (h_errno) {
- case NO_DATA:
- got_nodata++;
- /* FALLTHROUGH */
- case HOST_NOT_FOUND:
- /* keep trying */
- break;
- case TRY_AGAIN:
- if (hp->rcode == SERVFAIL) {
- /* try next search element, if any */
- got_servfail++;
- break;
- }
- /* FALLTHROUGH */
- default:
- /* anything else implies that we're done */
- done++;
- }
- /*
- * if we got here for some reason other than DNSRCH,
- * we only wanted one iteration of the loop, so stop.
- */
- if (!(res->options & RES_DNSRCH))
- done++;
- }
- }
-
- /*
- * if we have not already tried the name "as is", do that now.
- * note that we do this regardless of how many dots were in the
- * name or whether it ends with a dot.
- */
- if (!tried_as_is) {
- ret = res_querydomainN(name, NULL, target, res);
- if (ret > 0)
- return ret;
- }
-
- /*
- * if we got here, we didn't satisfy the search.
- * if we did an initial full query, return that query's h_errno
- * (note that we wouldn't be here if that query had succeeded).
- * else if we ever got a nodata, send that back as the reason.
- * else send back meaningless h_errno, that being the one from
- * the last DNSRCH we did.
- */
- if (saved_herrno != -1)
- h_errno = saved_herrno;
- else if (got_nodata)
- h_errno = NO_DATA;
- else if (got_servfail)
- h_errno = TRY_AGAIN;
- return -1;
-}
-
-/*
- * Perform a call on res_query on the concatenation of name and domain,
- * removing a trailing dot from name if domain is NULL.
- */
-static int
-res_querydomainN(const char *name, const char *domain,
- struct res_target *target, res_state res)
-{
- char nbuf[MAXDNAME];
- const char *longname = nbuf;
- size_t n, d;
-
- _DIAGASSERT(name != NULL);
- /* XXX: target may be NULL??? */
-
-#ifdef DEBUG
- if (res->options & RES_DEBUG)
- printf(";; res_querydomain(%s, %s)\n",
- name, domain?domain:"<Nil>");
-#endif
- if (domain == NULL) {
- /*
- * Check for trailing '.';
- * copy without '.' if present.
- */
- n = strlen(name);
- if (n + 1 > sizeof(nbuf)) {
- h_errno = NO_RECOVERY;
- return -1;
- }
- if (n > 0 && name[--n] == '.') {
- strncpy(nbuf, name, n);
- nbuf[n] = '\0';
- } else
- longname = name;
- } else {
- n = strlen(name);
- d = strlen(domain);
- if (n + 1 + d + 1 > sizeof(nbuf)) {
- h_errno = NO_RECOVERY;
- return -1;
- }
- snprintf(nbuf, sizeof(nbuf), "%s.%s", name, domain);
- }
- return res_queryN(longname, target, res);
-}
diff --git a/StdLib/BsdSocketLib/gethostbydns.c b/StdLib/BsdSocketLib/gethostbydns.c
deleted file mode 100644
index 25e7c3b142..0000000000
--- a/StdLib/BsdSocketLib/gethostbydns.c
+++ /dev/null
@@ -1,814 +0,0 @@
-/*
- * ++Copyright++ 1985, 1988, 1993
- * -
- * Copyright (c) 1985, 1988, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * -
- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- * -
- * --Copyright--
- */
-
-/*
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and
- * its contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)gethostnamadr.c 8.1 (Berkeley) 6/4/93";
-static char fromrcsid[] = "From: Id: gethnamaddr.c,v 8.23 1998/04/07 04:59:46 vixie Exp $";
-static char rcsid[] = "$Id: gethostbydns.c,v 1.1.1.1 2003/11/19 01:51:27 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <ctype.h>
-#include <errno.h>
-#ifdef _ORG_FREEBSD_
-#include <syslog.h>
-#else
-#include <stdlib.h>
-u_int32_t _getlong(const u_char *src);
-u_int16_t _getshort(const u_char *src);
-#endif
-
-#include "res_config.h"
-#include "Socklib_internals.h"
-
-#define SPRINTF(x) ((size_t)sprintf x)
-
-#define MAXALIASES 35
-#define MAXADDRS 35
-
-static const char AskedForGot[] =
- "gethostby*.gethostanswer: asked for \"%s\", got \"%s\"";
-
-static char *h_addr_ptrs[MAXADDRS + 1];
-
-static struct hostent host;
-static char *host_aliases[MAXALIASES];
-static char hostbuf[8*1024];
-static u_char host_addr[16]; /* IPv4 or IPv6 */
-
-#ifdef RESOLVSORT
-static void addrsort(char **, int);
-#endif
-
-#if PACKETSZ > 1024
-#define MAXPACKET PACKETSZ
-#else
-#define MAXPACKET 1024
-#endif
-
-typedef union {
- HEADER hdr;
- u_char buf[MAXPACKET];
-} querybuf;
-
-typedef union {
- int32_t al;
- char ac;
-} align;
-
-extern int h_errno;
-int _dns_ttl_;
-
-#ifdef DEBUG_RES
-static void
-dprintf(char *msg, int num)
-{
- if (_res.options & RES_DEBUG) {
- int save = errno;
-
- printf(msg, num);
- errno = save;
- }
-}
-#else
-# define dprintf(msg, num) /*nada*/
-#endif
-
-#define BOUNDED_INCR(x) \
- do { \
- cp += x; \
- if (cp > eom) { \
- h_errno = NO_RECOVERY; \
- return (NULL); \
- } \
- } while (0)
-
-#define BOUNDS_CHECK(ptr, count) \
- do { \
- if ((ptr) + (count) > eom) { \
- h_errno = NO_RECOVERY; \
- return (NULL); \
- } \
- } while (0)
-
-static struct hostent *
-gethostanswer(const querybuf *answer, int anslen, const char *qname, int qtype)
-{
- register const HEADER *hp;
- register const u_char *cp;
- register int n;
- const u_char *eom, *erdata;
- char *bp, **ap, **hap;
- int type, class, buflen, ancount, qdcount;
- int haveanswer, had_error;
- int toobig = 0;
- char tbuf[MAXDNAME];
- const char *tname;
- int (*name_ok)(const char *);
-
- tname = qname;
- host.h_name = NULL;
- eom = answer->buf + anslen;
- switch (qtype) {
- case T_A:
- case T_AAAA:
- name_ok = res_hnok;
- break;
- case T_PTR:
- name_ok = res_dnok;
- break;
- default:
- h_errno = NO_RECOVERY;
- return (NULL); /* XXX should be abort(); */
- }
- /*
- * find first satisfactory answer
- */
- hp = &answer->hdr;
- ancount = ntohs(hp->ancount);
- qdcount = ntohs(hp->qdcount);
- bp = hostbuf;
- buflen = sizeof hostbuf;
- cp = answer->buf;
- BOUNDED_INCR(HFIXEDSZ);
- if (qdcount != 1) {
- h_errno = NO_RECOVERY;
- return (NULL);
- }
- n = dn_expand(answer->buf, eom, cp, bp, buflen);
- if ((n < 0) || !(*name_ok)(bp)) {
- h_errno = NO_RECOVERY;
- return (NULL);
- }
- BOUNDED_INCR(n + QFIXEDSZ);
- if (qtype == T_A || qtype == T_AAAA) {
- /* res_send() has already verified that the query name is the
- * same as the one we sent; this just gets the expanded name
- * (i.e., with the succeeding search-domain tacked on).
- */
- n = (int)strlen(bp) + 1; /* for the \0 */
- if (n >= MAXHOSTNAMELEN) {
- h_errno = NO_RECOVERY;
- return (NULL);
- }
- host.h_name = bp;
- bp += n;
- buflen -= n;
- /* The qname can be abbreviated, but h_name is now absolute. */
- qname = host.h_name;
- }
- ap = host_aliases;
- *ap = NULL;
- host.h_aliases = host_aliases;
- hap = h_addr_ptrs;
- *hap = NULL;
- host.h_addr_list = h_addr_ptrs;
- haveanswer = 0;
- had_error = 0;
- _dns_ttl_ = -1;
- while (ancount-- > 0 && cp < eom && !had_error) {
- n = dn_expand(answer->buf, eom, cp, bp, buflen);
- if ((n < 0) || !(*name_ok)(bp)) {
- had_error++;
- continue;
- }
- cp += n; /* name */
- BOUNDS_CHECK(cp, 3 * INT16SZ + INT32SZ);
- type = _getshort(cp);
- cp += INT16SZ; /* type */
- class = _getshort(cp);
- cp += INT16SZ; /* class */
- if (qtype == T_A && type == T_A)
- _dns_ttl_ = _getlong(cp);
- cp += INT32SZ; /* TTL */
- n = _getshort(cp);
- cp += INT16SZ; /* len */
- BOUNDS_CHECK(cp, n);
- erdata = cp + n;
- if (class != C_IN) {
- /* XXX - debug? syslog? */
- cp += n;
- continue; /* XXX - had_error++ ? */
- }
- if ((qtype == T_A || qtype == T_AAAA) && type == T_CNAME) {
- if (ap >= &host_aliases[MAXALIASES-1])
- continue;
- n = dn_expand(answer->buf, eom, cp, tbuf, sizeof tbuf);
- if ((n < 0) || !(*name_ok)(tbuf)) {
- had_error++;
- continue;
- }
- cp += n;
- if (cp != erdata) {
- h_errno = NO_RECOVERY;
- return (NULL);
- }
- /* Store alias. */
- *ap++ = bp;
- n = (int)strlen(bp) + 1; /* for the \0 */
- if (n >= MAXHOSTNAMELEN) {
- had_error++;
- continue;
- }
- bp += n;
- buflen -= n;
- /* Get canonical name. */
- n = (int)strlen(tbuf) + 1; /* for the \0 */
- if (n > buflen || n >= MAXHOSTNAMELEN) {
- had_error++;
- continue;
- }
- strcpy(bp, tbuf);
- host.h_name = bp;
- bp += n;
- buflen -= n;
- continue;
- }
- if (qtype == T_PTR && type == T_CNAME) {
- n = dn_expand(answer->buf, eom, cp, tbuf, sizeof tbuf);
- if (n < 0 || !res_dnok(tbuf)) {
- had_error++;
- continue;
- }
- cp += n;
- if (cp != erdata) {
- h_errno = NO_RECOVERY;
- return (NULL);
- }
- /* Get canonical name. */
- n = (int)strlen(tbuf) + 1; /* for the \0 */
- if (n > buflen || n >= MAXHOSTNAMELEN) {
- had_error++;
- continue;
- }
- strcpy(bp, tbuf);
- tname = bp;
- bp += n;
- buflen -= n;
- continue;
- }
- if (type != qtype) {
-#ifdef _ORG_FREEBSD_
- syslog(LOG_NOTICE|LOG_AUTH,
- "gethostby*.gethostanswer: asked for \"%s %s %s\", got type \"%s\"",
- qname, p_class(C_IN), p_type(qtype),
- p_type(type));
-#endif
- cp += n;
- continue; /* XXX - had_error++ ? */
- }
- switch (type) {
- case T_PTR:
- if (strcasecmp(tname, bp) != 0) {
-#ifdef _ORG_FREEBSD_
- syslog(LOG_NOTICE|LOG_AUTH,
- AskedForGot, qname, bp);
-#endif
- cp += n;
- continue; /* XXX - had_error++ ? */
- }
- n = dn_expand(answer->buf, eom, cp, bp, buflen);
- if ((n < 0) || !res_hnok(bp)) {
- had_error++;
- break;
- }
-#if MULTI_PTRS_ARE_ALIASES
- cp += n;
- if (cp != erdata) {
- h_errno = NO_RECOVERY;
- return (NULL);
- }
- if (!haveanswer)
- host.h_name = bp;
- else if (ap < &host_aliases[MAXALIASES-1])
- *ap++ = bp;
- else
- n = -1;
- if (n != -1) {
- n = (int)strlen(bp) + 1; /* for the \0 */
- if (n >= MAXHOSTNAMELEN) {
- had_error++;
- break;
- }
- bp += n;
- buflen -= n;
- }
- break;
-#else
- host.h_name = bp;
- if (_res.options & RES_USE_INET6) {
- n = strlen(bp) + 1; /* for the \0 */
- if (n >= MAXHOSTNAMELEN) {
- had_error++;
- break;
- }
- bp += n;
- buflen -= n;
- _map_v4v6_hostent(&host, &bp, &buflen);
- }
- h_errno = NETDB_SUCCESS;
- return (&host);
-#endif
- case T_A:
- case T_AAAA:
- if (strcasecmp(host.h_name, bp) != 0) {
-#ifdef _ORG_FREEBSD_
- syslog(LOG_NOTICE|LOG_AUTH,
- AskedForGot, host.h_name, bp);
-#endif
- cp += n;
- continue; /* XXX - had_error++ ? */
- }
- if (n != host.h_length) {
- cp += n;
- continue;
- }
- if (!haveanswer) {
- register int nn;
-
- host.h_name = bp;
- nn = (int)strlen(bp) + 1; /* for the \0 */
- bp += nn;
- buflen -= nn;
- }
-
- bp += sizeof(align) - ((size_t)bp % sizeof(align));
-
- if (bp + n >= &hostbuf[sizeof hostbuf]) {
- dprintf("size (%d) too big\n", n);
- had_error++;
- continue;
- }
- if (hap >= &h_addr_ptrs[MAXADDRS-1]) {
- if (!toobig++)
- dprintf("Too many addresses (%d)\n",
- MAXADDRS);
- cp += n;
- continue;
- }
- *hap++ = bp;
- bcopy(cp, bp, n);
- bp += n;
- buflen -= n;
- cp += n;
- if (cp != erdata) {
- h_errno = NO_RECOVERY;
- return (NULL);
- }
- break;
- default:
- dprintf("Impossible condition (type=%d)\n", type);
- h_errno = NO_RECOVERY;
- return (NULL);
- /* BIND has abort() here, too risky on bad data */
- }
- if (!had_error)
- haveanswer++;
- }
- if (haveanswer) {
- *ap = NULL;
- *hap = NULL;
-# if defined(RESOLVSORT)
- /*
- * Note: we sort even if host can take only one address
- * in its return structures - should give it the "best"
- * address in that case, not some random one
- */
- if (_res.nsort && haveanswer > 1 && qtype == T_A)
- addrsort(h_addr_ptrs, haveanswer);
-# endif /*RESOLVSORT*/
- if (!host.h_name) {
- n = (int)strlen(qname) + 1; /* for the \0 */
- if (n > buflen || n >= MAXHOSTNAMELEN)
- goto no_recovery;
- strcpy(bp, qname);
- host.h_name = bp;
- bp += n;
- buflen -= n;
- }
- if (_res.options & RES_USE_INET6)
- _map_v4v6_hostent(&host, &bp, &buflen);
- h_errno = NETDB_SUCCESS;
- return (&host);
- }
- no_recovery:
- h_errno = NO_RECOVERY;
- return (NULL);
-}
-
-struct hostent *
-__dns_getanswer(const char *answer, int anslen, const char *qname, int qtype)
-{
- switch(qtype) {
- case T_AAAA:
- host.h_addrtype = AF_INET6;
- host.h_length = IN6ADDRSZ;
- break;
- case T_A:
- default:
- host.h_addrtype = AF_INET;
- host.h_length = INADDRSZ;
- break;
- }
-
- return(gethostanswer((const querybuf *)answer, anslen, qname, qtype));
-}
-
-struct hostent *
-_gethostbydnsname(const char *name, int af)
-{
- querybuf buf;
- register const char *cp;
- char *bp;
- int n, size, type, len;
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
- h_errno = NETDB_INTERNAL;
- return (NULL);
- }
-
- switch (af) {
- case AF_INET:
- size = INADDRSZ;
- type = T_A;
- break;
- case AF_INET6:
- size = IN6ADDRSZ;
- type = T_AAAA;
- break;
- default:
- h_errno = NETDB_INTERNAL;
- errno = EAFNOSUPPORT;
- return (NULL);
- }
-
- host.h_addrtype = af;
- host.h_length = size;
-
- /*
- * if there aren't any dots, it could be a user-level alias.
- * this is also done in res_query() since we are not the only
- * function that looks up host names.
- */
- if (!strchr(name, '.') && ( NULL != (cp = __hostalias(name))))
- name = cp;
-
- /*
- * disallow names consisting only of digits/dots, unless
- * they end in a dot.
- */
- if (isdigit(name[0]))
- for (cp = name;; ++cp) {
- if (!*cp) {
- if (*--cp == '.')
- break;
- /*
- * All-numeric, no dot at the end.
- * Fake up a hostent as if we'd actually
- * done a lookup.
- */
- if (inet_pton(af, name, host_addr) <= 0) {
- h_errno = HOST_NOT_FOUND;
- return (NULL);
- }
- strncpy(hostbuf, name, MAXDNAME);
- hostbuf[MAXDNAME] = '\0';
- bp = hostbuf + MAXDNAME;
- len = sizeof hostbuf - MAXDNAME;
- host.h_name = hostbuf;
- host.h_aliases = host_aliases;
- host_aliases[0] = NULL;
- h_addr_ptrs[0] = (char *)host_addr;
- h_addr_ptrs[1] = NULL;
- host.h_addr_list = h_addr_ptrs;
- if (_res.options & RES_USE_INET6)
- _map_v4v6_hostent(&host, &bp, &len);
- h_errno = NETDB_SUCCESS;
- return (&host);
- }
- if (!isdigit(*cp) && *cp != '.')
- break;
- }
- if ((isxdigit(name[0]) && strchr(name, ':') != NULL) ||
- name[0] == ':')
- for (cp = name;; ++cp) {
- if (!*cp) {
- if (*--cp == '.')
- break;
- /*
- * All-IPv6-legal, no dot at the end.
- * Fake up a hostent as if we'd actually
- * done a lookup.
- */
- if (inet_pton(af, name, host_addr) <= 0) {
- h_errno = HOST_NOT_FOUND;
- return (NULL);
- }
- strncpy(hostbuf, name, MAXDNAME);
- hostbuf[MAXDNAME] = '\0';
- bp = hostbuf + MAXDNAME;
- len = sizeof hostbuf - MAXDNAME;
- host.h_name = hostbuf;
- host.h_aliases = host_aliases;
- host_aliases[0] = NULL;
- h_addr_ptrs[0] = (char *)host_addr;
- h_addr_ptrs[1] = NULL;
- host.h_addr_list = h_addr_ptrs;
- h_errno = NETDB_SUCCESS;
- return (&host);
- }
- if (!isxdigit(*cp) && *cp != ':' && *cp != '.')
- break;
- }
-
- if ((n = res_search(name, C_IN, type, buf.buf, sizeof(buf))) < 0) {
- dprintf("res_search failed (%d)\n", n);
- return (NULL);
- }
- return (gethostanswer(&buf, n, name, type));
-}
-
-struct hostent *
-_gethostbydnsaddr(const char *addr, int len, int af)
-{
- const u_char *uaddr = (const u_char *)addr;
- static const u_char mapped[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0xff,0xff };
- static const u_char tunnelled[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 };
- int n, size;
- querybuf buf;
- register struct hostent *hp;
- char qbuf[MAXDNAME+1], *qp;
-#ifdef SUNSECURITY
- register struct hostent *rhp;
- char **haddr;
- u_long old_options;
- char hname2[MAXDNAME+1];
-#endif /*SUNSECURITY*/
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
- h_errno = NETDB_INTERNAL;
- return (NULL);
- }
- if (af == AF_INET6 && len == IN6ADDRSZ &&
- (!bcmp(uaddr, mapped, sizeof mapped) ||
- !bcmp(uaddr, tunnelled, sizeof tunnelled))) {
- /* Unmap. */
- addr += sizeof mapped;
- uaddr += sizeof mapped;
- af = AF_INET;
- len = INADDRSZ;
- }
- switch (af) {
- case AF_INET:
- size = INADDRSZ;
- break;
- case AF_INET6:
- size = IN6ADDRSZ;
- break;
- default:
- errno = EAFNOSUPPORT;
- h_errno = NETDB_INTERNAL;
- return (NULL);
- }
- if (size != len) {
- errno = EINVAL;
- h_errno = NETDB_INTERNAL;
- return (NULL);
- }
- switch (af) {
- case AF_INET:
- (void) sprintf(qbuf, "%u.%u.%u.%u.in-addr.arpa",
- (uaddr[3] & 0xff),
- (uaddr[2] & 0xff),
- (uaddr[1] & 0xff),
- (uaddr[0] & 0xff));
- break;
- case AF_INET6:
- qp = qbuf;
- for (n = IN6ADDRSZ - 1; n >= 0; n--) {
- qp += SPRINTF((qp, "%x.%x.",
- uaddr[n] & 0xf,
- (uaddr[n] >> 4) & 0xf));
- }
- strcpy(qp, "ip6.int");
- break;
- default:
- abort();
- }
- n = res_query(qbuf, C_IN, T_PTR, (u_char *)buf.buf, sizeof buf.buf);
- if (n < 0) {
- dprintf("res_query failed (%d)\n", n);
- return (NULL);
- }
- if ( NULL == (hp = gethostanswer(&buf, n, qbuf, T_PTR)))
- return (NULL); /* h_errno was set by gethostanswer() */
-#ifdef SUNSECURITY
- if (af == AF_INET) {
- /*
- * turn off search as the name should be absolute,
- * 'localhost' should be matched by defnames
- */
- strncpy(hname2, hp->h_name, MAXDNAME);
- hname2[MAXDNAME] = '\0';
- old_options = _res.options;
- _res.options &= ~RES_DNSRCH;
- _res.options |= RES_DEFNAMES;
- if (!(rhp = gethostbyname(hname2))) {
-#ifdef _ORG_FREEBSD_
- syslog(LOG_NOTICE|LOG_AUTH,
- "gethostbyaddr: No A record for %s (verifying [%s])",
- hname2, inet_ntoa(*((struct in_addr *)addr)));
-#endif
- _res.options = old_options;
- h_errno = HOST_NOT_FOUND;
- return (NULL);
- }
- _res.options = old_options;
- for (haddr = rhp->h_addr_list; *haddr; haddr++)
- if (!memcmp(*haddr, addr, INADDRSZ))
- break;
- if (!*haddr) {
-#ifdef _ORG_FREEBSD_
- syslog(LOG_NOTICE|LOG_AUTH,
- "gethostbyaddr: A record of %s != PTR record [%s]",
- hname2, inet_ntoa(*((struct in_addr *)addr)));
-#endif
- h_errno = HOST_NOT_FOUND;
- return (NULL);
- }
- }
-#endif /*SUNSECURITY*/
- hp->h_addrtype = af;
- hp->h_length = len;
- bcopy(addr, host_addr, len);
- h_addr_ptrs[0] = (char *)host_addr;
- h_addr_ptrs[1] = NULL;
- if (af == AF_INET && (_res.options & RES_USE_INET6)) {
- _map_v4v6_address((char*)host_addr, (char*)host_addr);
- hp->h_addrtype = AF_INET6;
- hp->h_length = IN6ADDRSZ;
- }
- h_errno = NETDB_SUCCESS;
- return (hp);
-}
-
-#ifdef RESOLVSORT
-static void
-addrsort(char **ap, int num)
-{
- short i, j;
- char **p;
- short aval[MAXADDRS];
- short needsort = 0;
-
- p = ap;
- for (i = 0; i < num; i++, p++) {
- for (j = 0 ; (unsigned)j < _res.nsort; j++)
- if (_res.sort_list[j].addr.s_addr ==
- (((struct in_addr *)(*p))->s_addr & _res.sort_list[j].mask))
- break;
- aval[i] = j;
- if (needsort == 0 && i > 0 && j < aval[i-1])
- needsort = i;
- }
- if (!needsort)
- return;
-
- while (needsort < num) {
- for (j = needsort - 1; j >= 0; j--) {
- if (aval[j] > aval[j+1]) {
- char *hp;
-
- i = aval[j];
- aval[j] = aval[j+1];
- aval[j+1] = i;
-
- hp = ap[j];
- ap[j] = ap[j+1];
- ap[j+1] = hp;
-
- } else
- break;
- }
- needsort++;
- }
-}
-#endif
-void
-_sethostdnsent(int stayopen)
-{
- if ((_res.options & RES_INIT) == 0 && res_init() == -1)
- return;
- if (stayopen)
- _res.options |= RES_STAYOPEN | RES_USEVC;
-}
-
-void
-_endhostdnsent()
-{
- _res.options &= ~(RES_STAYOPEN | RES_USEVC);
- res_close();
-}
diff --git a/StdLib/BsdSocketLib/gethostbyht.c b/StdLib/BsdSocketLib/gethostbyht.c
deleted file mode 100644
index ac31f8c915..0000000000
--- a/StdLib/BsdSocketLib/gethostbyht.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/*-
- * Copyright (c) 1985, 1988, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by the University of
- * California, Berkeley, Intel Corporation, and its contributors.
- *
- * 4. Neither the name of University, Intel Corporation, or their respective
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
- * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- * -
- * --Copyright--
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)gethostnamadr.c 8.1 (Berkeley) 6/4/93";
-static char rcsid[] = "$Id: gethostbyht.c,v 1.1.1.1 2003/11/19 01:51:27 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-#include <arpa/nameser.h> /* XXX */
-#include <resolv.h> /* XXX */
-#include "Socklib_internals.h"
-
-#define MAXALIASES 35
-
-static struct hostent host;
-static char *host_aliases[MAXALIASES];
-static char hostbuf[BUFSIZ+1];
-static FILE *hostf = NULL;
-static u_char host_addr[16]; /* IPv4 or IPv6 */
-static char *h_addr_ptrs[2];
-static int stayopen = 0;
-
-void
-_sethosthtent(int f)
-{
- if (!hostf)
- hostf = fopen(_PATH_HOSTS, "r" );
- else
- rewind(hostf);
- stayopen = f;
-}
-
-void
-_endhosthtent()
-{
- if (hostf && !stayopen) {
- (void) fclose(hostf);
- hostf = NULL;
- }
-}
-
-struct hostent *
-gethostent()
-{
- char *p;
- register char *cp, **q;
- int af, len;
-
- if (!hostf && ( NULL == (hostf = fopen(_PATH_HOSTS, "r" )))) {
- h_errno = NETDB_INTERNAL;
- return (NULL);
- }
- again:
- if ( NULL == (p = fgets(hostbuf, sizeof hostbuf, hostf))) {
- h_errno = HOST_NOT_FOUND;
- return (NULL);
- }
- if (*p == '#')
- goto again;
- if ( NULL == (cp = strpbrk(p, "#\n")))
- goto again;
- *cp = '\0';
- if ( NULL == (cp = strpbrk(p, " \t")))
- goto again;
- *cp++ = '\0';
- if (inet_pton(AF_INET6, p, host_addr) > 0) {
- af = AF_INET6;
- len = IN6ADDRSZ;
- } else if (inet_pton(AF_INET, p, host_addr) > 0) {
- if (_res.options & RES_USE_INET6) {
- _map_v4v6_address((char*)host_addr, (char*)host_addr);
- af = AF_INET6;
- len = IN6ADDRSZ;
- } else {
- af = AF_INET;
- len = INADDRSZ;
- }
- } else {
- goto again;
- }
- h_addr_ptrs[0] = (char *)host_addr;
- h_addr_ptrs[1] = NULL;
- host.h_addr_list = h_addr_ptrs;
- host.h_length = len;
- host.h_addrtype = af;
- while (*cp == ' ' || *cp == '\t')
- cp++;
- host.h_name = cp;
- q = host.h_aliases = host_aliases;
- if ((cp = strpbrk(cp, " \t\r")) != NULL)
- *cp++ = '\0';
- while (cp && *cp) {
- if (*cp == ' ' || *cp == '\t') {
- cp++;
- continue;
- }
- if (q < &host_aliases[MAXALIASES - 1])
- *q++ = cp;
- if ((cp = strpbrk(cp, " \t\r")) != NULL)
- *cp++ = '\0';
- }
- *q = NULL;
- h_errno = NETDB_SUCCESS;
- return (&host);
-}
-
-struct hostent *
-_gethostbyhtname(const char *name, int af)
-{
- register struct hostent *p;
- register char **cp;
-
- sethostent(0);
- while ((p = gethostent()) != NULL) {
- if (p->h_addrtype != af)
- continue;
- if (strcasecmp(p->h_name, name) == 0)
- break;
- for (cp = p->h_aliases; *cp != 0; cp++)
- if (strcasecmp(*cp, name) == 0)
- goto found;
- }
-found:
- endhostent();
- return (p);
-}
-
-struct hostent *
-_gethostbyhtaddr(const char *addr, int len, int af)
-{
- register struct hostent *p;
-
- sethostent(0);
- while ((p = gethostent()) != NULL)
- if (p->h_addrtype == af && !bcmp(p->h_addr, addr, len))
- break;
- endhostent();
- return (p);
-}
diff --git a/StdLib/BsdSocketLib/gethostbynis.c b/StdLib/BsdSocketLib/gethostbynis.c
deleted file mode 100644
index 72081dc265..0000000000
--- a/StdLib/BsdSocketLib/gethostbynis.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/*-
- * Copyright (c) 1994, Garrett Wollman
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)$Id: gethostbynis.c,v 1.1.1.1 2003/11/19 01:51:27 kyu3 Exp $";
-static char rcsid[] = "$Id: gethostbynis.c,v 1.1.1.1 2003/11/19 01:51:27 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-#ifdef YP
-#include <rpc/rpc.h>
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
-#endif
-
-#define MAXALIASES 35
-#define MAXADDRS 35
-
-#ifdef YP
-static char *host_aliases[MAXALIASES];
-static char hostaddr[MAXADDRS];
-static char *host_addrs[2];
-#endif /* YP */
-
-static struct hostent *
-_gethostbynis(const char *name, char *map, int af)
-{
-#ifdef YP
- register char *cp, **q;
- char *result;
- int resultlen;
- static struct hostent h;
- static char *domain = (char *)NULL;
- static char ypbuf[YPMAXRECORD + 2];
-
- switch(af) {
- case AF_INET:
- break;
- default:
- case AF_INET6:
- errno = EAFNOSUPPORT;
- return NULL;
- }
-
- if (domain == (char *)NULL)
- if (yp_get_default_domain (&domain))
- return ((struct hostent *)NULL);
-
- if (yp_match(domain, map, name, strlen(name), &result, &resultlen))
- return ((struct hostent *)NULL);
-
- /* avoid potential memory leak */
- bcopy((char *)result, (char *)&ypbuf, resultlen);
- ypbuf[resultlen] = '\0';
- free(result);
- result = (char *)&ypbuf;
-
- if ((cp = index(result, '\n')))
- *cp = '\0';
-
- cp = strpbrk(result, " \t");
- *cp++ = '\0';
- h.h_addr_list = host_addrs;
- h.h_addr = hostaddr;
- *((u_long *)h.h_addr) = inet_addr(result);
- h.h_length = sizeof(u_long);
- h.h_addrtype = AF_INET;
- while (*cp == ' ' || *cp == '\t')
- cp++;
- h.h_name = cp;
- q = h.h_aliases = host_aliases;
- cp = strpbrk(cp, " \t");
- if (cp != NULL)
- *cp++ = '\0';
- while (cp && *cp) {
- if (*cp == ' ' || *cp == '\t') {
- cp++;
- continue;
- }
- if (q < &host_aliases[MAXALIASES - 1])
- *q++ = cp;
- cp = strpbrk(cp, " \t");
- if (cp != NULL)
- *cp++ = '\0';
- }
- *q = NULL;
- return (&h);
-#else
- return (NULL);
-#endif /* YP */
-}
-
-struct hostent *
-_gethostbynisname(const char *name, int af)
-{
- return _gethostbynis(name, "hosts.byname", af);
-}
-
-struct hostent *
-_gethostbynisaddr(const char *addr, int len, int af)
-{
- return _gethostbynis(inet_ntoa(*(struct in_addr *)addr),"hosts.byaddr", af);
-}
diff --git a/StdLib/BsdSocketLib/gethostnamadr.c b/StdLib/BsdSocketLib/gethostnamadr.c
deleted file mode 100644
index 74a9ea1def..0000000000
--- a/StdLib/BsdSocketLib/gethostnamadr.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/*-
- * Copyright (c) 1994, Garrett Wollman
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)$Id: gethostnamadr.c,v 1.1.1.1 2003/11/19 01:51:27 kyu3 Exp $";
-static char rcsid[] = "$Id: gethostnamadr.c,v 1.1.1.1 2003/11/19 01:51:27 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <errno.h>
-#include <paths.h>
-#include <string.h>
-#include <arpa/nameser.h> /* XXX hack for _res */
-#include <resolv.h> /* XXX hack for _res */
-
-#include "Socklib_internals.h"
-
-
-enum service_type {
- SERVICE_NONE = 0,
- SERVICE_BIND,
- SERVICE_HOSTS,
- SERVICE_NIS };
-#define SERVICE_MAX SERVICE_NIS
-
-static struct {
- const char *name;
- enum service_type type;
-} service_names[] = {
- { "hosts", SERVICE_HOSTS },
- { _PATH_HOSTS, SERVICE_HOSTS },
- { "hosttable", SERVICE_HOSTS },
- { "htable", SERVICE_HOSTS },
- { "bind", SERVICE_BIND },
- { "dns", SERVICE_BIND },
- { "domain", SERVICE_BIND },
- { "yp", SERVICE_NIS },
- { "yellowpages", SERVICE_NIS },
- { "nis", SERVICE_NIS },
- { 0, SERVICE_NONE }
-};
-
-static enum service_type service_order[SERVICE_MAX + 1];
-static int service_done = 0;
-
-static enum service_type
-get_service_name(const char *name) {
- int i;
- for(i = 0; service_names[i].type != SERVICE_NONE; i++) {
- if(!strcasecmp(name, service_names[i].name)) {
- return service_names[i].type;
- }
- }
- return SERVICE_NONE;
-}
-
-static void
-init_services()
-{
- char *cp, *p, buf[BUFSIZ];
- register int cc = 0;
- FILE *fd;
-
- if ((fd = (FILE *)fopen(_PATH_HOSTCONF, "r")) == NULL) {
- /* make some assumptions */
- service_order[0] = SERVICE_HOSTS;
- service_order[1] = SERVICE_BIND;
- service_order[2] = SERVICE_NONE;
- } else {
- while (fgets(buf, BUFSIZ, fd) != NULL && cc < SERVICE_MAX) {
- if(buf[0] == '#')
- continue;
-
- p = buf;
- while ((cp = strsep(&p, "\n \t,:;")) != NULL && *cp == '\0')
- ;
- if (cp == NULL)
- continue;
- do {
- if (isalpha(cp[0])) {
- service_order[cc] = get_service_name(cp);
- if(service_order[cc] != SERVICE_NONE)
- cc++;
- }
- while ((cp = strsep(&p, "\n \t,:;")) != NULL && *cp == '\0')
- ;
- } while(cp != NULL && cc < SERVICE_MAX);
- }
- service_order[cc] = SERVICE_NONE;
- fclose(fd);
- }
- service_done = 1;
-}
-
-struct hostent *
-gethostbyname(const char *name)
-{
- struct hostent *hp;
-
- if (_res.options & RES_USE_INET6) { /* XXX */
- hp = gethostbyname2(name, AF_INET6); /* XXX */
- if (hp) /* XXX */
- return (hp); /* XXX */
- } /* XXX */
- return (gethostbyname2(name, AF_INET));
-}
-
-struct hostent *
-gethostbyname2(const char *name, int type)
-{
- struct hostent *hp = 0;
- int nserv = 0;
-
- if (!service_done)
- init_services();
-
- while (!hp) {
- switch (service_order[nserv]) {
- case SERVICE_NONE:
- return NULL;
- case SERVICE_HOSTS:
- hp = _gethostbyhtname(name, type);
- break;
- case SERVICE_BIND:
- hp = _gethostbydnsname(name, type);
- break;
- case SERVICE_NIS:
- hp = _gethostbynisname(name, type);
- break;
- }
- nserv++;
- }
- return hp;
-}
-
-struct hostent *
-gethostbyaddr(const char *addr, socklen_t len, int type)
-{
- struct hostent *hp = 0;
- int nserv = 0;
-
- if (!service_done)
- init_services();
-
- while (!hp) {
- switch (service_order[nserv]) {
- case SERVICE_NONE:
- return 0;
- case SERVICE_HOSTS:
- hp = _gethostbyhtaddr(addr, len, type);
- break;
- case SERVICE_BIND:
- hp = _gethostbydnsaddr(addr, len, type);
- break;
- case SERVICE_NIS:
- hp = _gethostbynisaddr(addr, len, type);
- break;
- }
- nserv++;
- }
- return hp;
-}
-
-#ifdef _THREAD_SAFE
-struct hostent_data;
-
-/*
- * Temporary function (not thread safe)
- */
-int gethostbyaddr_r(const char *addr, int len, int type,
- struct hostent *result, struct hostent_data *buffer)
-{
- struct hostent *hp;
- int ret;
- if ((hp = gethostbyaddr(addr, len, type)) == NULL) {
- ret = -1;
- } else {
- memcpy(result, hp, sizeof(struct hostent));
- ret = 0;
- }
- return(ret);
-}
-#endif
-
-void
-sethostent(int stayopen)
-{
- _sethosthtent(stayopen);
- _sethostdnsent(stayopen);
-}
-
-void
-endhostent()
-{
- _endhosthtent();
- _endhostdnsent();
-}
diff --git a/StdLib/BsdSocketLib/gethostname.c b/StdLib/BsdSocketLib/gethostname.c
deleted file mode 100644
index 1b0742ad7f..0000000000
--- a/StdLib/BsdSocketLib/gethostname.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software must
- * display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and its
- * contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-/*++
-
-Module Name:
-
- gethostname.c
-
-Abstract:
-
- Map FreeBSD gethostname call to EFI Interface
-
-
-Revision History
-
---*/
-
-int
-gethostname(
- char *name,
- size_t namelen
- )
-/*++
-
-Routine Description:
-
- Get the hostname for this system.
-
-Arguments:
-
- name - Pointer to storage for hostname.
- namelen - Length of name
-
-Returns:
-
- 0 on success, -1 if not set
-
---*/
-{
- char *pHost;
-
- pHost = getenv ("HOSTNAME");
-
- if ( pHost == NULL ) {
- *name = 0;
- } else {
- strncpy (name, pHost, namelen);
- name[namelen-1] = 0;
- }
-
- return (0);
-}
diff --git a/StdLib/BsdSocketLib/getnameinfo.c b/StdLib/BsdSocketLib/getnameinfo.c
deleted file mode 100644
index 6d74306880..0000000000
--- a/StdLib/BsdSocketLib/getnameinfo.c
+++ /dev/null
@@ -1,581 +0,0 @@
-/** @file
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-/* $NetBSD: getnameinfo.c,v 1.45 2006/10/15 16:14:46 christos Exp $ */
-/* $KAME: getnameinfo.c,v 1.45 2000/09/25 22:43:56 itojun Exp $ */
-
-/*
- * Copyright (c) 2000 Ben Harris.
- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Issues to be discussed:
- * - Thread safe-ness must be checked
- * - RFC2553 says that we should raise error on short buffer. X/Open says
- * we need to truncate the result. We obey RFC2553 (and X/Open should be
- * modified). ipngwg rough consensus seems to follow RFC2553.
- * - What is "local" in NI_FQDN?
- * - NI_NAMEREQD and NI_NUMERICHOST conflict with each other.
- * - (KAME extension) always attach textual scopeid (fe80::1%lo0), if
- * sin6_scope_id is filled - standardization status?
- * XXX breaks backward compat for code that expects no scopeid.
- * beware on merge.
- */
-
-#define INET6 1
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: getnameinfo.c,v 1.45 2006/10/15 16:14:46 christos Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <net/if_dl.h>
-//#include <net/if_ieee1394.h>
-//#include <net/if_types.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-#include <assert.h>
-#include <limits.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stddef.h>
-#include <string.h>
-
-#include <net/servent.h>
-
-#define CLLADDR(x) ( LLADDR(x) )
-#define endservent_r(svd) endservent()
-#define getservbyport_r(Port,pProto,pSv,pSvd) getservbyport(Port,pProto)
-
-#ifdef __weak_alias
-__weak_alias(getnameinfo,_getnameinfo)
-#endif
-
-static
-int
-hexname(
- const u_int8_t * cp,
- size_t len,
- char * host,
- socklen_t hostlen
- );
-
-static const struct afd {
- int a_af;
- socklen_t a_addrlen;
- socklen_t a_socklen;
- int a_off;
-} afdl [] = {
-#ifdef INET6
- {PF_INET6, sizeof(struct in6_addr), sizeof(struct sockaddr_in6),
- offsetof(struct sockaddr_in6, sin6_addr)},
-#endif
- {PF_INET, sizeof(struct in_addr), sizeof(struct sockaddr_in),
- offsetof(struct sockaddr_in, sin_addr)},
- {0, 0, 0, 0},
-};
-
-struct sockinet {
- u_char si_len;
- u_char si_family;
- u_short si_port;
-};
-
-static int getnameinfo_inet __P((const struct sockaddr *, socklen_t, char *,
- socklen_t, char *, socklen_t, int));
-#ifdef INET6
-static int ip6_parsenumeric __P((const struct sockaddr *, const char *, char *,
- socklen_t, int));
-static int ip6_sa2str __P((const struct sockaddr_in6 *, char *, size_t,
- int));
-#endif
-static int getnameinfo_link __P((const struct sockaddr *, socklen_t, char *,
- socklen_t, char *, socklen_t, int));
-static int hexname __P((const u_int8_t *, size_t, char *, socklen_t));
-
-/*
- * Top-level getnameinfo() code. Look at the address family, and pick an
- * appropriate function to call.
- */
-int
-getnameinfo(
- const struct sockaddr * sa,
- socklen_t salen,
- char * host,
- socklen_t hostlen,
- char * serv,
- socklen_t servlen,
- int flags
- )
-{
-
- switch (sa->sa_family) {
- case AF_INET:
- case AF_INET6:
- return getnameinfo_inet(sa, salen, host, hostlen,
- serv, servlen, flags);
- case AF_LINK:
- return getnameinfo_link(sa, salen, host, hostlen,
- serv, servlen, flags);
- default:
- return EAI_FAMILY;
- }
-}
-
-
-/*
- * getnameinfo_inet():
- * Format an IPv4 or IPv6 sockaddr into a printable string.
- */
-static
-int
-getnameinfo_inet(
- const struct sockaddr * sa,
- socklen_t salen,
- char * host,
- socklen_t hostlen,
- char * serv,
- socklen_t servlen,
- int flags
- )
-{
- const struct afd *afd;
- struct servent *sp;
- struct hostent *hp;
- u_short port;
- int family, i;
- const char *addr;
- u_int32_t v4a;
- char numserv[512];
- char numaddr[512];
-
- /* sa is checked below */
- /* host may be NULL */
- /* serv may be NULL */
-
- if (sa == NULL)
- return EAI_FAIL;
-
-#ifdef BSD4_4
- if (sa->sa_len != salen)
- return EAI_FAIL;
-#endif
-
- family = sa->sa_family;
- for (i = 0; afdl[i].a_af; i++)
- if (afdl[i].a_af == family) {
- afd = &afdl[i];
- goto found;
- }
- return EAI_FAMILY;
-
- found:
- if (salen != afd->a_socklen)
- return EAI_FAIL;
-
- /* network byte order */
- port = ((const struct sockinet *)(const void *)sa)->si_port;
- addr = (const char *)(const void *)sa + afd->a_off;
-
- if (serv == NULL || servlen == 0) {
- /*
- * do nothing in this case.
- * in case you are wondering if "&&" is more correct than
- * "||" here: rfc2553bis-03 says that serv == NULL OR
- * servlen == 0 means that the caller does not want the result.
- */
- } else {
- if (flags & NI_NUMERICSERV)
- sp = NULL;
- else {
- struct servent_data svd;
-// struct servent sv;
-
- (void)memset(&svd, 0, sizeof(svd));
- sp = getservbyport_r(port,
- (flags & NI_DGRAM) ? "udp" : "tcp", &sv, &svd);
- endservent_r(&svd);
- }
- if (sp) {
- if (strlen(sp->s_name) + 1 > servlen)
- return EAI_MEMORY;
- strlcpy(serv, sp->s_name, servlen);
- } else {
- snprintf(numserv, sizeof(numserv), "%u", ntohs(port));
- if (strlen(numserv) + 1 > servlen)
- return EAI_MEMORY;
- strlcpy(serv, numserv, servlen);
- }
- }
-
- switch (sa->sa_family) {
- case AF_INET:
- v4a = (u_int32_t)
- ntohl(((const struct sockaddr_in *)
- (const void *)sa)->sin_addr.s_addr);
- if (IN_MULTICAST(v4a) || IN_EXPERIMENTAL(v4a))
- flags |= NI_NUMERICHOST;
- v4a >>= IN_CLASSA_NSHIFT;
- if (v4a == 0)
- flags |= NI_NUMERICHOST;
- break;
-#ifdef INET6
- case AF_INET6:
- {
- const struct sockaddr_in6 *sin6;
- sin6 = (const struct sockaddr_in6 *)(const void *)sa;
- switch (sin6->sin6_addr.s6_addr[0]) {
- case 0x00:
- if (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr))
- ;
- else if (IN6_IS_ADDR_LOOPBACK(&sin6->sin6_addr))
- ;
- else
- flags |= NI_NUMERICHOST;
- break;
- default:
- if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)) {
- flags |= NI_NUMERICHOST;
- }
- else if (IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr))
- flags |= NI_NUMERICHOST;
- break;
- }
- }
- break;
-#endif
- }
- if (host == NULL || hostlen == 0) {
- /*
- * do nothing in this case.
- * in case you are wondering if "&&" is more correct than
- * "||" here: rfc2553bis-03 says that host == NULL or
- * hostlen == 0 means that the caller does not want the result.
- */
- } else if (flags & NI_NUMERICHOST) {
- size_t numaddrlen;
-
- /* NUMERICHOST and NAMEREQD conflicts with each other */
- if (flags & NI_NAMEREQD)
- return EAI_NONAME;
-
- switch(afd->a_af) {
-#ifdef INET6
- case AF_INET6:
- {
- int error;
-
- if ((error = ip6_parsenumeric(sa, addr, host,
- hostlen, flags)) != 0)
- return(error);
- break;
- }
-#endif
- default:
- if (inet_ntop(afd->a_af, addr, numaddr, sizeof(numaddr))
- == NULL)
- return EAI_SYSTEM;
- numaddrlen = strlen(numaddr);
- if (numaddrlen + 1 > hostlen) /* don't forget terminator */
- return EAI_MEMORY;
- strlcpy(host, numaddr, hostlen);
- break;
- }
- } else {
- hp = gethostbyaddr(addr, afd->a_addrlen, afd->a_af);
-
- if (hp) {
-#if 0
- /*
- * commented out, since "for local host" is not
- * implemented here - see RFC2553 p30
- */
- if (flags & NI_NOFQDN) {
- char *p;
- p = strchr(hp->h_name, '.');
- if (p)
- *p = '\0';
- }
-#endif
- if (strlen(hp->h_name) + 1 > hostlen) {
- return EAI_MEMORY;
- }
- strlcpy(host, hp->h_name, hostlen);
- } else {
- if (flags & NI_NAMEREQD)
- return EAI_NONAME;
- switch(afd->a_af) {
-#ifdef INET6
- case AF_INET6:
- {
- int error;
-
- if ((error = ip6_parsenumeric(sa, addr, host,
- hostlen,
- flags)) != 0)
- return(error);
- break;
- }
-#endif
- default:
- if (inet_ntop(afd->a_af, addr, host,
- hostlen) == NULL)
- return EAI_SYSTEM;
- break;
- }
- }
- }
- return(0);
-}
-
-#ifdef INET6
-static int
-ip6_parsenumeric(
- const struct sockaddr *sa,
- const char *addr,
- char *host,
- socklen_t hostlen,
- int flags
- )
-{
- size_t numaddrlen;
- char numaddr[512];
-
- _DIAGASSERT(sa != NULL);
- _DIAGASSERT(addr != NULL);
- _DIAGASSERT(host != NULL);
-
- if (inet_ntop(AF_INET6, addr, numaddr, sizeof(numaddr)) == NULL)
- return EAI_SYSTEM;
-
- numaddrlen = strlen(numaddr);
- if (numaddrlen + 1 > hostlen) /* don't forget terminator */
- return EAI_OVERFLOW;
- strlcpy(host, numaddr, hostlen);
-
- if (((const struct sockaddr_in6 *)(const void *)sa)->sin6_scope_id) {
- char zonebuf[MAXHOSTNAMELEN];
- int zonelen;
-
- zonelen = ip6_sa2str(
- (const struct sockaddr_in6 *)(const void *)sa,
- zonebuf, sizeof(zonebuf), flags);
- if (zonelen < 0)
- return EAI_OVERFLOW;
- if ((size_t) zonelen + 1 + numaddrlen + 1 > hostlen)
- return EAI_OVERFLOW;
- /* construct <numeric-addr><delim><zoneid> */
- memcpy(host + numaddrlen + 1, zonebuf,
- (size_t)zonelen);
- host[numaddrlen] = SCOPE_DELIMITER;
- host[numaddrlen + 1 + zonelen] = '\0';
- }
-
- return 0;
-}
-
-/* ARGSUSED */
-static int
-ip6_sa2str(
- const struct sockaddr_in6 *sa6,
- char *buf,
- size_t bufsiz,
- int flags
- )
-{
-#if 0
- unsigned int ifindex;
- const struct in6_addr *a6;
-#endif
- int n;
-
- _DIAGASSERT(sa6 != NULL);
- _DIAGASSERT(buf != NULL);
-
-#if 0
- ifindex = (unsigned int)sa6->sin6_scope_id;
- a6 = &sa6->sin6_addr;
-#endif
-
-#ifdef NI_NUMERICSCOPE
- if ((flags & NI_NUMERICSCOPE) != 0) {
- n = snprintf(buf, bufsiz, "%u", sa6->sin6_scope_id);
- if ((n < 0) || ((size_t)n >= bufsiz))
- return -1;
- else
- return n;
- }
-#endif
-
-#if 0
- /* if_indextoname() does not take buffer size. not a good api... */
- if ((IN6_IS_ADDR_LINKLOCAL(a6) || IN6_IS_ADDR_MC_LINKLOCAL(a6)) &&
- bufsiz >= IF_NAMESIZE) {
- char *p = if_indextoname(ifindex, buf);
- if (p) {
- return(strlen(p));
- }
- }
-#endif // 0
-
- /* last resort */
- n = snprintf(buf, bufsiz, "%u", sa6->sin6_scope_id);
- if (n < 0 || (size_t) n >= bufsiz)
- return -1;
- else
- return n;
-}
-#endif /* INET6 */
-
-
-/*
- * getnameinfo_link():
- * Format a link-layer address into a printable format, paying attention to
- * the interface type.
- */
-/* ARGSUSED */
-static
-int
-getnameinfo_link (
- const struct sockaddr * sa,
- socklen_t salen,
- char * host,
- socklen_t hostlen,
- char * serv,
- socklen_t servlen,
- int flags
- )
-{
- const struct sockaddr_dl *sdl =
- (const struct sockaddr_dl *)(const void *)sa;
-// const struct ieee1394_hwaddr *iha;
- int n;
-
- if (serv != NULL && servlen > 0)
- *serv = '\0';
-
- if (sdl->sdl_nlen == 0 && sdl->sdl_alen == 0 && sdl->sdl_slen == 0) {
- n = snprintf(host, hostlen, "link#%u", sdl->sdl_index);
- if (n < 0 || (socklen_t) n > hostlen) {
- *host = '\0';
- return EAI_MEMORY;
- }
- return 0;
- }
-
-#if 0
- switch (sdl->sdl_type) {
-#ifdef IFT_ECONET
- case IFT_ECONET:
- if (sdl->sdl_alen < 2)
- return EAI_FAMILY;
- if (CLLADDR(sdl)[1] == 0)
- n = snprintf(host, hostlen, "%u", CLLADDR(sdl)[0]);
- else
- n = snprintf(host, hostlen, "%u.%u",
- CLLADDR(sdl)[1], CLLADDR(sdl)[0]);
- if (n < 0 || (socklen_t) n >= hostlen) {
- *host = '\0';
- return EAI_MEMORY;
- } else
- return 0;
-#endif
- case IFT_IEEE1394:
- if (sdl->sdl_alen < sizeof(iha->iha_uid))
- return EAI_FAMILY;
- iha =
- (const struct ieee1394_hwaddr *)(const void *)CLLADDR(sdl);
- return hexname(iha->iha_uid, sizeof(iha->iha_uid),
- host, hostlen);
- /*
- * The following have zero-length addresses.
- * IFT_ATM (net/if_atmsubr.c)
- * IFT_FAITH (net/if_faith.c)
- * IFT_GIF (net/if_gif.c)
- * IFT_LOOP (net/if_loop.c)
- * IFT_PPP (net/if_ppp.c, net/if_spppsubr.c)
- * IFT_SLIP (net/if_sl.c, net/if_strip.c)
- * IFT_STF (net/if_stf.c)
- * IFT_L2VLAN (net/if_vlan.c)
- * IFT_PROPVIRTUAL (net/if_bridge.h>
- */
- /*
- * The following use IPv4 addresses as link-layer addresses:
- * IFT_OTHER (net/if_gre.c)
- */
- case IFT_ARCNET: /* default below is believed correct for all these. */
- case IFT_ETHER:
- case IFT_FDDI:
- case IFT_HIPPI:
- case IFT_ISO88025:
- default:
-#endif // 0
- return hexname((const u_int8_t *)CLLADDR(sdl),
- (size_t)sdl->sdl_alen, host, hostlen);
-// }
-}
-
-static
-int
-hexname(
- const u_int8_t * cp,
- size_t len,
- char * host,
- socklen_t hostlen
- )
-{
- int n;
- size_t i;
- char *outp = host;
-
- *outp = '\0';
- for (i = 0; i < len; i++) {
- n = snprintf(outp, hostlen, "%s%02x",
- i ? ":" : "", cp[i]);
- if (n < 0 || (socklen_t) n >= hostlen) {
- *host = '\0';
- return EAI_MEMORY;
- }
- outp += n;
- hostlen -= n;
- }
- return 0;
-}
diff --git a/StdLib/BsdSocketLib/getnetbydns.c b/StdLib/BsdSocketLib/getnetbydns.c
deleted file mode 100644
index b0fdef5d03..0000000000
--- a/StdLib/BsdSocketLib/getnetbydns.c
+++ /dev/null
@@ -1,318 +0,0 @@
-/*-
- * Copyright (c) 1985, 1988, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by the University of
- * California, Berkeley, Intel Corporation, and its contributors.
- *
- * 4. Neither the name of University, Intel Corporation, or their respective
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
- * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * -
- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- * -
- * --Copyright--
- */
-/* Portions Copyright (c) 1993 Carlos Leandro and Rui Salgueiro
- * Dep. Matematica Universidade de Coimbra, Portugal, Europe
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)gethostnamadr.c 8.1 (Berkeley) 6/4/93";
-static char rcsid[] = "$Id: getnetbydns.c,v 1.1.1.1 2003/11/19 01:51:27 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <stdio.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-#include <unistd.h>
-#ifdef _ORG_FREEBSD_
-#include <syslog.h>
-#endif
-
-#include "res_config.h"
-#include "Socklib_internals.h"
-
-extern int h_errno;
-
-#define BYADDR 0
-#define BYNAME 1
-#define MAXALIASES 35
-
-#if PACKETSZ > 1024
-#define MAXPACKET PACKETSZ
-#else
-#define MAXPACKET 1024
-#endif
-
-typedef union {
- HEADER hdr;
- u_char buf[MAXPACKET];
-} querybuf;
-
-typedef union {
- long al;
- char ac;
-} align;
-
-static struct netent *
-getnetanswer(querybuf *answer, int anslen, int net_i)
-{
-
- register HEADER *hp;
- register u_char *cp;
- register int n;
- u_char *eom;
- int type, class, buflen, ancount, qdcount, haveanswer, i, nchar;
- char aux1[MAXHOSTNAMELEN], aux2[MAXHOSTNAMELEN], ans[MAXHOSTNAMELEN];
- char *in, *st, *pauxt, *bp, **ap;
- char *paux1 = &aux1[0], *paux2 = &aux2[0], flag = 0;
-static struct netent net_entry;
-static char *net_aliases[MAXALIASES], netbuf[PACKETSZ];
-
- /*
- * find first satisfactory answer
- *
- * answer --> +------------+ ( MESSAGE )
- * | Header |
- * +------------+
- * | Question | the question for the name server
- * +------------+
- * | Answer | RRs answering the question
- * +------------+
- * | Authority | RRs pointing toward an authority
- * | Additional | RRs holding additional information
- * +------------+
- */
- eom = answer->buf + anslen;
- hp = &answer->hdr;
- ancount = ntohs(hp->ancount); /* #/records in the answer section */
- qdcount = ntohs(hp->qdcount); /* #/entries in the question section */
- bp = netbuf;
- buflen = sizeof(netbuf);
- cp = answer->buf + HFIXEDSZ;
- if (!qdcount) {
- if (hp->aa)
- h_errno = HOST_NOT_FOUND;
- else
- h_errno = TRY_AGAIN;
- return (NULL);
- }
- while (qdcount-- > 0)
- cp += __dn_skipname(cp, eom) + QFIXEDSZ;
- ap = net_aliases;
- *ap = NULL;
- net_entry.n_aliases = net_aliases;
- haveanswer = 0;
- while (--ancount >= 0 && cp < eom) {
- n = dn_expand(answer->buf, eom, cp, bp, buflen);
- if ((n < 0) || !res_dnok(bp))
- break;
- cp += n;
- ans[0] = '\0';
- (void)strncpy(&ans[0], bp, sizeof(ans) - 1);
- ans[sizeof(ans) - 1] = '\0';
- GETSHORT(type, cp);
- GETSHORT(class, cp);
- cp += INT32SZ; /* TTL */
- GETSHORT(n, cp);
- if (class == C_IN && type == T_PTR) {
- n = dn_expand(answer->buf, eom, cp, bp, buflen);
- if ((n < 0) || !res_hnok(bp)) {
- cp += n;
- return (NULL);
- }
- cp += n;
- *ap++ = bp;
- bp += strlen(bp) + 1;
- net_entry.n_addrtype =
- (class == C_IN) ? AF_INET : AF_UNSPEC;
- haveanswer++;
- }
- }
- if (haveanswer) {
- *ap = NULL;
- switch (net_i) {
- case BYADDR:
- net_entry.n_name = *net_entry.n_aliases;
- net_entry.n_net = 0L;
- break;
- case BYNAME:
- in = *net_entry.n_aliases;
- net_entry.n_name = &ans[0];
- aux2[0] = '\0';
- for (i = 0; i < 4; i++) {
- for (st = in, nchar = 0;
- *st != '.';
- st++, nchar++)
- ;
- if (nchar != 1 || *in != '0' || flag) {
- flag = 1;
- (void)strncpy(paux1,
- (i==0) ? in : in-1,
- (i==0) ?nchar : nchar+1);
- paux1[(i==0) ? nchar : nchar+1] = '\0';
- pauxt = paux2;
- paux2 = strcat(paux1, paux2);
- paux1 = pauxt;
- }
- in = ++st;
- }
- net_entry.n_net = inet_network(paux2);
- break;
- }
- net_entry.n_aliases++;
- return (&net_entry);
- }
- h_errno = TRY_AGAIN;
- return (NULL);
-}
-
-struct netent *
-_getnetbydnsaddr(register unsigned long net, register int net_type)
-{
- unsigned int netbr[4];
- int nn, anslen;
- querybuf buf;
- char qbuf[MAXDNAME];
- unsigned long net2;
- struct netent *net_entry;
-
- if (net_type != AF_INET)
- return (NULL);
-
- for (nn = 4, net2 = net; net2; net2 >>= 8)
- netbr[--nn] = net2 & 0xff;
- switch (nn) {
- case 3: /* Class A */
- sprintf(qbuf, "0.0.0.%u.in-addr.arpa", netbr[3]);
- break;
- case 2: /* Class B */
- sprintf(qbuf, "0.0.%u.%u.in-addr.arpa", netbr[3], netbr[2]);
- break;
- case 1: /* Class C */
- sprintf(qbuf, "0.%u.%u.%u.in-addr.arpa", netbr[3], netbr[2],
- netbr[1]);
- break;
- case 0: /* Class D - E */
- sprintf(qbuf, "%u.%u.%u.%u.in-addr.arpa", netbr[3], netbr[2],
- netbr[1], netbr[0]);
- break;
- }
- anslen = res_query(qbuf, C_IN, T_PTR, (u_char *)&buf, sizeof(buf));
- if (anslen < 0) {
-#ifdef DEBUG
- if (_res.options & RES_DEBUG)
- printf("res_query failed\n");
-#endif
- return (NULL);
- }
- net_entry = getnetanswer(&buf, anslen, BYADDR);
- if (net_entry) {
- unsigned u_net = net; /* maybe net should be unsigned ? */
-
- /* Strip trailing zeros */
- while ((u_net & 0xff) == 0 && u_net != 0)
- u_net >>= 8;
- net_entry->n_net = u_net;
- return (net_entry);
- }
- return (NULL);
-}
-
-struct netent *
-_getnetbydnsname(register const char *net)
-{
- int anslen;
- querybuf buf;
- char qbuf[MAXDNAME];
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
- h_errno = NETDB_INTERNAL;
- return (NULL);
- }
- strncpy(qbuf, net, sizeof(qbuf) - 1);
- qbuf[sizeof(qbuf) - 1] = '\0';
- anslen = res_search(qbuf, C_IN, T_PTR, (u_char *)&buf, sizeof(buf));
- if (anslen < 0) {
-#ifdef DEBUG
- if (_res.options & RES_DEBUG)
- printf("res_query failed\n");
-#endif
- return (NULL);
- }
- return getnetanswer(&buf, anslen, BYNAME);
-}
-
-void
-_setnetdnsent(int stayopen)
-{
- if (stayopen)
- _res.options |= RES_STAYOPEN | RES_USEVC;
-}
-
-void
-_endnetdnsent()
-{
- _res.options &= ~(RES_STAYOPEN | RES_USEVC);
- res_close();
-}
diff --git a/StdLib/BsdSocketLib/getnetbyht.c b/StdLib/BsdSocketLib/getnetbyht.c
deleted file mode 100644
index 08b80423b8..0000000000
--- a/StdLib/BsdSocketLib/getnetbyht.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/* Portions Copyright (c) 1993 Carlos Leandro and Rui Salgueiro
- * Dep. Matematica Universidade de Coimbra, Portugal, Europe
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * from getnetent.c 1.1 (Coimbra) 93/06/02
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)getnetent.c 8.1 (Berkeley) 6/4/93";
-static char orig_rcsid[] = "From: Id: getnetent.c,v 8.4 1997/06/01 20:34:37 vixie Exp";
-static chat rcsid[] = "$Id: getnetbyht.c,v 1.1.1.1 2003/11/19 01:51:27 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <string.h>
-
-#define MAXALIASES 35
-
-static FILE *netf;
-static char line[BUFSIZ+1];
-static struct netent net;
-static char *net_aliases[MAXALIASES];
-static int _net_stayopen;
-
-void
-_setnethtent(int f)
-{
-
- if (netf == NULL)
- netf = fopen(_PATH_NETWORKS, "r" );
- else
- rewind(netf);
- _net_stayopen |= f;
-}
-
-void
-_endnethtent()
-{
-
- if (netf) {
- fclose(netf);
- netf = NULL;
- }
- _net_stayopen = 0;
-}
-
-struct netent *
-getnetent()
-{
- char *p;
- register char *cp, **q;
-
- if (netf == NULL && (netf = fopen(_PATH_NETWORKS, "r" )) == NULL)
- return (NULL);
-again:
- p = fgets(line, sizeof line, netf);
- if (p == NULL)
- return (NULL);
- if (*p == '#')
- goto again;
- cp = strpbrk(p, "#\n");
- if (cp == NULL)
- goto again;
- *cp = '\0';
- net.n_name = p;
- cp = strpbrk(p, " \t");
- if (cp == NULL)
- goto again;
- *cp++ = '\0';
- while (*cp == ' ' || *cp == '\t')
- cp++;
- p = strpbrk(cp, " \t");
- if (p != NULL)
- *p++ = '\0';
- net.n_net = inet_network(cp);
- net.n_addrtype = AF_INET;
- q = net.n_aliases = net_aliases;
- if (p != NULL)
- cp = p;
- while (cp && *cp) {
- if (*cp == ' ' || *cp == '\t') {
- cp++;
- continue;
- }
- if (q < &net_aliases[MAXALIASES - 1])
- *q++ = cp;
- cp = strpbrk(cp, " \t");
- if (cp != NULL)
- *cp++ = '\0';
- }
- *q = NULL;
- return (&net);
-}
-
-struct netent *
-_getnetbyhtname(register const char *name)
-{
- register struct netent *p;
- register char **cp;
-
- setnetent(_net_stayopen);
- while ( NULL != (p = getnetent()) ) {
- if (strcasecmp(p->n_name, name) == 0)
- break;
- for (cp = p->n_aliases; *cp != 0; cp++)
- if (strcasecmp(*cp, name) == 0)
- goto found;
- }
-found:
- if (!_net_stayopen)
- endnetent();
- return (p);
-}
-
-struct netent *
-_getnetbyhtaddr(register unsigned long net, register int type)
-{
- register struct netent *p;
-
- setnetent(_net_stayopen);
- while ( NULL != (p = getnetent()) )
- if (p->n_addrtype == type && p->n_net == net)
- break;
- if (!_net_stayopen)
- endnetent();
- return (p);
-}
diff --git a/StdLib/BsdSocketLib/getnetbynis.c b/StdLib/BsdSocketLib/getnetbynis.c
deleted file mode 100644
index f81ca03c76..0000000000
--- a/StdLib/BsdSocketLib/getnetbynis.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/*-
- * Copyright (c) 1994, Garrett Wollman
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)$Id: getnetbynis.c,v 1.1.1.1 2003/11/19 01:51:28 kyu3 Exp $";
-static char rcsid[] = "$Id: getnetbynis.c,v 1.1.1.1 2003/11/19 01:51:28 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <errno.h>
-#include <string.h>
-#include <arpa/nameser.h>
-#ifdef YP
-#include <rpc/rpc.h>
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
-#endif
-
-#define MAXALIASES 35
-#define MAXADDRS 35
-
-#ifdef YP
-static char *host_aliases[MAXALIASES];
-#endif /* YP */
-
-static struct netent *
-_getnetbynis(const char *name, char *map, int af)
-{
-#ifdef YP
- register char *cp, **q;
- static char *result;
- int resultlen;
- static struct netent h;
- static char *domain = (char *)NULL;
- static char ypbuf[YPMAXRECORD + 2];
-
- switch(af) {
- case AF_INET:
- break;
- default:
- case AF_INET6:
- errno = EAFNOSUPPORT;
- return NULL;
- }
-
- if (domain == (char *)NULL)
- if (yp_get_default_domain (&domain))
- return (NULL);
-
- if (yp_match(domain, map, name, strlen(name), &result, &resultlen))
- return (NULL);
-
- bcopy((char *)result, (char *)&ypbuf, resultlen);
- ypbuf[resultlen] = '\0';
- free(result);
- result = (char *)&ypbuf;
-
- if ((cp = index(result, '\n')))
- *cp = '\0';
-
- cp = strpbrk(result, " \t");
- *cp++ = '\0';
- h.n_name = result;
-
- while (*cp == ' ' || *cp == '\t')
- cp++;
-
- h.n_net = inet_network(cp);
- h.n_addrtype = AF_INET;
-
- q = h.n_aliases = host_aliases;
- cp = strpbrk(cp, " \t");
- if (cp != NULL)
- *cp++ = '\0';
- while (cp && *cp) {
- if (*cp == ' ' || *cp == '\t') {
- cp++;
- continue;
- }
- if (q < &host_aliases[MAXALIASES - 1])
- *q++ = cp;
- cp = strpbrk(cp, " \t");
- if (cp != NULL)
- *cp++ = '\0';
- }
- *q = NULL;
- return (&h);
-#else
- return (NULL);
-#endif
-}
-
-struct netent *
-_getnetbynisname(const char *name)
-{
- return _getnetbynis(name, "networks.byname", AF_INET);
-}
-
-struct netent *
-_getnetbynisaddr(unsigned long addr, int af)
-{
- char *str, *cp;
- unsigned long net2;
- int nn;
- unsigned int netbr[4];
- char buf[MAXDNAME];
-
- if (af != AF_INET) {
- errno = EAFNOSUPPORT;
- return (NULL);
- }
-
- for (nn = 4, net2 = addr; net2; net2 >>= 8) {
- netbr[--nn] = net2 & 0xff;
- }
-
- switch (nn) {
- case 3: /* Class A */
- sprintf(buf, "%u", netbr[3]);
- break;
- case 2: /* Class B */
- sprintf(buf, "%u.%u", netbr[2], netbr[3]);
- break;
- case 1: /* Class C */
- sprintf(buf, "%u.%u.%u", netbr[1], netbr[2], netbr[3]);
- break;
- case 0: /* Class D - E */
- sprintf(buf, "%u.%u.%u.%u", netbr[0], netbr[1],
- netbr[2], netbr[3]);
- break;
- }
-
- str = (char *)&buf;
- cp = str + (strlen(str) - 2);
-
- while(!strcmp(cp, ".0")) {
- *cp = '\0';
- cp = str + (strlen(str) - 2);
- }
-
- return _getnetbynis(str, "networks.byaddr", af);
-}
diff --git a/StdLib/BsdSocketLib/getnetnamadr.c b/StdLib/BsdSocketLib/getnetnamadr.c
deleted file mode 100644
index b2eb73753a..0000000000
--- a/StdLib/BsdSocketLib/getnetnamadr.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/*-
- * Copyright (c) 1994, Garrett Wollman
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char rcsid[] = "$Id: getnetnamadr.c,v 1.1.1.1 2003/11/19 01:51:28 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <errno.h>
-#include <paths.h>
-#include <string.h>
-
-#include "Socklib_internals.h"
-
-enum service_type {
- SERVICE_NONE = 0,
- SERVICE_BIND,
- SERVICE_TABLE,
- SERVICE_NIS };
-#define SERVICE_MAX SERVICE_NIS
-
-static struct {
- const char *name;
- enum service_type type;
-} service_names[] = {
- { "hosts", SERVICE_TABLE },
- { _PATH_HOSTS, SERVICE_TABLE },
- { "hosttable", SERVICE_TABLE },
- { "htable", SERVICE_TABLE },
- { "bind", SERVICE_BIND },
- { "dns", SERVICE_BIND },
- { "domain", SERVICE_BIND },
- { "yp", SERVICE_NIS },
- { "yellowpages", SERVICE_NIS },
- { "nis", SERVICE_NIS },
- { 0, SERVICE_NONE }
-};
-
-static enum service_type service_order[SERVICE_MAX + 1];
-static int service_done = 0;
-
-static enum service_type
-get_service_name(const char *name) {
- int i;
- for(i = 0; service_names[i].type != SERVICE_NONE; i++) {
- if(!strcasecmp(name, service_names[i].name)) {
- return service_names[i].type;
- }
- }
- return SERVICE_NONE;
-}
-
-static void
-init_services()
-{
- char *cp, *p, buf[BUFSIZ];
- register int cc = 0;
- FILE *fd;
-
- if ((fd = (FILE *)fopen(_PATH_NETCONF, "r")) == NULL) {
- /* make some assumptions */
- service_order[0] = SERVICE_TABLE;
- service_order[1] = SERVICE_NONE;
- } else {
- while (fgets(buf, BUFSIZ, fd) != NULL && cc < SERVICE_MAX) {
- if(buf[0] == '#')
- continue;
-
- p = buf;
- while ((cp = strsep(&p, "\n \t,:;")) != NULL && *cp == '\0')
- ;
- if (cp == NULL)
- continue;
- do {
- if (isalpha(cp[0])) {
- service_order[cc] = get_service_name(cp);
- if(service_order[cc] != SERVICE_NONE)
- cc++;
- }
- while ((cp = strsep(&p, "\n \t,:;")) != NULL && *cp == '\0')
- ;
- } while(cp != NULL && cc < SERVICE_MAX);
- }
- service_order[cc] = SERVICE_NONE;
- fclose(fd);
- }
- service_done = 1;
-}
-
-struct netent *
-getnetbyname(const char *name)
-{
- struct netent *hp = 0;
- int nserv = 0;
-
- if (!service_done)
- init_services();
-
- while (!hp) {
- switch (service_order[nserv]) {
- case SERVICE_NONE:
- return NULL;
- case SERVICE_TABLE:
- hp = _getnetbyhtname(name);
- break;
- case SERVICE_BIND:
- hp = _getnetbydnsname(name);
- break;
- case SERVICE_NIS:
- hp = _getnetbynisname(name);
- break;
- }
- nserv++;
- }
- return hp;
-}
-
-struct netent *
-getnetbyaddr(uint32_t addr, int af)
-{
- struct netent *hp = 0;
- int nserv = 0;
-
- if (!service_done)
- init_services();
-
- while (!hp) {
- switch (service_order[nserv]) {
- case SERVICE_NONE:
- return 0;
- case SERVICE_TABLE:
- hp = _getnetbyhtaddr(addr, af);
- break;
- case SERVICE_BIND:
- hp = _getnetbydnsaddr(addr, af);
- break;
- case SERVICE_NIS:
- hp = _getnetbynisaddr(addr, af);
- break;
- }
- nserv++;
- }
- return hp;
-}
-
-void
-setnetent(int stayopen)
-{
- _setnethtent(stayopen);
- _setnetdnsent(stayopen);
-}
-
-void
-endnetent()
-{
- _endnethtent();
- _endnetdnsent();
-}
diff --git a/StdLib/BsdSocketLib/getpeername.c b/StdLib/BsdSocketLib/getpeername.c
deleted file mode 100644
index 5991099274..0000000000
--- a/StdLib/BsdSocketLib/getpeername.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/** @file
- Implement the getpeername API.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <SocketInternals.h>
-
-
-/**
- Get the remote address
-
- The getpeername routine retrieves the remote system address from the socket.
-
- The
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/getpeername.html#">POSIX</a>
- documentation is available online.
-
- @param [in] s Socket file descriptor returned from ::socket.
-
- @param [out] address Network address to receive the remote system address
-
- @param [in] address_len Length of the remote network address structure
-
- @return This routine returns zero (0) if successful or -1 when an error occurs.
- In the case of an error, ::errno contains more details.
-
- **/
-int
-getpeername (
- int s,
- struct sockaddr * address,
- socklen_t * address_len
- )
-{
- int RetVal;
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
- EFI_STATUS Status;
-
- //
- // Assume failure
- //
- RetVal = -1;
-
- //
- // Locate the context for this socket
- //
- pSocketProtocol = BslFdToSocketProtocol ( s, NULL, &errno );
- if ( NULL != pSocketProtocol ) {
- //
- // Get the remote address
- //
- Status = pSocketProtocol->pfnGetPeer ( pSocketProtocol,
- address,
- address_len,
- &errno );
- if ( !EFI_ERROR ( Status )) {
- RetVal = 0;
- }
- }
-
- //
- // Return the operation status
- //
- return RetVal;
-}
diff --git a/StdLib/BsdSocketLib/getproto.c b/StdLib/BsdSocketLib/getproto.c
deleted file mode 100644
index 9924d000bd..0000000000
--- a/StdLib/BsdSocketLib/getproto.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)getproto.c 8.1 (Berkeley) 6/4/93";
-#endif /* LIBC_SCCS and not lint */
-
-#include <netdb.h>
-
-extern int _proto_stayopen;
-
-struct protoent *
-getprotobynumber(register int proto)
-{
- register struct protoent *p;
-
- setprotoent(_proto_stayopen);
- while ( NULL != (p = getprotoent()) )
- if (p->p_proto == proto)
- break;
- if (!_proto_stayopen)
- endprotoent();
- return (p);
-}
diff --git a/StdLib/BsdSocketLib/getprotoent.c b/StdLib/BsdSocketLib/getprotoent.c
deleted file mode 100644
index 3360812c49..0000000000
--- a/StdLib/BsdSocketLib/getprotoent.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)getprotoent.c 8.1 (Berkeley) 6/4/93";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define MAXALIASES 35
-
-static FILE *protof = NULL;
-static char line[BUFSIZ+1];
-static struct protoent proto;
-static char *proto_aliases[MAXALIASES];
-int _proto_stayopen;
-
-void
-setprotoent(int f)
-{
- if (protof == NULL)
- protof = fopen(_PATH_PROTOCOLS, "r" );
- else
- rewind(protof);
- _proto_stayopen |= f;
-}
-
-void
-endprotoent()
-{
- if (protof) {
- fclose(protof);
- protof = NULL;
- }
- _proto_stayopen = 0;
-}
-
-struct protoent *
-getprotoent()
-{
- char *p;
- register char *cp, **q;
-
- if (protof == NULL && (protof = fopen(_PATH_PROTOCOLS, "r" )) == NULL)
- return (NULL);
-again:
- if ((p = fgets(line, BUFSIZ, protof)) == NULL)
- return (NULL);
- if (*p == '#')
- goto again;
- cp = strpbrk(p, "#\n");
- if (cp == NULL)
- goto again;
- *cp = '\0';
- proto.p_name = p;
- cp = strpbrk(p, " \t");
- if (cp == NULL)
- goto again;
- *cp++ = '\0';
- while (*cp == ' ' || *cp == '\t')
- cp++;
- p = strpbrk(cp, " \t");
- if (p != NULL)
- *p++ = '\0';
- proto.p_proto = atoi(cp);
- q = proto.p_aliases = proto_aliases;
- if (p != NULL) {
- cp = p;
- while (cp && *cp) {
- if (*cp == ' ' || *cp == '\t') {
- cp++;
- continue;
- }
- if (q < &proto_aliases[MAXALIASES - 1])
- *q++ = cp;
- cp = strpbrk(cp, " \t");
- if (cp != NULL)
- *cp++ = '\0';
- }
- }
- *q = NULL;
- return (&proto);
-}
diff --git a/StdLib/BsdSocketLib/getprotoname.c b/StdLib/BsdSocketLib/getprotoname.c
deleted file mode 100644
index 71b35e61b9..0000000000
--- a/StdLib/BsdSocketLib/getprotoname.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)getprotoname.c 8.1 (Berkeley) 6/4/93";
-#endif /* LIBC_SCCS and not lint */
-
-#include <netdb.h>
-#include <string.h>
-
-extern int _proto_stayopen;
-
-struct protoent *
-getprotobyname(register const char *name)
-{
- register struct protoent *p;
- register char **cp;
-
- setprotoent(_proto_stayopen);
- while ( NULL != (p = getprotoent()) ) {
- if (strcmp(p->p_name, name) == 0)
- break;
- for (cp = p->p_aliases; *cp != 0; cp++)
- if (strcmp(*cp, name) == 0)
- goto found;
- }
-found:
- if (!_proto_stayopen)
- endprotoent();
- return (p);
-}
diff --git a/StdLib/BsdSocketLib/getservbyname.c b/StdLib/BsdSocketLib/getservbyname.c
deleted file mode 100644
index f17c240b37..0000000000
--- a/StdLib/BsdSocketLib/getservbyname.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)getservbyname.c 8.1 (Berkeley) 6/4/93";
-#endif /* LIBC_SCCS and not lint */
-
-#include <netdb.h>
-#include <string.h>
-
-extern int _serv_stayopen;
-
-struct servent *
-getservbyname(IN const char *name, IN const char *proto)
-{
- register struct servent *p;
- register char **cp;
-
-#ifdef YP
- extern char *___getservbyname_yp;
- extern char *___getservbyproto_yp;
-
- ___getservbyname_yp = (char *)name;
- ___getservbyproto_yp = (char *)proto;
-#endif
-
- setservent(_serv_stayopen);
- while ( NULL != (p = getservent()) ) {
- if (strcmp(name, p->s_name) == 0)
- goto gotname;
- for (cp = p->s_aliases; *cp; cp++)
- if (strcmp(name, *cp) == 0)
- goto gotname;
- continue;
-gotname:
- if (proto == 0 || strcmp(p->s_proto, proto) == 0)
- break;
- }
- if (!_serv_stayopen)
- endservent();
-
-#ifdef YP
- ___getservbyname_yp = NULL;
- ___getservbyproto_yp = NULL;
-#endif
-
- return (p);
-}
diff --git a/StdLib/BsdSocketLib/getservbyport.c b/StdLib/BsdSocketLib/getservbyport.c
deleted file mode 100644
index d93d8135b5..0000000000
--- a/StdLib/BsdSocketLib/getservbyport.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)getservbyport.c 8.1 (Berkeley) 6/4/93";
-#endif /* LIBC_SCCS and not lint */
-
-#include <netdb.h>
-#include <string.h>
-
-extern int _serv_stayopen;
-
-struct servent *
-getservbyport(int port, const char *proto)
-{
- register struct servent *p;
-
-#ifdef YP
- extern int ___getservbyport_yp;
- extern char *___getservbyproto_yp;
-
- ___getservbyport_yp = port;
- ___getservbyproto_yp = (char *)proto;
-#endif
-
- setservent(_serv_stayopen);
- while ( NULL != (p = getservent()) ) {
- if (p->s_port != port)
- continue;
- if (proto == 0 || strcmp(p->s_proto, proto) == 0)
- break;
- }
- if (!_serv_stayopen)
- endservent();
-
-#ifdef YP
- ___getservbyport_yp = 0;
- ___getservbyproto_yp = NULL;
-#endif
-
- return (p);
-}
diff --git a/StdLib/BsdSocketLib/getservent.c b/StdLib/BsdSocketLib/getservent.c
deleted file mode 100644
index 572b5978fc..0000000000
--- a/StdLib/BsdSocketLib/getservent.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)getservent.c 8.1 (Berkeley) 6/4/93";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#ifdef YP
-#include <rpc/rpc.h>
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
-static int serv_stepping_yp = 0;
-extern int _yp_check __P(( char ** ));
-#endif
-
-
-#define MAXALIASES 35
-
-static FILE *servf = NULL;
-static char line[BUFSIZ+1];
-static struct servent serv;
-static char *serv_aliases[MAXALIASES];
-int _serv_stayopen;
-
-#ifdef YP
-char *___getservbyname_yp = NULL;
-char *___getservbyproto_yp = NULL;
-int ___getservbyport_yp = 0;
-static char *yp_domain = NULL;
-
-static int
-_getservbyport_yp(line)
- char *line;
-{
- char *result;
- int resultlen;
- char buf[YPMAXRECORD + 2];
- int rv;
-
- snprintf(buf, sizeof(buf), "%d/%s", ntohs(___getservbyport_yp),
- ___getservbyproto_yp);
-
- ___getservbyport_yp = 0;
- ___getservbyproto_yp = NULL;
-
- if(!yp_domain) {
- if(yp_get_default_domain(&yp_domain))
- return (0);
- }
-
- /*
- * We have to be a little flexible here. Ideally you're supposed
- * to have both a services.byname and a services.byport map, but
- * some systems have only services.byname. FreeBSD cheats a little
- * by putting the services.byport information in the same map as
- * services.byname so that either case will work. We allow for both
- * possibilities here: if there is no services.byport map, we try
- * services.byname instead.
- */
- if ((rv = yp_match(yp_domain, "services.byport", buf, strlen(buf),
- &result, &resultlen))) {
- if (rv == YPERR_MAP) {
- if (yp_match(yp_domain, "services.byname", buf,
- strlen(buf), &result, &resultlen))
- return(0);
- } else
- return(0);
- }
-
- /* getservent() expects lines terminated with \n -- make it happy */
- snprintf(line, BUFSIZ, "%.*s\n", resultlen, result);
-
- free(result);
- return(1);
-}
-
-static int
-_getservbyname_yp(line)
- char *line;
-{
- char *result;
- int resultlen;
- char buf[YPMAXRECORD + 2];
-
- if(!yp_domain) {
- if(yp_get_default_domain(&yp_domain))
- return (0);
- }
-
- snprintf(buf, sizeof(buf), "%s/%s", ___getservbyname_yp,
- ___getservbyproto_yp);
-
- ___getservbyname_yp = 0;
- ___getservbyproto_yp = NULL;
-
- if (yp_match(yp_domain, "services.byname", buf, strlen(buf),
- &result, &resultlen)) {
- return(0);
- }
-
- /* getservent() expects lines terminated with \n -- make it happy */
- snprintf(line, BUFSIZ, "%.*s\n", resultlen, result);
-
- free(result);
- return(1);
-}
-
-static int
-_getservent_yp(line)
- char *line;
-{
- static char *key = NULL;
- static int keylen;
- char *lastkey, *result;
- int resultlen;
- int rv;
-
- if(!yp_domain) {
- if(yp_get_default_domain(&yp_domain))
- return (0);
- }
-
- if (!serv_stepping_yp) {
- if (key)
- free(key);
- if ((rv = yp_first(yp_domain, "services.byname", &key, &keylen,
- &result, &resultlen))) {
- serv_stepping_yp = 0;
- return(0);
- }
- serv_stepping_yp = 1;
- } else {
- lastkey = key;
- rv = yp_next(yp_domain, "services.byname", key, keylen, &key,
- &keylen, &result, &resultlen);
- free(lastkey);
- if (rv) {
- serv_stepping_yp = 0;
- return (0);
- }
- }
-
- /* getservent() expects lines terminated with \n -- make it happy */
- snprintf(line, BUFSIZ, "%.*s\n", resultlen, result);
-
- free(result);
-
- return(1);
-}
-#endif
-
-void
-setservent(int f)
-{
- if (servf == NULL)
- servf = fopen(_PATH_SERVICES, "r" );
- else
- rewind(servf);
- _serv_stayopen |= f;
-}
-
-void
-endservent()
-{
- if (servf) {
- fclose(servf);
- servf = NULL;
- }
- _serv_stayopen = 0;
-}
-
-struct servent *
-getservent()
-{
- char *p;
- register char *cp, **q;
-
-#ifdef YP
- if (serv_stepping_yp && _getservent_yp(line)) {
- p = (char *)&line;
- goto unpack;
- }
-tryagain:
-#endif
- if (servf == NULL && (servf = fopen(_PATH_SERVICES, "r" )) == NULL)
- return (NULL);
-again:
- if ((p = fgets(line, BUFSIZ, servf)) == NULL)
- return (NULL);
-#ifdef YP
- if (*p == '+' && _yp_check(NULL)) {
- if (___getservbyname_yp != NULL) {
- if (!_getservbyname_yp(line))
- goto tryagain;
- }
- else if (___getservbyport_yp != 0) {
- if (!_getservbyport_yp(line))
- goto tryagain;
- }
- else if (!_getservent_yp(line))
- goto tryagain;
- }
-unpack:
-#endif
- if (*p == '#')
- goto again;
- cp = strpbrk(p, "#\n");
- if (cp == NULL)
- goto again;
- *cp = '\0';
- serv.s_name = p;
- p = strpbrk(p, " \t");
- if (p == NULL)
- goto again;
- *p++ = '\0';
- while (*p == ' ' || *p == '\t')
- p++;
- cp = strpbrk(p, ",/");
- if (cp == NULL)
- goto again;
- *cp++ = '\0';
- serv.s_port = htons((u_short)atoi(p));
- serv.s_proto = cp;
- q = serv.s_aliases = serv_aliases;
- cp = strpbrk(cp, " \t");
- if (cp != NULL)
- *cp++ = '\0';
- while (cp && *cp) {
- if (*cp == ' ' || *cp == '\t') {
- cp++;
- continue;
- }
- if (q < &serv_aliases[MAXALIASES - 1])
- *q++ = cp;
- cp = strpbrk(cp, " \t");
- if (cp != NULL)
- *cp++ = '\0';
- }
- *q = NULL;
- return (&serv);
-}
diff --git a/StdLib/BsdSocketLib/getsockname.c b/StdLib/BsdSocketLib/getsockname.c
deleted file mode 100644
index 11614493db..0000000000
--- a/StdLib/BsdSocketLib/getsockname.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/** @file
- Implement the getsockname API.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <SocketInternals.h>
-
-
-/**
- Get the local socket address.
-
- The getsockname routine retrieves the local system address from the socket.
-
- The
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/getsockname.html#">POSIX</a>
- documentation is available online.
-
- @param [in] s Socket file descriptor returned from ::socket.
-
- @param [out] address Network address to receive the local system address
-
- @param [in] address_len Length of the local network address structure
-
- @return This routine returns zero (0) if successful or -1 when an error occurs.
- In the case of an error, ::errno contains more details.
-
- **/
-int
-getsockname (
- int s,
- struct sockaddr * address,
- socklen_t * address_len
- )
-{
- int RetVal;
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
- EFI_STATUS Status;
-
- //
- // Assume failure
- //
- RetVal = -1;
-
- //
- // Locate the context for this socket
- //
- pSocketProtocol = BslFdToSocketProtocol ( s, NULL, &errno );
- if ( NULL != pSocketProtocol ) {
- //
- // Get the local socket address
- //
- Status = pSocketProtocol->pfnGetLocal ( pSocketProtocol,
- address,
- address_len,
- &errno );
- if ( !EFI_ERROR ( Status )) {
- RetVal = 0;
- }
- }
-
- //
- // Return the operation status
- //
- return RetVal;
-}
diff --git a/StdLib/BsdSocketLib/getsockopt.c b/StdLib/BsdSocketLib/getsockopt.c
deleted file mode 100644
index 8a77570cc5..0000000000
--- a/StdLib/BsdSocketLib/getsockopt.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/** @file
- Implement the getsockopt API.
-
- Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <SocketInternals.h>
-
-
-/** Get the socket options
-
- The
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/getsockopt.html#">POSIX</a>
- documentation is available online.
-
- @param [in] s Socket file descriptor returned from ::socket.
- @param [in] level Option protocol level
- @param [in] option_name Name of the option
- @param [out] option_value Buffer to receive the option value
- @param [in,out] option_len Length of the buffer in bytes,
- upon return length of the option value in bytes
-
- @return This routine returns zero (0) if successful or -1 when an error occurs.
- In the case of an error, ::errno contains more details.
-**/
-int
-getsockopt (
- IN int s,
- IN int level,
- IN int option_name,
- OUT void * __restrict option_value,
- IN OUT socklen_t * __restrict option_len
- )
-{
- int OptionStatus;
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
-
- // Locate the context for this socket
- pSocketProtocol = BslFdToSocketProtocol ( s, NULL, &errno );
- if ( NULL != pSocketProtocol ) {
- // Get the socket option
- (void) pSocketProtocol->pfnOptionGet ( pSocketProtocol,
- level,
- option_name,
- option_value,
- option_len,
- &errno );
- }
- // Return the operation stauts
- OptionStatus = ( 0 == errno ) ? 0 : -1;
- return OptionStatus;
-}
diff --git a/StdLib/BsdSocketLib/herror.c b/StdLib/BsdSocketLib/herror.c
deleted file mode 100644
index d8a5163264..0000000000
--- a/StdLib/BsdSocketLib/herror.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 1987, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by the University of
- * California, Berkeley, Intel Corporation, and its contributors.
- *
- * 4. Neither the name of University, Intel Corporation, or their respective
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
- * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/*
- * Portions Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
-
- herror.c 8.1 (Berkeley) 6/4/93
- herror.c,v 1.1.1.1 2003/11/19 01:51:28 kyu3 Exp
- */
-
-#include <sys/types.h>
-#include <sys/uio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdio.h>
-#include <unistd.h>
-
-const char *h_errlist[] = {
- "Resolver Error 0 (no error)",
- "Unknown host", /* 1 HOST_NOT_FOUND */
- "Host name lookup failure", /* 2 TRY_AGAIN */
- "Unknown server error", /* 3 NO_RECOVERY */
- "No address associated with name", /* 4 NO_ADDRESS */
-};
-int h_nerr = { sizeof h_errlist / sizeof h_errlist[0] };
-
-int h_errno;
-
-const char *
-hstrerror(
- int err
- );
-
-/*
- * herror --
- * print the error indicated by the h_errno value.
- */
-void
-herror(
- const char *s
- )
-{
- struct iovec iov[4];
- register struct iovec *v = iov;
-
- if (s && *s) {
- v->iov_base = (char *)s;
- v->iov_len = strlen(s);
- v++;
- v->iov_base = ": ";
- v->iov_len = 2;
- v++;
- }
- v->iov_base = (char *)hstrerror(h_errno);
- v->iov_len = strlen(v->iov_base);
- v++;
- v->iov_base = "\n";
- v->iov_len = 1;
-#if defined(_ORG_FREEBSD_) || defined(__GNUC__)
- writev(STDERR_FILENO, iov, (v - iov) + 1);
-#else
- {
- int i;
- for (i = 0; i < (v - iov) + 1; i++)
- fprintf( stderr, iov[i].iov_base);
- }
-#endif
-
-}
-
-const char *
-hstrerror(
- int err
- )
-{
- if (err < 0)
- return ("Resolver internal error");
- else if (err < h_nerr)
- return (h_errlist[err]);
- return ("Unknown resolver error");
-}
diff --git a/StdLib/BsdSocketLib/inet_net_ntop.c b/StdLib/BsdSocketLib/inet_net_ntop.c
deleted file mode 100644
index e7411434f9..0000000000
--- a/StdLib/BsdSocketLib/inet_net_ntop.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char orig_rcsid[] = "From Id: inet_net_ntop.c,v 8.2 1996/08/08 06:54:44 vixie Exp";
-static const char rcsid[] = "$Id: inet_net_ntop.c,v 1.1.1.1 2003/11/19 01:51:29 kyu3 Exp $";
-#endif
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#ifdef SPRINTF_CHAR
-# define SPRINTF(x) strlen(sprintf/**/x)
-#else
-# define SPRINTF(x) ((size_t)sprintf x)
-#endif
-
-static char * inet_net_ntop_ipv4 (const u_char *src, int bits,
- char *dst, size_t size);
-
-/*
- * char *
- * inet_net_ntop(af, src, bits, dst, size)
- * convert network number from network to presentation format.
- * generates CIDR style result always.
- * return:
- * pointer to dst, or NULL if an error occurred (check errno).
- * author:
- * Paul Vixie (ISC), July 1996
- */
-char *
-inet_net_ntop(
- int af,
- const void *src,
- int bits,
- char *dst,
- size_t size
- )
-{
- switch (af) {
- case AF_INET:
- return (inet_net_ntop_ipv4(src, bits, dst, size));
- default:
- errno = EAFNOSUPPORT;
- return (NULL);
- }
-}
-
-/*
- * static char *
- * inet_net_ntop_ipv4(src, bits, dst, size)
- * convert IPv4 network number from network to presentation format.
- * generates CIDR style result always.
- * return:
- * pointer to dst, or NULL if an error occurred (check errno).
- * note:
- * network byte order assumed. this means 192.5.5.240/28 has
- * 0x11110000 in its fourth octet.
- * author:
- * Paul Vixie (ISC), July 1996
- */
-static char *
-inet_net_ntop_ipv4(
- const u_char *src,
- int bits,
- char *dst,
- size_t size
- )
-{
- char *odst = dst;
- char *t;
- u_int m;
- int b;
-
- if (bits < 0 || bits > 32) {
- errno = EINVAL;
- return (NULL);
- }
- if (bits == 0) {
- if (size < sizeof "0")
- goto emsgsize;
- *dst++ = '0';
- *dst = '\0';
- }
-
- /* Format whole octets. */
- for (b = bits / 8; b > 0; b--) {
- if (size < sizeof "255.")
- goto emsgsize;
- t = dst;
- dst += SPRINTF((dst, "%u", *src++));
- if (b > 1) {
- *dst++ = '.';
- *dst = '\0';
- }
- size -= (size_t)(dst - t);
- }
-
- /* Format partial octet. */
- b = bits % 8;
- if (b > 0) {
- if (size < sizeof ".255")
- goto emsgsize;
- t = dst;
- if (dst != odst)
- *dst++ = '.';
- m = ((1 << b) - 1) << (8 - b);
- dst += SPRINTF((dst, "%u", ((unsigned int)(*src & m))));
- size -= (size_t)(dst - t);
- }
-
- /* Format CIDR /width. */
- if (size < sizeof "/32")
- goto emsgsize;
- dst += SPRINTF((dst, "/%u", bits));
- return (odst);
-
- emsgsize:
- errno = EMSGSIZE;
- return (NULL);
-}
diff --git a/StdLib/BsdSocketLib/inet_net_pton.c b/StdLib/BsdSocketLib/inet_net_pton.c
deleted file mode 100644
index 4e4424a0c0..0000000000
--- a/StdLib/BsdSocketLib/inet_net_pton.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and
- * its contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char orig_rcsid[] = "From Id: inet_net_pton.c,v 1.8 1996/11/21 10:28:12 vixie Exp $";
-static const char rcsid[] = "$Id: inet_net_pton.c,v 1.1.1.1 2003/11/19 01:51:29 kyu3 Exp $";
-#endif
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#ifdef SPRINTF_CHAR
-# define SPRINTF(x) strlen(sprintf/**/x)
-#else
-# define SPRINTF(x) ((size_t)sprintf x)
-#endif
-
-static int inet_net_pton_ipv4 (const char *src, u_char *dst,
- size_t size);
-
-/*
- * static int
- * inet_net_pton(af, src, dst, size)
- * convert network number from presentation to network format.
- * accepts hex octets, hex strings, decimal octets, and /CIDR.
- * "size" is in bytes and describes "dst".
- * return:
- * number of bits, either imputed classfully or specified with /CIDR,
- * or -1 if some failure occurred (check errno). ENOENT means it was
- * not a valid network specification.
- * author:
- * Paul Vixie (ISC), June 1996
- */
-int
-inet_net_pton(
- int af,
- const char *src,
- void *dst,
- size_t size
- )
-{
- switch (af) {
- case AF_INET:
- return (inet_net_pton_ipv4(src, dst, size));
- default:
- errno = EAFNOSUPPORT;
- return (-1);
- }
-}
-
-/*
- * static int
- * inet_net_pton_ipv4(src, dst, size)
- * convert IPv4 network number from presentation to network format.
- * accepts hex octets, hex strings, decimal octets, and /CIDR.
- * "size" is in bytes and describes "dst".
- * return:
- * number of bits, either imputed classfully or specified with /CIDR,
- * or -1 if some failure occurred (check errno). ENOENT means it was
- * not an IPv4 network specification.
- * note:
- * network byte order assumed. this means 192.5.5.240/28 has
- * 0x11110000 in its fourth octet.
- * author:
- * Paul Vixie (ISC), June 1996
- */
-static int
-inet_net_pton_ipv4(
- const char *src,
- u_char *dst,
- size_t size
- )
-{
- static const char xdigits[] = "0123456789abcdef";
- static const char digits[] = "0123456789";
- int n;
- int ch;
- int tmp;
- int dirty;
- int bits;
- const u_char *odst = dst;
-
- ch = *src++;
- if (ch == '0' && (src[0] == 'x' || src[0] == 'X')
- && isascii(src[1]) && isxdigit(src[1])) {
- /* Hexadecimal: Eat nybble string. */
- if (size <= 0)
- goto emsgsize;
- *dst = 0, dirty = 0;
- src++; /* skip x or X. */
- while ((ch = *src++) != '\0' &&
- isascii(ch) && isxdigit(ch)) {
- if (isupper(ch))
- ch = tolower(ch);
- n = (int)(strchr(xdigits, ch) - xdigits);
- assert(n >= 0 && n <= 15);
- *dst |= n;
- if (!dirty++)
- *dst <<= 4;
- else if (size-- > 0)
- *++dst = 0, dirty = 0;
- else
- goto emsgsize;
- }
- if (dirty)
- size--;
- } else if (isascii(ch) && isdigit(ch)) {
- /* Decimal: eat dotted digit string. */
- for (;;) {
- tmp = 0;
- do {
- n = (int)(strchr(digits, ch) - digits);
- assert(n >= 0 && n <= 9);
- tmp *= 10;
- tmp += n;
- if (tmp > 255)
- goto enoent;
- } while ((ch = *src++) != '\0' &&
- isascii(ch) && isdigit(ch));
- if (size-- <= 0)
- goto emsgsize;
- *dst++ = (u_char) tmp;
- if (ch == '\0' || ch == '/')
- break;
- if (ch != '.')
- goto enoent;
- ch = *src++;
- if (!isascii(ch) || !isdigit(ch))
- goto enoent;
- }
- } else
- goto enoent;
-
- bits = -1;
- if (ch == '/' && isascii(src[0]) && isdigit(src[0]) && dst > odst) {
- /* CIDR width specifier. Nothing can follow it. */
- ch = *src++; /* Skip over the /. */
- bits = 0;
- do {
- n = (int)(strchr(digits, ch) - digits);
- assert(n >= 0 && n <= 9);
- bits *= 10;
- bits += n;
- } while ((ch = *src++) != '\0' && isascii(ch) && isdigit(ch));
- if (ch != '\0')
- goto enoent;
- if (bits > 32)
- goto emsgsize;
- }
-
- /* Firey death and destruction unless we prefetched EOS. */
- if (ch != '\0')
- goto enoent;
-
- /* If nothing was written to the destination, we found no address. */
- if (dst == odst)
- goto enoent;
- /* If no CIDR spec was given, infer width from net class. */
- if (bits == -1) {
- if (*odst >= 240) /* Class E */
- bits = 32;
- else if (*odst >= 224) /* Class D */
- bits = 4;
- else if (*odst >= 192) /* Class C */
- bits = 24;
- else if (*odst >= 128) /* Class B */
- bits = 16;
- else /* Class A */
- bits = 8;
- /* If imputed mask is narrower than specified octets, widen. */
- if (bits >= 8 && bits < ((dst - odst) * 8))
- bits = (int)(dst - odst) * 8;
- }
- /* Extend network to cover the actual mask. */
- while (bits > ((dst - odst) * 8)) {
- if (size-- <= 0)
- goto emsgsize;
- *dst++ = '\0';
- }
- return (bits);
-
- enoent:
- errno = ENOENT;
- return (-1);
-
- emsgsize:
- errno = EMSGSIZE;
- return (-1);
-}
diff --git a/StdLib/BsdSocketLib/inet_neta.c b/StdLib/BsdSocketLib/inet_neta.c
deleted file mode 100644
index b313b13505..0000000000
--- a/StdLib/BsdSocketLib/inet_neta.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and
- * its contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char orig_rcsid[] = "From Id: inet_neta.c,v 8.2 1996/08/08 06:54:44 vixie Exp";
-static const char rcsid[] = "$Id: inet_neta.c,v 1.1.1.1 2003/11/19 01:51:29 kyu3 Exp $";
-#endif
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-
-#ifdef SPRINTF_CHAR
-# define SPRINTF(x) strlen(sprintf/**/x)
-#else
-# define SPRINTF(x) ((size_t)sprintf x)
-#endif
-
-/*
- * char *
- * inet_neta(src, dst, size)
- * format a u_long network number into presentation format.
- * return:
- * pointer to dst, or NULL if an error occurred (check errno).
- * note:
- * format of ``src'' is as for inet_network().
- * author:
- * Paul Vixie (ISC), July 1996
- */
-char *
-inet_neta(
- u_long src,
- char *dst,
- size_t size
- )
-{
- char *odst = dst;
- char *tp;
-
- while (src & 0xffffffff) {
- u_char b = (u_char)((src & 0xff000000) >> 24);
-
- src <<= 8;
- if (b) {
- if (size < sizeof "255.")
- goto emsgsize;
- tp = dst;
- dst += SPRINTF((dst, "%u", b));
- if (src != 0L) {
- *dst++ = '.';
- *dst = '\0';
- }
- size -= (size_t)(dst - tp);
- }
- }
- if (dst == odst) {
- if (size < sizeof "0.0.0.0")
- goto emsgsize;
- strcpy(dst, "0.0.0.0");
- }
- return (odst);
-
- emsgsize:
- errno = EMSGSIZE;
- return (NULL);
-}
diff --git a/StdLib/BsdSocketLib/inet_pton.c b/StdLib/BsdSocketLib/inet_pton.c
deleted file mode 100644
index 32e1ab8690..0000000000
--- a/StdLib/BsdSocketLib/inet_pton.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/* Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and
- * its contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char rcsid[] = "$Id: inet_pton.c,v 1.1.1.1 2003/11/19 01:51:30 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-#include <string.h>
-#include <errno.h>
-
-/*
- * WARNING: Don't even consider trying to compile this on a system where
- * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX.
- */
-
-static int inet_pton4 (const char *src, u_char *dst);
-static int inet_pton6 (const char *src, u_char *dst);
-
-/* int
- * inet_pton(af, src, dst)
- * convert from presentation format (which usually means ASCII printable)
- * to network format (which is usually some kind of binary format).
- * return:
- * 1 if the address was valid for the specified address family
- * 0 if the address wasn't valid (`dst' is untouched in this case)
- * -1 if some other error occurred (`dst' is untouched in this case, too)
- * author:
- * Paul Vixie, 1996.
- */
-int
-inet_pton(
- int af,
- const char *src,
- void *dst
- )
-{
- switch (af) {
- case AF_INET:
- return (inet_pton4(src, dst));
- case AF_INET6:
- return (inet_pton6(src, dst));
- default:
- errno = EAFNOSUPPORT;
- return (-1);
- }
- /* NOTREACHED */
-}
-
-/* int
- * inet_pton4(src, dst)
- * like inet_aton() but without all the hexadecimal and shorthand.
- * return:
- * 1 if `src' is a valid dotted quad, else 0.
- * notice:
- * does not touch `dst' unless it's returning 1.
- * author:
- * Paul Vixie, 1996.
- */
-static int
-inet_pton4(
- const char *src,
- u_char *dst
- )
-{
- static const char digits[] = "0123456789";
- int saw_digit, octets, ch;
- u_char tmp[NS_INADDRSZ], *tp;
-
- saw_digit = 0;
- octets = 0;
- *(tp = tmp) = 0;
- while ((ch = *src++) != '\0') {
- const char *pch;
-
- if ((pch = strchr(digits, ch)) != NULL) {
- u_int new = *tp * 10 + (u_int)(pch - digits);
-
- if (new > 255)
- return (0);
- *tp = (u_char)new;
- if (! saw_digit) {
- if (++octets > 4)
- return (0);
- saw_digit = 1;
- }
- } else if (ch == '.' && saw_digit) {
- if (octets == 4)
- return (0);
- *++tp = 0;
- saw_digit = 0;
- } else
- return (0);
- }
- if (octets < 4)
- return (0);
-
- memcpy(dst, tmp, NS_INADDRSZ);
- return (1);
-}
-
-/* int
- * inet_pton6(src, dst)
- * convert presentation level address to network order binary form.
- * return:
- * 1 if `src' is a valid [RFC1884 2.2] address, else 0.
- * notice:
- * (1) does not touch `dst' unless it's returning 1.
- * (2) :: in a full address is silently ignored.
- * credit:
- * inspired by Mark Andrews.
- * author:
- * Paul Vixie, 1996.
- */
-static int
-inet_pton6(
- const char *src,
- u_char *dst
- )
-{
- static const char xdigits_l[] = "0123456789abcdef",
- xdigits_u[] = "0123456789ABCDEF";
- u_char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp;
- const char *xdigits, *curtok;
- int ch, saw_xdigit;
- u_int val;
-
- memset((tp = tmp), '\0', NS_IN6ADDRSZ);
- endp = tp + NS_IN6ADDRSZ;
- colonp = NULL;
- /* Leading :: requires some special handling. */
- if (*src == ':')
- if (*++src != ':')
- return (0);
- curtok = src;
- saw_xdigit = 0;
- val = 0;
- while ((ch = *src++) != '\0') {
- const char *pch;
-
- if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL)
- pch = strchr((xdigits = xdigits_u), ch);
- if (pch != NULL) {
- val <<= 4;
- val |= (pch - xdigits);
- if (val > 0xffff)
- return (0);
- saw_xdigit = 1;
- continue;
- }
- if (ch == ':') {
- curtok = src;
- if (!saw_xdigit) {
- if (colonp)
- return (0);
- colonp = tp;
- continue;
- }
- if (tp + NS_INT16SZ > endp)
- return (0);
- *tp++ = (u_char) (val >> 8) & 0xff;
- *tp++ = (u_char) val & 0xff;
- saw_xdigit = 0;
- val = 0;
- continue;
- }
- if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) &&
- inet_pton4(curtok, tp) > 0) {
- tp += NS_INADDRSZ;
- saw_xdigit = 0;
- break; /* '\0' was seen by inet_pton4(). */
- }
- return (0);
- }
- if (saw_xdigit) {
- if (tp + NS_INT16SZ > endp)
- return (0);
- *tp++ = (u_char) (val >> 8) & 0xff;
- *tp++ = (u_char) val & 0xff;
- }
- if (colonp != NULL) {
- /*
- * Since some memmove()'s erroneously fail to handle
- * overlapping regions, we'll do the shift by hand.
- */
- const int n = (int)(tp - colonp);
- int i;
-
- for (i = 1; i <= n; i++) {
- endp[- i] = colonp[n - i];
- colonp[n - i] = 0;
- }
- tp = endp;
- }
- if (tp != endp)
- return (0);
- memcpy(dst, tmp, NS_IN6ADDRSZ);
- return (1);
-}
diff --git a/StdLib/BsdSocketLib/listen.c b/StdLib/BsdSocketLib/listen.c
deleted file mode 100644
index e8f6b91412..0000000000
--- a/StdLib/BsdSocketLib/listen.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/** @file
- Implement the listen API.
-
- Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <SocketInternals.h>
-
-
-/** Establish the known port to listen for network connections.
-
- The listen routine places the port into a state that enables connection
- attempts. Connections are placed into FIFO order in a queue to be serviced
- by the application. The application calls the ::accept routine to remove
- the next connection from the queue and get the associated socket.
-
- The
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/listen.html">POSIX</a>
- documentation is available online.
-
- @param [in] s Socket file descriptor returned from ::socket.
-
- @param [in] backlog backlog specifies the maximum FIFO depth for the connections
- waiting for the application to call ::accept. Connection attempts
- received while the queue is full are refused.
-
- @return This routine returns zero (0) if successful or -1 when an error occurs.
- In the case of an error, ::errno contains more details.
- **/
-int
-listen (
- IN int s,
- IN int backlog
- )
-{
- int ListenStatus;
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
-
- // Locate the context for this socket
- pSocketProtocol = BslFdToSocketProtocol ( s, NULL, &errno );
- if ( NULL != pSocketProtocol ) {
- // Enable connections on the known port
- (void) pSocketProtocol->pfnListen ( pSocketProtocol,
- backlog,
- &errno );
- }
- // Return the operation stauts
- ListenStatus = ( 0 == errno ) ? 0 : -1;
- return ListenStatus;
-}
diff --git a/StdLib/BsdSocketLib/map_v4v6.c b/StdLib/BsdSocketLib/map_v4v6.c
deleted file mode 100644
index 5ad73c85ce..0000000000
--- a/StdLib/BsdSocketLib/map_v4v6.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * ++Copyright++ 1985, 1988, 1993
- * -
- * Copyright (c) 1985, 1988, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by the University of
- * California, Berkeley, Intel Corporation, and its contributors.
- *
- * 4. Neither the name of University, Intel Corporation, or their respective
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
- * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * -
- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- * -
- * --Copyright--
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)gethostnamadr.c 8.1 (Berkeley) 6/4/93";
-static char rcsid[] = "$Id: map_v4v6.c,v 1.1.1.1 2003/11/19 01:51:31 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <ctype.h>
-#include <errno.h>
-#ifdef _ORG_FREEBSD_
-#include <syslog.h>
-#endif
-#include "Socklib_internals.h"
-
-typedef union {
- int32_t al;
- char ac;
-} align;
-
-void
-_map_v4v6_address(const char *src, char *dst)
-{
- u_char *p = (u_char *)dst;
- char tmp[INADDRSZ];
- int i;
-
- /* Stash a temporary copy so our caller can update in place. */
- bcopy(src, tmp, INADDRSZ);
- /* Mark this ipv6 addr as a mapped ipv4. */
- for (i = 0; i < 10; i++)
- *p++ = 0x00;
- *p++ = 0xff;
- *p++ = 0xff;
- /* Retrieve the saved copy and we're done. */
- bcopy(tmp, (void*)p, INADDRSZ);
-}
-
-void
-_map_v4v6_hostent(struct hostent *hp, char **bpp, int *lenp)
-{
- char **ap;
-
- if (hp->h_addrtype != AF_INET || hp->h_length != INADDRSZ)
- return;
- hp->h_addrtype = AF_INET6;
- hp->h_length = IN6ADDRSZ;
- for (ap = hp->h_addr_list; *ap; ap++) {
- int i = (int)(sizeof(align) - ((size_t)*bpp % sizeof(align)));
-
- if (*lenp < (i + IN6ADDRSZ)) {
- /* Out of memory. Truncate address list here. XXX */
- *ap = NULL;
- return;
- }
- *bpp += i;
- *lenp -= i;
- _map_v4v6_address(*ap, *bpp);
- *ap = *bpp;
- *bpp += IN6ADDRSZ;
- *lenp -= IN6ADDRSZ;
- }
-}
diff --git a/StdLib/BsdSocketLib/ns_addr.c b/StdLib/BsdSocketLib/ns_addr.c
deleted file mode 100644
index 4360b0c637..0000000000
--- a/StdLib/BsdSocketLib/ns_addr.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright (c) 1986, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * J.Q. Johnson.
- *
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by the University of
- * California, Berkeley, Intel Corporation, and its contributors.
- *
- * 4. Neither the name of University, Intel Corporation, or their respective
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
- * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)ns_addr.c 8.1 (Berkeley) 6/7/93";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/param.h>
-#include <netns/ns.h>
-#include <stdio.h>
-#include <string.h>
-
-static struct ns_addr addr, zero_addr;
-
-static void Field (char *buf, u_char *out, int len);
-static void cvtbase (long oldbase, int newbase, int input[], int inlen, unsigned char result[], int reslen);
-
-struct ns_addr
-ns_addr(
- const char *name
- )
-{
- char separator;
- char *hostname, *socketname, *cp;
- char buf[50];
-
- (void)strncpy(buf, name, sizeof(buf) - 1);
- buf[sizeof(buf) - 1] = '\0';
-
- /*
- * First, figure out what he intends as a field separtor.
- * Despite the way this routine is written, the prefered
- * form 2-272.AA001234H.01777, i.e. XDE standard.
- * Great efforts are made to insure backward compatability.
- */
- if ((hostname = strchr(buf, '#')) != NULL)
- separator = '#';
- else {
- hostname = strchr(buf, '.');
- if ((cp = strchr(buf, ':')) &&
- ((hostname && cp < hostname) || (hostname == 0))) {
- hostname = cp;
- separator = ':';
- } else
- separator = '.';
- }
- if (hostname)
- *hostname++ = 0;
-
- addr = zero_addr;
- Field(buf, addr.x_net.c_net, 4);
- if (hostname == 0)
- return (addr); /* No separator means net only */
-
- socketname = strchr(hostname, separator);
- if (socketname) {
- *socketname++ = 0;
- Field(socketname, (u_char *)&addr.x_port, 2);
- }
-
- Field(hostname, addr.x_host.c_host, 6);
-
- return (addr);
-}
-
-static void
-Field(
- char *buf,
- u_char *out,
- int len
- )
-{
- register char *bp = buf;
- int i, ibase, base16 = 0, base10 = 0, clen = 0;
- int hb[6], *hp;
- char *fmt;
-
- /*
- * first try 2-273#2-852-151-014#socket
- */
- if ((*buf != '-') &&
- (1 < (i = sscanf(buf, "%d-%d-%d-%d-%d",
- &hb[0], &hb[1], &hb[2], &hb[3], &hb[4])))) {
- cvtbase(1000L, 256, hb, i, out, len);
- return;
- }
- /*
- * try form 8E1#0.0.AA.0.5E.E6#socket
- */
- if (1 < (i = sscanf(buf,"%x.%x.%x.%x.%x.%x",
- &hb[0], &hb[1], &hb[2], &hb[3], &hb[4], &hb[5]))) {
- cvtbase(256L, 256, hb, i, out, len);
- return;
- }
- /*
- * try form 8E1#0:0:AA:0:5E:E6#socket
- */
- if (1 < (i = sscanf(buf,"%x:%x:%x:%x:%x:%x",
- &hb[0], &hb[1], &hb[2], &hb[3], &hb[4], &hb[5]))) {
- cvtbase(256L, 256, hb, i, out, len);
- return;
- }
- /*
- * This is REALLY stretching it but there was a
- * comma notation separting shorts -- definitely non standard
- */
- if (1 < (i = sscanf(buf,"%x,%x,%x",
- &hb[0], &hb[1], &hb[2]))) {
- hb[0] = htons(hb[0]); hb[1] = htons(hb[1]);
- hb[2] = htons(hb[2]);
- cvtbase(65536L, 256, hb, i, out, len);
- return;
- }
-
- /* Need to decide if base 10, 16 or 8 */
- while (*bp) switch (*bp++) {
-
- case '0': case '1': case '2': case '3': case '4': case '5':
- case '6': case '7': case '-':
- break;
-
- case '8': case '9':
- base10 = 1;
- break;
-
- case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
- case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
- base16 = 1;
- break;
-
- case 'x': case 'X':
- *--bp = '0';
- base16 = 1;
- break;
-
- case 'h': case 'H':
- base16 = 1;
- /* fall into */
-
- default:
- *--bp = 0; /* Ends Loop */
- }
- if (base16) {
- fmt = "%3x";
- ibase = 4096;
- } else if (base10 == 0 && *buf == '0') {
- fmt = "%3o";
- ibase = 512;
- } else {
- fmt = "%3d";
- ibase = 1000;
- }
-
- for (bp = buf; *bp++; ) clen++;
- if (clen == 0) clen++;
- if (clen > 18) clen = 18;
- i = ((clen - 1) / 3) + 1;
- bp = clen + buf - 3;
- hp = hb + i - 1;
-
- while (hp > hb) {
- (void)sscanf(bp, fmt, hp);
- bp[0] = 0;
- hp--;
- bp -= 3;
- }
- (void)sscanf(buf, fmt, hp);
- cvtbase((long)ibase, 256, hb, i, out, len);
-}
-
-static void
-cvtbase(
- long oldbase,
- int newbase,
- int input[],
- int inlen,
- unsigned char result[],
- int reslen
- )
-{
- int d, e;
- long sum;
-
- e = 1;
- while (e > 0 && reslen > 0) {
- d = 0; e = 0; sum = 0;
- /* long division: input=input/newbase */
- while (d < inlen) {
- sum = sum*oldbase + (long) input[d];
- e += (sum > 0);
- input[d++] = sum / newbase;
- sum %= newbase;
- }
- result[--reslen] = (u_char)sum; /* accumulate remainder */
- }
- for (d=0; d < reslen; d++)
- result[d] = 0;
-}
diff --git a/StdLib/BsdSocketLib/ns_name.c b/StdLib/BsdSocketLib/ns_name.c
deleted file mode 100644
index 3b8706acba..0000000000
--- a/StdLib/BsdSocketLib/ns_name.c
+++ /dev/null
@@ -1,629 +0,0 @@
-/*
- * Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and
- * its contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include <sys/types.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-
-#include <errno.h>
-#include <resolv.h>
-#include <string.h>
-
-/* Data. */
-
-static char digits[] = "0123456789";
-
-/* Forward. */
-
-static int special(int);
-static int printable(int);
-static int dn_find(const u_char *, const u_char *,
- const u_char * const *,
- const u_char * const *);
-
-/* Public. */
-
-/*
- * ns_name_ntop(src, dst, dstsiz)
- * Convert an encoded domain name to printable ascii as per RFC1035.
- * return:
- * Number of bytes written to buffer, or -1 (with errno set)
- * notes:
- * The root is returned as "."
- * All other domains are returned in non absolute form
- */
-int
-ns_name_ntop(const u_char *src, char *dst, size_t dstsiz) {
- const u_char *cp;
- char *dn, *eom;
- u_char c;
- u_int n;
-
- cp = src;
- dn = dst;
- eom = dst + dstsiz;
-
- while ((n = *cp++) != 0) {
- if ((n & NS_CMPRSFLGS) != 0) {
- /* Some kind of compression pointer. */
- errno = EMSGSIZE;
- return (-1);
- }
- if (dn != dst) {
- if (dn >= eom) {
- errno = EMSGSIZE;
- return (-1);
- }
- *dn++ = '.';
- }
- if (dn + n >= eom) {
- errno = EMSGSIZE;
- return (-1);
- }
- for ((void)NULL; n > 0; n--) {
- c = *cp++;
- if (special(c)) {
- if (dn + 1 >= eom) {
- errno = EMSGSIZE;
- return (-1);
- }
- *dn++ = '\\';
- *dn++ = (char)c;
- } else if (!printable(c)) {
- if (dn + 3 >= eom) {
- errno = EMSGSIZE;
- return (-1);
- }
- *dn++ = '\\';
- *dn++ = digits[c / 100];
- *dn++ = digits[(c % 100) / 10];
- *dn++ = digits[c % 10];
- } else {
- if (dn >= eom) {
- errno = EMSGSIZE;
- return (-1);
- }
- *dn++ = (char)c;
- }
- }
- }
- if (dn == dst) {
- if (dn >= eom) {
- errno = EMSGSIZE;
- return (-1);
- }
- *dn++ = '.';
- }
- if (dn >= eom) {
- errno = EMSGSIZE;
- return (-1);
- }
- *dn++ = '\0';
- return ((int)(dn - dst));
-}
-
-/*
- * ns_name_pton(src, dst, dstsiz)
- * Convert a ascii string into an encoded domain name as per RFC1035.
- * return:
- * -1 if it fails
- * 1 if string was fully qualified
- * 0 is string was not fully qualified
- * notes:
- * Enforces label and domain length limits.
- */
-
-int
-ns_name_pton(const char *src, u_char *dst, size_t dstsiz) {
- u_char *label, *bp, *eom;
- int c, n, escaped;
- char *cp;
-
- escaped = 0;
- bp = dst;
- eom = dst + dstsiz;
- label = bp++;
-
- while ((c = *src++) != 0) {
- if (escaped) {
- if ((cp = strchr(digits, c)) != NULL) {
- n = (int)(cp - digits) * 100;
- if ((c = *src++) == 0 ||
- (cp = strchr(digits, c)) == NULL) {
- errno = EMSGSIZE;
- return (-1);
- }
- n += (int)(cp - digits) * 10;
- if ((c = *src++) == 0 ||
- (cp = strchr(digits, c)) == NULL) {
- errno = EMSGSIZE;
- return (-1);
- }
- n += (int)(cp - digits);
- if (n > 255) {
- errno = EMSGSIZE;
- return (-1);
- }
- c = n;
- }
- escaped = 0;
- } else if (c == '\\') {
- escaped = 1;
- continue;
- } else if (c == '.') {
- c = ((int)(bp - label) - 1);
- if ((c & NS_CMPRSFLGS) != 0) { /* Label too big. */
- errno = EMSGSIZE;
- return (-1);
- }
- if (label >= eom) {
- errno = EMSGSIZE;
- return (-1);
- }
- *label = (u_char)c;
- /* Fully qualified ? */
- if (*src == '\0') {
- if (c != 0) {
- if (bp >= eom) {
- errno = EMSGSIZE;
- return (-1);
- }
- *bp++ = '\0';
- }
- if ((bp - dst) > MAXCDNAME) {
- errno = EMSGSIZE;
- return (-1);
- }
- return (1);
- }
- if (c == 0) {
- errno = EMSGSIZE;
- return (-1);
- }
- label = bp++;
- continue;
- }
- if (bp >= eom) {
- errno = EMSGSIZE;
- return (-1);
- }
- *bp++ = (u_char)c;
- }
- c = ((int)(bp - label) - 1);
- if ((c & NS_CMPRSFLGS) != 0) { /* Label too big. */
- errno = EMSGSIZE;
- return (-1);
- }
- if (label >= eom) {
- errno = EMSGSIZE;
- return (-1);
- }
- *label = (u_char)c;
- if (c != 0) {
- if (bp >= eom) {
- errno = EMSGSIZE;
- return (-1);
- }
- *bp++ = 0;
- }
- if ((bp - dst) > MAXCDNAME) { /* src too big */
- errno = EMSGSIZE;
- return (-1);
- }
- return (0);
-}
-
-/*
- * ns_name_unpack(msg, eom, src, dst, dstsiz)
- * Unpack a domain name from a message, source may be compressed.
- * return:
- * -1 if it fails, or consumed octets if it succeeds.
- */
-int
-ns_name_unpack(const u_char *msg, const u_char *eom, const u_char *src,
- u_char *dst, size_t dstsiz)
-{
- const u_char *srcp, *dstlim;
- u_char *dstp;
- int n, len, checked;
-
- len = -1;
- checked = 0;
- dstp = dst;
- srcp = src;
- dstlim = dst + dstsiz;
- if (srcp < msg || srcp >= eom) {
- errno = EMSGSIZE;
- return (-1);
- }
- /* Fetch next label in domain name. */
- while ((n = *srcp++) != 0) {
- /* Check for indirection. */
- switch (n & NS_CMPRSFLGS) {
- case 0:
- /* Limit checks. */
- if (dstp + n + 1 >= dstlim || srcp + n >= eom) {
- errno = EMSGSIZE;
- return (-1);
- }
- checked += n + 1;
- *dstp++ = (u_char)n;
- memcpy(dstp, srcp, n);
- dstp += n;
- srcp += n;
- break;
-
- case NS_CMPRSFLGS:
- if (srcp >= eom) {
- errno = EMSGSIZE;
- return (-1);
- }
- if (len < 0)
- len = (int)(srcp - src) + 1;
- srcp = msg + (((n & 0x3f) << 8) | (*srcp & 0xff));
- if (srcp < msg || srcp >= eom) { /* Out of range. */
- errno = EMSGSIZE;
- return (-1);
- }
- checked += 2;
- /*
- * Check for loops in the compressed name;
- * if we've looked at the whole message,
- * there must be a loop.
- */
- if (checked >= eom - msg) {
- errno = EMSGSIZE;
- return (-1);
- }
- break;
-
- default:
- errno = EMSGSIZE;
- return (-1); /* flag error */
- }
- }
- *dstp = '\0';
- if (len < 0)
- len = (int)(srcp - src);
- return (len);
-}
-
-/*
- * ns_name_pack(src, dst, dstsiz, dnptrs, lastdnptr)
- * Pack domain name 'domain' into 'comp_dn'.
- * return:
- * Size of the compressed name, or -1.
- * notes:
- * 'dnptrs' is an array of pointers to previous compressed names.
- * dnptrs[0] is a pointer to the beginning of the message. The array
- * ends with NULL.
- * 'lastdnptr' is a pointer to the end of the array pointed to
- * by 'dnptrs'.
- * Side effects:
- * The list of pointers in dnptrs is updated for labels inserted into
- * the message as we compress the name. If 'dnptr' is NULL, we don't
- * try to compress names. If 'lastdnptr' is NULL, we don't update the
- * list.
- */
-int
-ns_name_pack(const u_char *src, u_char *dst, int dstsiz,
- const u_char **dnptrs, const u_char **lastdnptr)
-{
- u_char *dstp;
- const u_char **cpp, **lpp, *eob, *msg;
- const u_char *srcp;
- int n, l;
-
- srcp = src;
- dstp = dst;
- eob = dstp + dstsiz;
- lpp = cpp = NULL;
- if (dnptrs != NULL) {
- if ((msg = *dnptrs++) != NULL) {
- for (cpp = dnptrs; *cpp != NULL; cpp++)
- (void)NULL;
- lpp = cpp; /* end of list to search */
- }
- } else
- msg = NULL;
-
- /* make sure the domain we are about to add is legal */
- l = 0;
- do {
- n = *srcp;
- if ((n & NS_CMPRSFLGS) != 0) {
- errno = EMSGSIZE;
- return (-1);
- }
- l += n + 1;
- if (l > MAXCDNAME) {
- errno = EMSGSIZE;
- return (-1);
- }
- srcp += n + 1;
- } while (n != 0);
-
- srcp = src;
- do {
- /* Look to see if we can use pointers. */
- n = *srcp;
- if (n != 0 && msg != NULL) {
- l = dn_find(srcp, msg, (const u_char * const *)dnptrs,
- (const u_char * const *)lpp);
- if (l >= 0) {
- if (dstp + 1 >= eob) {
- errno = EMSGSIZE;
- return (-1);
- }
- *dstp++ = (u_char)((l >> 8) | NS_CMPRSFLGS );
- *dstp++ = (u_char)( l % 256 );
- return ((int)(dstp - dst));
- }
- /* Not found, save it. */
- if (lastdnptr != NULL && cpp < lastdnptr - 1 &&
- (dstp - msg) < 0x4000) {
- *cpp++ = dstp;
- *cpp = NULL;
- }
- }
- /* copy label to buffer */
- if (n & NS_CMPRSFLGS) { /* Should not happen. */
- errno = EMSGSIZE;
- return (-1);
- }
- if (dstp + 1 + n >= eob) {
- errno = EMSGSIZE;
- return (-1);
- }
- memcpy(dstp, srcp, n + 1);
- srcp += n + 1;
- dstp += n + 1;
- } while (n != 0);
-
- if (dstp > eob) {
- if (msg != NULL)
- *lpp = NULL;
- errno = EMSGSIZE;
- return (-1);
- }
- return ((int)(dstp - dst));
-}
-
-/*
- * ns_name_uncompress(msg, eom, src, dst, dstsiz)
- * Expand compressed domain name to presentation format.
- * return:
- * Number of bytes read out of `src', or -1 (with errno set).
- * note:
- * Root domain returns as "." not "".
- */
-int
-ns_name_uncompress(const u_char *msg, const u_char *eom, const u_char *src,
- char *dst, size_t dstsiz)
-{
- u_char tmp[NS_MAXCDNAME];
- int n;
-
- if ((n = ns_name_unpack(msg, eom, src, tmp, sizeof tmp)) == -1)
- return (-1);
- if (ns_name_ntop(tmp, dst, dstsiz) == -1)
- return (-1);
- return (n);
-}
-
-/*
- * ns_name_compress(src, dst, dstsiz, dnptrs, lastdnptr)
- * Compress a domain name into wire format, using compression pointers.
- * return:
- * Number of bytes consumed in `dst' or -1 (with errno set).
- * notes:
- * 'dnptrs' is an array of pointers to previous compressed names.
- * dnptrs[0] is a pointer to the beginning of the message.
- * The list ends with NULL. 'lastdnptr' is a pointer to the end of the
- * array pointed to by 'dnptrs'. Side effect is to update the list of
- * pointers for labels inserted into the message as we compress the name.
- * If 'dnptr' is NULL, we don't try to compress names. If 'lastdnptr'
- * is NULL, we don't update the list.
- */
-int
-ns_name_compress(const char *src, u_char *dst, size_t dstsiz,
- const u_char **dnptrs, const u_char **lastdnptr)
-{
- u_char tmp[NS_MAXCDNAME];
-
- if (ns_name_pton(src, tmp, sizeof tmp) == -1)
- return (-1);
- return (ns_name_pack(tmp, dst, (int)dstsiz, dnptrs, lastdnptr));
-}
-
-/*
- * ns_name_skip(ptrptr, eom)
- * Advance *ptrptr to skip over the compressed name it points at.
- * return:
- * 0 on success, -1 (with errno set) on failure.
- */
-int
-ns_name_skip(const u_char **ptrptr, const u_char *eom) {
- const u_char *cp;
- u_int n;
-
- cp = *ptrptr;
- while (cp < eom && (n = *cp++) != 0) {
- /* Check for indirection. */
- switch (n & NS_CMPRSFLGS) {
- case 0: /* normal case, n == len */
- cp += n;
- continue;
- case NS_CMPRSFLGS: /* indirection */
- cp++;
- break;
- default: /* illegal type */
- errno = EMSGSIZE;
- return (-1);
- }
- break;
- }
- if (cp > eom) {
- errno = EMSGSIZE;
- return (-1);
- }
- *ptrptr = cp;
- return (0);
-}
-
-/* Private. */
-
-/*
- * special(ch)
- * Thinking in noninternationalized USASCII (per the DNS spec),
- * is this characted special ("in need of quoting") ?
- * return:
- * boolean.
- */
-static int
-special(int ch) {
- switch (ch) {
- case 0x22: /* '"' */
- case 0x2E: /* '.' */
- case 0x3B: /* ';' */
- case 0x5C: /* '\\' */
- /* Special modifiers in zone files. */
- case 0x40: /* '@' */
- case 0x24: /* '$' */
- return (1);
- default:
- return (0);
- }
-}
-
-/*
- * printable(ch)
- * Thinking in noninternationalized USASCII (per the DNS spec),
- * is this character visible and not a space when printed ?
- * return:
- * boolean.
- */
-static int
-printable(int ch) {
- return (ch > 0x20 && ch < 0x7f);
-}
-
-/*
- * Thinking in noninternationalized USASCII (per the DNS spec),
- * convert this character to lower case if it's upper case.
- */
-static int
-mklower(int ch) {
- if (ch >= 0x41 && ch <= 0x5A)
- return (ch + 0x20);
- return (ch);
-}
-
-/*
- * dn_find(domain, msg, dnptrs, lastdnptr)
- * Search for the counted-label name in an array of compressed names.
- * return:
- * offset from msg if found, or -1.
- * notes:
- * dnptrs is the pointer to the first name on the list,
- * not the pointer to the start of the message.
- */
-static int
-dn_find(const u_char *domain, const u_char *msg,
- const u_char * const *dnptrs,
- const u_char * const *lastdnptr)
-{
- const u_char *dn, *cp, *sp;
- const u_char * const *cpp;
- u_int n;
-
- for (cpp = dnptrs; cpp < lastdnptr; cpp++) {
- dn = domain;
- sp = cp = *cpp;
- while ((n = *cp++) != 0) {
- /*
- * check for indirection
- */
- switch (n & NS_CMPRSFLGS) {
- case 0: /* normal case, n == len */
- if (n != *dn++)
- goto next;
- for ((void)NULL; n > 0; n--)
- if (mklower(*dn++) != mklower(*cp++))
- goto next;
- /* Is next root for both ? */
- if (*dn == '\0' && *cp == '\0')
- return ((int)(sp - msg));
- if (*dn)
- continue;
- goto next;
-
- case NS_CMPRSFLGS: /* indirection */
- cp = msg + (((n & 0x3f) << 8) | *cp);
- break;
-
- default: /* illegal type */
- errno = EMSGSIZE;
- return (-1);
- }
- }
- next: ;
- }
- errno = ENOENT;
- return (-1);
-}
diff --git a/StdLib/BsdSocketLib/ns_netint.c b/StdLib/BsdSocketLib/ns_netint.c
deleted file mode 100644
index 977fb30147..0000000000
--- a/StdLib/BsdSocketLib/ns_netint.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/* Import. */
-
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-
-uint16_t
-ns_get16(const u_char *src) {
- uint16_t dst;
-
- NS_GET16(dst, src);
- return (dst);
-}
-
-uint32_t
-ns_get32(const u_char *src) {
- uint32_t dst;
-
- NS_GET32(dst, src);
- return (dst);
-}
-
-void
-ns_put16(uint16_t src, u_char *dst) {
- NS_PUT16(src, dst);
-}
-
-void
-ns_put32(uint32_t src, u_char *dst) {
- NS_PUT32(src, dst);
-}
diff --git a/StdLib/BsdSocketLib/ns_ntoa.c b/StdLib/BsdSocketLib/ns_ntoa.c
deleted file mode 100644
index bc7e0142ee..0000000000
--- a/StdLib/BsdSocketLib/ns_ntoa.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 1986, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)ns_ntoa.c 8.1 (Berkeley) 6/4/93";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/param.h>
-#include <netns/ns.h>
-#include <stdio.h>
-
-static char *spectHex(char *p0);
-
-char *
-ns_ntoa(
- struct ns_addr addr
- )
-{
- static char obuf[40];
- union { union ns_net net_e; u_long long_e; } net;
- u_short port = htons(addr.x_port);
- register char *cp;
- char *cp2;
- register u_char *up = addr.x_host.c_host;
- u_char *uplim = up + 6;
-
- net.net_e = addr.x_net;
- sprintf(obuf, "%x", (UINT32)ntohl(net.long_e));
- cp = spectHex(obuf);
- cp2 = cp + 1;
- while (*up==0 && up < uplim) up++;
- if (up == uplim) {
- if (port) {
- sprintf(cp, ".0");
- cp += 2;
- }
- } else {
- sprintf(cp, ".%x", *up++);
- while (up < uplim) {
- while (*cp) cp++;
- sprintf(cp, "%02x", *up++);
- }
- cp = spectHex(cp2);
- }
- if (port) {
- sprintf(cp, ".%x", port);
- spectHex(cp + 1);
- }
- return (obuf);
-}
-
-static char *
-spectHex(
- char *p0
- )
-{
- int ok = 0;
- int nonzero = 0;
- register char *p = p0;
- for (; *p; p++) switch (*p) {
-
- case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
- *p += ('A' - 'a');
- /* fall into . . . */
- case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
- ok = 1;
- case '1': case '2': case '3': case '4': case '5':
- case '6': case '7': case '8': case '9':
- nonzero = 1;
- }
- if (nonzero && !ok) { *p++ = 'H'; *p = 0; }
- return (p);
-}
diff --git a/StdLib/BsdSocketLib/ns_parse.c b/StdLib/BsdSocketLib/ns_parse.c
deleted file mode 100644
index 40ae79ea77..0000000000
--- a/StdLib/BsdSocketLib/ns_parse.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/** @file
- Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and
- * its contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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 <sys/types.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-
-#include <errno.h>
-#include <resolv.h>
-#include <string.h>
-
-/* These need to be in the same order as the nres.h:ns_flag enum. */
-struct _ns_flagdata _ns_flagdata[16] = {
- { 0x8000, 15 }, /* qr. */
- { 0x7800, 11 }, /* opcode. */
- { 0x0400, 10 }, /* aa. */
- { 0x0200, 9 }, /* tc. */
- { 0x0100, 8 }, /* rd. */
- { 0x0080, 7 }, /* ra. */
- { 0x0040, 6 }, /* z. */
- { 0x0020, 5 }, /* ad. */
- { 0x0010, 4 }, /* cd. */
- { 0x000f, 0 }, /* rcode. */
- { 0x0000, 0 }, /* expansion (1/6). */
- { 0x0000, 0 }, /* expansion (2/6). */
- { 0x0000, 0 }, /* expansion (3/6). */
- { 0x0000, 0 }, /* expansion (4/6). */
- { 0x0000, 0 }, /* expansion (5/6). */
- { 0x0000, 0 }, /* expansion (6/6). */
-};
-
-static int
-skiprr(const u_char *ptr, const u_char *eom, ns_sect section, int count) {
- const u_char *optr = ptr;
-
- for ((void)NULL; count > 0; count--) {
- int b, rdlength;
-
- b = dn_skipname(ptr, eom);
- if (b < 0)
- goto emsgsize;
- ptr += b/*Name*/ + NS_INT16SZ/*Type*/ + NS_INT16SZ/*Class*/;
- if (section != ns_s_qd) {
- if (ptr + NS_INT32SZ > eom)
- goto emsgsize;
- ptr += NS_INT32SZ/*TTL*/;
- if (ptr + NS_INT16SZ > eom)
- goto emsgsize;
- NS_GET16(rdlength, ptr);
- ptr += rdlength/*RData*/;
- }
- }
- if (ptr > eom)
- goto emsgsize;
- return ((int)(ptr - optr));
- emsgsize:
- errno = EMSGSIZE;
- return (-1);
-}
-
-int
-ns_initparse(const u_char *msg, int msglen, ns_msg *handle) {
- const u_char *eom = msg + msglen;
- int i;
-
- memset(handle, 0x5e, sizeof *handle);
- handle->_msg = msg;
- handle->_eom = eom;
- if (msg + NS_INT16SZ > eom)
- goto emsgsize;
- NS_GET16(handle->_id, msg);
- if (msg + NS_INT16SZ > eom)
- goto emsgsize;
- NS_GET16(handle->_flags, msg);
- for (i = 0; i < ns_s_max; i++) {
- if (msg + NS_INT16SZ > eom)
- goto emsgsize;
- NS_GET16(handle->_counts[i], msg);
- }
- for (i = 0; i < ns_s_max; i++)
- if (handle->_counts[i] == 0)
- handle->_sections[i] = NULL;
- else {
- int b = skiprr(msg, eom, (ns_sect)i,
- handle->_counts[i]);
-
- if (b < 0)
- return (-1);
- handle->_sections[i] = msg;
- msg += b;
- }
- if (msg != eom)
- goto emsgsize;
- handle->_sect = ns_s_max;
- handle->_rrnum = -1;
- handle->_msg_ptr = NULL;
- return (0);
- emsgsize:
- errno = EMSGSIZE;
- return (-1);
-}
-
-int
-ns_parserr(ns_msg *handle, ns_sect section, int rrnum, ns_rr *rr) {
- int b;
-
- /* Make section right. */
- if ((unsigned int)section >= ns_s_max)
- goto enodev;
- if ((int)section != (int)handle->_sect) {
- handle->_sect = section;
- handle->_rrnum = 0;
- handle->_msg_ptr = handle->_sections[(int)section];
- }
-
- /* Make rrnum right. */
- if (rrnum == -1)
- rrnum = handle->_rrnum;
- if (rrnum < 0 || rrnum >= handle->_counts[(int)section])
- goto enodev;
- if (rrnum < handle->_rrnum) {
- handle->_rrnum = 0;
- handle->_msg_ptr = handle->_sections[(int)section];
- }
-
- b = skiprr(handle->_msg, handle->_eom, section,
- rrnum - handle->_rrnum);
- if (b < 0)
- return (-1);
- handle->_msg_ptr += b;
- handle->_rrnum = rrnum;
-
- /* Do the parse. */
- b = dn_expand(handle->_msg, handle->_eom,
- handle->_msg_ptr, rr->name, NS_MAXDNAME);
- if (b < 0)
- return (-1);
- handle->_msg_ptr += b;
- if (handle->_msg_ptr + NS_INT16SZ > handle->_eom)
- goto emsgsize;
- NS_GET16(rr->type, handle->_msg_ptr);
- if (handle->_msg_ptr + NS_INT16SZ > handle->_eom)
- goto emsgsize;
- NS_GET16(rr->rr_class, handle->_msg_ptr);
- if (section == ns_s_qd) {
- rr->ttl = 0;
- rr->rdlength = 0;
- rr->rdata = NULL;
- } else {
- if (handle->_msg_ptr + NS_INT32SZ > handle->_eom)
- goto emsgsize;
- NS_GET32(rr->ttl, handle->_msg_ptr);
- if (handle->_msg_ptr + NS_INT16SZ > handle->_eom)
- goto emsgsize;
- NS_GET16(rr->rdlength, handle->_msg_ptr);
- if (handle->_msg_ptr + rr->rdlength > handle->_eom)
- goto emsgsize;
- rr->rdata = handle->_msg_ptr;
- handle->_msg_ptr += rr->rdlength;
- }
- handle->_rrnum++;
-
- /* All done. */
- return (0);
- enodev:
- errno = ENODEV;
- return (-1);
- emsgsize:
- errno = EMSGSIZE;
- return (-1);
-}
diff --git a/StdLib/BsdSocketLib/ns_print.c b/StdLib/BsdSocketLib/ns_print.c
deleted file mode 100644
index ea29d018a5..0000000000
--- a/StdLib/BsdSocketLib/ns_print.c
+++ /dev/null
@@ -1,776 +0,0 @@
-/*
- * Copyright (c) 1996, 1998 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * Portions copyright (c) 1999, 2000 - 2014
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and
- * its contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/* Import. */
-
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <arpa/inet.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <resolv.h>
-#include <string.h>
-#include <ctype.h>
-
-#define SPRINTF(x) (sprintf x)
-
-/* Forward. */
-
-static size_t prune_origin(const char *name, const char *origin);
-static int charstr(const u_char *rdata, const u_char *edata,
- char **buf, size_t *buflen);
-static int addname(const u_char *msg, size_t msglen,
- const u_char **p, const char *origin,
- char **buf, size_t *buflen);
-static void addlen(size_t len, char **buf, size_t *buflen);
-static int addstr(const char *src, size_t len,
- char **buf, size_t *buflen);
-static int addtab(size_t len, size_t target, int spaced,
- char **buf, size_t *buflen);
-
-/* Macros. */
-
-#define T(x) \
- do { \
- if ((ssize_t)(x) < 0) \
- return (-1); \
- } while (0)
-
-/* Public. */
-
-/*
- * int
- * ns_sprintrr(handle, rr, name_ctx, origin, buf, buflen)
- * Convert an RR to presentation format.
- * return:
- * Number of characters written to buf, or -1 (check errno).
- */
-int
-ns_sprintrr(const ns_msg *handle, const ns_rr *rr,
- const char *name_ctx, const char *origin,
- char *buf, size_t buflen)
-{
- int n;
-
- n = ns_sprintrrf(ns_msg_base(*handle), ns_msg_size(*handle),
- ns_rr_name(*rr), ns_rr_class(*rr), ns_rr_type(*rr),
- ns_rr_ttl(*rr), ns_rr_rdata(*rr), ns_rr_rdlen(*rr),
- name_ctx, origin, buf, buflen);
- return (n);
-}
-
-/*
- * int
- * ns_sprintrrf(msg, msglen, name, class, type, ttl, rdata, rdlen,
- * name_ctx, origin, buf, buflen)
- * Convert the fields of an RR into presentation format.
- * return:
- * Number of characters written to buf, or -1 (check errno).
- */
-int
-ns_sprintrrf(const u_char *msg, size_t msglen,
- const char *name, ns_class class, ns_type type,
- u_long ttl, const u_char *rdata, size_t rdlen,
- const char *name_ctx, const char *origin,
- char *buf, size_t buflen)
-{
- const char *obuf = buf;
- const u_char *edata = rdata + rdlen;
- int spaced = 0;
-
- const char *comment;
- char tmp[100];
- int x;
- size_t len;
-
- static char base64_key[NS_MD5RSA_MAX_BASE64];
- static char t[255*3];
-
- /*
- * Owner.
- */
- if (name_ctx != NULL && strcasecmp(name_ctx, name) == 0) {
- T(addstr("\t\t\t", 3, &buf, &buflen));
- } else {
- len = prune_origin(name, origin);
- if (len == 0) {
- T(addstr("@\t\t\t", 4, &buf, &buflen));
- } else {
- T(addstr(name, len, &buf, &buflen));
- /* Origin not used and no trailing dot? */
- if ((!origin || !origin[0] || name[len] == '\0') &&
- name[len - 1] != '.') {
- T(addstr(".", 1, &buf, &buflen));
- len++;
- }
- T(spaced = addtab(len, 24, spaced, &buf, &buflen));
- }
- }
-
- /*
- * TTL, Class, Type.
- */
- T(x = ns_format_ttl(ttl, buf, buflen));
- addlen(x, &buf, &buflen);
- len = SPRINTF((tmp, " %s %s", p_class(class), p_type(type)));
- T(addstr(tmp, len, &buf, &buflen));
- T(spaced = addtab(x + len, 16, spaced, &buf, &buflen));
-
- /*
- * RData.
- */
- switch (type) {
- case ns_t_a:
- if (rdlen != NS_INADDRSZ)
- goto formerr;
- (void) inet_ntop(AF_INET, rdata, buf, (socklen_t)buflen);
- addlen(strlen(buf), &buf, &buflen);
- break;
-
- case ns_t_cname:
- case ns_t_mb:
- case ns_t_mg:
- case ns_t_mr:
- case ns_t_ns:
- case ns_t_ptr:
- T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
- break;
-
- case ns_t_hinfo:
- case ns_t_isdn:
- /* First word. */
- T(len = charstr(rdata, edata, &buf, &buflen));
- if (len == 0)
- goto formerr;
- rdata += len;
- T(addstr(" ", 1, &buf, &buflen));
-
- /* Second word. */
- T(len = charstr(rdata, edata, &buf, &buflen));
- if (len == 0)
- goto formerr;
- rdata += len;
- break;
-
- case ns_t_soa: {
- u_long t;
-
- /* Server name. */
- T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
- T(addstr(" ", 1, &buf, &buflen));
-
- /* Administrator name. */
- T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
- T(addstr(" (\n", 3, &buf, &buflen));
- spaced = 0;
-
- if ((edata - rdata) != 5*NS_INT32SZ)
- goto formerr;
-
- /* Serial number. */
- t = ns_get32(rdata); rdata += NS_INT32SZ;
- T(addstr("\t\t\t\t\t", 5, &buf, &buflen));
- len = SPRINTF((tmp, "%lu", (unsigned long)t));
- T(addstr(tmp, len, &buf, &buflen));
- T(spaced = addtab(len, 16, spaced, &buf, &buflen));
- T(addstr("; serial\n", 9, &buf, &buflen));
- spaced = 0;
-
- /* Refresh interval. */
- t = ns_get32(rdata); rdata += NS_INT32SZ;
- T(addstr("\t\t\t\t\t", 5, &buf, &buflen));
- T(len = ns_format_ttl(t, buf, buflen));
- addlen(len, &buf, &buflen);
- T(spaced = addtab(len, 16, spaced, &buf, &buflen));
- T(addstr("; refresh\n", 10, &buf, &buflen));
- spaced = 0;
-
- /* Retry interval. */
- t = ns_get32(rdata); rdata += NS_INT32SZ;
- T(addstr("\t\t\t\t\t", 5, &buf, &buflen));
- T(len = ns_format_ttl(t, buf, buflen));
- addlen(len, &buf, &buflen);
- T(spaced = addtab(len, 16, spaced, &buf, &buflen));
- T(addstr("; retry\n", 8, &buf, &buflen));
- spaced = 0;
-
- /* Expiry. */
- t = ns_get32(rdata); rdata += NS_INT32SZ;
- T(addstr("\t\t\t\t\t", 5, &buf, &buflen));
- T(len = ns_format_ttl(t, buf, buflen));
- addlen(len, &buf, &buflen);
- T(spaced = addtab(len, 16, spaced, &buf, &buflen));
- T(addstr("; expiry\n", 9, &buf, &buflen));
- spaced = 0;
-
- /* Minimum TTL. */
- t = ns_get32(rdata); rdata += NS_INT32SZ;
- T(addstr("\t\t\t\t\t", 5, &buf, &buflen));
- T(len = ns_format_ttl(t, buf, buflen));
- addlen(len, &buf, &buflen);
- T(addstr(" )", 2, &buf, &buflen));
- T(spaced = addtab(len, 16, spaced, &buf, &buflen));
- T(addstr("; minimum\n", 10, &buf, &buflen));
-
- break;
- }
-
- case ns_t_mx:
- case ns_t_afsdb:
- case ns_t_rt: {
- u_int t;
-
- if (rdlen < NS_INT16SZ)
- goto formerr;
-
- /* Priority. */
- t = ns_get16(rdata);
- rdata += NS_INT16SZ;
- len = SPRINTF((tmp, "%u ", (unsigned int)t));
- T(addstr(tmp, len, &buf, &buflen));
-
- /* Target. */
- T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
-
- break;
- }
-
- case ns_t_px: {
- u_int t;
-
- if (rdlen < NS_INT16SZ)
- goto formerr;
-
- /* Priority. */
- t = ns_get16(rdata);
- rdata += NS_INT16SZ;
- len = SPRINTF((tmp, "%u ", (unsigned int)t));
- T(addstr(tmp, len, &buf, &buflen));
-
- /* Name1. */
- T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
- T(addstr(" ", 1, &buf, &buflen));
-
- /* Name2. */
- T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
-
- break;
- }
-
- case ns_t_x25:
- T(len = charstr(rdata, edata, &buf, &buflen));
- if (len == 0)
- goto formerr;
- rdata += len;
- break;
-
- case ns_t_txt:
- while (rdata < edata) {
- T(len = charstr(rdata, edata, &buf, &buflen));
- if (len == 0)
- goto formerr;
- rdata += len;
- if (rdata < edata)
- T(addstr(" ", 1, &buf, &buflen));
- }
- break;
-
- case ns_t_nsap: {
-
- (void) inet_nsap_ntoa((int)rdlen, rdata, t);
- T(addstr(t, strlen(t), &buf, &buflen));
- break;
- }
-
- case ns_t_aaaa:
- if (rdlen != NS_IN6ADDRSZ)
- goto formerr;
- (void) inet_ntop(AF_INET6, rdata, buf, (socklen_t)buflen);
- addlen(strlen(buf), &buf, &buflen);
- break;
-
- case ns_t_loc: {
- /* XXX protocol format checking? */
- (void) loc_ntoa(rdata, t);
- T(addstr(t, strlen(t), &buf, &buflen));
- break;
- }
-
- case ns_t_naptr: {
- u_int order, preference;
-
- if (rdlen < 2*NS_INT16SZ)
- goto formerr;
-
- /* Order, Precedence. */
- order = ns_get16(rdata); rdata += NS_INT16SZ;
- preference = ns_get16(rdata); rdata += NS_INT16SZ;
- len = SPRINTF((t, "%u %u ", (unsigned int)order, (unsigned int)preference));
- T(addstr(t, len, &buf, &buflen));
-
- /* Flags. */
- T(len = charstr(rdata, edata, &buf, &buflen));
- if (len == 0)
- goto formerr;
- rdata += len;
- T(addstr(" ", 1, &buf, &buflen));
-
- /* Service. */
- T(len = charstr(rdata, edata, &buf, &buflen));
- if (len == 0)
- goto formerr;
- rdata += len;
- T(addstr(" ", 1, &buf, &buflen));
-
- /* Regexp. */
- T(len = charstr(rdata, edata, &buf, &buflen));
- if ((ssize_t)len < 0)
- return (-1);
- if (len == 0)
- goto formerr;
- rdata += len;
- T(addstr(" ", 1, &buf, &buflen));
-
- /* Server. */
- T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
- break;
- }
-
- case ns_t_srv: {
- u_int priority, weight, port;
-
- if (rdlen < NS_INT16SZ*3)
- goto formerr;
-
- /* Priority, Weight, Port. */
- priority = ns_get16(rdata); rdata += NS_INT16SZ;
- weight = ns_get16(rdata); rdata += NS_INT16SZ;
- port = ns_get16(rdata); rdata += NS_INT16SZ;
- len = SPRINTF((t, "%u %u %u ", (unsigned int)priority, (unsigned int)weight, (unsigned int)port));
- T(addstr(t, len, &buf, &buflen));
-
- /* Server. */
- T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
- break;
- }
-
- case ns_t_minfo:
- case ns_t_rp:
- /* Name1. */
- T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
- T(addstr(" ", 1, &buf, &buflen));
-
- /* Name2. */
- T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
-
- break;
-
- case ns_t_wks: {
- int n, lcnt;
-
- if (rdlen < NS_INT32SZ + 1)
- goto formerr;
-
- /* Address. */
- (void) inet_ntop(AF_INET, rdata, buf, (socklen_t)buflen);
- addlen(strlen(buf), &buf, &buflen);
- rdata += NS_INADDRSZ;
-
- /* Protocol. */
- len = SPRINTF((tmp, " %u ( ", (unsigned int)*rdata));
- T(addstr(tmp, len, &buf, &buflen));
- rdata += NS_INT8SZ;
-
- /* Bit map. */
- n = 0;
- lcnt = 0;
- while (rdata < edata) {
- u_int c = *rdata++;
- do {
- if (c & 0200) {
- if (lcnt == 0) {
- T(addstr("\n\t\t\t\t", 5,
- &buf, &buflen));
- lcnt = 10;
- spaced = 0;
- }
- len = SPRINTF((tmp, "%d ", n));
- T(addstr(tmp, len, &buf, &buflen));
- lcnt--;
- }
- c <<= 1;
- } while (++n & 07);
- }
- T(addstr(")", 1, &buf, &buflen));
-
- break;
- }
-
- case ns_t_key: {
- u_int keyflags, protocol, algorithm;
- const char *leader;
- int n;
-
- if (rdlen < NS_INT16SZ + NS_INT8SZ + NS_INT8SZ)
- goto formerr;
-
- /* Key flags, Protocol, Algorithm. */
- keyflags = ns_get16(rdata); rdata += NS_INT16SZ;
- protocol = *rdata++;
- algorithm = *rdata++;
- len = SPRINTF((tmp, "0x%04x %u %u",
- (unsigned int)keyflags, (unsigned int)protocol, (unsigned int)algorithm));
- T(addstr(tmp, len, &buf, &buflen));
-
- /* Public key data. */
- len = b64_ntop(rdata, edata - rdata,
- base64_key, sizeof base64_key);
- if ((ssize_t)len < 0)
- goto formerr;
- if (len > 15) {
- T(addstr(" (", 2, &buf, &buflen));
- leader = "\n\t\t";
- spaced = 0;
- } else
- leader = " ";
- for (n = 0; n < (int)len; n += 48) {
- T(addstr(leader, strlen(leader), &buf, &buflen));
- T(addstr(base64_key + n, MIN(len - n, 48),
- &buf, &buflen));
- }
- if (len > 15)
- T(addstr(" )", 2, &buf, &buflen));
-
- break;
- }
-
- case ns_t_sig: {
- u_int type, algorithm, labels, footprint;
- const char *leader;
- u_long t;
- int n;
-
- if (rdlen < 22)
- goto formerr;
-
- /* Type covered, Algorithm, Label count, Original TTL. */
- type = ns_get16(rdata); rdata += NS_INT16SZ;
- algorithm = *rdata++;
- labels = *rdata++;
- t = ns_get32(rdata); rdata += NS_INT32SZ;
- len = SPRINTF((tmp, " %s %d %lu ",
- p_type((int)type), (int)algorithm, (unsigned long)t));
- T(addstr(tmp, len, &buf, &buflen));
- if (labels != (u_int)dn_count_labels(name))
- goto formerr;
-
- /* Signature expiry. */
- t = ns_get32(rdata); rdata += NS_INT32SZ;
- len = SPRINTF((tmp, "%s ", p_secstodate(t)));
- T(addstr(tmp, len, &buf, &buflen));
-
- /* Time signed. */
- t = ns_get32(rdata); rdata += NS_INT32SZ;
- len = SPRINTF((tmp, "%s ", p_secstodate(t)));
- T(addstr(tmp, len, &buf, &buflen));
-
- /* Signature Footprint. */
- footprint = ns_get16(rdata); rdata += NS_INT16SZ;
- len = SPRINTF((tmp, "%u ", (unsigned int)footprint));
- T(addstr(tmp, len, &buf, &buflen));
-
- /* Signer's name. */
- T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
-
- /* Signature. */
- len = b64_ntop(rdata, edata - rdata,
- base64_key, sizeof base64_key);
- if (len > 15) {
- T(addstr(" (", 2, &buf, &buflen));
- leader = "\n\t\t";
- spaced = 0;
- } else
- leader = " ";
- if ((ssize_t)len < 0)
- goto formerr;
- for (n = 0; n < (int)len; n += 48) {
- T(addstr(leader, strlen(leader), &buf, &buflen));
- T(addstr(base64_key + n, MIN(len - n, 48),
- &buf, &buflen));
- }
- if (len > 15)
- T(addstr(" )", 2, &buf, &buflen));
-
- break;
- }
-
- case ns_t_nxt: {
- int n, c;
-
- /* Next domain name. */
- T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
-
- /* Type bit map. */
- n = (int)(edata - rdata);
- for (c = 0; c < n*8; c++)
- if (NS_NXT_BIT_ISSET(c, rdata)) {
- len = SPRINTF((tmp, " %s", p_type(c)));
- T(addstr(tmp, len, &buf, &buflen));
- }
- break;
- }
-
- default:
- comment = "unknown RR type";
- goto hexify;
- }
- return ((int)(buf - obuf));
- formerr:
- comment = "RR format error";
- hexify: {
- int n, m;
- char *p;
-
- len = SPRINTF((tmp, "\\#(\t\t; %s", comment));
- T(addstr(tmp, len, &buf, &buflen));
- while (rdata < edata) {
- p = tmp;
- p += SPRINTF((p, "\n\t"));
- spaced = 0;
- n = MIN(16, (int)(edata - rdata));
- for (m = 0; m < n; m++)
- p += SPRINTF((p, "%02x ", rdata[m]));
- T(addstr(tmp, (u_int)(p - tmp), &buf, &buflen));
- if (n < 16) {
- T(addstr(")", 1, &buf, &buflen));
- T(addtab((u_int)(p - tmp) + 1, 48, spaced, &buf, &buflen));
- }
- p = tmp;
- p += SPRINTF((p, "; "));
- for (m = 0; m < n; m++)
- *p++ = (isascii(rdata[m]) && isprint(rdata[m]))
- ? rdata[m]
- : '.';
- T(addstr(tmp, (u_int)(p - tmp), &buf, &buflen));
- rdata += n;
- }
- return ((int)(buf - obuf));
- }
-}
-
-/* Private. */
-
-/*
- * size_t
- * prune_origin(name, origin)
- * Find out if the name is at or under the current origin.
- * return:
- * Number of characters in name before start of origin,
- * or length of name if origin does not match.
- * notes:
- * This function should share code with samedomain().
- */
-static size_t
-prune_origin(const char *name, const char *origin) {
- const char *oname = name;
-
- while (*name != '\0') {
- if (origin != NULL && strcasecmp(name, origin) == 0)
- return ((size_t)(name - oname) - (name > oname));
- while (*name != '\0') {
- if (*name == '\\') {
- name++;
- /* XXX need to handle \nnn form. */
- if (*name == '\0')
- break;
- } else if (*name == '.') {
- name++;
- break;
- }
- name++;
- }
- }
- return ((size_t)(name - oname));
-}
-
-/*
- * int
- * charstr(rdata, edata, buf, buflen)
- * Format a <character-string> into the presentation buffer.
- * return:
- * Number of rdata octets consumed
- * 0 for protocol format error
- * -1 for output buffer error
- * side effects:
- * buffer is advanced on success.
- */
-static int
-charstr(const u_char *rdata, const u_char *edata, char **buf, size_t *buflen) {
- const u_char *odata = rdata;
- size_t save_buflen = *buflen;
- char *save_buf = *buf;
-
- if (addstr("\"", 1, buf, buflen) < 0)
- goto enospc;
- if (rdata < edata) {
- int n = *rdata;
-
- if (rdata + 1 + n <= edata) {
- rdata++;
- while (n-- > 0) {
- if (strchr("\n\"\\", *rdata) != NULL)
- if (addstr("\\", 1, buf, buflen) < 0)
- goto enospc;
- if (addstr((const char *)rdata, 1,
- buf, buflen) < 0)
- goto enospc;
- rdata++;
- }
- }
- }
- if (addstr("\"", 1, buf, buflen) < 0)
- goto enospc;
- return ((int)(rdata - odata));
- enospc:
- errno = ENOSPC;
- *buf = save_buf;
- *buflen = save_buflen;
- return (-1);
-}
-
-static int
-addname(const u_char *msg, size_t msglen,
- const u_char **pp, const char *origin,
- char **buf, size_t *buflen)
-{
- size_t newlen, save_buflen = *buflen;
- char *save_buf = *buf;
- int n;
-
- n = dn_expand(msg, msg + msglen, *pp, *buf, (int)(*buflen));
- if (n < 0)
- goto enospc; /* Guess. */
- newlen = prune_origin(*buf, origin);
- if ((origin == NULL || origin[0] == '\0' || (*buf)[newlen] == '\0') &&
- (newlen == 0 || (*buf)[newlen - 1] != '.')) {
- /* No trailing dot. */
- if (newlen + 2 > *buflen)
- goto enospc; /* No room for ".\0". */
- (*buf)[newlen++] = '.';
- (*buf)[newlen] = '\0';
- }
- if (newlen == 0) {
- /* Use "@" instead of name. */
- if (newlen + 2 > *buflen)
- goto enospc; /* No room for "@\0". */
- (*buf)[newlen++] = '@';
- (*buf)[newlen] = '\0';
- }
- *pp += n;
- addlen(newlen, buf, buflen);
- **buf = '\0';
- return ((int)newlen);
- enospc:
- errno = ENOSPC;
- *buf = save_buf;
- *buflen = save_buflen;
- return (-1);
-}
-
-static void
-addlen(size_t len, char **buf, size_t *buflen) {
- assert(len <= *buflen);
- *buf += len;
- *buflen -= len;
-}
-
-static int
-addstr(const char *src, size_t len, char **buf, size_t *buflen) {
- if (len > *buflen) {
- errno = ENOSPC;
- return (-1);
- }
- memcpy(*buf, src, len);
- addlen(len, buf, buflen);
- **buf = '\0';
- return (0);
-}
-
-static int
-addtab(size_t len, size_t target, int spaced, char **buf, size_t *buflen) {
- size_t save_buflen = *buflen;
- char *save_buf = *buf;
- int t;
-
- if (spaced || len >= target - 1) {
- T(addstr(" ", 2, buf, buflen));
- spaced = 1;
- } else {
- for (t = (int)(target - len - 1) / 8; t >= 0; t--)
- if (addstr("\t", 1, buf, buflen) < 0) {
- *buflen = save_buflen;
- *buf = save_buf;
- return (-1);
- }
- spaced = 0;
- }
- return (spaced);
-}
diff --git a/StdLib/BsdSocketLib/ns_ttl.c b/StdLib/BsdSocketLib/ns_ttl.c
deleted file mode 100644
index aba847994b..0000000000
--- a/StdLib/BsdSocketLib/ns_ttl.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and
- * its contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/* Import. */
-
-#include <arpa/nameser.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-
-#define SPRINTF(x) ((size_t)sprintf x)
-
-/* Forward. */
-
-static int fmt1(int t, char s, char **buf, size_t *buflen);
-
-/* Macros. */
-
-#define T(x) if ((x) < 0) return (-1); else (void)NULL
-
-/* Public. */
-
-int
-ns_format_ttl(u_long src, char *dst, size_t dstlen) {
- char *odst = dst;
- int secs, mins, hours, days, weeks, x;
- char *p;
-
- secs = (int)(src % 60); src /= 60;
- mins = (int)(src % 60); src /= 60;
- hours = (int)(src % 24); src /= 24;
- days = (int)(src % 7); src /= 7;
- weeks = (int)src; src = 0;
-
- x = 0;
- if (weeks) {
- T(fmt1(weeks, 'W', &dst, &dstlen));
- x++;
- }
- if (days) {
- T(fmt1(days, 'D', &dst, &dstlen));
- x++;
- }
- if (hours) {
- T(fmt1(hours, 'H', &dst, &dstlen));
- x++;
- }
- if (mins) {
- T(fmt1(mins, 'M', &dst, &dstlen));
- x++;
- }
- if (secs || !(weeks || days || hours || mins)) {
- T(fmt1(secs, 'S', &dst, &dstlen));
- x++;
- }
-
- if (x > 1) {
- int ch;
-
- for (p = odst; (ch = *p) != '\0'; p++)
- if (isascii(ch) && isupper(ch))
- *p = (char)( tolower(ch));
- }
-
- return ((int)(dst - odst));
-}
-
-int
-ns_parse_ttl(const char *src, u_long *dst) {
- u_long ttl, tmp;
- int ch, digits, dirty;
-
- ttl = 0;
- tmp = 0;
- digits = 0;
- dirty = 0;
- while ((ch = *src++) != '\0') {
- if (!isascii(ch) || !isprint(ch))
- goto einval;
- if (isdigit(ch)) {
- tmp *= 10;
- tmp += (ch - '0');
- digits++;
- continue;
- }
- if (digits == 0)
- goto einval;
- if (islower(ch))
- ch = toupper(ch);
- switch (ch) {
- case 'W': tmp *= 7;
- case 'D': tmp *= 24;
- case 'H': tmp *= 60;
- case 'M': tmp *= 60;
- case 'S': break;
- default: goto einval;
- }
- ttl += tmp;
- tmp = 0;
- digits = 0;
- dirty = 1;
- }
- if (digits > 0) {
- if (dirty)
- goto einval;
- else
- ttl += tmp;
- }
- *dst = ttl;
- return (0);
-
- einval:
- errno = EINVAL;
- return (-1);
-}
-
-/* Private. */
-
-static int
-fmt1(int t, char s, char **buf, size_t *buflen) {
- char tmp[50];
- size_t len;
-
- len = SPRINTF((tmp, "%d%c", t, s));
- if (len + 1 > *buflen)
- return (-1);
- strcpy(*buf, tmp);
- *buf += len;
- *buflen -= len;
- return (0);
-}
diff --git a/StdLib/BsdSocketLib/nsap_addr.c b/StdLib/BsdSocketLib/nsap_addr.c
deleted file mode 100644
index 6c904b7c9e..0000000000
--- a/StdLib/BsdSocketLib/nsap_addr.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 1996, 1998 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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 <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-#include <ctype.h>
-#include <resolv.h>
-
-static char
-xtob(
- register int c
- )
-{
- return (char)(c - (((c >= '0') && (c <= '9')) ? '0' : '7'));
-}
-
-u_int
-inet_nsap_addr(
- const char *ascii,
- u_char *binary,
- int maxlen
- )
-{
- u_char c, nib;
- u_int len = 0;
-
- while ((c = *ascii++) != '\0' && len < (u_int)maxlen) {
- if (c == '.' || c == '+' || c == '/')
- continue;
- if (!isascii(c))
- return (0);
- if (islower(c))
- c = (u_char)( toupper(c));
- if (isxdigit(c)) {
- nib = xtob(c);
- c = *ascii++;
- if (c != '\0') {
- c = (u_char)( toupper(c));
- if (isxdigit(c)) {
- *binary++ = (nib << 4) | xtob(c);
- len++;
- } else
- return (0);
- }
- else
- return (0);
- }
- else
- return (0);
- }
- return (len);
-}
-
-char *
-inet_nsap_ntoa(
- int binlen,
- register const u_char *binary,
- register char *ascii
- )
-{
- register int nib;
- int i;
- static char tmpbuf[255*3];
- char *start;
-
- if (ascii)
- start = ascii;
- else {
- ascii = tmpbuf;
- start = tmpbuf;
- }
-
- if (binlen > 255)
- binlen = 255;
-
- for (i = 0; i < binlen; i++) {
- nib = *binary >> 4;
- *ascii++ = (char)( nib + (nib < 10 ? '0' : '7'));
- nib = *binary++ & 0x0f;
- *ascii++ = (char)( nib + (nib < 10 ? '0' : '7'));
- if (((i % 2) == 0 && (i + 1) < binlen))
- *ascii++ = '.';
- }
- *ascii = '\0';
- return (start);
-}
diff --git a/StdLib/BsdSocketLib/poll.c b/StdLib/BsdSocketLib/poll.c
deleted file mode 100644
index 06a1b20973..0000000000
--- a/StdLib/BsdSocketLib/poll.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/** @file
- Implement the poll API.
-
- Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <SocketInternals.h>
-
-
-/** Poll the socket for activity
-
- @param [in] pDescriptor Descriptor address for the file
- @param [in] Events Mask of events to detect
-
- @return Detected events for the socket
- **/
-short
-EFIAPI
-BslSocketPoll (
- IN struct __filedes * pDescriptor,
- IN short Events
- )
-{
- short DetectedEvents;
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
-
- // Locate the socket protocol
- DetectedEvents = 0;
- pSocketProtocol = BslValidateSocketFd ( pDescriptor, &errno );
- if ( NULL != pSocketProtocol ) {
- // Poll the socket
- (void) pSocketProtocol->pfnPoll ( pSocketProtocol,
- Events,
- &DetectedEvents,
- &errno );
- }
- // Return the detected events
- return DetectedEvents;
-}
diff --git a/StdLib/BsdSocketLib/read.c b/StdLib/BsdSocketLib/read.c
deleted file mode 100644
index f4348a51dc..0000000000
--- a/StdLib/BsdSocketLib/read.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/** @file
- Implement the read API.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <SocketInternals.h>
-
-
-/**
- Read support routine for sockets
-
- The BslSocketRead routine is called indirectly by the read file
- system routine. This routine is typically used for SOCK_STREAM
- because it waits for receive data from the target system specified
- in the ::connect call.
-
- @param [in] pDescriptor Descriptor address for the file
- @param [in] pOffset File offset
- @param [in] LengthInBytes Number of bytes to read
- @param [in] pBuffer Address of the buffer to receive the data
-
- @return The number of bytes read or -1 if an error occurs.
- In the case of an error, ::errno contains more details.
-
-**/
-ssize_t
-EFIAPI
-BslSocketRead (
- struct __filedes *pDescriptor,
- off_t * pOffset,
- size_t LengthInBytes,
- void * pBuffer
- )
-{
- ssize_t BytesRead;
-
- //
- // Receive the data from the remote system
- //
- BytesRead = recvfrom ( pDescriptor->MyFD,
- pBuffer,
- LengthInBytes,
- 0,
- NULL,
- NULL );
-
- //
- // Return the number of bytes read
- //
- return BytesRead;
-}
diff --git a/StdLib/BsdSocketLib/recv.c b/StdLib/BsdSocketLib/recv.c
deleted file mode 100644
index 0ad7252c44..0000000000
--- a/StdLib/BsdSocketLib/recv.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/** @file
- Implement the recv API.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <SocketInternals.h>
-
-
-/**
- Receive data from a network connection.
-
- The recv routine waits for receive data from a remote network
- connection. This routine is typically used for SOCK_STREAM
- because it waits for receive data from the target system specified
- in the ::connect call.
-
- The
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/recv.html">POSIX</a>
- documentation is available online.
-
- @param [in] s Socket file descriptor returned from ::socket.
-
- @param [in] buffer Address of a buffer to receive the data.
-
- @param [in] length Length of the buffer in bytes.
-
- @param [in] flags Message control flags
-
- @return This routine returns the number of valid bytes in the buffer,
- zero if no data was received, and -1 when an error occurs.
- In the case of an error, ::errno contains more details.
-
- **/
-ssize_t
-recv (
- int s,
- void * buffer,
- size_t length,
- int flags
- )
-{
- ssize_t BytesRead;
-
- //
- // Receive the data from the remote system
- //
- BytesRead = recvfrom ( s,
- buffer,
- length,
- flags,
- NULL,
- NULL );
-
- //
- // Return the number of bytes read
- //
- return BytesRead;
-}
diff --git a/StdLib/BsdSocketLib/recvfrom.c b/StdLib/BsdSocketLib/recvfrom.c
deleted file mode 100644
index 20b3f4a916..0000000000
--- a/StdLib/BsdSocketLib/recvfrom.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/** @file
- Implement the recvfrom API.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <SocketInternals.h>
-
-
-/**
- Receive data from a network connection and return the remote system's address.
-
- The recvfrom routine waits for receive data from a remote network
- connection. This routine is typically called for SOCK_DGRAM sockets
- when the socket is being shared by multiple remote systems and it is
- important to get the remote system address for a response.
-
- The
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/recv.html">POSIX</a>
- documentation is available online.
-
- @param [in] s Socket file descriptor returned from ::socket.
-
- @param [in] buffer Address of a buffer to receive the data.
-
- @param [in] length Length of the buffer in bytes.
-
- @param [in] flags Message control flags
-
- @param [out] address Network address to receive the remote system address
-
- @param [in] address_len Length of the remote network address structure
-
- @return This routine returns the number of valid bytes in the buffer,
- zero if no data was received, and -1 when an error occurs.
- In the case of an error, ::errno contains more details.
-
- **/
-ssize_t
-recvfrom (
- int s,
- void * buffer,
- size_t length,
- int flags,
- struct sockaddr * address,
- socklen_t * address_len
- )
-{
- socklen_t ByteCount;
- ssize_t LengthInBytes;
- UINT8 * pData;
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
- EFI_STATUS Status;
- struct timeval TimeVal;
- EFI_EVENT pTimer;
- UINT64 Timeout;
- ssize_t TotalBytes;
-
- //
- // Assume failure
- //
- LengthInBytes = -1;
-
- //
- // Locate the context for this socket
- //
- pSocketProtocol = BslFdToSocketProtocol ( s, NULL, &errno );
- if ( NULL != pSocketProtocol ) {
- //
- // Receive the data from the socket
- //
- Status = pSocketProtocol->pfnReceive ( pSocketProtocol,
- flags,
- length,
- buffer,
- (size_t *)&LengthInBytes,
- address,
- address_len,
- &errno );
- if ( EFI_ERROR ( Status )) {
- LengthInBytes = -1;
- if ( EAGAIN == errno ) {
- //
- // Get the timeout
- //
- ByteCount = sizeof ( TimeVal );
- LengthInBytes = getsockopt ( s,
- SOL_SOCKET,
- SO_RCVTIMEO,
- &TimeVal,
- &ByteCount );
- if ( 0 == LengthInBytes ) {
- //
- // Compute the timeout
- //
- Timeout = TimeVal.tv_sec;
- Timeout *= 1000 * 1000;
- Timeout += TimeVal.tv_usec;
- Timeout *= 10;
-
- //
- // The timer is only necessary if a timeout is running
- //
- LengthInBytes = -1;
- Status = EFI_SUCCESS;
- pTimer = NULL;
- if ( 0 != Timeout ) {
- Status = gBS->CreateEvent ( EVT_TIMER,
- TPL_NOTIFY,
- NULL,
- NULL,
- &pTimer );
- }
- if ( !EFI_ERROR ( Status )) {
- //
- // Start the timer
- //
- if ( NULL != pTimer ) {
- Status = gBS->SetTimer ( pTimer,
- TimerRelative,
- Timeout );
- }
- if ( !EFI_ERROR ( Status )) {
- //
- // Loop until data is received or the timeout
- // expires
- //
- TotalBytes = 0;
- pData = (UINT8 *)buffer;
- do {
- //
- // Determine if the timeout expired
- //
- if ( NULL != pTimer ) {
- Status = gBS->CheckEvent ( pTimer );
- if ( EFI_SUCCESS == Status ) {
- errno = ETIMEDOUT;
- if ( 0 == TotalBytes ) {
- TotalBytes = -1;
- }
- break;
- }
- }
-
- //
- // Attempt to receive some data
- //
- Status = pSocketProtocol->pfnReceive ( pSocketProtocol,
- flags,
- length,
- pData,
- (size_t *)&LengthInBytes,
- address,
- address_len,
- &errno );
- if ( !EFI_ERROR ( Status )) {
- //
- // Account for the data received
- //
- TotalBytes += LengthInBytes;
- pData += LengthInBytes;
- length -= LengthInBytes;
- }
- } while ( EFI_NOT_READY == Status );
- LengthInBytes = TotalBytes;
-
- //
- // Stop the timer
- //
- if ( NULL != pTimer ) {
- gBS->SetTimer ( pTimer,
- TimerCancel,
- 0 );
- }
- }
-
- //
- // Release the timer
- //
- if ( NULL != pTimer ) {
- gBS->CloseEvent ( pTimer );
- }
- }
- }
- }
- }
- }
-
- //
- // Return the receive data length, -1 for errors
- //
- return LengthInBytes;
-}
diff --git a/StdLib/BsdSocketLib/res_comp.c b/StdLib/BsdSocketLib/res_comp.c
deleted file mode 100644
index 7c327fac2e..0000000000
--- a/StdLib/BsdSocketLib/res_comp.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/** @file
- Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-/*
- * Copyright (c) 1985, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by the University of
- * California, Berkeley, Intel Corporation, and its contributors.
- *
- * 4. Neither the name of University, Intel Corporation, or their respective
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
- * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/*
- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * Portions Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)res_comp.c 8.1 (Berkeley) 6/4/93";
-static char orig_rcsid[] = "From: Id: res_comp.c,v 8.11 1997/05/21 19:31:04 halley Exp $";
-static char rcsid[] = "$Id: res_comp.c,v 1.1.1.1 2003/11/19 01:51:35 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <ctype.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#define BIND_4_COMPAT
-
-/*
- * Expand compressed domain name 'comp_dn' to full domain name.
- * 'msg' is a pointer to the begining of the message,
- * 'eomorig' points to the first location after the message,
- * 'exp_dn' is a pointer to a buffer of size 'length' for the result.
- * Return size of compressed name or -1 if there was an error.
- */
-int
-dn_expand(const u_char *msg, const u_char *eom, const u_char *src,
- char *dst, int dstsiz)
-{
- int n = ns_name_uncompress(msg, eom, src, dst, (size_t)dstsiz);
-
- if (n > 0 && dst[0] == '.')
- dst[0] = '\0';
- return (n);
-}
-
-/*
- * Pack domain name 'exp_dn' in presentation form into 'comp_dn'.
- * Return the size of the compressed name or -1.
- * 'length' is the size of the array pointed to by 'comp_dn'.
- */
-int
-dn_comp(const char *src, u_char *dst, int dstsiz,
- u_char **dnptrs, u_char **lastdnptr)
-{
- return (ns_name_compress(src, dst, (size_t)dstsiz,
- (const u_char **)dnptrs,
- (const u_char **)lastdnptr));
-}
-
-/*
- * Skip over a compressed domain name. Return the size or -1.
- */
-int
-dn_skipname(const u_char *ptr, const u_char *eom) {
- const u_char *saveptr = ptr;
-
- if (ns_name_skip(&ptr, eom) == -1)
- return (-1);
- return ((int)(ptr - saveptr));
-}
-
-/*
- * Verify that a domain name uses an acceptable character set.
- */
-
-/*
- * Note the conspicuous absence of ctype macros in these definitions. On
- * non-ASCII hosts, we can't depend on string literals or ctype macros to
- * tell us anything about network-format data. The rest of the BIND system
- * is not careful about this, but for some reason, we're doing it right here.
- */
-#define PERIOD 0x2e
-#define hyphenchar(c) ((c) == 0x2d)
-#define bslashchar(c) ((c) == 0x5c)
-#define periodchar(c) ((c) == PERIOD)
-#define asterchar(c) ((c) == 0x2a)
-#define alphachar(c) (((c) >= 0x41 && (c) <= 0x5a) \
- || ((c) >= 0x61 && (c) <= 0x7a))
-#define digitchar(c) ((c) >= 0x30 && (c) <= 0x39)
-
-#define borderchar(c) (alphachar(c) || digitchar(c))
-#define middlechar(c) (borderchar(c) || hyphenchar(c))
-#define domainchar(c) ((c) > 0x20 && (c) < 0x7f)
-
-int
-res_hnok(
- const char *dn
- )
-{
- int pch = PERIOD, ch = *dn++;
-
- while (ch != '\0') {
- int nch = *dn++;
-
- if (periodchar(ch)) {
- (void)NULL;
- } else if (periodchar(pch)) {
- if (!borderchar(ch))
- return (0);
- } else if (periodchar(nch) || nch == '\0') {
- if (!borderchar(ch))
- return (0);
- } else {
- if (!middlechar(ch))
- return (0);
- }
- pch = ch;
- ch = nch;
- }
- return (1);
-}
-
-/*
- * hostname-like (A, MX, WKS) owners can have "*" as their first label
- * but must otherwise be as a host name.
- */
-int
-res_ownok(
- const char *dn
- )
-{
- if (asterchar(dn[0])) {
- if (periodchar(dn[1]))
- return (res_hnok(dn+2));
- if (dn[1] == '\0')
- return (1);
- }
- return (res_hnok(dn));
-}
-
-/*
- * SOA RNAMEs and RP RNAMEs can have any printable character in their first
- * label, but the rest of the name has to look like a host name.
- */
-int
-res_mailok(
- const char *dn
- )
-{
- int ch, escaped = 0;
-
- /* "." is a valid missing representation */
- if (*dn == '\0')
- return (1);
-
- /* otherwise <label>.<hostname> */
- while ((ch = *dn++) != '\0') {
- if (!domainchar(ch))
- return (0);
- if (!escaped && periodchar(ch))
- break;
- if (escaped)
- escaped = 0;
- else if (bslashchar(ch))
- escaped = 1;
- }
- if (periodchar(ch))
- return (res_hnok(dn));
- return (0);
-}
-
-/*
- * This function is quite liberal, since RFC 1034's character sets are only
- * recommendations.
- */
-int
-res_dnok(
- const char *dn
- )
-{
- int ch;
-
- while ((ch = *dn++) != '\0')
- if (!domainchar(ch))
- return (0);
- return (1);
-}
-
-#ifdef BIND_4_COMPAT
-/*
- * This module must export the following externally-visible symbols:
- * ___putlong
- * ___putshort
- * __getlong
- * __getshort
- * Note that one _ comes from C and the others come from us.
- */
-void __putlong(u_int32_t src, u_char *dst) { ns_put32(src, dst); }
-void __putshort(u_int16_t src, u_char *dst) { ns_put16(src, dst); }
-u_int32_t _getlong(const u_char *src) { return (ns_get32(src)); }
-u_int16_t _getshort(const u_char *src) { return (ns_get16(src)); }
-#endif /*BIND_4_COMPAT*/
diff --git a/StdLib/BsdSocketLib/res_config.h b/StdLib/BsdSocketLib/res_config.h
deleted file mode 100644
index 4f4afdff5c..0000000000
--- a/StdLib/BsdSocketLib/res_config.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#define DEBUG 1 /* enable debugging code (needed for dig) */
-#define RESOLVSORT /* allow sorting of addresses in gethostbyname */
-#define RFC1535 /* comply with RFC1535 (STRONGLY reccomended by vixie)*/
-#undef USELOOPBACK /* res_init() bind to localhost */
-#undef SUNSECURITY /* verify gethostbyaddr() calls - WE DONT NEED IT */
-#define MULTI_PTRS_ARE_ALIASES 1 /* fold multiple PTR records into aliases */
-#define CHECK_SRVR_ADDR 1 /* confirm that the server requested sent the reply */
-#define BIND_UPDATE 1 /* update support */
diff --git a/StdLib/BsdSocketLib/res_data.c b/StdLib/BsdSocketLib/res_data.c
deleted file mode 100644
index 8831653e4d..0000000000
--- a/StdLib/BsdSocketLib/res_data.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 1995,1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char rcsid[] = "$Id: res_data.c,v 1.1.1.1 2003/11/19 01:51:35 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/time.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-#include <ctype.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "res_config.h"
-
-const char *_res_opcodes[] = {
- "QUERY",
- "IQUERY",
- "CQUERYM",
- "CQUERYU", /* experimental */
- "NOTIFY", /* experimental */
- "UPDATE",
- "6",
- "7",
- "8",
- "9",
- "10",
- "11",
- "12",
- "13",
- "ZONEINIT",
- "ZONEREF",
-};
-
-const char *_res_resultcodes[] = {
- "NOERROR",
- "FORMERR",
- "SERVFAIL",
- "NXDOMAIN",
- "NOTIMP",
- "REFUSED",
- "YXDOMAIN",
- "YXRRSET",
- "NXRRSET",
- "NOTAUTH",
- "ZONEERR",
- "11",
- "12",
- "13",
- "14",
- "NOCHANGE",
-};
-
-#ifdef BIND_UPDATE
-const char *_res_sectioncodes[] = {
- "ZONE",
- "PREREQUISITES",
- "UPDATE",
- "ADDITIONAL",
-};
-#endif
diff --git a/StdLib/BsdSocketLib/res_debug.c b/StdLib/BsdSocketLib/res_debug.c
deleted file mode 100644
index 791ac8372d..0000000000
--- a/StdLib/BsdSocketLib/res_debug.c
+++ /dev/null
@@ -1,988 +0,0 @@
-/*
- * Copyright (c) 1985
- * The Regents of the University of California. All rights reserved.
- *
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by the University of
- * California, Berkeley, Intel Corporation, and its contributors.
- *
- * 4. Neither the name of University, Intel Corporation, or their respective
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
- * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/*
- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * Portions Copyright (c) 1995 by International Business Machines, Inc.
- *
- * International Business Machines, Inc. (hereinafter called IBM) grants
- * permission under its copyrights to use, copy, modify, and distribute this
- * Software with or without fee, provided that the above copyright notice and
- * all paragraphs of this notice appear in all copies, and that the name of IBM
- * not be used in connection with the marketing of any product incorporating
- * the Software or modifications thereof, without specific, written prior
- * permission.
- *
- * To the extent it has a right to do so, IBM grants an immunity from suit
- * under its patents, if any, for the use, sale or manufacture of products to
- * the extent that such products are used for performing Domain Name System
- * dynamic updates in TCP/IP networks by means of the Software. No immunity is
- * granted for any product per se or for any other function of any product.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
- * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
- * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-/*
- * Portions Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)res_debug.c 8.1 (Berkeley) 6/4/93";
-static char rcsid[] = "$Id: res_debug.c,v 1.1.1.1 2003/11/19 01:51:36 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <math.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#define SPRINTF(x) sprintf x
-
-extern const char *_res_opcodes[];
-extern const char *_res_resultcodes[];
-extern const char *_res_sectioncodes[];
-
-/*
- * Print the current options.
- */
-void
-fp_resstat(struct __res_state *statp, FILE *file) {
- u_long mask;
-
- fprintf(file, ";; res options:");
- if (!statp)
- statp = &_res;
- for (mask = 1; mask != 0; mask <<= 1)
- if (statp->options & mask)
- fprintf(file, " %s", p_option(mask));
- putc('\n', file);
-}
-
-static void
-do_section(ns_msg *handle, ns_sect section, int pflag, FILE *file) {
- int n, sflag, rrnum;
- ns_opcode opcode;
- ns_rr rr;
-
- /*
- * Print answer records.
- */
- sflag = (int)(_res.pfcode & pflag);
- if (_res.pfcode && !sflag)
- return;
-
- opcode = ns_msg_getflag(*handle, ns_f_opcode);
- rrnum = 0;
- for (;;) {
- if (ns_parserr(handle, section, rrnum, &rr)) {
- if (errno != ENODEV)
- fprintf(file, ";; ns_parserr: %s\n",
- strerror(errno));
- else if (rrnum > 0 && sflag != 0 &&
- (_res.pfcode & RES_PRF_HEAD1))
- putc('\n', file);
- return;
- }
- if (rrnum == 0 && sflag != 0 && (_res.pfcode & RES_PRF_HEAD1))
- fprintf(file, ";; %s SECTION:\n",
- p_section(section, opcode));
- if (section == ns_s_qd)
- fprintf(file, ";;\t%s, type = %s, class = %s\n",
- ns_rr_name(rr),
- p_type(ns_rr_type(rr)),
- p_class(ns_rr_class(rr)));
- else {
- char *buf;
- buf = (char*)malloc(2024);
- if (buf) {
- n = ns_sprintrr(handle, &rr, NULL, NULL,
- buf, sizeof buf);
- if (n < 0) {
- fprintf(file, ";; ns_sprintrr: %s\n",
- strerror(errno));
- free(buf);
- return;
- }
- fputs(buf, file);
- fputc('\n', file);
- free(buf);
- }
- }
- rrnum++;
- }
-}
-
-void
-p_query(const u_char *msg) {
- fp_query(msg, stdout);
-}
-
-void
-fp_query(const u_char *msg, FILE *file) {
- fp_nquery(msg, PACKETSZ, file);
-}
-
-/*
- * Print the contents of a query.
- * This is intended to be primarily a debugging routine.
- */
-void
-fp_nquery(const u_char *msg, int len, FILE *file) {
- ns_msg handle;
- int qdcount, ancount, nscount, arcount;
- u_int opcode, rcode, id;
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1)
- return;
-
- if (ns_initparse(msg, len, &handle) < 0) {
- fprintf(file, ";; ns_initparse: %s\n", strerror(errno));
- return;
- }
- opcode = ns_msg_getflag(handle, ns_f_opcode);
- rcode = ns_msg_getflag(handle, ns_f_rcode);
- id = ns_msg_id(handle);
- qdcount = ns_msg_count(handle, ns_s_qd);
- ancount = ns_msg_count(handle, ns_s_an);
- nscount = ns_msg_count(handle, ns_s_ns);
- arcount = ns_msg_count(handle, ns_s_ar);
-
- /*
- * Print header fields.
- */
- if ((!_res.pfcode) || (_res.pfcode & RES_PRF_HEADX) || rcode)
- fprintf(file,
- ";; ->>HEADER<<- opcode: %s, status: %s, id: %d\n",
- _res_opcodes[opcode], _res_resultcodes[rcode], (int)id);
- if ((!_res.pfcode) || (_res.pfcode & RES_PRF_HEADX))
- putc(';', file);
- if ((!_res.pfcode) || (_res.pfcode & RES_PRF_HEAD2)) {
- fprintf(file, "; flags:");
- if (ns_msg_getflag(handle, ns_f_qr))
- fprintf(file, " qr");
- if (ns_msg_getflag(handle, ns_f_aa))
- fprintf(file, " aa");
- if (ns_msg_getflag(handle, ns_f_tc))
- fprintf(file, " tc");
- if (ns_msg_getflag(handle, ns_f_rd))
- fprintf(file, " rd");
- if (ns_msg_getflag(handle, ns_f_ra))
- fprintf(file, " ra");
- if (ns_msg_getflag(handle, ns_f_z))
- fprintf(file, " ??");
- if (ns_msg_getflag(handle, ns_f_ad))
- fprintf(file, " ad");
- if (ns_msg_getflag(handle, ns_f_cd))
- fprintf(file, " cd");
- }
- if ((!_res.pfcode) || (_res.pfcode & RES_PRF_HEAD1)) {
- fprintf(file, "; %s: %d",
- p_section(ns_s_qd, (int)opcode), qdcount);
- fprintf(file, ", %s: %d",
- p_section(ns_s_an, (int)opcode), ancount);
- fprintf(file, ", %s: %d",
- p_section(ns_s_ns, (int)opcode), nscount);
- fprintf(file, ", %s: %d",
- p_section(ns_s_ar, (int)opcode), arcount);
- }
- if ((!_res.pfcode) || (_res.pfcode &
- (RES_PRF_HEADX | RES_PRF_HEAD2 | RES_PRF_HEAD1))) {
- putc('\n',file);
- }
- /*
- * Print the various sections.
- */
- do_section(&handle, ns_s_qd, RES_PRF_QUES, file);
- do_section(&handle, ns_s_an, RES_PRF_ANS, file);
- do_section(&handle, ns_s_ns, RES_PRF_AUTH, file);
- do_section(&handle, ns_s_ar, RES_PRF_ADD, file);
- if (qdcount == 0 && ancount == 0 &&
- nscount == 0 && arcount == 0)
- putc('\n', file);
-}
-
-const u_char *
-p_cdnname(const u_char *cp, const u_char *msg, int len, FILE *file) {
- char name[MAXDNAME];
- int n;
-
- if ((n = dn_expand(msg, msg + len, cp, name, sizeof name)) < 0)
- return (NULL);
- if (name[0] == '\0')
- putc('.', file);
- else
- fputs(name, file);
- return (cp + n);
-}
-
-const u_char *
-p_cdname(const u_char *cp, const u_char *msg, FILE *file) {
- return (p_cdnname(cp, msg, PACKETSZ, file));
-}
-
-/* Return a fully-qualified domain name from a compressed name (with
- length supplied). */
-
-const u_char *
-p_fqnname(
- const u_char *cp,
- const u_char *msg,
- int msglen,
- char *name,
- int namelen
- )
-{
- int n, newlen;
-
- if ((n = dn_expand(msg, cp + msglen, cp, name, namelen)) < 0)
- return (NULL);
- newlen = (int)strlen(name);
- if (newlen == 0 || name[newlen - 1] != '.') {
- if (newlen + 1 >= namelen) /* Lack space for final dot */
- return (NULL);
- else
- strcpy(name + newlen, ".");
- }
- return (cp + n);
-}
-
-/* XXX: the rest of these functions need to become length-limited, too. */
-
-const u_char *
-p_fqname(const u_char *cp, const u_char *msg, FILE *file) {
- char name[MAXDNAME];
- const u_char *n;
-
- n = p_fqnname(cp, msg, MAXCDNAME, name, sizeof name);
- if (n == NULL)
- return (NULL);
- fputs(name, file);
- return (n);
-}
-
-/*
- * Names of RR classes and qclasses. Classes and qclasses are the same, except
- * that C_ANY is a qclass but not a class. (You can ask for records of class
- * C_ANY, but you can't have any records of that class in the database.)
- */
-const struct res_sym __p_class_syms[] = {
- {C_IN, "IN"},
- {C_CHAOS, "CHAOS"},
- {C_HS, "HS"},
- {C_HS, "HESIOD"},
- {C_ANY, "ANY"},
- {C_NONE, "NONE"},
- {C_IN, (char *)0}
-};
-
-/*
- * Names of message sections.
- */
-const struct res_sym __p_default_section_syms[] = {
- {ns_s_qd, "QUERY"},
- {ns_s_an, "ANSWER"},
- {ns_s_ns, "AUTHORITY"},
- {ns_s_ar, "ADDITIONAL"},
- {0, (char *)0}
-};
-
-const struct res_sym __p_update_section_syms[] = {
- {S_ZONE, "ZONE"},
- {S_PREREQ, "PREREQUISITE"},
- {S_UPDATE, "UPDATE"},
- {S_ADDT, "ADDITIONAL"},
- {0, (char *)0}
-};
-
-/*
- * Names of RR types and qtypes. Types and qtypes are the same, except
- * that T_ANY is a qtype but not a type. (You can ask for records of type
- * T_ANY, but you can't have any records of that type in the database.)
- */
-const struct res_sym __p_type_syms[] = {
- {T_A, "A", "address"},
- {T_NS, "NS", "name server"},
- {T_MD, "MD", "mail destination (deprecated)"},
- {T_MF, "MF", "mail forwarder (deprecated)"},
- {T_CNAME, "CNAME", "canonical name"},
- {T_SOA, "SOA", "start of authority"},
- {T_MB, "MB", "mailbox"},
- {T_MG, "MG", "mail group member"},
- {T_MR, "MR", "mail rename"},
- {T_NULL, "NULL", "null"},
- {T_WKS, "WKS", "well-known service (deprecated)"},
- {T_PTR, "PTR", "domain name pointer"},
- {T_HINFO, "HINFO", "host information"},
- {T_MINFO, "MINFO", "mailbox information"},
- {T_MX, "MX", "mail exchanger"},
- {T_TXT, "TXT", "text"},
- {T_RP, "RP", "responsible person"},
- {T_AFSDB, "AFSDB", "DCE or AFS server"},
- {T_X25, "X25", "X25 address"},
- {T_ISDN, "ISDN", "ISDN address"},
- {T_RT, "RT", "router"},
- {T_NSAP, "NSAP", "nsap address"},
- {T_NSAP_PTR, "NSAP_PTR", "domain name pointer"},
- {T_SIG, "SIG", "signature"},
- {T_KEY, "KEY", "key"},
- {T_PX, "PX", "mapping information"},
- {T_GPOS, "GPOS", "geographical position (withdrawn)"},
- {T_AAAA, "AAAA", "IPv6 address"},
- {T_LOC, "LOC", "location"},
- {T_NXT, "NXT", "next valid name (unimplemented)"},
- {T_EID, "EID", "endpoint identifier (unimplemented)"},
- {T_NIMLOC, "NIMLOC", "NIMROD locator (unimplemented)"},
- {T_SRV, "SRV", "server selection"},
- {T_ATMA, "ATMA", "ATM address (unimplemented)"},
- {T_IXFR, "IXFR", "incremental zone transfer"},
- {T_AXFR, "AXFR", "zone transfer"},
- {T_MAILB, "MAILB", "mailbox-related data (deprecated)"},
- {T_MAILA, "MAILA", "mail agent (deprecated)"},
- {T_NAPTR, "NAPTR", "URN Naming Authority"},
- {T_ANY, "ANY", "\"any\""},
- {0, NULL, NULL}
-};
-
-int
-sym_ston(const struct res_sym *syms, const char *name, int *success) {
- for ((void)NULL; syms->name != 0; syms++) {
- if (strcasecmp (name, syms->name) == 0) {
- if (success)
- *success = 1;
- return (syms->number);
- }
- }
- if (success)
- *success = 0;
- return (syms->number); /* The default value. */
-}
-
-const char *
-sym_ntos(const struct res_sym *syms, int number, int *success) {
- static char unname[20];
-
- for ((void)NULL; syms->name != 0; syms++) {
- if (number == syms->number) {
- if (success)
- *success = 1;
- return (syms->name);
- }
- }
-
- sprintf(unname, "%d", number);
- if (success)
- *success = 0;
- return (unname);
-}
-
-const char *
-sym_ntop(const struct res_sym *syms, int number, int *success) {
- static char unname[20];
-
- for ((void)NULL; syms->name != 0; syms++) {
- if (number == syms->number) {
- if (success)
- *success = 1;
- return (syms->humanname);
- }
- }
- sprintf(unname, "%d", number);
- if (success)
- *success = 0;
- return (unname);
-}
-
-/*
- * Return a string for the type.
- */
-const char *
-p_type(int type) {
- return (sym_ntos(__p_type_syms, type, (int *)0));
-}
-
-/*
- * Return a string for the type.
- */
-const char *
-p_section(int section, int opcode) {
- const struct res_sym *symbols;
-
- switch (opcode) {
- case ns_o_update:
- symbols = __p_update_section_syms;
- break;
- default:
- symbols = __p_default_section_syms;
- break;
- }
- return (sym_ntos(symbols, section, (int *)0));
-}
-
-/*
- * Return a mnemonic for class.
- */
-const char *
-p_class(int class) {
- return (sym_ntos(__p_class_syms, class, (int *)0));
-}
-
-/*
- * Return a mnemonic for an option
- */
-const char *
-p_option(u_long option) {
- static char nbuf[40];
-
- switch (option) {
- case RES_INIT: return "init";
- case RES_DEBUG: return "debug";
- case RES_AAONLY: return "aaonly(unimpl)";
- case RES_USEVC: return "usevc";
- case RES_PRIMARY: return "primry(unimpl)";
- case RES_IGNTC: return "igntc";
- case RES_RECURSE: return "recurs";
- case RES_DEFNAMES: return "defnam";
- case RES_STAYOPEN: return "styopn";
- case RES_DNSRCH: return "dnsrch";
- case RES_INSECURE1: return "insecure1";
- case RES_INSECURE2: return "insecure2";
- default: sprintf(nbuf, "?0x%lx?", (unsigned long)option);
- return (nbuf);
- }
-}
-
-/*
- * Return a mnemonic for a time to live.
- */
-const char *
-p_time(u_int32_t value) {
- static char nbuf[40];
-
- if (ns_format_ttl(value, nbuf, sizeof nbuf) < 0)
- sprintf(nbuf, "%u", value);
- return (nbuf);
-}
-
-
-/*
- * routines to convert between on-the-wire RR format and zone file format.
- * Does not contain conversion to/from decimal degrees; divide or multiply
- * by 60*60*1000 for that.
- */
-
-static unsigned int poweroften[10] = {1, 10, 100, 1000, 10000, 100000,
- 1000000,10000000,100000000,1000000000};
-
-/* takes an XeY precision/size value, returns a string representation. */
-static const char *
-precsize_ntoa(
- u_int8_t prec
- )
-{
- static char retbuf[sizeof "90000000.00"];
- unsigned long val;
- int mantissa, exponent;
-
- mantissa = (int)((prec >> 4) & 0x0f) % 10;
- exponent = (int)((prec >> 0) & 0x0f) % 10;
-
- val = mantissa * poweroften[exponent];
-
- (void) sprintf(retbuf, "%ld.%.2ld", val/100, val%100);
- return (retbuf);
-}
-
-/* converts ascii size/precision X * 10**Y(cm) to 0xXY. moves pointer. */
-static u_int8_t
-precsize_aton(
- char **strptr
- )
-{
- unsigned int mval = 0, cmval = 0;
- u_int8_t retval = 0;
- char *cp;
- int exponent;
- int mantissa;
-
- cp = *strptr;
-
- while (isdigit(*cp))
- mval = mval * 10 + (*cp++ - '0');
-
- if (*cp == '.') { /* centimeters */
- cp++;
- if (isdigit(*cp)) {
- cmval = (*cp++ - '0') * 10;
- if (isdigit(*cp)) {
- cmval += (*cp++ - '0');
- }
- }
- }
- cmval = (mval * 100) + cmval;
-
- for (exponent = 0; exponent < 9; exponent++)
- if (cmval < poweroften[exponent+1])
- break;
-
- mantissa = cmval / poweroften[exponent];
- if (mantissa > 9)
- mantissa = 9;
-
- retval = (u_int8_t)((mantissa << 4) | exponent);
-
- *strptr = cp;
-
- return (retval);
-}
-
-/* converts ascii lat/lon to unsigned encoded 32-bit number. moves pointer. */
-static u_int32_t
-latlon2ul(
- char **latlonstrptr,
- int *which
- )
-{
- char *cp;
- u_int32_t retval;
- int deg = 0, min = 0, secs = 0, secsfrac = 0;
-
- cp = *latlonstrptr;
-
- while (isdigit(*cp))
- deg = deg * 10 + (*cp++ - '0');
-
- while (isspace(*cp))
- cp++;
-
- if (!(isdigit(*cp)))
- goto fndhemi;
-
- while (isdigit(*cp))
- min = min * 10 + (*cp++ - '0');
-
- while (isspace(*cp))
- cp++;
-
- if (!(isdigit(*cp)))
- goto fndhemi;
-
- while (isdigit(*cp))
- secs = secs * 10 + (*cp++ - '0');
-
- if (*cp == '.') { /* decimal seconds */
- cp++;
- if (isdigit(*cp)) {
- secsfrac = (*cp++ - '0') * 100;
- if (isdigit(*cp)) {
- secsfrac += (*cp++ - '0') * 10;
- if (isdigit(*cp)) {
- secsfrac += (*cp++ - '0');
- }
- }
- }
- }
-
- while (!isspace(*cp)) /* if any trailing garbage */
- cp++;
-
- while (isspace(*cp))
- cp++;
-
- fndhemi:
- switch (*cp) {
- case 'N': case 'n':
- case 'E': case 'e':
- retval = ((unsigned)1<<31)
- + (((((deg * 60) + min) * 60) + secs) * 1000)
- + secsfrac;
- break;
- case 'S': case 's':
- case 'W': case 'w':
- retval = ((unsigned)1<<31)
- - (((((deg * 60) + min) * 60) + secs) * 1000)
- - secsfrac;
- break;
- default:
- retval = 0; /* invalid value -- indicates error */
- break;
- }
-
- switch (*cp) {
- case 'N': case 'n':
- case 'S': case 's':
- *which = 1; /* latitude */
- break;
- case 'E': case 'e':
- case 'W': case 'w':
- *which = 2; /* longitude */
- break;
- default:
- *which = 0; /* error */
- break;
- }
-
- cp++; /* skip the hemisphere */
-
- while (!isspace(*cp)) /* if any trailing garbage */
- cp++;
-
- while (isspace(*cp)) /* move to next field */
- cp++;
-
- *latlonstrptr = cp;
-
- return (retval);
-}
-
-/* converts a zone file representation in a string to an RDATA on-the-wire
- * representation. */
-int
-loc_aton(
- const char *ascii,
- u_char *binary
- )
-{
- const char *cp, *maxcp;
- u_char *bcp;
-
- u_int32_t latit = 0, longit = 0, alt = 0;
- u_int32_t lltemp1 = 0, lltemp2 = 0;
- int altmeters = 0, altfrac = 0, altsign = 1;
- u_int8_t hp = 0x16; /* default = 1e6 cm = 10000.00m = 10km */
- u_int8_t vp = 0x13; /* default = 1e3 cm = 10.00m */
- u_int8_t siz = 0x12; /* default = 1e2 cm = 1.00m */
- int which1 = 0, which2 = 0;
-
- cp = ascii;
- maxcp = cp + strlen(ascii);
-
- lltemp1 = latlon2ul((char **)&cp, &which1);
-
- lltemp2 = latlon2ul((char **)&cp, &which2);
-
- switch (which1 + which2) {
- case 3: /* 1 + 2, the only valid combination */
- if ((which1 == 1) && (which2 == 2)) { /* normal case */
- latit = lltemp1;
- longit = lltemp2;
- } else if ((which1 == 2) && (which2 == 1)) { /* reversed */
- longit = lltemp1;
- latit = lltemp2;
- } else { /* some kind of brokenness */
- return (0);
- }
- break;
- default: /* we didn't get one of each */
- return (0);
- }
-
- /* altitude */
- if (*cp == '-') {
- altsign = -1;
- cp++;
- }
-
- if (*cp == '+')
- cp++;
-
- while (isdigit(*cp))
- altmeters = altmeters * 10 + (*cp++ - '0');
-
- if (*cp == '.') { /* decimal meters */
- cp++;
- if (isdigit(*cp)) {
- altfrac = (*cp++ - '0') * 10;
- if (isdigit(*cp)) {
- altfrac += (*cp++ - '0');
- }
- }
- }
-
- alt = (10000000 + (altsign * (altmeters * 100 + altfrac)));
-
- while (!isspace(*cp) && (cp < maxcp)) /* if trailing garbage or m */
- cp++;
-
- while (isspace(*cp) && (cp < maxcp))
- cp++;
-
- if (cp >= maxcp)
- goto defaults;
-
- siz = precsize_aton((char **)&cp);
-
- while (!isspace(*cp) && (cp < maxcp)) /* if trailing garbage or m */
- cp++;
-
- while (isspace(*cp) && (cp < maxcp))
- cp++;
-
- if (cp >= maxcp)
- goto defaults;
-
- hp = precsize_aton((char **)&cp);
-
- while (!isspace(*cp) && (cp < maxcp)) /* if trailing garbage or m */
- cp++;
-
- while (isspace(*cp) && (cp < maxcp))
- cp++;
-
- if (cp >= maxcp)
- goto defaults;
-
- vp = precsize_aton((char **)&cp);
-
- defaults:
-
- bcp = binary;
- *bcp++ = (u_int8_t) 0; /* version byte */
- *bcp++ = siz;
- *bcp++ = hp;
- *bcp++ = vp;
- PUTLONG(latit,bcp);
- PUTLONG(longit,bcp);
- PUTLONG(alt,bcp);
-
- return (16); /* size of RR in octets */
-}
-
-/* takes an on-the-wire LOC RR and formats it in a human readable format. */
-const char *
-loc_ntoa(
- const u_char *binary,
- char *ascii
- )
-{
- static char *error = "?";
- const u_char *cp = binary;
-
- int latdeg, latmin, latsec, latsecfrac;
- int longdeg, longmin, longsec, longsecfrac;
- char northsouth, eastwest;
- int altmeters, altfrac, altsign;
-
- const u_int32_t referencealt = 100000 * 100;
-
- int32_t latval, longval, altval;
- u_int32_t templ;
- u_int8_t sizeval, hpval, vpval, versionval;
-
- char *sizestr, *hpstr, *vpstr;
-
- versionval = *cp++;
-
- if (versionval) {
- (void) sprintf(ascii, "; error: unknown LOC RR version");
- return (ascii);
- }
-
- sizeval = *cp++;
-
- hpval = *cp++;
- vpval = *cp++;
-
- GETLONG(templ, cp);
- latval = (templ - ((unsigned)1<<31));
-
- GETLONG(templ, cp);
- longval = (templ - ((unsigned)1<<31));
-
- GETLONG(templ, cp);
- if (templ < referencealt) { /* below WGS 84 spheroid */
- altval = referencealt - templ;
- altsign = -1;
- } else {
- altval = templ - referencealt;
- altsign = 1;
- }
-
- if (latval < 0) {
- northsouth = 'S';
- latval = -latval;
- } else
- northsouth = 'N';
-
- latsecfrac = latval % 1000;
- latval = latval / 1000;
- latsec = latval % 60;
- latval = latval / 60;
- latmin = latval % 60;
- latval = latval / 60;
- latdeg = latval;
-
- if (longval < 0) {
- eastwest = 'W';
- longval = -longval;
- } else
- eastwest = 'E';
-
- longsecfrac = longval % 1000;
- longval = longval / 1000;
- longsec = longval % 60;
- longval = longval / 60;
- longmin = longval % 60;
- longval = longval / 60;
- longdeg = longval;
-
- altfrac = altval % 100;
- altmeters = (altval / 100) * altsign;
-
- if ((sizestr = strdup(precsize_ntoa(sizeval))) == NULL)
- sizestr = error;
- if ((hpstr = strdup(precsize_ntoa(hpval))) == NULL)
- hpstr = error;
- if ((vpstr = strdup(precsize_ntoa(vpval))) == NULL)
- vpstr = error;
-
- sprintf(ascii,
- "%d %.2d %.2d.%.3d %c %d %.2d %.2d.%.3d %c %d.%.2dm %sm %sm %sm",
- latdeg, latmin, latsec, latsecfrac, northsouth,
- longdeg, longmin, longsec, longsecfrac, eastwest,
- altmeters, altfrac, sizestr, hpstr, vpstr);
-
- if (sizestr != error)
- free(sizestr);
- if (hpstr != error)
- free(hpstr);
- if (vpstr != error)
- free(vpstr);
-
- return (ascii);
-}
-
-
-/* Return the number of DNS hierarchy levels in the name. */
-int
-dn_count_labels(const char *name) {
- int i, len, count;
-
- len = (int)strlen(name);
- for (i = 0, count = 0; i < len; i++) {
- /* XXX need to check for \. or use named's nlabels(). */
- if (name[i] == '.')
- count++;
- }
-
- /* don't count initial wildcard */
- if (name[0] == '*')
- if (count)
- count--;
-
- /* don't count the null label for root. */
- /* if terminating '.' not found, must adjust */
- /* count to include last label */
- if (len > 0 && name[len-1] != '.')
- count++;
- return (count);
-}
-
-
-/*
- * Make dates expressed in seconds-since-Jan-1-1970 easy to read.
- * SIG records are required to be printed like this, by the Secure DNS RFC.
- */
-char *
-p_secstodate (u_long secs) {
- static char output[15]; /* YYYYMMDDHHMMSS and null */
- time_t clock = (time_t)secs;
- struct tm *time;
-
- time = gmtime(&clock);
- time->tm_year += 1900;
- time->tm_mon += 1;
- sprintf(output, "%04d%02d%02d%02d%02d%02d",
- time->tm_year, time->tm_mon, time->tm_mday,
- time->tm_hour, time->tm_min, time->tm_sec);
- return (output);
-}
diff --git a/StdLib/BsdSocketLib/res_init.c b/StdLib/BsdSocketLib/res_init.c
deleted file mode 100644
index 613a76a6b3..0000000000
--- a/StdLib/BsdSocketLib/res_init.c
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- * Copyright (c) 1985, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by the University of
- * California, Berkeley, Intel Corporation, and its contributors.
- *
- * 4. Neither the name of University, Intel Corporation, or their respective
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
- * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * Portions Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)res_init.c 8.1 (Berkeley) 6/7/93";
-static char orig_rcsid[] = "From: Id: res_init.c,v 8.7 1996/11/18 09:10:04 vixie Exp $";
-static char rcsid[] = "$Id: res_init.c,v 1.1.1.1 2003/11/19 01:51:37 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/time.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-#include <ctype.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "res_config.h"
-
-static void res_setoptions __P((char *, char *));
-
-#ifdef RESOLVSORT
-static const char sort_mask[] = "/&";
-#define ISSORTMASK(ch) (strchr(sort_mask, ch) != NULL)
-static u_int32_t net_mask __P((struct in_addr));
-#endif
-
-#if !defined(isascii) /* XXX - could be a function */
-# define isascii(c) (!(c & 0200))
-#endif
-
-/*
- * Resolver state default settings.
- */
-
-struct __res_state _res
-# if defined(__BIND_RES_TEXT)
- = { RES_TIMEOUT, } /* Motorola, et al. */
-# endif
- ;
-
-
-/*
- * Set up default settings. If the configuration file exist, the values
- * there will have precedence. Otherwise, the server address is set to
- * INADDR_ANY and the default domain name comes from the gethostname().
- *
- * An interrim version of this code (BIND 4.9, pre-4.4BSD) used 127.0.0.1
- * rather than INADDR_ANY ("0.0.0.0") as the default name server address
- * since it was noted that INADDR_ANY actually meant ``the first interface
- * you "ifconfig"'d at boot time'' and if this was a SLIP or PPP interface,
- * it had to be "up" in order for you to reach your own name server. It
- * was later decided that since the recommended practice is to always
- * install local static routes through 127.0.0.1 for all your network
- * interfaces, that we could solve this problem without a code change.
- *
- * The configuration file should always be used, since it is the only way
- * to specify a default domain. If you are running a server on your local
- * machine, you should say "nameserver 0.0.0.0" or "nameserver 127.0.0.1"
- * in the configuration file.
- *
- * Return 0 if completes successfully, -1 on error
- */
-int
-res_init()
-{
- register FILE *fp;
- register char *cp, **pp;
- register int n;
- char buf[MAXDNAME];
- int nserv = 0; /* number of nameserver records read from file */
- int haveenv = 0;
- int havesearch = 0;
-#ifdef RESOLVSORT
- int nsort = 0;
- char *net;
-#endif
-#ifndef RFC1535
- int dots;
-#endif
-
- /*
- * These three fields used to be statically initialized. This made
- * it hard to use this code in a shared library. It is necessary,
- * now that we're doing dynamic initialization here, that we preserve
- * the old semantics: if an application modifies one of these three
- * fields of _res before res_init() is called, res_init() will not
- * alter them. Of course, if an application is setting them to
- * _zero_ before calling res_init(), hoping to override what used
- * to be the static default, we can't detect it and unexpected results
- * will follow. Zero for any of these fields would make no sense,
- * so one can safely assume that the applications were already getting
- * unexpected results.
- *
- * _res.options is tricky since some apps were known to diddle the bits
- * before res_init() was first called. We can't replicate that semantic
- * with dynamic initialization (they may have turned bits off that are
- * set in RES_DEFAULT). Our solution is to declare such applications
- * "broken". They could fool us by setting RES_INIT but none do (yet).
- */
- if (!_res.retrans)
- _res.retrans = RES_TIMEOUT;
- if (!_res.retry)
- _res.retry = 4;
- if (!(_res.options & RES_INIT))
- _res.options = RES_DEFAULT;
-
- /*
- * This one used to initialize implicitly to zero, so unless the app
- * has set it to something in particular, we can randomize it now.
- */
- if (!_res.id)
- _res.id = (u_short)res_randomid();
-
-#ifdef USELOOPBACK
- _res.nsaddr.sin_addr = inet_makeaddr(IN_LOOPBACKNET, 1);
-#else
- _res.nsaddr.sin_addr.s_addr = INADDR_ANY;
-#endif
- _res.nsaddr.sin_family = AF_INET;
- _res.nsaddr.sin_port = htons(NAMESERVER_PORT);
- _res.nscount = 1;
- _res.ndots = 1;
- _res.pfcode = 0;
-
- /* Allow user to override the local domain definition */
-#ifdef _ORG_FREEBSD_
- if (issetugid() == 0 && (cp = getenv("LOCALDOMAIN")) != NULL)
-#else
- if ((cp = getenv("LOCALDOMAIN")) != NULL)
-#endif
- {
- (void)strncpy(_res.defdname, cp, sizeof(_res.defdname) - 1);
- _res.defdname[sizeof(_res.defdname) - 1] = '\0';
- haveenv++;
-
- /*
- * Set search list to be blank-separated strings
- * from rest of env value. Permits users of LOCALDOMAIN
- * to still have a search list, and anyone to set the
- * one that they want to use as an individual (even more
- * important now that the rfc1535 stuff restricts searches)
- */
- cp = _res.defdname;
- pp = _res.dnsrch;
- *pp++ = cp;
- for (n = 0; *cp && pp < _res.dnsrch + MAXDNSRCH; cp++) {
- if (*cp == '\n') /* silly backwards compat */
- break;
- else if (*cp == ' ' || *cp == '\t') {
- *cp = 0;
- n = 1;
- } else if (n) {
- *pp++ = cp;
- n = 0;
- havesearch = 1;
- }
- }
- /* null terminate last domain if there are excess */
- while (*cp != '\0' && *cp != ' ' && *cp != '\t' && *cp != '\n')
- cp++;
- *cp = '\0';
- *pp++ = 0;
- }
-
-#define MATCH(line, name) \
- (!strncmp(line, name, sizeof(name) - 1) && \
- (line[sizeof(name) - 1] == ' ' || \
- line[sizeof(name) - 1] == '\t'))
-
- if ((fp = fopen(_PATH_RESCONF, "r")) != NULL) {
- /* read the config file */
- while (fgets(buf, sizeof(buf), fp) != NULL) {
- /* skip comments */
- if (*buf == ';' || *buf == '#')
- continue;
- /* read default domain name */
- if (MATCH(buf, "domain")) {
- if (haveenv) /* skip if have from environ */
- continue;
- cp = buf + sizeof("domain") - 1;
- while (*cp == ' ' || *cp == '\t')
- cp++;
- if ((*cp == '\0') || (*cp == '\n'))
- continue;
- strncpy(_res.defdname, cp, sizeof(_res.defdname) - 1);
- _res.defdname[sizeof(_res.defdname) - 1] = '\0';
- if ((cp = strpbrk(_res.defdname, " \t\n")) != NULL)
- *cp = '\0';
- havesearch = 0;
- continue;
- }
- /* set search list */
- if (MATCH(buf, "search")) {
- if (haveenv) /* skip if have from environ */
- continue;
- cp = buf + sizeof("search") - 1;
- while (*cp == ' ' || *cp == '\t')
- cp++;
- if ((*cp == '\0') || (*cp == '\n'))
- continue;
- strncpy(_res.defdname, cp, sizeof(_res.defdname) - 1);
- _res.defdname[sizeof(_res.defdname) - 1] = '\0';
- if ((cp = strchr(_res.defdname, '\n')) != NULL)
- *cp = '\0';
- /*
- * Set search list to be blank-separated strings
- * on rest of line.
- */
- cp = _res.defdname;
- pp = _res.dnsrch;
- *pp++ = cp;
- for (n = 0; *cp && pp < _res.dnsrch + MAXDNSRCH; cp++) {
- if (*cp == ' ' || *cp == '\t') {
- *cp = 0;
- n = 1;
- } else if (n) {
- *pp++ = cp;
- n = 0;
- }
- }
- /* null terminate last domain if there are excess */
- while (*cp != '\0' && *cp != ' ' && *cp != '\t')
- cp++;
- *cp = '\0';
- *pp++ = 0;
- havesearch = 1;
- continue;
- }
- /* read nameservers to query */
- if (MATCH(buf, "nameserver") && nserv < MAXNS) {
- struct in_addr a;
-
- cp = buf + sizeof("nameserver") - 1;
- while (*cp == ' ' || *cp == '\t')
- cp++;
- if ((*cp != '\0') && (*cp != '\n') && inet_aton(cp, &a)) {
- _res.nsaddr_list[nserv].sin_addr = a;
- _res.nsaddr_list[nserv].sin_family = AF_INET;
- _res.nsaddr_list[nserv].sin_port =
- htons(NAMESERVER_PORT);
- nserv++;
- }
- continue;
- }
-#ifdef RESOLVSORT
- if (MATCH(buf, "sortlist")) {
- struct in_addr a;
-
- cp = buf + sizeof("sortlist") - 1;
- while (nsort < MAXRESOLVSORT) {
- while (*cp == ' ' || *cp == '\t')
- cp++;
- if (*cp == '\0' || *cp == '\n' || *cp == ';')
- break;
- net = cp;
- while (*cp && !ISSORTMASK(*cp) && *cp != ';' &&
- isascii(*cp) && !isspace(*cp))
- cp++;
- n = *cp;
- *cp = 0;
- if (inet_aton(net, &a)) {
- _res.sort_list[nsort].addr = a;
- if (ISSORTMASK(n)) {
- *cp++ = (char)n;
- net = cp;
- while (*cp && *cp != ';' &&
- isascii(*cp) && !isspace(*cp))
- cp++;
- n = *cp;
- *cp = 0;
- if (inet_aton(net, &a)) {
- _res.sort_list[nsort].mask = a.s_addr;
- } else {
- _res.sort_list[nsort].mask =
- net_mask(_res.sort_list[nsort].addr);
- }
- } else {
- _res.sort_list[nsort].mask =
- net_mask(_res.sort_list[nsort].addr);
- }
- nsort++;
- }
- *cp = (char)n;
- }
- continue;
- }
-#endif
- if (MATCH(buf, "options")) {
- res_setoptions(buf + sizeof("options") - 1, "conf");
- continue;
- }
- }
- if (nserv > 1)
- _res.nscount = nserv;
-#ifdef RESOLVSORT
- _res.nsort = nsort;
-#endif
- (void) fclose(fp);
- }
- if (_res.defdname[0] == 0 &&
- gethostname(buf, sizeof(_res.defdname) - 1) == 0 &&
- (cp = strchr(buf, '.')) != NULL)
- strcpy(_res.defdname, cp + 1);
-
- /* find components of local domain that might be searched */
- if (havesearch == 0) {
- pp = _res.dnsrch;
- *pp++ = _res.defdname;
- *pp = NULL;
-
-#ifndef RFC1535
- dots = 0;
- for (cp = _res.defdname; *cp; cp++)
- dots += (*cp == '.');
-
- cp = _res.defdname;
- while (pp < _res.dnsrch + MAXDFLSRCH) {
- if (dots < LOCALDOMAINPARTS)
- break;
- cp = strchr(cp, '.') + 1; /* we know there is one */
- *pp++ = cp;
- dots--;
- }
- *pp = NULL;
-#ifdef DEBUG
- if (_res.options & RES_DEBUG) {
- printf(";; res_init()... default dnsrch list:\n");
- for (pp = _res.dnsrch; *pp; pp++)
- printf(";;\t%s\n", *pp);
- printf(";;\t..END..\n");
- }
-#endif
-#endif /* !RFC1535 */
- }
-
-#ifdef _ORG_FREEBSD_
- if (issetugid())
-#else
- if (1)
-#endif
- _res.options |= RES_NOALIASES;
- else if ((cp = getenv("RES_OPTIONS")) != NULL)
- res_setoptions(cp, "env");
- _res.options |= RES_INIT;
- if ( 0 == nserv ) {
- return -1;
- }
- return (0);
-}
-
-static void
-res_setoptions(
- char *options,
- char *source
- )
-{
- char *cp = options;
- int i;
-
-#ifdef DEBUG
- if (_res.options & RES_DEBUG)
- printf(";; res_setoptions(\"%s\", \"%s\")...\n",
- options, source);
-#endif
- while (*cp) {
- /* skip leading and inner runs of spaces */
- while (*cp == ' ' || *cp == '\t')
- cp++;
- /* search for and process individual options */
- if (!strncmp(cp, "ndots:", sizeof("ndots:") - 1)) {
- i = atoi(cp + sizeof("ndots:") - 1);
- if (i <= RES_MAXNDOTS)
- _res.ndots = i;
- else
- _res.ndots = RES_MAXNDOTS;
-#ifdef DEBUG
- if (_res.options & RES_DEBUG)
- printf(";;\tndots=%d\n", _res.ndots);
-#endif
- } else if (!strncmp(cp, "debug", sizeof("debug") - 1)) {
-#ifdef DEBUG
- if (!(_res.options & RES_DEBUG)) {
- printf(";; res_setoptions(\"%s\", \"%s\")..\n",
- options, source);
- _res.options |= RES_DEBUG;
- }
- printf(";;\tdebug\n");
-#endif
- } else if (!strncmp(cp, "inet6", sizeof("inet6") - 1)) {
- _res.options |= RES_USE_INET6;
- } else if (!strncmp(cp, "no_tld_query", sizeof("no_tld_query") - 1)) {
- _res.options |= RES_NOTLDQUERY;
- } else {
- /* XXX - print a warning here? */
- }
- /* skip to next run of spaces */
- while (*cp && *cp != ' ' && *cp != '\t')
- cp++;
- }
-}
-
-#ifdef RESOLVSORT
-/* XXX - should really support CIDR which means explicit masks always. */
-static u_int32_t
-net_mask(
- struct in_addr in
- )
-{
- register u_int32_t i = ntohl(in.s_addr);
-
- if (IN_CLASSA(i))
- return (htonl(IN_CLASSA_NET));
- else if (IN_CLASSB(i))
- return (htonl(IN_CLASSB_NET));
- return (htonl(IN_CLASSC_NET));
-}
-#endif
-
-u_int
-res_randomid()
-{
- struct timeval now;
-
- gettimeofday(&now, NULL);
- return (0xffff & (now.tv_sec ^ now.tv_usec /* ^ getpid() */));
-}
diff --git a/StdLib/BsdSocketLib/res_mkquery.c b/StdLib/BsdSocketLib/res_mkquery.c
deleted file mode 100644
index 2559f227c5..0000000000
--- a/StdLib/BsdSocketLib/res_mkquery.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (c) 1985, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by the University of
- * California, Berkeley, Intel Corporation, and its contributors.
- *
- * 4. Neither the name of University, Intel Corporation, or their respective
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
- * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/*
- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * Portions Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)res_mkquery.c 8.1 (Berkeley) 6/4/93";
-static char orig_rcsid[] = "From: Id: res_mkquery.c,v 8.9 1997/04/24 22:22:36 vixie Exp $";
-static char rcsid[] = "$Id: res_mkquery.c,v 1.1.1.1 2003/11/19 01:51:37 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "res_config.h"
-
-/*
- * Form all types of queries.
- * Returns the size of the result or -1.
- */
-int
-res_mkquery(
- int op, /* opcode of query */
- const char *dname, /* domain name */
- int class, /* class of query */
- int type, /* type of query */
- const u_char *data, /* resource record data */
- int datalen, /* length of data */
- const u_char *newrr_in, /* new rr for modify or append */
- u_char *buf, /* buffer to put query */
- int buflen /* size of buffer */
- )
-{
- register HEADER *hp;
- register u_char *cp;
- register int n;
- u_char *dnptrs[20], **dpp, **lastdnptr;
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
- h_errno = NETDB_INTERNAL;
- return (-1);
- }
-#ifdef DEBUG
- if (_res.options & RES_DEBUG)
- printf(";; res_mkquery(%d, %s, %d, %d)\n",
- op, dname, class, type);
-#endif
- /*
- * Initialize header fields.
- */
- if ((buf == NULL) || (buflen < HFIXEDSZ))
- return (-1);
- memset(buf, 0, HFIXEDSZ);
- hp = (HEADER *) buf;
- hp->id = htons(++_res.id);
- hp->opcode = op;
- hp->rd = (_res.options & RES_RECURSE) != 0;
- hp->rcode = NOERROR;
- cp = buf + HFIXEDSZ;
- buflen -= HFIXEDSZ;
- dpp = dnptrs;
- *dpp++ = buf;
- *dpp++ = NULL;
- lastdnptr = dnptrs + sizeof dnptrs / sizeof dnptrs[0];
- /*
- * perform opcode specific processing
- */
- switch (op) {
- case QUERY: /*FALLTHROUGH*/
- case NS_NOTIFY_OP:
- if ((buflen -= QFIXEDSZ) < 0)
- return (-1);
- if ((n = dn_comp(dname, cp, buflen, dnptrs, lastdnptr)) < 0)
- return (-1);
- cp += n;
- buflen -= n;
- __putshort((u_int16_t)type, cp);
- cp += INT16SZ;
- __putshort((u_int16_t)class, cp);
- cp += INT16SZ;
- hp->qdcount = htons(1);
- if (op == QUERY || data == NULL)
- break;
- /*
- * Make an additional record for completion domain.
- */
- buflen -= RRFIXEDSZ;
- n = dn_comp((char *)data, cp, buflen, dnptrs, lastdnptr);
- if (n < 0)
- return (-1);
- cp += n;
- buflen -= n;
- __putshort(T_NULL, cp);
- cp += INT16SZ;
- __putshort((u_int16_t)class, cp);
- cp += INT16SZ;
- __putlong(0, cp);
- cp += INT32SZ;
- __putshort(0, cp);
- cp += INT16SZ;
- hp->arcount = htons(1);
- break;
-
- case IQUERY:
- /*
- * Initialize answer section
- */
- if (buflen < 1 + RRFIXEDSZ + datalen)
- return (-1);
- *cp++ = '\0'; /* no domain name */
- __putshort((u_int16_t)type, cp);
- cp += INT16SZ;
- __putshort((u_int16_t)class, cp);
- cp += INT16SZ;
- __putlong(0, cp);
- cp += INT32SZ;
- __putshort((u_int16_t)datalen, cp);
- cp += INT16SZ;
- if (datalen) {
- memcpy(cp, data, datalen);
- cp += datalen;
- }
- hp->ancount = htons(1);
- break;
-
- default:
- return (-1);
- }
- return ((int)(cp - buf));
-}
diff --git a/StdLib/BsdSocketLib/res_mkupdate.c b/StdLib/BsdSocketLib/res_mkupdate.c
deleted file mode 100644
index d81d7d6f15..0000000000
--- a/StdLib/BsdSocketLib/res_mkupdate.c
+++ /dev/null
@@ -1,459 +0,0 @@
-/** @file
- Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-/*
- * Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and
- * its contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/*
- * Based on the Dynamic DNS reference implementation by Viraj Bais
- * <viraj_bais@ccm.fm.intel.com>
- */
-
-#include <sys/types.h>
-#include <sys/param.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <arpa/inet.h>
-
-#include <errno.h>
-#include <limits.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <ctype.h>
-
-#include "res_config.h"
-
-static int getnum_str(u_char **, u_char *);
-static int getword_str(char *, int, u_char **, u_char *);
-
-#define ShrinkBuffer(x) if ((buflen -= x) < 0) return (-2);
-
-/*
- * Form update packets.
- * Returns the size of the resulting packet if no error
- * On error,
- * returns -1 if error in reading a word/number in rdata
- * portion for update packets
- * -2 if length of buffer passed is insufficient
- * -3 if zone section is not the first section in
- * the linked list, or section order has a problem
- * -4 on a number overflow
- * -5 unknown operation or no records
- */
-int
-res_mkupdate(ns_updrec *rrecp_in, u_char *buf, int buflen) {
- ns_updrec *rrecp_start = rrecp_in;
- HEADER *hp;
- u_char *cp, *sp2, *startp, *endp;
- int n, i, soanum, multiline;
- ns_updrec *rrecp;
- struct in_addr ina;
- char buf2[MAXDNAME];
- int section, numrrs = 0, counts[ns_s_max];
- u_int16_t rtype, rclass;
- u_int32_t n1, rttl;
- u_char *dnptrs[20], **dpp, **lastdnptr;
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
- h_errno = NETDB_INTERNAL;
- return (-1);
- }
-
- /*
- * Initialize header fields.
- */
- if ((buf == NULL) || (buflen < HFIXEDSZ))
- return (-1);
- memset(buf, 0, HFIXEDSZ);
- hp = (HEADER *) buf;
- hp->id = htons(++_res.id);
- hp->opcode = ns_o_update;
- hp->rcode = NOERROR;
- cp = buf + HFIXEDSZ;
- buflen -= HFIXEDSZ;
- dpp = dnptrs;
- *dpp++ = buf;
- *dpp++ = NULL;
- lastdnptr = dnptrs + sizeof dnptrs / sizeof dnptrs[0];
-
- if (rrecp_start == NULL)
- return (-5);
- else if (rrecp_start->r_section != S_ZONE)
- return (-3);
-
- memset(counts, 0, sizeof counts);
- for (rrecp = rrecp_start; rrecp; rrecp = rrecp->r_grpnext) {
- numrrs++;
- section = rrecp->r_section;
- if (section < 0 || section >= ns_s_max)
- return (-1);
- counts[section]++;
- for (i = section + 1; i < ns_s_max; i++)
- if (counts[i])
- return (-3);
- rtype = rrecp->r_type;
- rclass = rrecp->r_class;
- rttl = rrecp->r_ttl;
- /* overload class and type */
- if (section == S_PREREQ) {
- rttl = 0;
- switch (rrecp->r_opcode) {
- case YXDOMAIN:
- rclass = C_ANY;
- rtype = T_ANY;
- rrecp->r_size = 0;
- break;
- case NXDOMAIN:
- rclass = C_NONE;
- rtype = T_ANY;
- rrecp->r_size = 0;
- break;
- case NXRRSET:
- rclass = C_NONE;
- rrecp->r_size = 0;
- break;
- case YXRRSET:
- if (rrecp->r_size == 0)
- rclass = C_ANY;
- break;
- default:
- fprintf(stderr,
- "res_mkupdate: incorrect opcode: %d\n",
- rrecp->r_opcode);
- fflush(stderr);
- return (-1);
- }
- } else if (section == S_UPDATE) {
- switch (rrecp->r_opcode) {
- case DELETE:
- rclass = rrecp->r_size == 0 ? C_ANY : C_NONE;
- break;
- case ADD:
- break;
- default:
- fprintf(stderr,
- "res_mkupdate: incorrect opcode: %d\n",
- rrecp->r_opcode);
- fflush(stderr);
- return (-1);
- }
- }
-
- /*
- * XXX appending default domain to owner name is omitted,
- * fqdn must be provided
- */
- if ((n = dn_comp(rrecp->r_dname, cp, buflen, dnptrs,
- lastdnptr)) < 0)
- return (-1);
- cp += n;
- ShrinkBuffer(n + 2*INT16SZ);
- PUTSHORT(rtype, cp);
- PUTSHORT(rclass, cp);
- if (section == S_ZONE) {
- if (numrrs != 1 || rrecp->r_type != T_SOA)
- return (-3);
- continue;
- }
- ShrinkBuffer(INT32SZ + INT16SZ);
- PUTLONG(rttl, cp);
- sp2 = cp; /* save pointer to length byte */
- cp += INT16SZ;
- if (rrecp->r_size == 0) {
- if (section == S_UPDATE && rclass != C_ANY)
- return (-1);
- else {
- PUTSHORT(0, sp2);
- continue;
- }
- }
- startp = rrecp->r_data;
- endp = startp + rrecp->r_size - 1;
- /* XXX this should be done centrally. */
- switch (rrecp->r_type) {
- case T_A:
- if (!getword_str(buf2, sizeof buf2, &startp, endp))
- return (-1);
- if (!inet_aton(buf2, &ina))
- return (-1);
- n1 = ntohl(ina.s_addr);
- ShrinkBuffer(INT32SZ);
- PUTLONG(n1, cp);
- break;
- case T_CNAME:
- case T_MB:
- case T_MG:
- case T_MR:
- case T_NS:
- case T_PTR:
- if (!getword_str(buf2, sizeof buf2, &startp, endp))
- return (-1);
- n = dn_comp(buf2, cp, buflen, dnptrs, lastdnptr);
- if (n < 0)
- return (-1);
- cp += n;
- ShrinkBuffer(n);
- break;
- case T_MINFO:
- case T_SOA:
- case T_RP:
- for (i = 0; i < 2; i++) {
- if (!getword_str(buf2, sizeof buf2, &startp,
- endp))
- return (-1);
- n = dn_comp(buf2, cp, buflen,
- dnptrs, lastdnptr);
- if (n < 0)
- return (-1);
- cp += n;
- ShrinkBuffer(n);
- }
- if (rrecp->r_type == T_SOA) {
- ShrinkBuffer(5 * INT32SZ);
- while (isspace(*startp) || !*startp)
- startp++;
- if (*startp == '(') {
- multiline = 1;
- startp++;
- } else
- multiline = 0;
- /* serial, refresh, retry, expire, minimum */
- for (i = 0; i < 5; i++) {
- soanum = getnum_str(&startp, endp);
- if (soanum < 0)
- return (-1);
- PUTLONG(soanum, cp);
- }
- if (multiline) {
- while (isspace(*startp) || !*startp)
- startp++;
- if (*startp != ')')
- return (-1);
- }
- }
- break;
- case T_MX:
- case T_AFSDB:
- case T_RT:
- n = getnum_str(&startp, endp);
- if (n < 0)
- return (-1);
- PUTSHORT(n, cp);
- ShrinkBuffer(INT16SZ);
- if (!getword_str(buf2, sizeof buf2, &startp, endp))
- return (-1);
- n = dn_comp(buf2, cp, buflen, dnptrs, lastdnptr);
- if (n < 0)
- return (-1);
- cp += n;
- ShrinkBuffer(n);
- break;
- case T_PX:
- n = getnum_str(&startp, endp);
- if (n < 0)
- return (-1);
- PUTSHORT(n, cp);
- ShrinkBuffer(INT16SZ);
- for (i = 0; i < 2; i++) {
- if (!getword_str(buf2, sizeof buf2, &startp,
- endp))
- return (-1);
- n = dn_comp(buf2, cp, buflen, dnptrs,
- lastdnptr);
- if (n < 0)
- return (-1);
- cp += n;
- ShrinkBuffer(n);
- }
- break;
- case T_WKS:
- case T_HINFO:
- case T_TXT:
- case T_X25:
- case T_ISDN:
- case T_NSAP:
- case T_LOC:
- /* XXX - more fine tuning needed here */
- ShrinkBuffer(rrecp->r_size);
- memcpy(cp, rrecp->r_data, rrecp->r_size);
- cp += rrecp->r_size;
- break;
- default:
- return (-1);
- } /*switch*/
- n = (u_int16_t)((cp - sp2) - INT16SZ);
- PUTSHORT(n, sp2);
- } /*for*/
-
- hp->qdcount = htons(counts[0]);
- hp->ancount = htons(counts[1]);
- hp->nscount = htons(counts[2]);
- hp->arcount = htons(counts[3]);
- return ((int)(cp - buf));
-}
-
-/*
- * Get a whitespace delimited word from a string (not file)
- * into buf. modify the start pointer to point after the
- * word in the string.
- */
-static int
-getword_str(char *buf, int size, u_char **startpp, u_char *endp) {
- char *cp;
- int c;
-
- for (cp = buf; *startpp <= endp; ) {
- c = **startpp;
- if (isspace(c) || c == '\0') {
- if (cp != buf) /* trailing whitespace */
- break;
- else { /* leading whitespace */
- (*startpp)++;
- continue;
- }
- }
- (*startpp)++;
- if (cp >= buf+size-1)
- break;
- *cp++ = (u_char)c;
- }
- *cp = '\0';
- return (cp != buf);
-}
-
-/*
- * Get a whitespace delimited number from a string (not file) into buf
- * update the start pointer to point after the number in the string.
- */
-static int
-getnum_str(u_char **startpp, u_char *endp) {
- int c;
- int n;
- int seendigit = 0;
- int m = 0;
-
- for (n = 0; *startpp <= endp; ) {
- c = **startpp;
- if (isspace(c) || c == '\0') {
- if (seendigit) /* trailing whitespace */
- break;
- else { /* leading whitespace */
- (*startpp)++;
- continue;
- }
- }
- if (c == ';') {
- while ((*startpp <= endp) &&
- ((c = **startpp) != '\n'))
- (*startpp)++;
- if (seendigit)
- break;
- continue;
- }
- if (!isdigit(c)) {
- if (c == ')' && seendigit) {
- (*startpp)--;
- break;
- }
- return (-1);
- }
- (*startpp)++;
- n = n * 10 + (c - '0');
- seendigit = 1;
- }
- return (n + m);
-}
-
-/*
- * Allocate a resource record buffer & save rr info.
- */
-ns_updrec *
-res_mkupdrec(int section, const char *dname,
- u_int class, u_int type, u_long ttl) {
- ns_updrec *rrecp = (ns_updrec *)calloc(1, sizeof(ns_updrec));
-
- if (!rrecp || !(rrecp->r_dname = strdup(dname)))
- return (NULL);
- rrecp->r_class = (u_int16_t)class;
- rrecp->r_type = (u_int16_t)type;
- rrecp->r_ttl = (u_int32_t)ttl;
- rrecp->r_section = (u_int8_t)section;
- return (rrecp);
-}
-
-/*
- * Free a resource record buffer created by res_mkupdrec.
- */
-void
-res_freeupdrec(ns_updrec *rrecp) {
- /* Note: freeing r_dp is the caller's responsibility. */
- if (rrecp->r_dname != NULL)
- free(rrecp->r_dname);
- free(rrecp);
-}
diff --git a/StdLib/BsdSocketLib/res_query.c b/StdLib/BsdSocketLib/res_query.c
deleted file mode 100644
index 791ff018f1..0000000000
--- a/StdLib/BsdSocketLib/res_query.c
+++ /dev/null
@@ -1,430 +0,0 @@
-/*
- * Copyright (c) 1988, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by the University of
- * California, Berkeley, Intel Corporation, and its contributors.
- *
- * 4. Neither the name of University, Intel Corporation, or their respective
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
- * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/*
- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * Portions Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)res_query.c 8.1 (Berkeley) 6/4/93";
-static char orig_rcsid = "From: Id: res_query.c,v 8.14 1997/06/09 17:47:05 halley Exp $";
-static char rcsid[] = "$Id: res_query.c,v 1.1.1.1 2003/11/19 01:51:38 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-#include <ctype.h>
-#include <errno.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "res_config.h"
-
-#if PACKETSZ > 1024
-#define MAXPACKET PACKETSZ
-#else
-#define MAXPACKET 1024
-#endif
-
-/*
- * Formulate a normal query, send, and await answer.
- * Returned answer is placed in supplied buffer "answer".
- * Perform preliminary check of answer, returning success only
- * if no error is indicated and the answer count is nonzero.
- * Return the size of the response on success, -1 on error.
- * Error number is left in h_errno.
- *
- * Caller must parse answer and determine whether it answers the question.
- */
-int
-res_query(
- const char *name, /* domain name */
- int class, /* class of query */
- int type, /* type of query */
- u_char *answer, /* buffer to put answer */
- int anslen /* size of answer buffer */
- )
-{
- u_char buf[MAXPACKET];
- HEADER *hp = (HEADER *) answer;
- int n;
-
- hp->rcode = NOERROR; /* default */
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
- h_errno = NETDB_INTERNAL;
- return (-1);
- }
-#ifdef DEBUG
- if (_res.options & RES_DEBUG)
- printf(";; res_query(%s, %d, %d)\n", name, class, type);
-#endif
-
- n = res_mkquery(QUERY, name, class, type, NULL, 0, NULL,
- buf, sizeof(buf));
- if (n <= 0) {
-#ifdef DEBUG
- if (_res.options & RES_DEBUG)
- printf(";; res_query: mkquery failed\n");
-#endif
- h_errno = NO_RECOVERY;
- return (n);
- }
- n = res_send(buf, n, answer, anslen);
- if (n < 0) {
-#ifdef DEBUG
- if (_res.options & RES_DEBUG)
- printf(";; res_query: send error\n");
-#endif
- h_errno = TRY_AGAIN;
- return (n);
- }
-
- if (hp->rcode != NOERROR || ntohs(hp->ancount) == 0) {
-#ifdef DEBUG
- if (_res.options & RES_DEBUG)
- printf(";; rcode = %d, ancount=%d\n", hp->rcode,
- ntohs(hp->ancount));
-#endif
- switch (hp->rcode) {
- case NXDOMAIN:
- h_errno = HOST_NOT_FOUND;
- break;
- case SERVFAIL:
- h_errno = TRY_AGAIN;
- break;
- case NOERROR:
- h_errno = NO_DATA;
- break;
- case FORMERR:
- case NOTIMP:
- case REFUSED:
- default:
- h_errno = NO_RECOVERY;
- break;
- }
- return (-1);
- }
- return (n);
-}
-
-/*
- * Formulate a normal query, send, and retrieve answer in supplied buffer.
- * Return the size of the response on success, -1 on error.
- * If enabled, implement search rules until answer or unrecoverable failure
- * is detected. Error code, if any, is left in h_errno.
- */
-int
-res_search(
- const char *name, /* domain name */
- int class, /* class of query */
- int type, /* type of query */
- u_char *answer, /* buffer to put answer */
- int anslen /* size of answer */
- )
-{
- const char *cp, * const *domain;
- HEADER *hp = (HEADER *) answer;
- u_int dots;
- int trailing_dot, ret, saved_herrno;
- int got_nodata = 0, got_servfail = 0, tried_as_is = 0;
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
- h_errno = NETDB_INTERNAL;
- return (-1);
- }
- errno = 0;
- h_errno = HOST_NOT_FOUND; /* default, if we never query */
- dots = 0;
- for (cp = name; *cp; cp++)
- dots += (*cp == '.');
- trailing_dot = 0;
- if (cp > name && *--cp == '.')
- trailing_dot++;
-
- /* If there aren't any dots, it could be a user-level alias */
- if (!dots && (cp = hostalias(name)) != NULL)
- return (res_query(cp, class, type, answer, anslen));
-
- /*
- * If there are dots in the name already, let's just give it a try
- * 'as is'. The threshold can be set with the "ndots" option.
- */
- saved_herrno = -1;
- if (dots >= _res.ndots) {
- ret = res_querydomain(name, NULL, class, type, answer, anslen);
- if (ret > 0)
- return (ret);
- saved_herrno = h_errno;
- tried_as_is++;
- }
-
- /*
- * We do at least one level of search if
- * - there is no dot and RES_DEFNAME is set, or
- * - there is at least one dot, there is no trailing dot,
- * and RES_DNSRCH is set.
- */
- if ((!dots && (_res.options & RES_DEFNAMES)) ||
- (dots && !trailing_dot && (_res.options & RES_DNSRCH))) {
- int done = 0;
-
- for (domain = (const char * const *)_res.dnsrch;
- *domain && !done;
- domain++) {
-
- ret = res_querydomain(name, *domain, class, type,
- answer, anslen);
- if (ret > 0)
- return (ret);
-
- /*
- * If no server present, give up.
- * If name isn't found in this domain,
- * keep trying higher domains in the search list
- * (if that's enabled).
- * On a NO_DATA error, keep trying, otherwise
- * a wildcard entry of another type could keep us
- * from finding this entry higher in the domain.
- * If we get some other error (negative answer or
- * server failure), then stop searching up,
- * but try the input name below in case it's
- * fully-qualified.
- */
- if (errno == ECONNREFUSED) {
- h_errno = TRY_AGAIN;
- return (-1);
- }
-
- switch (h_errno) {
- case NO_DATA:
- got_nodata++;
- /* FALLTHROUGH */
- case HOST_NOT_FOUND:
- /* keep trying */
- break;
- case TRY_AGAIN:
- if (hp->rcode == SERVFAIL) {
- /* try next search element, if any */
- got_servfail++;
- break;
- }
- /* FALLTHROUGH */
- default:
- /* anything else implies that we're done */
- done++;
- }
-
- /* if we got here for some reason other than DNSRCH,
- * we only wanted one iteration of the loop, so stop.
- */
- if (!(_res.options & RES_DNSRCH))
- done++;
- }
- }
-
- /*
- * If we have not already tried the name "as is", do that now.
- * note that we do this regardless of how many dots were in the
- * name or whether it ends with a dot unless NOTLDQUERY is set.
- */
- if (!tried_as_is && (dots || !(_res.options & RES_NOTLDQUERY))) {
- ret = res_querydomain(name, NULL, class, type, answer, anslen);
- if (ret > 0)
- return (ret);
- }
-
- /* if we got here, we didn't satisfy the search.
- * if we did an initial full query, return that query's h_errno
- * (note that we wouldn't be here if that query had succeeded).
- * else if we ever got a nodata, send that back as the reason.
- * else send back meaningless h_errno, that being the one from
- * the last DNSRCH we did.
- */
- if (saved_herrno != -1)
- h_errno = saved_herrno;
- else if (got_nodata)
- h_errno = NO_DATA;
- else if (got_servfail)
- h_errno = TRY_AGAIN;
- return (-1);
-}
-
-/*
- * Perform a call on res_query on the concatenation of name and domain,
- * removing a trailing dot from name if domain is NULL.
- */
-int
-res_querydomain(
- const char *name,
- const char *domain,
- int class, /* class of query */
- int type, /* type of query */
- u_char *answer, /* buffer to put answer */
- int anslen /* size of answer */
- )
-{
- char nbuf[MAXDNAME];
- const char *longname = nbuf;
- int n, d;
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
- h_errno = NETDB_INTERNAL;
- return (-1);
- }
-#ifdef DEBUG
- if (_res.options & RES_DEBUG)
- printf(";; res_querydomain(%s, %s, %d, %d)\n",
- name, domain?domain:"<Nil>", class, type);
-#endif
- if (domain == NULL) {
- /*
- * Check for trailing '.';
- * copy without '.' if present.
- */
- n = (int)strlen(name);
- if (n >= MAXDNAME) {
- h_errno = NO_RECOVERY;
- return (-1);
- }
- n--;
- if (n >= 0 && name[n] == '.') {
- strncpy(nbuf, name, n);
- nbuf[n] = '\0';
- } else
- longname = name;
- } else {
- n = (int)strlen(name);
- d = (int)strlen(domain);
- if (n + d + 1 >= MAXDNAME) {
- h_errno = NO_RECOVERY;
- return (-1);
- }
- sprintf(nbuf, "%s.%s", name, domain);
- }
- return (res_query(longname, class, type, answer, anslen));
-}
-
-const char *
-hostalias(
- const char *name
- )
-{
- register char *cp1, *cp2;
- FILE *fp;
- char *file;
- char buf[BUFSIZ];
- static char abuf[MAXDNAME];
-
- if (_res.options & RES_NOALIASES)
- return (NULL);
-#ifdef _ORG_FREEBSD_
- if (issetugid())
- return (NULL);
-#endif
- file = getenv("HOSTALIASES");
- if (file == NULL || (fp = fopen(file, "r")) == NULL)
- return (NULL);
- setbuf(fp, NULL);
- buf[sizeof(buf) - 1] = '\0';
- while (fgets(buf, sizeof(buf), fp)) {
- for (cp1 = buf; *cp1 && !isspace(*cp1); ++cp1)
- ;
- if (!*cp1)
- break;
- *cp1 = '\0';
- if (!strcasecmp(buf, name)) {
- while (isspace(*++cp1))
- ;
- if (!*cp1)
- break;
- for (cp2 = cp1 + 1; *cp2 && !isspace(*cp2); ++cp2)
- ;
- abuf[sizeof(abuf) - 1] = *cp2 = '\0';
- strncpy(abuf, cp1, sizeof(abuf) - 1);
- fclose(fp);
- return (abuf);
- }
- }
- fclose(fp);
- return (NULL);
-}
diff --git a/StdLib/BsdSocketLib/res_send.c b/StdLib/BsdSocketLib/res_send.c
deleted file mode 100644
index d9ae46558e..0000000000
--- a/StdLib/BsdSocketLib/res_send.c
+++ /dev/null
@@ -1,933 +0,0 @@
-/*
- * Copyright (c) 1985, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by the University of
- * California, Berkeley, Intel Corporation, and its contributors.
- *
- * 4. Neither the name of University, Intel Corporation, or their respective
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
- * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/*
- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * Portions Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)res_send.c 8.1 (Berkeley) 6/4/93";
-static char orig_rcsid[] = "From: Id: res_send.c,v 8.20 1998/04/06 23:27:51 halley Exp $";
-static char rcsid[] = "$Id: res_send.c,v 1.1.1.1 2003/11/19 01:51:39 kyu3 Exp $";
-#endif /* LIBC_SCCS and not lint */
-
-/*
- * Send query to name server and wait for reply.
- */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/select.h>
-#include <sys/socket.h>
-#include <sys/time.h>
-#include <sys/uio.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#include <arpa/inet.h>
-
-#include <errno.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "res_config.h"
-
-#ifndef _ORG_FREEBSD_
-#define NOPOLL
-#endif
-
-#ifdef NOPOLL /* libc_r doesn't wrap poll yet() */
-#else
-#include <poll.h>
-static int use_poll = 1; /* adapt to poll() syscall availability */
- /* 0 = not present, 1 = try it, 2 = exists */
-#endif
-
-static int s = -1; /* socket used for communications */
-static int connected = 0; /* is the socket connected */
-static int vc = 0; /* is the socket a virtual circuit? */
-static res_send_qhook Qhook = NULL;
-static res_send_rhook Rhook = NULL;
-
-
-#define CAN_RECONNECT 1
-
-#ifndef DEBUG
-# define Dprint(cond, args) /*empty*/
-# define DprintQ(cond, args, query, size) /*empty*/
-# define Aerror(file, string, error, address) /*empty*/
-# define Perror(file, string, error) /*empty*/
-#else
-# define Dprint(cond, args) if (cond) {fprintf args;} else {}
-# define DprintQ(cond, args, query, size) if (cond) {\
- fprintf args;\
- __fp_nquery(query, size, stdout);\
- } else {}
-
-static void
-Aerror(
- FILE *file,
- char *string,
- int error,
- struct sockaddr_in address
- )
-{
- int save = errno;
-
- if (_res.options & RES_DEBUG) {
- fprintf(file, "res_send: %s ([%s].%u): %s\n",
- string,
- inet_ntoa(address.sin_addr),
- ntohs(address.sin_port),
- strerror(error));
- }
- errno = save;
-}
-
-
-static void
-Perror(
- FILE *file,
- char *string,
- int error
- )
-{
- int save = errno;
-
- if (_res.options & RES_DEBUG) {
- fprintf(file, "res_send: %s: %s\n",
- string, strerror(error));
- }
- errno = save;
-}
-#endif
-
-void
-res_send_setqhook(
- res_send_qhook hook
- )
-{
-
- Qhook = hook;
-}
-
-void
-res_send_setrhook(
- res_send_rhook hook
- )
-{
-
- Rhook = hook;
-}
-
-/* int
- * res_isourserver(ina)
- * looks up "ina" in _res.ns_addr_list[]
- * returns:
- * 0 : not found
- * >0 : found
- * author:
- * paul vixie, 29may94
- */
-int
-res_isourserver(
- const struct sockaddr_in *inp
- )
-{
- struct sockaddr_in ina;
- int ns, ret;
-
- ina = *inp;
- ret = 0;
- for (ns = 0; ns < _res.nscount; ns++) {
- const struct sockaddr_in *srv = &_res.nsaddr_list[ns];
-
- if (srv->sin_family == ina.sin_family &&
- srv->sin_port == ina.sin_port &&
- (srv->sin_addr.s_addr == INADDR_ANY ||
- srv->sin_addr.s_addr == ina.sin_addr.s_addr)) {
- ret++;
- break;
- }
- }
- return (ret);
-}
-
-/* int
- * res_nameinquery(name, type, class, buf, eom)
- * look for (name,type,class) in the query section of packet (buf,eom)
- * requires:
- * buf + HFIXEDSZ <= eom
- * returns:
- * -1 : format error
- * 0 : not found
- * >0 : found
- * author:
- * paul vixie, 29may94
- */
-int
-res_nameinquery(
- const char *name,
- int type,
- int class,
- const u_char *buf,
- const u_char *eom
- )
-{
- const u_char *cp = buf + HFIXEDSZ;
- int qdcount = ntohs(((HEADER*)buf)->qdcount);
-
- while (qdcount-- > 0) {
- char tname[MAXDNAME+1];
- int n, ttype, tclass;
-
- n = dn_expand(buf, eom, cp, tname, sizeof tname);
- if (n < 0)
- return (-1);
- cp += n;
- if (cp + 2 * INT16SZ > eom)
- return (-1);
- ttype = ns_get16(cp); cp += INT16SZ;
- tclass = ns_get16(cp); cp += INT16SZ;
- if (ttype == type &&
- tclass == class &&
- strcasecmp(tname, name) == 0)
- return (1);
- }
- return (0);
-}
-
-/* int
- * res_queriesmatch(buf1, eom1, buf2, eom2)
- * is there a 1:1 mapping of (name,type,class)
- * in (buf1,eom1) and (buf2,eom2)?
- * returns:
- * -1 : format error
- * 0 : not a 1:1 mapping
- * >0 : is a 1:1 mapping
- * author:
- * paul vixie, 29may94
- */
-int
-res_queriesmatch(
- const u_char *buf1,
- const u_char *eom1,
- const u_char *buf2,
- const u_char *eom2
- )
-{
- const u_char *cp = buf1 + HFIXEDSZ;
- int qdcount = ntohs(((HEADER*)buf1)->qdcount);
-
- if (buf1 + HFIXEDSZ > eom1 || buf2 + HFIXEDSZ > eom2)
- return (-1);
-
- /*
- * Only header section present in replies to
- * dynamic update packets.
- */
- if ( (((HEADER *)buf1)->opcode == ns_o_update) &&
- (((HEADER *)buf2)->opcode == ns_o_update) )
- return (1);
-
- if (qdcount != ntohs(((HEADER*)buf2)->qdcount))
- return (0);
- while (qdcount-- > 0) {
- char tname[MAXDNAME+1];
- int n, ttype, tclass;
-
- n = dn_expand(buf1, eom1, cp, tname, sizeof tname);
- if (n < 0)
- return (-1);
- cp += n;
- if (cp + 2 * INT16SZ > eom1)
- return (-1);
- ttype = ns_get16(cp); cp += INT16SZ;
- tclass = ns_get16(cp); cp += INT16SZ;
- if (!res_nameinquery(tname, ttype, tclass, buf2, eom2))
- return (0);
- }
- return (1);
-}
-
-int
-res_send(
- const u_char *buf,
- int buflen,
- u_char *ans,
- int anssiz
- )
-{
- HEADER *hp = (HEADER *) buf;
- HEADER *anhp = (HEADER *) ans;
- int gotsomewhere, connreset, terrno, try, v_circuit, resplen, ns;
- ssize_t n;
- u_int32_t badns; /* XXX NSMAX can't exceed #/bits in this variable */
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
- /* errno should have been set by res_init() in this case. */
- return (-1);
- }
- if (anssiz < HFIXEDSZ) {
- errno = EINVAL;
- return (-1);
- }
- DprintQ((_res.options & RES_DEBUG) || (_res.pfcode & RES_PRF_QUERY),
- (stdout, ";; res_send()\n"), buf, buflen);
- v_circuit = (_res.options & RES_USEVC) || buflen > PACKETSZ;
- gotsomewhere = 0;
- connreset = 0;
- terrno = ETIMEDOUT;
- badns = 0;
-
- /*
- * Send request, RETRY times, or until successful
- */
- for (try = 0; try < _res.retry; try++) {
- for (ns = 0; ns < _res.nscount; ns++) {
- struct sockaddr_in *nsap = &_res.nsaddr_list[ns];
- same_ns:
- if (badns & (1 << ns)) {
- res_close();
- goto next_ns;
- }
-
- if (Qhook) {
- int done = 0, loops = 0;
-
- do {
- res_sendhookact act;
-
- act = (*Qhook)(&nsap, &buf, &buflen,
- ans, anssiz, &resplen);
- switch (act) {
- case res_goahead:
- done = 1;
- break;
- case res_nextns:
- res_close();
- goto next_ns;
- case res_done:
- return (resplen);
- case res_modified:
- /* give the hook another try */
- if (++loops < 42) /*doug adams*/
- break;
- /*FALLTHROUGH*/
- case res_error:
- /*FALLTHROUGH*/
- default:
- return (-1);
- }
- } while (!done);
- }
-
- Dprint(_res.options & RES_DEBUG,
- (stdout, ";; Querying server (# %d) address = %s\n",
- ns + 1, inet_ntoa(nsap->sin_addr)));
-
- if (v_circuit) {
- int truncated;
- struct iovec iov[2];
- u_short len;
- u_char *cp;
-
- /*
- * Use virtual circuit;
- * at most one attempt per server.
- */
- try = _res.retry;
- truncated = 0;
- if (s < 0 || !vc || hp->opcode == ns_o_update) {
- if (s >= 0)
- res_close();
-
- s = socket(PF_INET, SOCK_STREAM, 0);
- if (s < 0) {
- terrno = errno;
- Perror(stderr, "socket(vc)", errno);
- return (-1);
- }
- errno = 0;
- nsap->sin_len = sizeof ( *nsap );
- if (connect(s, (struct sockaddr *)nsap,
- sizeof *nsap) < 0) {
- terrno = errno;
- Aerror(stderr, "connect/vc",
- errno, *nsap);
- badns |= (1 << ns);
- res_close();
- goto next_ns;
- }
- vc = 1;
- }
- /*
- * Send length & message
- */
- putshort((u_short)buflen, (u_char*)&len);
- iov[0].iov_base = (caddr_t)&len;
- iov[0].iov_len = INT16SZ;
- iov[1].iov_base = (caddr_t)buf;
- iov[1].iov_len = buflen;
- if (writev(s, iov, 2) != (INT16SZ + buflen)) {
- terrno = errno;
- Perror(stderr, "write failed", errno);
- badns |= (1 << ns);
- res_close();
- goto next_ns;
- }
- /*
- * Receive length & response
- */
-read_len:
- cp = ans;
- len = INT16SZ;
- while ((n = read(s, (char *)cp, (int)len)) > 0) {
- cp += n;
- len = (u_short)( len - n );
- if (len <= 0)
- break;
- }
- if (n <= 0) {
- terrno = errno;
- Perror(stderr, "read failed", errno);
- res_close();
- /*
- * A long running process might get its TCP
- * connection reset if the remote server was
- * restarted. Requery the server instead of
- * trying a new one. When there is only one
- * server, this means that a query might work
- * instead of failing. We only allow one reset
- * per query to prevent looping.
- */
- if (terrno == ECONNRESET && !connreset) {
- connreset = 1;
- res_close();
- goto same_ns;
- }
- res_close();
- goto next_ns;
- }
- resplen = ns_get16(ans);
- if (resplen > anssiz) {
- Dprint(_res.options & RES_DEBUG,
- (stdout, ";; response truncated\n")
- );
- truncated = 1;
- len = (ushort)anssiz;
- } else
- len = (ushort)resplen;
- if (len < HFIXEDSZ) {
- /*
- * Undersized message.
- */
- Dprint(_res.options & RES_DEBUG,
- (stdout, ";; undersized: %d\n", len));
- terrno = EMSGSIZE;
- badns |= (1 << ns);
- res_close();
- goto next_ns;
- }
- cp = ans;
- while (len != 0 &&
- (n = read(s, (char *)cp, (int)len)) > 0) {
- cp += n;
- len = (u_short)( len - n );
- }
- if (n <= 0) {
- terrno = errno;
- Perror(stderr, "read(vc)", errno);
- res_close();
- goto next_ns;
- }
- if (truncated) {
- /*
- * Flush rest of answer
- * so connection stays in synch.
- */
- anhp->tc = 1;
- len = (ushort)( resplen - anssiz );
- while (len != 0) {
- char junk[PACKETSZ];
-
- n = (len > sizeof(junk)
- ? sizeof(junk)
- : len);
- if ((n = read(s, junk, n)) > 0)
- len = (u_short)( len - n );
- else
- break;
- }
- }
- /*
- * The calling applicating has bailed out of
- * a previous call and failed to arrange to have
- * the circuit closed or the server has got
- * itself confused. Anyway drop the packet and
- * wait for the correct one.
- */
- if (hp->id != anhp->id) {
- DprintQ((_res.options & RES_DEBUG) ||
- (_res.pfcode & RES_PRF_REPLY),
- (stdout, ";; old answer (unexpected):\n"),
- ans, (resplen>anssiz)?anssiz:resplen);
- goto read_len;
- }
- } else {
- /*
- * Use datagrams.
- */
-#ifndef NOPOLL
- struct pollfd pfd;
- int msec;
-#endif
- struct timeval timeout;
- fd_set dsmask, *dsmaskp;
- int dsmasklen;
- struct sockaddr_in from;
- int fromlen;
-
- if ((s < 0) || vc) {
- if (vc)
- res_close();
- s = socket(PF_INET, SOCK_DGRAM, 0);
- if (s < 0) {
-#ifndef CAN_RECONNECT
- bad_dg_sock:
-#endif
- terrno = errno;
- Perror(stderr, "socket(dg)", errno);
- return (-1);
- }
- connected = 0;
- }
-#ifndef CANNOT_CONNECT_DGRAM
- /*
- * On a 4.3BSD+ machine (client and server,
- * actually), sending to a nameserver datagram
- * port with no nameserver will cause an
- * ICMP port unreachable message to be returned.
- * If our datagram socket is "connected" to the
- * server, we get an ECONNREFUSED error on the next
- * socket operation, and select returns if the
- * error message is received. We can thus detect
- * the absence of a nameserver without timing out.
- * If we have sent queries to at least two servers,
- * however, we don't want to remain connected,
- * as we wish to receive answers from the first
- * server to respond.
- */
- if (_res.nscount == 1 || (try == 0 && ns == 0)) {
- /*
- * Connect only if we are sure we won't
- * receive a response from another server.
- */
- if (!connected) {
- nsap->sin_len = sizeof ( *nsap );
- if (connect(s, (struct sockaddr *)nsap,
- sizeof *nsap
- ) < 0) {
- Aerror(stderr,
- "connect(dg)",
- errno, *nsap);
- badns |= (1 << ns);
- res_close();
- goto next_ns;
- }
- connected = 1;
- }
- if (send(s, (char*)buf, buflen, 0) != buflen) {
- Perror(stderr, "send", errno);
- badns |= (1 << ns);
- res_close();
- goto next_ns;
- }
- } else {
- /*
- * Disconnect if we want to listen
- * for responses from more than one server.
- */
- if (connected) {
-#ifdef CAN_RECONNECT
- struct sockaddr_in no_addr;
-
- no_addr.sin_family = AF_INET;
- no_addr.sin_addr.s_addr = INADDR_ANY;
- no_addr.sin_port = 0;
- (void) connect(s,
- (struct sockaddr *)
- &no_addr,
- sizeof no_addr);
-#else
- int s1 = socket(PF_INET, SOCK_DGRAM,0);
- if (s1 < 0)
- goto bad_dg_sock;
- (void) dup2(s1, s);
- (void) close(s1);
- Dprint(_res.options & RES_DEBUG,
- (stdout, ";; new DG socket\n"))
-#endif /* CAN_RECONNECT */
- connected = 0;
- errno = 0;
- }
-#endif /* !CANNOT_CONNECT_DGRAM */
- if (sendto(s, (char*)buf, buflen, 0,
- (struct sockaddr *)nsap,
- sizeof *nsap)
- != buflen) {
- Aerror(stderr, "sendto", errno, *nsap);
- badns |= (1 << ns);
- res_close();
- goto next_ns;
- }
-#ifndef CANNOT_CONNECT_DGRAM
- }
-#endif /* !CANNOT_CONNECT_DGRAM */
-
- /*
- * Wait for reply
- */
-#ifndef NOPOLL
- othersyscall:
- if (use_poll) {
- msec = (_res.retrans << try) * 1000;
- if (try > 0)
- msec /= _res.nscount;
- if (msec <= 0)
- msec = 1000;
- } else {
-#endif
- timeout.tv_sec = (_res.retrans << try);
- if (try > 0)
- timeout.tv_sec /= _res.nscount;
- if ((long) timeout.tv_sec <= 0)
- timeout.tv_sec = 1;
- timeout.tv_usec = 0;
-#ifndef NOPOLL
- }
-#endif
- wait:
- if (s < 0) {
- Perror(stderr, "s out-of-bounds", EMFILE);
- res_close();
- goto next_ns;
- }
-#ifndef NOPOLL
- if (use_poll) {
- struct sigaction sa, osa;
- int sigsys_installed = 0;
-
- pfd.fd = s;
- pfd.events = POLLIN;
- if (use_poll == 1) {
- bzero(&sa, sizeof(sa));
- sa.sa_handler = SIG_IGN;
- if (sigaction(SIGSYS, &sa, &osa) >= 0)
- sigsys_installed = 1;
- }
- n = poll(&pfd, 1, msec);
- if (sigsys_installed == 1) {
- int oerrno = errno;
- sigaction(SIGSYS, &osa, NULL);
- errno = oerrno;
- }
- /* XXX why does nosys() return EINVAL? */
- if (n < 0 && (errno == ENOSYS ||
- errno == EINVAL)) {
- use_poll = 0;
- goto othersyscall;
- } else if (use_poll == 1)
- use_poll = 2;
- if (n < 0) {
- if (errno == EINTR)
- goto wait;
- Perror(stderr, "poll", errno);
- res_close();
- goto next_ns;
- }
- } else {
-#endif
- dsmasklen = howmany(s + 1, NFDBITS) *
- sizeof(fd_mask);
- if (dsmasklen > sizeof(fd_set)) {
- dsmaskp = (fd_set *)malloc(dsmasklen);
- if (dsmaskp == NULL) {
- res_close();
- goto next_ns;
- }
- } else
- dsmaskp = &dsmask;
- /* only zero what we need */
- memset((char *)dsmaskp, 0, dsmasklen);
- FD_SET(s, dsmaskp);
- n = select(s + 1, dsmaskp, (fd_set *)NULL,
- (fd_set *)NULL, &timeout);
- if (dsmaskp != &dsmask)
- free(dsmaskp);
- if (n < 0) {
- if (errno == EINTR)
- goto wait;
- Perror(stderr, "select", errno);
- res_close();
- goto next_ns;
- }
-#ifndef NOPOLL
- }
-#endif
-
- if (n == 0) {
- /*
- * timeout
- */
- Dprint(_res.options & RES_DEBUG,
- (stdout, ";; timeout\n"));
- gotsomewhere = 1;
- res_close();
- goto next_ns;
- }
- errno = 0;
- fromlen = sizeof(struct sockaddr_in);
- resplen = (int)recvfrom(s, (char*)ans, anssiz, 0,
- (struct sockaddr *)&from, (socklen_t *)&fromlen);
- if (resplen <= 0) {
- Perror(stderr, "recvfrom", errno);
- res_close();
- goto next_ns;
- }
- gotsomewhere = 1;
- if (resplen < HFIXEDSZ) {
- /*
- * Undersized message.
- */
- Dprint(_res.options & RES_DEBUG,
- (stdout, ";; undersized: %d\n",
- resplen));
- terrno = EMSGSIZE;
- badns |= (1 << ns);
- res_close();
- goto next_ns;
- }
- if (hp->id != anhp->id) {
- /*
- * response from old query, ignore it.
- * XXX - potential security hazard could
- * be detected here.
- */
- DprintQ((_res.options & RES_DEBUG) ||
- (_res.pfcode & RES_PRF_REPLY),
- (stdout, ";; old answer:\n"),
- ans, (resplen>anssiz)?anssiz:resplen);
- goto wait;
- }
-#ifdef CHECK_SRVR_ADDR
- if (!(_res.options & RES_INSECURE1) &&
- !res_isourserver(&from)) {
- /*
- * response from wrong server? ignore it.
- * XXX - potential security hazard could
- * be detected here.
- */
- DprintQ((_res.options & RES_DEBUG) ||
- (_res.pfcode & RES_PRF_REPLY),
- (stdout, ";; not our server:\n"),
- ans, (resplen>anssiz)?anssiz:resplen);
- goto wait;
- }
-#endif
- if (!(_res.options & RES_INSECURE2) &&
- !res_queriesmatch(buf, buf + buflen,
- ans, ans + anssiz)) {
- /*
- * response contains wrong query? ignore it.
- * XXX - potential security hazard could
- * be detected here.
- */
- DprintQ((_res.options & RES_DEBUG) ||
- (_res.pfcode & RES_PRF_REPLY),
- (stdout, ";; wrong query name:\n"),
- ans, (resplen>anssiz)?anssiz:resplen);
- goto wait;
- }
- if (anhp->rcode == SERVFAIL ||
- anhp->rcode == NOTIMP ||
- anhp->rcode == REFUSED) {
- DprintQ(_res.options & RES_DEBUG,
- (stdout, "server rejected query:\n"),
- ans, (resplen>anssiz)?anssiz:resplen);
- badns |= (1 << ns);
- res_close();
- /* don't retry if called from dig */
- if (!_res.pfcode)
- goto next_ns;
- }
- if (!(_res.options & RES_IGNTC) && anhp->tc) {
- /*
- * get rest of answer;
- * use TCP with same server.
- */
- Dprint(_res.options & RES_DEBUG,
- (stdout, ";; truncated answer\n"));
- v_circuit = 1;
- res_close();
- goto same_ns;
- }
- } /*if vc/dg*/
- Dprint((_res.options & RES_DEBUG) ||
- ((_res.pfcode & RES_PRF_REPLY) &&
- (_res.pfcode & RES_PRF_HEAD1)),
- (stdout, ";; got answer:\n"));
- if((_res.options & RES_DEBUG) ||
- (_res.pfcode & RES_PRF_REPLY)) {
- __fp_nquery(ans, (resplen>anssiz)?anssiz:resplen, stdout);
- }
- /*
- * If using virtual circuits, we assume that the first server
- * is preferred over the rest (i.e. it is on the local
- * machine) and only keep that one open.
- * If we have temporarily opened a virtual circuit,
- * or if we haven't been asked to keep a socket open,
- * close the socket.
- */
- if ((v_circuit && (!(_res.options & RES_USEVC) || ns != 0)) ||
- !(_res.options & RES_STAYOPEN)) {
- res_close();
- }
- if (Rhook) {
- int done = 0, loops = 0;
-
- do {
- res_sendhookact act;
-
- act = (*Rhook)(nsap, buf, buflen,
- ans, anssiz, &resplen);
- switch (act) {
- case res_goahead:
- case res_done:
- done = 1;
- break;
- case res_nextns:
- res_close();
- goto next_ns;
- case res_modified:
- /* give the hook another try */
- if (++loops < 42) /*doug adams*/
- break;
- /*FALLTHROUGH*/
- case res_error:
- /*FALLTHROUGH*/
- default:
- return (-1);
- }
- } while (!done);
-
- }
- return (resplen);
- next_ns: ;
- } /*foreach ns*/
- } /*foreach retry*/
- res_close();
- if (!v_circuit) {
- if (!gotsomewhere)
- errno = ECONNREFUSED; /* no nameservers found */
- else
- errno = ETIMEDOUT; /* no answer obtained */
- } else
- errno = terrno;
- return (-1);
-}
-
-/*
- * This routine is for closing the socket if a virtual circuit is used and
- * the program wants to close it. This provides support for endhostent()
- * which expects to close the socket.
- *
- * This routine is not expected to be user visible.
- */
-void
-res_close()
-{
- if (s >= 0) {
- (void) close(s);
- s = -1;
- connected = 0;
- vc = 0;
- }
-}
diff --git a/StdLib/BsdSocketLib/res_update.c b/StdLib/BsdSocketLib/res_update.c
deleted file mode 100644
index be0f531092..0000000000
--- a/StdLib/BsdSocketLib/res_update.c
+++ /dev/null
@@ -1,561 +0,0 @@
-/** @file
- Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-/*
- * Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and
- * its contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/*
- * Based on the Dynamic DNS reference implementation by Viraj Bais
- * <viraj_bais@ccm.fm.intel.com>
- */
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/time.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-#include <errno.h>
-#include <limits.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/*
- * Separate a linked list of records into groups so that all records
- * in a group will belong to a single zone on the nameserver.
- * Create a dynamic update packet for each zone and send it to the
- * nameservers for that zone, and await answer.
- * Abort if error occurs in updating any zone.
- * Return the number of zones updated on success, < 0 on error.
- *
- * On error, caller must deal with the unsynchronized zones
- * eg. an A record might have been successfully added to the forward
- * zone but the corresponding PTR record would be missing if error
- * was encountered while updating the reverse zone.
- */
-
-#define NSMAX 16
-
-struct ns1 {
- char nsname[MAXDNAME];
- struct in_addr nsaddr1;
-};
-
-struct zonegrp {
- char z_origin[MAXDNAME];
- int16_t z_class;
- char z_soardata[MAXDNAME + 5 * INT32SZ];
- struct ns1 z_ns[NSMAX];
- int z_nscount;
- ns_updrec * z_rr;
- struct zonegrp *z_next;
-};
-
-
-int
-res_update(ns_updrec *rrecp_in) {
- ns_updrec *rrecp, *tmprrecp;
- u_char buf[PACKETSZ], answer[PACKETSZ], packet[2*PACKETSZ];
- char name[MAXDNAME], zname[MAXDNAME], primary[MAXDNAME],
- mailaddr[MAXDNAME];
- u_char soardata[2*MAXCDNAME+5*INT32SZ];
- char *dname, *svdname, *cp1, *target;
- u_char *cp, *eom;
- HEADER *hp = (HEADER *) answer;
- struct zonegrp *zptr = NULL, *tmpzptr, *prevzptr, *zgrp_start = NULL;
- int i, j, k = 0, n, ancount, nscount, arcount, rcode, rdatasize,
- newgroup, done, myzone, seen_before, numzones = 0;
- u_int16_t dlen, class, qclass, type, qtype;
- u_int32_t ttl;
-
- if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
- h_errno = NETDB_INTERNAL;
- return (-1);
- }
-
- for (rrecp = rrecp_in; rrecp; rrecp = rrecp->r_next) {
- dname = rrecp->r_dname;
- n = (int)strlen(dname);
- if (dname[n-1] == '.')
- dname[n-1] = '\0';
- qtype = T_SOA;
- qclass = rrecp->r_class;
- done = 0;
- seen_before = 0;
-
- while (!done && dname) {
- if (qtype == T_SOA) {
- for (tmpzptr = zgrp_start;
- tmpzptr && !seen_before;
- tmpzptr = tmpzptr->z_next) {
- if (strcasecmp(dname,
- tmpzptr->z_origin) == 0 &&
- tmpzptr->z_class == qclass)
- seen_before++;
- for (tmprrecp = tmpzptr->z_rr;
- tmprrecp && !seen_before;
- tmprrecp = tmprrecp->r_grpnext)
- if (strcasecmp(dname, tmprrecp->r_dname) == 0
- && tmprrecp->r_class == qclass) {
- seen_before++;
- break;
- }
- if (seen_before) {
- /*
- * Append to the end of
- * current group.
- */
- for (tmprrecp = tmpzptr->z_rr;
- tmprrecp->r_grpnext;
- tmprrecp = tmprrecp->r_grpnext)
- (void)NULL;
- tmprrecp->r_grpnext = rrecp;
- rrecp->r_grpnext = NULL;
- done = 1;
- break;
- }
- }
- } else if (qtype == T_A) {
- for (tmpzptr = zgrp_start;
- tmpzptr && !done;
- tmpzptr = tmpzptr->z_next)
- for (i = 0; i < tmpzptr->z_nscount; i++)
- if (tmpzptr->z_class == qclass &&
- strcasecmp(tmpzptr->z_ns[i].nsname,
- dname) == 0 &&
- tmpzptr->z_ns[i].nsaddr1.s_addr != 0) {
- zptr->z_ns[k].nsaddr1.s_addr =
- tmpzptr->z_ns[i].nsaddr1.s_addr;
- done = 1;
- break;
- }
- }
- if (done)
- break;
- n = res_mkquery(QUERY, dname, qclass, qtype, NULL,
- 0, NULL, buf, sizeof buf);
- if (n <= 0) {
- fprintf(stderr, "res_update: mkquery failed\n");
- return (n);
- }
- n = res_send(buf, n, answer, sizeof answer);
- if (n < 0) {
- fprintf(stderr, "res_update: send error for %s\n",
- rrecp->r_dname);
- return (n);
- }
- if (n < HFIXEDSZ)
- return (-1);
- ancount = ntohs(hp->ancount);
- nscount = ntohs(hp->nscount);
- arcount = ntohs(hp->arcount);
- rcode = hp->rcode;
- cp = answer + HFIXEDSZ;
- eom = answer + n;
- /* skip the question section */
- n = dn_skipname(cp, eom);
- if (n < 0 || cp + n + 2 * INT16SZ > eom)
- return (-1);
- cp += n + 2 * INT16SZ;
-
- if (qtype == T_SOA) {
- if (ancount == 0 && nscount == 0 && arcount == 0) {
- /*
- * if (rcode == NOERROR) then the dname exists but
- * has no soa record associated with it.
- * if (rcode == NXDOMAIN) then the dname does not
- * exist and the server is replying out of NCACHE.
- * in either case, proceed with the next try
- */
- dname = strchr(dname, '.');
- if (dname != NULL)
- dname++;
- continue;
- } else if ((rcode == NOERROR || rcode == NXDOMAIN) &&
- ancount == 0 &&
- nscount == 1 && arcount == 0) {
- /*
- * name/data does not exist, soa record supplied in the
- * authority section
- */
- /* authority section must contain the soa record */
- if ((n = dn_expand(answer, eom, cp, zname,
- sizeof zname)) < 0)
- return (n);
- cp += n;
- if (cp + 2 * INT16SZ > eom)
- return (-1);
- GETSHORT(type, cp);
- GETSHORT(class, cp);
- if (type != T_SOA || class != qclass) {
- fprintf(stderr, "unknown answer\n");
- return (-1);
- }
- myzone = 0;
- svdname = dname;
- while (dname)
- if (strcasecmp(dname, zname) == 0) {
- myzone = 1;
- break;
- } else if ((dname = strchr(dname, '.')) != NULL)
- dname++;
- if (!myzone) {
- dname = strchr(svdname, '.');
- if (dname != NULL)
- dname++;
- continue;
- }
- nscount = 0;
- /* fallthrough */
- } else if (rcode == NOERROR && ancount == 1) {
- /*
- * found the zone name
- * new servers will supply NS records for the zone
- * in authority section and A records for those
- * nameservers in the additional section
- * older servers have to be explicitly queried for
- * NS records for the zone
- */
- /* answer section must contain the soa record */
- if ((n = dn_expand(answer, eom, cp, zname,
- sizeof zname)) < 0)
- return (n);
- else
- cp += n;
- if (cp + 2 * INT16SZ > eom)
- return (-1);
- GETSHORT(type, cp);
- GETSHORT(class, cp);
- if (type == T_CNAME) {
- dname = strchr(dname, '.');
- if (dname != NULL)
- dname++;
- continue;
- }
- if (strcasecmp(dname, zname) != 0 ||
- type != T_SOA ||
- class != rrecp->r_class) {
- fprintf(stderr, "unknown answer\n");
- return (-1);
- }
- /* FALLTHROUGH */
- } else {
- fprintf(stderr,
- "unknown response: ans=%d, auth=%d, add=%d, rcode=%d\n",
- ancount, nscount, arcount, hp->rcode);
- return (-1);
- }
- if (cp + INT32SZ + INT16SZ > eom)
- return (-1);
- /* continue processing the soa record */
- GETLONG(ttl, cp);
- GETSHORT(dlen, cp);
- if (cp + dlen > eom)
- return (-1);
- newgroup = 1;
- zptr = zgrp_start;
- prevzptr = NULL;
- while (zptr) {
- if (strcasecmp(zname, zptr->z_origin) == 0 &&
- type == T_SOA && class == qclass) {
- newgroup = 0;
- break;
- }
- prevzptr = zptr;
- zptr = zptr->z_next;
- }
- if (!newgroup) {
- for (tmprrecp = zptr->z_rr;
- tmprrecp->r_grpnext;
- tmprrecp = tmprrecp->r_grpnext)
- ;
- tmprrecp->r_grpnext = rrecp;
- rrecp->r_grpnext = NULL;
- done = 1;
- cp += dlen;
- break;
- } else {
- if ((n = dn_expand(answer, eom, cp, primary,
- sizeof primary)) < 0)
- return (n);
- cp += n;
- /*
- * We don't have to bounds check here because the
- * next use of 'cp' is in dn_expand().
- */
- cp1 = (char *)soardata;
- strcpy(cp1, primary);
- cp1 += strlen(cp1) + 1;
- if ((n = dn_expand(answer, eom, cp, mailaddr,
- sizeof mailaddr)) < 0)
- return (n);
- cp += n;
- strcpy(cp1, mailaddr);
- cp1 += strlen(cp1) + 1;
- if (cp + 5*INT32SZ > eom)
- return (-1);
- memcpy(cp1, cp, 5*INT32SZ);
- cp += 5*INT32SZ;
- cp1 += 5*INT32SZ;
- rdatasize = (int)((u_char *)cp1 - soardata);
- zptr = calloc(1, sizeof(struct zonegrp));
- if (zptr == NULL)
- return (-1);
- if (zgrp_start == NULL)
- zgrp_start = zptr;
- else
- prevzptr->z_next = zptr;
- zptr->z_rr = rrecp;
- rrecp->r_grpnext = NULL;
- strcpy(zptr->z_origin, zname);
- zptr->z_class = class;
- memcpy(zptr->z_soardata, soardata, rdatasize);
- /* fallthrough to process NS and A records */
- }
- } else if (qtype == T_NS) {
- if (rcode == NOERROR && ancount > 0) {
- strcpy(zname, dname);
- for (zptr = zgrp_start; zptr; zptr = zptr->z_next) {
- if (strcasecmp(zname, zptr->z_origin) == 0)
- break;
- }
- if (zptr == NULL)
- /* should not happen */
- return (-1);
- if (nscount > 0) {
- /*
- * answer and authority sections contain
- * the same information, skip answer section
- */
- for (j = 0; j < ancount; j++) {
- n = dn_skipname(cp, eom);
- if (n < 0)
- return (-1);
- n += 2*INT16SZ + INT32SZ;
- if (cp + n + INT16SZ > eom)
- return (-1);
- cp += n;
- GETSHORT(dlen, cp);
- cp += dlen;
- }
- } else
- nscount = ancount;
- /* fallthrough to process NS and A records */
- } else {
- fprintf(stderr, "cannot determine nameservers for %s:\
-ans=%d, auth=%d, add=%d, rcode=%d\n",
- dname, ancount, nscount, arcount, hp->rcode);
- return (-1);
- }
- } else if (qtype == T_A) {
- if (rcode == NOERROR && ancount > 0) {
- arcount = ancount;
- ancount = nscount = 0;
- /* fallthrough to process A records */
- } else {
- fprintf(stderr, "cannot determine address for %s:\
-ans=%d, auth=%d, add=%d, rcode=%d\n",
- dname, ancount, nscount, arcount, hp->rcode);
- return (-1);
- }
- }
- /* process NS records for the zone */
- j = 0;
- for (i = 0; i < nscount; i++) {
- if ((n = dn_expand(answer, eom, cp, name,
- sizeof name)) < 0)
- return (n);
- cp += n;
- if (cp + 3 * INT16SZ + INT32SZ > eom)
- return (-1);
- GETSHORT(type, cp);
- GETSHORT(class, cp);
- GETLONG(ttl, cp);
- GETSHORT(dlen, cp);
- if (cp + dlen > eom)
- return (-1);
- if (strcasecmp(name, zname) == 0 &&
- type == T_NS && class == qclass) {
- if ((n = dn_expand(answer, eom, cp,
- name, sizeof name)) < 0)
- return (n);
- target = zptr->z_ns[j++].nsname;
- strcpy(target, name);
- }
- cp += dlen;
- }
- if (zptr->z_nscount == 0)
- zptr->z_nscount = j;
- /* get addresses for the nameservers */
- for (i = 0; i < arcount; i++) {
- if ((n = dn_expand(answer, eom, cp, name,
- sizeof name)) < 0)
- return (n);
- cp += n;
- if (cp + 3 * INT16SZ + INT32SZ > eom)
- return (-1);
- GETSHORT(type, cp);
- GETSHORT(class, cp);
- GETLONG(ttl, cp);
- GETSHORT(dlen, cp);
- if (cp + dlen > eom)
- return (-1);
- if (type == T_A && dlen == INT32SZ && class == qclass) {
- for (j = 0; j < zptr->z_nscount; j++)
- if (strcasecmp(name, zptr->z_ns[j].nsname) == 0) {
- memcpy(&zptr->z_ns[j].nsaddr1.s_addr, cp,
- INT32SZ);
- break;
- }
- }
- cp += dlen;
- }
- if (zptr->z_nscount == 0) {
- dname = zname;
- qtype = T_NS;
- continue;
- }
- done = 1;
- for (k = 0; k < zptr->z_nscount; k++)
- if (zptr->z_ns[k].nsaddr1.s_addr == 0) {
- done = 0;
- dname = zptr->z_ns[k].nsname;
- qtype = T_A;
- }
- } /* while */
- }
- --ttl; // Suppress the "Set but not used" warning/error for ttl.
-
- _res.options |= RES_DEBUG;
- for (zptr = zgrp_start; zptr; zptr = zptr->z_next) {
-
- /* append zone section */
- rrecp = res_mkupdrec(ns_s_zn, zptr->z_origin,
- zptr->z_class, ns_t_soa, 0);
- if (rrecp == NULL) {
- fprintf(stderr, "saverrec error\n");
- fflush(stderr);
- return (-1);
- }
- rrecp->r_grpnext = zptr->z_rr;
- zptr->z_rr = rrecp;
-
- n = res_mkupdate(zptr->z_rr, packet, sizeof packet);
- if (n < 0) {
- fprintf(stderr, "res_mkupdate error\n");
- fflush(stderr);
- return (-1);
- } else
- fprintf(stdout, "res_mkupdate: packet size = %d\n", n);
-
- /* Override the list of NS records from res_init() with
- * the authoritative nameservers for the zone being updated.
- * Sort primary to be the first in the list of nameservers.
- */
- for (i = 0; i < zptr->z_nscount; i++) {
- if (strcasecmp(zptr->z_ns[i].nsname,
- zptr->z_soardata) == 0) {
- struct in_addr tmpaddr;
-
- if (i != 0) {
- strcpy(zptr->z_ns[i].nsname,
- zptr->z_ns[0].nsname);
- strcpy(zptr->z_ns[0].nsname,
- zptr->z_soardata);
- tmpaddr = zptr->z_ns[i].nsaddr1;
- zptr->z_ns[i].nsaddr1 =
- zptr->z_ns[0].nsaddr1;
- zptr->z_ns[0].nsaddr1 = tmpaddr;
- }
- break;
- }
- }
- for (i = 0; i < MAXNS; i++) {
- _res.nsaddr_list[i].sin_addr = zptr->z_ns[i].nsaddr1;
- _res.nsaddr_list[i].sin_family = AF_INET;
- _res.nsaddr_list[i].sin_port = htons(NAMESERVER_PORT);
- }
- _res.nscount = (zptr->z_nscount < MAXNS) ?
- zptr->z_nscount : MAXNS;
- n = res_send(packet, n, answer, sizeof(answer));
- if (n < 0) {
- fprintf(stderr, "res_send: send error, n=%d\n", n);
- break;
- } else
- numzones++;
- }
-
- /* free malloc'ed memory */
- while(zgrp_start) {
- zptr = zgrp_start;
- zgrp_start = zgrp_start->z_next;
- res_freeupdrec(zptr->z_rr); /* Zone section we allocated. */
- free((char *)zptr);
- }
-
- return (numzones);
-}
diff --git a/StdLib/BsdSocketLib/send.c b/StdLib/BsdSocketLib/send.c
deleted file mode 100644
index 439d8081c1..0000000000
--- a/StdLib/BsdSocketLib/send.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/** @file
- Implement the send API.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <SocketInternals.h>
-
-
-/**
- Send data using a network connection.
-
- The send routine queues data to the network for transmission.
- This routine is typically used for SOCK_STREAM sockets where the target
- system was specified in the ::connect call.
-
- The
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/send.html">POSIX</a>
- documentation is available online.
-
- @param [in] s Socket file descriptor returned from ::socket.
-
- @param [in] buffer Address of a buffer containing the data to send.
-
- @param [in] length Length of the buffer in bytes.
-
- @param [in] flags Message control flags
-
- @return This routine returns the number of data bytes that were
- sent and -1 when an error occurs. In the case of
- an error, ::errno contains more details.
-
- **/
-ssize_t
-send (
- int s,
- CONST void * buffer,
- size_t length,
- int flags
- )
-{
- //
- // Send the data
- //
- return sendto ( s, buffer, length, flags, NULL, 0 );
-}
diff --git a/StdLib/BsdSocketLib/sendto.c b/StdLib/BsdSocketLib/sendto.c
deleted file mode 100644
index 2fb7737c30..0000000000
--- a/StdLib/BsdSocketLib/sendto.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/** @file
- Implement the sendto API.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <SocketInternals.h>
-
-
-/**
- Send data using a network connection.
-
- The sendto routine queues data to the network for transmission.
- This routine is typically used for SOCK_DGRAM sockets that are shared
- between multiple machine where it is required to specify the target
- system address when sending the data.
-
- The
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/send.html">POSIX</a>
- documentation is available online.
-
- @param [in] s Socket file descriptor returned from ::socket.
-
- @param [in] buffer Address of a buffer containing the data to send.
-
- @param [in] length Length of the buffer in bytes.
-
- @param [in] flags Message control flags
-
- @param [in] to Remote system address
-
- @param [in] tolen Length of remote system address structure
-
- @return This routine returns the number of data bytes that were
- sent and -1 when an error occurs. In the case of
- an error, ::errno contains more details.
-
- **/
-ssize_t
-sendto (
- int s,
- const void * buffer,
- size_t length,
- int flags,
- const struct sockaddr * to,
- socklen_t tolen
- )
-{
- BOOLEAN bBlocking;
- ssize_t LengthInBytes;
- CONST UINT8 * pData;
- struct __filedes * pDescriptor;
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
- EFI_STATUS Status;
-
- //
- // Assume failure
- //
- LengthInBytes = -1;
-
- //
- // Locate the context for this socket
- //
- pSocketProtocol = BslFdToSocketProtocol ( s,
- &pDescriptor,
- &errno );
- if ( NULL != pSocketProtocol ) {
- //
- // Determine if the operation is blocking
- //
- bBlocking = (BOOLEAN)( 0 == ( pDescriptor->Oflags & O_NONBLOCK ));
-
- //
- // Send the data using the socket
- //
- pData = buffer;
- do {
- errno = 0;
- Status = pSocketProtocol->pfnTransmit ( pSocketProtocol,
- flags,
- length,
- pData,
- (size_t *)&LengthInBytes,
- to,
- tolen,
- &errno );
- if ( EFI_ERROR ( Status ) && ( EFI_NOT_READY != Status )) {
- LengthInBytes = -1;
- break;
- }
-
- //
- // Account for the data sent
- //
- pData += LengthInBytes;
- length -= LengthInBytes;
- } while (( 0 != length ) && ( EFI_NOT_READY == Status ) && bBlocking );
- }
-
- //
- // Return the number of data bytes sent, -1 for errors
- //
- return (INT32)LengthInBytes;
-}
diff --git a/StdLib/BsdSocketLib/sethostname.c b/StdLib/BsdSocketLib/sethostname.c
deleted file mode 100644
index eb9d914c63..0000000000
--- a/StdLib/BsdSocketLib/sethostname.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software must
- * display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and its
- * contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include <Uefi.h>
-#include <unistd.h>
-#include <wchar.h>
-
-/*++
-
-Module Name:
-
- sethostname.c
-
-Abstract:
-
- Map FreeBSD sethostname call to EFI Interface
-
-
-Revision History
-
---*/
-
-int
-sethostname(
- const char * name,
- size_t namelen
- )
-/*++
-
-Routine Description:
-
- Set the hostname for this system.
-
-Arguments:
-
- name - Pointer to hostname.
- namelen - Length of name
-
-Returns:
-
- 0 on success, -1 if not set
-
---*/
-{
- int SetStatus;
- char * pName;
-
- //
- // Allocate a new buffer for name since the input value
- // does not need to be zero terminated
- //
- pName = malloc ( namelen + 1 );
- if ( NULL == pName ) {
- errno = ENOMEM;
- SetStatus = -1;
- }
- else {
- //
- // Create a zero terminated string for name
- //
- memcpy ( pName, name, namelen );
- pName[ namelen ] = 0;
-
- //
- // Set the environment variable
- //
- SetStatus = setenv ("HOSTNAME", pName, TRUE);
-
- //
- // Free the temporary buffer
- //
- free ( pName );
- }
-
- //
- // Return the results
- //
- return SetStatus;
-}
diff --git a/StdLib/BsdSocketLib/setsockopt.c b/StdLib/BsdSocketLib/setsockopt.c
deleted file mode 100644
index ce2b6aff43..0000000000
--- a/StdLib/BsdSocketLib/setsockopt.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/** @file
- Implement the setsockopt API.
-
- Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <SocketInternals.h>
-
-
-/** Set the socket options
-
- The
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/setsockopt.html">POSIX</a>
- documentation is available online.
-
- @param [in] s Socket file descriptor returned from ::socket.
- @param [in] level Option protocol level
- @param [in] option_name Name of the option
- @param [in] option_value Buffer containing the option value
- @param [in] option_len Length of the value in bytes
-
- @return This routine returns zero (0) upon success and -1 when an error occurs.
- In the case of an error, ::errno contains more details.
-**/
-int
-setsockopt (
- IN int s,
- IN int level,
- IN int option_name,
- IN CONST void * option_value,
- IN socklen_t option_len
- )
-{
- int OptionStatus;
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
-
- // Locate the context for this socket
- pSocketProtocol = BslFdToSocketProtocol ( s, NULL, &errno );
- if ( NULL != pSocketProtocol ) {
- // Set the socket option
- (void) pSocketProtocol->pfnOptionSet (pSocketProtocol,
- level,
- option_name,
- option_value,
- option_len,
- &errno );
- }
- // Return the operation stauts
- OptionStatus = ( 0 == errno ) ? 0 : -1;
- return OptionStatus;
-}
diff --git a/StdLib/BsdSocketLib/shutdown.c b/StdLib/BsdSocketLib/shutdown.c
deleted file mode 100644
index 76831a502b..0000000000
--- a/StdLib/BsdSocketLib/shutdown.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/** @file
- Implement the shutdown API.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <SocketInternals.h>
-
-
-/**
- Shutdown the socket receive and transmit operations
-
- The shutdown routine stops socket receive and transmit operations.
-
- The
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/shutdown.html">POSIX</a>
- documentation is available online.
-
- @param [in] s Socket file descriptor returned from ::socket.
-
- @param [in] how Which operations to shutdown
-
- @return This routine returns the zero (0) if successful or -1 when an
- error occurs. In the latter case, ::errno contains more details.
-
- **/
-int
-shutdown (
- int s,
- int how
- )
-{
- int RetVal;
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
- EFI_STATUS Status;
-
- //
- // Assume failure
- //
- RetVal = -1;
-
- //
- // Locate the context for this socket
- //
- pSocketProtocol = BslFdToSocketProtocol ( s, NULL, &errno );
- if ( NULL != pSocketProtocol ) {
- //
- // Receive the data from the socket
- //
- Status = pSocketProtocol->pfnShutdown ( pSocketProtocol,
- how,
- &errno );
- if ( !EFI_ERROR ( Status )) {
- //
- // Success
- //
- RetVal = 0;
- }
- }
-
- //
- // Return the operation status
- //
- return RetVal;
-}
diff --git a/StdLib/BsdSocketLib/socket.c b/StdLib/BsdSocketLib/socket.c
deleted file mode 100644
index 6b00f41f40..0000000000
--- a/StdLib/BsdSocketLib/socket.c
+++ /dev/null
@@ -1,301 +0,0 @@
-/** @file
- Implement the socket API.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <SocketInternals.h>
-
-
-/**
- File system interface for the socket layer.
-
- This data structure defines the routines for the various
- file system functions associated with the socket layer.
-**/
-const struct fileops SocketOperations = {
- BslSocketClose, // close
- BslSocketRead, // read
- BslSocketWrite, // write
-
- //
- // Not supported
- //
- fnullop_fcntl, // fcntl
- BslSocketPoll, // poll
- fnullop_flush, // flush
-
- fbadop_stat, // stat
- fbadop_ioctl, // ioctl
- fbadop_delete, // delete
- fbadop_rmdir, // rmdir
- fbadop_mkdir, // mkdir
- fbadop_rename, // rename
-
- NULL // lseek
-};
-
-
-/**
- Translate from the socket file descriptor to the socket protocol.
-
- @param [in] s Socket file descriptor returned from ::socket.
-
- @param [in] ppDescriptor Address to receive the descriptor structure
- address for the file
- @param [in] pErrno Address of the errno variable
-
- @return A pointer to the EFI_SOCKET_PROTOCOL structure or NULL if
- an invalid file descriptor was passed in.
-
- **/
-EFI_SOCKET_PROTOCOL *
-BslFdToSocketProtocol (
- int s,
- struct __filedes ** ppDescriptor,
- int * pErrno
- )
-{
- struct __filedes * pDescriptor;
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
-
- //
- // Assume failure
- //
- pSocketProtocol = NULL;
-
- //
- // Validate the file descriptor
- //
- if ( !ValidateFD ( s, TRUE )) {
- //
- // Bad file descriptor
- //
- *pErrno = EBADF;
- }
- else {
- //
- // Get the descriptor for the file
- //
- pDescriptor = &gMD->fdarray[ s ];
-
- //
- // Validate that the descriptor is associated with sockets
- //
- pSocketProtocol = BslValidateSocketFd ( pDescriptor, pErrno );
- if (( NULL != ppDescriptor ) && ( NULL != pSocketProtocol )) {
- *ppDescriptor = pDescriptor;
- }
- }
-
- //
- // Return the socket protocol
- //
- return pSocketProtocol;
-}
-
-
-/**
- Build a file descriptor for a socket.
-
- @param [in] pSocketProtocol Socket protocol structure address
-
- @param [in] pErrno Address of the errno variable
-
- @return The file descriptor for the socket or -1 if an error occurs.
-
- **/
-int
-BslSocketProtocolToFd (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int * pErrno
- )
-{
- int FileDescriptor;
- struct __filedes * pDescriptor;
-
- //
- // Assume failure
- //
- FileDescriptor = -1;
-
- //
- // Locate a file descriptor
- //
- FileDescriptor = FindFreeFD ( VALID_CLOSED );
- if ( FileDescriptor < 0 ) {
- //
- // All available FDs are in use
- //
- errno = EMFILE;
- }
- else {
- //
- // Initialize the file descriptor
- //
- pDescriptor = &gMD->fdarray[ FileDescriptor ];
- pDescriptor->f_offset = 0;
- pDescriptor->f_flag = 0;
- pDescriptor->f_iflags = DTYPE_SOCKET;
- pDescriptor->MyFD = (UINT16)FileDescriptor;
- pDescriptor->Oflags = O_RDWR;
- pDescriptor->Omode = S_ACC_READ | S_ACC_WRITE;
- pDescriptor->RefCount = 1;
- FILE_SET_MATURE ( pDescriptor );
-
- //
- // Socket specific file descriptor initialization
- //
- pDescriptor->devdata = pSocketProtocol;
- pDescriptor->f_ops = &SocketOperations;
- }
-
- //
- // Return the socket's file descriptor
- //
- return FileDescriptor;
-}
-
-
-/**
- Creates an endpoint for network communication.
-
- The socket routine initializes the communication endpoint and returns a
- file descriptor.
-
- The
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/socket.html">POSIX</a>
- documentation is available online.
-
- @param [in] domain Select the family of protocols for the client or server
- application. The supported values are:
- <ul>
- <li>AF_INET - Version 4 UEFI network stack</li>
- </ul>
-
- @param [in] type Specifies how to make the network connection. The following values
- are supported:
- <ul>
- <li>
- SOCK_DGRAM - Connect to UDP, provides a datagram service that is
- manipulated by recvfrom and sendto.
- </li>
- <li>
- SOCK_STREAM - Connect to TCP, provides a byte stream
- that is manipluated by read, recv, send and write.
- </li>
- <li>
- SOCK_RAW - Connect to IP, provides a datagram service that
- is manipulated by recvfrom and sendto.
- </li>
- </ul>
-
- @param [in] protocol Specifies the lower layer protocol to use. The following
- values are supported:
- <ul>
- <li>IPPROTO_TCP</li> - This value must be combined with SOCK_STREAM.</li>
- <li>IPPROTO_UDP</li> - This value must be combined with SOCK_DGRAM.</li>
- <li>0 - 254</li> - An assigned
- <a href="http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml">protocol number</a>
- is combined with SOCK_RAW.
- </li>
- </ul>
-
- @return This routine returns a file descriptor for the socket. If an error
- occurs -1 is returned and ::errno contains more details.
-
- **/
-INT32
-socket (
- IN INT32 domain,
- IN INT32 type,
- IN INT32 protocol
- )
-{
- INT32 FileDescriptor;
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
- EFI_STATUS Status;
-
- //
- // Assume failure
- //
- FileDescriptor = -1;
-
- //
- // Locate the socket protocol
- //
- errno = EslServiceGetProtocol ( &pSocketProtocol );
- if ( 0 == errno ) {
- //
- // Initialize the socket
- //
- Status = pSocketProtocol->pfnSocket ( pSocketProtocol,
- domain,
- type,
- protocol,
- &errno );
- if ( !EFI_ERROR ( Status )) {
- //
- // Build the file descriptor for the socket
- //
- FileDescriptor = BslSocketProtocolToFd ( pSocketProtocol,
- &errno );
- }
- }
-
- //
- // Return the socket's file descriptor
- //
- return FileDescriptor;
-}
-
-
-/**
- Validate the socket's file descriptor
-
- @param [in] pDescriptor Descriptor for the file
-
- @param [in] pErrno Address of the errno variable
-
- @return A pointer to the EFI_SOCKET_PROTOCOL structure or NULL if
- an invalid file descriptor was passed in.
-
- **/
-EFI_SOCKET_PROTOCOL *
-BslValidateSocketFd (
- struct __filedes * pDescriptor,
- int * pErrno
- )
-{
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
-
- //
- // Assume failure
- //
- *pErrno = ENOTSOCK;
- pSocketProtocol = NULL;
-
- //
- // Validate that the descriptor is associated with sockets
- //
- if ( DTYPE_SOCKET == ( pDescriptor->f_iflags & DTYPE_MASK )) {
- //
- // Locate the socket protocol
- //
- pSocketProtocol = pDescriptor->devdata;
- *pErrno = 0;
- }
-
- //
- // Return the socket protocol
- //
- return pSocketProtocol;
-}
diff --git a/StdLib/BsdSocketLib/write.c b/StdLib/BsdSocketLib/write.c
deleted file mode 100644
index a6856b5616..0000000000
--- a/StdLib/BsdSocketLib/write.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/** @file
- Implement the write API.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <SocketInternals.h>
-
-
-/**
- Write support routine for sockets
-
- @param [in] pDescriptor Descriptor address for the file
- @param [in] pOffset File offset
- @param [in] LengthInBytes Number of bytes to write
- @param [in] pBuffer Address of the data
-
- @return The number of bytes written or -1 if an error occurs.
- In the case of an error, ::errno contains more details.
-
-**/
-ssize_t
-EFIAPI
-BslSocketWrite (
- struct __filedes *pDescriptor,
- off_t * pOffset,
- size_t LengthInBytes,
- const void * pBuffer
- )
-{
- ssize_t BytesWritten;
-
- //
- // Send the data using the socket
- //
- BytesWritten = send ( pDescriptor->MyFD,
- pBuffer,
- LengthInBytes,
- 0 );
-
- //
- // Return the number of bytes written
- //
- return BytesWritten;
-}
diff --git a/StdLib/Contributions.txt b/StdLib/Contributions.txt
deleted file mode 100644
index f87cbd73c6..0000000000
--- a/StdLib/Contributions.txt
+++ /dev/null
@@ -1,218 +0,0 @@
-
-======================
-= Code Contributions =
-======================
-
-To make a contribution to a TianoCore project, follow these steps.
-1. Create a change description in the format specified below to
- use in the source control commit log.
-2. Your commit message must include your "Signed-off-by" signature,
- and "Contributed-under" message.
-3. Your "Contributed-under" message explicitly states that the
- contribution is made under the terms of the specified
- contribution agreement. Your "Contributed-under" message
- must include the name of contribution agreement and version.
- For example: Contributed-under: TianoCore Contribution Agreement 1.0
- The "TianoCore Contribution Agreement" is included below in
- this document.
-4. Submit your code to the TianoCore project using the process
- that the project documents on its web page. If the process is
- not documented, then submit the code on development email list
- for the project.
-5. It is preferred that contributions are submitted using the same
- copyright license as the base project. When that is not possible,
- then contributions using the following licenses can be accepted:
- * BSD (2-clause): http://opensource.org/licenses/BSD-2-Clause
- * BSD (3-clause): http://opensource.org/licenses/BSD-3-Clause
- * MIT: http://opensource.org/licenses/MIT
- * Python-2.0: http://opensource.org/licenses/Python-2.0
- * Zlib: http://opensource.org/licenses/Zlib
-
- Contributions of code put into the public domain can also be
- accepted.
-
- Contributions using other licenses might be accepted, but further
- review will be required.
-
-=====================================================
-= Change Description / Commit Message / Patch Email =
-=====================================================
-
-Your change description should use the standard format for a
-commit message, and must include your "Signed-off-by" signature
-and the "Contributed-under" message.
-
-== Sample Change Description / Commit Message =
-
-=== Start of sample patch email message ===
-
-From: Contributor Name <contributor@example.com>
-Subject: [PATCH] CodeModule: Brief-single-line-summary
-
-Full-commit-message
-
-Contributed-under: TianoCore Contribution Agreement 1.0
-Signed-off-by: Contributor Name <contributor@example.com>
----
-
-An extra message for the patch email which will not be considered part
-of the commit message can be added here.
-
-Patch content inline or attached
-
-=== End of sample patch email message ===
-
-=== Notes for sample patch email ===
-
-* The first line of commit message is taken from the email's subject
- line following [PATCH]. The remaining portion of the commit message
- is the email's content until the '---' line.
-* git format-patch is one way to create this format
-
-=== Definitions for sample patch email ===
-
-* "CodeModule" is a short idenfier for the affected code. For
- example MdePkg, or MdeModulePkg UsbBusDxe.
-* "Brief-single-line-summary" is a short summary of the change.
-* The entire first line should be less than ~70 characters.
-* "Full-commit-message" a verbose multiple line comment describing
- the change. Each line should be less than ~70 characters.
-* "Contributed-under" explicitely states that the contribution is
- made under the terms of the contribtion agreement. This
- agreement is included below in this document.
-* "Signed-off-by" is the contributor's signature identifying them
- by their real/legal name and their email address.
-
-========================================
-= TianoCore Contribution Agreement 1.0 =
-========================================
-
-INTEL CORPORATION ("INTEL") MAKES AVAILABLE SOFTWARE, DOCUMENTATION,
-INFORMATION AND/OR OTHER MATERIALS FOR USE IN THE TIANOCORE OPEN SOURCE
-PROJECT (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE
-TERMS AND CONDITIONS OF THIS AGREEMENT BETWEEN YOU AND INTEL AND/OR THE
-TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR
-REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE
-CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
-BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS
-AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE
-AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT
-USE THE CONTENT.
-
-Unless otherwise indicated, all Content made available on the TianoCore
-site is provided to you under the terms and conditions of the BSD
-License ("BSD"). A copy of the BSD License is available at
-http://opensource.org/licenses/bsd-license.php
-or when applicable, in the associated License.txt file.
-
-Certain other content may be made available under other licenses as
-indicated in or with such Content. (For example, in a License.txt file.)
-
-You accept and agree to the following terms and conditions for Your
-present and future Contributions submitted to TianoCore site. Except
-for the license granted to Intel hereunder, You reserve all right,
-title, and interest in and to Your Contributions.
-
-== SECTION 1: Definitions ==
-* "You" or "Contributor" shall mean the copyright owner or legal
- entity authorized by the copyright owner that is making a
- Contribution hereunder. All other entities that control, are
- controlled by, or are under common control with that entity are
- considered to be a single Contributor. For the purposes of this
- definition, "control" means (i) the power, direct or indirect, to
- cause the direction or management of such entity, whether by
- contract or otherwise, or (ii) ownership of fifty percent (50%)
- or more of the outstanding shares, or (iii) beneficial ownership
- of such entity.
-* "Contribution" shall mean any original work of authorship,
- including any modifications or additions to an existing work,
- that is intentionally submitted by You to the TinaoCore site for
- inclusion in, or documentation of, any of the Content. For the
- purposes of this definition, "submitted" means any form of
- electronic, verbal, or written communication sent to the
- TianoCore site or its representatives, including but not limited
- to communication on electronic mailing lists, source code
- control systems, and issue tracking systems that are managed by,
- or on behalf of, the TianoCore site for the purpose of
- discussing and improving the Content, but excluding
- communication that is conspicuously marked or otherwise
- designated in writing by You as "Not a Contribution."
-
-== SECTION 2: License for Contributions ==
-* Contributor hereby agrees that redistribution and use of the
- Contribution in source and binary forms, with or without
- modification, are permitted provided that the following
- conditions are met:
-** Redistributions of source code must retain the Contributor's
- copyright notice, this list of conditions and the following
- disclaimer.
-** Redistributions in binary form must reproduce the Contributor's
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-* Disclaimer. None of the names of Contributor, Intel, or the names
- of their respective contributors may be used to endorse or
- promote products derived from this software without specific
- prior written permission.
-* Contributor grants a license (with the right to sublicense) under
- claims of Contributor's patents that Contributor can license that
- are infringed by the Contribution (as delivered by Contributor) to
- make, use, distribute, sell, offer for sale, and import the
- Contribution and derivative works thereof solely to the minimum
- extent necessary for licensee to exercise the granted copyright
- license; this patent license applies solely to those portions of
- the Contribution that are unmodified. No hardware per se is
- licensed.
-* EXCEPT AS EXPRESSLY SET FORTH IN SECTION 3 BELOW, THE
- CONTRIBUTION IS PROVIDED BY THE CONTRIBUTOR "AS IS" AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- CONTRIBUTOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE
- CONTRIBUTION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- DAMAGE.
-
-== SECTION 3: Representations ==
-* You represent that You are legally entitled to grant the above
- license. If your employer(s) has rights to intellectual property
- that You create that includes Your Contributions, You represent
- that You have received permission to make Contributions on behalf
- of that employer, that Your employer has waived such rights for
- Your Contributions.
-* You represent that each of Your Contributions is Your original
- creation (see Section 4 for submissions on behalf of others).
- You represent that Your Contribution submissions include complete
- details of any third-party license or other restriction
- (including, but not limited to, related patents and trademarks)
- of which You are personally aware and which are associated with
- any part of Your Contributions.
-
-== SECTION 4: Third Party Contributions ==
-* Should You wish to submit work that is not Your original creation,
- You may submit it to TianoCore site separately from any
- Contribution, identifying the complete details of its source
- and of any license or other restriction (including, but not
- limited to, related patents, trademarks, and license agreements)
- of which You are personally aware, and conspicuously marking the
- work as "Submitted on behalf of a third-party: [named here]".
-
-== SECTION 5: Miscellaneous ==
-* Applicable Laws. Any claims arising under or relating to this
- Agreement shall be governed by the internal substantive laws of
- the State of Delaware or federal courts located in Delaware,
- without regard to principles of conflict of laws.
-* Language. This Agreement is in the English language only, which
- language shall be controlling in all respects, and all versions
- of this Agreement in any other language shall be for accommodation
- only and shall not be binding. All communications and notices made
- or given pursuant to this Agreement, and all documentation and
- support to be provided, unless otherwise noted, shall be in the
- English language.
-
diff --git a/StdLib/Efi/StdLib/etc/host.conf b/StdLib/Efi/StdLib/etc/host.conf
deleted file mode 100644
index 1d765415b4..0000000000
--- a/StdLib/Efi/StdLib/etc/host.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-# Order to perform name searches
-dns, nis
-hosts
-
diff --git a/StdLib/Efi/StdLib/etc/hosts b/StdLib/Efi/StdLib/etc/hosts
deleted file mode 100644
index 60cd861e4c..0000000000
--- a/StdLib/Efi/StdLib/etc/hosts
+++ /dev/null
@@ -1,9 +0,0 @@
-# IPv4 hosts
-127.0.0.1 localhost
-
-# IPv6 hosts
-::1 localhost ip6-localhost ip6-loopback
-fe00::0 ip6-localnet
-ff00::0 ip6-mcastprefix
-ff02::1 ip6-allnodes
-ff02::2 ip6-allrouters
diff --git a/StdLib/Efi/StdLib/etc/networks b/StdLib/Efi/StdLib/etc/networks
deleted file mode 100644
index b0101c4017..0000000000
--- a/StdLib/Efi/StdLib/etc/networks
+++ /dev/null
@@ -1,3 +0,0 @@
-# symbolic names for networks, see networks(5) for more information
-link-local 169.254.0.0
-loopback 127.0.0.1
diff --git a/StdLib/Efi/StdLib/etc/protocols b/StdLib/Efi/StdLib/etc/protocols
deleted file mode 100644
index 10e277ce27..0000000000
--- a/StdLib/Efi/StdLib/etc/protocols
+++ /dev/null
@@ -1,59 +0,0 @@
-# Internet (IP) protocols
-#
-# Updated from http://www.iana.org/assignments/protocol-numbers and other
-# sources.
-# New protocols will be added on request if they have been officially
-# assigned by IANA and are not historical.
-# If you need a huge list of used numbers please install the nmap package.
-
-ip 0 IP # internet protocol, pseudo protocol number
-#hopopt 0 HOPOPT # IPv6 Hop-by-Hop Option [RFC1883]
-icmp 1 ICMP # internet control message protocol
-igmp 2 IGMP # Internet Group Management
-ggp 3 GGP # gateway-gateway protocol
-ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')
-st 5 ST # ST datagram mode
-tcp 6 TCP # transmission control protocol
-egp 8 EGP # exterior gateway protocol
-igp 9 IGP # any private interior gateway (Cisco)
-pup 12 PUP # PARC universal packet protocol
-udp 17 UDP # user datagram protocol
-hmp 20 HMP # host monitoring protocol
-xns-idp 22 XNS-IDP # Xerox NS IDP
-rdp 27 RDP # "reliable datagram" protocol
-iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4 [RFC905]
-xtp 36 XTP # Xpress Transfer Protocol
-ddp 37 DDP # Datagram Delivery Protocol
-idpr-cmtp 38 IDPR-CMTP # IDPR Control Message Transport
-ipv6 41 IPv6 # Internet Protocol, version 6
-ipv6-route 43 IPv6-Route # Routing Header for IPv6
-ipv6-frag 44 IPv6-Frag # Fragment Header for IPv6
-idrp 45 IDRP # Inter-Domain Routing Protocol
-rsvp 46 RSVP # Reservation Protocol
-gre 47 GRE # General Routing Encapsulation
-esp 50 IPSEC-ESP # Encap Security Payload [RFC2406]
-ah 51 IPSEC-AH # Authentication Header [RFC2402]
-skip 57 SKIP # SKIP
-ipv6-icmp 58 IPv6-ICMP # ICMP for IPv6
-ipv6-nonxt 59 IPv6-NoNxt # No Next Header for IPv6
-ipv6-opts 60 IPv6-Opts # Destination Options for IPv6
-rspf 73 RSPF CPHB # Radio Shortest Path First (officially CPHB)
-vmtp 81 VMTP # Versatile Message Transport
-eigrp 88 EIGRP # Enhanced Interior Routing Protocol (Cisco)
-ospf 89 OSPFIGP # Open Shortest Path First IGP
-ax.25 93 AX.25 # AX.25 frames
-ipip 94 IPIP # IP-within-IP Encapsulation Protocol
-etherip 97 ETHERIP # Ethernet-within-IP Encapsulation [RFC3378]
-encap 98 ENCAP # Yet Another IP encapsulation [RFC1241]
-# 99 # any private encryption scheme
-pim 103 PIM # Protocol Independent Multicast
-ipcomp 108 IPCOMP # IP Payload Compression Protocol
-vrrp 112 VRRP # Virtual Router Redundancy Protocol
-l2tp 115 L2TP # Layer Two Tunneling Protocol [RFC2661]
-isis 124 ISIS # IS-IS over IPv4
-sctp 132 SCTP # Stream Control Transmission Protocol
-fc 133 FC # Fibre Channel
-udplite 136 UDPLite # UDP-Lite
-mpls-in-ip 137 MPLS-in-IP # MPLS-in-IP [RFC4023]
-manet 138 # MANET Protocols
-hip 139 HIP # Host Identity Protocol
diff --git a/StdLib/Efi/StdLib/etc/resolv.conf b/StdLib/Efi/StdLib/etc/resolv.conf
deleted file mode 100644
index 3ac16ac230..0000000000
--- a/StdLib/Efi/StdLib/etc/resolv.conf
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# Domain name
-#
-domain intel.com
-
-;
-; Name Servers
-;
-nameserver 206.63.63.61
-nameserver 216.251.100.1
-
-; nameserver 10.248.2.1
-; nameserver 10.22.224.204
-
-#
-# Enable debugging
-#
-#options debug
-
diff --git a/StdLib/Efi/StdLib/etc/services b/StdLib/Efi/StdLib/etc/services
deleted file mode 100644
index c95b1bf774..0000000000
--- a/StdLib/Efi/StdLib/etc/services
+++ /dev/null
@@ -1,576 +0,0 @@
-# Network services, Internet style
-#
-# Note that it is presently the policy of IANA to assign a single well-known
-# port number for both TCP and UDP; hence, officially ports have two entries
-# even if the protocol doesn't support UDP operations.
-#
-# Updated from http://www.iana.org/assignments/port-numbers and other
-# sources like http://www.freebsd.org/cgi/cvsweb.cgi/src/etc/services .
-# New ports will be added on request if they have been officially assigned
-# by IANA and used in the real-world or are needed by a debian package.
-# If you need a huge list of used numbers please install the nmap package.
-
-tcpmux 1/tcp # TCP port service multiplexer
-echo 7/tcp
-echo 7/udp
-discard 9/tcp sink null
-discard 9/udp sink null
-systat 11/tcp users
-daytime 13/tcp
-daytime 13/udp
-netstat 15/tcp
-qotd 17/tcp quote
-msp 18/tcp # message send protocol
-msp 18/udp
-chargen 19/tcp ttytst source
-chargen 19/udp ttytst source
-ftp-data 20/tcp
-ftp 21/tcp
-fsp 21/udp fspd
-ssh 22/tcp # SSH Remote Login Protocol
-ssh 22/udp
-telnet 23/tcp
-smtp 25/tcp mail
-time 37/tcp timserver
-time 37/udp timserver
-rlp 39/udp resource # resource location
-nameserver 42/tcp name # IEN 116
-whois 43/tcp nicname
-tacacs 49/tcp # Login Host Protocol (TACACS)
-tacacs 49/udp
-re-mail-ck 50/tcp # Remote Mail Checking Protocol
-re-mail-ck 50/udp
-domain 53/tcp # name-domain server
-domain 53/udp
-mtp 57/tcp # deprecated
-tacacs-ds 65/tcp # TACACS-Database Service
-tacacs-ds 65/udp
-bootps 67/tcp # BOOTP server
-bootps 67/udp
-bootpc 68/tcp # BOOTP client
-bootpc 68/udp
-tftp 69/udp
-gopher 70/tcp # Internet Gopher
-gopher 70/udp
-rje 77/tcp netrjs
-finger 79/tcp
-www 80/tcp http # WorldWideWeb HTTP
-www 80/udp # HyperText Transfer Protocol
-link 87/tcp ttylink
-kerberos 88/tcp kerberos5 krb5 kerberos-sec # Kerberos v5
-kerberos 88/udp kerberos5 krb5 kerberos-sec # Kerberos v5
-supdup 95/tcp
-hostnames 101/tcp hostname # usually from sri-nic
-iso-tsap 102/tcp tsap # part of ISODE
-acr-nema 104/tcp dicom # Digital Imag. & Comm. 300
-acr-nema 104/udp dicom # Digital Imag. & Comm. 300
-csnet-ns 105/tcp cso-ns # also used by CSO name server
-csnet-ns 105/udp cso-ns
-rtelnet 107/tcp # Remote Telnet
-rtelnet 107/udp
-pop2 109/tcp postoffice pop-2 # POP version 2
-pop2 109/udp pop-2
-pop3 110/tcp pop-3 # POP version 3
-pop3 110/udp pop-3
-sunrpc 111/tcp portmapper # RPC 4.0 portmapper
-sunrpc 111/udp portmapper
-auth 113/tcp authentication tap ident
-sftp 115/tcp
-uucp-path 117/tcp
-nntp 119/tcp readnews untp # USENET News Transfer Protocol
-ntp 123/tcp
-ntp 123/udp # Network Time Protocol
-pwdgen 129/tcp # PWDGEN service
-pwdgen 129/udp # PWDGEN service
-loc-srv 135/tcp epmap # Location Service
-loc-srv 135/udp epmap
-netbios-ns 137/tcp # NETBIOS Name Service
-netbios-ns 137/udp
-netbios-dgm 138/tcp # NETBIOS Datagram Service
-netbios-dgm 138/udp
-netbios-ssn 139/tcp # NETBIOS session service
-netbios-ssn 139/udp
-imap2 143/tcp imap # Interim Mail Access P 2 and 4
-imap2 143/udp imap
-snmp 161/tcp # Simple Net Mgmt Protocol
-snmp 161/udp # Simple Net Mgmt Protocol
-snmp-trap 162/tcp snmptrap # Traps for SNMP
-snmp-trap 162/udp snmptrap # Traps for SNMP
-cmip-man 163/tcp # ISO mgmt over IP (CMOT)
-cmip-man 163/udp
-cmip-agent 164/tcp
-cmip-agent 164/udp
-mailq 174/tcp # Mailer transport queue for Zmailer
-mailq 174/udp # Mailer transport queue for Zmailer
-xdmcp 177/tcp # X Display Mgr. Control Proto
-xdmcp 177/udp
-nextstep 178/tcp NeXTStep NextStep # NeXTStep window
-nextstep 178/udp NeXTStep NextStep # server
-bgp 179/tcp # Border Gateway Protocol
-bgp 179/udp
-prospero 191/tcp # Cliff Neuman's Prospero
-prospero 191/udp
-irc 194/tcp # Internet Relay Chat
-irc 194/udp
-smux 199/tcp # SNMP Unix Multiplexer
-smux 199/udp
-at-rtmp 201/tcp # AppleTalk routing
-at-rtmp 201/udp
-at-nbp 202/tcp # AppleTalk name binding
-at-nbp 202/udp
-at-echo 204/tcp # AppleTalk echo
-at-echo 204/udp
-at-zis 206/tcp # AppleTalk zone information
-at-zis 206/udp
-qmtp 209/tcp # Quick Mail Transfer Protocol
-qmtp 209/udp # Quick Mail Transfer Protocol
-z3950 210/tcp wais # NISO Z39.50 database
-z3950 210/udp wais
-ipx 213/tcp # IPX
-ipx 213/udp
-imap3 220/tcp # Interactive Mail Access
-imap3 220/udp # Protocol v3
-pawserv 345/tcp # Perf Analysis Workbench
-pawserv 345/udp
-zserv 346/tcp # Zebra server
-zserv 346/udp
-fatserv 347/tcp # Fatmen Server
-fatserv 347/udp
-rpc2portmap 369/tcp
-rpc2portmap 369/udp # Coda portmapper
-codaauth2 370/tcp
-codaauth2 370/udp # Coda authentication server
-clearcase 371/tcp Clearcase
-clearcase 371/udp Clearcase
-ulistserv 372/tcp # UNIX Listserv
-ulistserv 372/udp
-ldap 389/tcp # Lightweight Directory Access Protocol
-ldap 389/udp
-imsp 406/tcp # Interactive Mail Support Protocol
-imsp 406/udp
-https 443/tcp # http protocol over TLS/SSL
-https 443/udp
-snpp 444/tcp # Simple Network Paging Protocol
-snpp 444/udp
-microsoft-ds 445/tcp # Microsoft Naked CIFS
-microsoft-ds 445/udp
-kpasswd 464/tcp
-kpasswd 464/udp
-saft 487/tcp # Simple Asynchronous File Transfer
-saft 487/udp
-isakmp 500/tcp # IPsec - Internet Security Association
-isakmp 500/udp # and Key Management Protocol
-rtsp 554/tcp # Real Time Stream Control Protocol
-rtsp 554/udp # Real Time Stream Control Protocol
-nqs 607/tcp # Network Queuing system
-nqs 607/udp
-npmp-local 610/tcp dqs313_qmaster # npmp-local / DQS
-npmp-local 610/udp dqs313_qmaster
-npmp-gui 611/tcp dqs313_execd # npmp-gui / DQS
-npmp-gui 611/udp dqs313_execd
-hmmp-ind 612/tcp dqs313_intercell # HMMP Indication / DQS
-hmmp-ind 612/udp dqs313_intercell
-qmqp 628/tcp
-qmqp 628/udp
-ipp 631/tcp # Internet Printing Protocol
-ipp 631/udp
-#
-# UNIX specific services
-#
-exec 512/tcp
-biff 512/udp comsat
-login 513/tcp
-who 513/udp whod
-shell 514/tcp cmd # no passwords used
-syslog 514/udp
-printer 515/tcp spooler # line printer spooler
-talk 517/udp
-ntalk 518/udp
-route 520/udp router routed # RIP
-timed 525/udp timeserver
-tempo 526/tcp newdate
-courier 530/tcp rpc
-conference 531/tcp chat
-netnews 532/tcp readnews
-netwall 533/udp # for emergency broadcasts
-gdomap 538/tcp # GNUstep distributed objects
-gdomap 538/udp
-uucp 540/tcp uucpd # uucp daemon
-klogin 543/tcp # Kerberized `rlogin' (v5)
-kshell 544/tcp krcmd # Kerberized `rsh' (v5)
-afpovertcp 548/tcp # AFP over TCP
-afpovertcp 548/udp
-remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem
-nntps 563/tcp snntp # NNTP over SSL
-nntps 563/udp snntp
-submission 587/tcp # Submission [RFC4409]
-submission 587/udp
-ldaps 636/tcp # LDAP over SSL
-ldaps 636/udp
-tinc 655/tcp # tinc control port
-tinc 655/udp
-silc 706/tcp
-silc 706/udp
-kerberos-adm 749/tcp # Kerberos `kadmin' (v5)
-#
-webster 765/tcp # Network dictionary
-webster 765/udp
-rsync 873/tcp
-rsync 873/udp
-ftps-data 989/tcp # FTP over SSL (data)
-ftps 990/tcp
-telnets 992/tcp # Telnet over SSL
-telnets 992/udp
-imaps 993/tcp # IMAP over SSL
-imaps 993/udp
-ircs 994/tcp # IRC over SSL
-ircs 994/udp
-pop3s 995/tcp # POP-3 over SSL
-pop3s 995/udp
-#
-# From ``Assigned Numbers'':
-#
-#> The Registered Ports are not controlled by the IANA and on most systems
-#> can be used by ordinary user processes or programs executed by ordinary
-#> users.
-#
-#> Ports are used in the TCP [45,106] to name the ends of logical
-#> connections which carry long term conversations. For the purpose of
-#> providing services to unknown callers, a service contact port is
-#> defined. This list specifies the port used by the server process as its
-#> contact port. While the IANA can not control uses of these ports it
-#> does register or list uses of these ports as a convienence to the
-#> community.
-#
-socks 1080/tcp # socks proxy server
-socks 1080/udp
-proofd 1093/tcp
-proofd 1093/udp
-rootd 1094/tcp
-rootd 1094/udp
-openvpn 1194/tcp
-openvpn 1194/udp
-rmiregistry 1099/tcp # Java RMI Registry
-rmiregistry 1099/udp
-kazaa 1214/tcp
-kazaa 1214/udp
-nessus 1241/tcp # Nessus vulnerability
-nessus 1241/udp # assessment scanner
-lotusnote 1352/tcp lotusnotes # Lotus Note
-lotusnote 1352/udp lotusnotes
-ms-sql-s 1433/tcp # Microsoft SQL Server
-ms-sql-s 1433/udp
-ms-sql-m 1434/tcp # Microsoft SQL Monitor
-ms-sql-m 1434/udp
-ingreslock 1524/tcp
-ingreslock 1524/udp
-prospero-np 1525/tcp # Prospero non-privileged
-prospero-np 1525/udp
-datametrics 1645/tcp old-radius
-datametrics 1645/udp old-radius
-sa-msg-port 1646/tcp old-radacct
-sa-msg-port 1646/udp old-radacct
-kermit 1649/tcp
-kermit 1649/udp
-l2f 1701/tcp l2tp
-l2f 1701/udp l2tp
-radius 1812/tcp
-radius 1812/udp
-radius-acct 1813/tcp radacct # Radius Accounting
-radius-acct 1813/udp radacct
-msnp 1863/tcp # MSN Messenger
-msnp 1863/udp
-unix-status 1957/tcp # remstats unix-status server
-log-server 1958/tcp # remstats log server
-remoteping 1959/tcp # remstats remoteping server
-cisco-sccp 2000/tcp sieve # Cisco SCCP
-cisco-sccp 2000/udp
-search 2010/tcp ndtp
-pipe_server 2010/tcp
-nfs 2049/tcp # Network File System
-nfs 2049/udp # Network File System
-gnunet 2086/tcp
-gnunet 2086/udp
-rtcm-sc104 2101/tcp # RTCM SC-104 IANA 1/29/99
-rtcm-sc104 2101/udp
-gsigatekeeper 2119/tcp
-gsigatekeeper 2119/udp
-gris 2135/tcp # Grid Resource Information Server
-gris 2135/udp # Grid Resource Information Server
-cvspserver 2401/tcp # CVS client/server operations
-cvspserver 2401/udp
-venus 2430/tcp # codacon port
-venus 2430/udp # Venus callback/wbc interface
-venus-se 2431/tcp # tcp side effects
-venus-se 2431/udp # udp sftp side effect
-codasrv 2432/tcp # not used
-codasrv 2432/udp # server port
-codasrv-se 2433/tcp # tcp side effects
-codasrv-se 2433/udp # udp sftp side effect
-mon 2583/tcp # MON traps
-mon 2583/udp
-dict 2628/tcp # Dictionary server
-dict 2628/udp
-gsiftp 2811/tcp
-gsiftp 2811/udp
-gpsd 2947/tcp
-gpsd 2947/udp
-gds_db 3050/tcp # InterBase server
-gds_db 3050/udp
-icpv2 3130/tcp icp # Internet Cache Protocol
-icpv2 3130/udp icp
-mysql 3306/tcp
-mysql 3306/udp
-nut 3493/tcp # Network UPS Tools
-nut 3493/udp
-distcc 3632/tcp # distributed compiler
-distcc 3632/udp
-daap 3689/tcp # Digital Audio Access Protocol
-daap 3689/udp
-svn 3690/tcp subversion # Subversion protocol
-svn 3690/udp subversion
-suucp 4031/tcp # UUCP over SSL
-suucp 4031/udp # UUCP over SSL
-sysrqd 4094/tcp # sysrq daemon
-sysrqd 4094/udp # sysrq daemon
-remctl 4373/tcp # Remote Authenticated Command Service
-remctl 4373/udp # Remote Authenticated Command Service
-iax 4569/tcp # Inter-Asterisk eXchange
-iax 4569/udp
-radmin-port 4899/tcp # RAdmin Port
-radmin-port 4899/udp
-rfe 5002/udp # Radio Free Ethernet
-rfe 5002/tcp
-mmcc 5050/tcp # multimedia conference control tool (Yahoo IM)
-mmcc 5050/udp
-sip 5060/tcp # Session Initiation Protocol
-sip 5060/udp
-sip-tls 5061/tcp
-sip-tls 5061/udp
-aol 5190/tcp # AIM
-aol 5190/udp
-xmpp-client 5222/tcp jabber-client # Jabber Client Connection
-xmpp-client 5222/udp jabber-client
-xmpp-server 5269/tcp jabber-server # Jabber Server Connection
-xmpp-server 5269/udp jabber-server
-cfengine 5308/tcp
-cfengine 5308/udp
-mdns 5353/tcp # Multicast DNS
-mdns 5353/udp # Multicast DNS
-postgresql 5432/tcp postgres # PostgreSQL Database
-postgresql 5432/udp postgres
-freeciv 5556/tcp rptp # Freeciv gameplay
-freeciv 5556/udp
-amqp 5672/tcp
-amqp 5672/udp
-amqp 5672/sctp
-ggz 5688/tcp # GGZ Gaming Zone
-ggz 5688/udp # GGZ Gaming Zone
-x11 6000/tcp x11-0 # X Window System
-x11 6000/udp x11-0
-x11-1 6001/tcp
-x11-1 6001/udp
-x11-2 6002/tcp
-x11-2 6002/udp
-x11-3 6003/tcp
-x11-3 6003/udp
-x11-4 6004/tcp
-x11-4 6004/udp
-x11-5 6005/tcp
-x11-5 6005/udp
-x11-6 6006/tcp
-x11-6 6006/udp
-x11-7 6007/tcp
-x11-7 6007/udp
-gnutella-svc 6346/tcp # gnutella
-gnutella-svc 6346/udp
-gnutella-rtr 6347/tcp # gnutella
-gnutella-rtr 6347/udp
-sge_qmaster 6444/tcp # Grid Engine Qmaster Service
-sge_qmaster 6444/udp # Grid Engine Qmaster Service
-sge_execd 6445/tcp # Grid Engine Execution Service
-sge_execd 6445/udp # Grid Engine Execution Service
-afs3-fileserver 7000/tcp bbs # file server itself
-afs3-fileserver 7000/udp bbs
-afs3-callback 7001/tcp # callbacks to cache managers
-afs3-callback 7001/udp
-afs3-prserver 7002/tcp # users & groups database
-afs3-prserver 7002/udp
-afs3-vlserver 7003/tcp # volume location database
-afs3-vlserver 7003/udp
-afs3-kaserver 7004/tcp # AFS/Kerberos authentication
-afs3-kaserver 7004/udp
-afs3-volser 7005/tcp # volume managment server
-afs3-volser 7005/udp
-afs3-errors 7006/tcp # error interpretation service
-afs3-errors 7006/udp
-afs3-bos 7007/tcp # basic overseer process
-afs3-bos 7007/udp
-afs3-update 7008/tcp # server-to-server updater
-afs3-update 7008/udp
-afs3-rmtsys 7009/tcp # remote cache manager service
-afs3-rmtsys 7009/udp
-font-service 7100/tcp xfs # X Font Service
-font-service 7100/udp xfs
-http-alt 8080/tcp webcache # WWW caching service
-http-alt 8080/udp # WWW caching service
-bacula-dir 9101/tcp # Bacula Director
-bacula-dir 9101/udp
-bacula-fd 9102/tcp # Bacula File Daemon
-bacula-fd 9102/udp
-bacula-sd 9103/tcp # Bacula Storage Daemon
-bacula-sd 9103/udp
-xmms2 9667/tcp # Cross-platform Music Multiplexing System
-xmms2 9667/udp # Cross-platform Music Multiplexing System
-amanda 10080/tcp # amanda backup services
-amanda 10080/udp
-hkp 11371/tcp # OpenPGP HTTP Keyserver
-hkp 11371/udp # OpenPGP HTTP Keyserver
-bprd 13720/tcp # VERITAS NetBackup
-bprd 13720/udp
-bpdbm 13721/tcp # VERITAS NetBackup
-bpdbm 13721/udp
-bpjava-msvc 13722/tcp # BP Java MSVC Protocol
-bpjava-msvc 13722/udp
-vnetd 13724/tcp # Veritas Network Utility
-vnetd 13724/udp
-bpcd 13782/tcp # VERITAS NetBackup
-bpcd 13782/udp
-vopied 13783/tcp # VERITAS NetBackup
-vopied 13783/udp
-wnn6 22273/tcp # wnn6
-wnn6 22273/udp
-
-#
-# Datagram Delivery Protocol services
-#
-rtmp 1/ddp # Routing Table Maintenance Protocol
-nbp 2/ddp # Name Binding Protocol
-echo 4/ddp # AppleTalk Echo Protocol
-zip 6/ddp # Zone Information Protocol
-
-#=========================================================================
-# The remaining port numbers are not as allocated by IANA.
-#=========================================================================
-
-# Kerberos (Project Athena/MIT) services
-# Note that these are for Kerberos v4, and are unofficial. Sites running
-# v4 should uncomment these and comment out the v5 entries above.
-#
-kerberos4 750/udp kerberos-iv kdc # Kerberos (server)
-kerberos4 750/tcp kerberos-iv kdc
-kerberos_master 751/udp # Kerberos authentication
-kerberos_master 751/tcp
-passwd_server 752/udp # Kerberos passwd server
-krb_prop 754/tcp krb5_prop hprop # Kerberos slave propagation
-krbupdate 760/tcp kreg # Kerberos registration
-swat 901/tcp # swat
-kpop 1109/tcp # Pop with Kerberos
-knetd 2053/tcp # Kerberos de-multiplexor
-zephyr-srv 2102/udp # Zephyr server
-zephyr-clt 2103/udp # Zephyr serv-hm connection
-zephyr-hm 2104/udp # Zephyr hostmanager
-eklogin 2105/tcp # Kerberos encrypted rlogin
-# Hmmm. Are we using Kv4 or Kv5 now? Worrying.
-# The following is probably Kerberos v5 --- ajt@debian.org (11/02/2000)
-kx 2111/tcp # X over Kerberos
-iprop 2121/tcp # incremental propagation
-#
-# Unofficial but necessary (for NetBSD) services
-#
-supfilesrv 871/tcp # SUP server
-supfiledbg 1127/tcp # SUP debugging
-
-#
-# Services added for the Debian GNU/Linux distribution
-#
-linuxconf 98/tcp # LinuxConf
-poppassd 106/tcp # Eudora
-poppassd 106/udp
-ssmtp 465/tcp smtps # SMTP over SSL
-moira_db 775/tcp # Moira database
-moira_update 777/tcp # Moira update protocol
-moira_ureg 779/udp # Moira user registration
-spamd 783/tcp # spamassassin daemon
-omirr 808/tcp omirrd # online mirror
-omirr 808/udp omirrd
-customs 1001/tcp # pmake customs server
-customs 1001/udp
-skkserv 1178/tcp # skk jisho server port
-predict 1210/udp # predict -- satellite tracking
-rmtcfg 1236/tcp # Gracilis Packeten remote config server
-wipld 1300/tcp # Wipl network monitor
-xtel 1313/tcp # french minitel
-xtelw 1314/tcp # french minitel
-support 1529/tcp # GNATS
-cfinger 2003/tcp # GNU Finger
-frox 2121/tcp # frox: caching ftp proxy
-ninstall 2150/tcp # ninstall service
-ninstall 2150/udp
-zebrasrv 2600/tcp # zebra service
-zebra 2601/tcp # zebra vty
-ripd 2602/tcp # ripd vty (zebra)
-ripngd 2603/tcp # ripngd vty (zebra)
-ospfd 2604/tcp # ospfd vty (zebra)
-bgpd 2605/tcp # bgpd vty (zebra)
-ospf6d 2606/tcp # ospf6d vty (zebra)
-ospfapi 2607/tcp # OSPF-API
-isisd 2608/tcp # ISISd vty (zebra)
-afbackup 2988/tcp # Afbackup system
-afbackup 2988/udp
-afmbackup 2989/tcp # Afmbackup system
-afmbackup 2989/udp
-xtell 4224/tcp # xtell server
-fax 4557/tcp # FAX transmission service (old)
-hylafax 4559/tcp # HylaFAX client-server protocol (new)
-distmp3 4600/tcp # distmp3host daemon
-munin 4949/tcp lrrd # Munin
-enbd-cstatd 5051/tcp # ENBD client statd
-enbd-sstatd 5052/tcp # ENBD server statd
-pcrd 5151/tcp # PCR-1000 Daemon
-noclog 5354/tcp # noclogd with TCP (nocol)
-noclog 5354/udp # noclogd with UDP (nocol)
-hostmon 5355/tcp # hostmon uses TCP (nocol)
-hostmon 5355/udp # hostmon uses UDP (nocol)
-rplay 5555/udp # RPlay audio service
-nsca 5667/tcp # Nagios Agent - NSCA
-mrtd 5674/tcp # MRT Routing Daemon
-bgpsim 5675/tcp # MRT Routing Simulator
-canna 5680/tcp # cannaserver
-sane-port 6566/tcp sane saned # SANE network scanner daemon
-ircd 6667/tcp # Internet Relay Chat
-zope-ftp 8021/tcp # zope management by ftp
-tproxy 8081/tcp # Transparent Proxy
-omniorb 8088/tcp # OmniORB
-omniorb 8088/udp
-clc-build-daemon 8990/tcp # Common lisp build daemon
-xinetd 9098/tcp
-mandelspawn 9359/udp mandelbrot # network mandelbrot
-git 9418/tcp # Git Version Control System
-zope 9673/tcp # zope server
-webmin 10000/tcp
-kamanda 10081/tcp # amanda backup services (Kerberos)
-kamanda 10081/udp
-amandaidx 10082/tcp # amanda backup services
-amidxtape 10083/tcp # amanda backup services
-smsqp 11201/tcp # Alamin SMS gateway
-smsqp 11201/udp
-xpilot 15345/tcp # XPilot Contact Port
-xpilot 15345/udp
-sgi-cmsd 17001/udp # Cluster membership services daemon
-sgi-crsd 17002/udp
-sgi-gcd 17003/udp # SGI Group membership daemon
-sgi-cad 17004/tcp # Cluster Admin daemon
-isdnlog 20011/tcp # isdn logging system
-isdnlog 20011/udp
-vboxd 20012/tcp # voice box system
-vboxd 20012/udp
-binkp 24554/tcp # binkp fidonet protocol
-asp 27374/tcp # Address Search Protocol
-asp 27374/udp
-csync2 30865/tcp # cluster synchronization tool
-dircproxy 57000/tcp # Detachable IRC Proxy
-tfido 60177/tcp # fidonet EMSI over telnet
-fido 60179/tcp # fidonet EMSI over TCP
-
-# Local services
diff --git a/StdLib/EfiSocketLib/DxeSupport.c b/StdLib/EfiSocketLib/DxeSupport.c
deleted file mode 100644
index 808b710d27..0000000000
--- a/StdLib/EfiSocketLib/DxeSupport.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/** @file
- SocketDxe support routines
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "Socket.h"
-
-
-/**
- Creates a child handle and installs gEfiSocketProtocolGuid.
-
- This routine creates a child handle for the socket driver and
- installs the ::gEfiSocketProtocolGuid on that handle with a pointer
- to the ::EFI_SOCKET_PROTOCOL structure address.
-
- This routine is called by ::EslServiceGetProtocol in UseSocketDxe
- when the socket application is linked with UseSocketDxe.
-
- @param [in] pThis Address of the EFI_SERVICE_BINDING_PROTOCOL structure.
- @param [in] pChildHandle Pointer to the handle of the child to create. If it is NULL,
- then a new handle is created. If it is a pointer to an existing UEFI handle,
- then the protocol is added to the existing UEFI handle.
-
- @retval EFI_SUCCESS The protocol was added to ChildHandle.
- @retval EFI_INVALID_PARAMETER ChildHandle is NULL.
- @retval EFI_OUT_OF_RESOURCES There are not enough resources availabe to create
- the child
- @retval other The child handle was not created
-
-**/
-EFI_STATUS
-EFIAPI
-EslDxeCreateChild (
- IN EFI_SERVICE_BINDING_PROTOCOL * pThis,
- IN OUT EFI_HANDLE * pChildHandle
- )
-{
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Create a socket structure
- //
- Status = EslSocketAllocate ( pChildHandle,
- DEBUG_SOCKET,
- &pSocket );
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Removes gEfiSocketProtocolGuid and destroys the child handle.
-
- This routine uninstalls ::gEfiSocketProtocolGuid from the child handle
- and destroys the child handle if necessary.
-
- This routine is called from ???.
-
- @param [in] pThis Address of the EFI_SERVICE_BINDING_PROTOCOL structure.
- @param [in] ChildHandle Handle of the child to destroy
-
- @retval EFI_SUCCESS The protocol was removed from ChildHandle.
- @retval EFI_UNSUPPORTED ChildHandle does not support the protocol that is being removed.
- @retval EFI_INVALID_PARAMETER Child handle is not a valid UEFI Handle.
- @retval EFI_ACCESS_DENIED The protocol could not be removed from the ChildHandle
- because its services are being used.
- @retval other The child handle was not destroyed
-
-**/
-EFI_STATUS
-EFIAPI
-EslDxeDestroyChild (
- IN EFI_SERVICE_BINDING_PROTOCOL * pThis,
- IN EFI_HANDLE ChildHandle
- )
-{
- ESL_LAYER * pLayer;
- EFI_SOCKET_PROTOCOL * pSocketProtocol;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Locate the socket control structure
- //
- pLayer = &mEslLayer;
- Status = gBS->OpenProtocol (
- ChildHandle,
- &gEfiSocketProtocolGuid,
- (VOID **)&pSocketProtocol,
- pLayer->ImageHandle,
- NULL,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
- if ( !EFI_ERROR ( Status )) {
- //
- // Free the socket resources
- //
- Status = EslSocketFree ( pSocketProtocol, NULL );
- }
- else {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Failed to open socket protocol on 0x%08x, Status; %r\r\n",
- ChildHandle,
- Status ));
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
-Install the socket service
-
-This routine installs the ::gEfiSocketServiceBindingProtocolGuid
-on the SocketDxe image handle to announce the availability
-of the socket layer to the rest of EFI.
-
-SocketDxe's EntryPoint routine calls this routine to
-make the socket layer available.
-
-@param [in] pImageHandle Address of the image handle
-
-@retval EFI_SUCCESS Service installed successfully
-**/
-EFI_STATUS
-EFIAPI
-EslDxeInstall (
- IN EFI_HANDLE * pImageHandle
- )
-{
- EFI_STATUS Status;
-
- //
- // Install the socket service binding protocol
- //
- Status = gBS->InstallMultipleProtocolInterfaces (
- pImageHandle,
- &gEfiSocketServiceBindingProtocolGuid,
- mEslLayer.pServiceBinding,
- NULL
- );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO,
- "Installed: gEfiSocketServiceBindingProtocolGuid on 0x%08x\r\n",
- *pImageHandle ));
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_POOL | DEBUG_INIT,
- "ERROR - InstallMultipleProtocolInterfaces failed, Status: %r\r\n",
- Status ));
- }
-
- //
- // Return the operation status
- //
- return Status;
-}
-
-
-/**
-Uninstall the socket service
-
-This routine removes the gEfiSocketServiceBindingProtocolGuid from
-the SocketDxe image handle to notify EFI that the socket layer
-is no longer available.
-
-SocketDxe's DriverUnload routine calls this routine to remove the
-socket layer.
-
-@param [in] ImageHandle Handle for the image.
-
-@retval EFI_SUCCESS Service installed successfully
-**/
-EFI_STATUS
-EFIAPI
-EslDxeUninstall (
- IN EFI_HANDLE ImageHandle
- )
-{
- EFI_STATUS Status;
-
- //
- // Install the socket service binding protocol
- //
- Status = gBS->UninstallMultipleProtocolInterfaces (
- ImageHandle,
- &gEfiSocketServiceBindingProtocolGuid,
- mEslLayer.pServiceBinding,
- NULL
- );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_POOL | DEBUG_INIT,
- "Removed: gEfiSocketServiceBindingProtocolGuid from 0x%08x\r\n",
- ImageHandle ));
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_POOL | DEBUG_INIT,
- "ERROR - Failed to remove gEfiSocketServiceBindingProtocolGuid from 0x%08x, Status: %r\r\n",
- ImageHandle,
- Status ));
- }
-
- //
- // Return the operation status
- //
- return Status;
-}
diff --git a/StdLib/EfiSocketLib/EfiSocketLib.inf b/StdLib/EfiSocketLib/EfiSocketLib.inf
deleted file mode 100644
index 29e06ec3e1..0000000000
--- a/StdLib/EfiSocketLib/EfiSocketLib.inf
+++ /dev/null
@@ -1,70 +0,0 @@
-#/** @file
-# Component description file for the EFI socket library.
-#
-# This module implements the socket layer.
-# Copyright (c) 2011 - 2015, Intel Corporation
-#
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#**/
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = EfiSocketLib
- FILE_GUID = C33E0B7C-9D0F-41df-BDFD-08F5E4C39EE8
- MODULE_TYPE = BASE
- VERSION_STRING = 1.0
- LIBRARY_CLASS = EfiSocketLib
- CONSTRUCTOR = EslConstructor
- DESTRUCTOR = EslDestructor
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF EBC
-#
-
-[Sources.common]
- DxeSupport.c
- Init.c
- Ip4.c
- Service.c
- Socket.c
- Tcp4.c
- Tcp6.c
- Udp4.c
- Udp6.c
- UseEfiSocketLib.c
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- StdLib/StdLib.dec
-
-[LibraryClasses]
- BaseMemoryLib
- DebugLib
- MemoryAllocationLib
- UefiBootServicesTableLib
- UefiLib
-
-[Protocols]
- gEfiIp4Config2ProtocolGuid
- gEfiIp6ConfigProtocolGuid
- gEfiIp4ProtocolGuid
- gEfiIp4ServiceBindingProtocolGuid
- gEfiIp6ProtocolGuid
- gEfiIp6ServiceBindingProtocolGuid
- gEfiTcp4ProtocolGuid
- gEfiTcp4ServiceBindingProtocolGuid
- gEfiTcp6ProtocolGuid
- gEfiTcp6ServiceBindingProtocolGuid
- gEfiUdp4ProtocolGuid
- gEfiUdp4ServiceBindingProtocolGuid
- gEfiUdp6ProtocolGuid
- gEfiUdp6ServiceBindingProtocolGuid
- gEfiSocketProtocolGuid
- gEfiSocketServiceBindingProtocolGuid
diff --git a/StdLib/EfiSocketLib/Init.c b/StdLib/EfiSocketLib/Init.c
deleted file mode 100644
index 88d2065c21..0000000000
--- a/StdLib/EfiSocketLib/Init.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/** @file
- Implement the constructor and destructor for the EFI socket library
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "Socket.h"
-
-
-/**
- EFI Socket Library Constructor
-
- This routine supports an implementation dependent constructor
- depending upon whether the library is linked to a socket
- application or the SocketDxe driver. The following modules
- declare the redirection for the constructor in ::mpfnEslConstructor:
- <ul>
- <li>StdLib/EfiSocketLib/UseSocketLib.c - Application links against EfiSocketLib</li>
- <li>StdLib/SocketDxe/EntryUnload.c - SocketDxe links against EfiSocketLib</li>
- </ul>
-
- The EfiSocketLib.inf file lists ::EslConstructor as the CONSTRUCTOR
- in the [Defines] section. As a result, this routine is called by
- the ProcessLibraryConstructorList routine of the AutoGen.c module
- in the Build directory associated with the socket application or
- the SocketDxe driver.
-
- @retval EFI_SUCCESS The socket layer initialization was successful
-
- **/
-EFI_STATUS
-EFIAPI
-EslConstructor (
- VOID
- )
-{
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Call the image dependent constructor if available
- //
- if ( NULL != mpfnEslConstructor ) {
- Status = mpfnEslConstructor ( );
- }
-
- //
- // Return the constructor status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- EFI Socket Library Destructor
-
- This routine supports an implementation dependent destructor
- depending upon whether the library is linked to a socket
- application or the SocketDxe driver. The following modules
- declare the redirection for the destructor in ::mpfnEslDestructor:
- <ul>
- <li>StdLib/EfiSocketLib/UseSocketLib.c - Application links against EfiSocketLib</li>
- <li>StdLib/SocketDxe/EntryUnload.c - SocketDxe links against EfiSocketLib</li>
- </ul>
-
- The EfiSocketLib.inf file lists ::EslDestructor as the DESTRUCTOR
- in the [Defines] section. As a result, this routine is called by
- the ProcessLibraryDestructorList routine of the AutoGen.c module
- in the Build directory associated with the socket application or
- the SocketDxe driver.
-
- @retval EFI_SUCCESS The socket layer shutdown was successful
-
- **/
-EFI_STATUS
-EFIAPI
-EslDestructor (
- VOID
- )
-{
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Call the image dependent destructor if available
- //
- if ( NULL != mpfnEslDestructor ) {
- Status = mpfnEslDestructor ( );
- }
-
- //
- // Return the constructor status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
diff --git a/StdLib/EfiSocketLib/Ip4.c b/StdLib/EfiSocketLib/Ip4.c
deleted file mode 100644
index d3531b8928..0000000000
--- a/StdLib/EfiSocketLib/Ip4.c
+++ /dev/null
@@ -1,1380 +0,0 @@
-/** @file
- Implement the IP4 driver support for the socket layer.
-
- Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include "Socket.h"
-
-
-/** Get the local socket address.
-
- This routine returns the IPv4 address associated with the local
- socket.
-
- This routine is called by ::EslSocketGetLocalAddress to determine the
- network address for the SOCK_RAW socket.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
- @param [out] pAddress Network address to receive the local system address
-**/
-VOID
-EslIp4LocalAddressGet (
- IN ESL_PORT * pPort,
- OUT struct sockaddr * pAddress
- )
-{
- struct sockaddr_in * pLocalAddress;
- ESL_IP4_CONTEXT * pIp4;
-
- DBG_ENTER ( );
-
- // Return the local address
- pIp4 = &pPort->Context.Ip4;
- pLocalAddress = (struct sockaddr_in *)pAddress;
- pLocalAddress->sin_family = AF_INET;
- CopyMem ( &pLocalAddress->sin_addr,
- &pIp4->ModeData.ConfigData.StationAddress.Addr[0],
- sizeof ( pLocalAddress->sin_addr ));
-
- DBG_EXIT ( );
-}
-
-
-/** Set the local port address.
-
- This routine sets the local port address.
-
- This support routine is called by ::EslSocketPortAllocate.
-
- @param [in] pPort Address of an ESL_PORT structure
- @param [in] pSockAddr Address of a sockaddr structure that contains the
- connection point on the local machine. An IPv4 address
- of INADDR_ANY specifies that the connection is made to
- all of the network stacks on the platform. Specifying a
- specific IPv4 address restricts the connection to the
- network stack supporting that address. Specifying zero
- for the port causes the network layer to assign a port
- number from the dynamic range. Specifying a specific
- port number causes the network layer to use that port.
-
- @param [in] bBindTest TRUE = run bind testing
-
- @retval EFI_SUCCESS The operation was successful
- **/
-EFI_STATUS
-EslIp4LocalAddressSet (
- IN ESL_PORT * pPort,
- IN CONST struct sockaddr * pSockAddr,
- IN BOOLEAN bBindTest
- )
-{
- EFI_IP4_CONFIG_DATA * pConfig;
- CONST struct sockaddr_in * pIpAddress;
- CONST UINT8 * pIpv4Address;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- // Validate the address
- pIpAddress = (struct sockaddr_in *)pSockAddr;
- if ( INADDR_BROADCAST == pIpAddress->sin_addr.s_addr ) {
- // The local address must not be the broadcast address
- Status = EFI_INVALID_PARAMETER;
- pPort->pSocket->errno = EADDRNOTAVAIL;
- }
- else {
- Status = EFI_SUCCESS;
-
- // Set the local address
- pIpAddress = (struct sockaddr_in *)pSockAddr;
- pIpv4Address = (UINT8 *)&pIpAddress->sin_addr.s_addr;
- pConfig = &pPort->Context.Ip4.ModeData.ConfigData;
- pConfig->StationAddress.Addr[0] = pIpv4Address[0];
- pConfig->StationAddress.Addr[1] = pIpv4Address[1];
- pConfig->StationAddress.Addr[2] = pIpv4Address[2];
- pConfig->StationAddress.Addr[3] = pIpv4Address[3];
-
- // Determine if the default address is used
- pConfig->UseDefaultAddress = (BOOLEAN)( 0 == pIpAddress->sin_addr.s_addr );
-
- // Display the local address
- DEBUG (( DEBUG_BIND,
- "0x%08x: Port, Local IP4 Address: %d.%d.%d.%d\r\n",
- pPort,
- pConfig->StationAddress.Addr[0],
- pConfig->StationAddress.Addr[1],
- pConfig->StationAddress.Addr[2],
- pConfig->StationAddress.Addr[3]));
-
- // Set the subnet mask
- if ( pConfig->UseDefaultAddress ) {
- pConfig->SubnetMask.Addr[0] = 0;
- pConfig->SubnetMask.Addr[1] = 0;
- pConfig->SubnetMask.Addr[2] = 0;
- pConfig->SubnetMask.Addr[3] = 0;
- }
- else {
- pConfig->SubnetMask.Addr[0] = 0xff;
- pConfig->SubnetMask.Addr[1] = ( 128 <= pConfig->StationAddress.Addr[0]) ? 0xff : 0;
- pConfig->SubnetMask.Addr[2] = ( 192 <= pConfig->StationAddress.Addr[0]) ? 0xff : 0;
- pConfig->SubnetMask.Addr[3] = ( 224 <= pConfig->StationAddress.Addr[0]) ? 0xff : 0;
- }
- }
- // Return the operation status
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Get the option value.
-
- This routine handles the IPv4 level options.
-
- The ::EslSocketOptionGet routine calls this routine to retrieve
- the IPv4 options one at a time by name.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure
- @param [in] OptionName Name of the option
- @param [out] ppOptionData Buffer to receive address of option value
- @param [out] pOptionLength Buffer to receive the option length
-
- @retval EFI_SUCCESS - Socket data successfully received
- **/
-EFI_STATUS
-EslIp4OptionGet (
- IN ESL_SOCKET * pSocket,
- IN int OptionName,
- OUT CONST void ** __restrict ppOptionData,
- OUT socklen_t * __restrict pOptionLength
- )
-{
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- // Assume success
- pSocket->errno = 0;
- Status = EFI_SUCCESS;
-
- // Attempt to get the option
- switch ( OptionName ) {
- default:
- // Option not supported
- pSocket->errno = ENOPROTOOPT;
- Status = EFI_INVALID_PARAMETER;
- break;
-
- case IP_HDRINCL:
- *ppOptionData = (void *)&pSocket->bIncludeHeader;
- *pOptionLength = sizeof ( pSocket->bIncludeHeader );
- break;
- }
- // Return the operation status
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Set the option value.
-
- This routine handles the IPv4 level options.
-
- The ::EslSocketOptionSet routine calls this routine to adjust
- the IPv4 options one at a time by name.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure
- @param [in] OptionName Name of the option
- @param [in] pOptionValue Buffer containing the option value
- @param [in] OptionLength Length of the buffer in bytes
-
- @retval EFI_SUCCESS - Option successfully set
- **/
-EFI_STATUS
-EslIp4OptionSet (
- IN ESL_SOCKET * pSocket,
- IN int OptionName,
- IN CONST void * pOptionValue,
- IN socklen_t OptionLength
- )
-{
- BOOLEAN bTrueFalse;
- //socklen_t LengthInBytes;
- //UINT8 * pOptionData;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- // Assume success
- pSocket->errno = 0;
- Status = EFI_SUCCESS;
-
- // Determine if the option protocol matches
- //LengthInBytes = 0;
- //pOptionData = NULL;
- switch ( OptionName ) {
- default:
- // Protocol level not supported
- DEBUG (( DEBUG_INFO | DEBUG_OPTION, "ERROR - Invalid protocol option\r\n" ));
- pSocket->errno = ENOTSUP;
- Status = EFI_UNSUPPORTED;
- break;
-
- case IP_HDRINCL:
-
- // Validate the option length
- if ( sizeof ( UINT32 ) == OptionLength ) {
- // Restrict the input to TRUE or FALSE
- bTrueFalse = TRUE;
- if ( 0 == *(UINT32 *)pOptionValue ) {
- bTrueFalse = FALSE;
- }
- pOptionValue = &bTrueFalse;
-
- // Set the option value
- //pOptionData = (UINT8 *)&pSocket->bIncludeHeader;
- //LengthInBytes = sizeof ( pSocket->bIncludeHeader );
- }
- break;
- }
- // Return the operation status
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Free a receive packet
-
- This routine performs the network specific operations necessary
- to free a receive packet.
-
- This routine is called by ::EslSocketPortCloseTxDone to free a
- receive packet.
-
- @param [in] pPacket Address of an ::ESL_PACKET structure.
- @param [in, out] pRxBytes Address of the count of RX bytes
-
-**/
-VOID
-EslIp4PacketFree (
- IN ESL_PACKET * pPacket,
- IN OUT size_t * pRxBytes
- )
-{
- EFI_IP4_RECEIVE_DATA * pRxData;
- DBG_ENTER ( );
-
- //
- // Account for the receive bytes
- //
- pRxData = pPacket->Op.Ip4Rx.pRxData;
- *pRxBytes -= pRxData->HeaderLength + pRxData->DataLength;
-
- //
- // Disconnect the buffer from the packet
- //
- pPacket->Op.Ip4Rx.pRxData = NULL;
-
- //
- // Return the buffer to the IP4 driver
- //
- gBS->SignalEvent ( pRxData->RecycleSignal );
- DBG_EXIT ( );
-}
-
-
-/**
- Initialize the network specific portions of an ::ESL_PORT structure.
-
- This routine initializes the network specific portions of an
- ::ESL_PORT structure for use by the socket.
-
- This support routine is called by ::EslSocketPortAllocate
- to connect the socket with the underlying network adapter
- running the IPv4 protocol.
-
- @param [in] pPort Address of an ESL_PORT structure
- @param [in] DebugFlags Flags for debug messages
-
- @retval EFI_SUCCESS - Socket successfully created
-
- **/
-EFI_STATUS
-EslIp4PortAllocate (
- IN ESL_PORT * pPort,
- IN UINTN DebugFlags
- )
-{
- EFI_IP4_CONFIG_DATA * pConfig;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Initialize the port
- //
- pSocket = pPort->pSocket;
- pSocket->TxPacketOffset = OFFSET_OF ( ESL_PACKET, Op.Ip4Tx.TxData );
- pSocket->TxTokenEventOffset = OFFSET_OF ( ESL_IO_MGMT, Token.Ip4Tx.Event );
- pSocket->TxTokenOffset = OFFSET_OF ( EFI_IP4_COMPLETION_TOKEN, Packet.TxData );
-
- //
- // Save the cancel, receive and transmit addresses
- //
- pPort->pfnConfigure = (PFN_NET_CONFIGURE)pPort->pProtocol.IPv4->Configure;
- pPort->pfnRxCancel = (PFN_NET_IO_START)pPort->pProtocol.IPv4->Cancel;
- pPort->pfnRxPoll = (PFN_NET_POLL)pPort->pProtocol.IPv4->Poll;
- pPort->pfnRxStart = (PFN_NET_IO_START)pPort->pProtocol.IPv4->Receive;
- pPort->pfnTxStart = (PFN_NET_IO_START)pPort->pProtocol.IPv4->Transmit;
-
- //
- // Set the configuration flags
- //
- pConfig = &pPort->Context.Ip4.ModeData.ConfigData;
- pConfig->AcceptIcmpErrors = FALSE;
- pConfig->AcceptBroadcast = FALSE;
- pConfig->AcceptPromiscuous = FALSE;
- pConfig->TypeOfService = 0;
- pConfig->TimeToLive = 255;
- pConfig->DoNotFragment = FALSE;
- pConfig->RawData = FALSE;
- pConfig->ReceiveTimeout = 0;
- pConfig->TransmitTimeout = 0;
-
- //
- // Set the default protocol
- //
- pConfig->DefaultProtocol = (UINT8)pSocket->Protocol;
- pConfig->AcceptAnyProtocol = (BOOLEAN)( 0 == pConfig->DefaultProtocol );
- Status = EFI_SUCCESS;
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Receive data from a network connection.
-
- This routine attempts to return buffered data to the caller. The
- data is removed from the urgent queue if the message flag MSG_OOB
- is specified, otherwise data is removed from the normal queue.
- See the \ref ReceiveEngine section.
-
- This routine is called by ::EslSocketReceive to handle the network
- specific receive operation to support SOCK_RAW sockets.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [in] pPacket Address of an ::ESL_PACKET structure.
-
- @param [in] pbConsumePacket Address of a BOOLEAN indicating if the packet is to be consumed
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer to receive the data.
-
- @param [in] pDataLength Number of received data bytes in the buffer.
-
- @param [out] pAddress Network address to receive the remote system address
-
- @param [out] pSkipBytes Address to receive the number of bytes skipped
-
- @return Returns the address of the next free byte in the buffer.
-
- **/
-UINT8 *
-EslIp4Receive (
- IN ESL_PORT * pPort,
- IN ESL_PACKET * pPacket,
- IN BOOLEAN * pbConsumePacket,
- IN size_t BufferLength,
- IN UINT8 * pBuffer,
- OUT size_t * pDataLength,
- OUT struct sockaddr * pAddress,
- OUT size_t * pSkipBytes
- )
-{
- size_t DataBytes;
- size_t HeaderBytes;
- size_t LengthInBytes;
- struct sockaddr_in * pRemoteAddress;
- EFI_IP4_RECEIVE_DATA * pRxData;
-
- DBG_ENTER ( );
-
- //
- // Return the remote system address if requested
- //
- pRxData = pPacket->Op.Ip4Rx.pRxData;
- if ( NULL != pAddress ) {
- //
- // Build the remote address
- //
- DEBUG (( DEBUG_RX,
- "Getting packet remote address: %d.%d.%d.%d\r\n",
- pRxData->Header->SourceAddress.Addr[0],
- pRxData->Header->SourceAddress.Addr[1],
- pRxData->Header->SourceAddress.Addr[2],
- pRxData->Header->SourceAddress.Addr[3]));
- pRemoteAddress = (struct sockaddr_in *)pAddress;
- CopyMem ( &pRemoteAddress->sin_addr,
- &pRxData->Header->SourceAddress.Addr[0],
- sizeof ( pRemoteAddress->sin_addr ));
- }
-
- //
- // Copy the IP header
- //
- HeaderBytes = pRxData->HeaderLength;
- if ( HeaderBytes > BufferLength ) {
- HeaderBytes = BufferLength;
- }
- DEBUG (( DEBUG_RX,
- "0x%08x --> 0x%08x: Copy header 0x%08x bytes\r\n",
- pRxData->Header,
- pBuffer,
- HeaderBytes ));
- CopyMem ( pBuffer, pRxData->Header, HeaderBytes );
- pBuffer += HeaderBytes;
- LengthInBytes = HeaderBytes;
-
- //
- // Copy the received data
- //
- if ( 0 < ( BufferLength - LengthInBytes )) {
- pBuffer = EslSocketCopyFragmentedBuffer ( pRxData->FragmentCount,
- &pRxData->FragmentTable[0],
- BufferLength - LengthInBytes,
- pBuffer,
- &DataBytes );
- LengthInBytes += DataBytes;
- }
-
- //
- // Determine if the data is being read
- //
- if ( *pbConsumePacket ) {
- //
- // Display for the bytes consumed
- //
- DEBUG (( DEBUG_RX,
- "0x%08x: Port account for 0x%08x bytes\r\n",
- pPort,
- LengthInBytes ));
-
- //
- // Account for any discarded data
- //
- *pSkipBytes = pRxData->HeaderLength + pRxData->DataLength - LengthInBytes;
- }
-
- //
- // Return the data length and the buffer address
- //
- *pDataLength = LengthInBytes;
- DBG_EXIT_HEX ( pBuffer );
- return pBuffer;
-}
-
-
-/**
- Get the remote socket address
-
- This routine returns the address of the remote connection point
- associated with the SOCK_RAW socket.
-
- This routine is called by ::EslSocketGetPeerAddress to detemine
- the IPv4 address associated with the network adapter.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [out] pAddress Network address to receive the remote system address
-
-**/
-VOID
-EslIp4RemoteAddressGet (
- IN ESL_PORT * pPort,
- OUT struct sockaddr * pAddress
- )
-{
- struct sockaddr_in * pRemoteAddress;
- ESL_IP4_CONTEXT * pIp4;
-
- DBG_ENTER ( );
-
- //
- // Return the remote address
- //
- pIp4 = &pPort->Context.Ip4;
- pRemoteAddress = (struct sockaddr_in *)pAddress;
- pRemoteAddress->sin_family = AF_INET;
- CopyMem ( &pRemoteAddress->sin_addr,
- &pIp4->DestinationAddress.Addr[0],
- sizeof ( pRemoteAddress->sin_addr ));
-
- DBG_EXIT ( );
-}
-
-
-/**
- Set the remote address
-
- This routine sets the remote address in the port.
-
- This routine is called by ::EslSocketConnect to specify the
- remote network address.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [in] pSockAddr Network address of the remote system.
-
- @param [in] SockAddrLength Length in bytes of the network address.
-
- @retval EFI_SUCCESS The operation was successful
-
- **/
-EFI_STATUS
-EslIp4RemoteAddressSet (
- IN ESL_PORT * pPort,
- IN CONST struct sockaddr * pSockAddr,
- IN socklen_t SockAddrLength
- )
-{
- ESL_IP4_CONTEXT * pIp4;
- CONST struct sockaddr_in * pRemoteAddress;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Set the remote address
- //
- pIp4 = &pPort->Context.Ip4;
- pRemoteAddress = (struct sockaddr_in *)pSockAddr;
- pIp4->DestinationAddress.Addr[0] = (UINT8)( pRemoteAddress->sin_addr.s_addr );
- pIp4->DestinationAddress.Addr[1] = (UINT8)( pRemoteAddress->sin_addr.s_addr >> 8 );
- pIp4->DestinationAddress.Addr[2] = (UINT8)( pRemoteAddress->sin_addr.s_addr >> 16 );
- pIp4->DestinationAddress.Addr[3] = (UINT8)( pRemoteAddress->sin_addr.s_addr >> 24 );
- pPort->pSocket->bAddressSet = TRUE;
- Status = EFI_SUCCESS;
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Process the receive completion
-
- This routine keeps the IPv4 driver's buffer and queues it in
- in FIFO order to the data queue. The IP4 driver's buffer will
- be returned by either ::EslIp4Receive or ::EslSocketPortCloseTxDone.
- See the \ref ReceiveEngine section.
-
- This routine is called by the IPv4 driver when data is
- received.
-
- @param [in] Event The receive completion event
-
- @param [in] pIo The address of an ::ESL_IO_MGMT structure
-
-**/
-VOID
-EslIp4RxComplete (
- IN EFI_EVENT Event,
- IN ESL_IO_MGMT * pIo
- )
-{
- size_t LengthInBytes;
- ESL_PACKET * pPacket;
- EFI_IP4_RECEIVE_DATA * pRxData;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Get the operation status.
- //
- Status = pIo->Token.Ip4Rx.Status;
-
- //
- // Get the packet length
- //
- pRxData = pIo->Token.Ip4Rx.Packet.RxData;
- LengthInBytes = pRxData->HeaderLength + pRxData->DataLength;
-
- //{{
- // +--------------------+ +----------------------+
- // | ESL_IO_MGMT | | Data Buffer |
- // | | | (Driver owned) |
- // | +---------------+ +----------------------+
- // | | Token | ^
- // | | Rx Event | |
- // | | | +----------------------+
- // | | RxData --> | EFI_IP4_RECEIVE_DATA |
- // +----+---------------+ | (Driver owned) |
- // +----------------------+
- // +--------------------+ ^
- // | ESL_PACKET | .
- // | | .
- // | +---------------+ .
- // | | pRxData --> NULL .......
- // +----+---------------+
- //
- //
- // Save the data in the packet
- //}}
- pPacket = pIo->pPacket;
- pPacket->Op.Ip4Rx.pRxData = pRxData;
-
- //
- // Complete this request
- //
- EslSocketRxComplete ( pIo, Status, LengthInBytes, FALSE );
- DBG_EXIT ( );
-}
-
-
-/**
- Determine if the socket is configured.
-
- This routine uses the flag ESL_SOCKET::bConfigured to determine
- if the network layer's configuration routine has been called.
- This routine calls the ::EslSocketBind and configuration routines
- if they were not already called. After the port is configured,
- the \ref ReceiveEngine is started.
-
- This routine is called by EslSocketIsConfigured to verify
- that the socket is configured.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure
-
- @retval EFI_SUCCESS - The port is connected
- @retval EFI_NOT_STARTED - The port is not connected
-
- **/
- EFI_STATUS
- EslIp4SocketIsConfigured (
- IN ESL_SOCKET * pSocket
- )
-{
- UINTN Index;
- ESL_PORT * pPort;
- ESL_PORT * pNextPort;
- ESL_IP4_CONTEXT * pIp4;
- EFI_IP4_PROTOCOL * pIp4Protocol;
- EFI_STATUS Status;
- struct sockaddr_in LocalAddress;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Configure the port if necessary
- //
- if ( !pSocket->bConfigured ) {
- //
- // Fill in the port list if necessary
- //
- pSocket->errno = ENETDOWN;
- if ( NULL == pSocket->pPortList ) {
- LocalAddress.sin_len = sizeof ( LocalAddress );
- LocalAddress.sin_family = AF_INET;
- LocalAddress.sin_addr.s_addr = 0;
- LocalAddress.sin_port = 0;
- Status = EslSocketBind ( &pSocket->SocketProtocol,
- (struct sockaddr *)&LocalAddress,
- LocalAddress.sin_len,
- &pSocket->errno );
- }
-
- //
- // Walk the port list
- //
- pPort = pSocket->pPortList;
- while ( NULL != pPort ) {
- //
- // Update the raw setting
- //
- pIp4 = &pPort->Context.Ip4;
- if ( pSocket->bIncludeHeader ) {
- //
- // IP header will be included with the data on transmit
- //
- pIp4->ModeData.ConfigData.RawData = TRUE;
- }
-
- //
- // Attempt to configure the port
- //
- pNextPort = pPort->pLinkSocket;
- pIp4Protocol = pPort->pProtocol.IPv4;
- DEBUG (( DEBUG_TX,
- "0x%08x: pPort Configuring for %d.%d.%d.%d --> %d.%d.%d.%d\r\n",
- pPort,
- pIp4->ModeData.ConfigData.StationAddress.Addr[0],
- pIp4->ModeData.ConfigData.StationAddress.Addr[1],
- pIp4->ModeData.ConfigData.StationAddress.Addr[2],
- pIp4->ModeData.ConfigData.StationAddress.Addr[3],
- pIp4->DestinationAddress.Addr[0],
- pIp4->DestinationAddress.Addr[1],
- pIp4->DestinationAddress.Addr[2],
- pIp4->DestinationAddress.Addr[3]));
- Status = pIp4Protocol->Configure ( pIp4Protocol,
- &pIp4->ModeData.ConfigData );
- if ( !EFI_ERROR ( Status )) {
- //
- // Update the configuration data
- //
- Status = pIp4Protocol->GetModeData ( pIp4Protocol,
- &pIp4->ModeData,
- NULL,
- NULL );
- }
- if ( EFI_ERROR ( Status )) {
- if ( !pSocket->bConfigured ) {
- DEBUG (( DEBUG_LISTEN,
- "ERROR - Failed to configure the Ip4 port, Status: %r\r\n",
- Status ));
- switch ( Status ) {
- case EFI_ACCESS_DENIED:
- pSocket->errno = EACCES;
- break;
-
- default:
- case EFI_DEVICE_ERROR:
- pSocket->errno = EIO;
- break;
-
- case EFI_INVALID_PARAMETER:
- pSocket->errno = EADDRNOTAVAIL;
- break;
-
- case EFI_NO_MAPPING:
- pSocket->errno = EAFNOSUPPORT;
- break;
-
- case EFI_OUT_OF_RESOURCES:
- pSocket->errno = ENOBUFS;
- break;
-
- case EFI_UNSUPPORTED:
- pSocket->errno = EOPNOTSUPP;
- break;
- }
- }
- }
- else {
- DEBUG (( DEBUG_TX,
- "0x%08x: pPort Configured for %d.%d.%d.%d --> %d.%d.%d.%d\r\n",
- pPort,
- pIp4->ModeData.ConfigData.StationAddress.Addr[0],
- pIp4->ModeData.ConfigData.StationAddress.Addr[1],
- pIp4->ModeData.ConfigData.StationAddress.Addr[2],
- pIp4->ModeData.ConfigData.StationAddress.Addr[3],
- pIp4->DestinationAddress.Addr[0],
- pIp4->DestinationAddress.Addr[1],
- pIp4->DestinationAddress.Addr[2],
- pIp4->DestinationAddress.Addr[3]));
- DEBUG (( DEBUG_TX,
- "Subnet Mask: %d.%d.%d.%d\r\n",
- pIp4->ModeData.ConfigData.SubnetMask.Addr[0],
- pIp4->ModeData.ConfigData.SubnetMask.Addr[1],
- pIp4->ModeData.ConfigData.SubnetMask.Addr[2],
- pIp4->ModeData.ConfigData.SubnetMask.Addr[3]));
- DEBUG (( DEBUG_TX,
- "Route Count: %d\r\n",
- pIp4->ModeData.RouteCount ));
- for ( Index = 0; pIp4->ModeData.RouteCount > Index; Index++ ) {
- if ( 0 == Index ) {
- DEBUG (( DEBUG_TX, "Route Table:\r\n" ));
- }
- DEBUG (( DEBUG_TX,
- "%5d: %d.%d.%d.%d, %d.%d.%d.%d ==> %d.%d.%d.%d\r\n",
- Index,
- pIp4->ModeData.RouteTable[Index].SubnetAddress.Addr[0],
- pIp4->ModeData.RouteTable[Index].SubnetAddress.Addr[1],
- pIp4->ModeData.RouteTable[Index].SubnetAddress.Addr[2],
- pIp4->ModeData.RouteTable[Index].SubnetAddress.Addr[3],
- pIp4->ModeData.RouteTable[Index].SubnetMask.Addr[0],
- pIp4->ModeData.RouteTable[Index].SubnetMask.Addr[1],
- pIp4->ModeData.RouteTable[Index].SubnetMask.Addr[2],
- pIp4->ModeData.RouteTable[Index].SubnetMask.Addr[3],
- pIp4->ModeData.RouteTable[Index].GatewayAddress.Addr[0],
- pIp4->ModeData.RouteTable[Index].GatewayAddress.Addr[1],
- pIp4->ModeData.RouteTable[Index].GatewayAddress.Addr[2],
- pIp4->ModeData.RouteTable[Index].GatewayAddress.Addr[3]));
- }
- pPort->bConfigured = TRUE;
- pSocket->bConfigured = TRUE;
-
- //
- // Start the first read on the port
- //
- EslSocketRxStart ( pPort );
-
- //
- // The socket is connected
- //
- pSocket->State = SOCKET_STATE_CONNECTED;
- pSocket->errno = 0;
- }
-
- //
- // Set the next port
- //
- pPort = pNextPort;
- }
- }
-
- //
- // Determine the socket configuration status
- //
- Status = pSocket->bConfigured ? EFI_SUCCESS : EFI_NOT_STARTED;
-
- //
- // Return the port connected state.
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Buffer data for transmission over a network connection.
-
- This routine buffers data for the transmit engine in the normal
- data queue. When the \ref TransmitEngine has resources, this
- routine will start the transmission of the next buffer on the
- network connection.
-
- This routine is called by ::EslSocketTransmit to buffer
- data for transmission. The data is copied into a local buffer
- freeing the application buffer for reuse upon return. When
- necessary, this routine starts the transmit engine that
- performs the data transmission on the network connection. The
- transmit engine transmits the data a packet at a time over the
- network connection.
-
- Transmission errors are returned during the next transmission or
- during the close operation. Only buffering errors are returned
- during the current transmission attempt.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure
-
- @param [in] Flags Message control flags
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer to receive the data.
-
- @param [in] pDataLength Number of received data bytes in the buffer.
-
- @param [in] pAddress Network address of the remote system address
-
- @param [in] AddressLength Length of the remote network address structure
-
- @retval EFI_SUCCESS - Socket data successfully buffered
-
-**/
-EFI_STATUS
-EslIp4TxBuffer (
- IN ESL_SOCKET * pSocket,
- IN int Flags,
- IN size_t BufferLength,
- IN CONST UINT8 * pBuffer,
- OUT size_t * pDataLength,
- IN const struct sockaddr * pAddress,
- IN socklen_t AddressLength
- )
-{
- ESL_PACKET * pPacket;
- ESL_PACKET * pPreviousPacket;
- ESL_PORT * pPort;
- const struct sockaddr_in * pRemoteAddress;
- ESL_IP4_CONTEXT * pIp4;
- size_t * pTxBytes;
- ESL_IP4_TX_DATA * pTxData;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume failure
- //
- Status = EFI_UNSUPPORTED;
- pSocket->errno = ENOTCONN;
- *pDataLength = 0;
-
- //
- // Verify that the socket is connected
- //
- if ( SOCKET_STATE_CONNECTED == pSocket->State ) {
- //
- // Verify that there is enough room to buffer another
- // transmit operation
- //
- pTxBytes = &pSocket->TxBytes;
- if ( pSocket->MaxTxBuf > *pTxBytes ) {
- //
- // Locate the port
- //
- pPort = pSocket->pPortList;
- while ( NULL != pPort ) {
- //
- // Determine the queue head
- //
- pIp4 = &pPort->Context.Ip4;
-
- //
- // Attempt to allocate the packet
- //
- Status = EslSocketPacketAllocate ( &pPacket,
- sizeof ( pPacket->Op.Ip4Tx )
- - sizeof ( pPacket->Op.Ip4Tx.Buffer )
- + BufferLength,
- 0,
- DEBUG_TX );
- if ( !EFI_ERROR ( Status )) {
- //
- // Initialize the transmit operation
- //
- pTxData = &pPacket->Op.Ip4Tx;
- pTxData->TxData.DestinationAddress.Addr[0] = pIp4->DestinationAddress.Addr[0];
- pTxData->TxData.DestinationAddress.Addr[1] = pIp4->DestinationAddress.Addr[1];
- pTxData->TxData.DestinationAddress.Addr[2] = pIp4->DestinationAddress.Addr[2];
- pTxData->TxData.DestinationAddress.Addr[3] = pIp4->DestinationAddress.Addr[3];
- pTxData->TxData.OverrideData = NULL;
- pTxData->TxData.OptionsLength = 0;
- pTxData->TxData.OptionsBuffer = NULL;
- pTxData->TxData.TotalDataLength = (UINT32) BufferLength;
- pTxData->TxData.FragmentCount = 1;
- pTxData->TxData.FragmentTable[0].FragmentLength = (UINT32) BufferLength;
- pTxData->TxData.FragmentTable[0].FragmentBuffer = &pPacket->Op.Ip4Tx.Buffer[0];
-
- //
- // Set the remote system address if necessary
- //
- if ( NULL != pAddress ) {
- pRemoteAddress = (const struct sockaddr_in *)pAddress;
- pTxData->Override.SourceAddress.Addr[0] = pIp4->ModeData.ConfigData.StationAddress.Addr[0];
- pTxData->Override.SourceAddress.Addr[1] = pIp4->ModeData.ConfigData.StationAddress.Addr[1];
- pTxData->Override.SourceAddress.Addr[2] = pIp4->ModeData.ConfigData.StationAddress.Addr[2];
- pTxData->Override.SourceAddress.Addr[3] = pIp4->ModeData.ConfigData.StationAddress.Addr[3];
- pTxData->TxData.DestinationAddress.Addr[0] = (UINT8)pRemoteAddress->sin_addr.s_addr;
- pTxData->TxData.DestinationAddress.Addr[1] = (UINT8)( pRemoteAddress->sin_addr.s_addr >> 8 );
- pTxData->TxData.DestinationAddress.Addr[2] = (UINT8)( pRemoteAddress->sin_addr.s_addr >> 16 );
- pTxData->TxData.DestinationAddress.Addr[3] = (UINT8)( pRemoteAddress->sin_addr.s_addr >> 24 );
- pTxData->Override.GatewayAddress.Addr[0] = 0;
- pTxData->Override.GatewayAddress.Addr[1] = 0;
- pTxData->Override.GatewayAddress.Addr[2] = 0;
- pTxData->Override.GatewayAddress.Addr[3] = 0;
- pTxData->Override.Protocol = (UINT8)pSocket->Protocol;
- pTxData->Override.TypeOfService = 0;
- pTxData->Override.TimeToLive = 255;
- pTxData->Override.DoNotFragment = FALSE;
-
- //
- // Use the remote system address when sending this packet
- //
- pTxData->TxData.OverrideData = &pTxData->Override;
- }
-
- //
- // Copy the data into the buffer
- //
- CopyMem ( &pPacket->Op.Ip4Tx.Buffer[0],
- pBuffer,
- BufferLength );
-
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Display the request
- //
- DEBUG (( DEBUG_TX,
- "Send %d bytes from 0x%08x, %d.%d.%d.%d --> %d.%d.%d.%d\r\n",
- BufferLength,
- pBuffer,
- pIp4->ModeData.ConfigData.StationAddress.Addr[0],
- pIp4->ModeData.ConfigData.StationAddress.Addr[1],
- pIp4->ModeData.ConfigData.StationAddress.Addr[2],
- pIp4->ModeData.ConfigData.StationAddress.Addr[3],
- pTxData->TxData.DestinationAddress.Addr[0],
- pTxData->TxData.DestinationAddress.Addr[1],
- pTxData->TxData.DestinationAddress.Addr[2],
- pTxData->TxData.DestinationAddress.Addr[3]));
-
- //
- // Queue the data for transmission
- //
- pPacket->pNext = NULL;
- pPreviousPacket = pSocket->pTxPacketListTail;
- if ( NULL == pPreviousPacket ) {
- pSocket->pTxPacketListHead = pPacket;
- }
- else {
- pPreviousPacket->pNext = pPacket;
- }
- pSocket->pTxPacketListTail = pPacket;
- DEBUG (( DEBUG_TX,
- "0x%08x: Packet on transmit list\r\n",
- pPacket ));
-
- //
- // Account for the buffered data
- //
- *pTxBytes += BufferLength;
- *pDataLength = BufferLength;
-
- //
- // Start the transmit engine if it is idle
- //
- if ( NULL != pPort->pTxFree ) {
- EslSocketTxStart ( pPort,
- &pSocket->pTxPacketListHead,
- &pSocket->pTxPacketListTail,
- &pPort->pTxActive,
- &pPort->pTxFree );
-
- //
- // Ignore any transmit error
- //
- if ( EFI_ERROR ( pSocket->TxError )) {
- DEBUG (( DEBUG_TX,
- "0x%08x: Transmit error, Packet: 0x%08x, Status: %r\r\n",
- pPort,
- pPacket,
- pSocket->TxError ));
- }
- pSocket->TxError = EFI_SUCCESS;
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
- }
- else {
- //
- // Packet allocation failed
- //
- pSocket->errno = ENOMEM;
- break;
- }
-
- //
- // Set the next port
- //
- pPort = pPort->pLinkSocket;
- }
- }
- else {
- //
- // Not enough buffer space available
- //
- pSocket->errno = EAGAIN;
- Status = EFI_NOT_READY;
- }
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Process the transmit completion
-
- This routine use ::EslSocketTxComplete to perform the transmit
- completion processing for data packets.
-
- This routine is called by the IPv4 network layer when a data
- transmit request completes.
-
- @param [in] Event The normal transmit completion event
-
- @param [in] pIo The address of an ::ESL_IO_MGMT structure
-
-**/
-VOID
-EslIp4TxComplete (
- IN EFI_EVENT Event,
- IN ESL_IO_MGMT * pIo
- )
-{
- UINT32 LengthInBytes;
- ESL_PORT * pPort;
- ESL_PACKET * pPacket;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Locate the active transmit packet
- //
- pPacket = pIo->pPacket;
- pPort = pIo->pPort;
- pSocket = pPort->pSocket;
-
- //
- // Get the transmit length and status
- //
- LengthInBytes = pPacket->Op.Ip4Tx.TxData.TotalDataLength;
- pSocket->TxBytes -= LengthInBytes;
- Status = pIo->Token.Ip4Tx.Status;
-
- //
- // Ignore the transmit error
- //
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_TX,
- "0x%08x: Transmit completion error, Packet: 0x%08x, Status: %r\r\n",
- pPort,
- pPacket,
- Status ));
- Status = EFI_SUCCESS;
- }
-
- //
- // Complete the transmit operation
- //
- EslSocketTxComplete ( pIo,
- LengthInBytes,
- Status,
- "Raw ",
- &pSocket->pTxPacketListHead,
- &pSocket->pTxPacketListTail,
- &pPort->pTxActive,
- &pPort->pTxFree );
- DBG_EXIT ( );
-}
-
-
-/**
- Verify the adapter's IP address
-
- This support routine is called by EslSocketBindTest.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
- @param [in] pConfigData Address of the configuration data
-
- @retval EFI_SUCCESS - The IP address is valid
- @retval EFI_NOT_STARTED - The IP address is invalid
-
- **/
-EFI_STATUS
-EslIp4VerifyLocalIpAddress (
- IN ESL_PORT * pPort,
- IN EFI_IP4_CONFIG_DATA * pConfigData
- )
-{
- UINTN DataSize;
- EFI_IP4_CONFIG2_INTERFACE_INFO * pIfInfo;
- EFI_IP4_CONFIG2_PROTOCOL * pIpConfig2Protocol;
- ESL_SERVICE * pService;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Use break instead of goto
- //
- pIfInfo = NULL;
- for ( ; ; ) {
- //
- // Determine if the IP address is specified
- //
- DEBUG (( DEBUG_BIND,
- "UseDefaultAddress: %s\r\n",
- pConfigData->UseDefaultAddress ? L"TRUE" : L"FALSE" ));
- DEBUG (( DEBUG_BIND,
- "Requested IP address: %d.%d.%d.%d\r\n",
- pConfigData->StationAddress.Addr [ 0 ],
- pConfigData->StationAddress.Addr [ 1 ],
- pConfigData->StationAddress.Addr [ 2 ],
- pConfigData->StationAddress.Addr [ 3 ]));
- if ( pConfigData->UseDefaultAddress
- || (( 0 == pConfigData->StationAddress.Addr [ 0 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 1 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 2 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 3 ])))
- {
- Status = EFI_SUCCESS;
- break;
- }
-
- //
- // Open the configuration protocol
- //
- pService = pPort->pService;
- Status = gBS->OpenProtocol (
- pService->Controller,
- &gEfiIp4Config2ProtocolGuid,
- (VOID **)&pIpConfig2Protocol,
- NULL,
- NULL,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - IP Configuration Protocol not available, Status: %r\r\n",
- Status ));
- break;
- }
-
- //
- // Get the interface information size.
- //
- DataSize = 0;
- Status = pIpConfig2Protocol->GetData (
- pIpConfig2Protocol,
- Ip4Config2DataTypeInterfaceInfo,
- &DataSize,
- NULL
- );
- if ( EFI_BUFFER_TOO_SMALL != Status ) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Failed to get the interface information size, Status: %r\r\n",
- Status ));
- break;
- }
-
- //
- // Allocate the interface information buffer
- //
- pIfInfo = AllocatePool ( DataSize );
- if ( NULL == pIfInfo ) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Not enough memory to allocate the interface information buffer!\r\n" ));
- Status = EFI_OUT_OF_RESOURCES;
- break;
- }
-
- //
- // Get the interface info.
- //
- Status = pIpConfig2Protocol->GetData (
- pIpConfig2Protocol,
- Ip4Config2DataTypeInterfaceInfo,
- &DataSize,
- pIfInfo
- );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Failed to return the interface info, Status: %r\r\n",
- Status ));
- break;
- }
-
- //
- // Display the current configuration
- //
- DEBUG (( DEBUG_BIND,
- "Actual adapter IP address: %d.%d.%d.%d\r\n",
- pIfInfo->StationAddress.Addr [ 0 ],
- pIfInfo->StationAddress.Addr [ 1 ],
- pIfInfo->StationAddress.Addr [ 2 ],
- pIfInfo->StationAddress.Addr [ 3 ]));
-
- //
- // Assume the port is not configured
- //
- Status = EFI_SUCCESS;
- if (( pConfigData->StationAddress.Addr [ 0 ] == pIfInfo->StationAddress.Addr [ 0 ])
- && ( pConfigData->StationAddress.Addr [ 1 ] == pIfInfo->StationAddress.Addr [ 1 ])
- && ( pConfigData->StationAddress.Addr [ 2 ] == pIfInfo->StationAddress.Addr [ 2 ])
- && ( pConfigData->StationAddress.Addr [ 3 ] == pIfInfo->StationAddress.Addr [ 3 ])) {
- break;
- }
-
- //
- // The IP address did not match
- //
- Status = EFI_NOT_STARTED;
- break;
- }
-
- //
- // Free the buffer if necessary
- //
- if ( NULL != pIfInfo ) {
- FreePool ( pIfInfo );
- }
-
- //
- // Return the IP address status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Interface between the socket layer and the network specific
- code that supports SOCK_RAW sockets over IPv4.
-**/
-CONST ESL_PROTOCOL_API cEslIp4Api = {
- "IPv4",
- IPPROTO_IP,
- OFFSET_OF ( ESL_PORT, Context.Ip4.ModeData.ConfigData ),
- OFFSET_OF ( ESL_LAYER, pIp4List ),
- OFFSET_OF ( struct sockaddr_in, sin_zero ),
- sizeof ( struct sockaddr_in ),
- AF_INET,
- sizeof (((ESL_PACKET *)0 )->Op.Ip4Rx ),
- sizeof (((ESL_PACKET *)0 )->Op.Ip4Rx ),
- OFFSET_OF ( ESL_IO_MGMT, Token.Ip4Rx.Packet.RxData ),
- FALSE,
- EADDRNOTAVAIL,
- NULL, // Accept
- NULL, // ConnectPoll
- NULL, // ConnectStart
- EslIp4SocketIsConfigured,
- EslIp4LocalAddressGet,
- EslIp4LocalAddressSet,
- NULL, // Listen
- EslIp4OptionGet,
- EslIp4OptionSet,
- EslIp4PacketFree,
- EslIp4PortAllocate,
- NULL, // PortClose
- NULL, // PortCloseOp
- TRUE,
- EslIp4Receive,
- EslIp4RemoteAddressGet,
- EslIp4RemoteAddressSet,
- EslIp4RxComplete,
- NULL, // RxStart
- EslIp4TxBuffer,
- EslIp4TxComplete,
- NULL, // TxOobComplete
- (PFN_API_VERIFY_LOCAL_IP_ADDRESS)EslIp4VerifyLocalIpAddress
-};
diff --git a/StdLib/EfiSocketLib/ReleaseNotes.txt b/StdLib/EfiSocketLib/ReleaseNotes.txt
deleted file mode 100644
index c978e42405..0000000000
--- a/StdLib/EfiSocketLib/ReleaseNotes.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-The following issues exist with the EFI Socket Library:
-
-* Don't run socket applications or the socket driver for a long time - The IPv4Config
- and DHCP protocols are not properly running the renew and lease expiration timers.
- When the DHCP lease expires it is possible for a duplicate IP address to exist on
- the network. HSD 206136
-
-* Network adapters must be initialized prior to running the socket application - Static
- and dynamic IP address need to be properly assigned to the network adapters on the
- system. Note that sockets does not assign the IP addresses since it does not
- understand how the system is connected to the network!
-
-* The default device must contain the Efi\etc directory populated with files containing
- the proper network configuration - A template set of files is in StdLib\Efi\etc. Note
- that the resolv.conf file contains the set of DNS servers.
-
-* Since DHCP is not running when the sockets application is running, the last negotiated
- packet is no longer available. As a result, any of the options that DHCP did negotiate
- are no longer available for sockets such as the list of DNS servers.
-
-* DHCP does not request the domain name and domain name server (DNS) addresses. This
- requires that sockets use configuration files in Efi\etc!
-
-* TCPv4 transfer rate is slow (< 10 Mbits/sec) - This is an unidentified issue.
-
-* Tcp4Dxe transmits more urgent data than is sent through sockets when normal data is
- queued for transmission before the urgent data. HSD 206365
-
-* Raw socket applications are not able to pass the IP header as part of their
- payload by using the IP option IP_HDRINCL. This is because the UEFI IPv4 driver
- (Ip4Dxe) does not support RawData. HSD 206136
-
-* Only version 4 of the UEFI network stack is supported
-
diff --git a/StdLib/EfiSocketLib/Service.c b/StdLib/EfiSocketLib/Service.c
deleted file mode 100644
index 414cace00b..0000000000
--- a/StdLib/EfiSocketLib/Service.c
+++ /dev/null
@@ -1,479 +0,0 @@
-/** @file
- Connect to and disconnect from the various network layers
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "Socket.h"
-
-
-/**
- Connect to the network service bindings
-
- Walk the network service protocols on the controller handle and
- locate any that are not in use. Create ::ESL_SERVICE structures to
- manage the network layer interfaces for the socket driver. Tag
- each of the network interfaces that are being used. Finally, this
- routine calls ESL_SOCKET_BINDING::pfnInitialize to prepare the network
- interface for use by the socket layer.
-
- @param [in] BindingHandle Handle for protocol binding.
- @param [in] Controller Handle of device to work with.
-
- @retval EFI_SUCCESS This driver is added to Controller.
- @retval EFI_OUT_OF_RESOURCES No more memory available.
- @retval EFI_UNSUPPORTED This driver does not support this device.
-
-**/
-EFI_STATUS
-EFIAPI
-EslServiceConnect (
- IN EFI_HANDLE BindingHandle,
- IN EFI_HANDLE Controller
- )
-{
- BOOLEAN bInUse;
- EFI_STATUS ExitStatus;
- UINTN LengthInBytes;
- UINT8 * pBuffer;
- CONST ESL_SOCKET_BINDING * pEnd;
- VOID * pJunk;
- ESL_SERVICE ** ppServiceListHead;
- ESL_SERVICE * pService;
- CONST ESL_SOCKET_BINDING * pSocketBinding;
- EFI_SERVICE_BINDING_PROTOCOL * pServiceBinding;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume the list is empty
- //
- ExitStatus = EFI_UNSUPPORTED;
- bInUse = FALSE;
-
- //
- // Walk the list of network connection points
- //
- pSocketBinding = &cEslSocketBinding[0];
- pEnd = &pSocketBinding[ cEslSocketBindingEntries ];
- while ( pEnd > pSocketBinding ) {
- //
- // Determine if the controller supports the network protocol
- //
- Status = gBS->OpenProtocol (
- Controller,
- pSocketBinding->pNetworkBinding,
- (VOID**)&pServiceBinding,
- BindingHandle,
- Controller,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
- if ( !EFI_ERROR ( Status )) {
- //
- // Determine if the socket layer is already connected
- //
- Status = gBS->OpenProtocol (
- Controller,
- (EFI_GUID *)pSocketBinding->pTagGuid,
- &pJunk,
- BindingHandle,
- Controller,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
- if ( EFI_UNSUPPORTED == Status ) {
- //
- // Allocate a service structure since the tag is not present
- //
- LengthInBytes = sizeof ( *pService );
- Status = gBS->AllocatePool (
- EfiRuntimeServicesData,
- LengthInBytes,
- (VOID **) &pService
- );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_POOL | DEBUG_INIT,
- "0x%08x: Allocate pService, %d bytes\r\n",
- pService,
- LengthInBytes ));
-
- //
- // Set the structure signature and service binding
- //
- ZeroMem ( pService, LengthInBytes );
- pService->Signature = SERVICE_SIGNATURE;
- pService->pSocketBinding = pSocketBinding;
- pService->Controller = Controller;
- pService->pServiceBinding = pServiceBinding;
-
- //
- // Mark the controller in use
- //
- if ( !bInUse ) {
- Status = gBS->InstallMultipleProtocolInterfaces (
- &Controller,
- &gEfiCallerIdGuid,
- NULL,
- NULL
- );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO,
- "Installed: gEfiCallerIdGuid on 0x%08x\r\n",
- Controller ));
- bInUse = TRUE;
- }
- else {
- if ( EFI_INVALID_PARAMETER == Status ) {
- Status = EFI_SUCCESS;
- }
- }
- }
- if ( !EFI_ERROR ( Status )) {
- //
- // Mark the network service protocol in use
- //
- Status = gBS->InstallMultipleProtocolInterfaces (
- &Controller,
- pSocketBinding->pTagGuid,
- pService,
- NULL
- );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO,
- "Installed: %s TagGuid on 0x%08x\r\n",
- pSocketBinding->pName,
- Controller ));
-
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Connect the service to the list
- //
- pBuffer = (UINT8 *)&mEslLayer;
- pBuffer = &pBuffer[ pSocketBinding->ServiceListOffset ];
- ppServiceListHead = (ESL_SERVICE **)pBuffer;
- pService->pNext = *ppServiceListHead;
- *ppServiceListHead = pService;
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
-
- //
- // At least one service was made available
- //
- ExitStatus = EFI_SUCCESS;
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_POOL | DEBUG_INIT,
- "ERROR - Failed to install %s TagGuid on 0x%08x, Status: %r\r\n",
- pSocketBinding->pName,
- Controller,
- Status ));
- }
-
- if ( EFI_ERROR ( Status )) {
- //
- // The controller is no longer in use
- //
- if ( bInUse ) {
- gBS->UninstallMultipleProtocolInterfaces (
- Controller,
- &gEfiCallerIdGuid,
- NULL,
- NULL );
- DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO,
- "Removed: gEfiCallerIdGuid from 0x%08x\r\n",
- Controller ));
- }
- }
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_INIT,
- "ERROR - Failed to install gEfiCallerIdGuid on 0x%08x, Status: %r\r\n",
- Controller,
- Status ));
- }
-
- //
- // Release the service if necessary
- //
- if ( EFI_ERROR ( Status )) {
- gBS->FreePool ( pService );
- DEBUG (( DEBUG_POOL | DEBUG_INIT,
- "0x%08x: Free pService, %d bytes\r\n",
- pService,
- sizeof ( *pService )));
- pService = NULL;
- }
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_INIT,
- "ERROR - Failed service allocation, Status: %r\r\n",
- Status ));
- ExitStatus = EFI_OUT_OF_RESOURCES;
- break;
- }
- }
- }
-
- //
- // Set the next network protocol
- //
- pSocketBinding += 1;
- }
-
- //
- // Display the driver start status
- //
- DBG_EXIT_STATUS ( ExitStatus );
- return ExitStatus;
-}
-
-
-/**
- Shutdown the connections to the network layer by locating the
- tags on the network interfaces established by ::EslServiceConnect.
- This routine shutdowns any activity on the network interface and
- then frees the ::ESL_SERVICE structures.
-
- @param [in] BindingHandle Handle for protocol binding.
- @param [in] Controller Handle of device to stop driver on.
-
- @retval EFI_SUCCESS This driver is removed Controller.
- @retval EFI_DEVICE_ERROR The device could not be stopped due to a device error.
- @retval other This driver was not removed from this device.
-
-**/
-EFI_STATUS
-EFIAPI
-EslServiceDisconnect (
- IN EFI_HANDLE BindingHandle,
- IN EFI_HANDLE Controller
- )
-{
- UINT8 * pBuffer;
- CONST ESL_SOCKET_BINDING * pEnd;
- ESL_PORT * pPort;
- ESL_SERVICE * pPreviousService;
- ESL_SERVICE * pService;
- ESL_SERVICE ** ppServiceListHead;
- CONST ESL_SOCKET_BINDING * pSocketBinding;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Walk the list of network connection points in reverse order
- //
- pEnd = &cEslSocketBinding[0];
- pSocketBinding = &pEnd[ cEslSocketBindingEntries ];
- while ( pEnd < pSocketBinding ) {
- //
- // Set the next network protocol
- //
- pSocketBinding -= 1;
-
- //
- // Determine if the driver connected
- //
- Status = gBS->OpenProtocol (
- Controller,
- (EFI_GUID *)pSocketBinding->pTagGuid,
- (VOID **)&pService,
- BindingHandle,
- Controller,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
- if ( !EFI_ERROR ( Status )) {
-
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Walk the list of ports
- //
- pPort = pService->pPortList;
- while ( NULL != pPort ) {
- //
- // Remove the port from the port list
- //
- pPort->pService = NULL;
- pService->pPortList = pPort->pLinkService;
-
- //
- // Close the port
- //
- EslSocketPortCloseStart ( pPort,
- TRUE,
- DEBUG_POOL | DEBUG_INIT );
-
- //
- // Set the next port
- //
- pPort = pService->pPortList;
- }
-
- //
- // Remove the service from the service list
- //
- pBuffer = (UINT8 *)&mEslLayer;
- pBuffer = &pBuffer[ pService->pSocketBinding->ServiceListOffset ];
- ppServiceListHead = (ESL_SERVICE **)pBuffer;
- pPreviousService = *ppServiceListHead;
- if ( pService == pPreviousService ) {
- //
- // Remove the service from the beginning of the list
- //
- *ppServiceListHead = pService->pNext;
- }
- else {
- //
- // Remove the service from the middle of the list
- //
- while ( NULL != pPreviousService ) {
- if ( pService == pPreviousService->pNext ) {
- pPreviousService->pNext = pService->pNext;
- break;
- }
- pPreviousService = pPreviousService->pNext;
- }
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
-
- //
- // Break the driver connection
- //
- Status = gBS->UninstallMultipleProtocolInterfaces (
- Controller,
- pSocketBinding->pTagGuid,
- pService,
- NULL );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_POOL | DEBUG_INIT,
- "Removed: %s TagGuid from 0x%08x\r\n",
- pSocketBinding->pName,
- Controller ));
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_POOL | DEBUG_INIT,
- "ERROR - Failed to removed %s TagGuid from 0x%08x, Status: %r\r\n",
- pSocketBinding->pName,
- Controller,
- Status ));
- }
-
- //
- // Free the service structure
- //
- Status = gBS->FreePool ( pService );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_POOL | DEBUG_INIT,
- "0x%08x: Free pService, %d bytes\r\n",
- pService,
- sizeof ( *pService )));
- }
- else {
- DEBUG (( DEBUG_POOL | DEBUG_INIT,
- "ERROR - Failed to free pService 0x%08x, Status: %r\r\n",
- pService,
- Status ));
- }
- pService = NULL;
- }
- }
-
- //
- // The controller is no longer in use
- //
- gBS->UninstallMultipleProtocolInterfaces (
- Controller,
- &gEfiCallerIdGuid,
- NULL,
- NULL );
- DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO,
- "Removed: gEfiCallerIdGuid from 0x%08x\r\n",
- Controller ));
-
- //
- // The driver is disconnected from the network controller
- //
- Status = EFI_SUCCESS;
-
- //
- // Display the driver start status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-
-/**
-Initialize the service layer
-
-@param [in] ImageHandle Handle for the image.
-
-**/
-VOID
-EFIAPI
-EslServiceLoad (
- IN EFI_HANDLE ImageHandle
- )
-{
- ESL_LAYER * pLayer;
-
- //
- // Save the image handle
- //
- pLayer = &mEslLayer;
- ZeroMem ( pLayer, sizeof ( *pLayer ));
- pLayer->Signature = LAYER_SIGNATURE;
- pLayer->ImageHandle = ImageHandle;
-
- //
- // Connect the service binding protocol to the image handle
- //
- pLayer->pServiceBinding = &mEfiServiceBinding;
-}
-
-
-/**
- Shutdown the service layer
-
-**/
-VOID
-EFIAPI
-EslServiceUnload (
- VOID
- )
-{
- ESL_LAYER * pLayer;
-
- //
- // Undo the work by ServiceLoad
- //
- pLayer = &mEslLayer;
- pLayer->ImageHandle = NULL;
- pLayer->pServiceBinding = NULL;
-}
diff --git a/StdLib/EfiSocketLib/Socket.c b/StdLib/EfiSocketLib/Socket.c
deleted file mode 100644
index d782b435e6..0000000000
--- a/StdLib/EfiSocketLib/Socket.c
+++ /dev/null
@@ -1,5795 +0,0 @@
-/** @file
- Implement the socket support for the socket layer.
-
- Socket States:
- * Bound - pSocket->PortList is not NULL
- * Listen - AcceptWait event is not NULL
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-
- \section DataStructures Data Structures
-
- <code><pre>
-
- +---------------+ +-------------+ +-------------+
- Service Lists | ::ESL_SERVICE |-->| ESL_SERVICE |-->| ESL_SERVICE |--> NULL (pNext)
- +---------------+ +-------------+ +-------------+
- ^ | (pPortList) |
- pUdp4List ^ | pTcp4List | |
- | | | |
- ^ | | | |
- pIp4List | | | | |
- +---------------+ | |
- | ::ESL_LAYER | ::mEslLayer | |
- +---------------+ | |
- | (pSocketList) | |
- Socket List V V V
- +---------------+ +-------------+ +-------------+
- | ::ESL_SOCKET |-->| ::ESL_PORT |-->| ESL_PORT |--> NULL (pLinkSocket)
- +---------------+ +-------------+ +-------------+
- | | |
- | | V
- V V NULL
- +-------------+ +-------------+
- | ESL_SOCKET |-->| ESL_PORT |--> NULL
- +-------------+ +-------------+
- | | | | | |
- V | | | | V
- NULL | | | | NULL
- (pNext) | | | | (pLinkService)
- | | | | pRxPacketListHead
- | | | `-----------------------------------------------.
- | | | pRxOobPacketListHead |
- | | `--------------------------------. |
- | | pTxPacketListHead | |
- | `---------------. | |
- pTxOobPacketListHead | | | |
- V V V V
- +--------------+ +------------+ +------------+ +------------+
- | ::ESL_PACKET | | ESL_PACKET | | ESL_PACKET | | ESL_PACKET |
- +--------------+ +------------+ +------------+ +------------+
- | | | |
- V V V V
- +------------+ +------------+ +------------+ +------------+
- | ESL_PACKET | | ESL_PACKET | | ESL_PACKET | | ESL_PACKET |
- +------------+ +------------+ +------------+ +------------+
- | | | |
- V V V V
- NULL NULL NULL NULL
- (pNext)
-
- </pre></code>
-
- ::mEslLayer is the one and only ::ESL_LAYER structure. It connects directly or
- indirectly to the other data structures. The ESL_LAYER structure has a unique
- service list for each of the network protocol interfaces.
-
- ::ESL_SERVICE manages the network interfaces for a given transport type (IP4, TCP4, UDP4, etc.)
-
- ::ESL_SOCKET manages the activity for a single socket instance. As such, it contains
- the ::EFI_SOCKET_PROTOCOL structure which the BSD socket library uses as the object
- reference and the API into the EFI socket library.
-
- ::ESL_PORT manages the connection with a single instance of the lower layer network.
- This structure is the socket equivalent of an IP connection or a TCP or UDP port.
-
- ::ESL_PACKET buffers data for transmit and receive. There are four queues connected
- to the ::ESL_SOCKET that manage the data:
- <ul>
- <li>ESL_SOCKET::pRxPacketListHead - Normal (low) priority receive data</li>
- <li>ESL_SOCKET::pRxOobPacketListHead - High (out-of-band or urgent) priority receive data</li>
- <li>ESL_SOCKET::pTxPacketListHead - Normal (low) priority transmit data</li>
- <li>ESL_SOCKET::pTxOobPacketListHead - High (out-of-band or urgent) priority transmit data</li>
- </ul>
- The selection of the transmit queue is controlled by the MSG_OOB flag on the transmit
- request as well as the socket option SO_OOBINLINE. The receive queue is selected by
- the URGENT data flag for TCP and the setting of the socket option SO_OOBINLINE.
-
- Data structure synchronization is done by raising TPL to TPL_SOCKET. Modifying
- critical elements within the data structures must be done at this TPL. TPL is then
- restored to the previous level. Note that the code verifies that all callbacks are
- entering at TPL_SOCKETS for proper data structure synchronization.
-
- \section PortCloseStateMachine Port Close State Machine
-
- The port close state machine walks the port through the necessary
- states to stop activity on the port and get it into a state where
- the resources may be released. The state machine consists of the
- following arcs and states:
-
- <code><pre>
-
- +--------------------------+
- | Open |
- +--------------------------+
- |
- | ::EslSocketPortCloseStart
- V
- +--------------------------+
- | PORT_STATE_CLOSE_STARTED |
- +--------------------------+
- |
- | ::EslSocketPortCloseTxDone
- V
- +--------------------------+
- | PORT_STATE_CLOSE_TX_DONE |
- +--------------------------+
- |
- | ::EslSocketPortCloseComplete
- V
- +--------------------------+
- | PORT_STATE_CLOSE_DONE |
- +--------------------------+
- |
- | ::EslSocketPortCloseRxDone
- V
- +--------------------------+
- | PORT_STATE_CLOSE_RX_DONE |
- +--------------------------+
- |
- | ::EslSocketPortClose
- V
- +--------------------------+
- | Closed |
- +--------------------------+
-
- </pre></code>
-
- <ul>
- <li>Arc: ::EslSocketPortCloseStart - Marks the port as closing and
- initiates the port close operation</li>
- <li>State: PORT_STATE_CLOSE_STARTED</li>
- <li>Arc: ::EslSocketPortCloseTxDone - Waits until all of the transmit
- operations to complete. After all of the transmits are complete,
- this routine initiates the network specific close operation by calling
- through ESL_PROTOCOL_API::pfnPortCloseOp. One such routine is
- ::EslTcp4PortCloseOp.
- </li>
- <li>State: PORT_STATE_CLOSE_TX_DONE</li>
- <li>Arc: ::EslSocketPortCloseComplete - Called when the close operation is
- complete. After the transition to PORT_STATE_CLOSE_DONE,
- this routine calls ::EslSocketRxCancel to abort the pending receive operations.
- </li>
- <li>State: PORT_STATE_CLOSE_DONE</li>
- <li>Arc: ::EslSocketPortCloseRxDone - Waits until all of the receive
- operation have been cancelled. After the transition to
- PORT_STATE_CLOSE_RX_DONE, this routine calls ::EslSocketPortClose.
- </li>
- <li>State: PORT_STATE_CLOSE_RX_DONE</li>
- <li>Arc: ::EslSocketPortClose - This routine discards any receive buffers
- using a network specific support routine via ESL_PROTOCOL_API::pfnPacketFree.
- This routine then releases the port resources allocated by ::EslSocketPortAllocate
- and calls the network specific port close routine (e.g. ::EslTcp4PortClose)
- via ESL_PROTOCOL_API::pfnPortClose to release any network specific resources.
- </li>
- </ul>
-
-
- \section ReceiveEngine Receive Engine
-
- The receive path accepts data from the network and queues (buffers) it for the
- application. Flow control is applied once a maximum amount of buffering is reached
- and is released when the buffer usage drops below that limit. Eventually the
- application requests data from the socket which removes entries from the queue and
- returns the data.
-
- The receive engine is the state machine which reads data from the network and
- fills the queue with received packets. The receive engine uses two data structures
- to manage the network receive opeations and the buffers.
-
- At a high level, the ::ESL_IO_MGMT structures are managing the tokens and
- events for the interface to the UEFI network stack. The ::ESL_PACKET
- structures are managing the receive data buffers. The receive engine
- connects these two structures in the network specific receive completion
- routines.
-
-<code><pre>
-
- +------------------+
- | ::ESL_PORT |
- | |
- +------------------+
- | ::ESL_IO_MGMT |
- +------------------+
- | ESL_IO_MGMT |
- +------------------+
- . .
- . ESL_IO_MGMT .
- . .
- +------------------+
-
-</pre></code>
-
- The ::ESL_IO_MGMT structures are allocated as part of the ::ESL_PORT structure in
- ::EslSocketPortAllocate. The ESL_IO_MGMT structures are separated and placed on
- the free list by calling ::EslSocketIoInit. The ESL_IO_MGMT structure contains
- the network layer specific receive completion token and event. The receive engine
- is eventually shutdown by ::EslSocketPortCloseTxDone and the resources in these
- structures are released in ::EslSocketPortClose by a call to ::EslSocketIoFree.
-
-<code><pre>
-
- pPort->pRxActive
- |
- V
- +-------------+ +-------------+ +-------------+
- Active | ESL_IO_MGMT |-->| ESL_IO_MGMT |-->| ESL_IO_MGMT |--> NULL
- +-------------+ +-------------+ +-------------+
-
- +-------------+ +-------------+ +-------------+
- Free | ESL_IO_MGMT |-->| ESL_IO_MGMT |-->| ESL_IO_MGMT |--> NULL
- +-------------+ +-------------+ +-------------+
- ^
- |
- pPort->pRxFree
-</pre></code>
-
- The receive engine is started by calling ::EslSocketRxStart. Flow control pauses
- the receive engine by stopping the calls to EslSocketRxStart when the amount of
- receive data waiting for the application meets or exceeds MAX_RX_DATA. After
- the application reads enough data that the amount of buffering drops below this
- limit, the calls to EslSockeRxStart continue which releases the flow control.
-
- Receive flow control is applied when the port is created, since no receive
- operation are pending to the low layer network driver. The flow control gets
- released when the low layer network port is configured or the first receive
- operation is posted. Flow control remains in the released state until the
- maximum buffer space is consumed. During this time, ::EslSocketRxComplete
- calls ::EslSocketRxStart. Flow control is applied in EslSocketRxComplete
- by skipping the call to EslSocketRxStart. Flow control is eventually
- released in ::EslSocketReceive when the buffer space drops below the
- maximum amount causing EslSocketReceive to call EslSocketRxStart.
-
-<code><pre>
-
- +------------+ +------------+
- High .----->| ESL_PACKET |-->| ESL_PACKET |--> NULL (pNext)
- Priority | +------------+ +------------+
- |
- | pRxOobPacketListHead
- +------------+
- | ::ESL_SOCKET |
- +------------+
- | pRxPacketListHead
- Low |
- Priority | +------------+ +------------+ +------------+
- `----->| ::ESL_PACKET |-->| ESL_PACKET |-->| ESL_PACKET |--> NULL
- +------------+ +------------+ +------------+
-
-</pre></code>
-
- ::EslSocketRxStart connects an ::ESL_PACKET structure to the ::ESL_IO_MGMT structure
- and then calls the network layer to start the receive operation. Upon
- receive completion, ::EslSocketRxComplete breaks the connection between these
- structrues and places the ESL_IO_MGMT structure onto the ESL_PORT::pRxFree list to
- make token and event available for another receive operation. EslSocketRxComplete
- then queues the ESL_PACKET structure (data packet) to either the
- ESL_SOCKET::pRxOobPacketListTail or ESL_SOCKET::pRxPacketListTail depending on
- whether urgent or normal data was received. Finally ::EslSocketRxComplete attempts
- to start another receive operation.
-
-<code><pre>
-
- Setup for IP4 and UDP4
-
- +--------------------+
- | ESL_IO_MGMT |
- | |
- | +---------------+
- | | Token |
- | | RxData --> NULL
- +----+---------------+
- |
- V
- +--------------------+
- | ESL_PACKET |
- | |
- | +---------------+
- | | pRxData --> NULL
- +----+---------------+
-
- Completion for IP4 and UDP4
-
- +--------------------+ +----------------------+
- | ESL_IO_MGMT | | Data Buffer |
- | | | (Driver owned) |
- | +---------------+ +----------------------+
- | | Token | ^
- | | Rx Event | |
- | | | +----------------------+
- | | RxData --> | EFI_IP4_RECEIVE_DATA |
- +----+---------------+ | (Driver owned) |
- | +----------------------+
- V ^
- +--------------------+ .
- | ESL_PACKET | .
- | | .
- | +---------------+ .
- | | pRxData --> NULL .......
- +----+---------------+
-
-
- Setup and completion for TCP4
-
- +--------------------+ +--------------------------+
- | ESL_IO_MGMT |-->| ESL_PACKET |
- | | | |
- | +---------------+ +----------------------+ |
- | | Token | | EFI_IP4_RECEIVE_DATA | |
- | | RxData --> | | |
- | | | +----------------------+---+
- | | Event | | Data Buffer |
- +----+---------------+ | |
- | |
- +--------------------------+
-
-</pre></code>
-
- To minimize the number of buffer copies, the data is not copied until the
- application makes a receive call. At this point socket performs a single copy
- in the receive path to move the data from the buffer filled by the network layer
- into the application's buffer.
-
- The IP4 and UDP4 drivers go one step further to reduce buffer copies. They
- allow the socket layer to hold on to the actual receive buffer until the
- application has performed a receive operation or closes the socket. Both
- of theses operations return the buffer to the lower layer network driver
- by calling ESL_PROTOCOL_API::pfnPacketFree.
-
- When a socket application wants to receive data it indirectly calls
- ::EslSocketReceive to remove data from one of the receive data queues. This routine
- removes the next available packet from ESL_SOCKET::pRxOobPacketListHead or
- ESL_SOCKET::pRxPacketListHead and copies the data from the packet
- into the application's buffer. For SOCK_STREAM sockets, if the packet
- contains more data then the ESL_PACKET structures remains at the head of the
- receive queue for the next application receive
- operation. For SOCK_DGRAM, SOCK_RAW and SOCK_SEQ_PACKET sockets, the ::ESL_PACKET
- structure is removed from the head of the receive queue and any remaining data is
- discarded as the packet is placed on the free queue.
-
- During socket layer shutdown, ::EslSocketShutdown calls ::EslSocketRxCancel to
- cancel any pending receive operations. EslSocketRxCancel calls the network specific
- cancel routine using ESL_PORT::pfnRxCancel.
-
-
- \section TransmitEngine Transmit Engine
-
- Application calls to ::EslSocketTransmit cause data to be copied into a buffer.
- The buffer exists as an extension to an ESL_PACKET structure and the structure
- is placed at the end of the transmit queue.
-
-<code><pre>
-
- *ppQueueHead: pSocket->pRxPacketListHead or pSocket->pRxOobPacketListHead
- |
- V
- +------------+ +------------+ +------------+
- Data | ESL_PACKET |-->| ESL_PACKET |-->| ESL_PACKET |--> NULL
- +------------+ +------------+ +------------+
- ^
- |
- *ppQueueTail: pSocket->pRxPacketListTail or pSocket->pRxOobPacketListTail
-
-</pre></code>
-
- There are actually two transmit queues the normal or low priority queue which is
- the default and the urgent or high priority queue which is addressed by specifying
- the MSG_OOB flag during the transmit request. Associated with each queue is a
- transmit engine which is responsible for sending the data in that queue.
-
- The transmit engine is the state machine which removes entries from the head
- of the transmit queue and causes the data to be sent over the network.
-
-<code><pre>
-
- +--------------------+ +--------------------+
- | ESL_IO_MGMT | | ESL_PACKET |
- | | | |
- | +---------------+ +----------------+ |
- | | Token | | Buffer Length | |
- | | TxData --> | Buffer Address | |
- | | | +----------------+---+
- | | Event | | Data Buffer |
- +----+---------------+ | |
- +--------------------+
-</pre></code>
-
- At a high level, the transmit engine uses a couple of data structures
- to manage the data flow. The ::ESL_IO_MGMT structures manage the tokens and
- events for the interface to the UEFI network stack. The ::ESL_PACKET
- structures manage the data buffers that get sent. The transmit
- engine connects these two structures prior to transmission and disconnects
- them upon completion.
-
-<code><pre>
-
- pPort->pTxActive or pTxOobActive
- |
- V
- +-------------+ +-------------+ +-------------+
- Active | ESL_IO_MGMT |-->| ESL_IO_MGMT |-->| ESL_IO_MGMT |--> NULL
- +-------------+ +-------------+ +-------------+
-
- +-------------+ +-------------+ +-------------+
- Free | ESL_IO_MGMT |-->| ESL_IO_MGMT |-->| ESL_IO_MGMT |--> NULL
- +-------------+ +-------------+ +-------------+
- ^
- |
- pPort->pTxFree or pTxOobFree
-
-</pre></code>
-
- The transmit engine manages multiple transmit operations using the
- active and free lists shown above. ::EslSocketPortAllocate allocates the
- ::ESL_IO_MGMT structures as an extension to the ::ESL_PORT structure.
- This routine places the ESL_IO_MGMT structures on the free list by calling
- ::EslSocketIoInit. During their lifetime, the ESL_IO_MGMT structures
- will move from the free list to the active list and back again. The
- active list contains the packets that are actively being processed by
- the UEFI network stack. Eventually the ESL_IO_MGMT structures will be
- removed from the free list and be deallocated by the EslSocketPortClose
- routine.
-
- The network specific code calls the ::EslSocketTxStart routine
- to hand a packet to the network stack. EslSocketTxStart connects
- the transmit packet (::ESL_PACKET) to an ::ESL_IO_MGMT structure
- and then queues the result to one of the active lists:
- ESL_PORT::pTxActive or ESL_PORT::pTxOobActive. The routine then
- hands the packet to the network stack.
-
- Upon completion, the network specific TxComplete routine calls
- ::EslSocketTxComplete to disconnect the transmit packet from the
- ESL_IO_MGMT structure and frees the ::ESL_PACKET structure by calling
- ::EslSocketPacketFree. The routine places the ::ESL_IO_MGMT structure
- into the free list either ESL_PORT::pTxFree or ESL_PORT::pTxOobFree.
- EslSocketTxComplete then starts the next transmit operation while
- the socket is active or calls the ::EslSocketPortCloseTxDone routine
- when the socket is shutting down.
-
-**/
-
-#include "Socket.h"
-
-
-/** Socket driver connection points
-
- List the network stack connection points for the socket driver.
-**/
-CONST ESL_SOCKET_BINDING cEslSocketBinding[] = {
- { L"Ip4",
- &gEfiIp4ServiceBindingProtocolGuid,
- &gEfiIp4ProtocolGuid,
- &mEslIp4ServiceGuid,
- OFFSET_OF ( ESL_LAYER, pIp4List ),
- 4, // RX buffers
- 4, // TX buffers
- 0 }, // TX Oob buffers
- { L"Tcp4",
- &gEfiTcp4ServiceBindingProtocolGuid,
- &gEfiTcp4ProtocolGuid,
- &mEslTcp4ServiceGuid,
- OFFSET_OF ( ESL_LAYER, pTcp4List ),
- 4, // RX buffers
- 4, // TX buffers
- 4 }, // TX Oob buffers
- { L"Tcp6",
- &gEfiTcp6ServiceBindingProtocolGuid,
- &gEfiTcp6ProtocolGuid,
- &mEslTcp6ServiceGuid,
- OFFSET_OF ( ESL_LAYER, pTcp6List ),
- 4, // RX buffers
- 4, // TX buffers
- 4 }, // TX Oob buffers
- { L"Udp4",
- &gEfiUdp4ServiceBindingProtocolGuid,
- &gEfiUdp4ProtocolGuid,
- &mEslUdp4ServiceGuid,
- OFFSET_OF ( ESL_LAYER, pUdp4List ),
- 4, // RX buffers
- 4, // TX buffers
- 0 }, // TX Oob buffers
- { L"Udp6",
- &gEfiUdp6ServiceBindingProtocolGuid,
- &gEfiUdp6ProtocolGuid,
- &mEslUdp6ServiceGuid,
- OFFSET_OF ( ESL_LAYER, pUdp6List ),
- 4, // RX buffers
- 4, // TX buffers
- 0 } // TX Oob buffers
-};
-
-CONST UINTN cEslSocketBindingEntries = DIM ( cEslSocketBinding );
-
-/// APIs to support the various socket types for the v4 network stack.
-CONST ESL_PROTOCOL_API * cEslAfInetApi[] = {
- NULL, // 0
- &cEslTcp4Api, // SOCK_STREAM
- &cEslUdp4Api, // SOCK_DGRAM
- &cEslIp4Api, // SOCK_RAW
- NULL, // SOCK_RDM
- &cEslTcp4Api // SOCK_SEQPACKET
-};
-
-/// Number of entries in the v4 API array ::cEslAfInetApi.
-CONST int cEslAfInetApiSize = DIM ( cEslAfInetApi );
-
-
-/// APIs to support the various socket types for the v6 network stack.
-CONST ESL_PROTOCOL_API * cEslAfInet6Api[] = {
- NULL, // 0
- &cEslTcp6Api, // SOCK_STREAM
- &cEslUdp6Api, // SOCK_DGRAM
- NULL, // SOCK_RAW
- NULL, // SOCK_RDM
- &cEslTcp6Api // SOCK_SEQPACKET
-};
-
-/// Number of entries in the v6 API array ::cEslAfInet6Api.
-CONST int cEslAfInet6ApiSize = DIM ( cEslAfInet6Api );
-
-
-/// Global management structure for the socket layer.
-ESL_LAYER mEslLayer;
-
-
-/** Initialize an endpoint for network communication.
-
- This routine initializes the communication endpoint.
-
- The ::socket routine calls this routine indirectly to create
- the communication endpoint.
-
- @param[in] pSocketProtocol Address of the socket protocol structure.
- @param[in] domain Select the family of protocols for the client or server
- application. See the ::socket documentation for values.
- @param[in] type Specifies how to make the network connection.
- See the ::socket documentation for values.
- @param[in] protocol Specifies the lower layer protocol to use.
- See the ::socket documentation for values.
- @param[out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket successfully created
- @retval EFI_INVALID_PARAMETER - Invalid domain value, errno = EAFNOSUPPORT
- @retval EFI_INVALID_PARAMETER - Invalid type value, errno = EINVAL
- @retval EFI_INVALID_PARAMETER - Invalid protocol value, errno = EINVAL
- **/
-EFI_STATUS
-EslSocket (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int domain,
- IN int type,
- IN int protocol,
- IN int * pErrno
- )
-{
- CONST ESL_PROTOCOL_API * pApi;
- CONST ESL_PROTOCOL_API ** ppApiArray;
- CONST ESL_PROTOCOL_API ** ppApiArrayEnd;
- int ApiArraySize;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
- int errno;
-
- DBG_ENTER ( );
-
- // Locate the socket
- pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );
-
- // Set the default domain if necessary
- if ( AF_UNSPEC == domain ) {
- domain = AF_INET;
- }
-
- // Assume success
- errno = 0;
- Status = EFI_SUCCESS;
-
- // Use break instead of goto
- for ( ; ; ) {
- // Validate the domain value
- if (( AF_INET != domain )
- && ( AF_INET6 != domain )
- && ( AF_LOCAL != domain )) {
- DEBUG (( DEBUG_ERROR | DEBUG_SOCKET,
- "ERROR - Invalid domain value\r\n" ));
- Status = EFI_INVALID_PARAMETER;
- errno = EAFNOSUPPORT;
- break;
- }
-
- // Determine the protocol APIs
- ppApiArray = NULL;
- ApiArraySize = 0;
- if (( AF_INET == domain )
- || ( AF_LOCAL == domain )) {
- ppApiArray = &cEslAfInetApi[0];
- ApiArraySize = cEslAfInetApiSize;
- }
- else {
- ppApiArray = &cEslAfInet6Api[0];
- ApiArraySize = cEslAfInet6ApiSize;
- }
-
- // Set the default type if necessary
- if ( 0 == type ) {
- type = SOCK_STREAM;
- }
-
- // Validate the type value
- if (( type >= ApiArraySize )
- || ( NULL == ppApiArray )
- || ( NULL == ppApiArray[ type ])) {
- DEBUG (( DEBUG_ERROR | DEBUG_SOCKET,
- "ERROR - Invalid type value\r\n" ));
- // The socket type is not supported
- Status = EFI_INVALID_PARAMETER;
- errno = EPROTOTYPE;
- break;
- }
-
- // Set the default protocol if necessary
- pApi = ppApiArray[ type ];
- if ( 0 == protocol ) {
- protocol = pApi->DefaultProtocol;
- }
-
- // Validate the protocol value
- if (( pApi->DefaultProtocol != protocol )
- && ( SOCK_RAW != type )) {
- Status = EFI_INVALID_PARAMETER;
-
- // Assume that the driver supports this protocol
- ppApiArray = &cEslAfInetApi[0];
- ppApiArrayEnd = &ppApiArray [ cEslAfInetApiSize ];
- while ( ppApiArrayEnd > ppApiArray ) {
- pApi = *ppApiArray;
- if ( protocol == pApi->DefaultProtocol ) {
- break;
- }
- ppApiArray += 1;
- }
- if ( ppApiArrayEnd <= ppApiArray ) {
- // Verify against the IPv6 table
- ppApiArray = &cEslAfInet6Api[0];
- ppApiArrayEnd = &ppApiArray [ cEslAfInet6ApiSize ];
- while ( ppApiArrayEnd > ppApiArray ) {
- pApi = *ppApiArray;
- if ( protocol == pApi->DefaultProtocol ) {
- break;
- }
- ppApiArray += 1;
- }
- }
- if ( ppApiArrayEnd <= ppApiArray ) {
- DEBUG (( DEBUG_ERROR | DEBUG_SOCKET,
- "ERROR - The protocol is not supported!\r\n" ));
- errno = EPROTONOSUPPORT;
- break;
- }
-
- // The driver does not support this protocol
- DEBUG (( DEBUG_ERROR | DEBUG_SOCKET,
- "ERROR - The protocol does not support this socket type!\r\n" ));
- errno = EPROTONOSUPPORT;
- errno = EPROTOTYPE;
- break;
- }
- // Save the socket attributes
- pSocket->pApi = pApi;
- pSocket->Domain = domain;
- pSocket->Type = type;
- pSocket->Protocol = protocol;
-
- // Done
- break;
- }
- // Return the operation status
- if ( NULL != pErrno ) {
- *pErrno = errno;
- }
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Accept a network connection.
-
- This routine calls the network specific layer to remove the next
- connection from the FIFO.
-
- The ::accept calls this routine to poll for a network
- connection to the socket. When a connection is available
- this routine returns the ::EFI_SOCKET_PROTOCOL structure address
- associated with the new socket and the remote network address
- if requested.
-
- @param[in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param[in] pSockAddr Address of a buffer to receive the remote
- network address.
- @param[in,out] pSockAddrLength Length in bytes of the address buffer.
- On output specifies the length of the
- remote network address.
- @param[out] ppSocketProtocol Address of a buffer to receive the
- ::EFI_SOCKET_PROTOCOL instance
- associated with the new socket.
- @param[out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS New connection successfully created
- @retval EFI_NOT_READY No connection is available
- **/
-EFI_STATUS
-EslSocketAccept (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN struct sockaddr * pSockAddr,
- IN OUT socklen_t * pSockAddrLength,
- IN EFI_SOCKET_PROTOCOL ** ppSocketProtocol,
- IN int * pErrno
- )
-{
- ESL_SOCKET * pNewSocket;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Validate the socket
- //
- pSocket = NULL;
- pNewSocket = NULL;
- if ( NULL != pSocketProtocol ) {
- pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );
-
- //
- // Verify the API
- //
- if ( NULL == pSocket->pApi->pfnAccept ) {
- Status = EFI_UNSUPPORTED;
- pSocket->errno = ENOTSUP;
- }
- else {
- //
- // Validate the sockaddr
- //
- if (( NULL != pSockAddr )
- && ( NULL == pSockAddrLength )) {
- DEBUG (( DEBUG_ACCEPT,
- "ERROR - pSockAddr is NULL!\r\n" ));
- Status = EFI_INVALID_PARAMETER;
- pSocket->errno = EFAULT;
- }
- else {
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Verify that the socket is in the listen state
- //
- if ( SOCKET_STATE_LISTENING != pSocket->State ) {
- DEBUG (( DEBUG_ACCEPT,
- "ERROR - Socket is not listening!\r\n" ));
- if ( NULL == pSocket->pApi->pfnAccept ) {
- //
- // Socket does not support listen
- //
- pSocket->errno = EOPNOTSUPP;
- Status = EFI_UNSUPPORTED;
- }
- else {
- //
- // Socket supports listen, but not in listen state
- //
- pSocket->errno = EINVAL;
- Status = EFI_NOT_STARTED;
- }
- }
- else {
- //
- // Determine if a socket is available
- //
- if ( 0 == pSocket->FifoDepth ) {
- //
- // No connections available
- // Determine if any ports are available
- //
- if ( NULL == pSocket->pPortList ) {
- //
- // No ports available
- //
- Status = EFI_DEVICE_ERROR;
- pSocket->errno = EINVAL;
-
- //
- // Update the socket state
- //
- pSocket->State = SOCKET_STATE_NO_PORTS;
- }
- else {
- //
- // Ports are available
- // No connection requests at this time
- //
- Status = EFI_NOT_READY;
- pSocket->errno = EAGAIN;
- }
- }
- else {
-
- //
- // Attempt to accept the connection and
- // get the remote network address
- //
- pNewSocket = pSocket->pFifoHead;
- ASSERT ( NULL != pNewSocket );
- Status = pSocket->pApi->pfnAccept ( pNewSocket,
- pSockAddr,
- pSockAddrLength );
- if ( !EFI_ERROR ( Status )) {
- //
- // Remove the new socket from the list
- //
- pSocket->pFifoHead = pNewSocket->pNextConnection;
- if ( NULL == pSocket->pFifoHead ) {
- pSocket->pFifoTail = NULL;
- }
-
- //
- // Account for this socket
- //
- pSocket->FifoDepth -= 1;
-
- //
- // Update the new socket's state
- //
- pNewSocket->State = SOCKET_STATE_CONNECTED;
- pNewSocket->bConfigured = TRUE;
- DEBUG (( DEBUG_ACCEPT,
- "0x%08x: Socket connected\r\n",
- pNewSocket ));
- }
- }
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
- }
- }
- }
-
- //
- // Return the new socket
- //
- if (( NULL != ppSocketProtocol )
- && ( NULL != pNewSocket )) {
- *ppSocketProtocol = &pNewSocket->SocketProtocol;
- }
-
- //
- // Return the operation status
- //
- if ( NULL != pErrno ) {
- if ( NULL != pSocket ) {
- *pErrno = pSocket->errno;
- }
- else {
- Status = EFI_INVALID_PARAMETER;
- *pErrno = ENOTSOCK;
- }
- }
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Allocate and initialize a ESL_SOCKET structure.
-
- This support function allocates an ::ESL_SOCKET structure
- and installs a protocol on ChildHandle. If pChildHandle is a
- pointer to NULL, then a new handle is created and returned in
- pChildHandle. If pChildHandle is not a pointer to NULL, then
- the protocol installs on the existing pChildHandle.
-
- @param[in,out] pChildHandle Pointer to the handle of the child to create.
- If it is NULL, then a new handle is created.
- If it is a pointer to an existing UEFI handle,
- then the protocol is added to the existing UEFI
- handle.
- @param[in] DebugFlags Flags for debug messages
- @param[in,out] ppSocket The buffer to receive an ::ESL_SOCKET structure address.
-
- @retval EFI_SUCCESS The protocol was added to ChildHandle.
- @retval EFI_INVALID_PARAMETER ChildHandle is NULL.
- @retval EFI_OUT_OF_RESOURCES There are not enough resources available to create
- the child
- @retval other The child handle was not created
-**/
-EFI_STATUS
-EFIAPI
-EslSocketAllocate (
- IN OUT EFI_HANDLE * pChildHandle,
- IN UINTN DebugFlags,
- IN OUT ESL_SOCKET ** ppSocket
- )
-{
- UINTN LengthInBytes;
- ESL_LAYER * pLayer;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Create a socket structure
- //
- LengthInBytes = sizeof ( *pSocket );
- pSocket = (ESL_SOCKET *) AllocateZeroPool ( LengthInBytes );
- if ( NULL != pSocket ) {
- DEBUG (( DebugFlags | DEBUG_POOL | DEBUG_INIT,
- "0x%08x: Allocate pSocket, %d bytes\r\n",
- pSocket,
- LengthInBytes ));
-
- //
- // Initialize the socket protocol
- //
- pSocket->Signature = SOCKET_SIGNATURE;
- pSocket->SocketProtocol.pfnAccept = EslSocketAccept;
- pSocket->SocketProtocol.pfnBind = EslSocketBind;
- pSocket->SocketProtocol.pfnClosePoll = EslSocketClosePoll;
- pSocket->SocketProtocol.pfnCloseStart = EslSocketCloseStart;
- pSocket->SocketProtocol.pfnConnect = EslSocketConnect;
- pSocket->SocketProtocol.pfnGetLocal = EslSocketGetLocalAddress;
- pSocket->SocketProtocol.pfnGetPeer = EslSocketGetPeerAddress;
- pSocket->SocketProtocol.pfnListen = EslSocketListen;
- pSocket->SocketProtocol.pfnOptionGet = EslSocketOptionGet;
- pSocket->SocketProtocol.pfnOptionSet = EslSocketOptionSet;
- pSocket->SocketProtocol.pfnPoll = EslSocketPoll;
- pSocket->SocketProtocol.pfnReceive = EslSocketReceive;
- pSocket->SocketProtocol.pfnShutdown = EslSocketShutdown;
- pSocket->SocketProtocol.pfnSocket = EslSocket;
- pSocket->SocketProtocol.pfnTransmit = EslSocketTransmit;
-
- pSocket->MaxRxBuf = MAX_RX_DATA;
- pSocket->MaxTxBuf = MAX_TX_DATA;
-
- //
- // Install the socket protocol on the specified handle
- //
- Status = gBS->InstallMultipleProtocolInterfaces (
- pChildHandle,
- &gEfiSocketProtocolGuid,
- &pSocket->SocketProtocol,
- NULL
- );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DebugFlags | DEBUG_POOL | DEBUG_INIT | DEBUG_INFO,
- "Installed: gEfiSocketProtocolGuid on 0x%08x\r\n",
- *pChildHandle ));
- pSocket->SocketProtocol.SocketHandle = *pChildHandle;
-
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Add this socket to the list
- //
- pLayer = &mEslLayer;
- pSocket->pNext = pLayer->pSocketList;
- pLayer->pSocketList = pSocket;
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
-
- //
- // Return the socket structure address
- //
- *ppSocket = pSocket;
- }
- else {
- DEBUG (( DEBUG_ERROR | DebugFlags | DEBUG_POOL | DEBUG_INIT,
- "ERROR - Failed to install gEfiSocketProtocolGuid on 0x%08x, Status: %r\r\n",
- *pChildHandle,
- Status ));
- }
-
- //
- // Release the socket if necessary
- //
- if ( EFI_ERROR ( Status )) {
- gBS->FreePool ( pSocket );
- DEBUG (( DebugFlags | DEBUG_POOL | DEBUG_INIT,
- "0x%08x: Free pSocket, %d bytes\r\n",
- pSocket,
- sizeof ( *pSocket )));
- pSocket = NULL;
- }
- }
- else {
- Status = EFI_OUT_OF_RESOURCES;
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Bind a name to a socket.
-
- This routine calls the network specific layer to save the network
- address of the local connection point.
-
- The ::bind routine calls this routine to connect a name
- (network address and port) to a socket on the local machine.
-
- @param[in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param[in] pSockAddr Address of a sockaddr structure that contains the
- connection point on the local machine. An IPv4 address
- of INADDR_ANY specifies that the connection is made to
- all of the network stacks on the platform. Specifying a
- specific IPv4 address restricts the connection to the
- network stack supporting that address. Specifying zero
- for the port causes the network layer to assign a port
- number from the dynamic range. Specifying a specific
- port number causes the network layer to use that port.
- @param[in] SockAddrLength Specifies the length in bytes of the sockaddr structure.
- @param[out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket successfully created
-**/
-EFI_STATUS
-EslSocketBind (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN CONST struct sockaddr * pSockAddr,
- IN socklen_t SockAddrLength,
- OUT int * pErrno
- )
-{
- EFI_HANDLE ChildHandle;
- UINT8 * pBuffer;
- ESL_PORT * pPort;
- ESL_SERVICE ** ppServiceListHead;
- ESL_SOCKET * pSocket;
- ESL_SERVICE * pService;
- EFI_SERVICE_BINDING_PROTOCOL * pServiceBinding;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Validate the socket
- //
- pSocket = NULL;
- if ( NULL != pSocketProtocol ) {
- pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );
-
- //
- // Validate the structure pointer
- //
- pSocket->errno = 0;
- if ( NULL == pSockAddr ) {
- DEBUG (( DEBUG_BIND,
- "ERROR - pSockAddr is NULL!\r\n" ));
- Status = EFI_INVALID_PARAMETER;
- pSocket->errno = EFAULT;
- }
-
- //
- // Validate the local address length
- //
- else if ( SockAddrLength < pSocket->pApi->MinimumAddressLength ) {
- DEBUG (( DEBUG_BIND,
- "ERROR - Invalid bind name length: %d\r\n",
- SockAddrLength ));
- Status = EFI_INVALID_PARAMETER;
- pSocket->errno = EINVAL;
- }
-
- //
- // Validate the shutdown state
- //
- else if ( pSocket->bRxDisable || pSocket->bTxDisable ) {
- DEBUG (( DEBUG_BIND,
- "ERROR - Shutdown has been called on socket 0x%08x\r\n",
- pSocket ));
- pSocket->errno = EINVAL;
- Status = EFI_INVALID_PARAMETER;
- }
-
- //
- // Verify the socket state
- //
- else if ( SOCKET_STATE_NOT_CONFIGURED != pSocket->State ) {
- DEBUG (( DEBUG_BIND,
- "ERROR - The socket 0x%08x is already configured!\r\n",
- pSocket ));
- pSocket->errno = EINVAL;
- Status = EFI_ALREADY_STARTED;
- }
- else {
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Assume no ports are available
- //
- pSocket->errno = EADDRNOTAVAIL;
- Status = EFI_INVALID_PARAMETER;
-
- //
- // Walk the list of services
- //
- pBuffer = (UINT8 *)&mEslLayer;
- pBuffer = &pBuffer[ pSocket->pApi->ServiceListOffset ];
- ppServiceListHead = (ESL_SERVICE **)pBuffer;
- pService = *ppServiceListHead;
- while ( NULL != pService ) {
- //
- // Create the port
- //
- pServiceBinding = pService->pServiceBinding;
- ChildHandle = NULL;
- Status = pServiceBinding->CreateChild ( pServiceBinding,
- &ChildHandle );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_BIND | DEBUG_POOL,
- "0x%08x: %s port handle created\r\n",
- ChildHandle,
- pService->pSocketBinding->pName ));
-
- //
- // Open the port
- //
- Status = EslSocketPortAllocate ( pSocket,
- pService,
- ChildHandle,
- pSockAddr,
- TRUE,
- DEBUG_BIND,
- &pPort );
- }
- else {
- DEBUG (( DEBUG_BIND | DEBUG_POOL,
- "ERROR - Failed to open %s port handle, Status: %r\r\n",
- pService->pSocketBinding->pName,
- Status ));
- }
-
- //
- // Set the next service
- //
- pService = pService->pNext;
- }
-
- //
- // Verify that at least one network connection was found
- //
- if ( NULL != pSocket->pPortList ) {
- Status = EFI_SUCCESS;
- }
- else {
- if ( EADDRNOTAVAIL == pSocket->errno ) {
- DEBUG (( DEBUG_BIND | DEBUG_POOL | DEBUG_INIT,
- "ERROR - Socket address is not available!\r\n" ));
- }
- if ( EADDRINUSE == pSocket->errno ) {
- DEBUG (( DEBUG_BIND | DEBUG_POOL | DEBUG_INIT,
- "ERROR - Socket address is in use!\r\n" ));
- }
- Status = EFI_INVALID_PARAMETER;
- }
-
- //
- // Mark this socket as bound if successful
- //
- if ( !EFI_ERROR ( Status )) {
- pSocket->State = SOCKET_STATE_BOUND;
- pSocket->errno = 0;
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
- }
- }
-
- //
- // Return the operation status
- //
- if ( NULL != pErrno ) {
- if ( NULL != pSocket ) {
- *pErrno = pSocket->errno;
- }
- else {
- Status = EFI_INVALID_PARAMETER;
- *pErrno = ENOTSOCK;
- }
- }
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Test the bind configuration.
-
- @param[in] pPort Address of the ::ESL_PORT structure.
- @param[in] ErrnoValue errno value if test fails
-
- @retval EFI_SUCCESS The connection was successfully established.
- @retval Others The connection attempt failed.
-**/
-EFI_STATUS
-EslSocketBindTest (
- IN ESL_PORT * pPort,
- IN int ErrnoValue
- )
-{
- UINT8 * pBuffer;
- VOID * pConfigData;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Locate the configuration data
- //
- pBuffer = (UINT8 *)pPort;
- pBuffer = &pBuffer [ pPort->pSocket->pApi->ConfigDataOffset ];
- pConfigData = (VOID *)pBuffer;
-
- //
- // Validate that the port is connected
- //
- Status = pPort->pSocket->pApi->pfnVerifyLocalIpAddress ( pPort, pBuffer );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_WARN | DEBUG_BIND,
- "WARNING - Port 0x%08x invalid IP address: %r\r\n",
- pPort,
- Status ));
- pPort->pSocket->errno = ErrnoValue;
- }
- else {
- //
- // Attempt to use this configuration
- //
- Status = pPort->pfnConfigure ( pPort->pProtocol.v, pConfigData );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_WARN | DEBUG_BIND,
- "WARNING - Port 0x%08x failed configuration, Status: %r\r\n",
- pPort,
- Status ));
- pPort->pSocket->errno = ErrnoValue;
- }
- else {
- //
- // Reset the port
- //
- Status = pPort->pfnConfigure ( pPort->pProtocol.v, NULL );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR | DEBUG_BIND,
- "ERROR - Port 0x%08x failed configuration reset, Status: %r\r\n",
- pPort,
- Status ));
- ASSERT ( EFI_SUCCESS == Status );
- }
- }
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Determine if the socket is closed.
-
- This routine checks the state of the socket to determine if
- the network specific layer has completed the close operation.
-
- The ::close routine polls this routine to determine when the
- close operation is complete. The close operation needs to
- reverse the operations of the ::EslSocketAllocate routine.
-
- @param[in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param[out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS Socket successfully closed
- @retval EFI_NOT_READY Close still in progress
- @retval EFI_ALREADY Close operation already in progress
- @retval Other Failed to close the socket
-**/
-EFI_STATUS
-EslSocketClosePoll (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int * pErrno
- )
-{
- int errno;
- ESL_LAYER * pLayer;
- ESL_SOCKET * pNextSocket;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- errno = 0;
- Status = EFI_SUCCESS;
-
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Locate the socket
- //
- pLayer = &mEslLayer;
- pNextSocket = pLayer->pSocketList;
- pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );
- while ( NULL != pNextSocket ) {
- if ( pNextSocket == pSocket ) {
- //
- // Determine if the socket is in the closing state
- //
- if ( SOCKET_STATE_CLOSED == pSocket->State ) {
- //
- // Walk the list of ports
- //
- if ( NULL == pSocket->pPortList ) {
- //
- // All the ports are closed
- // Close the WaitAccept event if necessary
- //
- if ( NULL != pSocket->WaitAccept ) {
- Status = gBS->CloseEvent ( pSocket->WaitAccept );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_SOCKET | DEBUG_CLOSE | DEBUG_POOL,
- "0x%08x: Closed WaitAccept event\r\n",
- pSocket->WaitAccept ));
- //
- // Return the transmit status
- //
- Status = pSocket->TxError;
- if ( EFI_ERROR ( Status )) {
- pSocket->errno = EIO;
- }
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_SOCKET | DEBUG_CLOSE | DEBUG_POOL,
- "ERROR - Failed to close the WaitAccept event, Status: %r\r\n",
- Status ));
- ASSERT ( EFI_SUCCESS == Status );
- }
- }
- }
- else {
- //
- // At least one port is still open
- //
- Status = EFI_NOT_READY;
- errno = EAGAIN;
- }
- }
- else {
- //
- // SocketCloseStart was not called
- //
- Status = EFI_NOT_STARTED;
- errno = EPERM;
- }
- break;
- }
-
- //
- // Set the next socket
- //
- pNextSocket = pNextSocket->pNext;
- }
-
- //
- // Handle the error case where the socket was already closed
- //
- if ( NULL == pSocket ) {
- //
- // Socket not found
- //
- Status = EFI_NOT_FOUND;
- errno = ENOTSOCK;
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
-
- //
- // Return the operation status
- //
- if ( NULL != pErrno ) {
- *pErrno = errno;
- }
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Start the close operation on the socket.
-
- This routine calls the network specific layer to initiate the
- close state machine. This routine then calls the network
- specific layer to determine if the close state machine has gone
- to completion. The result from this poll is returned to the
- caller.
-
- The ::close routine calls this routine to start the close
- operation which reverses the operations of the
- ::EslSocketAllocate routine. The close routine then polls
- the ::EslSocketClosePoll routine to determine when the
- socket is closed.
-
- @param[in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param[in] bCloseNow Boolean to control close behavior
- @param[out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS Socket successfully closed
- @retval EFI_NOT_READY Close still in progress
- @retval EFI_ALREADY Close operation already in progress
- @retval Other Failed to close the socket
-**/
-EFI_STATUS
-EslSocketCloseStart (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN BOOLEAN bCloseNow,
- IN int * pErrno
- )
-{
- int errno;
- ESL_PORT * pNextPort;
- ESL_PORT * pPort;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
- errno = 0;
-
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Determine if the socket is already closed
- //
- pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );
- if ( SOCKET_STATE_CLOSED > pSocket->State ) {
- //
- // Update the socket state
- //
- pSocket->State = SOCKET_STATE_CLOSED;
-
- //
- // Walk the list of ports
- //
- pPort = pSocket->pPortList;
- while ( NULL != pPort ) {
- //
- // Start closing the ports
- //
- pNextPort = pPort->pLinkSocket;
- Status = EslSocketPortCloseStart ( pPort,
- bCloseNow,
- DEBUG_CLOSE | DEBUG_LISTEN | DEBUG_CONNECTION );
- if (( EFI_SUCCESS != Status )
- && ( EFI_NOT_READY != Status )) {
- errno = EIO;
- break;
- }
-
- //
- // Set the next port
- //
- pPort = pNextPort;
- }
-
- //
- // Attempt to finish closing the socket
- //
- if ( NULL == pPort ) {
- Status = EslSocketClosePoll ( pSocketProtocol, &errno );
- }
- }
- else {
- Status = EFI_NOT_READY;
- errno = EAGAIN;
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
-
- //
- // Return the operation status
- //
- if ( NULL != pErrno ) {
- *pErrno = errno;
- }
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Connect to a remote system via the network.
-
- This routine calls the network specific layer to establish
- the remote system address and establish the connection to
- the remote system.
-
- The ::connect routine calls this routine to establish a
- connection with the specified remote system. This routine
- is designed to be polled by the connect routine for completion
- of the network connection.
-
- @param[in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param[in] pSockAddr Network address of the remote system.
- @param[in] SockAddrLength Length in bytes of the network address.
- @param[out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS The connection was successfully established.
- @retval EFI_NOT_READY The connection is in progress, call this routine again.
- @retval Others The connection attempt failed.
- **/
-EFI_STATUS
-EslSocketConnect (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN const struct sockaddr * pSockAddr,
- IN socklen_t SockAddrLength,
- IN int * pErrno
- )
-{
- struct sockaddr_in6 LocalAddress;
- ESL_PORT * pPort;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DEBUG (( DEBUG_CONNECT, "Entering SocketConnect\r\n" ));
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Validate the socket
- //
- pSocket = NULL;
- if ( NULL != pSocketProtocol ) {
- pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );
-
- //
- // Validate the name length
- //
- if ( SockAddrLength < ( sizeof ( struct sockaddr ) - sizeof ( pSockAddr->sa_data ))) {
- DEBUG (( DEBUG_CONNECT,
- "ERROR - Invalid bind name length: %d\r\n",
- SockAddrLength ));
- Status = EFI_INVALID_PARAMETER;
- pSocket->errno = EINVAL;
- }
- else {
- //
- // Assume success
- //
- pSocket->errno = 0;
-
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Validate the socket state
- //
- switch ( pSocket->State ) {
- default:
- //
- // Wrong socket state
- //
- pSocket->errno = EIO;
- Status = EFI_DEVICE_ERROR;
- break;
-
- case SOCKET_STATE_NOT_CONFIGURED:
- case SOCKET_STATE_BOUND:
- //
- // Validate the address length
- //
- if ( SockAddrLength >= pSocket->pApi->MinimumAddressLength ) {
- //
- // Verify the API
- //
- if ( NULL == pSocket->pApi->pfnRemoteAddrSet ) {
- //
- // Already connected
- //
- pSocket->errno = ENOTSUP;
- Status = EFI_UNSUPPORTED;
- }
- else {
- //
- // Determine if BIND was already called
- //
- if ( NULL == pSocket->pPortList ) {
- //
- // Allow any local port
- //
- ZeroMem ( &LocalAddress, sizeof ( LocalAddress ));
- LocalAddress.sin6_len = (uint8_t)pSocket->pApi->MinimumAddressLength;
- LocalAddress.sin6_family = pSocket->pApi->AddressFamily;
- Status = EslSocketBind ( &pSocket->SocketProtocol,
- (struct sockaddr *)&LocalAddress,
- LocalAddress.sin6_len,
- &pSocket->errno );
- }
- if ( NULL != pSocket->pPortList ) {
- //
- // Walk the list of ports
- //
- pPort = pSocket->pPortList;
- while ( NULL != pPort ) {
- //
- // Set the remote address
- //
- Status = pSocket->pApi->pfnRemoteAddrSet ( pPort,
- pSockAddr,
- SockAddrLength );
- if ( EFI_ERROR ( Status )) {
- break;
- }
-
- //
- // Set the next port
- //
- pPort = pPort->pLinkSocket;
- }
-
- //
- // Verify the API
- //
- if (( !EFI_ERROR ( Status ))
- && ( NULL != pSocket->pApi->pfnConnectStart )) {
- //
- // Initiate the connection with the remote system
- //
- Status = pSocket->pApi->pfnConnectStart ( pSocket );
-
- //
- // Set the next state if connecting
- //
- if ( EFI_NOT_READY == Status ) {
- pSocket->State = SOCKET_STATE_CONNECTING;
- }
- }
- }
- }
- }
- else {
- DEBUG (( DEBUG_CONNECT,
- "ERROR - Invalid address length: %d\r\n",
- SockAddrLength ));
- Status = EFI_INVALID_PARAMETER;
- pSocket->errno = EINVAL;
- }
- break;
-
- case SOCKET_STATE_CONNECTING:
- //
- // Poll the network adapter
- //
- EslSocketRxPoll ( pSocket );
-
- //
- // Poll for connection completion
- //
- if ( NULL == pSocket->pApi->pfnConnectPoll ) {
- //
- // Already connected
- //
- pSocket->errno = EISCONN;
- Status = EFI_ALREADY_STARTED;
- }
- else {
- Status = pSocket->pApi->pfnConnectPoll ( pSocket );
-
- //
- // Set the next state if connected
- //
- if ( EFI_NOT_READY != Status ) {
- if ( EFI_ERROR ( Status )) {
- pSocket->State = SOCKET_STATE_BOUND;
- }
- }
- }
- break;
-
- case SOCKET_STATE_CONNECTED:
- //
- // Connected
- //
- Status = EFI_SUCCESS;
- break;
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
- }
- }
-
- //
- // Return the operation status
- //
- if ( NULL != pErrno ) {
- if ( NULL != pSocket ) {
- *pErrno = pSocket->errno;
- }
- else {
- //
- // Bad socket protocol
- //
- DEBUG (( DEBUG_ERROR | DEBUG_CONNECT,
- "ERROR - pSocketProtocol invalid!\r\n" ));
- Status = EFI_INVALID_PARAMETER;
- *pErrno = ENOTSOCK;
- }
- }
-
- //
- // Return the operation status
- //
- DEBUG (( DEBUG_CONNECT, "Exiting SocketConnect, Status: %r\r\n", Status ));
- return Status;
-}
-
-
-/** Copy a fragmented buffer into a destination buffer.
-
- This support routine copies a fragmented buffer to the caller specified buffer.
-
- This routine is called by ::EslIp4Receive and ::EslUdp4Receive.
-
- @param[in] FragmentCount Number of fragments in the table
- @param[in] pFragmentTable Address of an EFI_IP4_FRAGMENT_DATA structure
- @param[in] BufferLength Length of the the buffer
- @param[in] pBuffer Address of a buffer to receive the data.
- @param[in] pDataLength Number of received data bytes in the buffer.
-
- @return Returns the address of the next free byte in the buffer.
-**/
-UINT8 *
-EslSocketCopyFragmentedBuffer (
- IN UINT32 FragmentCount,
- IN EFI_IP4_FRAGMENT_DATA * pFragmentTable,
- IN size_t BufferLength,
- IN UINT8 * pBuffer,
- OUT size_t * pDataLength
- )
-{
- size_t BytesToCopy;
- UINT32 Fragment;
- UINT8 * pBufferEnd;
- UINT8 * pData;
-
- DBG_ENTER ( );
-
- //
- // Validate the IP and UDP structures are identical
- //
- ASSERT ( OFFSET_OF ( EFI_IP4_FRAGMENT_DATA, FragmentLength )
- == OFFSET_OF ( EFI_UDP4_FRAGMENT_DATA, FragmentLength ));
- ASSERT ( OFFSET_OF ( EFI_IP4_FRAGMENT_DATA, FragmentBuffer )
- == OFFSET_OF ( EFI_UDP4_FRAGMENT_DATA, FragmentBuffer ));
-
- //
- // Copy the received data
- //
- Fragment = 0;
- pBufferEnd = &pBuffer [ BufferLength ];
- while (( pBufferEnd > pBuffer ) && ( FragmentCount > Fragment )) {
- //
- // Determine the amount of received data
- //
- pData = pFragmentTable[Fragment].FragmentBuffer;
- BytesToCopy = pFragmentTable[Fragment].FragmentLength;
- if (((size_t)( pBufferEnd - pBuffer )) < BytesToCopy ) {
- BytesToCopy = pBufferEnd - pBuffer;
- }
-
- //
- // Move the data into the buffer
- //
- DEBUG (( DEBUG_RX,
- "0x%08x --> 0x%08x: Copy data 0x%08x bytes\r\n",
- pData,
- pBuffer,
- BytesToCopy ));
- CopyMem ( pBuffer, pData, BytesToCopy );
- pBuffer += BytesToCopy;
- Fragment += 1;
- }
-
- //
- // Return the data length and the buffer address
- //
- *pDataLength = BufferLength - ( pBufferEnd - pBuffer );
- DBG_EXIT_HEX ( pBuffer );
- return pBuffer;
-}
-
-
-/** Free the socket.
-
- This routine frees the socket structure and handle resources.
-
- The ::close routine calls EslServiceFreeProtocol which then calls
- this routine to free the socket context structure and close the
- handle.
-
- @param[in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param[out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS The socket resources were returned successfully.
-**/
-EFI_STATUS
-EslSocketFree (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int * pErrno
- )
-{
- EFI_HANDLE ChildHandle;
- int errno;
- ESL_LAYER * pLayer;
- ESL_SOCKET * pSocket;
- ESL_SOCKET * pSocketPrevious;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume failure
- //
- errno = EIO;
- pSocket = NULL;
- Status = EFI_INVALID_PARAMETER;
-
- //
- // Validate the socket
- //
- pLayer = &mEslLayer;
- if ( NULL != pSocketProtocol ) {
- pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );
-
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Walk the socket list
- //
- pSocketPrevious = pLayer->pSocketList;
- if ( NULL != pSocketPrevious ) {
- if ( pSocket == pSocketPrevious ) {
- //
- // Remove the socket from the head of the list
- //
- pLayer->pSocketList = pSocket->pNext;
- }
- else {
- //
- // Find the socket in the middle of the list
- //
- while (( NULL != pSocketPrevious )
- && ( pSocket != pSocketPrevious->pNext )) {
- //
- // Set the next socket
- //
- pSocketPrevious = pSocketPrevious->pNext;
- }
- if ( NULL != pSocketPrevious ) {
- //
- // Remove the socket from the middle of the list
- //
- pSocketPrevious = pSocket->pNext;
- }
- }
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_POOL,
- "ERROR - Socket list is empty!\r\n" ));
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
-
- //
- // Determine if the socket was found
- //
- if ( NULL != pSocketPrevious ) {
- pSocket->pNext = NULL;
-
- //
- // Remove the socket protocol
- //
- ChildHandle = pSocket->SocketProtocol.SocketHandle;
- Status = gBS->UninstallMultipleProtocolInterfaces (
- ChildHandle,
- &gEfiSocketProtocolGuid,
- &pSocket->SocketProtocol,
- NULL );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_POOL | DEBUG_INFO,
- "Removed: gEfiSocketProtocolGuid from 0x%08x\r\n",
- ChildHandle ));
-
- //
- // Free the socket structure
- //
- Status = gBS->FreePool ( pSocket );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_POOL,
- "0x%08x: Free pSocket, %d bytes\r\n",
- pSocket,
- sizeof ( *pSocket )));
- errno = 0;
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_POOL,
- "ERROR - Failed to free pSocket 0x%08x, Status: %r\r\n",
- pSocket,
- Status ));
- }
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_POOL | DEBUG_INFO,
- "ERROR - Failed to remove gEfiSocketProtocolGuid from 0x%08x, Status: %r\r\n",
- ChildHandle,
- Status ));
- }
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_INFO,
- "ERROR - The socket was not in the socket list!\r\n" ));
- Status = EFI_NOT_FOUND;
- }
- }
- else {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Invalid parameter pSocketProtocol is NULL\r\n" ));
- }
-
- //
- // Return the errno value if possible
- //
- if ( NULL != pErrno ) {
- *pErrno = errno;
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Get the local address.
-
- This routine calls the network specific layer to get the network
- address of the local host connection point.
-
- The ::getsockname routine calls this routine to obtain the network
- address associated with the local host connection point.
-
- @param[in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param[out] pAddress Network address to receive the local system address
- @param[in,out] pAddressLength Length of the local network address structure
- @param[out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Local address successfully returned
- **/
-EFI_STATUS
-EslSocketGetLocalAddress (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- OUT struct sockaddr * pAddress,
- IN OUT socklen_t * pAddressLength,
- IN int * pErrno
- )
-{
- socklen_t LengthInBytes;
- ESL_PORT * pPort;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Validate the socket
- //
- pSocket = NULL;
- if ( NULL != pSocketProtocol ) {
- pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );
-
- //
- // Verify the socket state
- //
- EslSocketIsConfigured ( pSocket );
- if ( pSocket->bAddressSet ) {
- //
- // Verify the address buffer and length address
- //
- if (( NULL != pAddress ) && ( NULL != pAddressLength )) {
- //
- // Verify the API
- //
- if ( NULL == pSocket->pApi->pfnLocalAddrGet ) {
- Status = EFI_UNSUPPORTED;
- pSocket->errno = ENOTSUP;
- }
- else {
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Verify that there is just a single connection
- //
- pPort = pSocket->pPortList;
- if ( NULL != pPort ) {
- //
- // Verify the address length
- //
- LengthInBytes = pSocket->pApi->AddressLength;
- if (( LengthInBytes <= *pAddressLength )
- && ( 255 >= LengthInBytes )) {
- //
- // Return the local address and address length
- //
- ZeroMem ( pAddress, LengthInBytes );
- pAddress->sa_len = (uint8_t)LengthInBytes;
- *pAddressLength = pAddress->sa_len;
- pSocket->pApi->pfnLocalAddrGet ( pPort, pAddress );
- pSocket->errno = 0;
- Status = EFI_SUCCESS;
- }
- else {
- pSocket->errno = EINVAL;
- Status = EFI_INVALID_PARAMETER;
- }
- }
- else {
- pSocket->errno = ENOTCONN;
- Status = EFI_NOT_STARTED;
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
- }
- }
- else {
- pSocket->errno = EINVAL;
- Status = EFI_INVALID_PARAMETER;
- }
- }
- else {
- //
- // Address not set
- //
- Status = EFI_NOT_STARTED;
- pSocket->errno = EADDRNOTAVAIL;
- }
- }
-
- //
- // Return the operation status
- //
- if ( NULL != pErrno ) {
- if ( NULL != pSocket ) {
- *pErrno = pSocket->errno;
- }
- else {
- Status = EFI_INVALID_PARAMETER;
- *pErrno = ENOTSOCK;
- }
- }
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Get the peer address.
-
- This routine calls the network specific layer to get the remote
- system connection point.
-
- The ::getpeername routine calls this routine to obtain the network
- address of the remote connection point.
-
- @param[in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param[out] pAddress Network address to receive the remote system address
- @param[in,out] pAddressLength Length of the remote network address structure
- @param[out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Remote address successfully returned
- **/
-EFI_STATUS
-EslSocketGetPeerAddress (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- OUT struct sockaddr * pAddress,
- IN OUT socklen_t * pAddressLength,
- IN int * pErrno
- )
-{
- socklen_t LengthInBytes;
- ESL_PORT * pPort;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Validate the socket
- //
- pSocket = NULL;
- if ( NULL != pSocketProtocol ) {
- pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );
-
- //
- // Verify the socket state
- //
- Status = EslSocketIsConfigured ( pSocket );
- if ( !EFI_ERROR ( Status )) {
- //
- // Verify the API
- //
- if ( NULL == pSocket->pApi->pfnRemoteAddrGet ) {
- Status = EFI_UNSUPPORTED;
- pSocket->errno = ENOTSUP;
- }
- else {
- //
- // Verify the address buffer and length address
- //
- if (( NULL != pAddress ) && ( NULL != pAddressLength )) {
- //
- // Verify the socket state
- //
- if ( SOCKET_STATE_CONNECTED == pSocket->State ) {
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Verify that there is just a single connection
- //
- pPort = pSocket->pPortList;
- if (( NULL != pPort ) && ( NULL == pPort->pLinkSocket )) {
- //
- // Verify the address length
- //
- LengthInBytes = pSocket->pApi->AddressLength;
- if ( LengthInBytes <= *pAddressLength ) {
- //
- // Return the local address
- //
- ZeroMem ( pAddress, LengthInBytes );
- pAddress->sa_len = (uint8_t)LengthInBytes;
- *pAddressLength = pAddress->sa_len;
- pSocket->pApi->pfnRemoteAddrGet ( pPort, pAddress );
- pSocket->errno = 0;
- Status = EFI_SUCCESS;
- }
- else {
- pSocket->errno = EINVAL;
- Status = EFI_INVALID_PARAMETER;
- }
- }
- else {
- pSocket->errno = ENOTCONN;
- Status = EFI_NOT_STARTED;
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
- }
- else {
- pSocket->errno = ENOTCONN;
- Status = EFI_NOT_STARTED;
- }
- }
- else {
- pSocket->errno = EINVAL;
- Status = EFI_INVALID_PARAMETER;
- }
- }
- }
- }
-
- //
- // Return the operation status
- //
- if ( NULL != pErrno ) {
- if ( NULL != pSocket ) {
- *pErrno = pSocket->errno;
- }
- else {
- Status = EFI_INVALID_PARAMETER;
- *pErrno = ENOTSOCK;
- }
- }
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Free the ESL_IO_MGMT event and structure.
-
- This support routine walks the free list to close the event in
- the ESL_IO_MGMT structure and remove the structure from the free
- list.
-
- See the \ref TransmitEngine section.
-
- @param[in] pPort Address of an ::ESL_PORT structure
- @param[in] ppFreeQueue Address of the free queue head
- @param[in] DebugFlags Flags for debug messages
- @param[in] pEventName Zero terminated string containing the event name
-
- @retval EFI_SUCCESS - The structures were properly initialized
-**/
-EFI_STATUS
-EslSocketIoFree (
- IN ESL_PORT * pPort,
- IN ESL_IO_MGMT ** ppFreeQueue,
- IN UINTN DebugFlags,
- IN CHAR8 * pEventName
- )
-{
- UINT8 * pBuffer;
- EFI_EVENT * pEvent;
- ESL_IO_MGMT * pIo;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Walk the list of IO structures
- //
- pSocket = pPort->pSocket;
- while ( *ppFreeQueue ) {
- //
- // Free the event for this structure
- //
- pIo = *ppFreeQueue;
- pBuffer = (UINT8 *)pIo;
- pBuffer = &pBuffer[ pSocket->TxTokenEventOffset ];
- pEvent = (EFI_EVENT *)pBuffer;
- Status = gBS->CloseEvent ( *pEvent );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR | DebugFlags,
- "ERROR - Failed to close the %a event, Status: %r\r\n",
- pEventName,
- Status ));
- pSocket->errno = ENOMEM;
- break;
- }
- DEBUG (( DebugFlags,
- "0x%08x: Closed %a event 0x%08x\r\n",
- pIo,
- pEventName,
- *pEvent ));
-
- //
- // Remove this structure from the queue
- //
- *ppFreeQueue = pIo->pNext;
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Initialize the ESL_IO_MGMT structures.
-
- This support routine initializes the ESL_IO_MGMT structure and
- places them on to a free list.
-
- This routine is called by ::EslSocketPortAllocate routines to prepare
- the transmit engines. See the \ref TransmitEngine section.
-
- @param[in] pPort Address of an ::ESL_PORT structure
- @param[in, out] ppIo Address containing the first structure address. Upon
- return this buffer contains the next structure address.
- @param[in] TokenCount Number of structures to initialize
- @param[in] ppFreeQueue Address of the free queue head
- @param[in] DebugFlags Flags for debug messages
- @param[in] pEventName Zero terminated string containing the event name
- @param[in] pfnCompletion Completion routine address
-
- @retval EFI_SUCCESS - The structures were properly initialized
-**/
-EFI_STATUS
-EslSocketIoInit (
- IN ESL_PORT * pPort,
- IN ESL_IO_MGMT ** ppIo,
- IN UINTN TokenCount,
- IN ESL_IO_MGMT ** ppFreeQueue,
- IN UINTN DebugFlags,
- IN CHAR8 * pEventName,
- IN PFN_API_IO_COMPLETE pfnCompletion
- )
-{
- ESL_IO_MGMT * pEnd;
- EFI_EVENT * pEvent;
- ESL_IO_MGMT * pIo;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Walk the list of IO structures
- //
- pSocket = pPort->pSocket;
- pIo = *ppIo;
- pEnd = &pIo [ TokenCount ];
- while ( pEnd > pIo ) {
- //
- // Initialize the IO structure
- //
- pIo->pPort = pPort;
- pIo->pPacket = NULL;
-
- //
- // Allocate the event for this structure
- //
- pEvent = (EFI_EVENT *)&(((UINT8 *)pIo)[ pSocket->TxTokenEventOffset ]);
- Status = gBS->CreateEvent ( EVT_NOTIFY_SIGNAL,
- TPL_SOCKETS,
- (EFI_EVENT_NOTIFY)pfnCompletion,
- pIo,
- pEvent );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR | DebugFlags,
- "ERROR - Failed to create the %a event, Status: %r\r\n",
- pEventName,
- Status ));
- pSocket->errno = ENOMEM;
- break;
- }
- DEBUG (( DebugFlags,
- "0x%08x: Created %a event 0x%08x\r\n",
- pIo,
- pEventName,
- *pEvent ));
-
- //
- // Add this structure to the queue
- //
- pIo->pNext = *ppFreeQueue;
- *ppFreeQueue = pIo;
-
- //
- // Set the next structure
- //
- pIo += 1;
- }
-
- //
- // Save the next structure
- //
- *ppIo = pIo;
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Determine if the socket is configured.
-
- This support routine is called to determine if the socket if the
- configuration call was made to the network layer. The following
- routines call this routine to verify that they may be successful
- in their operations:
- <ul>
- <li>::EslSocketGetLocalAddress</li>
- <li>::EslSocketGetPeerAddress</li>
- <li>::EslSocketPoll</li>
- <li>::EslSocketReceive</li>
- <li>::EslSocketTransmit</li>
- </ul>
-
- @param[in] pSocket Address of an ::ESL_SOCKET structure
-
- @retval EFI_SUCCESS - The socket is configured
-**/
-EFI_STATUS
-EslSocketIsConfigured (
- IN ESL_SOCKET * pSocket
- )
-{
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Verify the socket state
- //
- if ( !pSocket->bConfigured ) {
- DBG_ENTER ( );
-
- //
- // Verify the API
- //
- if ( NULL == pSocket->pApi->pfnIsConfigured ) {
- Status = EFI_UNSUPPORTED;
- pSocket->errno = ENOTSUP;
- }
- else {
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Determine if the socket is configured
- //
- Status = pSocket->pApi->pfnIsConfigured ( pSocket );
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
-
- //
- // Set errno if a failure occurs
- //
- if ( EFI_ERROR ( Status )) {
- pSocket->errno = EADDRNOTAVAIL;
- }
- }
-
- DBG_EXIT_STATUS ( Status );
- }
-
- //
- // Return the configuration status
- //
- return Status;
-}
-
-
-/** Establish the known port to listen for network connections.
-
- This routine calls into the network protocol layer to establish
- a handler that is called upon connection completion. The handler
- is responsible for inserting the connection into the FIFO.
-
- The ::listen routine indirectly calls this routine to place the
- socket into a state that enables connection attempts. Connections
- are placed in a FIFO that is serviced by the application. The
- application calls the ::accept (::EslSocketAccept) routine to
- remove the next connection from the FIFO and get the associated
- socket and address.
-
- @param[in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param[in] Backlog Backlog specifies the maximum FIFO depth for
- the connections waiting for the application
- to call accept. Connection attempts received
- while the queue is full are refused.
- @param[out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket successfully created
- @retval Other - Failed to enable the socket for listen
-**/
-EFI_STATUS
-EslSocketListen (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN INT32 Backlog,
- OUT int * pErrno
- )
-{
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
- EFI_STATUS TempStatus;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Validate the socket
- //
- pSocket = NULL;
- if ( NULL != pSocketProtocol ) {
- pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );
-
- //
- // Verify the API
- //
- if ( NULL == pSocket->pApi->pfnListen ) {
- Status = EFI_UNSUPPORTED;
- pSocket->errno = ENOTSUP;
- }
- else {
- //
- // Assume success
- //
- pSocket->Status = EFI_SUCCESS;
- pSocket->errno = 0;
-
- //
- // Verify that the bind operation was successful
- //
- if ( SOCKET_STATE_BOUND == pSocket->State ) {
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Create the event for SocketAccept completion
- //
- Status = gBS->CreateEvent ( 0,
- TPL_SOCKETS,
- NULL,
- NULL,
- &pSocket->WaitAccept );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_POOL,
- "0x%08x: Created WaitAccept event\r\n",
- pSocket->WaitAccept ));
- //
- // Set the maximum FIFO depth
- //
- if ( 0 >= Backlog ) {
- Backlog = MAX_PENDING_CONNECTIONS;
- }
- else {
- if ( SOMAXCONN < Backlog ) {
- Backlog = SOMAXCONN;
- }
- else {
- pSocket->MaxFifoDepth = Backlog;
- }
- }
-
- //
- // Initiate the connection attempt listen
- //
- Status = pSocket->pApi->pfnListen ( pSocket );
-
- //
- // Place the socket in the listen state if successful
- //
- if ( !EFI_ERROR ( Status )) {
- pSocket->State = SOCKET_STATE_LISTENING;
- pSocket->bListenCalled = TRUE;
- }
- else {
- //
- // Not waiting for SocketAccept to complete
- //
- TempStatus = gBS->CloseEvent ( pSocket->WaitAccept );
- if ( !EFI_ERROR ( TempStatus )) {
- DEBUG (( DEBUG_POOL,
- "0x%08x: Closed WaitAccept event\r\n",
- pSocket->WaitAccept ));
- pSocket->WaitAccept = NULL;
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_POOL,
- "ERROR - Failed to close WaitAccept event, Status: %r\r\n",
- TempStatus ));
- ASSERT ( EFI_SUCCESS == TempStatus );
- }
- }
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_LISTEN,
- "ERROR - Failed to create the WaitAccept event, Status: %r\r\n",
- Status ));
- pSocket->errno = ENOMEM;
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_LISTEN,
- "ERROR - Bind operation must be performed first!\r\n" ));
- pSocket->errno = ( SOCKET_STATE_NOT_CONFIGURED == pSocket->State ) ? EDESTADDRREQ
- : EINVAL;
- Status = EFI_NO_MAPPING;
- }
- }
- }
-
- //
- // Return the operation status
- //
- if ( NULL != pErrno ) {
- if ( NULL != pSocket ) {
- *pErrno = pSocket->errno;
- }
- else {
- Status = EFI_INVALID_PARAMETER;
- *pErrno = ENOTSOCK;
- }
- }
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Get the socket options.
-
- This routine handles the socket level options and passes the
- others to the network specific layer.
-
- The ::getsockopt routine calls this routine to retrieve the
- socket options one at a time by name.
-
- @param[in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param[in] level Option protocol level
- @param[in] OptionName Name of the option
- @param[out] pOptionValue Buffer to receive the option value
- @param[in,out] pOptionLength Length of the buffer in bytes,
- upon return length of the option value in bytes
- @param[out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket data successfully received
- **/
-EFI_STATUS
-EslSocketOptionGet (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int level,
- IN int OptionName,
- OUT void * __restrict pOptionValue,
- IN OUT socklen_t * __restrict pOptionLength,
- IN int * pErrno
- )
-{
- int errno;
- socklen_t LengthInBytes;
- socklen_t MaxBytes;
- CONST UINT8 * pOptionData;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Assume failure
- //
- errno = EINVAL;
- Status = EFI_INVALID_PARAMETER;
-
- //
- // Validate the socket
- //
- pSocket = NULL;
- if ( NULL == pSocketProtocol ) {
- DEBUG (( DEBUG_OPTION, "ERROR - pSocketProtocol is NULL!\r\n" ));
- }
- else if ( NULL == pOptionValue ) {
- DEBUG (( DEBUG_OPTION, "ERROR - No option buffer specified\r\n" ));
- }
- else if ( NULL == pOptionLength ) {
- DEBUG (( DEBUG_OPTION, "ERROR - Option length not specified!\r\n" ));
- }
- else {
- pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );
- LengthInBytes = 0;
- MaxBytes = *pOptionLength;
- pOptionData = NULL;
- switch ( level ) {
- default:
- //
- // See if the protocol will handle the option
- //
- if ( NULL != pSocket->pApi->pfnOptionGet ) {
- if ( pSocket->pApi->DefaultProtocol == level ) {
- Status = pSocket->pApi->pfnOptionGet ( pSocket,
- OptionName,
- (CONST void ** __restrict)&pOptionData,
- &LengthInBytes );
- errno = pSocket->errno;
- break;
- }
- else {
- //
- // Protocol not supported
- //
- DEBUG (( DEBUG_OPTION,
- "ERROR - The socket does not support this protocol!\r\n" ));
- }
- }
- else {
- //
- // Protocol level not supported
- //
- DEBUG (( DEBUG_OPTION,
- "ERROR - %a does not support any options!\r\n",
- pSocket->pApi->pName ));
- }
- errno = ENOPROTOOPT;
- Status = EFI_INVALID_PARAMETER;
- break;
-
- case SOL_SOCKET:
- switch ( OptionName ) {
- default:
- //
- // Socket option not supported
- //
- DEBUG (( DEBUG_INFO | DEBUG_OPTION, "ERROR - Invalid socket option!\r\n" ));
- errno = EINVAL;
- Status = EFI_INVALID_PARAMETER;
- break;
-
- case SO_ACCEPTCONN:
- //
- // Return the listen flag
- //
- pOptionData = (CONST UINT8 *)&pSocket->bListenCalled;
- LengthInBytes = sizeof ( pSocket->bListenCalled );
- break;
-
- case SO_DEBUG:
- //
- // Return the debug flags
- //
- pOptionData = (CONST UINT8 *)&pSocket->bOobInLine;
- LengthInBytes = sizeof ( pSocket->bOobInLine );
- break;
-
- case SO_OOBINLINE:
- //
- // Return the out-of-band inline flag
- //
- pOptionData = (CONST UINT8 *)&pSocket->bOobInLine;
- LengthInBytes = sizeof ( pSocket->bOobInLine );
- break;
-
- case SO_RCVTIMEO:
- //
- // Return the receive timeout
- //
- pOptionData = (CONST UINT8 *)&pSocket->RxTimeout;
- LengthInBytes = sizeof ( pSocket->RxTimeout );
- break;
-
- case SO_RCVBUF:
- //
- // Return the maximum receive buffer size
- //
- pOptionData = (CONST UINT8 *)&pSocket->MaxRxBuf;
- LengthInBytes = sizeof ( pSocket->MaxRxBuf );
- break;
-
- case SO_REUSEADDR:
- //
- // Return the address reuse flag
- //
- pOptionData = (UINT8 *)&pSocket->bReUseAddr;
- LengthInBytes = sizeof ( pSocket->bReUseAddr );
- break;
-
- case SO_SNDBUF:
- //
- // Return the maximum transmit buffer size
- //
- pOptionData = (CONST UINT8 *)&pSocket->MaxTxBuf;
- LengthInBytes = sizeof ( pSocket->MaxTxBuf );
- break;
-
- case SO_TYPE:
- //
- // Return the socket type
- //
- pOptionData = (CONST UINT8 *)&pSocket->Type;
- LengthInBytes = sizeof ( pSocket->Type );
- break;
- }
- break;
- }
-
- //
- // Return the option length
- //
- *pOptionLength = LengthInBytes;
-
- //
- // Determine if the option is present
- //
- if ( 0 != LengthInBytes ) {
- //
- // Silently truncate the value length
- //
- if ( LengthInBytes > MaxBytes ) {
- DEBUG (( DEBUG_OPTION,
- "INFO - Truncating option from %d to %d bytes\r\n",
- LengthInBytes,
- MaxBytes ));
- LengthInBytes = MaxBytes;
- }
-
- //
- // Return the value
- //
- CopyMem ( pOptionValue, pOptionData, LengthInBytes );
-
- //
- // Zero fill any remaining space
- //
- if ( LengthInBytes < MaxBytes ) {
- ZeroMem ( &((UINT8 *)pOptionValue)[LengthInBytes], MaxBytes - LengthInBytes );
- }
- errno = 0;
- Status = EFI_SUCCESS;
- }
- }
-
- //
- // Return the operation status
- //
- if ( NULL != pErrno ) {
- *pErrno = errno;
- }
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Set the socket options.
-
- This routine handles the socket level options and passes the
- others to the network specific layer.
-
- The ::setsockopt routine calls this routine to adjust the socket
- options one at a time by name.
-
- @param[in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param[in] level Option protocol level
- @param[in] OptionName Name of the option
- @param[in] pOptionValue Buffer containing the option value
- @param[in] OptionLength Length of the buffer in bytes
- @param[out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Option successfully set
-**/
-EFI_STATUS
-EslSocketOptionSet (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int level,
- IN int OptionName,
- IN CONST void * pOptionValue,
- IN socklen_t OptionLength,
- IN int * pErrno
- )
-{
- BOOLEAN bTrueFalse;
- int errno;
- socklen_t LengthInBytes;
- UINT8 * pOptionData;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Assume failure
- //
- errno = EINVAL;
- Status = EFI_INVALID_PARAMETER;
-
- //
- // Validate the socket
- //
- pSocket = NULL;
- if ( NULL == pSocketProtocol ) {
- DEBUG (( DEBUG_OPTION, "ERROR - pSocketProtocol is NULL!\r\n" ));
- }
- else if ( NULL == pOptionValue ) {
- DEBUG (( DEBUG_OPTION, "ERROR - No option buffer specified\r\n" ));
- }
- else
- {
- pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );
- if ( pSocket->bRxDisable || pSocket->bTxDisable ) {
- DEBUG (( DEBUG_OPTION, "ERROR - Socket has been shutdown!\r\n" ));
- }
- else {
- LengthInBytes = 0;
- pOptionData = NULL;
- switch ( level ) {
- default:
- //
- // See if the protocol will handle the option
- //
- if ( NULL != pSocket->pApi->pfnOptionSet ) {
- if ( pSocket->pApi->DefaultProtocol == level ) {
- Status = pSocket->pApi->pfnOptionSet ( pSocket,
- OptionName,
- pOptionValue,
- OptionLength );
- errno = pSocket->errno;
- break;
- }
- else {
- //
- // Protocol not supported
- //
- DEBUG (( DEBUG_OPTION,
- "ERROR - The socket does not support this protocol!\r\n" ));
- }
- }
- else {
- //
- // Protocol level not supported
- //
- DEBUG (( DEBUG_OPTION,
- "ERROR - %a does not support any options!\r\n",
- pSocket->pApi->pName ));
- }
- errno = ENOPROTOOPT;
- Status = EFI_INVALID_PARAMETER;
- break;
-
- case SOL_SOCKET:
- switch ( OptionName ) {
- default:
- //
- // Option not supported
- //
- DEBUG (( DEBUG_OPTION,
- "ERROR - Sockets does not support this option!\r\n" ));
- errno = EINVAL;
- Status = EFI_INVALID_PARAMETER;
- break;
-
- case SO_DEBUG:
- //
- // Set the debug flags
- //
- pOptionData = (UINT8 *)&pSocket->bOobInLine;
- LengthInBytes = sizeof ( pSocket->bOobInLine );
- break;
-
- case SO_OOBINLINE:
- pOptionData = (UINT8 *)&pSocket->bOobInLine;
- LengthInBytes = sizeof ( pSocket->bOobInLine );
-
- //
- // Validate the option length
- //
- if ( sizeof ( UINT32 ) == OptionLength ) {
- //
- // Restrict the input to TRUE or FALSE
- //
- bTrueFalse = TRUE;
- if ( 0 == *(UINT32 *)pOptionValue ) {
- bTrueFalse = FALSE;
- }
- pOptionValue = &bTrueFalse;
- }
- else {
- //
- // Force an invalid option length error
- //
- OptionLength = LengthInBytes - 1;
- }
- break;
-
- case SO_RCVTIMEO:
- //
- // Return the receive timeout
- //
- pOptionData = (UINT8 *)&pSocket->RxTimeout;
- LengthInBytes = sizeof ( pSocket->RxTimeout );
- break;
-
- case SO_RCVBUF:
- //
- // Return the maximum receive buffer size
- //
- pOptionData = (UINT8 *)&pSocket->MaxRxBuf;
- LengthInBytes = sizeof ( pSocket->MaxRxBuf );
- break;
-
- case SO_REUSEADDR:
- //
- // Return the address reuse flag
- //
- pOptionData = (UINT8 *)&pSocket->bReUseAddr;
- LengthInBytes = sizeof ( pSocket->bReUseAddr );
- break;
-
- case SO_SNDBUF:
- //
- // Send buffer size
- //
- //
- // Return the maximum transmit buffer size
- //
- pOptionData = (UINT8 *)&pSocket->MaxTxBuf;
- LengthInBytes = sizeof ( pSocket->MaxTxBuf );
- break;
- }
- break;
- }
-
- //
- // Determine if an option was found
- //
- if ( 0 != LengthInBytes ) {
- //
- // Validate the option length
- //
- if ( LengthInBytes <= OptionLength ) {
- //
- // Set the option value
- //
- CopyMem ( pOptionData, pOptionValue, LengthInBytes );
- errno = 0;
- Status = EFI_SUCCESS;
- }
- else {
- DEBUG (( DEBUG_OPTION,
- "ERROR - Buffer to small, %d bytes < %d bytes!\r\n",
- OptionLength,
- LengthInBytes ));
- }
- }
- }
- }
-
- //
- // Return the operation status
- //
- if ( NULL != pErrno ) {
- *pErrno = errno;
- }
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Allocate a packet for a receive or transmit operation.
-
- This support routine is called by ::EslSocketRxStart and the
- network specific TxBuffer routines to get buffer space for the
- next operation.
-
- @param[in] ppPacket Address to receive the ::ESL_PACKET structure
- @param[in] LengthInBytes Length of the packet structure
- @param[in] ZeroBytes Length of packet to zero
- @param[in] DebugFlags Flags for debug messages
-
- @retval EFI_SUCCESS - The packet was allocated successfully
-**/
-EFI_STATUS
-EslSocketPacketAllocate (
- IN ESL_PACKET ** ppPacket,
- IN size_t LengthInBytes,
- IN size_t ZeroBytes,
- IN UINTN DebugFlags
- )
-{
- ESL_PACKET * pPacket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Allocate a packet structure
- //
- LengthInBytes += sizeof ( *pPacket )
- - sizeof ( pPacket->Op );
- Status = gBS->AllocatePool ( EfiRuntimeServicesData,
- LengthInBytes,
- (VOID **)&pPacket );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DebugFlags | DEBUG_POOL,
- "0x%08x: Allocate pPacket, %d bytes\r\n",
- pPacket,
- LengthInBytes ));
- if ( 0 != ZeroBytes ) {
- ZeroMem ( &pPacket->Op, ZeroBytes );
- }
- pPacket->PacketSize = LengthInBytes;
- }
- else {
- DEBUG (( DebugFlags | DEBUG_POOL | DEBUG_INFO,
- "ERROR - Packet allocation failed for %d bytes, Status: %r\r\n",
- LengthInBytes,
- Status ));
- pPacket = NULL;
- }
-
- //
- // Return the packet
- //
- *ppPacket = pPacket;
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Free a packet used for receive or transmit operation.
-
- This support routine is called by the network specific Close
- and TxComplete routines and during error cases in RxComplete
- and TxBuffer. Note that the network layers typically place
- receive packets on the ESL_SOCKET::pRxFree list for reuse.
-
- @param[in] pPacket Address of an ::ESL_PACKET structure
- @param[in] DebugFlags Flags for debug messages
-
- @retval EFI_SUCCESS - The packet was allocated successfully
-**/
-EFI_STATUS
-EslSocketPacketFree (
- IN ESL_PACKET * pPacket,
- IN UINTN DebugFlags
- )
-{
- UINTN LengthInBytes;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Free a packet structure
- //
- LengthInBytes = pPacket->PacketSize;
- Status = gBS->FreePool ( pPacket );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DebugFlags | DEBUG_POOL,
- "0x%08x: Free pPacket, %d bytes\r\n",
- pPacket,
- LengthInBytes ));
- }
- else {
- DEBUG (( DebugFlags | DEBUG_POOL | DEBUG_INFO,
- "ERROR - Failed to free packet 0x%08x, Status: %r\r\n",
- pPacket,
- Status ));
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Poll a socket for pending activity.
-
- This routine builds a detected event mask which is returned to
- the caller in the buffer provided.
-
- The ::poll routine calls this routine to determine if the socket
- needs to be serviced as a result of connection, error, receive or
- transmit activity.
-
- @param[in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param[in] Events Events of interest for this socket
- @param[in] pEvents Address to receive the detected events
- @param[out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket successfully polled
- @retval EFI_INVALID_PARAMETER - When pEvents is NULL
-**/
-EFI_STATUS
-EslSocketPoll (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN short Events,
- IN short * pEvents,
- IN int * pErrno
- )
-{
- short DetectedEvents;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
- short ValidEvents;
- int _errno = EINVAL;
-
- DEBUG (( DEBUG_POLL, "Entering SocketPoll\r\n" ));
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
- DetectedEvents = 0;
- pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );
- pSocket->errno = 0;
-
- //
- // Verify the socket state
- //
- Status = EslSocketIsConfigured ( pSocket );
- if ( !EFI_ERROR ( Status )) {
- //
- // Check for invalid events
- //
- ValidEvents = POLLIN
- | POLLPRI
- | POLLOUT | POLLWRNORM
- | POLLERR
- | POLLHUP
- | POLLNVAL
- | POLLRDNORM
- | POLLRDBAND
- | POLLWRBAND ;
- if ( 0 != ( Events & ( ~ValidEvents ))) {
- DetectedEvents |= POLLNVAL;
- DEBUG (( DEBUG_INFO | DEBUG_POLL,
- "ERROR - Invalid event mask, Valid Events: 0x%04x, Invalid Events: 0x%04x\r\n",
- Events & ValidEvents,
- Events & ( ~ValidEvents )));
- }
- else {
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Increase the network performance by extending the
- // polling (idle) loop down into the LAN driver
- //
- EslSocketRxPoll ( pSocket );
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
-
- //
- // Check for pending connections
- //
- if ( 0 != pSocket->FifoDepth ) {
- //
- // A connection is waiting for an accept call
- // See posix connect documentation at
- // http://pubs.opengroup.org/onlinepubs/9699919799/functions/accept.htm
- //
- DetectedEvents |= POLLIN | POLLRDNORM;
- }
- if ( pSocket->bConnected ) {
- //
- // A connection is present
- // See posix connect documentation at
- // http://pubs.opengroup.org/onlinepubs/9699919799/functions/listen.htm
- //
- DetectedEvents |= POLLOUT | POLLWRNORM;
- }
-
- //
- // The following bits are set based upon the POSIX poll documentation at
- // http://pubs.opengroup.org/onlinepubs/9699919799/functions/poll.html
- //
-
- //
- // Check for urgent receive data
- //
- if ( 0 < pSocket->RxOobBytes ) {
- DetectedEvents |= POLLRDBAND | POLLPRI | POLLIN;
- }
-
- //
- // Check for normal receive data
- //
- if (( 0 < pSocket->RxBytes )
- || ( EFI_SUCCESS != pSocket->RxError )) {
- DetectedEvents |= POLLRDNORM | POLLIN;
- }
-
- //
- // Handle the receive errors
- //
- if (( EFI_SUCCESS != pSocket->RxError )
- && ( 0 == ( DetectedEvents & POLLIN ))) {
- DetectedEvents |= POLLERR | POLLIN | POLLRDNORM | POLLRDBAND;
- }
-
- //
- // Check for urgent transmit data buffer space
- //
- if (( MAX_TX_DATA > pSocket->TxOobBytes )
- || ( EFI_SUCCESS != pSocket->TxError )) {
- DetectedEvents |= POLLWRBAND;
- }
-
- //
- // Check for normal transmit data buffer space
- //
- if (( MAX_TX_DATA > pSocket->TxBytes )
- || ( EFI_SUCCESS != pSocket->TxError )) {
- DetectedEvents |= POLLWRNORM;
- }
-
- //
- // Handle the transmit error
- //
- if ( EFI_ERROR ( pSocket->TxError )) {
- DetectedEvents |= POLLERR;
- }
- _errno = pSocket->errno;
- }
- }
-
- //
- // Return the detected events
- //
- *pEvents = DetectedEvents & ( Events
- | POLLERR
- | POLLHUP
- | POLLNVAL );
- if ( NULL != pErrno ) {
- *pErrno = _errno;
- }
- //
- // Return the operation status
- //
- DEBUG (( DEBUG_POLL, "Exiting SocketPoll, Status: %r\r\n", Status ));
- return Status;
-}
-
-
-/** Allocate and initialize a ESL_PORT structure.
-
- This routine initializes an ::ESL_PORT structure for use by
- the socket. This routine calls a routine via
- ESL_PROTOCOL_API::pfnPortAllocate to initialize the network
- specific resources. The resources are released later by the
- \ref PortCloseStateMachine.
-
- This support routine is called by:
- <ul>
- <li>::EslSocketBind</li>
- <li>::EslTcp4ListenComplete</li>
- </ul>
- to connect the socket with the underlying network adapter
- to the socket.
-
- @param[in] pSocket Address of an ::ESL_SOCKET structure.
- @param[in] pService Address of an ::ESL_SERVICE structure.
- @param[in] ChildHandle Network protocol child handle
- @param[in] pSockAddr Address of a sockaddr structure that contains the
- connection point on the local machine. An IPv4 address
- of INADDR_ANY specifies that the connection is made to
- all of the network stacks on the platform. Specifying a
- specific IPv4 address restricts the connection to the
- network stack supporting that address. Specifying zero
- for the port causes the network layer to assign a port
- number from the dynamic range. Specifying a specific
- port number causes the network layer to use that port.
- @param[in] bBindTest TRUE if EslSocketBindTest should be called
- @param[in] DebugFlags Flags for debug messages
- @param[out] ppPort Buffer to receive new ::ESL_PORT structure address
-
- @retval EFI_SUCCESS - Socket successfully created
-**/
-EFI_STATUS
-EslSocketPortAllocate (
- IN ESL_SOCKET * pSocket,
- IN ESL_SERVICE * pService,
- IN EFI_HANDLE ChildHandle,
- IN CONST struct sockaddr * pSockAddr,
- IN BOOLEAN bBindTest,
- IN UINTN DebugFlags,
- OUT ESL_PORT ** ppPort
- )
-{
- UINTN LengthInBytes;
- UINT8 * pBuffer;
- ESL_IO_MGMT * pIo;
- ESL_LAYER * pLayer;
- ESL_PORT * pPort;
- EFI_SERVICE_BINDING_PROTOCOL * pServiceBinding;
- CONST ESL_SOCKET_BINDING * pSocketBinding;
- EFI_STATUS Status;
- EFI_STATUS TempStatus;
-
- DBG_ENTER ( );
-
- //
- // Verify the socket layer synchronization
- //
- VERIFY_TPL ( TPL_SOCKETS );
-
- //
- // Use for/break instead of goto
- pSocketBinding = pService->pSocketBinding;
- for ( ; ; ) {
- //
- // Allocate a port structure
- //
- pLayer = &mEslLayer;
- LengthInBytes = sizeof ( *pPort )
- + ESL_STRUCTURE_ALIGNMENT_BYTES
- + (( pSocketBinding->RxIo
- + pSocketBinding->TxIoNormal
- + pSocketBinding->TxIoUrgent )
- * sizeof ( ESL_IO_MGMT ));
- pPort = (ESL_PORT *) AllocateZeroPool ( LengthInBytes );
- if ( NULL == pPort ) {
- Status = EFI_OUT_OF_RESOURCES;
- pSocket->errno = ENOMEM;
- break;
- }
- DEBUG (( DebugFlags | DEBUG_POOL | DEBUG_INIT,
- "0x%08x: Allocate pPort, %d bytes\r\n",
- pPort,
- LengthInBytes ));
-
- //
- // Initialize the port
- //
- pPort->DebugFlags = DebugFlags;
- pPort->Handle = ChildHandle;
- pPort->pService = pService;
- pPort->pServiceBinding = pService->pServiceBinding;
- pPort->pSocket = pSocket;
- pPort->pSocketBinding = pService->pSocketBinding;
- pPort->Signature = PORT_SIGNATURE;
-
- //
- // Open the port protocol
- //
- Status = gBS->OpenProtocol ( pPort->Handle,
- pSocketBinding->pNetworkProtocolGuid,
- &pPort->pProtocol.v,
- pLayer->ImageHandle,
- NULL,
- EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR | DebugFlags,
- "ERROR - Failed to open network protocol GUID on controller 0x%08x\r\n",
- pPort->Handle ));
- pSocket->errno = EEXIST;
- break;
- }
- DEBUG (( DebugFlags,
- "0x%08x: Network protocol GUID opened on controller 0x%08x\r\n",
- pPort->pProtocol.v,
- pPort->Handle ));
-
- //
- // Initialize the port specific resources
- //
- Status = pSocket->pApi->pfnPortAllocate ( pPort,
- DebugFlags );
- if ( EFI_ERROR ( Status )) {
- break;
- }
-
- //
- // Set the local address
- //
- Status = pSocket->pApi->pfnLocalAddrSet ( pPort, pSockAddr, bBindTest );
- if ( EFI_ERROR ( Status )) {
- break;
- }
-
- //
- // Test the address/port configuration
- //
- if ( bBindTest ) {
- Status = EslSocketBindTest ( pPort, pSocket->pApi->BindTestErrno );
- if ( EFI_ERROR ( Status )) {
- break;
- }
- }
-
- //
- // Initialize the receive structures
- //
- pBuffer = (UINT8 *)&pPort[ 1 ];
- pBuffer = &pBuffer[ ESL_STRUCTURE_ALIGNMENT_BYTES ];
- pBuffer = (UINT8 *)( ESL_STRUCTURE_ALIGNMENT_MASK & (UINTN)pBuffer );
- pIo = (ESL_IO_MGMT *)pBuffer;
- if (( 0 != pSocketBinding->RxIo )
- && ( NULL != pSocket->pApi->pfnRxComplete )) {
- Status = EslSocketIoInit ( pPort,
- &pIo,
- pSocketBinding->RxIo,
- &pPort->pRxFree,
- DebugFlags | DEBUG_POOL,
- "receive",
- pSocket->pApi->pfnRxComplete );
- if ( EFI_ERROR ( Status )) {
- break;
- }
- }
-
- //
- // Initialize the urgent transmit structures
- //
- if (( 0 != pSocketBinding->TxIoUrgent )
- && ( NULL != pSocket->pApi->pfnTxOobComplete )) {
- Status = EslSocketIoInit ( pPort,
- &pIo,
- pSocketBinding->TxIoUrgent,
- &pPort->pTxOobFree,
- DebugFlags | DEBUG_POOL,
- "urgent transmit",
- pSocket->pApi->pfnTxOobComplete );
- if ( EFI_ERROR ( Status )) {
- break;
- }
- }
-
- //
- // Initialize the normal transmit structures
- //
- if (( 0 != pSocketBinding->TxIoNormal )
- && ( NULL != pSocket->pApi->pfnTxComplete )) {
- Status = EslSocketIoInit ( pPort,
- &pIo,
- pSocketBinding->TxIoNormal,
- &pPort->pTxFree,
- DebugFlags | DEBUG_POOL,
- "normal transmit",
- pSocket->pApi->pfnTxComplete );
- if ( EFI_ERROR ( Status )) {
- break;
- }
- }
-
- //
- // Add this port to the socket
- //
- pPort->pLinkSocket = pSocket->pPortList;
- pSocket->pPortList = pPort;
- DEBUG (( DebugFlags,
- "0x%08x: Socket adding port: 0x%08x\r\n",
- pSocket,
- pPort ));
-
- //
- // Add this port to the service
- //
- pPort->pLinkService = pService->pPortList;
- pService->pPortList = pPort;
-
- //
- // Return the port
- //
- *ppPort = pPort;
- break;
- }
-
- //
- // Clean up after the error if necessary
- //
- if ( EFI_ERROR ( Status )) {
- if ( NULL != pPort ) {
- //
- // Close the port
- //
- EslSocketPortClose ( pPort );
- }
- else {
- //
- // Close the port if necessary
- //
- pServiceBinding = pService->pServiceBinding;
- TempStatus = pServiceBinding->DestroyChild ( pServiceBinding,
- ChildHandle );
- if ( !EFI_ERROR ( TempStatus )) {
- DEBUG (( DEBUG_BIND | DEBUG_POOL,
- "0x%08x: %s port handle destroyed\r\n",
- ChildHandle,
- pSocketBinding->pName ));
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_BIND | DEBUG_POOL,
- "ERROR - Failed to destroy the %s port handle 0x%08x, Status: %r\r\n",
- pSocketBinding->pName,
- ChildHandle,
- TempStatus ));
- ASSERT ( EFI_SUCCESS == TempStatus );
- }
- }
- }
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Close a port.
-
- This routine releases the resources allocated by ::EslSocketPortAllocate.
- This routine calls ESL_PROTOCOL_API::pfnPortClose to release the network
- specific resources.
-
- This routine is called by:
- <ul>
- <li>::EslSocketPortAllocate - Port initialization failure</li>
- <li>::EslSocketPortCloseRxDone - Last step of close processing</li>
- <li>::EslTcp4ConnectComplete - Connection failure and reducing the port list to a single port</li>
- </ul>
- See the \ref PortCloseStateMachine section.
-
- @param[in] pPort Address of an ::ESL_PORT structure.
-
- @retval EFI_SUCCESS The port is closed
- @retval other Port close error
-**/
-EFI_STATUS
-EslSocketPortClose (
- IN ESL_PORT * pPort
- )
-{
- UINTN DebugFlags;
- ESL_LAYER * pLayer;
- ESL_PACKET * pPacket;
- ESL_PORT * pPreviousPort;
- ESL_SERVICE * pService;
- EFI_SERVICE_BINDING_PROTOCOL * pServiceBinding;
- CONST ESL_SOCKET_BINDING * pSocketBinding;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Verify the socket layer synchronization
- //
- VERIFY_TPL ( TPL_SOCKETS );
-
- //
- // Locate the port in the socket list
- //
- Status = EFI_SUCCESS;
- pLayer = &mEslLayer;
- DebugFlags = pPort->DebugFlags;
- pSocket = pPort->pSocket;
- pPreviousPort = pSocket->pPortList;
- if ( pPreviousPort == pPort ) {
- //
- // Remove this port from the head of the socket list
- //
- pSocket->pPortList = pPort->pLinkSocket;
- }
- else {
- //
- // Locate the port in the middle of the socket list
- //
- while (( NULL != pPreviousPort )
- && ( pPreviousPort->pLinkSocket != pPort )) {
- pPreviousPort = pPreviousPort->pLinkSocket;
- }
- if ( NULL != pPreviousPort ) {
- //
- // Remove the port from the middle of the socket list
- //
- pPreviousPort->pLinkSocket = pPort->pLinkSocket;
- }
- }
-
- //
- // Locate the port in the service list
- // Note that the port may not be in the service list
- // if the service has been shutdown.
- //
- pService = pPort->pService;
- if ( NULL != pService ) {
- pPreviousPort = pService->pPortList;
- if ( pPreviousPort == pPort ) {
- //
- // Remove this port from the head of the service list
- //
- pService->pPortList = pPort->pLinkService;
- }
- else {
- //
- // Locate the port in the middle of the service list
- //
- while (( NULL != pPreviousPort )
- && ( pPreviousPort->pLinkService != pPort )) {
- pPreviousPort = pPreviousPort->pLinkService;
- }
- if ( NULL != pPreviousPort ) {
- //
- // Remove the port from the middle of the service list
- //
- pPreviousPort->pLinkService = pPort->pLinkService;
- }
- }
- }
-
- //
- // Empty the urgent receive queue
- //
- while ( NULL != pSocket->pRxOobPacketListHead ) {
- pPacket = pSocket->pRxOobPacketListHead;
- pSocket->pRxOobPacketListHead = pPacket->pNext;
- pSocket->pApi->pfnPacketFree ( pPacket, &pSocket->RxOobBytes );
- EslSocketPacketFree ( pPacket, DEBUG_RX );
- }
- pSocket->pRxOobPacketListTail = NULL;
- ASSERT ( 0 == pSocket->RxOobBytes );
-
- //
- // Empty the receive queue
- //
- while ( NULL != pSocket->pRxPacketListHead ) {
- pPacket = pSocket->pRxPacketListHead;
- pSocket->pRxPacketListHead = pPacket->pNext;
- pSocket->pApi->pfnPacketFree ( pPacket, &pSocket->RxBytes );
- EslSocketPacketFree ( pPacket, DEBUG_RX );
- }
- pSocket->pRxPacketListTail = NULL;
- ASSERT ( 0 == pSocket->RxBytes );
-
- //
- // Empty the receive free queue
- //
- while ( NULL != pSocket->pRxFree ) {
- pPacket = pSocket->pRxFree;
- pSocket->pRxFree = pPacket->pNext;
- EslSocketPacketFree ( pPacket, DEBUG_RX );
- }
-
- //
- // Release the network specific resources
- //
- if ( NULL != pSocket->pApi->pfnPortClose ) {
- Status = pSocket->pApi->pfnPortClose ( pPort );
- }
-
- //
- // Done with the normal transmit events
- //
- Status = EslSocketIoFree ( pPort,
- &pPort->pTxFree,
- DebugFlags | DEBUG_POOL,
- "normal transmit" );
-
- //
- // Done with the urgent transmit events
- //
- Status = EslSocketIoFree ( pPort,
- &pPort->pTxOobFree,
- DebugFlags | DEBUG_POOL,
- "urgent transmit" );
-
- //
- // Done with the receive events
- //
- Status = EslSocketIoFree ( pPort,
- &pPort->pRxFree,
- DebugFlags | DEBUG_POOL,
- "receive" );
-
- //
- // Done with the lower layer network protocol
- //
- pSocketBinding = pPort->pSocketBinding;
- if ( NULL != pPort->pProtocol.v ) {
- Status = gBS->CloseProtocol ( pPort->Handle,
- pSocketBinding->pNetworkProtocolGuid,
- pLayer->ImageHandle,
- NULL );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DebugFlags,
- "0x%08x: Network protocol GUID closed on controller 0x%08x\r\n",
- pPort->pProtocol.v,
- pPort->Handle ));
- }
- else {
- DEBUG (( DEBUG_ERROR | DebugFlags,
- "ERROR - Failed to close network protocol GUID on controller 0x%08x, Status: %r\r\n",
- pPort->Handle,
- Status ));
- ASSERT ( EFI_SUCCESS == Status );
- }
- }
-
- //
- // Done with the network port
- //
- pServiceBinding = pPort->pServiceBinding;
- if ( NULL != pPort->Handle ) {
- Status = pServiceBinding->DestroyChild ( pServiceBinding,
- pPort->Handle );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DebugFlags | DEBUG_POOL,
- "0x%08x: %s port handle destroyed\r\n",
- pPort->Handle,
- pSocketBinding->pName ));
- }
- else {
- DEBUG (( DEBUG_ERROR | DebugFlags | DEBUG_POOL,
- "ERROR - Failed to destroy the %s port handle, Status: %r\r\n",
- pSocketBinding->pName,
- Status ));
- ASSERT ( EFI_SUCCESS == Status );
- }
- }
-
- //
- // Release the port structure
- //
- Status = gBS->FreePool ( pPort );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DebugFlags | DEBUG_POOL,
- "0x%08x: Free pPort, %d bytes\r\n",
- pPort,
- sizeof ( *pPort )));
- }
- else {
- DEBUG (( DEBUG_ERROR | DebugFlags | DEBUG_POOL,
- "ERROR - Failed to free pPort: 0x%08x, Status: %r\r\n",
- pPort,
- Status ));
- ASSERT ( EFI_SUCCESS == Status );
- }
-
- //
- // Mark the socket as closed if necessary
- //
- if ( NULL == pSocket->pPortList ) {
- pSocket->State = SOCKET_STATE_CLOSED;
- DEBUG (( DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Socket State: SOCKET_STATE_CLOSED\r\n",
- pSocket ));
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Port close state 3.
-
- This routine attempts to complete the port close operation.
-
- This routine is called by the TCP layer upon completion of
- the close operation and by ::EslSocketPortCloseTxDone.
- See the \ref PortCloseStateMachine section.
-
- @param[in] Event The close completion event
- @param[in] pPort Address of an ::ESL_PORT structure.
-**/
-VOID
-EslSocketPortCloseComplete (
- IN EFI_EVENT Event,
- IN ESL_PORT * pPort
- )
-{
- ESL_IO_MGMT * pIo;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
- VERIFY_AT_TPL ( TPL_SOCKETS );
-
- // Update the port state
- pPort->State = PORT_STATE_CLOSE_DONE;
- DEBUG (( DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Port Close State: PORT_STATE_CLOSE_DONE\r\n",
- pPort ));
-
- // Shutdown the receive operation on the port
- if ( NULL != pPort->pfnRxCancel ) {
- pIo = pPort->pRxActive;
- while ( NULL != pIo ) {
- EslSocketRxCancel ( pPort, pIo );
- pIo = pIo->pNext;
- }
- }
-
- // Determine if the receive operation is pending
- Status = EslSocketPortCloseRxDone ( pPort );
- DBG_EXIT_STATUS ( Status );
- --Status;
-}
-
-
-/** Port close state 4.
-
- This routine determines the state of the receive operations and
- continues the close operation after the pending receive operations
- are cancelled.
-
- This routine is called by
- <ul>
- <li>::EslSocketPortCloseComplete</li>
- <li>::EslSocketPortCloseTxDone</li>
- <li>::EslSocketRxComplete</li>
- </ul>
- to determine the state of the receive operations.
- See the \ref PortCloseStateMachine section.
-
- @param[in] pPort Address of an ::ESL_PORT structure.
-
- @retval EFI_SUCCESS The port is closed
- @retval EFI_NOT_READY The port is still closing
- @retval EFI_ALREADY_STARTED Error, the port is in the wrong state,
- most likely the routine was called already.
-**/
-EFI_STATUS
-EslSocketPortCloseRxDone (
- IN ESL_PORT * pPort
- )
-{
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Verify the socket layer synchronization
- //
- VERIFY_TPL ( TPL_SOCKETS );
-
- //
- // Verify that the port is closing
- //
- Status = EFI_ALREADY_STARTED;
- if ( PORT_STATE_CLOSE_DONE == pPort->State ) {
- //
- // Determine if the receive operation is pending
- //
- Status = EFI_NOT_READY;
- if ( NULL == pPort->pRxActive ) {
- //
- // The receive operation is complete
- // Update the port state
- //
- pPort->State = PORT_STATE_CLOSE_RX_DONE;
- DEBUG (( DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Port Close State: PORT_STATE_CLOSE_RX_DONE\r\n",
- pPort ));
-
- //
- // Complete the port close operation
- //
- Status = EslSocketPortClose ( pPort );
- }
- else {
- DEBUG_CODE_BEGIN ();
- {
- ESL_IO_MGMT * pIo;
- //
- // Display the outstanding receive operations
- //
- DEBUG (( DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Port Close: Receive still pending!\r\n",
- pPort ));
- pIo = pPort->pRxActive;
- while ( NULL != pIo ) {
- DEBUG (( DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Packet pending on network adapter\r\n",
- pIo->pPacket ));
- pIo = pIo->pNext;
- }
- }
- DEBUG_CODE_END ( );
- }
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Start the close operation on a port, state 1.
-
- This routine marks the port as closed and initiates the \ref
- PortCloseStateMachine. The first step is to allow the \ref
- TransmitEngine to run down.
-
- This routine is called by ::EslSocketCloseStart to initiate the socket
- network specific close operation on the socket.
-
- @param[in] pPort Address of an ::ESL_PORT structure.
- @param[in] bCloseNow Set TRUE to abort active transfers
- @param[in] DebugFlags Flags for debug messages
-
- @retval EFI_SUCCESS The port is closed, not normally returned
- @retval EFI_NOT_READY The port has started the closing process
- @retval EFI_ALREADY_STARTED Error, the port is in the wrong state,
- most likely the routine was called already.
-**/
-EFI_STATUS
-EslSocketPortCloseStart (
- IN ESL_PORT * pPort,
- IN BOOLEAN bCloseNow,
- IN UINTN DebugFlags
- )
-{
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Verify the socket layer synchronization
- //
- VERIFY_TPL ( TPL_SOCKETS );
-
- //
- // Mark the port as closing
- //
- Status = EFI_ALREADY_STARTED;
- pSocket = pPort->pSocket;
- pSocket->errno = EALREADY;
- if ( PORT_STATE_CLOSE_STARTED > pPort->State ) {
-
- //
- // Update the port state
- //
- pPort->State = PORT_STATE_CLOSE_STARTED;
- DEBUG (( DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Port Close State: PORT_STATE_CLOSE_STARTED\r\n",
- pPort ));
- pPort->bCloseNow = bCloseNow;
- pPort->DebugFlags = DebugFlags;
-
- //
- // Determine if transmits are complete
- //
- Status = EslSocketPortCloseTxDone ( pPort );
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Port close state 2.
-
- This routine determines the state of the transmit engine and
- continue the close operation after the transmission is complete.
- The next step is to stop the \ref ReceiveEngine.
- See the \ref PortCloseStateMachine section.
-
- This routine is called by ::EslSocketPortCloseStart to determine
- if the transmission is complete.
-
- @param[in] pPort Address of an ::ESL_PORT structure.
-
- @retval EFI_SUCCESS The port is closed, not normally returned
- @retval EFI_NOT_READY The port is still closing
- @retval EFI_ALREADY_STARTED Error, the port is in the wrong state,
- most likely the routine was called already.
-
-**/
-EFI_STATUS
-EslSocketPortCloseTxDone (
- IN ESL_PORT * pPort
- )
-{
- ESL_IO_MGMT * pIo;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Verify the socket layer synchronization
- //
- VERIFY_TPL ( TPL_SOCKETS );
-
- //
- // All transmissions are complete or must be stopped
- // Mark the port as TX complete
- //
- Status = EFI_ALREADY_STARTED;
- if ( PORT_STATE_CLOSE_STARTED == pPort->State ) {
- //
- // Verify that the transmissions are complete
- //
- pSocket = pPort->pSocket;
- if ( pPort->bCloseNow
- || ( EFI_SUCCESS != pSocket->TxError )
- || (( NULL == pPort->pTxActive )
- && ( NULL == pPort->pTxOobActive ))) {
- //
- // Update the port state
- //
- pPort->State = PORT_STATE_CLOSE_TX_DONE;
- DEBUG (( DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Port Close State: PORT_STATE_CLOSE_TX_DONE\r\n",
- pPort ));
-
- //
- // Close the port
- // Skip the close operation if the port is not configured
- //
- Status = EFI_SUCCESS;
- pSocket = pPort->pSocket;
- if (( pPort->bConfigured )
- && ( NULL != pSocket->pApi->pfnPortCloseOp )) {
- //
- // Start the close operation
- //
- Status = pSocket->pApi->pfnPortCloseOp ( pPort );
- DEBUG (( DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Port Close: Close operation still pending!\r\n",
- pPort ));
- ASSERT ( EFI_SUCCESS == Status );
- }
- else {
- //
- // The receive operation is complete
- // Update the port state
- //
- EslSocketPortCloseComplete ( NULL, pPort );
- }
- }
- else {
- //
- // Transmissions are still active, exit
- //
- Status = EFI_NOT_READY;
- pSocket->errno = EAGAIN;
- DEBUG_CODE_BEGIN ( );
- {
- ESL_PACKET * pPacket;
-
- DEBUG (( DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Port Close: Transmits are still pending!\r\n",
- pPort ));
-
- //
- // Display the pending urgent transmit packets
- //
- pPacket = pSocket->pTxOobPacketListHead;
- while ( NULL != pPacket ) {
- DEBUG (( DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Packet pending on urgent TX list, %d bytes\r\n",
- pPacket,
- pPacket->PacketSize ));
- pPacket = pPacket->pNext;
- }
-
- pIo = pPort->pTxOobActive;
- while ( NULL != pIo ) {
- pPacket = pIo->pPacket;
- DEBUG (( DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Packet active %d bytes, pIo: 0x%08x\r\n",
- pPacket,
- pPacket->PacketSize,
- pIo ));
- pIo = pIo->pNext;
- }
-
- //
- // Display the pending normal transmit packets
- //
- pPacket = pSocket->pTxPacketListHead;
- while ( NULL != pPacket ) {
- DEBUG (( DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Packet pending on normal TX list, %d bytes\r\n",
- pPacket,
- pPacket->PacketSize ));
- pPacket = pPacket->pNext;
- }
-
- pIo = pPort->pTxActive;
- while ( NULL != pIo ) {
- pPacket = pIo->pPacket;
- DEBUG (( DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Packet active %d bytes, pIo: 0x%08x\r\n",
- pPacket,
- pPacket->PacketSize,
- pIo ));
- pIo = pIo->pNext;
- }
- }
- DEBUG_CODE_END ();
- }
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Receive data from a network connection.
-
- This routine calls the network specific routine to remove the
- next portion of data from the receive queue and return it to the
- caller.
-
- The ::recvfrom routine calls this routine to determine if any data
- is received from the remote system. Note that the other routines
- ::recv and ::read are layered on top of ::recvfrom.
-
- @param[in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param[in] Flags Message control flags
- @param[in] BufferLength Length of the the buffer
- @param[in] pBuffer Address of a buffer to receive the data.
- @param[in] pDataLength Number of received data bytes in the buffer.
- @param[out] pAddress Network address to receive the remote system address
- @param[in,out] pAddressLength Length of the remote network address structure
- @param[out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket data successfully received
-**/
-EFI_STATUS
-EslSocketReceive (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN INT32 Flags,
- IN size_t BufferLength,
- IN UINT8 * pBuffer,
- OUT size_t * pDataLength,
- OUT struct sockaddr * pAddress,
- IN OUT socklen_t * pAddressLength,
- IN int * pErrno
- )
-{
- union {
- struct sockaddr_in v4;
- struct sockaddr_in6 v6;
- } Addr;
- socklen_t AddressLength;
- BOOLEAN bConsumePacket;
- BOOLEAN bUrgentQueue;
- size_t DataLength;
- ESL_PACKET * pNextPacket;
- ESL_PACKET * pPacket;
- ESL_PORT * pPort;
- ESL_PACKET ** ppQueueHead;
- ESL_PACKET ** ppQueueTail;
- struct sockaddr * pRemoteAddress;
- size_t * pRxDataBytes;
- ESL_SOCKET * pSocket;
- size_t SkipBytes;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Validate the socket
- //
- pSocket = NULL;
- if ( NULL != pSocketProtocol ) {
- pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );
-
- //
- // Validate the return address parameters
- //
- if (( NULL == pAddress ) || ( NULL != pAddressLength )) {
- //
- // Return the transmit error if necessary
- //
- if ( EFI_SUCCESS != pSocket->TxError ) {
- pSocket->errno = EIO;
- Status = pSocket->TxError;
- pSocket->TxError = EFI_SUCCESS;
- }
- else {
- //
- // Verify the socket state
- //
- Status = EslSocketIsConfigured ( pSocket );
- if ( !EFI_ERROR ( Status )) {
- //
- // Validate the buffer length
- //
- if (( NULL == pDataLength )
- || ( NULL == pBuffer )) {
- if ( NULL == pDataLength ) {
- DEBUG (( DEBUG_RX,
- "ERROR - pDataLength is NULL!\r\n" ));
- }
- else {
- DEBUG (( DEBUG_RX,
- "ERROR - pBuffer is NULL!\r\n" ));
- }
- Status = EFI_INVALID_PARAMETER;
- pSocket->errno = EFAULT;
- }
- else {
- //
- // Verify the API
- //
- if ( NULL == pSocket->pApi->pfnReceive ) {
- Status = EFI_UNSUPPORTED;
- pSocket->errno = ENOTSUP;
- }
- else {
- //
- // Zero the receive address if being returned
- //
- pRemoteAddress = NULL;
- if ( NULL != pAddress ) {
- pRemoteAddress = (struct sockaddr *)&Addr;
- ZeroMem ( pRemoteAddress, sizeof ( Addr ));
- pRemoteAddress->sa_family = pSocket->pApi->AddressFamily;
- pRemoteAddress->sa_len = (UINT8)pSocket->pApi->AddressLength;
- }
-
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Assume failure
- //
- Status = EFI_UNSUPPORTED;
- pSocket->errno = ENOTCONN;
-
- //
- // Verify that the socket is connected
- //
- if ( SOCKET_STATE_CONNECTED == pSocket->State ) {
- //
- // Poll the network to increase performance
- //
- EslSocketRxPoll ( pSocket );
-
- //
- // Locate the port
- //
- pPort = pSocket->pPortList;
- if ( NULL != pPort ) {
- //
- // Determine the queue head
- //
- bUrgentQueue = (BOOLEAN)( 0 != ( Flags & MSG_OOB ));
- if ( bUrgentQueue ) {
- ppQueueHead = &pSocket->pRxOobPacketListHead;
- ppQueueTail = &pSocket->pRxOobPacketListTail;
- pRxDataBytes = &pSocket->RxOobBytes;
- }
- else {
- ppQueueHead = &pSocket->pRxPacketListHead;
- ppQueueTail = &pSocket->pRxPacketListTail;
- pRxDataBytes = &pSocket->RxBytes;
- }
-
- //
- // Determine if there is any data on the queue
- //
- *pDataLength = 0;
- pPacket = *ppQueueHead;
- if ( NULL != pPacket ) {
- //
- // Copy the received data
- //
- do {
- //
- // Attempt to receive a packet
- //
- SkipBytes = 0;
- bConsumePacket = (BOOLEAN)( 0 == ( Flags & MSG_PEEK ));
- pBuffer = pSocket->pApi->pfnReceive ( pPort,
- pPacket,
- &bConsumePacket,
- BufferLength,
- pBuffer,
- &DataLength,
- (struct sockaddr *)&Addr,
- &SkipBytes );
- *pDataLength += DataLength;
- BufferLength -= DataLength;
-
- //
- // Determine if the data is being read
- //
- pNextPacket = pPacket->pNext;
- if ( bConsumePacket ) {
- //
- // All done with this packet
- // Account for any discarded data
- //
- pSocket->pApi->pfnPacketFree ( pPacket, pRxDataBytes );
- if ( 0 != SkipBytes ) {
- DEBUG (( DEBUG_RX,
- "0x%08x: Port, packet read, skipping over 0x%08x bytes\r\n",
- pPort,
- SkipBytes ));
- }
-
- //
- // Remove this packet from the queue
- //
- *ppQueueHead = pPacket->pNext;
- if ( NULL == *ppQueueHead ) {
- *ppQueueTail = NULL;
- }
-
- //
- // Move the packet to the free queue
- //
- pPacket->pNext = pSocket->pRxFree;
- pSocket->pRxFree = pPacket;
- DEBUG (( DEBUG_RX,
- "0x%08x: Port freeing packet 0x%08x\r\n",
- pPort,
- pPacket ));
-
- //
- // Restart the receive operation if necessary
- //
- if (( NULL != pPort->pRxFree )
- && ( MAX_RX_DATA > pSocket->RxBytes )) {
- EslSocketRxStart ( pPort );
- }
- }
-
- //
- // Get the next packet
- //
- pPacket = pNextPacket;
- } while (( SOCK_STREAM == pSocket->Type )
- && ( NULL != pPacket )
- && ( 0 < BufferLength ));
-
- //
- // Successful operation
- //
- Status = EFI_SUCCESS;
- pSocket->errno = 0;
- }
- else {
- //
- // The queue is empty
- // Determine if it is time to return the receive error
- //
- if ( EFI_ERROR ( pSocket->RxError )
- && ( NULL == pSocket->pRxPacketListHead )
- && ( NULL == pSocket->pRxOobPacketListHead )) {
- Status = pSocket->RxError;
- pSocket->RxError = EFI_SUCCESS;
- switch ( Status ) {
- default:
- pSocket->errno = EIO;
- break;
-
- case EFI_CONNECTION_FIN:
- //
- // Continue to return zero bytes received when the
- // peer has successfully closed the connection
- //
- pSocket->RxError = EFI_CONNECTION_FIN;
- *pDataLength = 0;
- pSocket->errno = 0;
- Status = EFI_SUCCESS;
- break;
-
- case EFI_CONNECTION_REFUSED:
- pSocket->errno = ECONNREFUSED;
- break;
-
- case EFI_CONNECTION_RESET:
- pSocket->errno = ECONNRESET;
- break;
-
- case EFI_HOST_UNREACHABLE:
- pSocket->errno = EHOSTUNREACH;
- break;
-
- case EFI_NETWORK_UNREACHABLE:
- pSocket->errno = ENETUNREACH;
- break;
-
- case EFI_PORT_UNREACHABLE:
- pSocket->errno = EPROTONOSUPPORT;
- break;
-
- case EFI_PROTOCOL_UNREACHABLE:
- pSocket->errno = ENOPROTOOPT;
- break;
- }
- }
- else {
- Status = EFI_NOT_READY;
- pSocket->errno = EAGAIN;
- }
- }
- }
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
-
- if (( !EFI_ERROR ( Status )) && ( NULL != pAddress )) {
- //
- // Return the remote address if requested, truncate if necessary
- //
- AddressLength = pRemoteAddress->sa_len;
- if ( AddressLength > *pAddressLength ) {
- AddressLength = *pAddressLength;
- }
- DEBUG (( DEBUG_RX,
- "Returning the remote address, 0x%016x bytes --> 0x%16x\r\n", *pAddressLength, pAddress ));
- ZeroMem ( pAddress, *pAddressLength );
- CopyMem ( pAddress, &Addr, AddressLength );
-
- //
- // Update the address length
- //
- *pAddressLength = pRemoteAddress->sa_len;
- }
- }
- }
- }
- }
-
-
- }
- else {
- //
- // Bad return address pointer and length
- //
- Status = EFI_INVALID_PARAMETER;
- pSocket->errno = EINVAL;
- }
- }
-
- //
- // Return the operation status
- //
- if ( NULL != pErrno ) {
- if ( NULL != pSocket ) {
- *pErrno = pSocket->errno;
- }
- else {
- Status = EFI_INVALID_PARAMETER;
- *pErrno = ENOTSOCK;
- }
- }
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Cancel the receive operations.
-
- This routine cancels a pending receive operation.
- See the \ref ReceiveEngine section.
-
- This routine is called by ::EslSocketShutdown when the socket
- layer is being shutdown.
-
- @param[in] pPort Address of an ::ESL_PORT structure
- @param[in] pIo Address of an ::ESL_IO_MGMT structure
-**/
-VOID
-EslSocketRxCancel (
- IN ESL_PORT * pPort,
- IN ESL_IO_MGMT * pIo
- )
-{
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Cancel the outstanding receive
- //
- Status = pPort->pfnRxCancel ( pPort->pProtocol.v,
- &pIo->Token );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( pPort->DebugFlags | DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Packet receive aborted on port: 0x%08x\r\n",
- pIo->pPacket,
- pPort ));
- }
- else {
- DEBUG (( pPort->DebugFlags | DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Packet receive pending on Port 0x%08x, Status: %r\r\n",
- pIo->pPacket,
- pPort,
- Status ));
- }
- DBG_EXIT ( );
-}
-
-
-/** Process the receive completion.
-
- This routine queues the data in FIFO order in either the urgent
- or normal data queues depending upon the type of data received.
- See the \ref ReceiveEngine section.
-
- This routine is called when some data is received by:
- <ul>
- <li>::EslIp4RxComplete</li>
- <li>::EslTcp4RxComplete</li>
- <li>::EslUdp4RxComplete</li>
- </ul>
-
- @param[in] pIo Address of an ::ESL_IO_MGMT structure
- @param[in] Status Receive status
- @param[in] LengthInBytes Length of the receive data
- @param[in] bUrgent TRUE if urgent data is received and FALSE
- for normal data.
-**/
-VOID
-EslSocketRxComplete (
- IN ESL_IO_MGMT * pIo,
- IN EFI_STATUS Status,
- IN UINTN LengthInBytes,
- IN BOOLEAN bUrgent
- )
-{
- BOOLEAN bUrgentQueue;
- ESL_IO_MGMT * pIoNext;
- ESL_PACKET * pPacket;
- ESL_PORT * pPort;
- ESL_PACKET * pPrevious;
- ESL_PACKET ** ppQueueHead;
- ESL_PACKET ** ppQueueTail;
- size_t * pRxBytes;
- ESL_SOCKET * pSocket;
-
- DBG_ENTER ( );
- VERIFY_AT_TPL ( TPL_SOCKETS );
-
- //
- // Locate the active receive packet
- //
- pPacket = pIo->pPacket;
- pPort = pIo->pPort;
- pSocket = pPort->pSocket;
-
- //
- // pPort->pRxActive
- // |
- // V
- // +-------------+ +-------------+ +-------------+
- // Active | ESL_IO_MGMT |-->| ESL_IO_MGMT |-->| ESL_IO_MGMT |--> NULL
- // +-------------+ +-------------+ +-------------+
- //
- // +-------------+ +-------------+ +-------------+
- // Free | ESL_IO_MGMT |-->| ESL_IO_MGMT |-->| ESL_IO_MGMT |--> NULL
- // +-------------+ +-------------+ +-------------+
- // ^
- // |
- // pPort->pRxFree
- //
- //
- // Remove the IO structure from the active list
- // The following code searches for the entry in the list and does not
- // assume that the receive operations complete in the order they were
- // issued to the UEFI network layer.
- //
- pIoNext = pPort->pRxActive;
- while (( NULL != pIoNext ) && ( pIoNext != pIo ) && ( pIoNext->pNext != pIo ))
- {
- pIoNext = pIoNext->pNext;
- }
- ASSERT ( NULL != pIoNext );
- if ( pIoNext == pIo ) {
- pPort->pRxActive = pIo->pNext; // Beginning of list
- }
- else {
- pIoNext->pNext = pIo->pNext; // Middle of list
- }
-
- //
- // Free the IO structure
- //
- pIo->pNext = pPort->pRxFree;
- pPort->pRxFree = pIo;
-
- //
- // pRxOobPacketListHead pRxOobPacketListTail
- // | |
- // V V
- // +------------+ +------------+ +------------+
- // Urgent Data | ESL_PACKET |-->| ESL_PACKET |-->| ESL_PACKET |--> NULL
- // +------------+ +------------+ +------------+
- //
- // +------------+ +------------+ +------------+
- // Normal Data | ESL_PACKET |-->| ESL_PACKET |-->| ESL_PACKET |--> NULL
- // +------------+ +------------+ +------------+
- // ^ ^
- // | |
- // pRxPacketListHead pRxPacketListTail
- //
- //
- // Determine the queue to use
- //
- bUrgentQueue = (BOOLEAN)( bUrgent
- && pSocket->pApi->bOobSupported
- && ( !pSocket->bOobInLine ));
- if ( bUrgentQueue ) {
- ppQueueHead = &pSocket->pRxOobPacketListHead;
- ppQueueTail = &pSocket->pRxOobPacketListTail;
- pRxBytes = &pSocket->RxOobBytes;
- }
- else {
- ppQueueHead = &pSocket->pRxPacketListHead;
- ppQueueTail = &pSocket->pRxPacketListTail;
- pRxBytes = &pSocket->RxBytes;
- }
-
- //
- // Determine if this receive was successful
- //
- if (( !EFI_ERROR ( Status ))
- && ( PORT_STATE_CLOSE_STARTED > pPort->State )
- && ( !pSocket->bRxDisable )) {
- //
- // Account for the received data
- //
- *pRxBytes += LengthInBytes;
-
- //
- // Log the received data
- //
- DEBUG (( DEBUG_RX | DEBUG_INFO,
- "0x%08x: Packet queued on %s queue of port 0x%08x with 0x%08x bytes of %s data\r\n",
- pPacket,
- bUrgentQueue ? L"urgent" : L"normal",
- pPort,
- LengthInBytes,
- bUrgent ? L"urgent" : L"normal" ));
-
- //
- // Add the packet to the list tail.
- //
- pPacket->pNext = NULL;
- pPrevious = *ppQueueTail;
- if ( NULL == pPrevious ) {
- *ppQueueHead = pPacket;
- }
- else {
- pPrevious->pNext = pPacket;
- }
- *ppQueueTail = pPacket;
-
- //
- // Attempt to restart this receive operation
- //
- if ( pSocket->MaxRxBuf > pSocket->RxBytes ) {
- EslSocketRxStart ( pPort );
- }
- else {
- DEBUG (( DEBUG_RX,
- "0x%08x: Port RX suspended, 0x%08x bytes queued\r\n",
- pPort,
- pSocket->RxBytes ));
- }
- }
- else {
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_RX | DEBUG_INFO,
- "ERROR - Receive error on port 0x%08x, packet 0x%08x, Status:%r\r\n",
- pPort,
- pPacket,
- Status ));
- }
-
- //
- // Account for the receive bytes and release the driver's buffer
- //
- if ( !EFI_ERROR ( Status )) {
- *pRxBytes += LengthInBytes;
- pSocket->pApi->pfnPacketFree ( pPacket, pRxBytes );
- }
-
- //
- // Receive error, free the packet save the error
- //
- EslSocketPacketFree ( pPacket, DEBUG_RX );
- if ( !EFI_ERROR ( pSocket->RxError )) {
- pSocket->RxError = Status;
- }
-
- //
- // Update the port state
- //
- if ( PORT_STATE_CLOSE_STARTED <= pPort->State ) {
- if ( PORT_STATE_CLOSE_DONE == pPort->State ) {
- EslSocketPortCloseRxDone ( pPort );
- }
- }
- else {
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_RX | DEBUG_INFO,
- "0x%08x: Port state: PORT_STATE_RX_ERROR, Status: %r\r\n",
- pPort,
- Status ));
- pPort->State = PORT_STATE_RX_ERROR;
- }
- }
- }
-
- DBG_EXIT ( );
-}
-
-
-/** Poll a socket for pending receive activity.
-
- This routine is called at elivated TPL and extends the idle
- loop which polls a socket down into the LAN driver layer to
- determine if there is any receive activity.
-
- The ::EslSocketPoll, ::EslSocketReceive and ::EslSocketTransmit
- routines call this routine when there is nothing to do.
-
- @param[in] pSocket Address of an ::EFI_SOCKET structure.
- **/
-VOID
-EslSocketRxPoll (
- IN ESL_SOCKET * pSocket
- )
-{
- ESL_PORT * pPort;
-
- DEBUG (( DEBUG_POLL, "Entering EslSocketRxPoll\r\n" ));
-
- //
- // Increase the network performance by extending the
- // polling (idle) loop down into the LAN driver
- //
- pPort = pSocket->pPortList;
- while ( NULL != pPort ) {
- //
- // Poll the LAN adapter
- //
- pPort->pfnRxPoll ( pPort->pProtocol.v );
-
- //
- // Locate the next LAN adapter
- //
- pPort = pPort->pLinkSocket;
- }
-
- DEBUG (( DEBUG_POLL, "Exiting EslSocketRxPoll\r\n" ));
-}
-
-
-/** Start a receive operation.
-
- This routine posts a receive buffer to the network adapter.
- See the \ref ReceiveEngine section.
-
- This support routine is called by:
- <ul>
- <li>::EslIp4Receive to restart the receive engine to release flow control.</li>
- <li>::EslIp4RxComplete to continue the operation of the receive engine if flow control is not being applied.</li>
- <li>::EslIp4SocketIsConfigured to start the receive engine for the new socket.</li>
- <li>::EslTcp4ListenComplete to start the recevie engine for the new socket.</li>
- <li>::EslTcp4Receive to restart the receive engine to release flow control.</li>
- <li>::EslTcp4RxComplete to continue the operation of the receive engine if flow control is not being applied.</li>
- <li>::EslUdp4Receive to restart the receive engine to release flow control.</li>
- <li>::EslUdp4RxComplete to continue the operation of the receive engine if flow control is not being applied.</li>
- <li>::EslUdp4SocketIsConfigured to start the recevie engine for the new socket.</li>
- </ul>
-
- @param[in] pPort Address of an ::ESL_PORT structure.
-**/
-VOID
-EslSocketRxStart (
- IN ESL_PORT * pPort
- )
-{
- UINT8 * pBuffer;
- ESL_IO_MGMT * pIo;
- ESL_PACKET * pPacket;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Determine if a receive is already pending
- //
- Status = EFI_SUCCESS;
- pPacket = NULL;
- pSocket = pPort->pSocket;
- if ( !EFI_ERROR ( pPort->pSocket->RxError )) {
- if (( NULL != pPort->pRxFree )
- && ( !pSocket->bRxDisable )
- && ( PORT_STATE_CLOSE_STARTED > pPort->State )) {
- //
- // Start all of the pending receive operations
- //
- while ( NULL != pPort->pRxFree ) {
- //
- // Determine if there are any free packets
- //
- pPacket = pSocket->pRxFree;
- if ( NULL != pPacket ) {
- //
- // Remove this packet from the free list
- //
- pSocket->pRxFree = pPacket->pNext;
- DEBUG (( DEBUG_RX,
- "0x%08x: Port removed packet 0x%08x from free list\r\n",
- pPort,
- pPacket ));
- }
- else {
- //
- // Allocate a packet structure
- //
- Status = EslSocketPacketAllocate ( &pPacket,
- pSocket->pApi->RxPacketBytes,
- pSocket->pApi->RxZeroBytes,
- DEBUG_RX );
- if ( EFI_ERROR ( Status )) {
- pPacket = NULL;
- DEBUG (( DEBUG_ERROR | DEBUG_RX,
- "0x%08x: Port failed to allocate RX packet, Status: %r\r\n",
- pPort,
- Status ));
- break;
- }
- }
-
- //
- // Connect the IO and packet structures
- //
- pIo = pPort->pRxFree;
- pIo->pPacket = pPacket;
-
- //
- // Eliminate the need for IP4 and UDP4 specific routines by
- // clearing the RX data pointer here.
- //
- // No driver buffer for this packet
- //
- // +--------------------+
- // | ESL_IO_MGMT |
- // | |
- // | +---------------+
- // | | Token |
- // | | RxData --> NULL
- // +----+---------------+
- //
- pBuffer = (UINT8 *)pIo;
- pBuffer = &pBuffer[ pSocket->pApi->RxBufferOffset ];
- *(VOID **)pBuffer = NULL;
-
- //
- // Network specific receive packet initialization
- //
- if ( NULL != pSocket->pApi->pfnRxStart ) {
- pSocket->pApi->pfnRxStart ( pPort, pIo );
- }
-
- //
- // Start the receive on the packet
- //
- Status = pPort->pfnRxStart ( pPort->pProtocol.v, &pIo->Token );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_RX | DEBUG_INFO,
- "0x%08x: Packet receive pending on port 0x%08x\r\n",
- pPacket,
- pPort ));
- //
- // Allocate the receive control structure
- //
- pPort->pRxFree = pIo->pNext;
-
- //
- // Mark this receive as pending
- //
- pIo->pNext = pPort->pRxActive;
- pPort->pRxActive = pIo;
-
- }
- else {
- DEBUG (( DEBUG_RX | DEBUG_INFO,
- "ERROR - Failed to post a receive on port 0x%08x, Status: %r\r\n",
- pPort,
- Status ));
- if ( !EFI_ERROR ( pSocket->RxError )) {
- //
- // Save the error status
- //
- pSocket->RxError = Status;
- }
-
- //
- // Free the packet
- //
- pIo->pPacket = NULL;
- pPacket->pNext = pSocket->pRxFree;
- pSocket->pRxFree = pPacket;
- break;
- }
- }
- }
- else {
- if ( NULL == pPort->pRxFree ) {
- DEBUG (( DEBUG_RX | DEBUG_INFO,
- "0x%08x: Port, no available ESL_IO_MGMT structures\r\n",
- pPort));
- }
- if ( pSocket->bRxDisable ) {
- DEBUG (( DEBUG_RX | DEBUG_INFO,
- "0x%08x: Port, receive disabled!\r\n",
- pPort ));
- }
- if ( PORT_STATE_CLOSE_STARTED <= pPort->State ) {
- DEBUG (( DEBUG_RX | DEBUG_INFO,
- "0x%08x: Port, is closing!\r\n",
- pPort ));
- }
- }
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_RX,
- "ERROR - Previous receive error, Status: %r\r\n",
- pPort->pSocket->RxError ));
- }
-
- DBG_EXIT ( );
-}
-
-
-/** Shutdown the socket receive and transmit operations.
-
- This routine sets a flag to stop future transmissions and calls
- the network specific layer to cancel the pending receive operation.
-
- The ::shutdown routine calls this routine to stop receive and transmit
- operations on the socket.
-
- @param[in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param[in] How Which operations to stop
- @param[out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket operations successfully shutdown
-**/
-EFI_STATUS
-EslSocketShutdown (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int How,
- IN int * pErrno
- )
-{
- ESL_IO_MGMT * pIo;
- ESL_PORT * pPort;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Validate the socket
- //
- pSocket = NULL;
- if ( NULL != pSocketProtocol ) {
- pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );
-
- //
- // Verify that the socket is connected
- //
- if ( pSocket->bConnected ) {
- //
- // Validate the How value
- //
- if (( SHUT_RD <= How ) && ( SHUT_RDWR >= How )) {
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Disable the receiver if requested
- //
- if (( SHUT_RD == How ) || ( SHUT_RDWR == How )) {
- pSocket->bRxDisable = TRUE;
- }
-
- //
- // Disable the transmitter if requested
- //
- if (( SHUT_WR == How ) || ( SHUT_RDWR == How )) {
- pSocket->bTxDisable = TRUE;
- }
-
- //
- // Cancel the pending receive operations
- //
- if ( pSocket->bRxDisable ) {
- //
- // Walk the list of ports
- //
- pPort = pSocket->pPortList;
- while ( NULL != pPort ) {
- //
- // Walk the list of active receive operations
- //
- pIo = pPort->pRxActive;
- while ( NULL != pIo ) {
- EslSocketRxCancel ( pPort, pIo );
- }
-
- //
- // Set the next port
- //
- pPort = pPort->pLinkSocket;
- }
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
- }
- else {
- //
- // Invalid How value
- //
- pSocket->errno = EINVAL;
- Status = EFI_INVALID_PARAMETER;
- }
- }
- else {
- //
- // The socket is not connected
- //
- pSocket->errno = ENOTCONN;
- Status = EFI_NOT_STARTED;
- }
- }
-
- //
- // Return the operation status
- //
- if ( NULL != pErrno ) {
- if ( NULL != pSocket ) {
- *pErrno = pSocket->errno;
- }
- else {
- Status = EFI_INVALID_PARAMETER;
- *pErrno = ENOTSOCK;
- }
- }
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Send data using a network connection.
-
- This routine calls the network specific layer to queue the data
- for transmission. Eventually the buffer will reach the head of
- the queue and will get transmitted over the network by the
- \ref TransmitEngine. For datagram
- sockets (SOCK_DGRAM and SOCK_RAW) there is no guarantee that
- the data reaches the application running on the remote system.
-
- The ::sendto routine calls this routine to send data to the remote
- system. Note that ::send and ::write are layered on top of ::sendto.
-
- @param[in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param[in] Flags Message control flags
- @param[in] BufferLength Length of the the buffer
- @param[in] pBuffer Address of a buffer containing the data to send
- @param[in] pDataLength Address to receive the number of data bytes sent
- @param[in] pAddress Network address of the remote system address
- @param[in] AddressLength Length of the remote network address structure
- @param[out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket data successfully queued for transmit
-**/
-EFI_STATUS
-EslSocketTransmit (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int Flags,
- IN size_t BufferLength,
- IN CONST UINT8 * pBuffer,
- OUT size_t * pDataLength,
- IN const struct sockaddr * pAddress,
- IN socklen_t AddressLength,
- IN int * pErrno
- )
-{
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Validate the socket
- //
- pSocket = NULL;
- if ( NULL != pSocketProtocol ) {
- pSocket = SOCKET_FROM_PROTOCOL ( pSocketProtocol );
-
- //
- // Return the transmit error if necessary
- //
- if ( EFI_SUCCESS != pSocket->TxError ) {
- pSocket->errno = EIO;
- Status = pSocket->TxError;
- pSocket->TxError = EFI_SUCCESS;
- }
- else {
- //
- // Verify the socket state
- //
- Status = EslSocketIsConfigured ( pSocket );
- if ( !EFI_ERROR ( Status )) {
- //
- // Verify that transmit is still allowed
- //
- if ( !pSocket->bTxDisable ) {
- //
- // Validate the buffer length
- //
- if (( NULL == pDataLength )
- && ( 0 > pDataLength )
- && ( NULL == pBuffer )) {
- if ( NULL == pDataLength ) {
- DEBUG (( DEBUG_RX,
- "ERROR - pDataLength is NULL!\r\n" ));
- }
- else if ( NULL == pBuffer ) {
- DEBUG (( DEBUG_RX,
- "ERROR - pBuffer is NULL!\r\n" ));
- }
- else {
- DEBUG (( DEBUG_RX,
- "ERROR - Data length < 0!\r\n" ));
- }
- Status = EFI_INVALID_PARAMETER;
- pSocket->errno = EFAULT;
- }
- else {
- //
- // Validate the remote network address
- //
- if (( NULL != pAddress )
- && ( AddressLength < pAddress->sa_len )) {
- DEBUG (( DEBUG_TX,
- "ERROR - Invalid sin_len field in address\r\n" ));
- Status = EFI_INVALID_PARAMETER;
- pSocket->errno = EFAULT;
- }
- else {
- //
- // Verify the API
- //
- if ( NULL == pSocket->pApi->pfnTransmit ) {
- Status = EFI_UNSUPPORTED;
- pSocket->errno = ENOTSUP;
- }
- else {
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Poll the network to increase performance
- //
- EslSocketRxPoll ( pSocket );
-
- //
- // Attempt to buffer the packet for transmission
- //
- Status = pSocket->pApi->pfnTransmit ( pSocket,
- Flags,
- BufferLength,
- pBuffer,
- pDataLength,
- pAddress,
- AddressLength );
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
- }
- }
- }
- }
- else {
- //
- // The transmitter was shutdown
- //
- pSocket->errno = EPIPE;
- Status = EFI_NOT_STARTED;
- }
- }
- }
- }
-
- //
- // Return the operation status
- //
- if ( NULL != pErrno ) {
- if ( NULL != pSocket ) {
- *pErrno = pSocket->errno;
- }
- else {
- Status = EFI_INVALID_PARAMETER;
- *pErrno = ENOTSOCK;
- }
- }
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/** Complete the transmit operation.
-
- This support routine handles the transmit completion processing for
- the various network layers. It frees the ::ESL_IO_MGMT structure
- and and frees packet resources by calling ::EslSocketPacketFree.
- Transmit errors are logged in ESL_SOCKET::TxError.
- See the \ref TransmitEngine section.
-
- This routine is called by:
- <ul>
- <li>::EslIp4TxComplete</li>
- <li>::EslTcp4TxComplete</li>
- <li>::EslTcp4TxOobComplete</li>
- <li>::EslUdp4TxComplete</li>
- </ul>
-
- @param[in] pIo Address of an ::ESL_IO_MGMT structure
- @param[in] LengthInBytes Length of the data in bytes
- @param[in] Status Transmit operation status
- @param[in] pQueueType Zero terminated string describing queue type
- @param[in] ppQueueHead Transmit queue head address
- @param[in] ppQueueTail Transmit queue tail address
- @param[in] ppActive Active transmit queue address
- @param[in] ppFree Free transmit queue address
-**/
-VOID
-EslSocketTxComplete (
- IN ESL_IO_MGMT * pIo,
- IN UINT32 LengthInBytes,
- IN EFI_STATUS Status,
- IN CONST CHAR8 * pQueueType,
- IN ESL_PACKET ** ppQueueHead,
- IN ESL_PACKET ** ppQueueTail,
- IN ESL_IO_MGMT ** ppActive,
- IN ESL_IO_MGMT ** ppFree
- )
-{
- ESL_PACKET * pCurrentPacket;
- ESL_IO_MGMT * pIoNext;
- ESL_PACKET * pNextPacket;
- ESL_PACKET * pPacket;
- ESL_PORT * pPort;
- ESL_SOCKET * pSocket;
-
- DBG_ENTER ( );
- VERIFY_AT_TPL ( TPL_SOCKETS );
-
- //
- // Locate the active transmit packet
- //
- pPacket = pIo->pPacket;
- pPort = pIo->pPort;
- pSocket = pPort->pSocket;
-
- //
- // No more packet
- //
- pIo->pPacket = NULL;
-
- //
- // Remove the IO structure from the active list
- //
- pIoNext = *ppActive;
- while (( NULL != pIoNext ) && ( pIoNext != pIo ) && ( pIoNext->pNext != pIo ))
- {
- pIoNext = pIoNext->pNext;
- }
- ASSERT ( NULL != pIoNext );
- if ( pIoNext == pIo ) {
- *ppActive = pIo->pNext; // Beginning of list
- }
- else {
- pIoNext->pNext = pIo->pNext; // Middle of list
- }
-
- //
- // Free the IO structure
- //
- pIo->pNext = *ppFree;
- *ppFree = pIo;
-
- //
- // Display the results
- //
- DEBUG (( DEBUG_TX | DEBUG_INFO,
- "0x%08x: pIo Released\r\n",
- pIo ));
-
- //
- // Save any transmit error
- //
- if ( EFI_ERROR ( Status )) {
- if ( !EFI_ERROR ( pSocket->TxError )) {
- pSocket->TxError = Status;
- }
- DEBUG (( DEBUG_TX | DEBUG_INFO,
- "ERROR - Transmit failure for %apacket 0x%08x, Status: %r\r\n",
- pQueueType,
- pPacket,
- Status ));
-
- //
- // Empty the normal transmit list
- //
- pCurrentPacket = pPacket;
- pNextPacket = *ppQueueHead;
- while ( NULL != pNextPacket ) {
- pPacket = pNextPacket;
- pNextPacket = pPacket->pNext;
- EslSocketPacketFree ( pPacket, DEBUG_TX );
- }
- *ppQueueHead = NULL;
- *ppQueueTail = NULL;
- pPacket = pCurrentPacket;
- }
- else {
- DEBUG (( DEBUG_TX | DEBUG_INFO,
- "0x%08x: %apacket transmitted %d bytes successfully\r\n",
- pPacket,
- pQueueType,
- LengthInBytes ));
-
- //
- // Verify the transmit engine is still running
- //
- if ( !pPort->bCloseNow ) {
- //
- // Start the next packet transmission
- //
- EslSocketTxStart ( pPort,
- ppQueueHead,
- ppQueueTail,
- ppActive,
- ppFree );
- }
- }
-
- //
- // Release this packet
- //
- EslSocketPacketFree ( pPacket, DEBUG_TX );
-
- //
- // Finish the close operation if necessary
- //
- if ( PORT_STATE_CLOSE_STARTED <= pPort->State ) {
- //
- // Indicate that the transmit is complete
- //
- EslSocketPortCloseTxDone ( pPort );
- }
-
- DBG_EXIT ( );
-}
-
-
-/** Transmit data using a network connection.
-
- This support routine starts a transmit operation on the
- underlying network layer.
-
- The network specific code calls this routine to start a
- transmit operation. See the \ref TransmitEngine section.
-
- @param[in] pPort Address of an ::ESL_PORT structure
- @param[in] ppQueueHead Transmit queue head address
- @param[in] ppQueueTail Transmit queue tail address
- @param[in] ppActive Active transmit queue address
- @param[in] ppFree Free transmit queue address
-**/
-VOID
-EslSocketTxStart (
- IN ESL_PORT * pPort,
- IN ESL_PACKET ** ppQueueHead,
- IN ESL_PACKET ** ppQueueTail,
- IN ESL_IO_MGMT ** ppActive,
- IN ESL_IO_MGMT ** ppFree
- )
-{
- UINT8 * pBuffer;
- ESL_IO_MGMT * pIo;
- ESL_PACKET * pNextPacket;
- ESL_PACKET * pPacket;
- VOID ** ppTokenData;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Get the packet from the queue head
- //
- pPacket = *ppQueueHead;
- pIo = *ppFree;
- if (( NULL != pPacket ) && ( NULL != pIo )) {
- pSocket = pPort->pSocket;
- //
- // *ppQueueHead: pSocket->pRxPacketListHead or pSocket->pRxOobPacketListHead
- // |
- // V
- // +------------+ +------------+ +------------+
- // Data | ESL_PACKET |-->| ESL_PACKET |-->| ESL_PACKET |--> NULL
- // +------------+ +------------+ +------------+
- // ^
- // |
- // *ppQueueTail: pSocket->pRxPacketListTail or pSocket->pRxOobPacketListTail
- //
- //
- // Remove the packet from the queue
- //
- pNextPacket = pPacket->pNext;
- *ppQueueHead = pNextPacket;
- if ( NULL == pNextPacket ) {
- *ppQueueTail = NULL;
- }
- pPacket->pNext = NULL;
-
- //
- // Eliminate the need for IP4 and UDP4 specific routines by
- // connecting the token with the TX data control structure here.
- //
- // +--------------------+ +--------------------+
- // | ESL_IO_MGMT | | ESL_PACKET |
- // | | | |
- // | +---------------+ +----------------+ |
- // | | Token | | Buffer Length | |
- // | | TxData --> | Buffer Address | |
- // | | | +----------------+---+
- // | | Event | | Data Buffer |
- // +----+---------------+ | |
- // +--------------------+
- //
- // Compute the address of the TxData pointer in the token
- //
- pBuffer = (UINT8 *)&pIo->Token;
- pBuffer = &pBuffer[ pSocket->TxTokenOffset ];
- ppTokenData = (VOID **)pBuffer;
-
- //
- // Compute the address of the TX data control structure in the packet
- //
- // * EFI_IP4_TRANSMIT_DATA
- // * EFI_TCP4_TRANSMIT_DATA
- // * EFI_UDP4_TRANSMIT_DATA
- //
- pBuffer = (UINT8 *)pPacket;
- pBuffer = &pBuffer[ pSocket->TxPacketOffset ];
-
- //
- // Connect the token to the transmit data control structure
- //
- *ppTokenData = (VOID **)pBuffer;
-
- //
- // Display the results
- //
- DEBUG (( DEBUG_TX | DEBUG_INFO,
- "0x%08x: pIo allocated for pPacket: 0x%08x\r\n",
- pIo,
- pPacket ));
-
- //
- // Start the transmit operation
- //
- Status = pPort->pfnTxStart ( pPort->pProtocol.v,
- &pIo->Token );
- if ( !EFI_ERROR ( Status )) {
- //
- // Connect the structures
- //
- pIo->pPacket = pPacket;
-
- //
- // +-------------+ +-------------+ +-------------+
- // Free | ESL_IO_MGMT |-->| ESL_IO_MGMT |-->| ESL_IO_MGMT |--> NULL
- // +-------------+ +-------------+ +-------------+
- // ^
- // |
- // *ppFree: pPort->pTxFree or pTxOobFree
- //
- //
- // Remove the IO structure from the queue
- //
- *ppFree = pIo->pNext;
-
- //
- // *ppActive: pPort->pTxActive or pTxOobActive
- // |
- // V
- // +-------------+ +-------------+ +-------------+
- // Active | ESL_IO_MGMT |-->| ESL_IO_MGMT |-->| ESL_IO_MGMT |--> NULL
- // +-------------+ +-------------+ +-------------+
- //
- //
- // Mark this packet as active
- //
- pIo->pPacket = pPacket;
- pIo->pNext = *ppActive;
- *ppActive = pIo;
- }
- else {
- //
- // Display the transmit error
- //
- DEBUG (( DEBUG_TX | DEBUG_INFO,
- "0x%08x, 0x%08x: pIo, pPacket transmit failure: %r\r\n",
- pIo,
- pPacket,
- Status ));
- if ( EFI_SUCCESS == pSocket->TxError ) {
- pSocket->TxError = Status;
- }
-
- //
- // Free the IO structure
- //
- pIo->pNext = *ppFree;
- *ppFree = pIo;
-
- //
- // Discard the transmit buffer
- //
- EslSocketPacketFree ( pPacket, DEBUG_TX );
- }
- }
-
- DBG_EXIT ( );
-}
diff --git a/StdLib/EfiSocketLib/Socket.h b/StdLib/EfiSocketLib/Socket.h
deleted file mode 100644
index 583be1ffd0..0000000000
--- a/StdLib/EfiSocketLib/Socket.h
+++ /dev/null
@@ -1,1688 +0,0 @@
-/** @file
- Definitions for the Socket layer driver.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#ifndef _SOCKET_H_
-#define _SOCKET_H_
-
-#include <Efi/EfiSocketLib.h>
-
-//------------------------------------------------------------------------------
-// Constants
-//------------------------------------------------------------------------------
-
-#define DEBUG_SOCKET 0x20000000 ///< Display Socket related messages
-#define DEBUG_BIND 0x10000000 ///< Display bind related messages
-#define DEBUG_LISTEN 0x08000000 ///< Display listen related messages
-#define DEBUG_CONNECTION 0x04000000 ///< Display connection list related messages
-#define DEBUG_POLL 0x02000000 ///< Display poll messages
-#define DEBUG_ACCEPT 0x01000000 ///< Display accept related messages
-#define DEBUG_RX 0x00800000 ///< Display receive messages
-#define DEBUG_TX 0x00400000 ///< Display transmit messages
-#define DEBUG_CLOSE 0x00200000 ///< Display close messages
-#define DEBUG_CONNECT 0x00100000 ///< Display connect messages
-#define DEBUG_OPTION 0x00080000 ///< Display option messages
-
-#define MAX_PENDING_CONNECTIONS 1 ///< Maximum connection FIFO depth
-#define MAX_RX_DATA 0x01000000 ///< Maximum receive data size
-#define MAX_TX_DATA ( MAX_RX_DATA * 2 ) ///< Maximum buffered transmit data in bytes
-#define RX_PACKET_DATA 0x00100000 ///< Maximum number of bytes in a RX packet
-#define MAX_UDP_RETRANSMIT 16 ///< UDP retransmit attempts to handle address not mapped
-
-#define ESL_STRUCTURE_ALIGNMENT_BYTES 15 ///< Number of bytes for structure alignment
-#define ESL_STRUCTURE_ALIGNMENT_MASK ( ~ESL_STRUCTURE_ALIGNMENT_BYTES ) ///< Mask to align structures
-
-#define LAYER_SIGNATURE SIGNATURE_32 ('S','k','t','L') ///< ESL_LAYER memory signature
-#define SERVICE_SIGNATURE SIGNATURE_32 ('S','k','t','S') ///< ESL_SERVICE memory signature
-#define SOCKET_SIGNATURE SIGNATURE_32 ('S','c','k','t') ///< ESL_SOCKET memory signature
-#define PORT_SIGNATURE SIGNATURE_32 ('P','o','r','t') ///< ESL_PORT memory signature
-
-
-/**
- Socket states
-**/
-typedef enum
-{
- SOCKET_STATE_NOT_CONFIGURED = 0, ///< socket call was successful
- SOCKET_STATE_BOUND, ///< bind call was successful
- SOCKET_STATE_LISTENING, ///< listen call was successful
- SOCKET_STATE_NO_PORTS, ///< No ports available
- SOCKET_STATE_IN_FIFO, ///< Socket on FIFO
- SOCKET_STATE_CONNECTING, ///< Connecting to a remote system
- SOCKET_STATE_CONNECTED, ///< Accept or connect call was successful
-
- //
- // Close state must be the last in the list
- //
- SOCKET_STATE_CLOSED ///< Close call was successful
-} SOCKET_STATE;
-
-
-/**
- Port states
-**/
-typedef enum
-{
- PORT_STATE_ALLOCATED = 0, ///< Port allocated
- PORT_STATE_OPEN, ///< Port opened
- PORT_STATE_RX_ERROR, ///< Receive error detected
-
- //
- // Close state must be last in the list!
- //
- // Using < <= > >= in tests code to detect port close state
- // machine has started
- //
- PORT_STATE_CLOSE_STARTED, ///< Close started on port
- PORT_STATE_CLOSE_TX_DONE, ///< Transmits shutdown
- PORT_STATE_CLOSE_DONE, ///< Port close operation complete
- PORT_STATE_CLOSE_RX_DONE ///< Receives shutdown
-} PORT_STATE;
-
-//------------------------------------------------------------------------------
-// Data Types
-//------------------------------------------------------------------------------
-
-typedef struct _ESL_IO_MGMT ESL_IO_MGMT;///< Forward declaration
-typedef struct _ESL_PACKET ESL_PACKET; ///< Forward declaration
-typedef struct _ESL_PORT ESL_PORT; ///< Forward declaration
-typedef struct _ESL_SOCKET ESL_SOCKET; ///< Forward declaration
-
-/**
- Receive context for SOCK_RAW sockets using IPv4.
-**/
-typedef struct
-{
- EFI_IP4_RECEIVE_DATA * pRxData; ///< Receive operation description
-} ESL_IP4_RX_DATA;
-
-
-/**
- Transmit context for SOCK_RAW sockets using IPv4.
-**/
-typedef struct
-{
- EFI_IP4_OVERRIDE_DATA Override; ///< Override data
- EFI_IP4_TRANSMIT_DATA TxData; ///< Transmit operation description
- UINT8 Buffer[ 1 ]; ///< Data buffer
-} ESL_IP4_TX_DATA;
-
-
-/**
- Receive context for SOCK_STREAM and SOCK_SEQPACKET sockets using TCPv4.
-**/
-typedef struct
-{
- EFI_TCP4_RECEIVE_DATA RxData; ///< Receive operation description
- UINT8 Buffer[ RX_PACKET_DATA ]; ///< Data buffer
-} ESL_TCP4_RX_DATA;
-
-
-/**
- Transmit context for SOCK_STREAM and SOCK_SEQPACKET sockets using TCPv4.
-**/
-typedef struct
-{
- EFI_TCP4_TRANSMIT_DATA TxData; ///< Transmit operation description
- UINT8 Buffer[ 1 ]; ///< Data buffer
-} ESL_TCP4_TX_DATA;
-
-
-/**
- Receive context for SOCK_STREAM and SOCK_SEQPACKET sockets using TCPv6.
-**/
-typedef struct
-{
- EFI_TCP6_RECEIVE_DATA RxData; ///< Receive operation description
- UINT8 Buffer[ RX_PACKET_DATA ]; ///< Data buffer
-} ESL_TCP6_RX_DATA;
-
-
-/**
- Transmit context for SOCK_STREAM and SOCK_SEQPACKET sockets using TCPv6.
-**/
-typedef struct
-{
- EFI_TCP6_TRANSMIT_DATA TxData; ///< Transmit operation description
- UINT8 Buffer[ 1 ]; ///< Data buffer
-} ESL_TCP6_TX_DATA;
-
-
-/**
- Receive context for SOCK_DGRAM sockets using UDPv4.
-**/
-typedef struct
-{
- EFI_UDP4_SESSION_DATA Session; ///< Remote network address
- EFI_UDP4_RECEIVE_DATA * pRxData; ///< Receive operation description
-} ESL_UDP4_RX_DATA;
-
-
-/**
- Transmit context for SOCK_DGRAM sockets using UDPv4.
-**/
-typedef struct
-{
- EFI_UDP4_SESSION_DATA Session; ///< Remote network address
- EFI_UDP4_TRANSMIT_DATA TxData; ///< Transmit operation description
- UINTN RetransmitCount; ///< Retransmit to handle ARP negotiation
- UINT8 Buffer[ 1 ]; ///< Data buffer
-} ESL_UDP4_TX_DATA;
-
-
-/**
- Receive context for SOCK_DGRAM sockets using UDPv6.
-**/
-typedef struct
-{
- EFI_UDP6_SESSION_DATA Session; ///< Remote network address
- EFI_UDP6_RECEIVE_DATA * pRxData; ///< Receive operation description
-} ESL_UDP6_RX_DATA;
-
-
-/**
- Transmit context for SOCK_DGRAM sockets using UDPv6.
-**/
-typedef struct
-{
- EFI_UDP6_SESSION_DATA Session; ///< Remote network address
- EFI_UDP6_TRANSMIT_DATA TxData; ///< Transmit operation description
- UINTN RetransmitCount; ///< Retransmit to handle ARP negotiation
- UINT8 Buffer[ 1 ]; ///< Data buffer
-} ESL_UDP6_TX_DATA;
-
-
-/**
- Network specific context for transmit and receive packets.
-**/
-typedef struct _ESL_PACKET {
- ESL_PACKET * pNext; ///< Next packet in the receive list
- size_t PacketSize; ///< Size of this data structure
- size_t ValidBytes; ///< Length of valid data in bytes
- UINT8 * pBuffer; ///< Current data pointer
- union {
- ESL_IP4_RX_DATA Ip4Rx; ///< Receive operation description
- ESL_IP4_TX_DATA Ip4Tx; ///< Transmit operation description
- ESL_TCP4_RX_DATA Tcp4Rx; ///< Receive operation description
- ESL_TCP4_TX_DATA Tcp4Tx; ///< Transmit operation description
- ESL_TCP6_RX_DATA Tcp6Rx; ///< Receive operation description
- ESL_TCP6_TX_DATA Tcp6Tx; ///< Transmit operation description
- ESL_UDP4_RX_DATA Udp4Rx; ///< Receive operation description
- ESL_UDP4_TX_DATA Udp4Tx; ///< Transmit operation description
- ESL_UDP6_RX_DATA Udp6Rx; ///< Receive operation description
- ESL_UDP6_TX_DATA Udp6Tx; ///< Transmit operation description
- } Op; ///< Network specific context
-} GCC_ESL_PACKET;
-
-/**
- Service control structure
-
- The driver uses this structure to manage the network devices.
-**/
-typedef struct _ESL_SERVICE {
- UINTN Signature; ///< Structure identification
-
- //
- // Links
- //
- ESL_SERVICE * pNext; ///< Next service in the service list
-
- //
- // Service data
- //
- CONST ESL_SOCKET_BINDING * pSocketBinding; ///< Name and shutdown routine
- EFI_HANDLE Controller; ///< Controller for the service
- EFI_SERVICE_BINDING_PROTOCOL * pServiceBinding; ///< Network layer service binding interface
-
- //
- // Network data
- //
- ESL_PORT * pPortList; ///< List of ports using this service
-}GCC_ESL_SERVICE;
-
-/**
- IO management structure
-
- This structure manages a single operation with the network.
-**/
-typedef struct _ESL_IO_MGMT {
- ESL_IO_MGMT * pNext; ///< Next TX management structure
- ESL_PORT * pPort; ///< Port structure address
- ESL_PACKET * pPacket; ///< Packet structure address
- union {
- EFI_IP4_COMPLETION_TOKEN Ip4Rx; ///< IP4 receive token
- EFI_IP4_COMPLETION_TOKEN Ip4Tx; ///< IP4 transmit token
- EFI_TCP4_IO_TOKEN Tcp4Rx; ///< TCP4 receive token
- EFI_TCP4_IO_TOKEN Tcp4Tx; ///< TCP4 transmit token
- EFI_TCP6_IO_TOKEN Tcp6Rx; ///< TCP6 receive token
- EFI_TCP6_IO_TOKEN Tcp6Tx; ///< TCP6 transmit token
- EFI_UDP4_COMPLETION_TOKEN Udp4Rx; ///< UDP4 receive token
- EFI_UDP4_COMPLETION_TOKEN Udp4Tx; ///< UDP4 transmit token
- EFI_UDP6_COMPLETION_TOKEN Udp6Rx; ///< UDP6 receive token
- EFI_UDP6_COMPLETION_TOKEN Udp6Tx; ///< UDP6 transmit token
- } Token; ///< Completion token for the network operation
-} GCC_IO_MGMT;
-
-/**
- IP4 context structure
-
- The driver uses this structure to manage the IP4 connections.
-**/
-typedef struct {
- //
- // IP4 context
- //
- EFI_IP4_MODE_DATA ModeData; ///< IP4 mode data, includes configuration data
- EFI_IPv4_ADDRESS DestinationAddress; ///< Default destination address
-} ESL_IP4_CONTEXT;
-
-
-/**
- TCP4 context structure
-
- The driver uses this structure to manage the TCP4 connections.
-**/
-typedef struct {
- //
- // TCP4 context
- //
- EFI_TCP4_CONFIG_DATA ConfigData; ///< TCP4 configuration data
- EFI_TCP4_OPTION Option; ///< TCP4 port options
-
- //
- // Tokens
- //
- EFI_TCP4_LISTEN_TOKEN ListenToken; ///< Listen control
- EFI_TCP4_CONNECTION_TOKEN ConnectToken; ///< Connection control
- EFI_TCP4_CLOSE_TOKEN CloseToken; ///< Close control
-} ESL_TCP4_CONTEXT;
-
-/**
- TCP6 context structure
-
- The driver uses this structure to manage the TCP6 connections.
-**/
-typedef struct {
- //
- // TCP6 context
- //
- EFI_TCP6_CONFIG_DATA ConfigData; ///< TCP6 configuration data
- EFI_TCP6_OPTION Option; ///< TCP6 port options
-
- //
- // Tokens
- //
- EFI_TCP6_LISTEN_TOKEN ListenToken; ///< Listen control
- EFI_TCP6_CONNECTION_TOKEN ConnectToken; ///< Connection control
- EFI_TCP6_CLOSE_TOKEN CloseToken; ///< Close control
-} ESL_TCP6_CONTEXT;
-
-/**
- UDP4 context structure
-
- The driver uses this structure to manage the UDP4 connections.
-**/
-typedef struct {
- //
- // UDP4 context
- //
- EFI_UDP4_CONFIG_DATA ConfigData; ///< UDP4 configuration data
-} ESL_UDP4_CONTEXT;
-
-/**
- UDP6 context structure
-
- The driver uses this structure to manage the UDP6 connections.
-**/
-typedef struct {
- //
- // UDP6 context
- //
- EFI_UDP6_CONFIG_DATA ConfigData; ///< UDP6 configuration data
-} ESL_UDP6_CONTEXT;
-
-
-/**
- Configure the network layer.
-
- @param [in] pProtocol Protocol structure address
- @param [in] pConfigData Address of the confiuration data
-
- @return Returns EFI_SUCCESS if the operation is successfully
- started.
-**/
-typedef
-EFI_STATUS
-(EFIAPI * PFN_NET_CONFIGURE) (
- IN VOID * pProtocol,
- IN VOID * pConfigData
- );
-
-/**
- Hand an I/O operation to the network layer.
-
- @param [in] pProtocol Protocol structure address
- @param [in] pToken Completion token address
-
- @return Returns EFI_SUCCESS if the operation is successfully
- started.
-**/
-typedef
-EFI_STATUS
-(EFIAPI * PFN_NET_IO_START) (
- IN VOID * pProtocol,
- IN VOID * pToken
- );
-
-/**
- Poll the LAN adapter for receive packets.
-
- @param [in] pProtocol Protocol structure address
- @param [in] pToken Completion token address
-
- @return Returns EFI_SUCCESS if the operation is successfully
- started.
-**/
-typedef
-EFI_STATUS
-(EFIAPI * PFN_NET_POLL) (
- IN VOID * pProtocol
- );
-
-/**
- Port control structure
-
- The driver uses this structure to manager the socket's connection
- with the network driver.
-**/
-typedef struct _ESL_PORT {
- UINTN Signature; ///< Structure identification
-
- //
- // List links
- //
- ESL_PORT * pLinkService; ///< Link in service port list
- ESL_PORT * pLinkSocket; ///< Link in socket port list
-
- //
- // Structures
- //
- ESL_SERVICE * pService; ///< Service for this port
- ESL_SOCKET * pSocket; ///< Socket for this port
-
- //
- // Eliminate the pService references during port close
- //
- EFI_SERVICE_BINDING_PROTOCOL * pServiceBinding; ///< Service binding for network layer
- CONST ESL_SOCKET_BINDING * pSocketBinding; ///< Socket binding for network layer
-
- //
- // Port management
- //
- EFI_HANDLE Handle; ///< Network port handle
- PORT_STATE State; ///< State of the port
- UINTN DebugFlags; ///< Debug flags used to close the port
- BOOLEAN bCloseNow; ///< TRUE = Close the port immediately
- BOOLEAN bConfigured; ///< TRUE = Configure call made to network layer
- PFN_NET_CONFIGURE pfnConfigure; ///< Configure the network layer
-
- //
- // Transmit data management
- //
- BOOLEAN bTxFlowControl; ///< TX flow control applied
- PFN_NET_IO_START pfnTxStart; ///< Start a transmit on the network
- ESL_IO_MGMT * pTxActive; ///< Normal data queue
- ESL_IO_MGMT * pTxFree; ///< Normal free queue
-
- ESL_IO_MGMT * pTxOobActive; ///< Urgent data queue
- ESL_IO_MGMT * pTxOobFree; ///< Urgent free queue
-
- //
- // Receive data management
- //
- PFN_NET_IO_START pfnRxCancel; ///< Cancel a receive on the network
- PFN_NET_POLL pfnRxPoll; ///< Poll the LAN adapter for receive packets
- PFN_NET_IO_START pfnRxStart; ///< Start a receive on the network
- ESL_IO_MGMT * pRxActive; ///< Active receive operation queue
- ESL_IO_MGMT * pRxFree; ///< Free structure queue
-
- //
- // Protocol specific management data
- //
- union {
- VOID * v; ///< VOID pointer
- EFI_IP4_PROTOCOL * IPv4; ///< IP4 protocol pointer
- EFI_TCP4_PROTOCOL * TCPv4; ///< TCP4 protocol pointer
- EFI_TCP6_PROTOCOL * TCPv6; ///< TCP6 protocol pointer
- EFI_UDP4_PROTOCOL * UDPv4; ///< UDP4 protocol pointer
- EFI_UDP6_PROTOCOL * UDPv6; ///< UDP6 protocol pointer
- } pProtocol; ///< Protocol structure address
- union {
- ESL_IP4_CONTEXT Ip4; ///< IPv4 management data
- ESL_TCP4_CONTEXT Tcp4; ///< TCPv4 management data
- ESL_TCP6_CONTEXT Tcp6; ///< TCPv6 management data
- ESL_UDP4_CONTEXT Udp4; ///< UDPv4 management data
- ESL_UDP6_CONTEXT Udp6; ///< UDPv6 management data
- } Context; ///< Network specific context
-}GCC_ESL_PORT;
-
-/**
- Accept a network connection.
-
- @param [in] pSocket Address of the socket structure.
-
- @param [in] pSockAddr Address of a buffer to receive the remote
- network address.
-
- @param [in, out] pSockAddrLength Length in bytes of the address buffer.
- On output specifies the length of the
- remote network address.
-
- @retval EFI_SUCCESS Remote address is available
- @retval Others Remote address not available
-
- **/
-typedef
-EFI_STATUS
-(* PFN_API_ACCEPT) (
- IN ESL_SOCKET * pSocket,
- IN struct sockaddr * pSockAddr,
- IN OUT socklen_t * pSockAddrLength
- );
-
-/**
- Poll for completion of the connection attempt.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure.
-
- @retval EFI_SUCCESS The connection was successfully established.
- @retval EFI_NOT_READY The connection is in progress, call this routine again.
- @retval Others The connection attempt failed.
-
- **/
-typedef
-EFI_STATUS
-(* PFN_API_CONNECT_POLL) (
- IN ESL_SOCKET * pSocket
- );
-
-/**
- Attempt to connect to a remote TCP port
-
- This routine starts the connection processing for a SOCK_STREAM
- or SOCK_SEQPAKCET socket using the TCP network layer.
-
- This routine is called by ::EslSocketConnect to initiate the TCP
- network specific connect operations.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure.
-
- @retval EFI_SUCCESS The connection was successfully established.
- @retval EFI_NOT_READY The connection is in progress, call this routine again.
- @retval Others The connection attempt failed.
-
- **/
-typedef
-EFI_STATUS
-(* PFN_API_CONNECT_START) (
- IN ESL_SOCKET * pSocket
- );
-
-/**
- Get the local socket address
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [out] pAddress Network address to receive the local system address
-
-**/
-typedef
-VOID
-(* PFN_API_LOCAL_ADDR_GET) (
- IN ESL_PORT * pPort,
- OUT struct sockaddr * pAddress
- );
-
-/**
- Set the local port address.
-
- This routine sets the local port address.
-
- This support routine is called by ::EslSocketPortAllocate.
-
- @param [in] ppPort Address of an ESL_PORT structure
- @param [in] pSockAddr Address of a sockaddr structure that contains the
- connection point on the local machine. An IPv4 address
- of INADDR_ANY specifies that the connection is made to
- all of the network stacks on the platform. Specifying a
- specific IPv4 address restricts the connection to the
- network stack supporting that address. Specifying zero
- for the port causes the network layer to assign a port
- number from the dynamic range. Specifying a specific
- port number causes the network layer to use that port.
- @param [in] bBindTest TRUE = run bind testing
-
- @retval EFI_SUCCESS The operation was successful
-
- **/
-typedef
-EFI_STATUS
-(* PFN_API_LOCAL_ADDR_SET) (
- IN ESL_PORT * pPort,
- IN CONST struct sockaddr * pSockAddr,
- IN BOOLEAN bBindTest
- );
-
-/**
- Process the completion event
-
- This routine handles the I/O completion event.
-
- This routine is called by the low level network driver when
- the operation is completed.
-
- @param [in] Event The receive completion event
-
- @param [in] pIo The address of an ::ESL_IO_MGMT structure
-
-**/
-typedef
-VOID
-(* PFN_API_IO_COMPLETE) (
- IN EFI_EVENT Event,
- IN ESL_IO_MGMT * pIo
- );
-
-/**
- Determine if the socket is configured.
-
-
- @param [in] pSocket Address of a ESL_SOCKET structure
-
- @retval EFI_SUCCESS - The port is connected
- @retval EFI_NOT_STARTED - The port is not connected
-
- **/
- typedef
- EFI_STATUS
- (* PFN_API_IS_CONFIGURED) (
- IN ESL_SOCKET * pSocket
- );
-
-/**
- Establish the known port to listen for network connections.
-
- @param [in] pSocket Address of the socket structure.
-
- @retval EFI_SUCCESS - Socket successfully created
- @retval Other - Failed to enable the socket for listen
-
-**/
-typedef
-EFI_STATUS
-(* PFN_API_LISTEN) (
- IN ESL_SOCKET * pSocket
- );
-
-/**
- Get the option value
-
- Retrieve the protocol options one at a time by name.
-
- @param [in] pSocket Address of a ESL_SOCKET structure
- @param [in] OptionName Name of the option
- @param [out] ppOptionData Buffer to receive address of option value
- @param [out] pOptionLength Buffer to receive the option length
-
- @retval EFI_SUCCESS - Socket data successfully received
-
- **/
-typedef
-EFI_STATUS
-(* PFN_API_OPTION_GET) (
- IN ESL_SOCKET * pSocket,
- IN int OptionName,
- OUT CONST void ** __restrict ppOptionData,
- OUT socklen_t * __restrict pOptionLength
- );
-
-/**
- Set the option value
-
- Adjust the protocol options one at a time by name.
-
- @param [in] pSocket Address of a ESL_SOCKET structure
- @param [in] OptionName Name of the option
- @param [in] pOptionValue Buffer containing the option value
- @param [in] OptionLength Length of the buffer in bytes
-
- @retval EFI_SUCCESS - Option successfully set
-
- **/
-typedef
-EFI_STATUS
-(* PFN_API_OPTION_SET) (
- IN ESL_SOCKET * pSocket,
- IN int OptionName,
- IN CONST void * pOptionValue,
- IN socklen_t OptionLength
- );
-
-/**
- Free a receive packet
-
- This routine performs the network specific operations necessary
- to free a receive packet.
-
- This routine is called by ::EslSocketPortCloseTxDone to free a
- receive packet.
-
- @param [in] pPacket Address of an ::ESL_PACKET structure.
- @param [in, out] pRxBytes Address of the count of RX bytes
-
-**/
-typedef
-VOID
-(* PFN_API_PACKET_FREE) (
- IN ESL_PACKET * pPacket,
- IN OUT size_t * pRxBytes
- );
-
-/**
- Initialize the network specific portions of an ::ESL_PORT structure.
-
- This routine initializes the network specific portions of an
- ::ESL_PORT structure for use by the socket.
-
- This support routine is called by ::EslSocketPortAllocate
- to connect the socket with the underlying network adapter
- running the IPv4 protocol.
-
- @param [in] ppPort Address of an ESL_PORT structure
- @param [in] DebugFlags Flags for debug messages
-
- @retval EFI_SUCCESS - Socket successfully created
-
- **/
-typedef
-EFI_STATUS
-(* PFN_API_PORT_ALLOC) (
- IN ESL_PORT * pPort,
- IN UINTN DebugFlags
- );
-
-/**
- Close a network specific port.
-
- This routine releases the resources allocated by the
- network specific PortAllocate routine.
-
- This routine is called by ::EslSocketPortCloseRxDone as
- the last step of closing processing.
- See the \ref PortCloseStateMachine section.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @retval EFI_SUCCESS The port is closed
- @retval other Port close error
-
-**/
-typedef
-EFI_STATUS
-(* PFN_API_PORT_CLOSE) (
- IN ESL_PORT * pPort
- );
-
-/**
- Perform the network specific close operation on the port.
-
- This routine performs the network specific operation to
- shutdown receive operations on the port.
-
- This routine is called by the ::EslSocketPortCloseTxDone
- routine after the port completes all of the transmission.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @retval EFI_SUCCESS The port is closed, not normally returned
- @retval EFI_NOT_READY The port is still closing
- @retval EFI_ALREADY_STARTED Error, the port is in the wrong state,
- most likely the routine was called already.
-
-**/
-typedef
-EFI_STATUS
-(* PFN_API_PORT_CLOSE_OP) (
- IN ESL_PORT * pPort
- );
-
-/**
- Receive data from a network connection.
-
- This routine attempts to return buffered data to the caller. The
- data is removed from the urgent queue if the message flag MSG_OOB
- is specified, otherwise data is removed from the normal queue.
- See the \ref ReceiveEngine section.
-
- This routine is called by ::EslSocketReceive to handle the network
- specific receive operation.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [in] pPacket Address of an ::ESL_PACKET structure.
-
- @param [in] pbConsumePacket Address of a BOOLEAN indicating if the packet is to be consumed
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer to receive the data.
-
- @param [in] pDataLength Number of received data bytes in the buffer.
-
- @param [out] pAddress Network address to receive the remote system address
-
- @param [out] pSkipBytes Address to receive the number of bytes skipped
-
- @return Returns the address of the next free byte in the buffer.
-
- **/
-typedef
-UINT8 *
-(* PFN_API_RECEIVE) (
- IN ESL_PORT * pPort,
- IN ESL_PACKET * pPacket,
- IN BOOLEAN * pbConsumePacket,
- IN size_t BufferLength,
- IN UINT8 * pBuffer,
- OUT size_t * pDataLength,
- OUT struct sockaddr * pAddress,
- OUT size_t * pSkipBytes
- );
-
-/**
- Get the remote socket address
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [out] pAddress Network address to receive the remote system address
-
-**/
-typedef
-VOID
-(* PFN_API_REMOTE_ADDR_GET) (
- IN ESL_PORT * pPort,
- OUT struct sockaddr * pAddress
- );
-
-/**
- Set the remote address
-
- This routine sets the remote address in the port.
-
- This routine is called by ::EslSocketConnect to specify the
- remote network address.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [in] pSockAddr Network address of the remote system.
-
- @param [in] SockAddrLength Length in bytes of the network address.
-
- @retval EFI_SUCCESS The operation was successful
-
- **/
-typedef
-EFI_STATUS
-(* PFN_API_REMOTE_ADDR_SET) (
- IN ESL_PORT * pPort,
- IN CONST struct sockaddr * pSockAddr,
- IN socklen_t SockAddrLength
- );
-
-/**
- Start a receive operation
-
- This routine prepares a packet for the receive operation.
- See the \ref ReceiveEngine section.
-
- This support routine is called by EslSocketRxStart.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
- @param [in] pIo Address of an ::ESL_IO_MGMT structure.
-
- **/
-typedef
-VOID
-(* PFN_API_RX_START) (
- IN ESL_PORT * pPort,
- IN ESL_IO_MGMT * pIo
- );
-
-/**
- Buffer data for transmission over a network connection.
-
- @param [in] pSocket Address of a ESL_SOCKET structure
-
- @param [in] Flags Message control flags
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer to receive the data.
-
- @param [in] pDataLength Number of received data bytes in the buffer.
-
- @param [in] pAddress Network address of the remote system address
-
- @param [in] AddressLength Length of the remote network address structure
-
- @retval EFI_SUCCESS - Socket data successfully buffered
-
-**/
-typedef
-EFI_STATUS
-(* PFN_API_TRANSMIT) (
- IN ESL_SOCKET * pSocket,
- IN int Flags,
- IN size_t BufferLength,
- IN CONST UINT8 * pBuffer,
- OUT size_t * pDataLength,
- IN const struct sockaddr * pAddress,
- IN socklen_t AddressLength
- );
-
-/**
- Process the transmit completion
-
- This routine calls ::EslSocketTxComplete to handle the
- transmit completion.
-
- This routine is called by the network layers upon the completion
- of a transmit operation.
-
- @param [in] Event The urgent transmit completion event
-
- @param [in] pIo The ESL_IO_MGMT structure address
-
-**/
-typedef
-VOID
-(* PFN_API_TX_COMPLETE) (
- IN EFI_EVENT Event,
- IN ESL_IO_MGMT * pIo
- );
-
-/**
- Verify the adapter's IP address
-
- This support routine is called by EslSocketBindTest.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
- @param [in] pConfigData Address of the configuration data
-
- @retval EFI_SUCCESS - The IP address is valid
- @retval EFI_NOT_STARTED - The IP address is invalid
-
- **/
-typedef
-EFI_STATUS
-(* PFN_API_VERIFY_LOCAL_IP_ADDRESS) (
- IN ESL_PORT * pPort,
- IN VOID * pConfigData
- );
-
-/**
- Socket type control structure
-
- This driver uses this structure to define the API for the socket type.
-**/
-typedef struct {
- CONST CHAR8 * pName; ///< Protocol name
- int DefaultProtocol; ///< Default protocol
- UINTN ConfigDataOffset; ///< Offset in ::ESL_PORT to the configuration data
- UINTN ServiceListOffset; ///< Offset in ::ESL_LAYER for the list of services
- socklen_t MinimumAddressLength; ///< Minimum address length in bytes
- socklen_t AddressLength; ///< Address length in bytes
- sa_family_t AddressFamily; ///< Address family
- UINTN RxPacketBytes; ///< Length of the RX packet allocation
- UINTN RxZeroBytes; ///< Number of bytes to zero in RX packet
- UINTN RxBufferOffset; ///< Offset of buffer address in ESL_IO_MGMT structure
- BOOLEAN bOobSupported; ///< TRUE if out-of-band messages are supported
- int BindTestErrno; ///< errno value if EslSocketBindTest fails
- PFN_API_ACCEPT pfnAccept; ///< Accept a network connection
- PFN_API_CONNECT_POLL pfnConnectPoll; ///< Poll for connection complete
- PFN_API_CONNECT_START pfnConnectStart; ///< Start the connection to a remote system
- PFN_API_IS_CONFIGURED pfnIsConfigured; ///< Determine if the socket is configured
- PFN_API_LOCAL_ADDR_GET pfnLocalAddrGet; ///< Get the local address
- PFN_API_LOCAL_ADDR_SET pfnLocalAddrSet; ///< Set the local address
- PFN_API_LISTEN pfnListen; ///< Listen for connections on known server port
- PFN_API_OPTION_GET pfnOptionGet; ///< Get the option value
- PFN_API_OPTION_SET pfnOptionSet; ///< Set the option value
- PFN_API_PACKET_FREE pfnPacketFree; ///< Free the receive packet
- PFN_API_PORT_ALLOC pfnPortAllocate; ///< Allocate the network specific resources for the port
- PFN_API_PORT_CLOSE pfnPortClose; ///< Close the network specific resources for the port
- PFN_API_PORT_CLOSE_OP pfnPortCloseOp; ///< Perform the close operation on the port
- BOOLEAN bPortCloseComplete; ///< TRUE = Close is complete after close operation
- PFN_API_RECEIVE pfnReceive; ///< Attempt to receive some data
- PFN_API_REMOTE_ADDR_GET pfnRemoteAddrGet; ///< Get remote address
- PFN_API_REMOTE_ADDR_SET pfnRemoteAddrSet; ///< Set the remote system address
- PFN_API_IO_COMPLETE pfnRxComplete; ///< RX completion
- PFN_API_RX_START pfnRxStart; ///< Start a network specific receive operation
- PFN_API_TRANSMIT pfnTransmit; ///< Attempt to buffer a packet for transmit
- PFN_API_TX_COMPLETE pfnTxComplete; ///< TX completion for normal data
- PFN_API_TX_COMPLETE pfnTxOobComplete; ///< TX completion for urgent data
- PFN_API_VERIFY_LOCAL_IP_ADDRESS pfnVerifyLocalIpAddress; ///< Verify the local IP address
-} ESL_PROTOCOL_API;
-
-
-/**
- Socket control structure
-
- The driver uses this structure to manage the socket.
-**/
-typedef struct _ESL_SOCKET {
- UINTN Signature; ///< Structure identification
-
- //
- // Protocol binding
- //
- EFI_SOCKET_PROTOCOL SocketProtocol; ///< Socket protocol declaration
- CONST ESL_PROTOCOL_API * pApi; ///< API for the protocol
-
- //
- // Socket management
- //
- ESL_SOCKET * pNext; ///< Next socket in the list of sockets
- int errno; ///< Error information for this socket
- EFI_STATUS Status; ///< Asyncronous error information for this socket
- SOCKET_STATE State; ///< Socket state
- UINT32 DebugFlags; ///< Debug flags
-
- //
- // Socket options
- //
- BOOLEAN bIncludeHeader; ///< TRUE if including the IP header
- BOOLEAN bListenCalled; ///< TRUE if listen was successfully called
- BOOLEAN bOobInLine; ///< TRUE if out-of-band messages are to be received inline with normal data
- BOOLEAN bReUseAddr; ///< TRUE if using same address is allowed
-
- //
- // Socket data
- //
- int Domain; ///< Specifies family of protocols
- int Type; ///< Specifies how to make network connection
- int Protocol; ///< Specifies lower layer protocol to use
- BOOLEAN bAddressSet; ///< Set when the address is specified
- BOOLEAN bConfigured; ///< Set after the socket is configured
-
- BOOLEAN bRxDisable; ///< Receive disabled via shutdown
- size_t RxBytes; ///< Total Rx bytes
- size_t RxOobBytes; ///< Urgent Rx bytes
- EFI_STATUS RxError; ///< Error during receive
-
- BOOLEAN bTxDisable; ///< Transmit disabled via shutdown
- size_t TxBytes; ///< Normal Tx bytes
- size_t TxOobBytes; ///< Urgent Tx bytes
- EFI_STATUS TxError; ///< Error during transmit
-
- //
- // Pending connection data
- //
- BOOLEAN bConnected; ///< Set when connected, cleared by poll
- EFI_STATUS ConnectStatus; ///< Connection status
- UINTN MaxFifoDepth; ///< Maximum FIFO depth
- UINTN FifoDepth; ///< Number of sockets in the FIFO
- ESL_SOCKET * pFifoHead; ///< Head of the FIFO
- ESL_SOCKET * pFifoTail; ///< Tail of the FIFO
- ESL_SOCKET * pNextConnection; ///< Link in the FIFO
-
- //
- // Network use
- //
- ESL_PORT * pPortList; ///< List of ports managed by this socket
- EFI_EVENT WaitAccept; ///< Wait for accept completion
-
- //
- // Receive data management
- //
- UINT32 MaxRxBuf; ///< Maximum size of the receive buffer
- struct timeval RxTimeout; ///< Receive timeout
- ESL_PACKET * pRxFree; ///< Free packet list
- ESL_PACKET * pRxOobPacketListHead;///< Urgent data list head
- ESL_PACKET * pRxOobPacketListTail;///< Urgent data list tail
- ESL_PACKET * pRxPacketListHead; ///< Normal data list head
- ESL_PACKET * pRxPacketListTail; ///< Normal data list tail
-
- //
- // Transmit data management
- //
- UINTN TxPacketOffset; ///< Offset for data pointer in ::ESL_PACKET
- UINTN TxTokenEventOffset; ///< Offset to the Event in the TX token
- UINTN TxTokenOffset; ///< Offset for data pointer in TX token
- UINT32 MaxTxBuf; ///< Maximum size of the transmit buffer
- ESL_PACKET * pTxOobPacketListHead;///< Urgent data list head
- ESL_PACKET * pTxOobPacketListTail;///< Urgent data list tail
- ESL_PACKET * pTxPacketListHead; ///< Normal data list head
- ESL_PACKET * pTxPacketListTail; ///< Normal data list tail
-}GCC_ESL_SOCKET;
-
-#define SOCKET_FROM_PROTOCOL(a) CR (a, ESL_SOCKET, SocketProtocol, SOCKET_SIGNATURE) ///< Locate ESL_SOCKET from protocol
-
-/**
- Socket layer control structure
-
- The driver uses this structure to manage the driver.
-**/
-typedef struct {
- UINTN Signature; ///< Structure identification
-
- //
- // Service binding interface
- //
- CONST EFI_SERVICE_BINDING_PROTOCOL * pServiceBinding; ///< Driver's binding
-
- //
- // Image data
- //
- EFI_HANDLE ImageHandle; ///< Image handle
-
- //
- // Network services
- //
- ESL_SERVICE * pIp4List; ///< List of Ip4 services
- ESL_SERVICE * pTcp4List; ///< List of Tcp4 services
- ESL_SERVICE * pTcp6List; ///< List of Tcp6 services
- ESL_SERVICE * pUdp4List; ///< List of Udp4 services
- ESL_SERVICE * pUdp6List; ///< List of Udp6 services
-
- //
- // Socket management
- //
- ESL_SOCKET * pSocketList; ///< List of sockets
-} ESL_LAYER;
-
-#define LAYER_FROM_SERVICE(a) CR (a, ESL_LAYER, ServiceBinding, LAYER_SIGNATURE) ///< Locate ESL_LAYER from service binding
-
-//------------------------------------------------------------------------------
-// Data
-//------------------------------------------------------------------------------
-
-extern ESL_LAYER mEslLayer;
-
-extern CONST ESL_PROTOCOL_API cEslIp4Api;
-extern CONST ESL_PROTOCOL_API cEslIp6Api;
-extern CONST ESL_PROTOCOL_API cEslTcp4Api;
-extern CONST ESL_PROTOCOL_API cEslTcp6Api;
-extern CONST ESL_PROTOCOL_API cEslUdp4Api;
-extern CONST ESL_PROTOCOL_API cEslUdp6Api;
-
-extern CONST EFI_SERVICE_BINDING_PROTOCOL mEfiServiceBinding;
-
-//------------------------------------------------------------------------------
-// Socket Support Routines
-//------------------------------------------------------------------------------
-
-/**
- Allocate and initialize a ESL_SOCKET structure.
-
- This support function allocates an ::ESL_SOCKET structure
- and installs a protocol on ChildHandle. If pChildHandle is a
- pointer to NULL, then a new handle is created and returned in
- pChildHandle. If pChildHandle is not a pointer to NULL, then
- the protocol installs on the existing pChildHandle.
-
- @param [in, out] pChildHandle Pointer to the handle of the child to create.
- If it is NULL, then a new handle is created.
- If it is a pointer to an existing UEFI handle,
- then the protocol is added to the existing UEFI
- handle.
- @param [in] DebugFlags Flags for debug messages
- @param [in, out] ppSocket The buffer to receive an ::ESL_SOCKET structure address.
-
- @retval EFI_SUCCESS The protocol was added to ChildHandle.
- @retval EFI_INVALID_PARAMETER ChildHandle is NULL.
- @retval EFI_OUT_OF_RESOURCES There are not enough resources available to create
- the child
- @retval other The child handle was not created
-
-**/
-EFI_STATUS
-EFIAPI
-EslSocketAllocate (
- IN OUT EFI_HANDLE * pChildHandle,
- IN UINTN DebugFlags,
- IN OUT ESL_SOCKET ** ppSocket
- );
-
-/**
- Test the bind configuration.
-
- @param [in] pPort Address of the ::ESL_PORT structure.
- @param [in] ErrnoValue errno value if test fails
-
- @retval EFI_SUCCESS The connection was successfully established.
- @retval Others The connection attempt failed.
-
- **/
-EFI_STATUS
-EslSocketBindTest (
- IN ESL_PORT * pPort,
- IN int ErrnoValue
- );
-
-/**
- Copy a fragmented buffer into a destination buffer.
-
- This support routine copies a fragmented buffer to the caller specified buffer.
-
- This routine is called by ::EslIp4Receive and ::EslUdp4Receive.
-
- @param [in] FragmentCount Number of fragments in the table
-
- @param [in] pFragmentTable Address of an EFI_IP4_FRAGMENT_DATA structure
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer to receive the data.
-
- @param [in] pDataLength Number of received data bytes in the buffer.
-
- @return Returns the address of the next free byte in the buffer.
-
-**/
-UINT8 *
-EslSocketCopyFragmentedBuffer (
- IN UINT32 FragmentCount,
- IN EFI_IP4_FRAGMENT_DATA * pFragmentTable,
- IN size_t BufferLength,
- IN UINT8 * pBuffer,
- OUT size_t * pDataLength
- );
-
-/**
- Free the socket.
-
- This routine frees the socket structure and handle resources.
-
- The ::close routine calls EslServiceFreeProtocol which then calls
- this routine to free the socket context structure and close the
- handle.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS The socket resources were returned successfully.
-
- **/
-EFI_STATUS
-EslSocketFree (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int * pErrno
- );
-
-/**
- Free the ESL_IO_MGMT event and structure
-
- This support routine walks the free list to close the event in
- the ESL_IO_MGMT structure and remove the structure from the free
- list.
-
- See the \ref TransmitEngine section.
-
- @param [in] pPort Address of an ::ESL_PORT structure
- @param [in] ppFreeQueue Address of the free queue head
- @param [in] DebugFlags Flags for debug messages
- @param [in] pEventName Zero terminated string containing the event name
-
- @retval EFI_SUCCESS - The structures were properly initialized
-
-**/
-EFI_STATUS
-EslSocketIoFree (
- IN ESL_PORT * pPort,
- IN ESL_IO_MGMT ** ppFreeQueue,
- IN UINTN DebugFlags,
- IN CHAR8 * pEventName
- );
-
-/**
- Initialize the ESL_IO_MGMT structures
-
- This support routine initializes the ESL_IO_MGMT structure and
- places them on to a free list.
-
- This routine is called by the PortAllocate routines to prepare
- the transmit engines. See the \ref TransmitEngine section.
-
- @param [in] pPort Address of an ::ESL_PORT structure
- @param [in, out] ppIo Address containing the first structure address. Upon
- return this buffer contains the next structure address.
- @param [in] TokenCount Number of structures to initialize
- @param [in] ppFreeQueue Address of the free queue head
- @param [in] DebugFlags Flags for debug messages
- @param [in] pEventName Zero terminated string containing the event name
- @param [in] pfnCompletion Completion routine address
-
- @retval EFI_SUCCESS - The structures were properly initialized
-
-**/
-EFI_STATUS
-EslSocketIoInit (
- IN ESL_PORT * pPort,
- IN ESL_IO_MGMT ** ppIo,
- IN UINTN TokenCount,
- IN ESL_IO_MGMT ** ppFreeQueue,
- IN UINTN DebugFlags,
- IN CHAR8 * pEventName,
- IN PFN_API_IO_COMPLETE pfnCompletion
- );
-
-/**
- Determine if the socket is configured
-
- This support routine is called to determine if the socket if the
- configuration call was made to the network layer. The following
- routines call this routine to verify that they may be successful
- in their operations:
- <ul>
- <li>::EslSocketGetLocalAddress</li>
- <li>::EslSocketGetPeerAddress</li>
- <li>::EslSocketPoll</li>
- <li>::EslSocketReceive</li>
- <li>::EslSocketTransmit</li>
- </ul>
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure
-
- @retval EFI_SUCCESS - The socket is configured
-
-**/
-EFI_STATUS
-EslSocketIsConfigured (
- IN ESL_SOCKET * pSocket
- );
-
-/**
- Allocate a packet for a receive or transmit operation
-
- This support routine is called by ::EslSocketRxStart and the
- network specific TxBuffer routines to get buffer space for the
- next operation.
-
- @param [in] ppPacket Address to receive the ::ESL_PACKET structure
- @param [in] LengthInBytes Length of the packet structure
- @param [in] ZeroBytes Length of packet to zero
- @param [in] DebugFlags Flags for debug messages
-
- @retval EFI_SUCCESS - The packet was allocated successfully
-
- **/
-EFI_STATUS
-EslSocketPacketAllocate (
- IN ESL_PACKET ** ppPacket,
- IN size_t LengthInBytes,
- IN size_t ZeroBytes,
- IN UINTN DebugFlags
- );
-
-/**
- Free a packet used for receive or transmit operation
-
- This support routine is called by the network specific Close
- and TxComplete routines and during error cases in RxComplete
- and TxBuffer. Note that the network layers typically place
- receive packets on the ESL_SOCKET::pRxFree list for reuse.
-
- @param [in] pPacket Address of an ::ESL_PACKET structure
- @param [in] DebugFlags Flags for debug messages
-
- @retval EFI_SUCCESS - The packet was allocated successfully
-
- **/
-EFI_STATUS
-EslSocketPacketFree (
- IN ESL_PACKET * pPacket,
- IN UINTN DebugFlags
- );
-
-/**
- Allocate and initialize a ESL_PORT structure.
-
- This routine initializes an ::ESL_PORT structure for use by
- the socket. This routine calls a routine via
- ESL_PROTOCOL_API::pfnPortAllocate to initialize the network
- specific resources. The resources are released later by the
- \ref PortCloseStateMachine.
-
- This support routine is called by ::EslSocketBind and
- ::EslTcp4ListenComplete to connect the socket with the
- underlying network adapter to the socket.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure.
- @param [in] pService Address of an ::ESL_SERVICE structure.
- @param [in] ChildHandle TCP4 child handle
- @param [in] pSockAddr Address of a sockaddr structure that contains the
- connection point on the local machine. An IPv4 address
- of INADDR_ANY specifies that the connection is made to
- all of the network stacks on the platform. Specifying a
- specific IPv4 address restricts the connection to the
- network stack supporting that address. Specifying zero
- for the port causes the network layer to assign a port
- number from the dynamic range. Specifying a specific
- port number causes the network layer to use that port.
- @param [in] bBindTest TRUE if EslSocketBindTest should be called
- @param [in] DebugFlags Flags for debug messages
- @param [out] ppPort Buffer to receive new ::ESL_PORT structure address
-
- @retval EFI_SUCCESS - Socket successfully created
-
- **/
-EFI_STATUS
-EslSocketPortAllocate (
- IN ESL_SOCKET * pSocket,
- IN ESL_SERVICE * pService,
- IN EFI_HANDLE ChildHandle,
- IN CONST struct sockaddr * pSockAddr,
- IN BOOLEAN bBindTest,
- IN UINTN DebugFlags,
- OUT ESL_PORT ** ppPort
- );
-
-/**
- Close a port.
-
- This routine releases the resources allocated by ::EslSocketPortAllocate.
- This routine calls ESL_PROTOCOL_API::pfnPortClose to release the network
- specific resources.
-
- This routine is called by:
- <ul>
- <li>::EslIp4PortAllocate - Port initialization failure</li>
- <li>::EslSocketPortCloseRxDone - Last step of close processing</li>
- <li>::EslTcp4ConnectComplete - Connection failure and reducint the port list to a single port</li>
- <li>::EslTcp4PortAllocate - Port initialization failure</li>
- <li>::EslUdp4PortAllocate - Port initialization failure</li>
- </ul>
- See the \ref PortCloseStateMachine section.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @retval EFI_SUCCESS The port is closed
- @retval other Port close error
-
-**/
-EFI_STATUS
-EslSocketPortClose (
- IN ESL_PORT * pPort
- );
-
-/**
- Process the port close completion event
-
- This routine attempts to complete the port close operation.
-
- This routine is called by the TCP layer upon completion of
- the close operation.
- See the \ref PortCloseStateMachine section.
-
- @param [in] Event The close completion event
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
-**/
-VOID
-EslSocketPortCloseComplete (
- IN EFI_EVENT Event,
- IN ESL_PORT * pPort
- );
-
-/**
- Port close state 3
-
- This routine determines the state of the receive operations and
- continues the close operation after the pending receive operations
- are cancelled.
-
- This routine is called by
- <ul>
- <li>::EslIp4RxComplete</li>
- <li>::EslSocketPortCloseComplete</li>
- <li>::EslSocketPortCloseTxDone</li>
- <li>::EslUdp4RxComplete</li>
- </ul>
- to determine the state of the receive operations.
- See the \ref PortCloseStateMachine section.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @retval EFI_SUCCESS The port is closed
- @retval EFI_NOT_READY The port is still closing
- @retval EFI_ALREADY_STARTED Error, the port is in the wrong state,
- most likely the routine was called already.
-
-**/
-EFI_STATUS
-EslSocketPortCloseRxDone (
- IN ESL_PORT * pPort
- );
-
-/**
- Start the close operation on a port, state 1.
-
- This routine marks the port as closed and initiates the \ref
- PortCloseStateMachine. The first step is to allow the \ref
- TransmitEngine to run down.
-
- This routine is called by ::EslSocketCloseStart to initiate the socket
- network specific close operation on the socket.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
- @param [in] bCloseNow Set TRUE to abort active transfers
- @param [in] DebugFlags Flags for debug messages
-
- @retval EFI_SUCCESS The port is closed, not normally returned
- @retval EFI_NOT_READY The port has started the closing process
- @retval EFI_ALREADY_STARTED Error, the port is in the wrong state,
- most likely the routine was called already.
-
-**/
-EFI_STATUS
-EslSocketPortCloseStart (
- IN ESL_PORT * pPort,
- IN BOOLEAN bCloseNow,
- IN UINTN DebugFlags
- );
-
-/**
- Port close state 2
-
- This routine determines the state of the transmit engine and
- continue the close operation after the transmission is complete.
- The next step is to stop the \ref ReceiveEngine.
- See the \ref PortCloseStateMachine section.
-
- This routine is called by ::EslSocketPortCloseStart to determine
- if the transmission is complete.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @retval EFI_SUCCESS The port is closed, not normally returned
- @retval EFI_NOT_READY The port is still closing
- @retval EFI_ALREADY_STARTED Error, the port is in the wrong state,
- most likely the routine was called already.
-
-**/
-EFI_STATUS
-EslSocketPortCloseTxDone (
- IN ESL_PORT * pPort
- );
-
-/**
- Cancel the receive operations
-
- This routine cancels a pending receive operation.
- See the \ref ReceiveEngine section.
-
- This routine is called by ::EslSocketShutdown when the socket
- layer is being shutdown.
-
- @param [in] pPort Address of an ::ESL_PORT structure
- @param [in] pIo Address of an ::ESL_IO_MGMT structure
-
- **/
-VOID
-EslSocketRxCancel (
- IN ESL_PORT * pPort,
- IN ESL_IO_MGMT * pIo
- );
-
-/**
- Process the receive completion
-
- This routine queues the data in FIFO order in either the urgent
- or normal data queues depending upon the type of data received.
- See the \ref ReceiveEngine section.
-
- This routine is called when some data is received by:
- <ul>
- <li>::EslIp4RxComplete</li>
- <li>::EslTcp4RxComplete</li>
- <li>::EslUdp4RxComplete</li>
- </ul>
-
- @param [in] pIo Address of an ::ESL_IO_MGMT structure
- @param [in] Status Receive status
- @param [in] LengthInBytes Length of the receive data
- @param [in] bUrgent TRUE if urgent data is received and FALSE
- for normal data.
-
-**/
-VOID
-EslSocketRxComplete (
- IN ESL_IO_MGMT * pIo,
- IN EFI_STATUS Status,
- IN UINTN LengthInBytes,
- IN BOOLEAN bUrgent
- );
-
-/**
- Poll a socket for pending receive activity.
-
- This routine is called at elivated TPL and extends the idle
- loop which polls a socket down into the LAN driver layer to
- determine if there is any receive activity.
-
- The ::EslSocketPoll, ::EslSocketReceive and ::EslSocketTransmit
- routines call this routine when there is nothing to do.
-
- @param [in] pSocket Address of an ::EFI_SOCKET structure.
-
- **/
-VOID
-EslSocketRxPoll (
- IN ESL_SOCKET * pSocket
- );
-
-/**
- Start a receive operation
-
- This routine posts a receive buffer to the network adapter.
- See the \ref ReceiveEngine section.
-
- This support routine is called by:
- <ul>
- <li>::EslIp4Receive to restart the receive engine to release flow control.</li>
- <li>::EslIp4RxComplete to continue the operation of the receive engine if flow control is not being applied.</li>
- <li>::EslIp4SocketIsConfigured to start the recevie engine for the new socket.</li>
- <li>::EslTcp4ListenComplete to start the recevie engine for the new socket.</li>
- <li>::EslTcp4Receive to restart the receive engine to release flow control.</li>
- <li>::EslTcp4RxComplete to continue the operation of the receive engine if flow control is not being applied.</li>
- <li>::EslUdp4Receive to restart the receive engine to release flow control.</li>
- <li>::EslUdp4RxComplete to continue the operation of the receive engine if flow control is not being applied.</li>
- <li>::EslUdp4SocketIsConfigured to start the recevie engine for the new socket.</li>
- </ul>
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- **/
-VOID
-EslSocketRxStart (
- IN ESL_PORT * pPort
- );
-
-/**
- Complete the transmit operation
-
- This support routine handles the transmit completion processing for
- the various network layers. It frees the ::ESL_IO_MGMT structure
- and and frees packet resources by calling ::EslSocketPacketFree.
- Transmit errors are logged in ESL_SOCKET::TxError.
- See the \ref TransmitEngine section.
-
- This routine is called by:
- <ul>
- <li>::EslIp4TxComplete</li>
- <li>::EslTcp4TxComplete</li>
- <li>::EslTcp4TxOobComplete</li>
- <li>::EslUdp4TxComplete</li>
- </ul>
-
- @param [in] pIo Address of an ::ESL_IO_MGMT structure
- @param [in] LengthInBytes Length of the data in bytes
- @param [in] Status Transmit operation status
- @param [in] pQueueType Zero terminated string describing queue type
- @param [in] ppQueueHead Transmit queue head address
- @param [in] ppQueueTail Transmit queue tail address
- @param [in] ppActive Active transmit queue address
- @param [in] ppFree Free transmit queue address
-
- **/
-VOID
-EslSocketTxComplete (
- IN ESL_IO_MGMT * pIo,
- IN UINT32 LengthInBytes,
- IN EFI_STATUS Status,
- IN CONST CHAR8 * pQueueType,
- IN ESL_PACKET ** ppQueueHead,
- IN ESL_PACKET ** ppQueueTail,
- IN ESL_IO_MGMT ** ppActive,
- IN ESL_IO_MGMT ** ppFree
- );
-
-/**
- Transmit data using a network connection.
-
- This support routine starts a transmit operation on the
- underlying network layer.
-
- The network specific code calls this routine to start a
- transmit operation. See the \ref TransmitEngine section.
-
- @param [in] pPort Address of an ::ESL_PORT structure
- @param [in] ppQueueHead Transmit queue head address
- @param [in] ppQueueTail Transmit queue tail address
- @param [in] ppActive Active transmit queue address
- @param [in] ppFree Free transmit queue address
-
- **/
-VOID
-EslSocketTxStart (
- IN ESL_PORT * pPort,
- IN ESL_PACKET ** ppQueueHead,
- IN ESL_PACKET ** ppQueueTail,
- IN ESL_IO_MGMT ** ppActive,
- IN ESL_IO_MGMT ** ppFree
- );
-
-//------------------------------------------------------------------------------
-
-#endif // _SOCKET_H_
diff --git a/StdLib/EfiSocketLib/Tcp4.c b/StdLib/EfiSocketLib/Tcp4.c
deleted file mode 100644
index 68477fba6e..0000000000
--- a/StdLib/EfiSocketLib/Tcp4.c
+++ /dev/null
@@ -1,2432 +0,0 @@
-/** @file
- Implement the TCP4 driver support for the socket layer.
-
- Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-
- \section ConnectionManagement Connection Management
-
- The ::EslTcp4Listen routine initially places the SOCK_STREAM or
- SOCK_SEQPACKET socket into a listen state. When a remote machine
- makes a connection to the socket, the TCPv4 network layer calls
- ::EslTcp4ListenComplete to complete the connection processing.
- EslTcp4ListenComplete manages the connections by placing them in
- FIFO order in a queue to be serviced by the application. When the
- number of connections exceeds the backlog (ESL_SOCKET::MaxFifoDepth),
- the new connection is closed. Eventually, the application indirectly
- calls ::EslTcp4Accept to remove the next connection from the queue
- and get the associated socket.
-
-**/
-
-#include "Socket.h"
-
-
-/**
- Attempt to connect to a remote TCP port
-
- This routine starts the connection processing for a SOCK_STREAM
- or SOCK_SEQPAKCET socket using the TCPv4 network layer. It
- configures the local TCPv4 connection point and then attempts to
- connect to a remote system. Upon completion, the
- ::EslTcp4ConnectComplete routine gets called with the connection
- status.
-
- This routine is called by ::EslSocketConnect to initiate the TCPv4
- network specific connect operations. The connection processing is
- initiated by this routine and finished by ::EslTcp4ConnectComplete.
- This pair of routines walks through the list of local TCPv4
- connection points until a connection to the remote system is
- made.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure.
-
- @retval EFI_SUCCESS The connection was successfully established.
- @retval EFI_NOT_READY The connection is in progress, call this routine again.
- @retval Others The connection attempt failed.
-
- **/
-EFI_STATUS
-EslTcp4ConnectStart (
- IN ESL_SOCKET * pSocket
- );
-
-
-/**
- Process the connection attempt
-
- A system has initiated a connection attempt with a socket in the
- listen state. Attempt to complete the connection.
-
- The TCPv4 layer calls this routine when a connection is made to
- the socket in the listen state. See the
- \ref ConnectionManagement section.
-
- @param [in] Event The listen completion event
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
-**/
-VOID
-EslTcp4ListenComplete (
- IN EFI_EVENT Event,
- IN ESL_PORT * pPort
- );
-
-
-/**
- Accept a network connection.
-
- This routine waits for a network connection to the socket and
- returns the remote network address to the caller if requested.
-
- This routine is called by ::EslSocketAccept to handle the TCPv4 protocol
- specific accept operations for SOCK_STREAM and SOCK_SEQPACKET sockets.
- See the \ref ConnectionManagement section.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure.
-
- @param [in] pSockAddr Address of a buffer to receive the remote
- network address.
-
- @param [in, out] pSockAddrLength Length in bytes of the address buffer.
- On output specifies the length of the
- remote network address.
-
- @retval EFI_SUCCESS Remote address is available
- @retval Others Remote address not available
-
- **/
-EFI_STATUS
-EslTcp4Accept (
- IN ESL_SOCKET * pSocket,
- IN struct sockaddr * pSockAddr,
- IN OUT socklen_t * pSockAddrLength
- )
-{
- ESL_PORT * pPort;
- struct sockaddr_in * pRemoteAddress;
- ESL_TCP4_CONTEXT * pTcp4;
- UINT32 RemoteAddress;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Validate the socket length
- //
- pRemoteAddress = (struct sockaddr_in *) pSockAddr;
- if (( NULL == pSockAddrLength )
- || ( sizeof ( *pRemoteAddress ) > *pSockAddrLength )) {
- //
- // Invalid socket address
- //
- Status = EFI_INVALID_PARAMETER;
- pSocket->errno = EINVAL;
- DEBUG (( DEBUG_ACCEPT,
- "ERROR - Invalid address length\r\n" ));
- }
- else {
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Locate the address context
- //
- pPort = pSocket->pPortList;
- pTcp4 = &pPort->Context.Tcp4;
-
- //
- // Fill-in the remote address structure
- //
- ZeroMem ( pRemoteAddress, sizeof ( *pRemoteAddress ));
- pRemoteAddress->sin_len = sizeof ( *pRemoteAddress );
- pRemoteAddress->sin_family = AF_INET;
- pRemoteAddress->sin_port = SwapBytes16 ( pTcp4->ConfigData.AccessPoint.RemotePort );
- RemoteAddress = pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[3];
- RemoteAddress <<= 8;
- RemoteAddress |= pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[2];
- RemoteAddress <<= 8;
- RemoteAddress |= pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[1];
- RemoteAddress <<= 8;
- RemoteAddress |= pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[0];
- pRemoteAddress->sin_addr.s_addr = RemoteAddress;
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Process the remote connection completion event.
-
- This routine handles the completion of a connection attempt. It
- releases the port (TCPv4 adapter connection) in the case of an
- error and start a connection attempt on the next port. If the
- connection attempt was successful then this routine releases all
- of the other ports.
-
- This routine is called by the TCPv4 layer when a connect request
- completes. It sets the ESL_SOCKET::bConnected flag to notify the
- ::EslTcp4ConnectComplete routine that the connection is available.
- The flag is set when the connection is established or no more ports
- exist in the list. The connection status is passed via
- ESL_SOCKET::ConnectStatus.
-
- @param [in] Event The connect completion event
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
-**/
-VOID
-EslTcp4ConnectComplete (
- IN EFI_EVENT Event,
- IN ESL_PORT * pPort
- )
-{
- BOOLEAN bRemoveFirstPort;
- BOOLEAN bRemovePorts;
- ESL_PORT * pNextPort;
- ESL_SOCKET * pSocket;
- ESL_TCP4_CONTEXT * pTcp4;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Locate the TCP context
- //
- pSocket = pPort->pSocket;
- pTcp4 = &pPort->Context.Tcp4;
-
- //
- // Get the connection status
- //
- bRemoveFirstPort = FALSE;
- bRemovePorts = FALSE;
- Status = pTcp4->ConnectToken.CompletionToken.Status;
- pSocket->ConnectStatus = Status;
- if ( !EFI_ERROR ( Status )) {
- //
- // The connection was successful
- //
- DEBUG (( DEBUG_CONNECT,
- "0x%08x: Port connected to %d.%d.%d.%d:%d\r\n",
- pPort,
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[0],
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[1],
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[2],
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[3],
- pTcp4->ConfigData.AccessPoint.RemotePort ));
-
- //
- // Start the receive operations
- //
- pSocket->bConfigured = TRUE;
- pSocket->State = SOCKET_STATE_CONNECTED;
- EslSocketRxStart ( pPort );
-
- //
- // Remove the rest of the ports
- //
- bRemovePorts = TRUE;
- }
- else {
- //
- // The connection failed
- //
- if ( pPort->bConfigured ) {
- DEBUG (( DEBUG_CONNECT,
- "0x%08x: Port connection to %d.%d.%d.%d:%d failed, Status: %r\r\n",
- pPort,
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[0],
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[1],
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[2],
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[3],
- pTcp4->ConfigData.AccessPoint.RemotePort,
- Status ));
- }
-
- //
- // Close the current port
- //
- Status = EslSocketPortClose ( pPort );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_CONNECT,
- "0x%08x: Port closed\r\n",
- pPort ));
- }
- else {
- DEBUG (( DEBUG_CONNECT,
- "ERROR - Failed to close port 0x%08x, Status: %r\r\n",
- pPort,
- Status ));
- }
-
- //
- // Try to connect using the next port
- //
- Status = EslTcp4ConnectStart ( pSocket );
- if ( EFI_NOT_READY != Status ) {
- bRemoveFirstPort = TRUE;
- }
- }
-
- //
- // Remove the ports if necessary
- //
- if ( bRemoveFirstPort || bRemovePorts ) {
- //
- // Remove the first port if necessary
- //
- pPort = pSocket->pPortList;
- if (( !bRemoveFirstPort ) && ( NULL != pPort )) {
- pPort = pPort->pLinkSocket;
- }
-
- //
- // Remove the rest of the list
- //
- while ( NULL != pPort ) {
- pNextPort = pPort->pLinkSocket;
- EslSocketPortClose ( pPort );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_CONNECT,
- "0x%08x: Port closed\r\n",
- pPort ));
- }
- else {
- DEBUG (( DEBUG_CONNECT,
- "ERROR - Failed to close port 0x%08x, Status: %r\r\n",
- pPort,
- Status ));
- }
- pPort = pNextPort;
- }
-
- //
- // Notify the poll routine
- //
- pSocket->bConnected = TRUE;
- }
-
- DBG_EXIT ( );
-}
-
-
-/**
- Poll for completion of the connection attempt.
-
- This routine polls the ESL_SOCKET::bConnected flag to determine
- when the connection attempt is complete.
-
- This routine is called from ::EslSocketConnect to determine when
- the connection is complete. The ESL_SOCKET::bConnected flag is
- set by ::EslTcp4ConnectComplete when the TCPv4 layer establishes
- a connection or runs out of local network adapters. This routine
- gets the connection status from ESL_SOCKET::ConnectStatus.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure.
-
- @retval EFI_SUCCESS The connection was successfully established.
- @retval EFI_NOT_READY The connection is in progress, call this routine again.
- @retval Others The connection attempt failed.
-
- **/
-EFI_STATUS
-EslTcp4ConnectPoll (
- IN ESL_SOCKET * pSocket
- )
-{
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Determine if the connection is complete
- //
- if ( !pSocket->bConnected ) {
- //
- // Not connected
- //
- pSocket->errno = EAGAIN;
- Status = EFI_NOT_READY;
- }
- else {
- //
- // The connection processing is complete
- //
- pSocket->bConnected = FALSE;
-
- //
- // Translate the connection status
- //
- Status = pSocket->ConnectStatus;
- switch ( Status ) {
- default:
- case EFI_DEVICE_ERROR:
- pSocket->errno = EIO;
- break;
-
- case EFI_ABORTED:
- pSocket->errno = ECONNABORTED;
- break;
-
- case EFI_ACCESS_DENIED:
- pSocket->errno = EACCES;
- break;
-
- case EFI_CONNECTION_RESET:
- pSocket->errno = ECONNRESET;
- break;
-
- case EFI_INVALID_PARAMETER:
- pSocket->errno = EADDRNOTAVAIL;
- break;
-
- case EFI_HOST_UNREACHABLE:
- case EFI_NO_RESPONSE:
- pSocket->errno = EHOSTUNREACH;
- break;
-
- case EFI_NO_MAPPING:
- pSocket->errno = EAFNOSUPPORT;
- break;
-
- case EFI_NO_MEDIA:
- case EFI_NETWORK_UNREACHABLE:
- pSocket->errno = ENETDOWN;
- break;
-
- case EFI_OUT_OF_RESOURCES:
- pSocket->errno = ENOBUFS;
- break;
-
- case EFI_PORT_UNREACHABLE:
- case EFI_PROTOCOL_UNREACHABLE:
- case EFI_CONNECTION_REFUSED:
- pSocket->errno = ECONNREFUSED;
- break;
-
- case EFI_SUCCESS:
- pSocket->errno = 0;
- break;
-
- case EFI_TIMEOUT:
- pSocket->errno = ETIMEDOUT;
- break;
-
- case EFI_UNSUPPORTED:
- pSocket->errno = EOPNOTSUPP;
- break;
- }
-
- //
- // Display the translation
- //
- DEBUG (( DEBUG_CONNECT,
- "ERROR - errno: %d, Status: %r\r\n",
- pSocket->errno,
- Status ));
- }
-
- //
- // Return the initialization status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Attempt to connect to a remote TCP port
-
- This routine starts the connection processing for a SOCK_STREAM
- or SOCK_SEQPAKCET socket using the TCPv4 network layer. It
- configures the local TCPv4 connection point and then attempts to
- connect to a remote system. Upon completion, the
- ::EslTcp4ConnectComplete routine gets called with the connection
- status.
-
- This routine is called by ::EslSocketConnect to initiate the TCPv4
- network specific connect operations. The connection processing is
- initiated by this routine and finished by ::EslTcp4ConnectComplete.
- This pair of routines walks through the list of local TCPv4
- connection points until a connection to the remote system is
- made.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure.
-
- @retval EFI_SUCCESS The connection was successfully established.
- @retval EFI_NOT_READY The connection is in progress, call this routine again.
- @retval Others The connection attempt failed.
-
- **/
-EFI_STATUS
-EslTcp4ConnectStart (
- IN ESL_SOCKET * pSocket
- )
-{
- ESL_PORT * pPort;
- ESL_TCP4_CONTEXT * pTcp4;
- EFI_TCP4_PROTOCOL * pTcp4Protocol;
- EFI_SIMPLE_NETWORK_MODE SnpModeData;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Determine if any more local adapters are available
- //
- pPort = pSocket->pPortList;
- if ( NULL != pPort ) {
- //
- // Configure the port
- //
- pTcp4 = &pPort->Context.Tcp4;
- pTcp4->ConfigData.AccessPoint.ActiveFlag = TRUE;
- pTcp4->ConfigData.TimeToLive = 255;
- pTcp4Protocol = pPort->pProtocol.TCPv4;
- Status = pTcp4Protocol->Configure ( pTcp4Protocol,
- &pTcp4->ConfigData );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_CONNECT,
- "ERROR - Failed to configure the Tcp4 port, Status: %r\r\n",
- Status ));
- }
- else {
- DEBUG (( DEBUG_CONNECT,
- "0x%08x: Port configured\r\n",
- pPort ));
- pPort->bConfigured = TRUE;
-
- //
- // Verify the port connection
- //
- Status = pTcp4Protocol->GetModeData ( pTcp4Protocol,
- NULL,
- NULL,
- NULL,
- NULL,
- &SnpModeData );
- if ( !EFI_ERROR ( Status )) {
- if ( SnpModeData.MediaPresentSupported
- && ( !SnpModeData.MediaPresent )) {
- //
- // Port is not connected to the network
- //
- Status = EFI_NO_MEDIA;
- }
- else {
- //
- // Attempt the connection to the remote system
- //
- Status = pTcp4Protocol->Connect ( pTcp4Protocol,
- &pTcp4->ConnectToken );
- }
- }
- if ( EFI_ERROR ( Status )) {
- //
- // Connection error
- //
- DEBUG (( DEBUG_CONNECT,
- "ERROR - Port 0x%08x not connected, Status: %r\r\n",
- pPort,
- Status ));
- }
- }
- if ( !EFI_ERROR ( Status )) {
- //
- // Connection in progress
- //
- pSocket->errno = EINPROGRESS;
- DEBUG (( DEBUG_CONNECT,
- "0x%08x: Port attempting connection to %d.%d.%d.%d:%d\r\n",
- pPort,
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[0],
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[1],
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[2],
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[3],
- pTcp4->ConfigData.AccessPoint.RemotePort ));
- }
- else {
- //
- // Error return path is through EslTcp4ConnectComplete to
- // enable retry on other ports
- //
- // Status to errno translation gets done in EslTcp4ConnectPoll
- //
- pTcp4->ConnectToken.CompletionToken.Status = Status;
-
- //
- // Continue with the next port
- //
- gBS->CheckEvent ( pTcp4->ConnectToken.CompletionToken.Event );
- gBS->SignalEvent ( pTcp4->ConnectToken.CompletionToken.Event );
- }
- Status = EFI_NOT_READY;
- }
- else {
- //
- // No more local adapters available
- //
- pSocket->errno = ENETUNREACH;
- Status = EFI_NO_RESPONSE;
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Establish the known port to listen for network connections.
-
- This routine places the port into a state that enables connection
- attempts.
-
- This routine is called by ::EslSocketListen to handle the network
- specifics of the listen operation for SOCK_STREAM and SOCK_SEQPACKET
- sockets. See the \ref ConnectionManagement section.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure.
-
- @retval EFI_SUCCESS - Socket successfully created
- @retval Other - Failed to enable the socket for listen
-
-**/
-EFI_STATUS
-EslTcp4Listen (
- IN ESL_SOCKET * pSocket
- )
-{
- ESL_PORT * pNextPort;
- ESL_PORT * pPort;
- ESL_TCP4_CONTEXT * pTcp4;
- EFI_TCP4_PROTOCOL * pTcp4Protocol;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Verify the socket layer synchronization
- //
- VERIFY_TPL ( TPL_SOCKETS );
-
- //
- // Use for/break instead of goto
- //
- for ( ; ; ) {
- //
- // Assume no ports are available
- //
- pSocket->errno = EOPNOTSUPP;
- Status = EFI_NOT_READY;
-
- //
- // Walk the list of ports
- //
- pPort = pSocket->pPortList;
- while ( NULL != pPort ) {
- //
- // Assume success
- //
- pSocket->errno = 0;
-
- //
- // Use for/break insteak of goto
- //
- for ( ; ; ) {
- //
- // Create the listen completion event
- //
- pTcp4 = &pPort->Context.Tcp4;
- Status = gBS->CreateEvent ( EVT_NOTIFY_SIGNAL,
- TPL_SOCKETS,
- (EFI_EVENT_NOTIFY)EslTcp4ListenComplete,
- pPort,
- &pTcp4->ListenToken.CompletionToken.Event );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR | DEBUG_LISTEN,
- "ERROR - Failed to create the listen completion event, Status: %r\r\n",
- Status ));
- pSocket->errno = ENOMEM;
- break;
- }
- DEBUG (( DEBUG_POOL,
- "0x%08x: Created listen completion event\r\n",
- pTcp4->ListenToken.CompletionToken.Event ));
-
- //
- // Configure the port
- //
- pTcp4Protocol = pPort->pProtocol.TCPv4;
- Status = pTcp4Protocol->Configure ( pTcp4Protocol,
- &pTcp4->ConfigData );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_LISTEN,
- "ERROR - Failed to configure the Tcp4 port, Status: %r\r\n",
- Status ));
- switch ( Status ) {
- case EFI_ACCESS_DENIED:
- pSocket->errno = EACCES;
- break;
-
- default:
- case EFI_DEVICE_ERROR:
- pSocket->errno = EIO;
- break;
-
- case EFI_INVALID_PARAMETER:
- pSocket->errno = EADDRNOTAVAIL;
- break;
-
- case EFI_NO_MAPPING:
- pSocket->errno = EAFNOSUPPORT;
- break;
-
- case EFI_OUT_OF_RESOURCES:
- pSocket->errno = ENOBUFS;
- break;
-
- case EFI_UNSUPPORTED:
- pSocket->errno = EOPNOTSUPP;
- break;
- }
- break;
- }
- DEBUG (( DEBUG_LISTEN,
- "0x%08x: Port configured\r\n",
- pPort ));
- pPort->bConfigured = TRUE;
-
- //
- // Start the listen operation on the port
- //
- Status = pTcp4Protocol->Accept ( pTcp4Protocol,
- &pTcp4->ListenToken );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_LISTEN,
- "ERROR - Failed Tcp4 accept, Status: %r\r\n",
- Status ));
- switch ( Status ) {
- case EFI_ACCESS_DENIED:
- pSocket->errno = EACCES;
- break;
-
- default:
- case EFI_DEVICE_ERROR:
- pSocket->errno = EIO;
- break;
-
- case EFI_INVALID_PARAMETER:
- pSocket->errno = EADDRNOTAVAIL;
- break;
-
- case EFI_NOT_STARTED:
- pSocket->errno = ENETDOWN;
- break;
-
- case EFI_OUT_OF_RESOURCES:
- pSocket->errno = ENOBUFS;
- break;
- }
- break;
- }
- DEBUG (( DEBUG_LISTEN,
- "0x%08x: Listen pending on Port\r\n",
- pPort ));
-
- //
- // Listen is pending on this port
- //
- break;
- }
-
- //
- // Get the next port
- //
- pNextPort = pPort->pLinkSocket;
-
- //
- // Close the port upon error
- //
- if ( EFI_ERROR ( Status )) {
- EslSocketPortCloseStart ( pPort, TRUE, DEBUG_LISTEN );
- }
-
- //
- // Set the next port
- //
- pPort = pNextPort;
- }
-
- //
- // Determine if any ports are in the listen state
- //
- if ( NULL == pSocket->pPortList ) {
- //
- // No ports in the listen state
- //
- pSocket->MaxFifoDepth = 0;
-
- //
- // Return the last error detected
- //
- break;
- }
-
- //
- // Mark the socket as configured
- //
- pSocket->bConfigured = TRUE;
- Status = EFI_SUCCESS;
- pSocket->errno = 0;
-
- //
- // All done
- //
- DEBUG (( DEBUG_LISTEN,
- "0x%08x: pSocket - Listen pending on socket\r\n",
- pSocket ));
- break;
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Process the connection attempt
-
- A system has initiated a connection attempt with a socket in the
- listen state. Attempt to complete the connection.
-
- The TCPv4 layer calls this routine when a connection is made to
- the socket in the listen state. See the
- \ref ConnectionManagement section.
-
- @param [in] Event The listen completion event
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
-**/
-VOID
-EslTcp4ListenComplete (
- IN EFI_EVENT Event,
- IN ESL_PORT * pPort
- )
-{
- EFI_HANDLE ChildHandle;
- struct sockaddr_in LocalAddress;
- EFI_TCP4_CONFIG_DATA * pConfigData;
- ESL_PORT * pNewPort;
- ESL_SOCKET * pNewSocket;
- ESL_SOCKET * pSocket;
- ESL_TCP4_CONTEXT * pTcp4;
- EFI_TCP4_PROTOCOL * pTcp4Protocol;
- EFI_STATUS Status;
- EFI_HANDLE TcpPortHandle;
- EFI_STATUS TempStatus;
-
- DBG_ENTER ( );
- VERIFY_AT_TPL ( TPL_SOCKETS );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Determine if this connection fits into the connection FIFO
- //
- pSocket = pPort->pSocket;
- TcpPortHandle = pPort->Context.Tcp4.ListenToken.NewChildHandle;
- if (( SOCKET_STATE_LISTENING == pSocket->State )
- && ( pSocket->MaxFifoDepth > pSocket->FifoDepth )) {
- //
- // Allocate a socket for this connection
- //
- ChildHandle = NULL;
- Status = EslSocketAllocate ( &ChildHandle,
- DEBUG_CONNECTION,
- &pNewSocket );
- if ( !EFI_ERROR ( Status )) {
- //
- // Clone the socket parameters
- //
- pNewSocket->pApi = pSocket->pApi;
- pNewSocket->Domain = pSocket->Domain;
- pNewSocket->Protocol = pSocket->Protocol;
- pNewSocket->Type = pSocket->Type;
-
- //
- // Build the local address
- //
- pTcp4 = &pPort->Context.Tcp4;
- LocalAddress.sin_len = (uint8_t)pNewSocket->pApi->MinimumAddressLength;
- LocalAddress.sin_family = AF_INET;
- LocalAddress.sin_port = 0;
- LocalAddress.sin_addr.s_addr = *(UINT32 *)&pTcp4->ConfigData.AccessPoint.StationAddress.Addr[0];
-
- //
- // Allocate a port for this connection
- // Note in this instance Configure may not be called with NULL!
- //
- Status = EslSocketPortAllocate ( pNewSocket,
- pPort->pService,
- TcpPortHandle,
- (struct sockaddr *)&LocalAddress,
- FALSE,
- DEBUG_CONNECTION,
- &pNewPort );
- if ( !EFI_ERROR ( Status )) {
- //
- // Restart the listen operation on the port
- //
- pTcp4Protocol = pPort->pProtocol.TCPv4;
- Status = pTcp4Protocol->Accept ( pTcp4Protocol,
- &pTcp4->ListenToken );
-
- //
- // Close the TCP port using SocketClose
- //
- TcpPortHandle = NULL;
- pTcp4 = &pNewPort->Context.Tcp4;
-
- //
- // Check for an accept call error
- //
- if ( !EFI_ERROR ( Status )) {
- //
- // Get the port configuration
- //
- pNewPort->bConfigured = TRUE;
- pConfigData = &pTcp4->ConfigData;
- pConfigData->ControlOption = &pTcp4->Option;
- pTcp4Protocol = pNewPort->pProtocol.TCPv4;
- Status = pTcp4Protocol->GetModeData ( pTcp4Protocol,
- NULL,
- pConfigData,
- NULL,
- NULL,
- NULL );
- if ( !EFI_ERROR ( Status )) {
- //
- // Add the new socket to the connection FIFO
- //
- if ( NULL == pSocket->pFifoTail ) {
- //
- // First connection
- //
- pSocket->pFifoHead = pNewSocket;
- }
- else {
- //
- // Add to end of list.
- //
- pSocket->pFifoTail->pNextConnection = pNewSocket;
- }
- pSocket->pFifoTail = pNewSocket;
- pSocket->FifoDepth += 1;
-
- //
- // Update the socket state
- //
- pNewSocket->State = SOCKET_STATE_IN_FIFO;
-
- //
- // Log the connection
- //
- DEBUG (( DEBUG_CONNECTION | DEBUG_INFO,
- "0x%08x: Socket on port %d.%d.%d.%d:%d connected to %d.%d.%d.%d:%d\r\n",
- pNewSocket,
- pConfigData->AccessPoint.StationAddress.Addr[0],
- pConfigData->AccessPoint.StationAddress.Addr[1],
- pConfigData->AccessPoint.StationAddress.Addr[2],
- pConfigData->AccessPoint.StationAddress.Addr[3],
- pConfigData->AccessPoint.StationPort,
- pConfigData->AccessPoint.RemoteAddress.Addr[0],
- pConfigData->AccessPoint.RemoteAddress.Addr[1],
- pConfigData->AccessPoint.RemoteAddress.Addr[2],
- pConfigData->AccessPoint.RemoteAddress.Addr[3],
- pConfigData->AccessPoint.RemotePort ));
- DEBUG (( DEBUG_CONNECTION | DEBUG_INFO,
- "0x%08x: Listen socket adding socket 0x%08x to FIFO, depth: %d\r\n",
- pSocket,
- pNewSocket,
- pSocket->FifoDepth ));
-
- //
- // Start the receive operation
- //
- EslSocketRxStart ( pNewPort );
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_CONNECTION | DEBUG_INFO,
- "ERROR - GetModeData failed on port 0x%08x, Status: %r\r\n",
- pNewPort,
- Status ));
- }
- }
- else {
- //
- // The listen failed on this port
- //
- DEBUG (( DEBUG_LISTEN | DEBUG_INFO,
- "ERROR - Listen failed on port 0x%08x, Status: %r\r\n",
- pPort,
- Status ));
-
- //
- // Close the listening port
- //
- EslSocketPortCloseStart ( pPort, TRUE, DEBUG_LISTEN );
- }
- }
-
- //
- // Done with the socket if necessary
- //
- if ( EFI_ERROR ( Status )) {
- TempStatus = EslSocketCloseStart ( &pNewSocket->SocketProtocol,
- TRUE,
- &pSocket->errno );
- ASSERT ( EFI_SUCCESS == TempStatus );
- }
- }
- }
- else {
- DEBUG (( DEBUG_CONNECTION,
- "0x%08x: Socket FIFO full, connection refused\r\n",
- pSocket ));
-
- //
- // The FIFO is full or the socket is in the wrong state
- //
- Status = EFI_BUFFER_TOO_SMALL;
- }
-
- //
- // Close the connection if necessary
- //
- if (( EFI_ERROR ( Status ))
- && ( NULL == TcpPortHandle )) {
- //
- // TODO: Finish this code path
- // The new connection does not fit into the connection FIFO
- //
- // Process:
- // Call close
- // Release the resources
-
- }
-
- DBG_EXIT ( );
-}
-
-
-/**
- Get the local socket address.
-
- This routine returns the IPv4 address and TCP port number associated
- with the local socket.
-
- This routine is called by ::EslSocketGetLocalAddress to determine the
- network address for the SOCK_STREAM or SOCK_SEQPACKET socket.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [out] pSockAddr Network address to receive the local system address
-
-**/
-VOID
-EslTcp4LocalAddressGet (
- IN ESL_PORT * pPort,
- OUT struct sockaddr * pSockAddr
- )
-{
- struct sockaddr_in * pLocalAddress;
- ESL_TCP4_CONTEXT * pTcp4;
-
- DBG_ENTER ( );
-
- //
- // Return the local address
- //
- pTcp4 = &pPort->Context.Tcp4;
- pLocalAddress = (struct sockaddr_in *)pSockAddr;
- pLocalAddress->sin_family = AF_INET;
- pLocalAddress->sin_port = SwapBytes16 ( pTcp4->ConfigData.AccessPoint.StationPort );
- CopyMem ( &pLocalAddress->sin_addr,
- &pTcp4->ConfigData.AccessPoint.StationAddress.Addr[0],
- sizeof ( pLocalAddress->sin_addr ));
-
- DBG_EXIT ( );
-}
-
-
-/**
- Set the local port address.
-
- This routine sets the local port address.
-
- This support routine is called by ::EslSocketPortAllocate.
-
- @param [in] pPort Address of an ESL_PORT structure
- @param [in] pSockAddr Address of a sockaddr structure that contains the
- connection point on the local machine. An IPv4 address
- of INADDR_ANY specifies that the connection is made to
- all of the network stacks on the platform. Specifying a
- specific IPv4 address restricts the connection to the
- network stack supporting that address. Specifying zero
- for the port causes the network layer to assign a port
- number from the dynamic range. Specifying a specific
- port number causes the network layer to use that port.
-
- @param [in] bBindTest TRUE = run bind testing
-
- @retval EFI_SUCCESS The operation was successful
-
- **/
-EFI_STATUS
-EslTcp4LocalAddressSet (
- IN ESL_PORT * pPort,
- IN CONST struct sockaddr * pSockAddr,
- IN BOOLEAN bBindTest
- )
-{
- EFI_TCP4_ACCESS_POINT * pAccessPoint;
- CONST struct sockaddr_in * pIpAddress;
- CONST UINT8 * pIpv4Address;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Validate the address
- //
- pIpAddress = (struct sockaddr_in *)pSockAddr;
- if ( INADDR_BROADCAST == pIpAddress->sin_addr.s_addr ) {
- //
- // The local address must not be the broadcast address
- //
- Status = EFI_INVALID_PARAMETER;
- pPort->pSocket->errno = EADDRNOTAVAIL;
- }
- else {
- //
- // Set the local address
- //
- pIpv4Address = (UINT8 *)&pIpAddress->sin_addr.s_addr;
- pAccessPoint = &pPort->Context.Tcp4.ConfigData.AccessPoint;
- pAccessPoint->StationAddress.Addr[0] = pIpv4Address[0];
- pAccessPoint->StationAddress.Addr[1] = pIpv4Address[1];
- pAccessPoint->StationAddress.Addr[2] = pIpv4Address[2];
- pAccessPoint->StationAddress.Addr[3] = pIpv4Address[3];
-
- //
- // Determine if the default address is used
- //
- pAccessPoint->UseDefaultAddress = (BOOLEAN)( 0 == pIpAddress->sin_addr.s_addr );
-
- //
- // Set the subnet mask
- //
- if ( pAccessPoint->UseDefaultAddress ) {
- pAccessPoint->SubnetMask.Addr[0] = 0;
- pAccessPoint->SubnetMask.Addr[1] = 0;
- pAccessPoint->SubnetMask.Addr[2] = 0;
- pAccessPoint->SubnetMask.Addr[3] = 0;
- }
- else {
- pAccessPoint->SubnetMask.Addr[0] = 0xff;
- pAccessPoint->SubnetMask.Addr[1] = ( 128 <= pAccessPoint->StationAddress.Addr[0]) ? 0xff : 0;
- pAccessPoint->SubnetMask.Addr[2] = ( 192 <= pAccessPoint->StationAddress.Addr[0]) ? 0xff : 0;
- pAccessPoint->SubnetMask.Addr[3] = ( 224 <= pAccessPoint->StationAddress.Addr[0]) ? 0xff : 0;
- }
-
- //
- // Validate the IP address
- //
- pAccessPoint->StationPort = 0;
- Status = bBindTest ? EslSocketBindTest ( pPort, EADDRNOTAVAIL )
- : EFI_SUCCESS;
- if ( !EFI_ERROR ( Status )) {
- //
- // Set the port number
- //
- pAccessPoint->StationPort = SwapBytes16 ( pIpAddress->sin_port );
- pPort->pSocket->bAddressSet = TRUE;
-
- //
- // Display the local address
- //
- DEBUG (( DEBUG_BIND,
- "0x%08x: Port, Local TCP4 Address: %d.%d.%d.%d:%d\r\n",
- pPort,
- pAccessPoint->StationAddress.Addr[0],
- pAccessPoint->StationAddress.Addr[1],
- pAccessPoint->StationAddress.Addr[2],
- pAccessPoint->StationAddress.Addr[3],
- pAccessPoint->StationPort ));
- }
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Free a receive packet
-
- This routine performs the network specific operations necessary
- to free a receive packet.
-
- This routine is called by ::EslSocketPortCloseTxDone to free a
- receive packet.
-
- @param [in] pPacket Address of an ::ESL_PACKET structure.
- @param [in, out] pRxBytes Address of the count of RX bytes
-
-**/
-VOID
-EslTcp4PacketFree (
- IN ESL_PACKET * pPacket,
- IN OUT size_t * pRxBytes
- )
-{
- DBG_ENTER ( );
-
- //
- // Account for the receive bytes
- //
- *pRxBytes -= pPacket->Op.Tcp4Rx.RxData.DataLength;
- DBG_EXIT ( );
-}
-
-
-/**
- Initialize the network specific portions of an ::ESL_PORT structure.
-
- This routine initializes the network specific portions of an
- ::ESL_PORT structure for use by the socket.
-
- This support routine is called by ::EslSocketPortAllocate
- to connect the socket with the underlying network adapter
- running the TCPv4 protocol.
-
- @param [in] pPort Address of an ESL_PORT structure
- @param [in] DebugFlags Flags for debug messages
-
- @retval EFI_SUCCESS - Socket successfully created
-
- **/
-EFI_STATUS
-EslTcp4PortAllocate (
- IN ESL_PORT * pPort,
- IN UINTN DebugFlags
- )
-{
- EFI_TCP4_ACCESS_POINT * pAccessPoint;
- ESL_SOCKET * pSocket;
- ESL_TCP4_CONTEXT * pTcp4;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Use for/break instead of goto
- for ( ; ; ) {
- //
- // Allocate the close event
- //
- pSocket = pPort->pSocket;
- pTcp4 = &pPort->Context.Tcp4;
- Status = gBS->CreateEvent ( EVT_NOTIFY_SIGNAL,
- TPL_SOCKETS,
- (EFI_EVENT_NOTIFY)EslSocketPortCloseComplete,
- pPort,
- &pTcp4->CloseToken.CompletionToken.Event);
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR | DebugFlags,
- "ERROR - Failed to create the close event, Status: %r\r\n",
- Status ));
- pSocket->errno = ENOMEM;
- break;
- }
- DEBUG (( DEBUG_CLOSE | DEBUG_POOL,
- "0x%08x: Created close event\r\n",
- pTcp4->CloseToken.CompletionToken.Event ));
-
- //
- // Allocate the connection event
- //
- Status = gBS->CreateEvent ( EVT_NOTIFY_SIGNAL,
- TPL_SOCKETS,
- (EFI_EVENT_NOTIFY)EslTcp4ConnectComplete,
- pPort,
- &pTcp4->ConnectToken.CompletionToken.Event);
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR | DebugFlags,
- "ERROR - Failed to create the connect event, Status: %r\r\n",
- Status ));
- pSocket->errno = ENOMEM;
- break;
- }
- DEBUG (( DEBUG_CLOSE | DEBUG_POOL,
- "0x%08x: Created connect event\r\n",
- pTcp4->ConnectToken.CompletionToken.Event ));
-
- //
- // Initialize the port
- //
- pSocket->TxPacketOffset = OFFSET_OF ( ESL_PACKET, Op.Tcp4Tx.TxData );
- pSocket->TxTokenEventOffset = OFFSET_OF ( ESL_IO_MGMT, Token.Tcp4Tx.CompletionToken.Event );
- pSocket->TxTokenOffset = OFFSET_OF ( EFI_TCP4_IO_TOKEN, Packet.TxData );
-
- //
- // Save the cancel, receive and transmit addresses
- // pPort->pfnRxCancel = NULL; since the UEFI implementation returns EFI_UNSUPPORTED
- //
- pPort->pfnConfigure = (PFN_NET_CONFIGURE)pPort->pProtocol.TCPv4->Configure;
- pPort->pfnRxPoll = (PFN_NET_POLL)pPort->pProtocol.TCPv4->Poll;
- pPort->pfnRxStart = (PFN_NET_IO_START)pPort->pProtocol.TCPv4->Receive;
- pPort->pfnTxStart = (PFN_NET_IO_START)pPort->pProtocol.TCPv4->Transmit;
-
- //
- // Set the configuration flags
- //
- pAccessPoint = &pPort->Context.Tcp4.ConfigData.AccessPoint;
- pAccessPoint->ActiveFlag = FALSE;
- pTcp4->ConfigData.TimeToLive = 255;
- break;
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Close a TCP4 port.
-
- This routine releases the network specific resources allocated by
- ::EslTcp4PortAllocate.
-
- This routine is called by ::EslSocketPortClose.
- See the \ref PortCloseStateMachine section.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @retval EFI_SUCCESS The port is closed
- @retval other Port close error
-
-**/
-EFI_STATUS
-EslTcp4PortClose (
- IN ESL_PORT * pPort
- )
-{
- UINTN DebugFlags;
- ESL_TCP4_CONTEXT * pTcp4;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Locate the port in the socket list
- //
- Status = EFI_SUCCESS;
- DebugFlags = pPort->DebugFlags;
- pTcp4 = &pPort->Context.Tcp4;
-
- //
- // Done with the connect event
- //
- if ( NULL != pTcp4->ConnectToken.CompletionToken.Event ) {
- Status = gBS->CloseEvent ( pTcp4->ConnectToken.CompletionToken.Event );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DebugFlags | DEBUG_POOL,
- "0x%08x: Closed connect event\r\n",
- pTcp4->ConnectToken.CompletionToken.Event ));
- }
- else {
- DEBUG (( DEBUG_ERROR | DebugFlags,
- "ERROR - Failed to close the connect event, Status: %r\r\n",
- Status ));
- ASSERT ( EFI_SUCCESS == Status );
- }
- }
-
- //
- // Done with the close event
- //
- if ( NULL != pTcp4->CloseToken.CompletionToken.Event ) {
- Status = gBS->CloseEvent ( pTcp4->CloseToken.CompletionToken.Event );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DebugFlags | DEBUG_POOL,
- "0x%08x: Closed close event\r\n",
- pTcp4->CloseToken.CompletionToken.Event ));
- }
- else {
- DEBUG (( DEBUG_ERROR | DebugFlags,
- "ERROR - Failed to close the close event, Status: %r\r\n",
- Status ));
- ASSERT ( EFI_SUCCESS == Status );
- }
- }
-
- //
- // Done with the listen completion event
- //
- if ( NULL != pTcp4->ListenToken.CompletionToken.Event ) {
- Status = gBS->CloseEvent ( pTcp4->ListenToken.CompletionToken.Event );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DebugFlags | DEBUG_POOL,
- "0x%08x: Closed listen completion event\r\n",
- pTcp4->ListenToken.CompletionToken.Event ));
- }
- else {
- DEBUG (( DEBUG_ERROR | DebugFlags,
- "ERROR - Failed to close the listen completion event, Status: %r\r\n",
- Status ));
- ASSERT ( EFI_SUCCESS == Status );
- }
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Perform the network specific close operation on the port.
-
- This routine performs a cancel operations on the TCPv4 port to
- shutdown the receive operations on the port.
-
- This routine is called by the ::EslSocketPortCloseTxDone
- routine after the port completes all of the transmission.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @retval EFI_SUCCESS The port is closed, not normally returned
- @retval EFI_NOT_READY The port is still closing
- @retval EFI_ALREADY_STARTED Error, the port is in the wrong state,
- most likely the routine was called already.
-
-**/
-EFI_STATUS
-EslTcp4PortCloseOp (
- IN ESL_PORT * pPort
- )
-{
- ESL_TCP4_CONTEXT * pTcp4;
- EFI_TCP4_PROTOCOL * pTcp4Protocol;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Close the configured port
- //
- Status = EFI_SUCCESS;
- pTcp4 = &pPort->Context.Tcp4;
- pTcp4Protocol = pPort->pProtocol.TCPv4;
- pTcp4->CloseToken.AbortOnClose = pPort->bCloseNow;
- Status = pTcp4Protocol->Close ( pTcp4Protocol,
- &pTcp4->CloseToken );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( pPort->DebugFlags | DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Port close started\r\n",
- pPort ));
- }
- else {
- DEBUG (( DEBUG_ERROR | pPort->DebugFlags | DEBUG_CLOSE | DEBUG_INFO,
- "ERROR - Close failed on port 0x%08x, Status: %r\r\n",
- pPort,
- Status ));
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Receive data from a network connection.
-
- This routine attempts to return buffered data to the caller. The
- data is removed from the urgent queue if the message flag MSG_OOB
- is specified, otherwise data is removed from the normal queue.
- See the \ref ReceiveEngine section.
-
- This routine is called by ::EslSocketReceive to handle the network
- specific receive operation to support SOCK_STREAM and SOCK_SEQPACKET
- sockets.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [in] pPacket Address of an ::ESL_PACKET structure.
-
- @param [in] pbConsumePacket Address of a BOOLEAN indicating if the packet is to be consumed
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer to receive the data.
-
- @param [in] pDataLength Number of received data bytes in the buffer.
-
- @param [out] pAddress Network address to receive the remote system address
-
- @param [out] pSkipBytes Address to receive the number of bytes skipped
-
- @return Returns the address of the next free byte in the buffer.
-
- **/
-UINT8 *
-EslTcp4Receive (
- IN ESL_PORT * pPort,
- IN ESL_PACKET * pPacket,
- IN BOOLEAN * pbConsumePacket,
- IN size_t BufferLength,
- IN UINT8 * pBuffer,
- OUT size_t * pDataLength,
- OUT struct sockaddr * pAddress,
- OUT size_t * pSkipBytes
- )
-{
- size_t DataLength;
- struct sockaddr_in * pRemoteAddress;
- ESL_TCP4_CONTEXT * pTcp4;
-
- DBG_ENTER ( );
-
- //
- // Return the remote system address if requested
- //
- if ( NULL != pAddress ) {
- //
- // Build the remote address
- //
- pTcp4 = &pPort->Context.Tcp4;
- DEBUG (( DEBUG_RX,
- "Getting packet remote address: %d.%d.%d.%d:%d\r\n",
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[0],
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[1],
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[2],
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[3],
- pTcp4->ConfigData.AccessPoint.RemotePort ));
- pRemoteAddress = (struct sockaddr_in *)pAddress;
- CopyMem ( &pRemoteAddress->sin_addr,
- &pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[0],
- sizeof ( pRemoteAddress->sin_addr ));
- pRemoteAddress->sin_port = SwapBytes16 ( pTcp4->ConfigData.AccessPoint.RemotePort );
- }
-
- //
- // Determine the amount of received data
- //
- DataLength = pPacket->ValidBytes;
- if ( BufferLength < DataLength ) {
- DataLength = BufferLength;
- }
-
- //
- // Move the data into the buffer
- //
- DEBUG (( DEBUG_RX,
- "0x%08x: Port copy packet 0x%08x data into 0x%08x, 0x%08x bytes\r\n",
- pPort,
- pPacket,
- pBuffer,
- DataLength ));
- CopyMem ( pBuffer, pPacket->pBuffer, DataLength );
-
- //
- // Set the next buffer address
- //
- pBuffer += DataLength;
-
- //
- // Determine if the data is being read
- //
- if ( *pbConsumePacket ) {
- //
- // Account for the bytes consumed
- //
- pPacket->pBuffer += DataLength;
- pPacket->ValidBytes -= DataLength;
- DEBUG (( DEBUG_RX,
- "0x%08x: Port account for 0x%08x bytes\r\n",
- pPort,
- DataLength ));
-
- //
- // Determine if the entire packet was consumed
- //
- if (( 0 == pPacket->ValidBytes )
- || ( SOCK_STREAM != pPort->pSocket->Type )) {
- //
- // All done with this packet
- // Account for any discarded data
- //
- *pSkipBytes = pPacket->ValidBytes;
- }
- else
- {
- //
- // More data to consume later
- //
- *pbConsumePacket = FALSE;
- }
- }
-
- //
- // Return the data length and the buffer address
- //
- *pDataLength = DataLength;
- DBG_EXIT_HEX ( pBuffer );
- return pBuffer;
-}
-
-
-/**
- Get the remote socket address.
-
- This routine returns the address of the remote connection point
- associated with the SOCK_STREAM or SOCK_SEQPACKET socket.
-
- This routine is called by ::EslSocketGetPeerAddress to detemine
- the TCPv4 address and por number associated with the network adapter.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [out] pAddress Network address to receive the remote system address
-
-**/
-VOID
-EslTcp4RemoteAddressGet (
- IN ESL_PORT * pPort,
- OUT struct sockaddr * pAddress
- )
-{
- struct sockaddr_in * pRemoteAddress;
- ESL_TCP4_CONTEXT * pTcp4;
-
- DBG_ENTER ( );
-
- //
- // Return the remote address
- //
- pTcp4 = &pPort->Context.Tcp4;
- pRemoteAddress = (struct sockaddr_in *)pAddress;
- pRemoteAddress->sin_family = AF_INET;
- pRemoteAddress->sin_port = SwapBytes16 ( pTcp4->ConfigData.AccessPoint.RemotePort );
- CopyMem ( &pRemoteAddress->sin_addr,
- &pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[0],
- sizeof ( pRemoteAddress->sin_addr ));
-
- DBG_EXIT ( );
-}
-
-
-/**
- Set the remote address
-
- This routine sets the remote address in the port.
-
- This routine is called by ::EslSocketConnect to specify the
- remote network address.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [in] pSockAddr Network address of the remote system.
-
- @param [in] SockAddrLength Length in bytes of the network address.
-
- @retval EFI_SUCCESS The operation was successful
-
- **/
-EFI_STATUS
-EslTcp4RemoteAddressSet (
- IN ESL_PORT * pPort,
- IN CONST struct sockaddr * pSockAddr,
- IN socklen_t SockAddrLength
- )
-{
- CONST struct sockaddr_in * pRemoteAddress;
- ESL_TCP4_CONTEXT * pTcp4;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Set the remote address
- //
- pTcp4 = &pPort->Context.Tcp4;
- pRemoteAddress = (struct sockaddr_in *)pSockAddr;
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[0] = (UINT8)( pRemoteAddress->sin_addr.s_addr );
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[1] = (UINT8)( pRemoteAddress->sin_addr.s_addr >> 8 );
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[2] = (UINT8)( pRemoteAddress->sin_addr.s_addr >> 16 );
- pTcp4->ConfigData.AccessPoint.RemoteAddress.Addr[3] = (UINT8)( pRemoteAddress->sin_addr.s_addr >> 24 );
- pTcp4->ConfigData.AccessPoint.RemotePort = SwapBytes16 ( pRemoteAddress->sin_port );
- Status = EFI_SUCCESS;
- if ( INADDR_BROADCAST == pRemoteAddress->sin_addr.s_addr ) {
- DEBUG (( DEBUG_CONNECT,
- "ERROR - Invalid remote address\r\n" ));
- Status = EFI_INVALID_PARAMETER;
- pPort->pSocket->errno = EAFNOSUPPORT;
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Process the receive completion
-
- This routine queues the data in FIFO order in either the urgent
- or normal data queues depending upon the type of data received.
- See the \ref ReceiveEngine section.
-
- This routine is called by the TCPv4 driver when some data is
- received.
-
- Buffer the data that was just received.
-
- @param [in] Event The receive completion event
-
- @param [in] pIo Address of an ::ESL_IO_MGMT structure
-
-**/
-VOID
-EslTcp4RxComplete (
- IN EFI_EVENT Event,
- IN ESL_IO_MGMT * pIo
- )
-{
- BOOLEAN bUrgent;
- size_t LengthInBytes;
- ESL_PACKET * pPacket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Get the operation status.
- //
- Status = pIo->Token.Tcp4Rx.CompletionToken.Status;
-
- //
- // +--------------------+ +---------------------------+
- // | ESL_IO_MGMT | | ESL_PACKET |
- // | | | |
- // | +---------------+ +-----------------------+ |
- // | | Token | | EFI_TCP4_RECEIVE_DATA | |
- // | | RxData --> | | |
- // | | | +-----------------------+---+
- // | | Event | | Data Buffer |
- // +----+---------------+ | |
- // | |
- // +---------------------------+
- //
- //
- // Duplicate the buffer address and length for use by the
- // buffer handling code in EslTcp4Receive. These fields are
- // used when a partial read is done of the data from the
- // packet.
- //
- pPacket = pIo->pPacket;
- pPacket->pBuffer = pPacket->Op.Tcp4Rx.RxData.FragmentTable[0].FragmentBuffer;
- LengthInBytes = pPacket->Op.Tcp4Rx.RxData.DataLength;
- pPacket->ValidBytes = LengthInBytes;
-
- //
- // Get the data type so that it may be linked to the
- // correct receive buffer list on the ESL_SOCKET structure
- //
- bUrgent = pPacket->Op.Tcp4Rx.RxData.UrgentFlag;
-
- //
- // Complete this request
- //
- EslSocketRxComplete ( pIo, Status, LengthInBytes, bUrgent );
- DBG_EXIT ( );
-}
-
-
-/**
- Start a receive operation
-
- This routine posts a receive buffer to the TCPv4 driver.
- See the \ref ReceiveEngine section.
-
- This support routine is called by EslSocketRxStart.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
- @param [in] pIo Address of an ::ESL_IO_MGMT structure.
-
- **/
-VOID
-EslTcp4RxStart (
- IN ESL_PORT * pPort,
- IN ESL_IO_MGMT * pIo
- )
-{
- ESL_PACKET * pPacket;
-
- DBG_ENTER ( );
-
- //
- // Initialize the buffer for receive
- //
- pPacket = pIo->pPacket;
- pIo->Token.Tcp4Rx.Packet.RxData = &pPacket->Op.Tcp4Rx.RxData;
- pPacket->Op.Tcp4Rx.RxData.DataLength = sizeof ( pPacket->Op.Tcp4Rx.Buffer );
- pPacket->Op.Tcp4Rx.RxData.FragmentCount = 1;
- pPacket->Op.Tcp4Rx.RxData.FragmentTable[0].FragmentLength = pPacket->Op.Tcp4Rx.RxData.DataLength;
- pPacket->Op.Tcp4Rx.RxData.FragmentTable[0].FragmentBuffer = &pPacket->Op.Tcp4Rx.Buffer[0];
-
- DBG_EXIT ( );
-}
-
-
-/**
- Determine if the socket is configured.
-
- This routine uses the flag ESL_SOCKET::bConfigured to determine
- if the network layer's configuration routine has been called.
-
- This routine is called by EslSocketIsConfigured to verify
- that the socket has been configured.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure.
-
- @retval EFI_SUCCESS - The port is connected
- @retval EFI_NOT_STARTED - The port is not connected
-
- **/
- EFI_STATUS
- EslTcp4SocketIsConfigured (
- IN ESL_SOCKET * pSocket
- )
-{
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Determine the socket configuration status
- //
- Status = pSocket->bConfigured ? EFI_SUCCESS : EFI_NOT_STARTED;
-
- //
- // Return the port connected state.
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Buffer data for transmission over a network connection.
-
- This routine buffers data for the transmit engine in one of two
- queues, one for urgent (out-of-band) data and the other for normal
- data. The urgent data is provided to TCP as soon as it is available,
- allowing the TCP layer to schedule transmission of the urgent data
- between packets of normal data.
-
- This routine is called by ::EslSocketTransmit to buffer
- data for transmission. When the \ref TransmitEngine has resources,
- this routine will start the transmission of the next buffer on
- the network connection.
-
- Transmission errors are returned during the next transmission or
- during the close operation. Only buffering errors are returned
- during the current transmission attempt.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure
-
- @param [in] Flags Message control flags
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer to receive the data.
-
- @param [in] pDataLength Number of received data bytes in the buffer.
-
- @param [in] pAddress Network address of the remote system address
-
- @param [in] AddressLength Length of the remote network address structure
-
- @retval EFI_SUCCESS - Socket data successfully buffered
-
- **/
-EFI_STATUS
-EslTcp4TxBuffer (
- IN ESL_SOCKET * pSocket,
- IN int Flags,
- IN size_t BufferLength,
- IN CONST UINT8 * pBuffer,
- OUT size_t * pDataLength,
- IN const struct sockaddr * pAddress,
- IN socklen_t AddressLength
- )
-{
- BOOLEAN bUrgent;
- BOOLEAN bUrgentQueue;
- ESL_PACKET * pPacket;
- ESL_IO_MGMT ** ppActive;
- ESL_IO_MGMT ** ppFree;
- ESL_PORT * pPort;
- ESL_PACKET ** ppQueueHead;
- ESL_PACKET ** ppQueueTail;
- ESL_PACKET * pPreviousPacket;
- size_t * pTxBytes;
- EFI_TCP4_TRANSMIT_DATA * pTxData;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume failure
- //
- Status = EFI_UNSUPPORTED;
- pSocket->errno = ENOTCONN;
- *pDataLength = 0;
-
- //
- // Verify that the socket is connected
- //
- if ( SOCKET_STATE_CONNECTED == pSocket->State ) {
- //
- // Locate the port
- //
- pPort = pSocket->pPortList;
- if ( NULL != pPort ) {
- //
- // Determine the queue head
- //
- bUrgent = (BOOLEAN)( 0 != ( Flags & MSG_OOB ));
- bUrgentQueue = bUrgent
- && ( !pSocket->bOobInLine )
- && pSocket->pApi->bOobSupported;
- if ( bUrgentQueue ) {
- ppQueueHead = &pSocket->pTxOobPacketListHead;
- ppQueueTail = &pSocket->pTxOobPacketListTail;
- ppActive = &pPort->pTxOobActive;
- ppFree = &pPort->pTxOobFree;
- pTxBytes = &pSocket->TxOobBytes;
- }
- else {
- ppQueueHead = &pSocket->pTxPacketListHead;
- ppQueueTail = &pSocket->pTxPacketListTail;
- ppActive = &pPort->pTxActive;
- ppFree = &pPort->pTxFree;
- pTxBytes = &pSocket->TxBytes;
- }
-
- //
- // Verify that there is enough room to buffer another
- // transmit operation
- //
- if ( pSocket->MaxTxBuf > *pTxBytes ) {
- if ( pPort->bTxFlowControl ) {
- DEBUG (( DEBUG_TX,
- "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\r\n0x%08x: pPort, TX flow control released, Max bytes: %d > %d bufferred bytes\r\n",
- pPort,
- pSocket->MaxTxBuf,
- *pTxBytes ));
- pPort->bTxFlowControl = FALSE;
- }
-
- //
- // Attempt to allocate the packet
- //
- Status = EslSocketPacketAllocate ( &pPacket,
- sizeof ( pPacket->Op.Tcp4Tx )
- - sizeof ( pPacket->Op.Tcp4Tx.Buffer )
- + BufferLength,
- 0,
- DEBUG_TX );
- if ( !EFI_ERROR ( Status )) {
- //
- // Initialize the transmit operation
- //
- pTxData = &pPacket->Op.Tcp4Tx.TxData;
- pTxData->Push = TRUE || bUrgent;
- pTxData->Urgent = bUrgent;
- pTxData->DataLength = (UINT32) BufferLength;
- pTxData->FragmentCount = 1;
- pTxData->FragmentTable[0].FragmentLength = (UINT32) BufferLength;
- pTxData->FragmentTable[0].FragmentBuffer = &pPacket->Op.Tcp4Tx.Buffer[0];
-
- //
- // Copy the data into the buffer
- //
- CopyMem ( &pPacket->Op.Tcp4Tx.Buffer[0],
- pBuffer,
- BufferLength );
-
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Stop transmission after an error
- //
- if ( !EFI_ERROR ( pSocket->TxError )) {
- //
- // Display the request
- //
- DEBUG (( DEBUG_TX,
- "Send %d %s bytes from 0x%08x\r\n",
- BufferLength,
- bUrgent ? L"urgent" : L"normal",
- pBuffer ));
-
- //
- // Queue the data for transmission
- //
- pPacket->pNext = NULL;
- pPreviousPacket = *ppQueueTail;
- if ( NULL == pPreviousPacket ) {
- *ppQueueHead = pPacket;
- }
- else {
- pPreviousPacket->pNext = pPacket;
- }
- *ppQueueTail = pPacket;
- DEBUG (( DEBUG_TX,
- "0x%08x: Packet on %s transmit list\r\n",
- pPacket,
- bUrgentQueue ? L"urgent" : L"normal" ));
-
- //
- // Account for the buffered data
- //
- *pTxBytes += BufferLength;
- *pDataLength = BufferLength;
-
- //
- // Start the transmit engine if it is idle
- //
- if ( NULL != *ppFree ) {
- EslSocketTxStart ( pPort,
- ppQueueHead,
- ppQueueTail,
- ppActive,
- ppFree );
- }
- }
- else {
- //
- // Previous transmit error
- // Stop transmission
- //
- Status = pSocket->TxError;
- pSocket->errno = EIO;
-
- //
- // Free the packet
- //
- EslSocketPacketFree ( pPacket, DEBUG_TX );
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
- }
- else {
- //
- // Packet allocation failed
- //
- pSocket->errno = ENOMEM;
- }
- }
- else {
- if ( !pPort->bTxFlowControl ) {
- DEBUG (( DEBUG_TX,
- "0x%08x: pPort, TX flow control applied, Max bytes %d <= %d bufferred bytes\r\nTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\r\n",
- pPort,
- pSocket->MaxTxBuf,
- *pTxBytes ));
- pPort->bTxFlowControl = TRUE;
- }
- //
- // Not enough buffer space available
- //
- pSocket->errno = EAGAIN;
- Status = EFI_NOT_READY;
- }
- }
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Process the normal data transmit completion
-
- This routine use ::EslSocketTxComplete to perform the transmit
- completion processing for normal data.
-
- This routine is called by the TCPv4 network layer when a
- normal data transmit request completes.
-
- @param [in] Event The normal transmit completion event
-
- @param [in] pIo The ESL_IO_MGMT structure address
-
-**/
-VOID
-EslTcp4TxComplete (
- IN EFI_EVENT Event,
- IN ESL_IO_MGMT * pIo
- )
-{
- UINT32 LengthInBytes;
- ESL_PACKET * pPacket;
- ESL_PORT * pPort;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Locate the active transmit packet
- //
- pPacket = pIo->pPacket;
- pPort = pIo->pPort;
- pSocket = pPort->pSocket;
-
- //
- // Get the transmit length and status
- //
- LengthInBytes = pPacket->Op.Tcp4Tx.TxData.DataLength;
- pSocket->TxBytes -= LengthInBytes;
- Status = pIo->Token.Tcp4Tx.CompletionToken.Status;
-
- //
- // Complete the transmit operation
- //
- EslSocketTxComplete ( pIo,
- LengthInBytes,
- Status,
- "Normal ",
- &pSocket->pTxPacketListHead,
- &pSocket->pTxPacketListTail,
- &pPort->pTxActive,
- &pPort->pTxFree );
- DBG_EXIT ( );
-}
-
-
-/**
- Process the urgent data transmit completion
-
- This routine use ::EslSocketTxComplete to perform the transmit
- completion processing for urgent data.
-
- This routine is called by the TCPv4 network layer when a
- urgent data transmit request completes.
-
- @param [in] Event The urgent transmit completion event
-
- @param [in] pIo The ESL_IO_MGMT structure address
-
-**/
-VOID
-EslTcp4TxOobComplete (
- IN EFI_EVENT Event,
- IN ESL_IO_MGMT * pIo
- )
-{
- UINT32 LengthInBytes;
- ESL_PACKET * pPacket;
- ESL_PORT * pPort;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Locate the active transmit packet
- //
- pPacket = pIo->pPacket;
- pPort = pIo->pPort;
- pSocket = pPort->pSocket;
-
- //
- // Get the transmit length and status
- //
- LengthInBytes = pPacket->Op.Tcp4Tx.TxData.DataLength;
- pSocket->TxOobBytes -= LengthInBytes;
- Status = pIo->Token.Tcp4Tx.CompletionToken.Status;
-
- //
- // Complete the transmit operation
- //
- EslSocketTxComplete ( pIo,
- LengthInBytes,
- Status,
- "Urgent ",
- &pSocket->pTxOobPacketListHead,
- &pSocket->pTxOobPacketListTail,
- &pPort->pTxOobActive,
- &pPort->pTxOobFree );
- DBG_EXIT ( );
-}
-
-
-/**
- Verify the adapter's IP address
-
- This support routine is called by EslSocketBindTest.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
- @param [in] pConfigData Address of the configuration data
-
- @retval EFI_SUCCESS - The IP address is valid
- @retval EFI_NOT_STARTED - The IP address is invalid
-
- **/
-EFI_STATUS
-EslTcp4VerifyLocalIpAddress (
- IN ESL_PORT * pPort,
- IN EFI_TCP4_CONFIG_DATA * pConfigData
- )
-{
- UINTN DataSize;
- EFI_TCP4_ACCESS_POINT * pAccess;
- EFI_IP4_CONFIG2_INTERFACE_INFO * pIfInfo;
- EFI_IP4_CONFIG2_PROTOCOL * pIpConfig2Protocol;
- ESL_SERVICE * pService;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Use break instead of goto
- //
- pIfInfo = NULL;
- for ( ; ; ) {
- //
- // Determine if the IP address is specified
- //
- pAccess = &pConfigData->AccessPoint;
- DEBUG (( DEBUG_BIND,
- "UseDefaultAddress: %s\r\n",
- pAccess->UseDefaultAddress ? L"TRUE" : L"FALSE" ));
- DEBUG (( DEBUG_BIND,
- "Requested IP address: %d.%d.%d.%d\r\n",
- pAccess->StationAddress.Addr [ 0 ],
- pAccess->StationAddress.Addr [ 1 ],
- pAccess->StationAddress.Addr [ 2 ],
- pAccess->StationAddress.Addr [ 3 ]));
- if ( pAccess->UseDefaultAddress
- || (( 0 == pAccess->StationAddress.Addr [ 0 ])
- && ( 0 == pAccess->StationAddress.Addr [ 1 ])
- && ( 0 == pAccess->StationAddress.Addr [ 2 ])
- && ( 0 == pAccess->StationAddress.Addr [ 3 ])))
- {
- Status = EFI_SUCCESS;
- break;
- }
-
- //
- // Open the configuration protocol
- //
- pService = pPort->pService;
- Status = gBS->OpenProtocol (
- pService->Controller,
- &gEfiIp4Config2ProtocolGuid,
- (VOID **)&pIpConfig2Protocol,
- NULL,
- NULL,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - IP Configuration Protocol not available, Status: %r\r\n",
- Status ));
- break;
- }
-
- //
- // Get the interface information size.
- //
- DataSize = 0;
- Status = pIpConfig2Protocol->GetData (
- pIpConfig2Protocol,
- Ip4Config2DataTypeInterfaceInfo,
- &DataSize,
- NULL
- );
- if ( EFI_BUFFER_TOO_SMALL != Status ) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Failed to get the interface information size, Status: %r\r\n",
- Status ));
- break;
- }
-
- //
- // Allocate the interface information buffer
- //
- pIfInfo = AllocatePool ( DataSize );
- if ( NULL == pIfInfo ) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Not enough memory to allocate the interface information buffer!\r\n" ));
- Status = EFI_OUT_OF_RESOURCES;
- break;
- }
-
- //
- // Get the interface info.
- //
- Status = pIpConfig2Protocol->GetData (
- pIpConfig2Protocol,
- Ip4Config2DataTypeInterfaceInfo,
- &DataSize,
- pIfInfo
- );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Failed to return the interface info, Status: %r\r\n",
- Status ));
- break;
- }
-
- //
- // Display the current configuration
- //
- DEBUG (( DEBUG_BIND,
- "Actual adapter IP address: %d.%d.%d.%d\r\n",
- pIfInfo->StationAddress.Addr [ 0 ],
- pIfInfo->StationAddress.Addr [ 1 ],
- pIfInfo->StationAddress.Addr [ 2 ],
- pIfInfo->StationAddress.Addr [ 3 ]));
-
- //
- // Assume the port is not configured
- //
- Status = EFI_SUCCESS;
- if (( pAccess->StationAddress.Addr [ 0 ] == pIfInfo->StationAddress.Addr [ 0 ])
- && ( pAccess->StationAddress.Addr [ 1 ] == pIfInfo->StationAddress.Addr [ 1 ])
- && ( pAccess->StationAddress.Addr [ 2 ] == pIfInfo->StationAddress.Addr [ 2 ])
- && ( pAccess->StationAddress.Addr [ 3 ] == pIfInfo->StationAddress.Addr [ 3 ])) {
- break;
- }
-
- //
- // The IP address did not match
- //
- Status = EFI_NOT_STARTED;
- break;
- }
-
- //
- // Free the buffer if necessary
- //
- if ( NULL != pIfInfo ) {
- FreePool ( pIfInfo );
- }
-
- //
- // Return the IP address status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Interface between the socket layer and the network specific
- code that supports SOCK_STREAM and SOCK_SEQPACKET sockets
- over TCPv4.
-**/
-CONST ESL_PROTOCOL_API cEslTcp4Api = {
- "TCPv4",
- IPPROTO_TCP,
- OFFSET_OF ( ESL_PORT, Context.Tcp4.ConfigData ),
- OFFSET_OF ( ESL_LAYER, pTcp4List ),
- OFFSET_OF ( struct sockaddr_in, sin_zero ),
- sizeof ( struct sockaddr_in ),
- AF_INET,
- sizeof (((ESL_PACKET *)0 )->Op.Tcp4Rx ),
- OFFSET_OF ( ESL_PACKET, Op.Tcp4Rx.Buffer ) - OFFSET_OF ( ESL_PACKET, Op ),
- OFFSET_OF ( ESL_IO_MGMT, Token.Tcp4Rx.Packet.RxData ),
- TRUE,
- EADDRINUSE,
- EslTcp4Accept,
- EslTcp4ConnectPoll,
- EslTcp4ConnectStart,
- EslTcp4SocketIsConfigured,
- EslTcp4LocalAddressGet,
- EslTcp4LocalAddressSet,
- EslTcp4Listen,
- NULL, // OptionGet
- NULL, // OptionSet
- EslTcp4PacketFree,
- EslTcp4PortAllocate,
- EslTcp4PortClose,
- EslTcp4PortCloseOp,
- FALSE,
- EslTcp4Receive,
- EslTcp4RemoteAddressGet,
- EslTcp4RemoteAddressSet,
- EslTcp4RxComplete,
- EslTcp4RxStart,
- EslTcp4TxBuffer,
- EslTcp4TxComplete,
- EslTcp4TxOobComplete,
- (PFN_API_VERIFY_LOCAL_IP_ADDRESS)EslTcp4VerifyLocalIpAddress
-};
diff --git a/StdLib/EfiSocketLib/Tcp6.c b/StdLib/EfiSocketLib/Tcp6.c
deleted file mode 100644
index 0f6d2d6ac9..0000000000
--- a/StdLib/EfiSocketLib/Tcp6.c
+++ /dev/null
@@ -1,2596 +0,0 @@
-/** @file
- Implement the TCP6 driver support for the socket layer.
-
- Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-
- \section ConnectionManagement Connection Management
-
- The ::EslTcp6Listen routine initially places the SOCK_STREAM or
- SOCK_SEQPACKET socket into a listen state. When a remote machine
- makes a connection to the socket, the TCPv6 network layer calls
- ::EslTcp6ListenComplete to complete the connection processing.
- EslTcp6ListenComplete manages the connections by placing them in
- FIFO order in a queue to be serviced by the application. When the
- number of connections exceeds the backlog (ESL_SOCKET::MaxFifoDepth),
- the new connection is closed. Eventually, the application indirectly
- calls ::EslTcp6Accept to remove the next connection from the queue
- and get the associated socket.
-
-**/
-
-#include "Socket.h"
-
-
-/**
- Attempt to connect to a remote TCP port
-
- This routine starts the connection processing for a SOCK_STREAM
- or SOCK_SEQPAKCET socket using the TCPv6 network layer. It
- configures the local TCPv6 connection point and then attempts to
- connect to a remote system. Upon completion, the
- ::EslTcp6ConnectComplete routine gets called with the connection
- status.
-
- This routine is called by ::EslSocketConnect to initiate the TCPv6
- network specific connect operations. The connection processing is
- initiated by this routine and finished by ::EslTcp6ConnectComplete.
- This pair of routines walks through the list of local TCPv6
- connection points until a connection to the remote system is
- made.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure.
-
- @retval EFI_SUCCESS The connection was successfully established.
- @retval EFI_NOT_READY The connection is in progress, call this routine again.
- @retval Others The connection attempt failed.
-
- **/
-EFI_STATUS
-EslTcp6ConnectStart (
- IN ESL_SOCKET * pSocket
- );
-
-
-/**
- Process the connection attempt
-
- A system has initiated a connection attempt with a socket in the
- listen state. Attempt to complete the connection.
-
- The TCPv6 layer calls this routine when a connection is made to
- the socket in the listen state. See the
- \ref ConnectionManagement section.
-
- @param [in] Event The listen completion event
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
-**/
-VOID
-EslTcp6ListenComplete (
- IN EFI_EVENT Event,
- IN ESL_PORT * pPort
- );
-
-
-/**
- Accept a network connection.
-
- This routine waits for a network connection to the socket and
- returns the remote network address to the caller if requested.
-
- This routine is called by ::EslSocketAccept to handle the TCPv6 protocol
- specific accept operations for SOCK_STREAM and SOCK_SEQPACKET sockets.
- See the \ref ConnectionManagement section.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure.
-
- @param [in] pSockAddr Address of a buffer to receive the remote
- network address.
-
- @param [in, out] pSockAddrLength Length in bytes of the address buffer.
- On output specifies the length of the
- remote network address.
-
- @retval EFI_SUCCESS Remote address is available
- @retval Others Remote address not available
-
- **/
-EFI_STATUS
-EslTcp6Accept (
- IN ESL_SOCKET * pSocket,
- IN struct sockaddr * pSockAddr,
- IN OUT socklen_t * pSockAddrLength
- )
-{
- ESL_PORT * pPort;
- struct sockaddr_in6 * pRemoteAddress;
- ESL_TCP6_CONTEXT * pTcp6;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Validate the socket length
- //
- pRemoteAddress = (struct sockaddr_in6 *) pSockAddr;
- if (( NULL == pSockAddrLength )
- || ( sizeof ( *pRemoteAddress ) > *pSockAddrLength )) {
- //
- // Invalid socket address
- //
- Status = EFI_INVALID_PARAMETER;
- pSocket->errno = EINVAL;
- DEBUG (( DEBUG_ACCEPT,
- "ERROR - Invalid address length\r\n" ));
- }
- else {
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Locate the address context
- //
- pPort = pSocket->pPortList;
- pTcp6 = &pPort->Context.Tcp6;
-
- //
- // Fill-in the remote address structure
- //
- ZeroMem ( pRemoteAddress, sizeof ( *pRemoteAddress ));
- pRemoteAddress->sin6_len = sizeof ( *pRemoteAddress );
- pRemoteAddress->sin6_family = AF_INET6;
- pRemoteAddress->sin6_port = SwapBytes16 ( pTcp6->ConfigData.AccessPoint.RemotePort );
- CopyMem ( &pRemoteAddress->sin6_addr.__u6_addr.__u6_addr8 [ 0 ],
- &pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[0],
- sizeof ( pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr ));
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Process the remote connection completion event.
-
- This routine handles the completion of a connection attempt. It
- releases the port (TCPv6 adapter connection) in the case of an
- error and start a connection attempt on the next port. If the
- connection attempt was successful then this routine releases all
- of the other ports.
-
- This routine is called by the TCPv6 layer when a connect request
- completes. It sets the ESL_SOCKET::bConnected flag to notify the
- ::EslTcp6ConnectComplete routine that the connection is available.
- The flag is set when the connection is established or no more ports
- exist in the list. The connection status is passed via
- ESL_SOCKET::ConnectStatus.
-
- @param [in] Event The connect completion event
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
-**/
-VOID
-EslTcp6ConnectComplete (
- IN EFI_EVENT Event,
- IN ESL_PORT * pPort
- )
-{
- BOOLEAN bRemoveFirstPort;
- BOOLEAN bRemovePorts;
- ESL_PORT * pNextPort;
- ESL_SOCKET * pSocket;
- ESL_TCP6_CONTEXT * pTcp6;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Locate the TCP context
- //
- pSocket = pPort->pSocket;
- pTcp6 = &pPort->Context.Tcp6;
-
- //
- // Get the connection status
- //
- bRemoveFirstPort = FALSE;
- bRemovePorts = FALSE;
- Status = pTcp6->ConnectToken.CompletionToken.Status;
- pSocket->ConnectStatus = Status;
- if ( !EFI_ERROR ( Status )) {
- //
- // The connection was successful
- //
- DEBUG (( DEBUG_CONNECT,
- "0x%08x: Port connected to [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d\r\n",
- pPort,
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[0],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[1],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[2],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[3],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[4],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[5],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[6],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[7],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[8],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[9],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[10],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[11],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[12],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[13],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[14],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[15],
- pTcp6->ConfigData.AccessPoint.RemotePort ));
-
- //
- // Start the receive operations
- //
- pSocket->bConfigured = TRUE;
- pSocket->State = SOCKET_STATE_CONNECTED;
- EslSocketRxStart ( pPort );
-
- //
- // Remove the rest of the ports
- //
- bRemovePorts = TRUE;
- }
- else {
- //
- // The connection failed
- //
- if ( pPort->bConfigured ) {
- DEBUG (( DEBUG_CONNECT,
- "0x%08x: Port connection to [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d failed, Status: %r\r\n",
- pPort,
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[0],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[1],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[2],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[3],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[4],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[5],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[6],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[7],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[8],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[9],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[10],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[11],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[12],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[13],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[14],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[15],
- pTcp6->ConfigData.AccessPoint.RemotePort,
- Status ));
- }
-
- //
- // Close the current port
- //
- Status = EslSocketPortClose ( pPort );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_CONNECT,
- "0x%08x: Port closed\r\n",
- pPort ));
- }
- else {
- DEBUG (( DEBUG_CONNECT,
- "ERROR - Failed to close port 0x%08x, Status: %r\r\n",
- pPort,
- Status ));
- }
-
- //
- // Try to connect using the next port
- //
- Status = EslTcp6ConnectStart ( pSocket );
- if ( EFI_NOT_READY != Status ) {
- bRemoveFirstPort = TRUE;
- }
- }
-
- //
- // Remove the ports if necessary
- //
- if ( bRemoveFirstPort || bRemovePorts ) {
- //
- // Remove the first port if necessary
- //
- pPort = pSocket->pPortList;
- if (( !bRemoveFirstPort ) && ( NULL != pPort )) {
- pPort = pPort->pLinkSocket;
- }
-
- //
- // Remove the rest of the list
- //
- while ( NULL != pPort ) {
- pNextPort = pPort->pLinkSocket;
- EslSocketPortClose ( pPort );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_CONNECT,
- "0x%08x: Port closed\r\n",
- pPort ));
- }
- else {
- DEBUG (( DEBUG_CONNECT,
- "ERROR - Failed to close port 0x%08x, Status: %r\r\n",
- pPort,
- Status ));
- }
- pPort = pNextPort;
- }
-
- //
- // Notify the poll routine
- //
- pSocket->bConnected = TRUE;
- }
-
- DBG_EXIT ( );
-}
-
-
-/**
- Poll for completion of the connection attempt.
-
- This routine polls the ESL_SOCKET::bConnected flag to determine
- when the connection attempt is complete.
-
- This routine is called from ::EslSocketConnect to determine when
- the connection is complete. The ESL_SOCKET::bConnected flag is
- set by ::EslTcp6ConnectComplete when the TCPv6 layer establishes
- a connection or runs out of local network adapters. This routine
- gets the connection status from ESL_SOCKET::ConnectStatus.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure.
-
- @retval EFI_SUCCESS The connection was successfully established.
- @retval EFI_NOT_READY The connection is in progress, call this routine again.
- @retval Others The connection attempt failed.
-
- **/
-EFI_STATUS
-EslTcp6ConnectPoll (
- IN ESL_SOCKET * pSocket
- )
-{
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Determine if the connection is complete
- //
- if ( !pSocket->bConnected ) {
- //
- // Not connected
- //
- pSocket->errno = EAGAIN;
- Status = EFI_NOT_READY;
- }
- else {
- //
- // The connection processing is complete
- //
- pSocket->bConnected = FALSE;
-
- //
- // Translate the connection status
- //
- Status = pSocket->ConnectStatus;
- switch ( Status ) {
- default:
- case EFI_DEVICE_ERROR:
- pSocket->errno = EIO;
- break;
-
- case EFI_ABORTED:
- pSocket->errno = ECONNABORTED;
- break;
-
- case EFI_ACCESS_DENIED:
- pSocket->errno = EACCES;
- break;
-
- case EFI_CONNECTION_RESET:
- pSocket->errno = ECONNRESET;
- break;
-
- case EFI_INVALID_PARAMETER:
- pSocket->errno = EADDRNOTAVAIL;
- break;
-
- case EFI_HOST_UNREACHABLE:
- case EFI_NO_RESPONSE:
- pSocket->errno = EHOSTUNREACH;
- break;
-
- case EFI_NO_MAPPING:
- pSocket->errno = EAFNOSUPPORT;
- break;
-
- case EFI_NO_MEDIA:
- case EFI_NETWORK_UNREACHABLE:
- pSocket->errno = ENETDOWN;
- break;
-
- case EFI_OUT_OF_RESOURCES:
- pSocket->errno = ENOBUFS;
- break;
-
- case EFI_PORT_UNREACHABLE:
- case EFI_PROTOCOL_UNREACHABLE:
- case EFI_CONNECTION_REFUSED:
- pSocket->errno = ECONNREFUSED;
- break;
-
- case EFI_SUCCESS:
- pSocket->errno = 0;
- break;
-
- case EFI_TIMEOUT:
- pSocket->errno = ETIMEDOUT;
- break;
-
- case EFI_UNSUPPORTED:
- pSocket->errno = EOPNOTSUPP;
- break;
- }
-
- //
- // Display the translation
- //
- DEBUG (( DEBUG_CONNECT,
- "ERROR - errno: %d, Status: %r\r\n",
- pSocket->errno,
- Status ));
- }
-
- //
- // Return the initialization status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Attempt to connect to a remote TCP port
-
- This routine starts the connection processing for a SOCK_STREAM
- or SOCK_SEQPAKCET socket using the TCPv6 network layer. It
- configures the local TCPv6 connection point and then attempts to
- connect to a remote system. Upon completion, the
- ::EslTcp6ConnectComplete routine gets called with the connection
- status.
-
- This routine is called by ::EslSocketConnect to initiate the TCPv6
- network specific connect operations. The connection processing is
- initiated by this routine and finished by ::EslTcp6ConnectComplete.
- This pair of routines walks through the list of local TCPv6
- connection points until a connection to the remote system is
- made.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure.
-
- @retval EFI_SUCCESS The connection was successfully established.
- @retval EFI_NOT_READY The connection is in progress, call this routine again.
- @retval Others The connection attempt failed.
-
- **/
-EFI_STATUS
-EslTcp6ConnectStart (
- IN ESL_SOCKET * pSocket
- )
-{
- ESL_PORT * pPort;
- ESL_TCP6_CONTEXT * pTcp6;
- EFI_TCP6_PROTOCOL * pTcp6Protocol;
- EFI_SIMPLE_NETWORK_MODE SnpModeData;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Determine if any more local adapters are available
- //
- pPort = pSocket->pPortList;
- if ( NULL != pPort ) {
- //
- // Configure the port
- //
- pTcp6 = &pPort->Context.Tcp6;
- pTcp6->ConfigData.AccessPoint.ActiveFlag = TRUE;
- pTcp6->ConfigData.TrafficClass = 0;
- pTcp6->ConfigData.HopLimit = 255;
- pTcp6Protocol = pPort->pProtocol.TCPv6;
- Status = pTcp6Protocol->Configure ( pTcp6Protocol,
- &pTcp6->ConfigData );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_CONNECT,
- "ERROR - Failed to configure the Tcp6 port, Status: %r\r\n",
- Status ));
- }
- else {
- DEBUG (( DEBUG_CONNECT,
- "0x%08x: Port configured\r\n",
- pPort ));
- pPort->bConfigured = TRUE;
-
- //
- // Verify the port connection
- //
- Status = pTcp6Protocol->GetModeData ( pTcp6Protocol,
- NULL,
- NULL,
- NULL,
- NULL,
- &SnpModeData );
- if ( !EFI_ERROR ( Status )) {
- if ( SnpModeData.MediaPresentSupported
- && ( !SnpModeData.MediaPresent )) {
- //
- // Port is not connected to the network
- //
- Status = EFI_NO_MEDIA;
- }
- else {
- //
- // Attempt the connection to the remote system
- //
- Status = pTcp6Protocol->Connect ( pTcp6Protocol,
- &pTcp6->ConnectToken );
- }
- }
- if ( EFI_ERROR ( Status )) {
- //
- // Connection error
- //
- DEBUG (( DEBUG_CONNECT,
- "ERROR - Port 0x%08x not connected, Status: %r\r\n",
- pPort,
- Status ));
- }
- }
- if ( !EFI_ERROR ( Status )) {
- //
- // Connection in progress
- //
- pSocket->errno = EINPROGRESS;
- DEBUG (( DEBUG_CONNECT,
- "0x%08x: Port attempting connection to [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d\r\n",
- pPort,
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[0],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[1],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[2],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[3],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[4],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[5],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[6],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[7],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[8],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[9],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[10],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[11],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[12],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[13],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[14],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[15],
- pTcp6->ConfigData.AccessPoint.RemotePort ));
- }
- else {
- //
- // Error return path is through EslTcp6ConnectComplete to
- // enable retry on other ports
- //
- // Status to errno translation gets done in EslTcp4ConnectPoll
- //
- pTcp6->ConnectToken.CompletionToken.Status = Status;
-
- //
- // Continue with the next port
- //
- gBS->CheckEvent ( pTcp6->ConnectToken.CompletionToken.Event );
- gBS->SignalEvent ( pTcp6->ConnectToken.CompletionToken.Event );
- }
- Status = EFI_NOT_READY;
- }
- else {
- //
- // No more local adapters available
- //
- pSocket->errno = ENETUNREACH;
- Status = EFI_NO_RESPONSE;
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Establish the known port to listen for network connections.
-
- This routine places the port into a state that enables connection
- attempts.
-
- This routine is called by ::EslSocketListen to handle the network
- specifics of the listen operation for SOCK_STREAM and SOCK_SEQPACKET
- sockets. See the \ref ConnectionManagement section.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure.
-
- @retval EFI_SUCCESS - Socket successfully created
- @retval Other - Failed to enable the socket for listen
-
-**/
-EFI_STATUS
-EslTcp6Listen (
- IN ESL_SOCKET * pSocket
- )
-{
- ESL_PORT * pNextPort;
- ESL_PORT * pPort;
- ESL_TCP6_CONTEXT * pTcp6;
- EFI_TCP6_PROTOCOL * pTcp6Protocol;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Verify the socket layer synchronization
- //
- VERIFY_TPL ( TPL_SOCKETS );
-
- //
- // Use for/break instead of goto
- //
- for ( ; ; ) {
- //
- // Assume no ports are available
- //
- pSocket->errno = EOPNOTSUPP;
- Status = EFI_NOT_READY;
-
- //
- // Walk the list of ports
- //
- pPort = pSocket->pPortList;
- while ( NULL != pPort ) {
- //
- // Assume success
- //
- pSocket->errno = 0;
-
- //
- // Use for/break insteak of goto
- //
- for ( ; ; ) {
- //
- // Create the listen completion event
- //
- pTcp6 = &pPort->Context.Tcp6;
- Status = gBS->CreateEvent ( EVT_NOTIFY_SIGNAL,
- TPL_SOCKETS,
- (EFI_EVENT_NOTIFY)EslTcp6ListenComplete,
- pPort,
- &pTcp6->ListenToken.CompletionToken.Event );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR | DEBUG_LISTEN,
- "ERROR - Failed to create the listen completion event, Status: %r\r\n",
- Status ));
- pSocket->errno = ENOMEM;
- break;
- }
- DEBUG (( DEBUG_POOL,
- "0x%08x: Created listen completion event\r\n",
- pTcp6->ListenToken.CompletionToken.Event ));
-
- //
- // Configure the port
- //
- pTcp6Protocol = pPort->pProtocol.TCPv6;
- Status = pTcp6Protocol->Configure ( pTcp6Protocol,
- &pTcp6->ConfigData );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_LISTEN,
- "ERROR - Failed to configure the Tcp6 port, Status: %r\r\n",
- Status ));
- switch ( Status ) {
- case EFI_ACCESS_DENIED:
- pSocket->errno = EACCES;
- break;
-
- default:
- case EFI_DEVICE_ERROR:
- pSocket->errno = EIO;
- break;
-
- case EFI_INVALID_PARAMETER:
- pSocket->errno = EADDRNOTAVAIL;
- break;
-
- case EFI_NO_MAPPING:
- pSocket->errno = EAFNOSUPPORT;
- break;
-
- case EFI_OUT_OF_RESOURCES:
- pSocket->errno = ENOBUFS;
- break;
-
- case EFI_UNSUPPORTED:
- pSocket->errno = EOPNOTSUPP;
- break;
- }
- break;
- }
- DEBUG (( DEBUG_LISTEN,
- "0x%08x: Port configured\r\n",
- pPort ));
- pPort->bConfigured = TRUE;
-
- //
- // Start the listen operation on the port
- //
- Status = pTcp6Protocol->Accept ( pTcp6Protocol,
- &pTcp6->ListenToken );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_LISTEN,
- "ERROR - Failed Tcp6 accept, Status: %r\r\n",
- Status ));
- switch ( Status ) {
- case EFI_ACCESS_DENIED:
- pSocket->errno = EACCES;
- break;
-
- default:
- case EFI_DEVICE_ERROR:
- pSocket->errno = EIO;
- break;
-
- case EFI_INVALID_PARAMETER:
- pSocket->errno = EADDRNOTAVAIL;
- break;
-
- case EFI_NOT_STARTED:
- pSocket->errno = ENETDOWN;
- break;
-
- case EFI_OUT_OF_RESOURCES:
- pSocket->errno = ENOBUFS;
- break;
- }
- break;
- }
- DEBUG (( DEBUG_LISTEN,
- "0x%08x: Listen pending on Port\r\n",
- pPort ));
-
- //
- // Listen is pending on this port
- //
- break;
- }
-
- //
- // Get the next port
- //
- pNextPort = pPort->pLinkSocket;
-
- //
- // Close the port upon error
- //
- if ( EFI_ERROR ( Status )) {
- EslSocketPortCloseStart ( pPort, TRUE, DEBUG_LISTEN );
- }
-
- //
- // Set the next port
- //
- pPort = pNextPort;
- }
-
- //
- // Determine if any ports are in the listen state
- //
- if ( NULL == pSocket->pPortList ) {
- //
- // No ports in the listen state
- //
- pSocket->MaxFifoDepth = 0;
-
- //
- // Return the last error detected
- //
- break;
- }
-
- //
- // Mark the socket as configured
- //
- pSocket->bConfigured = TRUE;
- Status = EFI_SUCCESS;
- pSocket->errno = 0;
-
- //
- // All done
- //
- DEBUG (( DEBUG_LISTEN,
- "0x%08x: pSocket - Listen pending on socket\r\n",
- pSocket ));
- break;
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Process the connection attempt
-
- A system has initiated a connection attempt with a socket in the
- listen state. Attempt to complete the connection.
-
- The TCPv6 layer calls this routine when a connection is made to
- the socket in the listen state. See the
- \ref ConnectionManagement section.
-
- @param [in] Event The listen completion event
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
-**/
-VOID
-EslTcp6ListenComplete (
- IN EFI_EVENT Event,
- IN ESL_PORT * pPort
- )
-{
- EFI_HANDLE ChildHandle;
- struct sockaddr_in6 LocalAddress;
- EFI_TCP6_CONFIG_DATA * pConfigData;
- ESL_PORT * pNewPort;
- ESL_SOCKET * pNewSocket;
- ESL_SOCKET * pSocket;
- ESL_TCP6_CONTEXT * pTcp6;
- EFI_TCP6_PROTOCOL * pTcp6Protocol;
- EFI_STATUS Status;
- EFI_HANDLE TcpPortHandle;
- EFI_STATUS TempStatus;
-
- DBG_ENTER ( );
- VERIFY_AT_TPL ( TPL_SOCKETS );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Determine if this connection fits into the connection FIFO
- //
- pSocket = pPort->pSocket;
- TcpPortHandle = pPort->Context.Tcp6.ListenToken.NewChildHandle;
- if (( SOCKET_STATE_LISTENING == pSocket->State )
- && ( pSocket->MaxFifoDepth > pSocket->FifoDepth )) {
- //
- // Allocate a socket for this connection
- //
- ChildHandle = NULL;
- Status = EslSocketAllocate ( &ChildHandle,
- DEBUG_CONNECTION,
- &pNewSocket );
- if ( !EFI_ERROR ( Status )) {
- //
- // Clone the socket parameters
- //
- pNewSocket->pApi = pSocket->pApi;
- pNewSocket->Domain = pSocket->Domain;
- pNewSocket->Protocol = pSocket->Protocol;
- pNewSocket->Type = pSocket->Type;
-
- //
- // Build the local address
- //
- pTcp6 = &pPort->Context.Tcp6;
- LocalAddress.sin6_len = (uint8_t)pNewSocket->pApi->MinimumAddressLength;
- LocalAddress.sin6_family = AF_INET6;
- LocalAddress.sin6_port = 0;
- CopyMem ( &LocalAddress.sin6_addr.__u6_addr.__u6_addr8 [ 0 ],
- &pTcp6->ConfigData.AccessPoint.StationAddress.Addr [ 0 ],
- sizeof ( pTcp6->ConfigData.AccessPoint.StationAddress.Addr ));
-
- //
- // Allocate a port for this connection
- // Note in this instance Configure may not be called with NULL!
- //
- Status = EslSocketPortAllocate ( pNewSocket,
- pPort->pService,
- TcpPortHandle,
- (struct sockaddr *)&LocalAddress,
- FALSE,
- DEBUG_CONNECTION,
- &pNewPort );
- if ( !EFI_ERROR ( Status )) {
- //
- // Restart the listen operation on the port
- //
- pTcp6Protocol = pPort->pProtocol.TCPv6;
- Status = pTcp6Protocol->Accept ( pTcp6Protocol,
- &pTcp6->ListenToken );
-
- //
- // Close the TCP port using SocketClose
- //
- TcpPortHandle = NULL;
- pTcp6 = &pNewPort->Context.Tcp6;
-
- //
- // Check for an accept call error
- //
- if ( !EFI_ERROR ( Status )) {
- //
- // Get the port configuration
- //
- pNewPort->bConfigured = TRUE;
- pConfigData = &pTcp6->ConfigData;
- pConfigData->ControlOption = &pTcp6->Option;
- pTcp6Protocol = pNewPort->pProtocol.TCPv6;
- Status = pTcp6Protocol->GetModeData ( pTcp6Protocol,
- NULL,
- pConfigData,
- NULL,
- NULL,
- NULL );
- if ( !EFI_ERROR ( Status )) {
- //
- // Add the new socket to the connection FIFO
- //
- if ( NULL == pSocket->pFifoTail ) {
- //
- // First connection
- //
- pSocket->pFifoHead = pNewSocket;
- }
- else {
- //
- // Add to end of list.
- //
- pSocket->pFifoTail->pNextConnection = pNewSocket;
- }
- pSocket->pFifoTail = pNewSocket;
- pSocket->FifoDepth += 1;
-
- //
- // Update the socket state
- //
- pNewSocket->State = SOCKET_STATE_IN_FIFO;
-
- //
- // Log the connection
- //
- DEBUG (( DEBUG_CONNECTION | DEBUG_INFO,
- "0x%08x: Socket on port [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d connected to [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d\r\n",
- pNewSocket,
- pConfigData->AccessPoint.StationAddress.Addr[0],
- pConfigData->AccessPoint.StationAddress.Addr[1],
- pConfigData->AccessPoint.StationAddress.Addr[2],
- pConfigData->AccessPoint.StationAddress.Addr[3],
- pConfigData->AccessPoint.StationAddress.Addr[4],
- pConfigData->AccessPoint.StationAddress.Addr[5],
- pConfigData->AccessPoint.StationAddress.Addr[6],
- pConfigData->AccessPoint.StationAddress.Addr[7],
- pConfigData->AccessPoint.StationAddress.Addr[8],
- pConfigData->AccessPoint.StationAddress.Addr[9],
- pConfigData->AccessPoint.StationAddress.Addr[10],
- pConfigData->AccessPoint.StationAddress.Addr[11],
- pConfigData->AccessPoint.StationAddress.Addr[12],
- pConfigData->AccessPoint.StationAddress.Addr[13],
- pConfigData->AccessPoint.StationAddress.Addr[14],
- pConfigData->AccessPoint.StationAddress.Addr[15],
- pConfigData->AccessPoint.StationPort,
- pConfigData->AccessPoint.RemoteAddress.Addr[0],
- pConfigData->AccessPoint.RemoteAddress.Addr[1],
- pConfigData->AccessPoint.RemoteAddress.Addr[2],
- pConfigData->AccessPoint.RemoteAddress.Addr[3],
- pConfigData->AccessPoint.RemoteAddress.Addr[4],
- pConfigData->AccessPoint.RemoteAddress.Addr[5],
- pConfigData->AccessPoint.RemoteAddress.Addr[6],
- pConfigData->AccessPoint.RemoteAddress.Addr[7],
- pConfigData->AccessPoint.RemoteAddress.Addr[8],
- pConfigData->AccessPoint.RemoteAddress.Addr[9],
- pConfigData->AccessPoint.RemoteAddress.Addr[10],
- pConfigData->AccessPoint.RemoteAddress.Addr[11],
- pConfigData->AccessPoint.RemoteAddress.Addr[12],
- pConfigData->AccessPoint.RemoteAddress.Addr[13],
- pConfigData->AccessPoint.RemoteAddress.Addr[14],
- pConfigData->AccessPoint.RemoteAddress.Addr[15],
- pConfigData->AccessPoint.RemotePort ));
- DEBUG (( DEBUG_CONNECTION | DEBUG_INFO,
- "0x%08x: Listen socket adding socket 0x%08x to FIFO, depth: %d\r\n",
- pSocket,
- pNewSocket,
- pSocket->FifoDepth ));
-
- //
- // Start the receive operation
- //
- EslSocketRxStart ( pNewPort );
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_CONNECTION | DEBUG_INFO,
- "ERROR - GetModeData failed on port 0x%08x, Status: %r\r\n",
- pNewPort,
- Status ));
- }
- }
- else {
- //
- // The listen failed on this port
- //
- DEBUG (( DEBUG_LISTEN | DEBUG_INFO,
- "ERROR - Listen failed on port 0x%08x, Status: %r\r\n",
- pPort,
- Status ));
-
- //
- // Close the listening port
- //
- EslSocketPortCloseStart ( pPort, TRUE, DEBUG_LISTEN );
- }
- }
-
- //
- // Done with the socket if necessary
- //
- if ( EFI_ERROR ( Status )) {
- TempStatus = EslSocketCloseStart ( &pNewSocket->SocketProtocol,
- TRUE,
- &pSocket->errno );
- ASSERT ( EFI_SUCCESS == TempStatus );
- }
- }
- }
- else {
- DEBUG (( DEBUG_CONNECTION,
- "0x%08x: Socket FIFO full, connection refused\r\n",
- pSocket ));
-
- //
- // The FIFO is full or the socket is in the wrong state
- //
- Status = EFI_BUFFER_TOO_SMALL;
- }
-
- //
- // Close the connection if necessary
- //
- if (( EFI_ERROR ( Status ))
- && ( NULL == TcpPortHandle )) {
- //
- // TODO: Finish this code path
- // The new connection does not fit into the connection FIFO
- //
- // Process:
- // Call close
- // Release the resources
-
- }
-
- DBG_EXIT ( );
-}
-
-
-/**
- Get the local socket address.
-
- This routine returns the IPv6 address and TCP port number associated
- with the local socket.
-
- This routine is called by ::EslSocketGetLocalAddress to determine the
- network address for the SOCK_STREAM or SOCK_SEQPACKET socket.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [out] pSockAddr Network address to receive the local system address
-
-**/
-VOID
-EslTcp6LocalAddressGet (
- IN ESL_PORT * pPort,
- OUT struct sockaddr * pSockAddr
- )
-{
- struct sockaddr_in6 * pLocalAddress;
- ESL_TCP6_CONTEXT * pTcp6;
-
- DBG_ENTER ( );
-
- //
- // Return the local address
- //
- pTcp6 = &pPort->Context.Tcp6;
- pLocalAddress = (struct sockaddr_in6 *)pSockAddr;
- pLocalAddress->sin6_family = AF_INET6;
- pLocalAddress->sin6_port = SwapBytes16 ( pTcp6->ConfigData.AccessPoint.StationPort );
- CopyMem ( &pLocalAddress->sin6_addr,
- &pTcp6->ConfigData.AccessPoint.StationAddress.Addr[0],
- sizeof ( pLocalAddress->sin6_addr ));
-
- DBG_EXIT ( );
-}
-
-
-/**
- Set the local port address.
-
- This routine sets the local port address.
-
- This support routine is called by ::EslSocketPortAllocate.
-
- @param [in] pPort Address of an ESL_PORT structure
- @param [in] pSockAddr Address of a sockaddr structure that contains the
- connection point on the local machine. An IPv6 address
- of INADDR_ANY specifies that the connection is made to
- all of the network stacks on the platform. Specifying a
- specific IPv6 address restricts the connection to the
- network stack supporting that address. Specifying zero
- for the port causes the network layer to assign a port
- number from the dynamic range. Specifying a specific
- port number causes the network layer to use that port.
-
- @param [in] bBindTest TRUE = run bind testing
-
- @retval EFI_SUCCESS The operation was successful
-
- **/
-EFI_STATUS
-EslTcp6LocalAddressSet (
- IN ESL_PORT * pPort,
- IN CONST struct sockaddr * pSockAddr,
- IN BOOLEAN bBindTest
- )
-{
- EFI_TCP6_ACCESS_POINT * pAccessPoint;
- CONST struct sockaddr_in6 * pIpAddress;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Validate the address
- //
- pIpAddress = (struct sockaddr_in6 *)pSockAddr;
-//
-// TODO: Fix the following check
-//
-/*
- if ( INADDR_BROADCAST == pIpAddress->sin6_addr.s_addr ) {
- //
- // The local address must not be the broadcast address
- //
- Status = EFI_INVALID_PARAMETER;
- pPort->pSocket->errno = EADDRNOTAVAIL;
- }
- else {
-*/
-{
- //
- // Set the local address
- //
- pAccessPoint = &pPort->Context.Tcp6.ConfigData.AccessPoint;
- CopyMem ( &pAccessPoint->StationAddress.Addr[0],
- &pIpAddress->sin6_addr.__u6_addr.__u6_addr8 [ 0 ],
- sizeof ( pIpAddress->sin6_addr.__u6_addr.__u6_addr8 [ 0 ]));
-
- //
- // Validate the IP address
- //
- pAccessPoint->StationPort = 0;
- Status = bBindTest ? EslSocketBindTest ( pPort, EADDRNOTAVAIL )
- : EFI_SUCCESS;
- if ( !EFI_ERROR ( Status )) {
- //
- // Set the port number
- //
- pAccessPoint->StationPort = SwapBytes16 ( pIpAddress->sin6_port );
- pPort->pSocket->bAddressSet = TRUE;
-
- //
- // Display the local address
- //
- DEBUG (( DEBUG_BIND,
- "0x%08x: Port, Local Tcp6 Address: [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d\r\n",
- pPort,
- pAccessPoint->StationAddress.Addr[0],
- pAccessPoint->StationAddress.Addr[1],
- pAccessPoint->StationAddress.Addr[2],
- pAccessPoint->StationAddress.Addr[3],
- pAccessPoint->StationAddress.Addr[4],
- pAccessPoint->StationAddress.Addr[5],
- pAccessPoint->StationAddress.Addr[6],
- pAccessPoint->StationAddress.Addr[7],
- pAccessPoint->StationAddress.Addr[8],
- pAccessPoint->StationAddress.Addr[9],
- pAccessPoint->StationAddress.Addr[10],
- pAccessPoint->StationAddress.Addr[11],
- pAccessPoint->StationAddress.Addr[12],
- pAccessPoint->StationAddress.Addr[13],
- pAccessPoint->StationAddress.Addr[14],
- pAccessPoint->StationAddress.Addr[15],
- pAccessPoint->StationPort ));
- }
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Free a receive packet
-
- This routine performs the network specific operations necessary
- to free a receive packet.
-
- This routine is called by ::EslSocketPortCloseTxDone to free a
- receive packet.
-
- @param [in] pPacket Address of an ::ESL_PACKET structure.
- @param [in, out] pRxBytes Address of the count of RX bytes
-
-**/
-VOID
-EslTcp6PacketFree (
- IN ESL_PACKET * pPacket,
- IN OUT size_t * pRxBytes
- )
-{
- DBG_ENTER ( );
-
- //
- // Account for the receive bytes
- //
- *pRxBytes -= pPacket->Op.Tcp6Rx.RxData.DataLength;
- DBG_EXIT ( );
-}
-
-
-/**
- Initialize the network specific portions of an ::ESL_PORT structure.
-
- This routine initializes the network specific portions of an
- ::ESL_PORT structure for use by the socket.
-
- This support routine is called by ::EslSocketPortAllocate
- to connect the socket with the underlying network adapter
- running the TCPv6 protocol.
-
- @param [in] pPort Address of an ESL_PORT structure
- @param [in] DebugFlags Flags for debug messages
-
- @retval EFI_SUCCESS - Socket successfully created
-
- **/
-EFI_STATUS
-EslTcp6PortAllocate (
- IN ESL_PORT * pPort,
- IN UINTN DebugFlags
- )
-{
- EFI_TCP6_ACCESS_POINT * pAccessPoint;
- ESL_SOCKET * pSocket;
- ESL_TCP6_CONTEXT * pTcp6;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Use for/break instead of goto
- for ( ; ; ) {
- //
- // Allocate the close event
- //
- pSocket = pPort->pSocket;
- pTcp6 = &pPort->Context.Tcp6;
- Status = gBS->CreateEvent ( EVT_NOTIFY_SIGNAL,
- TPL_SOCKETS,
- (EFI_EVENT_NOTIFY)EslSocketPortCloseComplete,
- pPort,
- &pTcp6->CloseToken.CompletionToken.Event);
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR | DebugFlags,
- "ERROR - Failed to create the close event, Status: %r\r\n",
- Status ));
- pSocket->errno = ENOMEM;
- break;
- }
- DEBUG (( DEBUG_CLOSE | DEBUG_POOL,
- "0x%08x: Created close event\r\n",
- pTcp6->CloseToken.CompletionToken.Event ));
-
- //
- // Allocate the connection event
- //
- Status = gBS->CreateEvent ( EVT_NOTIFY_SIGNAL,
- TPL_SOCKETS,
- (EFI_EVENT_NOTIFY)EslTcp6ConnectComplete,
- pPort,
- &pTcp6->ConnectToken.CompletionToken.Event);
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR | DebugFlags,
- "ERROR - Failed to create the connect event, Status: %r\r\n",
- Status ));
- pSocket->errno = ENOMEM;
- break;
- }
- DEBUG (( DEBUG_CLOSE | DEBUG_POOL,
- "0x%08x: Created connect event\r\n",
- pTcp6->ConnectToken.CompletionToken.Event ));
-
- //
- // Initialize the port
- //
- pSocket->TxPacketOffset = OFFSET_OF ( ESL_PACKET, Op.Tcp6Tx.TxData );
- pSocket->TxTokenEventOffset = OFFSET_OF ( ESL_IO_MGMT, Token.Tcp6Tx.CompletionToken.Event );
- pSocket->TxTokenOffset = OFFSET_OF ( EFI_TCP6_IO_TOKEN, Packet.TxData );
-
- //
- // Save the cancel, receive and transmit addresses
- // pPort->pfnRxCancel = NULL; since the UEFI implementation returns EFI_UNSUPPORTED
- //
- pPort->pfnConfigure = (PFN_NET_CONFIGURE)pPort->pProtocol.TCPv6->Configure;
- pPort->pfnRxPoll = (PFN_NET_POLL)pPort->pProtocol.TCPv6->Poll;
- pPort->pfnRxStart = (PFN_NET_IO_START)pPort->pProtocol.TCPv6->Receive;
- pPort->pfnTxStart = (PFN_NET_IO_START)pPort->pProtocol.TCPv6->Transmit;
-
- //
- // Set the configuration flags
- //
- pAccessPoint = &pPort->Context.Tcp6.ConfigData.AccessPoint;
- pAccessPoint->ActiveFlag = FALSE;
- pTcp6->ConfigData.TrafficClass = 0;
- pTcp6->ConfigData.HopLimit = 255;
- break;
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Close a Tcp6 port.
-
- This routine releases the network specific resources allocated by
- ::EslTcp6PortAllocate.
-
- This routine is called by ::EslSocketPortClose.
- See the \ref PortCloseStateMachine section.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @retval EFI_SUCCESS The port is closed
- @retval other Port close error
-
-**/
-EFI_STATUS
-EslTcp6PortClose (
- IN ESL_PORT * pPort
- )
-{
- UINTN DebugFlags;
- ESL_TCP6_CONTEXT * pTcp6;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Locate the port in the socket list
- //
- Status = EFI_SUCCESS;
- DebugFlags = pPort->DebugFlags;
- pTcp6 = &pPort->Context.Tcp6;
-
- //
- // Done with the connect event
- //
- if ( NULL != pTcp6->ConnectToken.CompletionToken.Event ) {
- Status = gBS->CloseEvent ( pTcp6->ConnectToken.CompletionToken.Event );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DebugFlags | DEBUG_POOL,
- "0x%08x: Closed connect event\r\n",
- pTcp6->ConnectToken.CompletionToken.Event ));
- }
- else {
- DEBUG (( DEBUG_ERROR | DebugFlags,
- "ERROR - Failed to close the connect event, Status: %r\r\n",
- Status ));
- ASSERT ( EFI_SUCCESS == Status );
- }
- }
-
- //
- // Done with the close event
- //
- if ( NULL != pTcp6->CloseToken.CompletionToken.Event ) {
- Status = gBS->CloseEvent ( pTcp6->CloseToken.CompletionToken.Event );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DebugFlags | DEBUG_POOL,
- "0x%08x: Closed close event\r\n",
- pTcp6->CloseToken.CompletionToken.Event ));
- }
- else {
- DEBUG (( DEBUG_ERROR | DebugFlags,
- "ERROR - Failed to close the close event, Status: %r\r\n",
- Status ));
- ASSERT ( EFI_SUCCESS == Status );
- }
- }
-
- //
- // Done with the listen completion event
- //
- if ( NULL != pTcp6->ListenToken.CompletionToken.Event ) {
- Status = gBS->CloseEvent ( pTcp6->ListenToken.CompletionToken.Event );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DebugFlags | DEBUG_POOL,
- "0x%08x: Closed listen completion event\r\n",
- pTcp6->ListenToken.CompletionToken.Event ));
- }
- else {
- DEBUG (( DEBUG_ERROR | DebugFlags,
- "ERROR - Failed to close the listen completion event, Status: %r\r\n",
- Status ));
- ASSERT ( EFI_SUCCESS == Status );
- }
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Perform the network specific close operation on the port.
-
- This routine performs a cancel operations on the TCPv6 port to
- shutdown the receive operations on the port.
-
- This routine is called by the ::EslSocketPortCloseTxDone
- routine after the port completes all of the transmission.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @retval EFI_SUCCESS The port is closed, not normally returned
- @retval EFI_NOT_READY The port is still closing
- @retval EFI_ALREADY_STARTED Error, the port is in the wrong state,
- most likely the routine was called already.
-
-**/
-EFI_STATUS
-EslTcp6PortCloseOp (
- IN ESL_PORT * pPort
- )
-{
- ESL_TCP6_CONTEXT * pTcp6;
- EFI_TCP6_PROTOCOL * pTcp6Protocol;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Close the configured port
- //
- Status = EFI_SUCCESS;
- pTcp6 = &pPort->Context.Tcp6;
- pTcp6Protocol = pPort->pProtocol.TCPv6;
- pTcp6->CloseToken.AbortOnClose = pPort->bCloseNow;
- Status = pTcp6Protocol->Close ( pTcp6Protocol,
- &pTcp6->CloseToken );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( pPort->DebugFlags | DEBUG_CLOSE | DEBUG_INFO,
- "0x%08x: Port close started\r\n",
- pPort ));
- }
- else {
- DEBUG (( DEBUG_ERROR | pPort->DebugFlags | DEBUG_CLOSE | DEBUG_INFO,
- "ERROR - Close failed on port 0x%08x, Status: %r\r\n",
- pPort,
- Status ));
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Receive data from a network connection.
-
- This routine attempts to return buffered data to the caller. The
- data is removed from the urgent queue if the message flag MSG_OOB
- is specified, otherwise data is removed from the normal queue.
- See the \ref ReceiveEngine section.
-
- This routine is called by ::EslSocketReceive to handle the network
- specific receive operation to support SOCK_STREAM and SOCK_SEQPACKET
- sockets.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [in] pPacket Address of an ::ESL_PACKET structure.
-
- @param [in] pbConsumePacket Address of a BOOLEAN indicating if the packet is to be consumed
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer to receive the data.
-
- @param [in] pDataLength Number of received data bytes in the buffer.
-
- @param [out] pAddress Network address to receive the remote system address
-
- @param [out] pSkipBytes Address to receive the number of bytes skipped
-
- @return Returns the address of the next free byte in the buffer.
-
- **/
-UINT8 *
-EslTcp6Receive (
- IN ESL_PORT * pPort,
- IN ESL_PACKET * pPacket,
- IN BOOLEAN * pbConsumePacket,
- IN size_t BufferLength,
- IN UINT8 * pBuffer,
- OUT size_t * pDataLength,
- OUT struct sockaddr * pAddress,
- OUT size_t * pSkipBytes
- )
-{
- size_t DataLength;
- struct sockaddr_in6 * pRemoteAddress;
- ESL_TCP6_CONTEXT * pTcp6;
-
- DBG_ENTER ( );
-
- //
- // Return the remote system address if requested
- //
- if ( NULL != pAddress ) {
- //
- // Build the remote address
- //
- pTcp6 = &pPort->Context.Tcp6;
- DEBUG (( DEBUG_RX,
- "Getting packet remote address: [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d\r\n",
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[0],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[1],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[2],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[3],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[4],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[5],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[6],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[7],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[8],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[9],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[10],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[11],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[12],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[13],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[14],
- pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[15],
- pTcp6->ConfigData.AccessPoint.RemotePort ));
- pRemoteAddress = (struct sockaddr_in6 *)pAddress;
- CopyMem ( &pRemoteAddress->sin6_addr,
- &pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[0],
- sizeof ( pRemoteAddress->sin6_addr ));
- pRemoteAddress->sin6_port = SwapBytes16 ( pTcp6->ConfigData.AccessPoint.RemotePort );
- }
-
- //
- // Determine the amount of received data
- //
- DataLength = pPacket->ValidBytes;
- if ( BufferLength < DataLength ) {
- DataLength = BufferLength;
- }
-
- //
- // Move the data into the buffer
- //
- DEBUG (( DEBUG_RX,
- "0x%08x: Port copy packet 0x%08x data into 0x%08x, 0x%08x bytes\r\n",
- pPort,
- pPacket,
- pBuffer,
- DataLength ));
- CopyMem ( pBuffer, pPacket->pBuffer, DataLength );
-
- //
- // Set the next buffer address
- //
- pBuffer += DataLength;
-
- //
- // Determine if the data is being read
- //
- if ( *pbConsumePacket ) {
- //
- // Account for the bytes consumed
- //
- pPacket->pBuffer += DataLength;
- pPacket->ValidBytes -= DataLength;
- DEBUG (( DEBUG_RX,
- "0x%08x: Port account for 0x%08x bytes\r\n",
- pPort,
- DataLength ));
-
- //
- // Determine if the entire packet was consumed
- //
- if (( 0 == pPacket->ValidBytes )
- || ( SOCK_STREAM != pPort->pSocket->Type )) {
- //
- // All done with this packet
- // Account for any discarded data
- //
- *pSkipBytes = pPacket->ValidBytes;
- }
- else
- {
- //
- // More data to consume later
- //
- *pbConsumePacket = FALSE;
- }
- }
-
- //
- // Return the data length and the buffer address
- //
- *pDataLength = DataLength;
- DBG_EXIT_HEX ( pBuffer );
- return pBuffer;
-}
-
-
-/**
- Get the remote socket address.
-
- This routine returns the address of the remote connection point
- associated with the SOCK_STREAM or SOCK_SEQPACKET socket.
-
- This routine is called by ::EslSocketGetPeerAddress to detemine
- the TCPv6 address and por number associated with the network adapter.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [out] pAddress Network address to receive the remote system address
-
-**/
-VOID
-EslTcp6RemoteAddressGet (
- IN ESL_PORT * pPort,
- OUT struct sockaddr * pAddress
- )
-{
- struct sockaddr_in6 * pRemoteAddress;
- ESL_TCP6_CONTEXT * pTcp6;
-
- DBG_ENTER ( );
-
- //
- // Return the remote address
- //
- pTcp6 = &pPort->Context.Tcp6;
- pRemoteAddress = (struct sockaddr_in6 *)pAddress;
- pRemoteAddress->sin6_family = AF_INET6;
- pRemoteAddress->sin6_port = SwapBytes16 ( pTcp6->ConfigData.AccessPoint.RemotePort );
- CopyMem ( &pRemoteAddress->sin6_addr,
- &pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr[0],
- sizeof ( pRemoteAddress->sin6_addr ));
-
- DBG_EXIT ( );
-}
-
-
-/**
- Set the remote address
-
- This routine sets the remote address in the port.
-
- This routine is called by ::EslSocketConnect to specify the
- remote network address.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [in] pSockAddr Network address of the remote system.
-
- @param [in] SockAddrLength Length in bytes of the network address.
-
- @retval EFI_SUCCESS The operation was successful
-
- **/
-EFI_STATUS
-EslTcp6RemoteAddressSet (
- IN ESL_PORT * pPort,
- IN CONST struct sockaddr * pSockAddr,
- IN socklen_t SockAddrLength
- )
-{
- CONST struct sockaddr_in6 * pRemoteAddress;
- ESL_TCP6_CONTEXT * pTcp6;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Set the remote address
- //
- pTcp6 = &pPort->Context.Tcp6;
- pRemoteAddress = (struct sockaddr_in6 *)pSockAddr;
- CopyMem ( &pTcp6->ConfigData.AccessPoint.RemoteAddress.Addr [ 0 ],
- &pRemoteAddress->sin6_addr.__u6_addr.__u6_addr8 [ 0 ],
- sizeof ( pRemoteAddress->sin6_addr.__u6_addr.__u6_addr8 ));
- pTcp6->ConfigData.AccessPoint.RemotePort = SwapBytes16 ( pRemoteAddress->sin6_port );
- Status = EFI_SUCCESS;
-
-//
-// TODO: Fix the following check
-//
-/*
- if ( INADDR_BROADCAST == pRemoteAddress->sin6_addr.s_addr ) {
- DEBUG (( DEBUG_CONNECT,
- "ERROR - Invalid remote address\r\n" ));
- Status = EFI_INVALID_PARAMETER;
- pPort->pSocket->errno = EAFNOSUPPORT;
- }
-*/
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Process the receive completion
-
- This routine queues the data in FIFO order in either the urgent
- or normal data queues depending upon the type of data received.
- See the \ref ReceiveEngine section.
-
- This routine is called by the TCPv6 driver when some data is
- received.
-
- Buffer the data that was just received.
-
- @param [in] Event The receive completion event
-
- @param [in] pIo Address of an ::ESL_IO_MGMT structure
-
-**/
-VOID
-EslTcp6RxComplete (
- IN EFI_EVENT Event,
- IN ESL_IO_MGMT * pIo
- )
-{
- BOOLEAN bUrgent;
- size_t LengthInBytes;
- ESL_PACKET * pPacket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Get the operation status.
- //
- Status = pIo->Token.Tcp6Rx.CompletionToken.Status;
-
- //
- // +--------------------+ +---------------------------+
- // | ESL_IO_MGMT | | ESL_PACKET |
- // | | | |
- // | +---------------+ +-----------------------+ |
- // | | Token | | EFI_Tcp6_RECEIVE_DATA | |
- // | | RxData --> | | |
- // | | | +-----------------------+---+
- // | | Event | | Data Buffer |
- // +----+---------------+ | |
- // | |
- // +---------------------------+
- //
- //
- // Duplicate the buffer address and length for use by the
- // buffer handling code in EslTcp6Receive. These fields are
- // used when a partial read is done of the data from the
- // packet.
- //
- pPacket = pIo->pPacket;
- pPacket->pBuffer = pPacket->Op.Tcp6Rx.RxData.FragmentTable[0].FragmentBuffer;
- LengthInBytes = pPacket->Op.Tcp6Rx.RxData.DataLength;
- pPacket->ValidBytes = LengthInBytes;
-
- //
- // Get the data type so that it may be linked to the
- // correct receive buffer list on the ESL_SOCKET structure
- //
- bUrgent = pPacket->Op.Tcp6Rx.RxData.UrgentFlag;
-
- //
- // Complete this request
- //
- EslSocketRxComplete ( pIo, Status, LengthInBytes, bUrgent );
- DBG_EXIT ( );
-}
-
-
-/**
- Start a receive operation
-
- This routine posts a receive buffer to the TCPv6 driver.
- See the \ref ReceiveEngine section.
-
- This support routine is called by EslSocketRxStart.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
- @param [in] pIo Address of an ::ESL_IO_MGMT structure.
-
- **/
-VOID
-EslTcp6RxStart (
- IN ESL_PORT * pPort,
- IN ESL_IO_MGMT * pIo
- )
-{
- ESL_PACKET * pPacket;
-
- DBG_ENTER ( );
-
- //
- // Initialize the buffer for receive
- //
- pPacket = pIo->pPacket;
- pIo->Token.Tcp6Rx.Packet.RxData = &pPacket->Op.Tcp6Rx.RxData;
- pPacket->Op.Tcp6Rx.RxData.DataLength = sizeof ( pPacket->Op.Tcp6Rx.Buffer );
- pPacket->Op.Tcp6Rx.RxData.FragmentCount = 1;
- pPacket->Op.Tcp6Rx.RxData.FragmentTable[0].FragmentLength = pPacket->Op.Tcp6Rx.RxData.DataLength;
- pPacket->Op.Tcp6Rx.RxData.FragmentTable[0].FragmentBuffer = &pPacket->Op.Tcp6Rx.Buffer[0];
-
- DBG_EXIT ( );
-}
-
-
-/**
- Determine if the socket is configured.
-
- This routine uses the flag ESL_SOCKET::bConfigured to determine
- if the network layer's configuration routine has been called.
-
- This routine is called by EslSocketIsConfigured to verify
- that the socket has been configured.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure.
-
- @retval EFI_SUCCESS - The port is connected
- @retval EFI_NOT_STARTED - The port is not connected
-
- **/
- EFI_STATUS
- EslTcp6SocketIsConfigured (
- IN ESL_SOCKET * pSocket
- )
-{
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Determine the socket configuration status
- //
- Status = pSocket->bConfigured ? EFI_SUCCESS : EFI_NOT_STARTED;
-
- //
- // Return the port connected state.
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Buffer data for transmission over a network connection.
-
- This routine buffers data for the transmit engine in one of two
- queues, one for urgent (out-of-band) data and the other for normal
- data. The urgent data is provided to TCP as soon as it is available,
- allowing the TCP layer to schedule transmission of the urgent data
- between packets of normal data.
-
- This routine is called by ::EslSocketTransmit to buffer
- data for transmission. When the \ref TransmitEngine has resources,
- this routine will start the transmission of the next buffer on
- the network connection.
-
- Transmission errors are returned during the next transmission or
- during the close operation. Only buffering errors are returned
- during the current transmission attempt.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure
-
- @param [in] Flags Message control flags
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer to receive the data.
-
- @param [in] pDataLength Number of received data bytes in the buffer.
-
- @param [in] pAddress Network address of the remote system address
-
- @param [in] AddressLength Length of the remote network address structure
-
- @retval EFI_SUCCESS - Socket data successfully buffered
-
- **/
-EFI_STATUS
-EslTcp6TxBuffer (
- IN ESL_SOCKET * pSocket,
- IN int Flags,
- IN size_t BufferLength,
- IN CONST UINT8 * pBuffer,
- OUT size_t * pDataLength,
- IN const struct sockaddr * pAddress,
- IN socklen_t AddressLength
- )
-{
- BOOLEAN bUrgent;
- BOOLEAN bUrgentQueue;
- ESL_PACKET * pPacket;
- ESL_IO_MGMT ** ppActive;
- ESL_IO_MGMT ** ppFree;
- ESL_PORT * pPort;
- ESL_PACKET ** ppQueueHead;
- ESL_PACKET ** ppQueueTail;
- ESL_PACKET * pPreviousPacket;
- size_t * pTxBytes;
- EFI_TCP6_TRANSMIT_DATA * pTxData;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume failure
- //
- Status = EFI_UNSUPPORTED;
- pSocket->errno = ENOTCONN;
- *pDataLength = 0;
-
- //
- // Verify that the socket is connected
- //
- if ( SOCKET_STATE_CONNECTED == pSocket->State ) {
- //
- // Locate the port
- //
- pPort = pSocket->pPortList;
- if ( NULL != pPort ) {
- //
- // Determine the queue head
- //
- bUrgent = (BOOLEAN)( 0 != ( Flags & MSG_OOB ));
- bUrgentQueue = bUrgent
- && ( !pSocket->bOobInLine )
- && pSocket->pApi->bOobSupported;
- if ( bUrgentQueue ) {
- ppQueueHead = &pSocket->pTxOobPacketListHead;
- ppQueueTail = &pSocket->pTxOobPacketListTail;
- ppActive = &pPort->pTxOobActive;
- ppFree = &pPort->pTxOobFree;
- pTxBytes = &pSocket->TxOobBytes;
- }
- else {
- ppQueueHead = &pSocket->pTxPacketListHead;
- ppQueueTail = &pSocket->pTxPacketListTail;
- ppActive = &pPort->pTxActive;
- ppFree = &pPort->pTxFree;
- pTxBytes = &pSocket->TxBytes;
- }
-
- //
- // Verify that there is enough room to buffer another
- // transmit operation
- //
- if ( pSocket->MaxTxBuf > *pTxBytes ) {
- if ( pPort->bTxFlowControl ) {
- DEBUG (( DEBUG_TX,
- "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\r\n0x%08x: pPort, TX flow control released, Max bytes: %d > %d bufferred bytes\r\n",
- pPort,
- pSocket->MaxTxBuf,
- *pTxBytes ));
- pPort->bTxFlowControl = FALSE;
- }
-
- //
- // Attempt to allocate the packet
- //
- Status = EslSocketPacketAllocate ( &pPacket,
- sizeof ( pPacket->Op.Tcp6Tx )
- - sizeof ( pPacket->Op.Tcp6Tx.Buffer )
- + BufferLength,
- 0,
- DEBUG_TX );
- if ( !EFI_ERROR ( Status )) {
- //
- // Initialize the transmit operation
- //
- pTxData = &pPacket->Op.Tcp6Tx.TxData;
- pTxData->Push = TRUE || bUrgent;
- pTxData->Urgent = bUrgent;
- pTxData->DataLength = (UINT32) BufferLength;
- pTxData->FragmentCount = 1;
- pTxData->FragmentTable[0].FragmentLength = (UINT32) BufferLength;
- pTxData->FragmentTable[0].FragmentBuffer = &pPacket->Op.Tcp6Tx.Buffer[0];
-
- //
- // Copy the data into the buffer
- //
- CopyMem ( &pPacket->Op.Tcp6Tx.Buffer[0],
- pBuffer,
- BufferLength );
-
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Stop transmission after an error
- //
- if ( !EFI_ERROR ( pSocket->TxError )) {
- //
- // Display the request
- //
- DEBUG (( DEBUG_TX,
- "Send %d %s bytes from 0x%08x\r\n",
- BufferLength,
- bUrgent ? L"urgent" : L"normal",
- pBuffer ));
-
- //
- // Queue the data for transmission
- //
- pPacket->pNext = NULL;
- pPreviousPacket = *ppQueueTail;
- if ( NULL == pPreviousPacket ) {
- *ppQueueHead = pPacket;
- }
- else {
- pPreviousPacket->pNext = pPacket;
- }
- *ppQueueTail = pPacket;
- DEBUG (( DEBUG_TX,
- "0x%08x: Packet on %s transmit list\r\n",
- pPacket,
- bUrgentQueue ? L"urgent" : L"normal" ));
-
- //
- // Account for the buffered data
- //
- *pTxBytes += BufferLength;
- *pDataLength = BufferLength;
-
- //
- // Start the transmit engine if it is idle
- //
- if ( NULL != *ppFree ) {
- EslSocketTxStart ( pPort,
- ppQueueHead,
- ppQueueTail,
- ppActive,
- ppFree );
- }
- }
- else {
- //
- // Previous transmit error
- // Stop transmission
- //
- Status = pSocket->TxError;
- pSocket->errno = EIO;
-
- //
- // Free the packet
- //
- EslSocketPacketFree ( pPacket, DEBUG_TX );
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
- }
- else {
- //
- // Packet allocation failed
- //
- pSocket->errno = ENOMEM;
- }
- }
- else {
- if ( !pPort->bTxFlowControl ) {
- DEBUG (( DEBUG_TX,
- "0x%08x: pPort, TX flow control applied, Max bytes %d <= %d bufferred bytes\r\nTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\r\n",
- pPort,
- pSocket->MaxTxBuf,
- *pTxBytes ));
- pPort->bTxFlowControl = TRUE;
- }
- //
- // Not enough buffer space available
- //
- pSocket->errno = EAGAIN;
- Status = EFI_NOT_READY;
- }
- }
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Process the normal data transmit completion
-
- This routine use ::EslSocketTxComplete to perform the transmit
- completion processing for normal data.
-
- This routine is called by the TCPv6 network layer when a
- normal data transmit request completes.
-
- @param [in] Event The normal transmit completion event
-
- @param [in] pIo The ESL_IO_MGMT structure address
-
-**/
-VOID
-EslTcp6TxComplete (
- IN EFI_EVENT Event,
- IN ESL_IO_MGMT * pIo
- )
-{
- UINT32 LengthInBytes;
- ESL_PACKET * pPacket;
- ESL_PORT * pPort;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Locate the active transmit packet
- //
- pPacket = pIo->pPacket;
- pPort = pIo->pPort;
- pSocket = pPort->pSocket;
-
- //
- // Get the transmit length and status
- //
- LengthInBytes = pPacket->Op.Tcp6Tx.TxData.DataLength;
- pSocket->TxBytes -= LengthInBytes;
- Status = pIo->Token.Tcp6Tx.CompletionToken.Status;
-
- //
- // Complete the transmit operation
- //
- EslSocketTxComplete ( pIo,
- LengthInBytes,
- Status,
- "Normal ",
- &pSocket->pTxPacketListHead,
- &pSocket->pTxPacketListTail,
- &pPort->pTxActive,
- &pPort->pTxFree );
- DBG_EXIT ( );
-}
-
-
-/**
- Process the urgent data transmit completion
-
- This routine use ::EslSocketTxComplete to perform the transmit
- completion processing for urgent data.
-
- This routine is called by the TCPv6 network layer when a
- urgent data transmit request completes.
-
- @param [in] Event The urgent transmit completion event
-
- @param [in] pIo The ESL_IO_MGMT structure address
-
-**/
-VOID
-EslTcp6TxOobComplete (
- IN EFI_EVENT Event,
- IN ESL_IO_MGMT * pIo
- )
-{
- UINT32 LengthInBytes;
- ESL_PACKET * pPacket;
- ESL_PORT * pPort;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Locate the active transmit packet
- //
- pPacket = pIo->pPacket;
- pPort = pIo->pPort;
- pSocket = pPort->pSocket;
-
- //
- // Get the transmit length and status
- //
- LengthInBytes = pPacket->Op.Tcp6Tx.TxData.DataLength;
- pSocket->TxOobBytes -= LengthInBytes;
- Status = pIo->Token.Tcp6Tx.CompletionToken.Status;
-
- //
- // Complete the transmit operation
- //
- EslSocketTxComplete ( pIo,
- LengthInBytes,
- Status,
- "Urgent ",
- &pSocket->pTxOobPacketListHead,
- &pSocket->pTxOobPacketListTail,
- &pPort->pTxOobActive,
- &pPort->pTxOobFree );
- DBG_EXIT ( );
-}
-
-
-/**
- Verify the adapter's IP address
-
- This support routine is called by EslSocketBindTest.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
- @param [in] pConfigData Address of the configuration data
-
- @retval EFI_SUCCESS - The IP address is valid
- @retval EFI_NOT_STARTED - The IP address is invalid
-
- **/
-EFI_STATUS
-EslTcp6VerifyLocalIpAddress (
- IN ESL_PORT * pPort,
- IN EFI_TCP6_CONFIG_DATA * pConfigData
- )
-{
- UINTN AddressCount;
- EFI_IP6_ADDRESS_INFO * pAddressInfo;
- UINTN DataSize;
- EFI_TCP6_ACCESS_POINT * pAccess;
- EFI_IP6_CONFIG_INTERFACE_INFO * pIpConfigData;
- EFI_IP6_CONFIG_PROTOCOL * pIpConfigProtocol;
- ESL_SERVICE * pService;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Use break instead of goto
- //
- pIpConfigData = NULL;
- for ( ; ; ) {
- //
- // Determine if the IP address is specified
- //
- pAccess = &pConfigData->AccessPoint;
- DEBUG (( DEBUG_BIND,
- "Requested IP address: %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\r\n",
- pAccess->StationAddress.Addr[0],
- pAccess->StationAddress.Addr[1],
- pAccess->StationAddress.Addr[2],
- pAccess->StationAddress.Addr[3],
- pAccess->StationAddress.Addr[4],
- pAccess->StationAddress.Addr[5],
- pAccess->StationAddress.Addr[6],
- pAccess->StationAddress.Addr[7],
- pAccess->StationAddress.Addr[8],
- pAccess->StationAddress.Addr[9],
- pAccess->StationAddress.Addr[10],
- pAccess->StationAddress.Addr[11],
- pAccess->StationAddress.Addr[12],
- pAccess->StationAddress.Addr[13],
- pAccess->StationAddress.Addr[14],
- pAccess->StationAddress.Addr[15]));
- if (( 0 == pAccess->StationAddress.Addr [ 0 ])
- && ( 0 == pAccess->StationAddress.Addr [ 1 ])
- && ( 0 == pAccess->StationAddress.Addr [ 2 ])
- && ( 0 == pAccess->StationAddress.Addr [ 3 ])
- && ( 0 == pAccess->StationAddress.Addr [ 4 ])
- && ( 0 == pAccess->StationAddress.Addr [ 5 ])
- && ( 0 == pAccess->StationAddress.Addr [ 6 ])
- && ( 0 == pAccess->StationAddress.Addr [ 7 ])
- && ( 0 == pAccess->StationAddress.Addr [ 8 ])
- && ( 0 == pAccess->StationAddress.Addr [ 9 ])
- && ( 0 == pAccess->StationAddress.Addr [ 10 ])
- && ( 0 == pAccess->StationAddress.Addr [ 11 ])
- && ( 0 == pAccess->StationAddress.Addr [ 12 ])
- && ( 0 == pAccess->StationAddress.Addr [ 13 ])
- && ( 0 == pAccess->StationAddress.Addr [ 14 ])
- && ( 0 == pAccess->StationAddress.Addr [ 15 ]))
- {
- Status = EFI_SUCCESS;
- break;
- }
-
- //
- // Open the configuration protocol
- //
- pService = pPort->pService;
- Status = gBS->OpenProtocol ( pService->Controller,
- &gEfiIp6ConfigProtocolGuid,
- (VOID **)&pIpConfigProtocol,
- NULL,
- NULL,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - IP Configuration Protocol not available, Status: %r\r\n",
- Status ));
- break;
- }
-
- //
- // Get the IP configuration data size
- //
- DataSize = 0;
- Status = pIpConfigProtocol->GetData ( pIpConfigProtocol,
- Ip6ConfigDataTypeInterfaceInfo,
- &DataSize,
- NULL );
- if ( EFI_BUFFER_TOO_SMALL != Status ) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Failed to get IP Configuration data size, Status: %r\r\n",
- Status ));
- break;
- }
-
- //
- // Allocate the configuration data buffer
- //
- pIpConfigData = AllocatePool ( DataSize );
- if ( NULL == pIpConfigData ) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Not enough memory to allocate IP Configuration data!\r\n" ));
- Status = EFI_OUT_OF_RESOURCES;
- break;
- }
-
- //
- // Get the IP configuration
- //
- Status = pIpConfigProtocol->GetData ( pIpConfigProtocol,
- Ip6ConfigDataTypeInterfaceInfo,
- &DataSize,
- pIpConfigData );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Failed to return IP Configuration data, Status: %r\r\n",
- Status ));
- break;
- }
-
- //
- // Display the current configuration
- //
- DEBUG (( DEBUG_BIND,
- "Actual adapter IP address: %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\r\n",
- pIpConfigData->HwAddress.Addr [ 0 ],
- pIpConfigData->HwAddress.Addr [ 1 ],
- pIpConfigData->HwAddress.Addr [ 2 ],
- pIpConfigData->HwAddress.Addr [ 3 ],
- pIpConfigData->HwAddress.Addr [ 4 ],
- pIpConfigData->HwAddress.Addr [ 5 ],
- pIpConfigData->HwAddress.Addr [ 6 ],
- pIpConfigData->HwAddress.Addr [ 7 ],
- pIpConfigData->HwAddress.Addr [ 8 ],
- pIpConfigData->HwAddress.Addr [ 9 ],
- pIpConfigData->HwAddress.Addr [ 10 ],
- pIpConfigData->HwAddress.Addr [ 11 ],
- pIpConfigData->HwAddress.Addr [ 12 ],
- pIpConfigData->HwAddress.Addr [ 13 ],
- pIpConfigData->HwAddress.Addr [ 14 ],
- pIpConfigData->HwAddress.Addr [ 15 ]));
-
- //
- // Validate the hardware address
- //
- Status = EFI_SUCCESS;
- if (( 16 == pIpConfigData->HwAddressSize )
- && ( pAccess->StationAddress.Addr [ 0 ] == pIpConfigData->HwAddress.Addr [ 0 ])
- && ( pAccess->StationAddress.Addr [ 1 ] == pIpConfigData->HwAddress.Addr [ 1 ])
- && ( pAccess->StationAddress.Addr [ 2 ] == pIpConfigData->HwAddress.Addr [ 2 ])
- && ( pAccess->StationAddress.Addr [ 3 ] == pIpConfigData->HwAddress.Addr [ 3 ])
- && ( pAccess->StationAddress.Addr [ 4 ] == pIpConfigData->HwAddress.Addr [ 4 ])
- && ( pAccess->StationAddress.Addr [ 5 ] == pIpConfigData->HwAddress.Addr [ 5 ])
- && ( pAccess->StationAddress.Addr [ 6 ] == pIpConfigData->HwAddress.Addr [ 6 ])
- && ( pAccess->StationAddress.Addr [ 7 ] == pIpConfigData->HwAddress.Addr [ 7 ])
- && ( pAccess->StationAddress.Addr [ 8 ] == pIpConfigData->HwAddress.Addr [ 8 ])
- && ( pAccess->StationAddress.Addr [ 9 ] == pIpConfigData->HwAddress.Addr [ 9 ])
- && ( pAccess->StationAddress.Addr [ 10 ] == pIpConfigData->HwAddress.Addr [ 10 ])
- && ( pAccess->StationAddress.Addr [ 11 ] == pIpConfigData->HwAddress.Addr [ 11 ])
- && ( pAccess->StationAddress.Addr [ 12 ] == pIpConfigData->HwAddress.Addr [ 12 ])
- && ( pAccess->StationAddress.Addr [ 13 ] == pIpConfigData->HwAddress.Addr [ 13 ])
- && ( pAccess->StationAddress.Addr [ 14 ] == pIpConfigData->HwAddress.Addr [ 14 ])
- && ( pAccess->StationAddress.Addr [ 15 ] == pIpConfigData->HwAddress.Addr [ 15 ])) {
- break;
- }
-
- //
- // Walk the list of other IP addresses assigned to this adapter
- //
- for ( AddressCount = 0; pIpConfigData->AddressInfoCount > AddressCount; AddressCount += 1 ) {
- pAddressInfo = &pIpConfigData->AddressInfo [ AddressCount ];
-
- //
- // Display the IP address
- //
- DEBUG (( DEBUG_BIND,
- "Actual adapter IP address: %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\r\n",
- pAddressInfo->Address.Addr [ 0 ],
- pAddressInfo->Address.Addr [ 1 ],
- pAddressInfo->Address.Addr [ 2 ],
- pAddressInfo->Address.Addr [ 3 ],
- pAddressInfo->Address.Addr [ 4 ],
- pAddressInfo->Address.Addr [ 5 ],
- pAddressInfo->Address.Addr [ 6 ],
- pAddressInfo->Address.Addr [ 7 ],
- pAddressInfo->Address.Addr [ 8 ],
- pAddressInfo->Address.Addr [ 9 ],
- pAddressInfo->Address.Addr [ 10 ],
- pAddressInfo->Address.Addr [ 11 ],
- pAddressInfo->Address.Addr [ 12 ],
- pAddressInfo->Address.Addr [ 13 ],
- pAddressInfo->Address.Addr [ 14 ],
- pAddressInfo->Address.Addr [ 15 ]));
-
- //
- // Validate the IP address
- //
- if (( pAccess->StationAddress.Addr [ 0 ] == pAddressInfo->Address.Addr [ 0 ])
- && ( pAccess->StationAddress.Addr [ 1 ] == pAddressInfo->Address.Addr [ 1 ])
- && ( pAccess->StationAddress.Addr [ 2 ] == pAddressInfo->Address.Addr [ 2 ])
- && ( pAccess->StationAddress.Addr [ 3 ] == pAddressInfo->Address.Addr [ 3 ])
- && ( pAccess->StationAddress.Addr [ 4 ] == pAddressInfo->Address.Addr [ 4 ])
- && ( pAccess->StationAddress.Addr [ 5 ] == pAddressInfo->Address.Addr [ 5 ])
- && ( pAccess->StationAddress.Addr [ 6 ] == pAddressInfo->Address.Addr [ 6 ])
- && ( pAccess->StationAddress.Addr [ 7 ] == pAddressInfo->Address.Addr [ 7 ])
- && ( pAccess->StationAddress.Addr [ 8 ] == pAddressInfo->Address.Addr [ 8 ])
- && ( pAccess->StationAddress.Addr [ 9 ] == pAddressInfo->Address.Addr [ 9 ])
- && ( pAccess->StationAddress.Addr [ 10 ] == pAddressInfo->Address.Addr [ 10 ])
- && ( pAccess->StationAddress.Addr [ 11 ] == pAddressInfo->Address.Addr [ 11 ])
- && ( pAccess->StationAddress.Addr [ 12 ] == pAddressInfo->Address.Addr [ 12 ])
- && ( pAccess->StationAddress.Addr [ 13 ] == pAddressInfo->Address.Addr [ 13 ])
- && ( pAccess->StationAddress.Addr [ 14 ] == pAddressInfo->Address.Addr [ 14 ])
- && ( pAccess->StationAddress.Addr [ 15 ] == pAddressInfo->Address.Addr [ 15 ])) {
- break;
- }
- }
- if ( pIpConfigData->AddressInfoCount > AddressCount ) {
- break;
- }
-
- //
- // The IP address did not match
- //
- Status = EFI_NOT_STARTED;
- break;
- }
-
- //
- // Free the buffer if necessary
- //
- if ( NULL != pIpConfigData ) {
- FreePool ( pIpConfigData );
- }
-
- //
- // Return the IP address status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Interface between the socket layer and the network specific
- code that supports SOCK_STREAM and SOCK_SEQPACKET sockets
- over TCPv6.
-**/
-CONST ESL_PROTOCOL_API cEslTcp6Api = {
- "TCPv6",
- IPPROTO_TCP,
- OFFSET_OF ( ESL_PORT, Context.Tcp6.ConfigData ),
- OFFSET_OF ( ESL_LAYER, pTcp6List ),
- sizeof ( struct sockaddr_in6 ),
- sizeof ( struct sockaddr_in6 ),
- AF_INET6,
- sizeof (((ESL_PACKET *)0 )->Op.Tcp6Rx ),
- OFFSET_OF ( ESL_PACKET, Op.Tcp6Rx.Buffer ) - OFFSET_OF ( ESL_PACKET, Op ),
- OFFSET_OF ( ESL_IO_MGMT, Token.Tcp6Rx.Packet.RxData ),
- TRUE,
- EADDRINUSE,
- EslTcp6Accept,
- EslTcp6ConnectPoll,
- EslTcp6ConnectStart,
- EslTcp6SocketIsConfigured,
- EslTcp6LocalAddressGet,
- EslTcp6LocalAddressSet,
- EslTcp6Listen,
- NULL, // OptionGet
- NULL, // OptionSet
- EslTcp6PacketFree,
- EslTcp6PortAllocate,
- EslTcp6PortClose,
- EslTcp6PortCloseOp,
- FALSE,
- EslTcp6Receive,
- EslTcp6RemoteAddressGet,
- EslTcp6RemoteAddressSet,
- EslTcp6RxComplete,
- EslTcp6RxStart,
- EslTcp6TxBuffer,
- EslTcp6TxComplete,
- EslTcp6TxOobComplete,
- (PFN_API_VERIFY_LOCAL_IP_ADDRESS)EslTcp6VerifyLocalIpAddress
-};
diff --git a/StdLib/EfiSocketLib/Udp4.c b/StdLib/EfiSocketLib/Udp4.c
deleted file mode 100644
index ef2f9e321b..0000000000
--- a/StdLib/EfiSocketLib/Udp4.c
+++ /dev/null
@@ -1,1232 +0,0 @@
-/** @file
- Implement the UDP4 driver support for the socket layer.
-
- Copyright (c) 2011 - 2015, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "Socket.h"
-
-
-/**
- Get the local socket address
-
- This routine returns the IPv4 address and UDP port number associated
- with the local socket.
-
- This routine is called by ::EslSocketGetLocalAddress to determine the
- network address for the SOCK_DGRAM socket.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [out] pSockAddr Network address to receive the local system address
-
-**/
-VOID
-EslUdp4LocalAddressGet (
- IN ESL_PORT * pPort,
- OUT struct sockaddr * pSockAddr
- )
-{
- struct sockaddr_in * pLocalAddress;
- ESL_UDP4_CONTEXT * pUdp4;
-
- DBG_ENTER ( );
-
- //
- // Return the local address
- //
- pUdp4 = &pPort->Context.Udp4;
- pLocalAddress = (struct sockaddr_in *)pSockAddr;
- pLocalAddress->sin_family = AF_INET;
- pLocalAddress->sin_port = SwapBytes16 ( pUdp4->ConfigData.StationPort );
- CopyMem ( &pLocalAddress->sin_addr,
- &pUdp4->ConfigData.StationAddress.Addr[0],
- sizeof ( pLocalAddress->sin_addr ));
-
- DBG_EXIT ( );
-}
-
-
-/**
- Set the local port address.
-
- This routine sets the local port address.
-
- This support routine is called by ::EslSocketPortAllocate.
-
- @param [in] pPort Address of an ESL_PORT structure
- @param [in] pSockAddr Address of a sockaddr structure that contains the
- connection point on the local machine. An IPv4 address
- of INADDR_ANY specifies that the connection is made to
- all of the network stacks on the platform. Specifying a
- specific IPv4 address restricts the connection to the
- network stack supporting that address. Specifying zero
- for the port causes the network layer to assign a port
- number from the dynamic range. Specifying a specific
- port number causes the network layer to use that port.
-
- @param [in] bBindTest TRUE = run bind testing
-
- @retval EFI_SUCCESS The operation was successful
-
- **/
-EFI_STATUS
-EslUdp4LocalAddressSet (
- IN ESL_PORT * pPort,
- IN CONST struct sockaddr * pSockAddr,
- IN BOOLEAN bBindTest
- )
-{
- EFI_UDP4_CONFIG_DATA * pConfig;
- CONST struct sockaddr_in * pIpAddress;
- CONST UINT8 * pIpv4Address;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Validate the address
- //
- pIpAddress = (struct sockaddr_in *)pSockAddr;
- if ( INADDR_BROADCAST == pIpAddress->sin_addr.s_addr ) {
- //
- // The local address must not be the broadcast address
- //
- Status = EFI_INVALID_PARAMETER;
- pPort->pSocket->errno = EADDRNOTAVAIL;
- }
- else {
- //
- // Set the local address
- //
- pIpAddress = (struct sockaddr_in *)pSockAddr;
- pIpv4Address = (UINT8 *)&pIpAddress->sin_addr.s_addr;
- pConfig = &pPort->Context.Udp4.ConfigData;
- pConfig->StationAddress.Addr[0] = pIpv4Address[0];
- pConfig->StationAddress.Addr[1] = pIpv4Address[1];
- pConfig->StationAddress.Addr[2] = pIpv4Address[2];
- pConfig->StationAddress.Addr[3] = pIpv4Address[3];
-
- //
- // Determine if the default address is used
- //
- pConfig->UseDefaultAddress = (BOOLEAN)( 0 == pIpAddress->sin_addr.s_addr );
-
- //
- // Set the subnet mask
- //
- if ( pConfig->UseDefaultAddress ) {
- pConfig->SubnetMask.Addr[0] = 0;
- pConfig->SubnetMask.Addr[1] = 0;
- pConfig->SubnetMask.Addr[2] = 0;
- pConfig->SubnetMask.Addr[3] = 0;
- }
- else {
- pConfig->SubnetMask.Addr[0] = 0xff;
- pConfig->SubnetMask.Addr[1] = ( 128 <= pConfig->StationAddress.Addr[0]) ? 0xff : 0;
- pConfig->SubnetMask.Addr[2] = ( 192 <= pConfig->StationAddress.Addr[0]) ? 0xff : 0;
- pConfig->SubnetMask.Addr[3] = ( 224 <= pConfig->StationAddress.Addr[0]) ? 0xff : 0;
- }
-
- //
- // Validate the IP address
- //
- pConfig->StationPort = 0;
- Status = bBindTest ? EslSocketBindTest ( pPort, EADDRNOTAVAIL )
- : EFI_SUCCESS;
- if ( !EFI_ERROR ( Status )) {
- //
- // Set the port number
- //
- pConfig->StationPort = SwapBytes16 ( pIpAddress->sin_port );
-
- //
- // Display the local address
- //
- DEBUG (( DEBUG_BIND,
- "0x%08x: Port, Local UDP4 Address: %d.%d.%d.%d:%d\r\n",
- pPort,
- pConfig->StationAddress.Addr[0],
- pConfig->StationAddress.Addr[1],
- pConfig->StationAddress.Addr[2],
- pConfig->StationAddress.Addr[3],
- pConfig->StationPort ));
- }
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Free a receive packet
-
- This routine performs the network specific operations necessary
- to free a receive packet.
-
- This routine is called by ::EslSocketPortCloseTxDone to free a
- receive packet.
-
- @param [in] pPacket Address of an ::ESL_PACKET structure.
- @param [in, out] pRxBytes Address of the count of RX bytes
-
-**/
-VOID
-EslUdp4PacketFree (
- IN ESL_PACKET * pPacket,
- IN OUT size_t * pRxBytes
- )
-{
- EFI_UDP4_RECEIVE_DATA * pRxData;
-
- DBG_ENTER ( );
-
- //
- // Account for the receive bytes
- //
- pRxData = pPacket->Op.Udp4Rx.pRxData;
- *pRxBytes -= pRxData->DataLength;
-
- //
- // Disconnect the buffer from the packet
- //
- pPacket->Op.Udp4Rx.pRxData = NULL;
-
- //
- // Return the buffer to the UDP4 driver
- //
- gBS->SignalEvent ( pRxData->RecycleSignal );
- DBG_EXIT ( );
-}
-
-
-/**
- Initialize the network specific portions of an ::ESL_PORT structure.
-
- This routine initializes the network specific portions of an
- ::ESL_PORT structure for use by the socket.
-
- This support routine is called by ::EslSocketPortAllocate
- to connect the socket with the underlying network adapter
- running the UDPv4 protocol.
-
- @param [in] pPort Address of an ESL_PORT structure
- @param [in] DebugFlags Flags for debug messages
-
- @retval EFI_SUCCESS - Socket successfully created
-
- **/
-EFI_STATUS
-EslUdp4PortAllocate (
- IN ESL_PORT * pPort,
- IN UINTN DebugFlags
- )
-{
- EFI_UDP4_CONFIG_DATA * pConfig;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Initialize the port
- //
- pSocket = pPort->pSocket;
- pSocket->TxPacketOffset = OFFSET_OF ( ESL_PACKET, Op.Udp4Tx.TxData );
- pSocket->TxTokenEventOffset = OFFSET_OF ( ESL_IO_MGMT, Token.Udp4Tx.Event );
- pSocket->TxTokenOffset = OFFSET_OF ( EFI_UDP4_COMPLETION_TOKEN, Packet.TxData );
-
- //
- // Save the cancel, receive and transmit addresses
- //
- pPort->pfnConfigure = (PFN_NET_CONFIGURE)pPort->pProtocol.UDPv4->Configure;
- pPort->pfnRxCancel = (PFN_NET_IO_START)pPort->pProtocol.UDPv4->Cancel;
- pPort->pfnRxPoll = (PFN_NET_POLL)pPort->pProtocol.UDPv4->Poll;
- pPort->pfnRxStart = (PFN_NET_IO_START)pPort->pProtocol.UDPv4->Receive;
- pPort->pfnTxStart = (PFN_NET_IO_START)pPort->pProtocol.UDPv4->Transmit;
-
- //
- // Set the configuration flags
- //
- pConfig = &pPort->Context.Udp4.ConfigData;
- pConfig->TimeToLive = 255;
- pConfig->AcceptAnyPort = FALSE;
- pConfig->AcceptBroadcast = FALSE;
- pConfig->AcceptPromiscuous = FALSE;
- pConfig->AllowDuplicatePort = TRUE;
- pConfig->DoNotFragment = FALSE;
- Status = EFI_SUCCESS;
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Receive data from a network connection.
-
- This routine attempts to return buffered data to the caller. The
- data is removed from the urgent queue if the message flag MSG_OOB
- is specified, otherwise data is removed from the normal queue.
- See the \ref ReceiveEngine section.
-
- This routine is called by ::EslSocketReceive to handle the network
- specific receive operation to support SOCK_DGRAM sockets.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [in] pPacket Address of an ::ESL_PACKET structure.
-
- @param [in] pbConsumePacket Address of a BOOLEAN indicating if the packet is to be consumed
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer to receive the data.
-
- @param [in] pDataLength Number of received data bytes in the buffer.
-
- @param [out] pAddress Network address to receive the remote system address
-
- @param [out] pSkipBytes Address to receive the number of bytes skipped
-
- @return Returns the address of the next free byte in the buffer.
-
- **/
-UINT8 *
-EslUdp4Receive (
- IN ESL_PORT * pPort,
- IN ESL_PACKET * pPacket,
- IN BOOLEAN * pbConsumePacket,
- IN size_t BufferLength,
- IN UINT8 * pBuffer,
- OUT size_t * pDataLength,
- OUT struct sockaddr * pAddress,
- OUT size_t * pSkipBytes
- )
-{
- size_t DataBytes;
- struct sockaddr_in * pRemoteAddress;
- EFI_UDP4_RECEIVE_DATA * pRxData;
-
- DBG_ENTER ( );
-
- pRxData = pPacket->Op.Udp4Rx.pRxData;
- //
- // Return the remote system address if requested
- //
- if ( NULL != pAddress ) {
- //
- // Build the remote address
- //
- DEBUG (( DEBUG_RX,
- "Getting packet remote address: %d.%d.%d.%d:%d\r\n",
- pRxData->UdpSession.SourceAddress.Addr[0],
- pRxData->UdpSession.SourceAddress.Addr[1],
- pRxData->UdpSession.SourceAddress.Addr[2],
- pRxData->UdpSession.SourceAddress.Addr[3],
- pRxData->UdpSession.SourcePort ));
- pRemoteAddress = (struct sockaddr_in *)pAddress;
- CopyMem ( &pRemoteAddress->sin_addr,
- &pRxData->UdpSession.SourceAddress.Addr[0],
- sizeof ( pRemoteAddress->sin_addr ));
- pRemoteAddress->sin_port = SwapBytes16 ( pRxData->UdpSession.SourcePort );
- }
-
- //
- // Copy the received data
- //
- pBuffer = EslSocketCopyFragmentedBuffer ( pRxData->FragmentCount,
- (EFI_IP4_FRAGMENT_DATA *)&pRxData->FragmentTable[0],
- BufferLength,
- pBuffer,
- &DataBytes );
-
- //
- // Determine if the data is being read
- //
- if ( *pbConsumePacket ) {
- //
- // Display for the bytes consumed
- //
- DEBUG (( DEBUG_RX,
- "0x%08x: Port account for 0x%08x bytes\r\n",
- pPort,
- DataBytes ));
-
- //
- // Account for any discarded data
- //
- *pSkipBytes = pRxData->DataLength - DataBytes;
- }
-
- //
- // Return the data length and the buffer address
- //
- *pDataLength = DataBytes;
- DBG_EXIT_HEX ( pBuffer );
- return pBuffer;
-}
-
-
-/**
- Get the remote socket address
-
- This routine returns the address of the remote connection point
- associated with the SOCK_DGRAM socket.
-
- This routine is called by ::EslSocketGetPeerAddress to detemine
- the UDPv4 address and port number associated with the network adapter.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [out] pAddress Network address to receive the remote system address
-
-**/
-VOID
-EslUdp4RemoteAddressGet (
- IN ESL_PORT * pPort,
- OUT struct sockaddr * pAddress
- )
-{
- struct sockaddr_in * pRemoteAddress;
- ESL_UDP4_CONTEXT * pUdp4;
-
- DBG_ENTER ( );
-
- //
- // Return the remote address
- //
- pUdp4 = &pPort->Context.Udp4;
- pRemoteAddress = (struct sockaddr_in *)pAddress;
- pRemoteAddress->sin_family = AF_INET;
- pRemoteAddress->sin_port = SwapBytes16 ( pUdp4->ConfigData.RemotePort );
- CopyMem ( &pRemoteAddress->sin_addr,
- &pUdp4->ConfigData.RemoteAddress.Addr[0],
- sizeof ( pRemoteAddress->sin_addr ));
-
- DBG_EXIT ( );
-}
-
-
-/**
- Set the remote address
-
- This routine sets the remote address in the port.
-
- This routine is called by ::EslSocketConnect to specify the
- remote network address.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [in] pSockAddr Network address of the remote system.
-
- @param [in] SockAddrLength Length in bytes of the network address.
-
- @retval EFI_SUCCESS The operation was successful
-
- **/
-EFI_STATUS
-EslUdp4RemoteAddressSet (
- IN ESL_PORT * pPort,
- IN CONST struct sockaddr * pSockAddr,
- IN socklen_t SockAddrLength
- )
-{
- CONST struct sockaddr_in * pRemoteAddress;
- ESL_UDP4_CONTEXT * pUdp4;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Set the remote address
- //
- pUdp4 = &pPort->Context.Udp4;
- pRemoteAddress = (struct sockaddr_in *)pSockAddr;
- pUdp4->ConfigData.RemoteAddress.Addr[0] = (UINT8)( pRemoteAddress->sin_addr.s_addr );
- pUdp4->ConfigData.RemoteAddress.Addr[1] = (UINT8)( pRemoteAddress->sin_addr.s_addr >> 8 );
- pUdp4->ConfigData.RemoteAddress.Addr[2] = (UINT8)( pRemoteAddress->sin_addr.s_addr >> 16 );
- pUdp4->ConfigData.RemoteAddress.Addr[3] = (UINT8)( pRemoteAddress->sin_addr.s_addr >> 24 );
- pUdp4->ConfigData.RemotePort = SwapBytes16 ( pRemoteAddress->sin_port );
- pPort->pSocket->bAddressSet = TRUE;
- Status = EFI_SUCCESS;
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Process the receive completion
-
- This routine keeps the UDPv4 driver's buffer and queues it in
- in FIFO order to the data queue. The UDP4 driver's buffer will
- be returned by either ::EslUdp4Receive or ::EslSocketPortCloseTxDone.
- See the \ref ReceiveEngine section.
-
- This routine is called by the UDPv4 driver when data is
- received.
-
- @param [in] Event The receive completion event
-
- @param [in] pIo Address of an ::ESL_IO_MGMT structure
-
-**/
-VOID
-EslUdp4RxComplete (
- IN EFI_EVENT Event,
- IN ESL_IO_MGMT * pIo
- )
-{
- size_t LengthInBytes;
- ESL_PACKET * pPacket;
- EFI_UDP4_RECEIVE_DATA * pRxData;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Get the operation status.
- //
- Status = pIo->Token.Udp4Rx.Status;
-
- //
- // Get the packet length
- //
- pRxData = pIo->Token.Udp4Rx.Packet.RxData;
- LengthInBytes = pRxData->DataLength;
-
- //
- // +--------------------+ +-----------------------+
- // | ESL_IO_MGMT | | Data Buffer |
- // | | | (Driver owned) |
- // | +---------------+ +-----------------------+
- // | | Token | ^
- // | | Rx Event | |
- // | | | +-----------------------+
- // | | RxData --> | EFI_UDP4_RECEIVE_DATA |
- // +----+---------------+ | (Driver owned) |
- // +-----------------------+
- // +--------------------+ ^
- // | ESL_PACKET | .
- // | | .
- // | +---------------+ .
- // | | pRxData --> NULL .......
- // +----+---------------+
- //
- //
- // Save the data in the packet
- //
- pPacket = pIo->pPacket;
- pPacket->Op.Udp4Rx.pRxData = pRxData;
-
- //
- // Complete this request
- //
- EslSocketRxComplete ( pIo, Status, LengthInBytes, FALSE );
- DBG_EXIT ( );
-}
-
-
-/**
- Determine if the socket is configured.
-
- This routine uses the flag ESL_SOCKET::bConfigured to determine
- if the network layer's configuration routine has been called.
- This routine calls the bind and configuration routines if they
- were not already called. After the port is configured, the
- \ref ReceiveEngine is started.
-
- This routine is called by EslSocketIsConfigured to verify
- that the socket is configured.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure
-
- @retval EFI_SUCCESS - The port is connected
- @retval EFI_NOT_STARTED - The port is not connected
-
- **/
- EFI_STATUS
- EslUdp4SocketIsConfigured (
- IN ESL_SOCKET * pSocket
- )
-{
- EFI_UDP4_CONFIG_DATA * pConfigData;
- ESL_PORT * pPort;
- ESL_PORT * pNextPort;
- ESL_UDP4_CONTEXT * pUdp4;
- EFI_UDP4_PROTOCOL * pUdp4Protocol;
- EFI_STATUS Status;
- struct sockaddr_in LocalAddress;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Configure the port if necessary
- //
- if ( !pSocket->bConfigured ) {
- //
- // Fill in the port list if necessary
- //
- pSocket->errno = ENETDOWN;
- if ( NULL == pSocket->pPortList ) {
- LocalAddress.sin_len = sizeof ( LocalAddress );
- LocalAddress.sin_family = AF_INET;
- LocalAddress.sin_addr.s_addr = 0;
- LocalAddress.sin_port = 0;
- Status = EslSocketBind ( &pSocket->SocketProtocol,
- (struct sockaddr *)&LocalAddress,
- LocalAddress.sin_len,
- &pSocket->errno );
- }
-
- //
- // Walk the port list
- //
- pPort = pSocket->pPortList;
- while ( NULL != pPort ) {
- //
- // Attempt to configure the port
- //
- pNextPort = pPort->pLinkSocket;
- pUdp4 = &pPort->Context.Udp4;
- pUdp4Protocol = pPort->pProtocol.UDPv4;
- pConfigData = &pUdp4->ConfigData;
- DEBUG (( DEBUG_TX,
- "0x%08x: pPort Configuring for %d.%d.%d.%d:%d --> %d.%d.%d.%d:%d\r\n",
- pPort,
- pConfigData->StationAddress.Addr[0],
- pConfigData->StationAddress.Addr[1],
- pConfigData->StationAddress.Addr[2],
- pConfigData->StationAddress.Addr[3],
- pConfigData->StationPort,
- pConfigData->RemoteAddress.Addr[0],
- pConfigData->RemoteAddress.Addr[1],
- pConfigData->RemoteAddress.Addr[2],
- pConfigData->RemoteAddress.Addr[3],
- pConfigData->RemotePort ));
- Status = pUdp4Protocol->Configure ( pUdp4Protocol,
- pConfigData );
- if ( !EFI_ERROR ( Status )) {
- //
- // Update the configuration data
- //
- Status = pUdp4Protocol->GetModeData ( pUdp4Protocol,
- pConfigData,
- NULL,
- NULL,
- NULL );
- }
- if ( EFI_ERROR ( Status )) {
- if ( !pSocket->bConfigured ) {
- DEBUG (( DEBUG_LISTEN,
- "ERROR - Failed to configure the Udp4 port, Status: %r\r\n",
- Status ));
- switch ( Status ) {
- case EFI_ACCESS_DENIED:
- pSocket->errno = EACCES;
- break;
-
- default:
- case EFI_DEVICE_ERROR:
- pSocket->errno = EIO;
- break;
-
- case EFI_INVALID_PARAMETER:
- pSocket->errno = EADDRNOTAVAIL;
- break;
-
- case EFI_NO_MAPPING:
- pSocket->errno = EAFNOSUPPORT;
- break;
-
- case EFI_OUT_OF_RESOURCES:
- pSocket->errno = ENOBUFS;
- break;
-
- case EFI_UNSUPPORTED:
- pSocket->errno = EOPNOTSUPP;
- break;
- }
- }
- }
- else {
- DEBUG (( DEBUG_TX,
- "0x%08x: pPort Configured for %d.%d.%d.%d:%d --> %d.%d.%d.%d:%d\r\n",
- pPort,
- pConfigData->StationAddress.Addr[0],
- pConfigData->StationAddress.Addr[1],
- pConfigData->StationAddress.Addr[2],
- pConfigData->StationAddress.Addr[3],
- pConfigData->StationPort,
- pConfigData->RemoteAddress.Addr[0],
- pConfigData->RemoteAddress.Addr[1],
- pConfigData->RemoteAddress.Addr[2],
- pConfigData->RemoteAddress.Addr[3],
- pConfigData->RemotePort ));
- pPort->bConfigured = TRUE;
- pSocket->bConfigured = TRUE;
-
- //
- // Start the first read on the port
- //
- EslSocketRxStart ( pPort );
-
- //
- // The socket is connected
- //
- pSocket->State = SOCKET_STATE_CONNECTED;
- pSocket->errno = 0;
- }
-
- //
- // Set the next port
- //
- pPort = pNextPort;
- }
- }
-
- //
- // Determine the socket configuration status
- //
- Status = pSocket->bConfigured ? EFI_SUCCESS : EFI_NOT_STARTED;
-
- //
- // Return the port connected state.
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Buffer data for transmission over a network connection.
-
- This routine buffers data for the transmit engine in the normal
- data queue. When the \ref TransmitEngine has resources, this
- routine will start the transmission of the next buffer on the
- network connection.
-
- This routine is called by ::EslSocketTransmit to buffer
- data for transmission. The data is copied into a local buffer
- freeing the application buffer for reuse upon return. When
- necessary, this routine starts the transmit engine that
- performs the data transmission on the network connection. The
- transmit engine transmits the data a packet at a time over the
- network connection.
-
- Transmission errors are returned during the next transmission or
- during the close operation. Only buffering errors are returned
- during the current transmission attempt.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure
-
- @param [in] Flags Message control flags
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer to receive the data.
-
- @param [in] pDataLength Number of received data bytes in the buffer.
-
- @param [in] pAddress Network address of the remote system address
-
- @param [in] AddressLength Length of the remote network address structure
-
- @retval EFI_SUCCESS - Socket data successfully buffered
-
-**/
-EFI_STATUS
-EslUdp4TxBuffer (
- IN ESL_SOCKET * pSocket,
- IN int Flags,
- IN size_t BufferLength,
- IN CONST UINT8 * pBuffer,
- OUT size_t * pDataLength,
- IN const struct sockaddr * pAddress,
- IN socklen_t AddressLength
- )
-{
- ESL_PACKET * pPacket;
- ESL_PACKET * pPreviousPacket;
- ESL_PORT * pPort;
- const struct sockaddr_in * pRemoteAddress;
- ESL_UDP4_CONTEXT * pUdp4;
- size_t * pTxBytes;
- ESL_UDP4_TX_DATA * pTxData;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume failure
- //
- Status = EFI_UNSUPPORTED;
- pSocket->errno = ENOTCONN;
- *pDataLength = 0;
-
- //
- // Verify that the socket is connected
- //
- if ( SOCKET_STATE_CONNECTED == pSocket->State ) {
- //
- // Verify that there is enough room to buffer another
- // transmit operation
- //
- pTxBytes = &pSocket->TxBytes;
- if ( pSocket->MaxTxBuf > *pTxBytes ) {
- //
- // Locate the port
- //
- pPort = pSocket->pPortList;
- while ( NULL != pPort ) {
- //
- // Determine the queue head
- //
- pUdp4 = &pPort->Context.Udp4;
-
- //
- // Attempt to allocate the packet
- //
- Status = EslSocketPacketAllocate ( &pPacket,
- sizeof ( pPacket->Op.Udp4Tx )
- - sizeof ( pPacket->Op.Udp4Tx.Buffer )
- + BufferLength,
- 0,
- DEBUG_TX );
- if ( !EFI_ERROR ( Status )) {
- //
- // Initialize the transmit operation
- //
- pTxData = &pPacket->Op.Udp4Tx;
- pTxData->TxData.GatewayAddress = NULL;
- pTxData->TxData.UdpSessionData = NULL;
- pTxData->TxData.DataLength = (UINT32) BufferLength;
- pTxData->TxData.FragmentCount = 1;
- pTxData->TxData.FragmentTable[0].FragmentLength = (UINT32) BufferLength;
- pTxData->TxData.FragmentTable[0].FragmentBuffer = &pPacket->Op.Udp4Tx.Buffer[0];
- pTxData->RetransmitCount = 0;
-
- //
- // Set the remote system address if necessary
- //
- pTxData->TxData.UdpSessionData = NULL;
- if ( NULL != pAddress ) {
- pRemoteAddress = (const struct sockaddr_in *)pAddress;
- pTxData->Session.SourceAddress.Addr[0] = pUdp4->ConfigData.StationAddress.Addr[0];
- pTxData->Session.SourceAddress.Addr[1] = pUdp4->ConfigData.StationAddress.Addr[1];
- pTxData->Session.SourceAddress.Addr[2] = pUdp4->ConfigData.StationAddress.Addr[2];
- pTxData->Session.SourceAddress.Addr[3] = pUdp4->ConfigData.StationAddress.Addr[3];
- pTxData->Session.SourcePort = 0;
- pTxData->Session.DestinationAddress.Addr[0] = (UINT8)pRemoteAddress->sin_addr.s_addr;
- pTxData->Session.DestinationAddress.Addr[1] = (UINT8)( pRemoteAddress->sin_addr.s_addr >> 8 );
- pTxData->Session.DestinationAddress.Addr[2] = (UINT8)( pRemoteAddress->sin_addr.s_addr >> 16 );
- pTxData->Session.DestinationAddress.Addr[3] = (UINT8)( pRemoteAddress->sin_addr.s_addr >> 24 );
- pTxData->Session.DestinationPort = SwapBytes16 ( pRemoteAddress->sin_port );
-
- //
- // Use the remote system address when sending this packet
- //
- pTxData->TxData.UdpSessionData = &pTxData->Session;
- }
-
- //
- // Copy the data into the buffer
- //
- CopyMem ( &pPacket->Op.Udp4Tx.Buffer[0],
- pBuffer,
- BufferLength );
-
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Display the request
- //
- DEBUG (( DEBUG_TX,
- "Send %d bytes from 0x%08x to %d.%d.%d.%d:%d\r\n",
- BufferLength,
- pBuffer,
- pTxData->Session.DestinationAddress.Addr[0],
- pTxData->Session.DestinationAddress.Addr[1],
- pTxData->Session.DestinationAddress.Addr[2],
- pTxData->Session.DestinationAddress.Addr[3],
- pTxData->Session.DestinationPort ));
-
- //
- // Queue the data for transmission
- //
- pPacket->pNext = NULL;
- pPreviousPacket = pSocket->pTxPacketListTail;
- if ( NULL == pPreviousPacket ) {
- pSocket->pTxPacketListHead = pPacket;
- }
- else {
- pPreviousPacket->pNext = pPacket;
- }
- pSocket->pTxPacketListTail = pPacket;
- DEBUG (( DEBUG_TX,
- "0x%08x: Packet on transmit list\r\n",
- pPacket ));
-
- //
- // Account for the buffered data
- //
- *pTxBytes += BufferLength;
- *pDataLength = BufferLength;
-
- //
- // Start the transmit engine if it is idle
- //
- if ( NULL != pPort->pTxFree ) {
- pPacket = pSocket->pTxPacketListHead;
- EslSocketTxStart ( pPort,
- &pSocket->pTxPacketListHead,
- &pSocket->pTxPacketListTail,
- &pPort->pTxActive,
- &pPort->pTxFree );
-
- //
- // Ignore any transmit error
- //
- if ( EFI_ERROR ( pSocket->TxError )) {
- DEBUG (( DEBUG_TX,
- "0x%08x: Transmit error, Packet: 0x%08x, Status: %r\r\n",
- pPort,
- pPacket,
- pSocket->TxError ));
- }
- pSocket->TxError = EFI_SUCCESS;
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
- }
- else {
- //
- // Packet allocation failed
- //
- pSocket->errno = ENOMEM;
- break;
- }
-
- //
- // Set the next port
- //
- pPort = pPort->pLinkSocket;
- }
- }
- else {
- //
- // Not enough buffer space available
- //
- pSocket->errno = EAGAIN;
- Status = EFI_NOT_READY;
- }
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Process the transmit completion
-
- This routine use ::EslSocketTxComplete to perform the transmit
- completion processing for data packets.
-
- This routine is called by the UDPv4 network layer when a data
- transmit request completes.
-
- @param [in] Event The normal transmit completion event
-
- @param [in] pIo Address of an ::ESL_IO_MGMT structure
-
-**/
-VOID
-EslUdp4TxComplete (
- IN EFI_EVENT Event,
- IN ESL_IO_MGMT * pIo
- )
-{
- UINT32 LengthInBytes;
- ESL_PORT * pPort;
- ESL_PACKET * pPacket;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Locate the active transmit packet
- //
- pPacket = pIo->pPacket;
- pPort = pIo->pPort;
- pSocket = pPort->pSocket;
-
- //
- // Get the transmit length and status
- //
- LengthInBytes = pPacket->Op.Udp4Tx.TxData.DataLength;
- pSocket->TxBytes -= LengthInBytes;
- Status = pIo->Token.Udp4Tx.Status;
-
- //
- // Ignore the transmit error
- //
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_TX,
- "0x%08x: Transmit completion error, Packet: 0x%08x, Status: %r\r\n",
- pPort,
- pPacket,
- Status ));
- Status = EFI_SUCCESS;
- }
-
- //
- // Complete the transmit operation
- //
- EslSocketTxComplete ( pIo,
- LengthInBytes,
- Status,
- "UDP ",
- &pSocket->pTxPacketListHead,
- &pSocket->pTxPacketListTail,
- &pPort->pTxActive,
- &pPort->pTxFree );
- DBG_EXIT ( );
-}
-
-
-/**
- Verify the adapter's IP address
-
- This support routine is called by EslSocketBindTest.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
- @param [in] pConfigData Address of the configuration data
-
- @retval EFI_SUCCESS - The IP address is valid
- @retval EFI_NOT_STARTED - The IP address is invalid
-
- **/
-EFI_STATUS
-EslUdp4VerifyLocalIpAddress (
- IN ESL_PORT * pPort,
- IN EFI_UDP4_CONFIG_DATA * pConfigData
- )
-{
- UINTN DataSize;
- EFI_IP4_CONFIG2_INTERFACE_INFO * pIfInfo;
- EFI_IP4_CONFIG2_PROTOCOL * pIpConfig2Protocol;
- ESL_SERVICE * pService;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Use break instead of goto
- //
- pIfInfo = NULL;
- for ( ; ; ) {
- //
- // Determine if the IP address is specified
- //
- DEBUG (( DEBUG_BIND,
- "UseDefaultAddress: %s\r\n",
- pConfigData->UseDefaultAddress ? L"TRUE" : L"FALSE" ));
- DEBUG (( DEBUG_BIND,
- "Requested IP address: %d.%d.%d.%d\r\n",
- pConfigData->StationAddress.Addr [ 0 ],
- pConfigData->StationAddress.Addr [ 1 ],
- pConfigData->StationAddress.Addr [ 2 ],
- pConfigData->StationAddress.Addr [ 3 ]));
- if ( pConfigData->UseDefaultAddress
- || (( 0 == pConfigData->StationAddress.Addr [ 0 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 1 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 2 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 3 ])))
- {
- Status = EFI_SUCCESS;
- break;
- }
-
- //
- // Open the configuration protocol
- //
- pService = pPort->pService;
- Status = gBS->OpenProtocol (
- pService->Controller,
- &gEfiIp4Config2ProtocolGuid,
- (VOID **)&pIpConfig2Protocol,
- NULL,
- NULL,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - IP Configuration Protocol not available, Status: %r\r\n",
- Status ));
- break;
- }
-
- //
- // Get the interface information size
- //
- DataSize = 0;
- Status = pIpConfig2Protocol->GetData (
- pIpConfig2Protocol,
- Ip4Config2DataTypeInterfaceInfo,
- &DataSize,
- NULL
- );
- if ( EFI_BUFFER_TOO_SMALL != Status ) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Failed to get the interface information size, Status: %r\r\n",
- Status ));
- break;
- }
-
- //
- // Allocate the interface information buffer
- //
- pIfInfo = AllocatePool ( DataSize );
- if ( NULL == pIfInfo ) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Not enough memory to allocate the interface information buffer!\r\n" ));
- Status = EFI_OUT_OF_RESOURCES;
- break;
- }
-
- //
- // Get the interface info.
- //
- Status = pIpConfig2Protocol->GetData (
- pIpConfig2Protocol,
- Ip4Config2DataTypeInterfaceInfo,
- &DataSize,
- pIfInfo
- );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Failed to return the interface info, Status: %r\r\n",
- Status ));
- break;
- }
-
- //
- // Display the current configuration
- //
- DEBUG (( DEBUG_BIND,
- "Actual adapter IP address: %d.%d.%d.%d\r\n",
- pIfInfo->StationAddress.Addr [ 0 ],
- pIfInfo->StationAddress.Addr [ 1 ],
- pIfInfo->StationAddress.Addr [ 2 ],
- pIfInfo->StationAddress.Addr [ 3 ]));
-
- //
- // Assume the port is not configured
- //
- Status = EFI_SUCCESS;
- if (( pConfigData->StationAddress.Addr [ 0 ] == pIfInfo->StationAddress.Addr [ 0 ])
- && ( pConfigData->StationAddress.Addr [ 1 ] == pIfInfo->StationAddress.Addr [ 1 ])
- && ( pConfigData->StationAddress.Addr [ 2 ] == pIfInfo->StationAddress.Addr [ 2 ])
- && ( pConfigData->StationAddress.Addr [ 3 ] == pIfInfo->StationAddress.Addr [ 3 ])) {
- break;
- }
-
- //
- // The IP address did not match
- //
- Status = EFI_NOT_STARTED;
- break;
- }
-
- //
- // Free the buffer if necessary
- //
- if ( NULL != pIfInfo ) {
- FreePool ( pIfInfo );
- }
-
- //
- // Return the IP address status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Interface between the socket layer and the network specific
- code that supports SOCK_DGRAM sockets over UDPv4.
-**/
-CONST ESL_PROTOCOL_API cEslUdp4Api = {
- "UDPv4",
- IPPROTO_UDP,
- OFFSET_OF ( ESL_PORT, Context.Udp4.ConfigData ),
- OFFSET_OF ( ESL_LAYER, pUdp4List ),
- OFFSET_OF ( struct sockaddr_in, sin_zero ),
- sizeof ( struct sockaddr_in ),
- AF_INET,
- sizeof (((ESL_PACKET *)0 )->Op.Udp4Rx ),
- sizeof (((ESL_PACKET *)0 )->Op.Udp4Rx ),
- OFFSET_OF ( ESL_IO_MGMT, Token.Udp4Rx.Packet.RxData ),
- FALSE,
- EADDRINUSE,
- NULL, // Accept
- NULL, // ConnectPoll
- NULL, // ConnectStart
- EslUdp4SocketIsConfigured,
- EslUdp4LocalAddressGet,
- EslUdp4LocalAddressSet,
- NULL, // Listen
- NULL, // OptionGet
- NULL, // OptionSet
- EslUdp4PacketFree,
- EslUdp4PortAllocate,
- NULL, // PortClose,
- NULL, // PortCloseOp
- TRUE,
- EslUdp4Receive,
- EslUdp4RemoteAddressGet,
- EslUdp4RemoteAddressSet,
- EslUdp4RxComplete,
- NULL, // RxStart
- EslUdp4TxBuffer,
- EslUdp4TxComplete,
- NULL, // TxOobComplete
- (PFN_API_VERIFY_LOCAL_IP_ADDRESS)EslUdp4VerifyLocalIpAddress
-};
diff --git a/StdLib/EfiSocketLib/Udp6.c b/StdLib/EfiSocketLib/Udp6.c
deleted file mode 100644
index 34df064941..0000000000
--- a/StdLib/EfiSocketLib/Udp6.c
+++ /dev/null
@@ -1,1379 +0,0 @@
-/** @file
- Implement the UDP4 driver support for the socket layer.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "Socket.h"
-
-
-/**
- Get the local socket address
-
- This routine returns the IPv6 address and UDP port number associated
- with the local socket.
-
- This routine is called by ::EslSocketGetLocalAddress to determine the
- network address for the SOCK_DGRAM socket.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [out] pSockAddr Network address to receive the local system address
-
-**/
-VOID
-EslUdp6LocalAddressGet (
- IN ESL_PORT * pPort,
- OUT struct sockaddr * pSockAddr
- )
-{
- struct sockaddr_in6 * pLocalAddress;
- ESL_UDP6_CONTEXT * pUdp6;
-
- DBG_ENTER ( );
-
- //
- // Return the local address
- //
- pUdp6 = &pPort->Context.Udp6;
- pLocalAddress = (struct sockaddr_in6 *)pSockAddr;
- pLocalAddress->sin6_family = AF_INET6;
- pLocalAddress->sin6_port = SwapBytes16 ( pUdp6->ConfigData.StationPort );
- CopyMem ( &pLocalAddress->sin6_addr,
- &pUdp6->ConfigData.StationAddress.Addr[0],
- sizeof ( pLocalAddress->sin6_addr ));
-
- DBG_EXIT ( );
-}
-
-
-/**
- Set the local port address.
-
- This routine sets the local port address.
-
- This support routine is called by ::EslSocketPortAllocate.
-
- @param [in] pPort Address of an ESL_PORT structure
- @param [in] pSockAddr Address of a sockaddr structure that contains the
- connection point on the local machine. An IPv6 address
- of INADDR_ANY specifies that the connection is made to
- all of the network stacks on the platform. Specifying a
- specific IPv6 address restricts the connection to the
- network stack supporting that address. Specifying zero
- for the port causes the network layer to assign a port
- number from the dynamic range. Specifying a specific
- port number causes the network layer to use that port.
-
- @param [in] bBindTest TRUE = run bind testing
-
- @retval EFI_SUCCESS The operation was successful
-
- **/
-EFI_STATUS
-EslUdp6LocalAddressSet (
- IN ESL_PORT * pPort,
- IN CONST struct sockaddr * pSockAddr,
- IN BOOLEAN bBindTest
- )
-{
- EFI_UDP6_CONFIG_DATA * pConfig;
- CONST struct sockaddr_in6 * pIpAddress;
- CONST UINT8 * pIPv6Address;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Set the local address
- //
- pIpAddress = (struct sockaddr_in6 *)pSockAddr;
- pIPv6Address = (UINT8 *)&pIpAddress->sin6_addr;
- pConfig = &pPort->Context.Udp6.ConfigData;
- CopyMem ( &pConfig->StationAddress,
- pIPv6Address,
- sizeof ( pConfig->StationAddress ));
-
- //
- // Validate the IP address
- //
- pConfig->StationPort = 0;
- Status = bBindTest ? EslSocketBindTest ( pPort, EADDRNOTAVAIL )
- : EFI_SUCCESS;
- if ( !EFI_ERROR ( Status )) {
- //
- // Set the port number
- //
- pConfig->StationPort = SwapBytes16 ( pIpAddress->sin6_port );
- pPort->pSocket->bAddressSet = TRUE;
-
- //
- // Display the local address
- //
- DEBUG (( DEBUG_BIND,
- "0x%08x: Port, Local UDP6 Address: [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d\r\n",
- pPort,
- pConfig->StationAddress.Addr[0],
- pConfig->StationAddress.Addr[1],
- pConfig->StationAddress.Addr[2],
- pConfig->StationAddress.Addr[3],
- pConfig->StationAddress.Addr[4],
- pConfig->StationAddress.Addr[5],
- pConfig->StationAddress.Addr[6],
- pConfig->StationAddress.Addr[7],
- pConfig->StationAddress.Addr[8],
- pConfig->StationAddress.Addr[9],
- pConfig->StationAddress.Addr[10],
- pConfig->StationAddress.Addr[11],
- pConfig->StationAddress.Addr[12],
- pConfig->StationAddress.Addr[13],
- pConfig->StationAddress.Addr[14],
- pConfig->StationAddress.Addr[15],
- pConfig->StationPort ));
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Free a receive packet
-
- This routine performs the network specific operations necessary
- to free a receive packet.
-
- This routine is called by ::EslSocketPortCloseTxDone to free a
- receive packet.
-
- @param [in] pPacket Address of an ::ESL_PACKET structure.
- @param [in, out] pRxBytes Address of the count of RX bytes
-
-**/
-VOID
-EslUdp6PacketFree (
- IN ESL_PACKET * pPacket,
- IN OUT size_t * pRxBytes
- )
-{
- EFI_UDP6_RECEIVE_DATA * pRxData;
-
- DBG_ENTER ( );
-
- //
- // Account for the receive bytes
- //
- pRxData = pPacket->Op.Udp6Rx.pRxData;
- *pRxBytes -= pRxData->DataLength;
-
- //
- // Disconnect the buffer from the packet
- //
- pPacket->Op.Udp6Rx.pRxData = NULL;
-
- //
- // Return the buffer to the UDP6 driver
- //
- gBS->SignalEvent ( pRxData->RecycleSignal );
- DBG_EXIT ( );
-}
-
-
-/**
- Initialize the network specific portions of an ::ESL_PORT structure.
-
- This routine initializes the network specific portions of an
- ::ESL_PORT structure for use by the socket.
-
- This support routine is called by ::EslSocketPortAllocate
- to connect the socket with the underlying network adapter
- running the UDPv4 protocol.
-
- @param [in] pPort Address of an ESL_PORT structure
- @param [in] DebugFlags Flags for debug messages
-
- @retval EFI_SUCCESS - Socket successfully created
-
- **/
-EFI_STATUS
-EslUdp6PortAllocate (
- IN ESL_PORT * pPort,
- IN UINTN DebugFlags
- )
-{
- EFI_UDP6_CONFIG_DATA * pConfig;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Initialize the port
- //
- pSocket = pPort->pSocket;
- pSocket->TxPacketOffset = OFFSET_OF ( ESL_PACKET, Op.Udp6Tx.TxData );
- pSocket->TxTokenEventOffset = OFFSET_OF ( ESL_IO_MGMT, Token.Udp6Tx.Event );
- pSocket->TxTokenOffset = OFFSET_OF ( EFI_UDP6_COMPLETION_TOKEN, Packet.TxData );
-
- //
- // Save the cancel, receive and transmit addresses
- //
- pPort->pfnConfigure = (PFN_NET_CONFIGURE)pPort->pProtocol.UDPv6->Configure;
- pPort->pfnRxCancel = (PFN_NET_IO_START)pPort->pProtocol.UDPv6->Cancel;
- pPort->pfnRxPoll = (PFN_NET_POLL)pPort->pProtocol.UDPv6->Poll;
- pPort->pfnRxStart = (PFN_NET_IO_START)pPort->pProtocol.UDPv6->Receive;
- pPort->pfnTxStart = (PFN_NET_IO_START)pPort->pProtocol.UDPv6->Transmit;
-
- //
- // Do not drop packets
- //
- pConfig = &pPort->Context.Udp6.ConfigData;
- pConfig->ReceiveTimeout = 0;
- pConfig->ReceiveTimeout = pConfig->ReceiveTimeout;
-
- //
- // Set the configuration flags
- //
- pConfig->AllowDuplicatePort = TRUE;
- pConfig->AcceptAnyPort = FALSE;
- pConfig->AcceptPromiscuous = FALSE;
- pConfig->HopLimit = 255;
- pConfig->TrafficClass = 0;
-
- Status = EFI_SUCCESS;
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Receive data from a network connection.
-
- This routine attempts to return buffered data to the caller. The
- data is removed from the urgent queue if the message flag MSG_OOB
- is specified, otherwise data is removed from the normal queue.
- See the \ref ReceiveEngine section.
-
- This routine is called by ::EslSocketReceive to handle the network
- specific receive operation to support SOCK_DGRAM sockets.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [in] pPacket Address of an ::ESL_PACKET structure.
-
- @param [in] pbConsumePacket Address of a BOOLEAN indicating if the packet is to be consumed
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer to receive the data.
-
- @param [in] pDataLength Number of received data bytes in the buffer.
-
- @param [out] pAddress Network address to receive the remote system address
-
- @param [out] pSkipBytes Address to receive the number of bytes skipped
-
- @return Returns the address of the next free byte in the buffer.
-
- **/
-UINT8 *
-EslUdp6Receive (
- IN ESL_PORT * pPort,
- IN ESL_PACKET * pPacket,
- IN BOOLEAN * pbConsumePacket,
- IN size_t BufferLength,
- IN UINT8 * pBuffer,
- OUT size_t * pDataLength,
- OUT struct sockaddr * pAddress,
- OUT size_t * pSkipBytes
- )
-{
- size_t DataBytes;
- struct sockaddr_in6 * pRemoteAddress;
- EFI_UDP6_RECEIVE_DATA * pRxData;
-
- DBG_ENTER ( );
-
- pRxData = pPacket->Op.Udp6Rx.pRxData;
- //
- // Return the remote system address if requested
- //
- if ( NULL != pAddress ) {
- //
- // Build the remote address
- //
- DEBUG (( DEBUG_RX,
- "Getting packet remote address: [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d\r\n",
- pRxData->UdpSession.SourceAddress.Addr[0],
- pRxData->UdpSession.SourceAddress.Addr[1],
- pRxData->UdpSession.SourceAddress.Addr[2],
- pRxData->UdpSession.SourceAddress.Addr[3],
- pRxData->UdpSession.SourceAddress.Addr[4],
- pRxData->UdpSession.SourceAddress.Addr[5],
- pRxData->UdpSession.SourceAddress.Addr[6],
- pRxData->UdpSession.SourceAddress.Addr[7],
- pRxData->UdpSession.SourceAddress.Addr[8],
- pRxData->UdpSession.SourceAddress.Addr[9],
- pRxData->UdpSession.SourceAddress.Addr[10],
- pRxData->UdpSession.SourceAddress.Addr[11],
- pRxData->UdpSession.SourceAddress.Addr[12],
- pRxData->UdpSession.SourceAddress.Addr[13],
- pRxData->UdpSession.SourceAddress.Addr[14],
- pRxData->UdpSession.SourceAddress.Addr[15],
- pRxData->UdpSession.SourcePort ));
- pRemoteAddress = (struct sockaddr_in6 *)pAddress;
- CopyMem ( &pRemoteAddress->sin6_addr,
- &pRxData->UdpSession.SourceAddress.Addr[0],
- sizeof ( pRemoteAddress->sin6_addr ));
- pRemoteAddress->sin6_port = SwapBytes16 ( pRxData->UdpSession.SourcePort );
- }
-
- //
- // Copy the received data
- //
- pBuffer = EslSocketCopyFragmentedBuffer ( pRxData->FragmentCount,
- (EFI_IP4_FRAGMENT_DATA *)&pRxData->FragmentTable[0],
- BufferLength,
- pBuffer,
- &DataBytes );
-
- //
- // Determine if the data is being read
- //
- if ( *pbConsumePacket ) {
- //
- // Display for the bytes consumed
- //
- DEBUG (( DEBUG_RX,
- "0x%08x: Port account for 0x%08x bytes\r\n",
- pPort,
- DataBytes ));
-
- //
- // Account for any discarded data
- //
- *pSkipBytes = pRxData->DataLength - DataBytes;
- }
-
- //
- // Return the data length and the buffer address
- //
- *pDataLength = DataBytes;
- DBG_EXIT_HEX ( pBuffer );
- return pBuffer;
-}
-
-
-/**
- Get the remote socket address
-
- This routine returns the address of the remote connection point
- associated with the SOCK_DGRAM socket.
-
- This routine is called by ::EslSocketGetPeerAddress to detemine
- the UDPv4 address and port number associated with the network adapter.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [out] pAddress Network address to receive the remote system address
-
-**/
-VOID
-EslUdp6RemoteAddressGet (
- IN ESL_PORT * pPort,
- OUT struct sockaddr * pAddress
- )
-{
- struct sockaddr_in6 * pRemoteAddress;
- ESL_UDP6_CONTEXT * pUdp6;
-
- DBG_ENTER ( );
-
- //
- // Return the remote address
- //
- pUdp6 = &pPort->Context.Udp6;
- pRemoteAddress = (struct sockaddr_in6 *)pAddress;
- pRemoteAddress->sin6_family = AF_INET6;
- pRemoteAddress->sin6_port = SwapBytes16 ( pUdp6->ConfigData.RemotePort );
- CopyMem ( &pRemoteAddress->sin6_addr,
- &pUdp6->ConfigData.RemoteAddress.Addr[0],
- sizeof ( pRemoteAddress->sin6_addr ));
-
- DBG_EXIT ( );
-}
-
-
-/**
- Set the remote address
-
- This routine sets the remote address in the port.
-
- This routine is called by ::EslSocketConnect to specify the
- remote network address.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
-
- @param [in] pSockAddr Network address of the remote system.
-
- @param [in] SockAddrLength Length in bytes of the network address.
-
- @retval EFI_SUCCESS The operation was successful
-
- **/
-EFI_STATUS
-EslUdp6RemoteAddressSet (
- IN ESL_PORT * pPort,
- IN CONST struct sockaddr * pSockAddr,
- IN socklen_t SockAddrLength
- )
-{
- CONST struct sockaddr_in6 * pRemoteAddress;
- ESL_UDP6_CONTEXT * pUdp6;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Set the remote address
- //
- pUdp6 = &pPort->Context.Udp6;
- pRemoteAddress = (struct sockaddr_in6 *)pSockAddr;
- CopyMem ( &pUdp6->ConfigData.RemoteAddress,
- &pRemoteAddress->sin6_addr,
- sizeof ( pUdp6->ConfigData.RemoteAddress ));
- pUdp6->ConfigData.RemotePort = SwapBytes16 ( pRemoteAddress->sin6_port );
- Status = EFI_SUCCESS;
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Process the receive completion
-
- This routine keeps the UDPv4 driver's buffer and queues it in
- in FIFO order to the data queue. The UDP6 driver's buffer will
- be returned by either ::EslUdp6Receive or ::EslSocketPortCloseTxDone.
- See the \ref ReceiveEngine section.
-
- This routine is called by the UDPv4 driver when data is
- received.
-
- @param [in] Event The receive completion event
-
- @param [in] pIo Address of an ::ESL_IO_MGMT structure
-
-**/
-VOID
-EslUdp6RxComplete (
- IN EFI_EVENT Event,
- IN ESL_IO_MGMT * pIo
- )
-{
- size_t LengthInBytes;
- ESL_PACKET * pPacket;
- EFI_UDP6_RECEIVE_DATA * pRxData;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Get the operation status.
- //
- Status = pIo->Token.Udp6Rx.Status;
-
- //
- // Get the packet length
- //
- pRxData = pIo->Token.Udp6Rx.Packet.RxData;
- LengthInBytes = pRxData->DataLength;
-
- //
- // +--------------------+ +-----------------------+
- // | ESL_IO_MGMT | | Data Buffer |
- // | | | (Driver owned) |
- // | +---------------+ +-----------------------+
- // | | Token | ^
- // | | Rx Event | |
- // | | | +-----------------------+
- // | | RxData --> | EFI_UDP6_RECEIVE_DATA |
- // +----+---------------+ | (Driver owned) |
- // +-----------------------+
- // +--------------------+ ^
- // | ESL_PACKET | .
- // | | .
- // | +---------------+ .
- // | | pRxData --> NULL .......
- // +----+---------------+
- //
- //
- // Save the data in the packet
- //
- pPacket = pIo->pPacket;
- pPacket->Op.Udp6Rx.pRxData = pRxData;
-
- //
- // Complete this request
- //
- EslSocketRxComplete ( pIo, Status, LengthInBytes, FALSE );
- DBG_EXIT ( );
-}
-
-
-/**
- Determine if the socket is configured.
-
- This routine uses the flag ESL_SOCKET::bConfigured to determine
- if the network layer's configuration routine has been called.
- This routine calls the bind and configuration routines if they
- were not already called. After the port is configured, the
- \ref ReceiveEngine is started.
-
- This routine is called by EslSocketIsConfigured to verify
- that the socket is configured.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure
-
- @retval EFI_SUCCESS - The port is connected
- @retval EFI_NOT_STARTED - The port is not connected
-
- **/
- EFI_STATUS
- EslUdp6SocketIsConfigured (
- IN ESL_SOCKET * pSocket
- )
-{
- EFI_UDP6_CONFIG_DATA * pConfigData;
- ESL_PORT * pPort;
- ESL_PORT * pNextPort;
- ESL_UDP6_CONTEXT * pUdp6;
- EFI_UDP6_PROTOCOL * pUdp6Protocol;
- EFI_STATUS Status;
- struct sockaddr_in6 LocalAddress;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Configure the port if necessary
- //
- if ( !pSocket->bConfigured ) {
- //
- // Fill in the port list if necessary
- //
- pSocket->errno = ENETDOWN;
- if ( NULL == pSocket->pPortList ) {
- ZeroMem ( &LocalAddress, sizeof ( LocalAddress ));
- LocalAddress.sin6_len = sizeof ( LocalAddress );
- LocalAddress.sin6_family = AF_INET6;
- Status = EslSocketBind ( &pSocket->SocketProtocol,
- (struct sockaddr *)&LocalAddress,
- LocalAddress.sin6_len,
- &pSocket->errno );
- }
-
- //
- // Walk the port list
- //
- pPort = pSocket->pPortList;
- while ( NULL != pPort ) {
- //
- // Attempt to configure the port
- //
- pNextPort = pPort->pLinkSocket;
- pUdp6 = &pPort->Context.Udp6;
- pUdp6Protocol = pPort->pProtocol.UDPv6;
- pConfigData = &pUdp6->ConfigData;
- DEBUG (( DEBUG_TX,
- "0x%08x: pPort Configuring for [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d --> ",
- pPort,
- pConfigData->StationAddress.Addr[0],
- pConfigData->StationAddress.Addr[1],
- pConfigData->StationAddress.Addr[2],
- pConfigData->StationAddress.Addr[3],
- pConfigData->StationAddress.Addr[4],
- pConfigData->StationAddress.Addr[5],
- pConfigData->StationAddress.Addr[6],
- pConfigData->StationAddress.Addr[7],
- pConfigData->StationAddress.Addr[8],
- pConfigData->StationAddress.Addr[9],
- pConfigData->StationAddress.Addr[10],
- pConfigData->StationAddress.Addr[11],
- pConfigData->StationAddress.Addr[12],
- pConfigData->StationAddress.Addr[13],
- pConfigData->StationAddress.Addr[14],
- pConfigData->StationAddress.Addr[15],
- pConfigData->StationPort ));
- DEBUG (( DEBUG_TX,
- "[%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d\r\n",
- pConfigData->RemoteAddress.Addr[0],
- pConfigData->RemoteAddress.Addr[1],
- pConfigData->RemoteAddress.Addr[2],
- pConfigData->RemoteAddress.Addr[3],
- pConfigData->RemoteAddress.Addr[4],
- pConfigData->RemoteAddress.Addr[5],
- pConfigData->RemoteAddress.Addr[6],
- pConfigData->RemoteAddress.Addr[7],
- pConfigData->RemoteAddress.Addr[8],
- pConfigData->RemoteAddress.Addr[9],
- pConfigData->RemoteAddress.Addr[10],
- pConfigData->RemoteAddress.Addr[11],
- pConfigData->RemoteAddress.Addr[12],
- pConfigData->RemoteAddress.Addr[13],
- pConfigData->RemoteAddress.Addr[14],
- pConfigData->RemoteAddress.Addr[15],
- pConfigData->RemotePort ));
- Status = pUdp6Protocol->Configure ( pUdp6Protocol,
- pConfigData );
- if ( !EFI_ERROR ( Status )) {
- //
- // Update the configuration data
- //
- Status = pUdp6Protocol->GetModeData ( pUdp6Protocol,
- pConfigData,
- NULL,
- NULL,
- NULL );
- }
- if ( EFI_ERROR ( Status )) {
- if ( !pSocket->bConfigured ) {
- DEBUG (( DEBUG_LISTEN,
- "ERROR - Failed to configure the Udp6 port, Status: %r\r\n",
- Status ));
- switch ( Status ) {
- case EFI_ACCESS_DENIED:
- pSocket->errno = EACCES;
- break;
-
- default:
- case EFI_DEVICE_ERROR:
- pSocket->errno = EIO;
- break;
-
- case EFI_INVALID_PARAMETER:
- pSocket->errno = EADDRNOTAVAIL;
- break;
-
- case EFI_NO_MAPPING:
- pSocket->errno = EAFNOSUPPORT;
- break;
-
- case EFI_OUT_OF_RESOURCES:
- pSocket->errno = ENOBUFS;
- break;
-
- case EFI_UNSUPPORTED:
- pSocket->errno = EOPNOTSUPP;
- break;
- }
- }
- }
- else {
- DEBUG (( DEBUG_TX,
- "0x%08x: pPort Configured for [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d --> ",
- pPort,
- pConfigData->StationAddress.Addr[0],
- pConfigData->StationAddress.Addr[1],
- pConfigData->StationAddress.Addr[2],
- pConfigData->StationAddress.Addr[3],
- pConfigData->StationAddress.Addr[4],
- pConfigData->StationAddress.Addr[5],
- pConfigData->StationAddress.Addr[6],
- pConfigData->StationAddress.Addr[7],
- pConfigData->StationAddress.Addr[8],
- pConfigData->StationAddress.Addr[9],
- pConfigData->StationAddress.Addr[10],
- pConfigData->StationAddress.Addr[11],
- pConfigData->StationAddress.Addr[12],
- pConfigData->StationAddress.Addr[13],
- pConfigData->StationAddress.Addr[14],
- pConfigData->StationAddress.Addr[15],
- pConfigData->StationPort ));
- DEBUG (( DEBUG_TX,
- "[%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d\r\n",
- pConfigData->RemoteAddress.Addr[0],
- pConfigData->RemoteAddress.Addr[1],
- pConfigData->RemoteAddress.Addr[2],
- pConfigData->RemoteAddress.Addr[3],
- pConfigData->RemoteAddress.Addr[4],
- pConfigData->RemoteAddress.Addr[5],
- pConfigData->RemoteAddress.Addr[6],
- pConfigData->RemoteAddress.Addr[7],
- pConfigData->RemoteAddress.Addr[8],
- pConfigData->RemoteAddress.Addr[9],
- pConfigData->RemoteAddress.Addr[10],
- pConfigData->RemoteAddress.Addr[11],
- pConfigData->RemoteAddress.Addr[12],
- pConfigData->RemoteAddress.Addr[13],
- pConfigData->RemoteAddress.Addr[14],
- pConfigData->RemoteAddress.Addr[15],
- pConfigData->RemotePort ));
- pPort->bConfigured = TRUE;
- pSocket->bConfigured = TRUE;
-
- //
- // Start the first read on the port
- //
- EslSocketRxStart ( pPort );
-
- //
- // The socket is connected
- //
- pSocket->State = SOCKET_STATE_CONNECTED;
- pSocket->errno = 0;
- }
-
- //
- // Set the next port
- //
- pPort = pNextPort;
- }
- }
-
- //
- // Determine the socket configuration status
- //
- Status = pSocket->bConfigured ? EFI_SUCCESS : EFI_NOT_STARTED;
-
- //
- // Return the port connected state.
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Buffer data for transmission over a network connection.
-
- This routine buffers data for the transmit engine in the normal
- data queue. When the \ref TransmitEngine has resources, this
- routine will start the transmission of the next buffer on the
- network connection.
-
- This routine is called by ::EslSocketTransmit to buffer
- data for transmission. The data is copied into a local buffer
- freeing the application buffer for reuse upon return. When
- necessary, this routine starts the transmit engine that
- performs the data transmission on the network connection. The
- transmit engine transmits the data a packet at a time over the
- network connection.
-
- Transmission errors are returned during the next transmission or
- during the close operation. Only buffering errors are returned
- during the current transmission attempt.
-
- @param [in] pSocket Address of an ::ESL_SOCKET structure
-
- @param [in] Flags Message control flags
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer to receive the data.
-
- @param [in] pDataLength Number of received data bytes in the buffer.
-
- @param [in] pAddress Network address of the remote system address
-
- @param [in] AddressLength Length of the remote network address structure
-
- @retval EFI_SUCCESS - Socket data successfully buffered
-
-**/
-EFI_STATUS
-EslUdp6TxBuffer (
- IN ESL_SOCKET * pSocket,
- IN int Flags,
- IN size_t BufferLength,
- IN CONST UINT8 * pBuffer,
- OUT size_t * pDataLength,
- IN const struct sockaddr * pAddress,
- IN socklen_t AddressLength
- )
-{
- ESL_PACKET * pPacket;
- ESL_PACKET * pPreviousPacket;
- ESL_PORT * pPort;
- const struct sockaddr_in6 * pRemoteAddress;
- ESL_UDP6_CONTEXT * pUdp6;
- size_t * pTxBytes;
- ESL_UDP6_TX_DATA * pTxData;
- EFI_STATUS Status;
- EFI_TPL TplPrevious;
-
- DBG_ENTER ( );
-
- //
- // Assume failure
- //
- Status = EFI_UNSUPPORTED;
- pSocket->errno = ENOTCONN;
- *pDataLength = 0;
-
- //
- // Verify that the socket is connected
- //
- if ( SOCKET_STATE_CONNECTED == pSocket->State ) {
- //
- // Verify that there is enough room to buffer another
- // transmit operation
- //
- pTxBytes = &pSocket->TxBytes;
- if ( pSocket->MaxTxBuf > *pTxBytes ) {
- //
- // Locate the port
- //
- pPort = pSocket->pPortList;
- while ( NULL != pPort ) {
- //
- // Determine the queue head
- //
- pUdp6 = &pPort->Context.Udp6;
-
- //
- // Attempt to allocate the packet
- //
- Status = EslSocketPacketAllocate ( &pPacket,
- sizeof ( pPacket->Op.Udp6Tx )
- - sizeof ( pPacket->Op.Udp6Tx.Buffer )
- + BufferLength,
- 0,
- DEBUG_TX );
- if ( !EFI_ERROR ( Status )) {
- //
- // Initialize the transmit operation
- //
- pTxData = &pPacket->Op.Udp6Tx;
- pTxData->TxData.UdpSessionData = NULL;
- pTxData->TxData.DataLength = (UINT32) BufferLength;
- pTxData->TxData.FragmentCount = 1;
- pTxData->TxData.FragmentTable[0].FragmentLength = (UINT32) BufferLength;
- pTxData->TxData.FragmentTable[0].FragmentBuffer = &pPacket->Op.Udp6Tx.Buffer[0];
-
- //
- // Set the remote system address if necessary
- //
- pTxData->TxData.UdpSessionData = NULL;
- if ( NULL != pAddress ) {
- pRemoteAddress = (const struct sockaddr_in6 *)pAddress;
- CopyMem ( &pTxData->Session.SourceAddress,
- &pUdp6->ConfigData.StationAddress,
- sizeof ( pTxData->Session.SourceAddress ));
- pTxData->Session.SourcePort = 0;
- CopyMem ( &pTxData->Session.DestinationAddress,
- &pRemoteAddress->sin6_addr,
- sizeof ( pTxData->Session.DestinationAddress ));
- pTxData->Session.DestinationPort = SwapBytes16 ( pRemoteAddress->sin6_port );
-
- //
- // Use the remote system address when sending this packet
- //
- pTxData->TxData.UdpSessionData = &pTxData->Session;
- }
-
- //
- // Copy the data into the buffer
- //
- CopyMem ( &pPacket->Op.Udp6Tx.Buffer[0],
- pBuffer,
- BufferLength );
-
- //
- // Synchronize with the socket layer
- //
- RAISE_TPL ( TplPrevious, TPL_SOCKETS );
-
- //
- // Display the request
- //
- DEBUG (( DEBUG_TX,
- "Send %d bytes from 0x%08x to [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d\r\n",
- BufferLength,
- pBuffer,
- pTxData->Session.DestinationAddress.Addr[0],
- pTxData->Session.DestinationAddress.Addr[1],
- pTxData->Session.DestinationAddress.Addr[2],
- pTxData->Session.DestinationAddress.Addr[3],
- pTxData->Session.DestinationAddress.Addr[4],
- pTxData->Session.DestinationAddress.Addr[5],
- pTxData->Session.DestinationAddress.Addr[6],
- pTxData->Session.DestinationAddress.Addr[7],
- pTxData->Session.DestinationAddress.Addr[8],
- pTxData->Session.DestinationAddress.Addr[9],
- pTxData->Session.DestinationAddress.Addr[10],
- pTxData->Session.DestinationAddress.Addr[11],
- pTxData->Session.DestinationAddress.Addr[12],
- pTxData->Session.DestinationAddress.Addr[13],
- pTxData->Session.DestinationAddress.Addr[14],
- pTxData->Session.DestinationAddress.Addr[15],
- pTxData->Session.DestinationPort ));
-
- //
- // Queue the data for transmission
- //
- pPacket->pNext = NULL;
- pPreviousPacket = pSocket->pTxPacketListTail;
- if ( NULL == pPreviousPacket ) {
- pSocket->pTxPacketListHead = pPacket;
- }
- else {
- pPreviousPacket->pNext = pPacket;
- }
- pSocket->pTxPacketListTail = pPacket;
- DEBUG (( DEBUG_TX,
- "0x%08x: Packet on transmit list\r\n",
- pPacket ));
-
- //
- // Account for the buffered data
- //
- *pTxBytes += BufferLength;
- *pDataLength = BufferLength;
-
- //
- // Start the transmit engine if it is idle
- //
- if ( NULL != pPort->pTxFree ) {
- EslSocketTxStart ( pPort,
- &pSocket->pTxPacketListHead,
- &pSocket->pTxPacketListTail,
- &pPort->pTxActive,
- &pPort->pTxFree );
-
- //
- // Ignore any transmit error
- //
- if ( EFI_ERROR ( pSocket->TxError )) {
- DEBUG (( DEBUG_TX,
- "0x%08x: Transmit error, Packet: 0x%08x, Status: %r\r\n",
- pPort,
- pPacket,
- pSocket->TxError ));
- }
- pSocket->TxError = EFI_SUCCESS;
- }
-
- //
- // Release the socket layer synchronization
- //
- RESTORE_TPL ( TplPrevious );
- }
- else {
- //
- // Packet allocation failed
- //
- pSocket->errno = ENOMEM;
- break;
- }
-
- //
- // Set the next port
- //
- pPort = pPort->pLinkSocket;
- }
- }
- else {
- //
- // Not enough buffer space available
- //
- pSocket->errno = EAGAIN;
- Status = EFI_NOT_READY;
- }
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Process the transmit completion
-
- This routine use ::EslSocketTxComplete to perform the transmit
- completion processing for data packets.
-
- This routine is called by the UDPv4 network layer when a data
- transmit request completes.
-
- @param [in] Event The normal transmit completion event
-
- @param [in] pIo Address of an ::ESL_IO_MGMT structure
-
-**/
-VOID
-EslUdp6TxComplete (
- IN EFI_EVENT Event,
- IN ESL_IO_MGMT * pIo
- )
-{
- UINT32 LengthInBytes;
- ESL_PORT * pPort;
- ESL_PACKET * pPacket;
- ESL_SOCKET * pSocket;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Locate the active transmit packet
- //
- pPacket = pIo->pPacket;
- pPort = pIo->pPort;
- pSocket = pPort->pSocket;
-
- //
- // Get the transmit length and status
- //
- LengthInBytes = pPacket->Op.Udp6Tx.TxData.DataLength;
- pSocket->TxBytes -= LengthInBytes;
- Status = pIo->Token.Udp6Tx.Status;
-
- //
- // Ignore the transmit error
- //
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_TX,
- "0x%08x: Transmit completion error, Packet: 0x%08x, Status: %r\r\n",
- pPort,
- pPacket,
- Status ));
- Status = EFI_SUCCESS;
- }
-
- //
- // Complete the transmit operation
- //
- EslSocketTxComplete ( pIo,
- LengthInBytes,
- Status,
- "UDP ",
- &pSocket->pTxPacketListHead,
- &pSocket->pTxPacketListTail,
- &pPort->pTxActive,
- &pPort->pTxFree );
- DBG_EXIT ( );
-}
-
-
-/**
- Verify the adapter's IP address
-
- This support routine is called by EslSocketBindTest.
-
- @param [in] pPort Address of an ::ESL_PORT structure.
- @param [in] pConfigData Address of the configuration data
-
- @retval EFI_SUCCESS - The IP address is valid
- @retval EFI_NOT_STARTED - The IP address is invalid
-
- **/
-EFI_STATUS
-EslUdp6VerifyLocalIpAddress (
- IN ESL_PORT * pPort,
- IN EFI_UDP6_CONFIG_DATA * pConfigData
- )
-{
- UINTN AddressCount;
- EFI_IP6_ADDRESS_INFO * pAddressInfo;
- UINTN DataSize;
- EFI_IP6_CONFIG_INTERFACE_INFO * pIpConfigData;
- EFI_IP6_CONFIG_PROTOCOL * pIpConfigProtocol;
- ESL_SERVICE * pService;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Use break instead of goto
- //
- pIpConfigData = NULL;
- for ( ; ; ) {
- //
- // Determine if the IP address is specified
- //
- DEBUG (( DEBUG_BIND,
- "Requested IP address: %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\r\n",
- pConfigData->StationAddress.Addr[0],
- pConfigData->StationAddress.Addr[1],
- pConfigData->StationAddress.Addr[2],
- pConfigData->StationAddress.Addr[3],
- pConfigData->StationAddress.Addr[4],
- pConfigData->StationAddress.Addr[5],
- pConfigData->StationAddress.Addr[6],
- pConfigData->StationAddress.Addr[7],
- pConfigData->StationAddress.Addr[8],
- pConfigData->StationAddress.Addr[9],
- pConfigData->StationAddress.Addr[10],
- pConfigData->StationAddress.Addr[11],
- pConfigData->StationAddress.Addr[12],
- pConfigData->StationAddress.Addr[13],
- pConfigData->StationAddress.Addr[14],
- pConfigData->StationAddress.Addr[15]));
- if (( 0 == pConfigData->StationAddress.Addr [ 0 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 1 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 2 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 3 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 4 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 5 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 6 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 7 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 8 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 9 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 10 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 11 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 12 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 13 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 14 ])
- && ( 0 == pConfigData->StationAddress.Addr [ 15 ]))
- {
- Status = EFI_SUCCESS;
- break;
- }
-
- //
- // Open the configuration protocol
- //
- pService = pPort->pService;
- Status = gBS->OpenProtocol ( pService->Controller,
- &gEfiIp6ConfigProtocolGuid,
- (VOID **)&pIpConfigProtocol,
- NULL,
- NULL,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - IP Configuration Protocol not available, Status: %r\r\n",
- Status ));
- break;
- }
-
- //
- // Get the IP configuration data size
- //
- DataSize = 0;
- Status = pIpConfigProtocol->GetData ( pIpConfigProtocol,
- Ip6ConfigDataTypeInterfaceInfo,
- &DataSize,
- NULL );
- if ( EFI_BUFFER_TOO_SMALL != Status ) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Failed to get IP Configuration data size, Status: %r\r\n",
- Status ));
- break;
- }
-
- //
- // Allocate the configuration data buffer
- //
- pIpConfigData = AllocatePool ( DataSize );
- if ( NULL == pIpConfigData ) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Not enough memory to allocate IP Configuration data!\r\n" ));
- Status = EFI_OUT_OF_RESOURCES;
- break;
- }
-
- //
- // Get the IP configuration
- //
- Status = pIpConfigProtocol->GetData ( pIpConfigProtocol,
- Ip6ConfigDataTypeInterfaceInfo,
- &DataSize,
- pIpConfigData );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Failed to return IP Configuration data, Status: %r\r\n",
- Status ));
- break;
- }
-
- //
- // Display the current configuration
- //
- DEBUG (( DEBUG_BIND,
- "Actual adapter IP address: %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\r\n",
- pIpConfigData->HwAddress.Addr [ 0 ],
- pIpConfigData->HwAddress.Addr [ 1 ],
- pIpConfigData->HwAddress.Addr [ 2 ],
- pIpConfigData->HwAddress.Addr [ 3 ],
- pIpConfigData->HwAddress.Addr [ 4 ],
- pIpConfigData->HwAddress.Addr [ 5 ],
- pIpConfigData->HwAddress.Addr [ 6 ],
- pIpConfigData->HwAddress.Addr [ 7 ],
- pIpConfigData->HwAddress.Addr [ 8 ],
- pIpConfigData->HwAddress.Addr [ 9 ],
- pIpConfigData->HwAddress.Addr [ 10 ],
- pIpConfigData->HwAddress.Addr [ 11 ],
- pIpConfigData->HwAddress.Addr [ 12 ],
- pIpConfigData->HwAddress.Addr [ 13 ],
- pIpConfigData->HwAddress.Addr [ 14 ],
- pIpConfigData->HwAddress.Addr [ 15 ]));
-
- //
- // Validate the hardware address
- //
- Status = EFI_SUCCESS;
- if (( 16 == pIpConfigData->HwAddressSize )
- && ( pConfigData->StationAddress.Addr [ 0 ] == pIpConfigData->HwAddress.Addr [ 0 ])
- && ( pConfigData->StationAddress.Addr [ 1 ] == pIpConfigData->HwAddress.Addr [ 1 ])
- && ( pConfigData->StationAddress.Addr [ 2 ] == pIpConfigData->HwAddress.Addr [ 2 ])
- && ( pConfigData->StationAddress.Addr [ 3 ] == pIpConfigData->HwAddress.Addr [ 3 ])
- && ( pConfigData->StationAddress.Addr [ 4 ] == pIpConfigData->HwAddress.Addr [ 4 ])
- && ( pConfigData->StationAddress.Addr [ 5 ] == pIpConfigData->HwAddress.Addr [ 5 ])
- && ( pConfigData->StationAddress.Addr [ 6 ] == pIpConfigData->HwAddress.Addr [ 6 ])
- && ( pConfigData->StationAddress.Addr [ 7 ] == pIpConfigData->HwAddress.Addr [ 7 ])
- && ( pConfigData->StationAddress.Addr [ 8 ] == pIpConfigData->HwAddress.Addr [ 8 ])
- && ( pConfigData->StationAddress.Addr [ 9 ] == pIpConfigData->HwAddress.Addr [ 9 ])
- && ( pConfigData->StationAddress.Addr [ 10 ] == pIpConfigData->HwAddress.Addr [ 10 ])
- && ( pConfigData->StationAddress.Addr [ 11 ] == pIpConfigData->HwAddress.Addr [ 11 ])
- && ( pConfigData->StationAddress.Addr [ 12 ] == pIpConfigData->HwAddress.Addr [ 12 ])
- && ( pConfigData->StationAddress.Addr [ 13 ] == pIpConfigData->HwAddress.Addr [ 13 ])
- && ( pConfigData->StationAddress.Addr [ 14 ] == pIpConfigData->HwAddress.Addr [ 14 ])
- && ( pConfigData->StationAddress.Addr [ 15 ] == pIpConfigData->HwAddress.Addr [ 15 ])) {
- break;
- }
-
- //
- // Walk the list of other IP addresses assigned to this adapter
- //
- for ( AddressCount = 0; pIpConfigData->AddressInfoCount > AddressCount; AddressCount += 1 ) {
- pAddressInfo = &pIpConfigData->AddressInfo [ AddressCount ];
-
- //
- // Display the IP address
- //
- DEBUG (( DEBUG_BIND,
- "Actual adapter IP address: %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\r\n",
- pAddressInfo->Address.Addr [ 0 ],
- pAddressInfo->Address.Addr [ 1 ],
- pAddressInfo->Address.Addr [ 2 ],
- pAddressInfo->Address.Addr [ 3 ],
- pAddressInfo->Address.Addr [ 4 ],
- pAddressInfo->Address.Addr [ 5 ],
- pAddressInfo->Address.Addr [ 6 ],
- pAddressInfo->Address.Addr [ 7 ],
- pAddressInfo->Address.Addr [ 8 ],
- pAddressInfo->Address.Addr [ 9 ],
- pAddressInfo->Address.Addr [ 10 ],
- pAddressInfo->Address.Addr [ 11 ],
- pAddressInfo->Address.Addr [ 12 ],
- pAddressInfo->Address.Addr [ 13 ],
- pAddressInfo->Address.Addr [ 14 ],
- pAddressInfo->Address.Addr [ 15 ]));
-
- //
- // Validate the IP address
- //
- if (( pConfigData->StationAddress.Addr [ 0 ] == pAddressInfo->Address.Addr [ 0 ])
- && ( pConfigData->StationAddress.Addr [ 1 ] == pAddressInfo->Address.Addr [ 1 ])
- && ( pConfigData->StationAddress.Addr [ 2 ] == pAddressInfo->Address.Addr [ 2 ])
- && ( pConfigData->StationAddress.Addr [ 3 ] == pAddressInfo->Address.Addr [ 3 ])
- && ( pConfigData->StationAddress.Addr [ 4 ] == pAddressInfo->Address.Addr [ 4 ])
- && ( pConfigData->StationAddress.Addr [ 5 ] == pAddressInfo->Address.Addr [ 5 ])
- && ( pConfigData->StationAddress.Addr [ 6 ] == pAddressInfo->Address.Addr [ 6 ])
- && ( pConfigData->StationAddress.Addr [ 7 ] == pAddressInfo->Address.Addr [ 7 ])
- && ( pConfigData->StationAddress.Addr [ 8 ] == pAddressInfo->Address.Addr [ 8 ])
- && ( pConfigData->StationAddress.Addr [ 9 ] == pAddressInfo->Address.Addr [ 9 ])
- && ( pConfigData->StationAddress.Addr [ 10 ] == pAddressInfo->Address.Addr [ 10 ])
- && ( pConfigData->StationAddress.Addr [ 11 ] == pAddressInfo->Address.Addr [ 11 ])
- && ( pConfigData->StationAddress.Addr [ 12 ] == pAddressInfo->Address.Addr [ 12 ])
- && ( pConfigData->StationAddress.Addr [ 13 ] == pAddressInfo->Address.Addr [ 13 ])
- && ( pConfigData->StationAddress.Addr [ 14 ] == pAddressInfo->Address.Addr [ 14 ])
- && ( pConfigData->StationAddress.Addr [ 15 ] == pAddressInfo->Address.Addr [ 15 ])) {
- break;
- }
- }
- if ( pIpConfigData->AddressInfoCount > AddressCount ) {
- break;
- }
-
- //
- // The IP address did not match
- //
- Status = EFI_NOT_STARTED;
- break;
- }
-
- //
- // Free the buffer if necessary
- //
- if ( NULL != pIpConfigData ) {
- FreePool ( pIpConfigData );
- }
-
- //
- // Return the IP address status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Interface between the socket layer and the network specific
- code that supports SOCK_DGRAM sockets over UDPv4.
-**/
-CONST ESL_PROTOCOL_API cEslUdp6Api = {
- "UDPv6",
- IPPROTO_UDP,
- OFFSET_OF ( ESL_PORT, Context.Udp6.ConfigData ),
- OFFSET_OF ( ESL_LAYER, pUdp6List ),
- sizeof ( struct sockaddr_in6 ),
- sizeof ( struct sockaddr_in6 ),
- AF_INET6,
- sizeof (((ESL_PACKET *)0 )->Op.Udp6Rx ),
- sizeof (((ESL_PACKET *)0 )->Op.Udp6Rx ),
- OFFSET_OF ( ESL_IO_MGMT, Token.Udp6Rx.Packet.RxData ),
- FALSE,
- EADDRINUSE,
- NULL, // Accept
- NULL, // ConnectPoll
- NULL, // ConnectStart
- EslUdp6SocketIsConfigured,
- EslUdp6LocalAddressGet,
- EslUdp6LocalAddressSet,
- NULL, // Listen
- NULL, // OptionGet
- NULL, // OptionSet
- EslUdp6PacketFree,
- EslUdp6PortAllocate,
- NULL, // PortClose,
- NULL, // PortCloseOp
- TRUE,
- EslUdp6Receive,
- EslUdp6RemoteAddressGet,
- EslUdp6RemoteAddressSet,
- EslUdp6RxComplete,
- NULL, // RxStart
- EslUdp6TxBuffer,
- EslUdp6TxComplete,
- NULL, // TxOobComplete
- (PFN_API_VERIFY_LOCAL_IP_ADDRESS)EslUdp6VerifyLocalIpAddress
-};
diff --git a/StdLib/EfiSocketLib/UseEfiSocketLib.c b/StdLib/EfiSocketLib/UseEfiSocketLib.c
deleted file mode 100644
index 060598af31..0000000000
--- a/StdLib/EfiSocketLib/UseEfiSocketLib.c
+++ /dev/null
@@ -1,376 +0,0 @@
-/** @file
- Implement the connection to the EFI socket library
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "Socket.h"
-
-
-/**
- The following GUID values are only used when an application links
- against EfiSocketLib. An alternative set of values exists in
- SocketDxe\EntryUnload.c which the SocketDxe driver uses to coexist
- with socket applications.
-
- Tag GUID - IPv4 in use by an application using EfiSocketLib
-**/
-CONST EFI_GUID mEslIp4ServiceGuid __attribute__((weak)) = {
- 0x9c756011, 0x5d44, 0x4ee0, { 0xbc, 0xe7, 0xc3, 0x82, 0x18, 0xfe, 0x39, 0x8d }
-};
-
-
-/**
- Tag GUID - IPv6 in use by an application using EfiSocketLib
-**/
-CONST EFI_GUID mEslIp6ServiceGuid __attribute__((weak)) = {
- 0xc51b2761, 0xc476, 0x45fe, { 0xbe, 0x61, 0xba, 0x4b, 0xcc, 0x32, 0xf2, 0x34 }
-};
-
-
-/**
- Tag GUID - TCPv4 in use by an application using EfiSocketLib
-**/
-CONST EFI_GUID mEslTcp4ServiceGuid __attribute__((weak)) = {
- 0xffc659c2, 0x4ef2, 0x4532, { 0xb8, 0x75, 0xcd, 0x9a, 0xa4, 0x27, 0x4c, 0xde }
-};
-
-
-/**
- Tag GUID - TCPv6 in use by an application using EfiSocketLib
-**/
-CONST EFI_GUID mEslTcp6ServiceGuid __attribute__((weak)) = {
- 0x279858a4, 0x4e9e, 0x4e53, { 0x93, 0x22, 0xf2, 0x54, 0xe0, 0x7e, 0xef, 0xd4 }
-};
-
-
-/**
- Tag GUID - UDPv4 in use by an application using EfiSocketLib
-**/
-CONST EFI_GUID mEslUdp4ServiceGuid __attribute__((weak)) = {
- 0x44e03a55, 0x8d97, 0x4511, { 0xbf, 0xef, 0xa, 0x8b, 0xc6, 0x2c, 0x25, 0xae }
-};
-
-
-/**
- Tag GUID - UDPv6 in use by an application using EfiSocketLib
-**/
-CONST EFI_GUID mEslUdp6ServiceGuid __attribute__((weak)) = {
- 0xaa4af677, 0x6efe, 0x477c, { 0x96, 0x68, 0xe8, 0x13, 0x9d, 0x2, 0xfd, 0x9b }
-};
-
-
-/**
- Free the socket resources
-
- This releases the socket resources allocated by calling
- EslServiceGetProtocol.
-
- This routine is called from the ::close routine in BsdSocketLib
- to release the socket resources.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL
- structure
-
- @return Value for ::errno, zero (0) indicates success.
-
- **/
-int
-EslServiceFreeProtocol (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol
- )
-{
- int RetVal;
-
- //
- // Release the socket resources
- //
- EslSocketFree ( pSocketProtocol, &RetVal );
-
- //
- // Return the operation status
- //
- return RetVal;
-}
-
-
-/**
- Connect to the EFI socket library
-
- This routine creates the ::ESL_SOCKET structure and returns
- the API (::EFI_SOCKET_PROTOCOL address) to the socket file
- system layer in BsdSocketLib.
-
- This routine is called from the ::socket routine in BsdSocketLib
- to create the data structure and initialize the API for a socket.
- Note that this implementation is only used by socket applications
- that link directly to EslSocketLib.
-
- @param [in] ppSocketProtocol Address to receive the ::EFI_SOCKET_PROTOCOL
- structure address
-
- @return Value for ::errno, zero (0) indicates success.
-
- **/
-int
-EslServiceGetProtocol (
- IN EFI_SOCKET_PROTOCOL ** ppSocketProtocol
- )
-{
- EFI_HANDLE ChildHandle;
- ESL_SOCKET * pSocket;
- int RetVal;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- RetVal = 0;
-
- //
- // Locate the socket protocol
- //
- ChildHandle = NULL;
- Status = EslSocketAllocate ( &ChildHandle,
- DEBUG_SOCKET,
- &pSocket );
- if ( !EFI_ERROR ( Status )) {
- *ppSocketProtocol = &pSocket->SocketProtocol;
- }
- else {
- //
- // No resources
- //
- RetVal = ENOMEM;
- }
-
- //
- // Return the operation status
- //
- DBG_EXIT_DEC ( RetVal );
- return RetVal;
-}
-
-
-/**
- Connect to the network layer
-
- This routine is the constructor for the EfiSocketLib when the
- library is linked directly to an application. This routine
- walks the ::cEslSocketBinding table to create ::ESL_SERVICE
- structures, associated with the network adapters, which this
- routine links to the ::ESL_LAYER structure.
-
- This routine is called from ::EslConstructor as a result of the
- constructor redirection in ::mpfnEslConstructor at the end of this
- file.
-
- @retval EFI_SUCCESS Successfully connected to the network layer
-
- **/
-EFI_STATUS
-EslServiceNetworkConnect (
- VOID
- )
-{
- BOOLEAN bSomethingFound;
- UINTN HandleCount;
- UINTN Index;
- CONST ESL_SOCKET_BINDING * pEnd;
- EFI_HANDLE * pHandles;
- CONST ESL_SOCKET_BINDING * pSocketBinding;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Initialize the socket layer
- //
- Status = EFI_SUCCESS;
- bSomethingFound = FALSE;
- EslServiceLoad ( gImageHandle );
-
- //
- // Connect the network devices
- //
- pSocketBinding = &cEslSocketBinding[0];
- pEnd = &pSocketBinding[ cEslSocketBindingEntries ];
- while ( pEnd > pSocketBinding ) {
- //
- // Attempt to locate the network adapters
- //
- HandleCount = 0;
- pHandles = NULL;
- Status = gBS->LocateHandleBuffer ( ByProtocol,
- pSocketBinding->pNetworkBinding,
- NULL,
- &HandleCount,
- &pHandles );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR,
- "ERROR with %s layer, Status: %r\r\n",
- pSocketBinding->pName,
- Status ));
- }
- else {
- if ( NULL != pHandles ) {
- //
- // Attempt to connect to this network adapter
- //
- for ( Index = 0; HandleCount > Index; Index++ ) {
- Status = EslServiceConnect ( gImageHandle,
- pHandles[ Index ]);
- if ( !EFI_ERROR ( Status )) {
- bSomethingFound = TRUE;
- }
- else {
- if ( EFI_OUT_OF_RESOURCES == Status ) {
- //
- // Pointless to continue without memory
- //
- break;
- }
- }
- }
-
- //
- // Done with the handles
- //
- gBS->FreePool ( pHandles );
- }
- }
-
- //
- // Set the next network protocol
- //
- pSocketBinding += 1;
- }
-
- //
- // Return the network connection status
- //
- if ( bSomethingFound ) {
- Status = EFI_SUCCESS;
- }
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Disconnect from the network layer
-
- Destructor for the EfiSocketLib when the library is linked
- directly to an application. This routine walks the
- ::cEslSocketBinding table to remove the ::ESL_SERVICE
- structures (network connections) from the ::ESL_LAYER structure.
-
- This routine is called from ::EslDestructor as a result of the
- destructor redirection in ::mpfnEslDestructor at the end of this
- file.
-
- @retval EFI_SUCCESS Successfully disconnected from the network layer
-
- **/
-EFI_STATUS
-EslServiceNetworkDisconnect (
- VOID
- )
-{
- UINTN HandleCount;
- UINTN Index;
- CONST ESL_SOCKET_BINDING * pEnd;
- EFI_HANDLE * pHandles;
- CONST ESL_SOCKET_BINDING * pSocketBinding;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Assume success
- //
- Status = EFI_SUCCESS;
-
- //
- // Disconnect the network devices
- //
- pSocketBinding = &cEslSocketBinding[0];
- pEnd = &pSocketBinding[ cEslSocketBindingEntries ];
- while ( pEnd > pSocketBinding ) {
- //
- // Attempt to locate the network adapters
- //
- HandleCount = 0;
- pHandles = NULL;
- Status = gBS->LocateHandleBuffer ( ByProtocol,
- pSocketBinding->pNetworkBinding,
- NULL,
- &HandleCount,
- &pHandles );
- if (( !EFI_ERROR ( Status ))
- && ( NULL != pHandles )) {
- //
- // Attempt to disconnect from this network adapter
- //
- for ( Index = 0; HandleCount > Index; Index++ ) {
- Status = EslServiceDisconnect ( gImageHandle,
- pHandles[ Index ]);
- if ( EFI_ERROR ( Status )) {
- break;
- }
- }
-
- //
- // Done with the handles
- //
- gBS->FreePool ( pHandles );
- }
-
- //
- // Set the next network protocol
- //
- pSocketBinding += 1;
- Status = EFI_SUCCESS;
- }
-
- //
- // Finish the disconnect operation
- //
- if ( !EFI_ERROR ( Status )) {
- EslServiceUnload ( );
- }
-
- //
- // Return the network connection status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Socket layer's service binding protocol delcaration.
-**/
-CONST EFI_SERVICE_BINDING_PROTOCOL mEfiServiceBinding __attribute__((weak)) = {
- NULL,
- NULL
-};
-
-
-/**
- The following entries redirect the constructor and destructor
- for any socket application that links against the EfiSocketLib.
- Note that the SocketDxe driver uses different redirection.
-**/
-PFN_ESL_xSTRUCTOR mpfnEslConstructor __attribute__((weak)) = EslServiceNetworkConnect; ///< Constructor for EfiSocketLib
-PFN_ESL_xSTRUCTOR mpfnEslDestructor __attribute__((weak)) = EslServiceNetworkDisconnect; ///< Destructor for EfiSocketLib
diff --git a/StdLib/Fixes.txt b/StdLib/Fixes.txt
deleted file mode 100644
index 0e70e05f62..0000000000
--- a/StdLib/Fixes.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-The following is a list of issues that have been fixed in the StdLib Package.
-See the file Issues.txt for a list of open, unresolved, problems.
-
- Status Key:
- Fixed Problem has been resolved and changes committed.
-
-SocketLib
-=============
-ID Category TOOLs Reported Status
----- ------------------------ -------- -------------- -----------
-
-StdLib Issues
-=============
-ID Category TOOLs Reported Status
----- ------------------------ -------- -------------- -----------
- 1: Compilation Error vs2010 2012 Fixed 3/2013
- stdlib\libc\gdtoa\strtod.c(825) : warning C4789: destination of memory copy
- is too small: runtime crashes when using floating-point formats with printf
-
- 2: Compilation Error ALL 2012 Fixed 1/2012
- StdLib/LibC/Uefi/SysCalls.c: In function 'utimes':
- error: 'va_start' used in function with fixed args
-
- 4: Execution/Compile errors 2012 Fixed 1/2013
- Mismatch in use of EFIAPI between declaration and definition of some functions.
-
- 7: Compilation Error GCC46 Jan, 2013 Fixed 1/2013
- StdLib/LibC/Containers/Queues/Fifo.c:508:27:
- error: assignment from incompatible pointer type
-
- 8: Compilation Error Jan. 2013 Fixed 1/2013
- StdLib\LibC\Uefi\InteractiveIO\IIOutilities.c
- IIO_CursorDelta: Declaration return type differs from definition return type.
-
- 11: printf("-%ls-", L"test") will only print "--" 2013 Fixed 3/2013
-
-
-PosixLib
-=============
-ID Category TOOLs Reported Status
----- ------------------------ -------- -------------- -----------
diff --git a/StdLib/ISSUES.txt b/StdLib/ISSUES.txt
deleted file mode 100644
index 947450001d..0000000000
--- a/StdLib/ISSUES.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-What follows is a list of currently known issues with the StdLib package.
-Please see the separate file "Fixes.txt" for a list of issues that have been fixed.
-
- Status Key:
- Open Problem is unresolved and final disposition unknown.
- Verified Problem has been reproduced.
- Understood Root cause of problem is understood.
- Document Problem is to be fixed through improved documentation.
- Fixed Problem has been resolved and changes committed.
-
-SocketLib
-=============
-ID Category TOOLs Reported Status
----- ------------------------ -------- -------------- -----------
- 13: EFIAPI usage 2013-01-15 Understood
- Mismatch between functions declared EFIAPI but not defined EFIAPI.
-
- 14: EFIAPI usage 2013-01-15 Understood
- Function pointer type PFN_NET_CONFIGURE is NOT defined as EFIAPI but is
- used to point to EFIAPI functions. This causes conflicts and results in
- improper operation.
-
- 15: Build Error 2013-09-20 Open
- Predicates in ns_addr.c and res_mkupdate.c need to also include explicit
- comparisons if an assignment side-effect is used. Otherwise a warning
- will be generated which is promoted to a fatal error.
-
-StdLib Issues
-=============
-ID Category TOOLs Reported Status
----- ------------------------ -------- -------------- -----------
- 3: Usage Clarification 2012 Document
- Clarify that the current StdLib may not be used for developing drivers.
-
- 5: Error message Quality during execution 2012 Verified
- Performing filesystem operations when a filesystem driver has not been
- linked into the application results in hangs or error messages that are
- misleading or unclear as to the cause.
-
- 6: Application error return 2012 Verified
- On error, applications will sometimes return large positive numbers.
-
- 9: chdir/cwd not in EFI Shell 2012 Understood
- The chdir and getcwd functions only work if one is using the UEFI Shell.
-
- 10: No current volume/directory at app. startup. 2012 Understood
- If the Shell does not have a current volume or directory, file operations
- may hang or fail.
-
- 12: Differentiate between binary and text streams. Aug. 2013 Understood
- Implement differentiated text streams as specified by section 7.19.2 Streams,
- of the C standard.
-
- 16: Build Error 2013-08-12 Understood
- LibC/Stdio/vsnprintf_ss.c:145: (error) Uninitialized variable: n
- _DIAGASSERT expressions not appropriate for the UEFI environment.
-
-
-PosixLib
-=============
-ID Category TOOLs Reported Status
----- ------------------------ -------- -------------- -----------
diff --git a/StdLib/Include/Aarch64/arm-gcc.h b/StdLib/Include/Aarch64/arm-gcc.h
deleted file mode 100644
index ef0014b4b2..0000000000
--- a/StdLib/Include/Aarch64/arm-gcc.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/** @file
-
- Copyright (c) 2014, ARM Limited. All rights reserved.
-
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-/* $NetBSD: arm-gcc.h,v 1.4 2013/01/26 07:08:14 matt Exp $ */
-
-/*
--------------------------------------------------------------------------------
-One of the macros `BIGENDIAN' or `LITTLEENDIAN' must be defined.
--------------------------------------------------------------------------------
-*/
-#define LITTLEENDIAN
-
-/*
--------------------------------------------------------------------------------
-The macro `BITS64' can be defined to indicate that 64-bit integer types are
-supported by the compiler.
--------------------------------------------------------------------------------
-*/
-#define BITS64
-
-/*
--------------------------------------------------------------------------------
-Each of the following `typedef's defines the most convenient type that holds
-integers of at least as many bits as specified. For example, `uint8' should
-be the most convenient type that can hold unsigned integers of as many as
-8 bits. The `flag' type must be able to hold either a 0 or 1. For most
-implementations of C, `flag', `uint8', and `int8' should all be `typedef'ed
-to the same as `int'.
--------------------------------------------------------------------------------
-*/
-typedef int flag;
-typedef int uint8;
-typedef int int8;
-typedef int uint16;
-typedef int int16;
-typedef unsigned int uint32;
-typedef signed int int32;
-#ifdef BITS64
-typedef unsigned long long int uint64;
-typedef signed long long int int64;
-#endif
-
-/*
--------------------------------------------------------------------------------
-Each of the following `typedef's defines a type that holds integers
-of _exactly_ the number of bits specified. For instance, for most
-implementation of C, `bits16' and `sbits16' should be `typedef'ed to
-`unsigned short int' and `signed short int' (or `short int'), respectively.
--------------------------------------------------------------------------------
-*/
-typedef unsigned char bits8;
-typedef signed char sbits8;
-typedef unsigned short int bits16;
-typedef signed short int sbits16;
-typedef unsigned int bits32;
-typedef signed int sbits32;
-#ifdef BITS64
-typedef unsigned long long int bits64;
-typedef signed long long int sbits64;
-#endif
-
-#ifdef BITS64
-/*
--------------------------------------------------------------------------------
-The `LIT64' macro takes as its argument a textual integer literal and
-if necessary ``marks'' the literal as having a 64-bit integer type.
-For example, the GNU C Compiler (`gcc') requires that 64-bit literals be
-appended with the letters `LL' standing for `long long', which is `gcc's
-name for the 64-bit integer type. Some compilers may allow `LIT64' to be
-defined as the identity macro: `#define LIT64( a ) a'.
--------------------------------------------------------------------------------
-*/
-#define LIT64( a ) a##ULL
-#endif
-
-/*
--------------------------------------------------------------------------------
-The macro `INLINE' can be used before functions that should be inlined. If
-a compiler does not support explicit inlining, this macro should be defined
-to be `static'.
--------------------------------------------------------------------------------
-*/
-#define INLINE static inline
-
-/*
--------------------------------------------------------------------------------
-The ARM FPA is odd in that it stores doubles high-order word first, no matter
-what the endianness of the CPU. VFP is sane.
--------------------------------------------------------------------------------
-*/
-#if defined(SOFTFLOAT_FOR_GCC)
-#if defined(__VFP_FP__)
-#define FLOAT64_DEMANGLE(a) (a)
-#define FLOAT64_MANGLE(a) (a)
-#else
-#define FLOAT64_DEMANGLE(a) (((a) << 32) | ((a) >> 32))
-#define FLOAT64_MANGLE(a) FLOAT64_DEMANGLE(a)
-#endif
-#endif
diff --git a/StdLib/Include/Aarch64/machine/ansi.h b/StdLib/Include/Aarch64/machine/ansi.h
deleted file mode 100644
index 8273905cd3..0000000000
--- a/StdLib/Include/Aarch64/machine/ansi.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/** @file
- Machine dependent ANSI type definitions.
-
- Copyright (c) 2010-2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: @(#)ansi.h 8.2 (Berkeley) 1/4/94
- NetBSD: ansi.h,v 1.7 2006/10/04 13:51:59 tnozaki Exp
-**/
-#ifndef _ANSI_H_
-#define _ANSI_H_
-
-#include <sys/EfiCdefs.h>
-
-#include <machine/int_types.h>
-
-/*
- * Types which are fundamental to the implementation and may appear in
- * more than one standard header are defined here. Standard headers
- * then use:
- * #ifdef _BSD_SIZE_T_
- * typedef _BSD_SIZE_T_ size_t;
- * #undef _BSD_SIZE_T_
- * #endif
- */
-#define _BSD_CLOCK_T_ _EFI_CLOCK_T /* clock() */
-#define _BSD_PTRDIFF_T_ _EFI_PTRDIFF_T_ /* ptr1 - ptr2 */
-#define _BSD_SIZE_T_ _EFI_SIZE_T_ /* sizeof() */
-#define _BSD_SSIZE_T_ INTN /* byte count or error */
-#define _BSD_TIME_T_ _EFI_TIME_T /* time() */
-#define _BSD_VA_LIST_ VA_LIST
-#define _BSD_CLOCKID_T_ INT64 /* clockid_t */
-#define _BSD_TIMER_T_ INT64 /* timer_t */
-#define _BSD_SUSECONDS_T_ INT64 /* suseconds_t */
-#define _BSD_USECONDS_T_ UINT64 /* useconds_t */
-
-/*
- * NOTE: rune_t is not covered by ANSI nor other standards, and should not
- * be instantiated outside of lib/libc/locale. use wchar_t.
- *
- * Runes (wchar_t) is declared to be an ``int'' instead of the more natural
- * ``unsigned long'' or ``long''. Two things are happening here. It is not
- * unsigned so that EOF (-1) can be naturally assigned to it and used. Also,
- * it looks like 10646 will be a 31 bit standard. This means that if your
- * ints cannot hold 32 bits, you will be in trouble. The reason an int was
- * chosen over a long is that the is*() and to*() routines take ints (says
- * ANSI C), but they use _RUNE_T_ instead of int. By changing it here, you
- * lose a bit of ANSI conformance, but your programs will still work.
- *
- * Note that _WCHAR_T_ and _RUNE_T_ must be of the same type. When wchar_t
- * and rune_t are typedef'd, _WCHAR_T_ will be undef'd, but _RUNE_T remains
- * defined for ctype.h.
- */
-#define _BSD_WCHAR_T_ _EFI_WCHAR_T /* wchar_t */
-#define _BSD_WINT_T_ _EFI_WINT_T /* wint_t */
-#define _BSD_RUNE_T_ _EFI_WCHAR_T /* rune_t */
-#define _BSD_WCTRANS_T_ void * /* wctrans_t */
-#define _BSD_WCTYPE_T_ unsigned int /* wctype_t */
-
-/*
- * mbstate_t is an opaque object to keep conversion state, during multibyte
- * stream conversions. The content must not be referenced by user programs.
- */
-typedef struct {
- UINT32 A; // Np;
- UINT32 B; // U;
- UINT32 E; // L
- UINT8 C[4]; // n[4]
- UINT16 D[2]; // w[2]
-} __mbstate_t;
-#define _BSD_MBSTATE_T_ __mbstate_t /* mbstate_t */
-
-#endif /* _ANSI_H_ */
diff --git a/StdLib/Include/Aarch64/machine/bswap.h b/StdLib/Include/Aarch64/machine/bswap.h
deleted file mode 100644
index 142f739dc0..0000000000
--- a/StdLib/Include/Aarch64/machine/bswap.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* $NetBSD: bswap.h,v 1.4 2006/01/31 07:49:18 dsl Exp $ */
-
-/* Written by Manuel Bouyer. Public domain */
-
-#ifndef _MACHINE_BSWAP_H_
-#define _MACHINE_BSWAP_H_
-
-#include <machine/byte_swap.h>
-
-#define __BSWAP_RENAME
-#include <sys/bswap.h>
-
-#endif /* !_MACHINE_BSWAP_H_ */
diff --git a/StdLib/Include/Aarch64/machine/byte_swap.h b/StdLib/Include/Aarch64/machine/byte_swap.h
deleted file mode 100644
index 8e1272c518..0000000000
--- a/StdLib/Include/Aarch64/machine/byte_swap.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*-
- * Copyright (c) 1997, 1999, 2002 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Charles M. Hannum, Neil A. Carson, and Jason R. Thorpe.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _AARCH64_BYTE_SWAP_H_
-#define _AARCH64_BYTE_SWAP_H_
-
-#ifdef __GNUC__
-#include <sys/types.h>
-__BEGIN_DECLS
-
-#define __BYTE_SWAP_U32_VARIABLE __byte_swap_u32_variable
-static __inline uint32_t
-__byte_swap_u32_variable(uint32_t v)
-{
- uint32_t t1;
-
- t1 = v ^ ((v << 16) | (v >> 16));
- t1 &= 0xff00ffffU;
- v = (v >> 8) | (v << 24);
- v ^= (t1 >> 8);
- return (v);
-}
-
-#define __BYTE_SWAP_U16_VARIABLE __byte_swap_u16_variable
-static __inline uint16_t
-__byte_swap_u16_variable(uint16_t v)
-{
-
- v &= 0xffff;
- v = (v >> 8) | (v << 8);
- return (v);
-}
-
-__END_DECLS
-#endif
-
-#endif /* _AARCH64_BYTE_SWAP_H_ */
diff --git a/StdLib/Include/Aarch64/machine/endian.h b/StdLib/Include/Aarch64/machine/endian.h
deleted file mode 100644
index bb53c0ba07..0000000000
--- a/StdLib/Include/Aarch64/machine/endian.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: endian.h,v 1.3 2001/06/23 12:20:27 bjh21 Exp $ */
-
-#include <sys/endian.h>
diff --git a/StdLib/Include/Aarch64/machine/endian_machdep.h b/StdLib/Include/Aarch64/machine/endian_machdep.h
deleted file mode 100644
index 1940786061..0000000000
--- a/StdLib/Include/Aarch64/machine/endian_machdep.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: endian_machdep.h,v 1.8 2006/01/30 21:52:38 dsl Exp $ */
-
-#define _BYTE_ORDER _LITTLE_ENDIAN
diff --git a/StdLib/Include/Aarch64/machine/fenv.h b/StdLib/Include/Aarch64/machine/fenv.h
deleted file mode 100644
index 8e255f56d3..0000000000
--- a/StdLib/Include/Aarch64/machine/fenv.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* $NetBSD: fenv.h,v 1.2 2014/01/29 00:22:09 matt Exp $ */
-
-/*
- * Based on ieeefp.h written by J.T. Conklin, Apr 28, 1995
- * Public domain.
- */
-
-#ifndef _AARCH64_FENV_H_
-#define _AARCH64_FENV_H_
-
-/* AArch64 split FPSCR into two registers FPCR and FPSR */
-typedef struct {
- unsigned int __fpcr;
- unsigned int __fpsr;
-} fenv_t;
-typedef int fexcept_t;
-
-#define FE_INVALID 0x01 /* invalid operation exception */
-#define FE_DIVBYZERO 0x02 /* divide-by-zero exception */
-#define FE_OVERFLOW 0x04 /* overflow exception */
-#define FE_UNDERFLOW 0x08 /* underflow exception */
-#define FE_INEXACT 0x10 /* imprecise (loss of precision; "inexact") */
-
-#define FE_ALL_EXCEPT 0x1f
-
-#define FE_TONEAREST 0 /* round to nearest representable number */
-#define FE_UPWARD 1 /* round toward positive infinity */
-#define FE_DOWNWARD 2 /* round toward negative infinity */
-#define FE_TOWARDZERO 3 /* round to zero (truncate) */
-
-__BEGIN_DECLS
-
-/* Default floating-point environment */
-extern const fenv_t __fe_dfl_env;
-#define FE_DFL_ENV (&__fe_dfl_env)
-
-__END_DECLS
-
-#endif /* _AARCH64_FENV_H_ */
diff --git a/StdLib/Include/Aarch64/machine/float.h b/StdLib/Include/Aarch64/machine/float.h
deleted file mode 100644
index f1da46ca63..0000000000
--- a/StdLib/Include/Aarch64/machine/float.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* $NetBSD: float.h,v 1.6 2005/12/11 12:16:47 christos Exp $ */
-/*-
- * Copyright (c) 2008 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _AARCH64_FLOAT_H_
-#define _AARCH64_FLOAT_H_
-
-#ifndef __VFP_FP__
-#define LDBL_MANT_DIG 64
-#define LDBL_EPSILON 1.0842021724855044340E-19L
-#define LDBL_DIG 18
-#define LDBL_MIN_EXP (-16381)
-#define LDBL_MIN 1.6810515715560467531E-4932L
-#define LDBL_MIN_10_EXP (-4931)
-#define LDBL_MAX_EXP 16384
-#define LDBL_MAX 1.1897314953572317650E+4932L
-#define LDBL_MAX_10_EXP 4932
-#endif
-
-#include <sys/float_ieee754.h>
-
-#ifndef __VFP_FP__
-#if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) && \
- !defined(_XOPEN_SOURCE) || \
- ((__STDC_VERSION__ - 0) >= 199901L) || \
- ((_POSIX_C_SOURCE - 0) >= 200112L) || \
- ((_XOPEN_SOURCE - 0) >= 600) || \
- defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE)
-#define DECIMAL_DIG 21
-#endif /* !defined(_ANSI_SOURCE) && ... */
-#endif /* !__VFP_FP__ */
-
-#endif /* !_AARCH64_FLOAT_H_ */
diff --git a/StdLib/Include/Aarch64/machine/ieee.h b/StdLib/Include/Aarch64/machine/ieee.h
deleted file mode 100644
index 4aa90bd8e6..0000000000
--- a/StdLib/Include/Aarch64/machine/ieee.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* $NetBSD: ieee.h,v 1.9 2005/12/11 12:16:47 christos Exp $ */
-/*-
- * Copyright (c) 2008 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/ieee754.h>
diff --git a/StdLib/Include/Aarch64/machine/ieeefp.h b/StdLib/Include/Aarch64/machine/ieeefp.h
deleted file mode 100644
index f37278b465..0000000000
--- a/StdLib/Include/Aarch64/machine/ieeefp.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* $NetBSD: ieeefp.h,v 1.3 2013/04/23 05:42:23 matt Exp $ */
-
-/*
- * Based on ieeefp.h written by J.T. Conklin, Apr 28, 1995
- * Public domain.
- */
-
-#ifndef _AARCH64_IEEEFP_H_
-#define _AARCH64_IEEEFP_H_
-
-#include <LibConfig.h>
-#include <sys/featuretest.h>
-
-#if defined(_NETBSD_SOURCE) || defined(_ISOC99_SOURCE)
-
-#include <machine/fenv.h>
-
-#if !defined(_ISOC99_SOURCE)
-
-/* Exception type (used by fpsetmask() et al.) */
-
-typedef int fp_except;
-
-/* Bit defines for fp_except */
-
-#define FP_X_INV FE_INVALID /* invalid operation exception */
-#define FP_X_DZ FE_DIVBYZERO /* divide-by-zero exception */
-#define FP_X_OFL FE_OVERFLOW /* overflow exception */
-#define FP_X_UFL FE_UNDERFLOW /* underflow exception */
-#define FP_X_IMP FE_INEXACT /* imprecise (prec. loss; "inexact") */
-
-/* Rounding modes */
-
-typedef enum {
- FP_RN=FE_TONEAREST, /* round to nearest representable number */
- FP_RP=FE_UPWARD, /* round toward positive infinity */
- FP_RM=FE_DOWNWARD, /* round toward negative infinity */
- FP_RZ=FE_TOWARDZERO /* round to zero (truncate) */
-} fp_rnd;
-
-#endif /* !_ISOC99_SOURCE */
-
-#endif /* _NETBSD_SOURCE || _ISOC99_SOURCE */
-
-#endif /* _AARCH64_IEEEFP_H_ */
diff --git a/StdLib/Include/Aarch64/machine/int_const.h b/StdLib/Include/Aarch64/machine/int_const.h
deleted file mode 100644
index 22db5cd023..0000000000
--- a/StdLib/Include/Aarch64/machine/int_const.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* $NetBSD: int_const.h,v 1.1 2001/04/14 22:38:38 kleink Exp $ */
-
-/*-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _AARCH64_INT_CONST_H_
-#define _AARCH64_INT_CONST_H_
-
-/*
- * 7.18.4 Macros for integer constants
- */
-
-/* 7.18.4.1 Macros for minimum-width integer constants */
-
-#define INT8_C(c) c
-#define INT16_C(c) c
-#define INT32_C(c) c
-#define INT64_C(c) c ## LL
-
-#define UINT8_C(c) c ## U
-#define UINT16_C(c) c ## U
-#define UINT32_C(c) c ## U
-#define UINT64_C(c) c ## ULL
-
-/* 7.18.4.2 Macros for greatest-width integer constants */
-
-#define INTMAX_C(c) c ## LL
-#define UINTMAX_C(c) c ## ULL
-
-#endif /* !_AARCH64_INT_CONST_H_ */
diff --git a/StdLib/Include/Aarch64/machine/int_limits.h b/StdLib/Include/Aarch64/machine/int_limits.h
deleted file mode 100644
index 48379a084a..0000000000
--- a/StdLib/Include/Aarch64/machine/int_limits.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/* $NetBSD: int_limits.h,v 1.9 2008/08/29 19:08:29 matt Exp $ */
-
-/*-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _AARCH64_INT_LIMITS_H_
-#define _AARCH64_INT_LIMITS_H_
-
-/*
- * 7.18.2 Limits of specified-width integer types
- */
-
-/* 7.18.2.1 Limits of exact-width integer types */
-
-/* minimum values of exact-width signed integer types */
-#define INT8_MIN (-0x7f-1) /* int8_t */
-#define INT16_MIN (-0x7fff-1) /* int16_t */
-#define INT32_MIN (-0x7fffffff-1) /* int32_t */
-#define INT64_MIN (-0x7fffffffffffffffLL-1) /* int64_t */
-
-/* maximum values of exact-width signed integer types */
-#define INT8_MAX 0x7f /* int8_t */
-#define INT16_MAX 0x7fff /* int16_t */
-#define INT32_MAX 0x7fffffff /* int32_t */
-#define INT64_MAX 0x7fffffffffffffffLL /* int64_t */
-
-/* maximum values of exact-width unsigned integer types */
-#define UINT8_MAX 0xff /* uint8_t */
-#define UINT16_MAX 0xffff /* uint16_t */
-#define UINT32_MAX 0xffffffffU /* uint32_t */
-#define UINT64_MAX 0xffffffffffffffffULL /* uint64_t */
-
-/* 7.18.2.2 Limits of minimum-width integer types */
-
-/* minimum values of minimum-width signed integer types */
-#define INT_LEAST8_MIN (-0x7f-1) /* int_least8_t */
-#define INT_LEAST16_MIN (-0x7fff-1) /* int_least16_t */
-#define INT_LEAST32_MIN (-0x7fffffff-1) /* int_least32_t */
-#define INT_LEAST64_MIN (-0x7fffffffffffffffLL-1) /* int_least64_t */
-
-/* maximum values of minimum-width signed integer types */
-#define INT_LEAST8_MAX 0x7f /* int_least8_t */
-#define INT_LEAST16_MAX 0x7fff /* int_least16_t */
-#define INT_LEAST32_MAX 0x7fffffff /* int_least32_t */
-#define INT_LEAST64_MAX 0x7fffffffffffffffLL /* int_least64_t */
-
-/* maximum values of minimum-width unsigned integer types */
-#define UINT_LEAST8_MAX 0xff /* uint_least8_t */
-#define UINT_LEAST16_MAX 0xffff /* uint_least16_t */
-#define UINT_LEAST32_MAX 0xffffffffU /* uint_least32_t */
-#define UINT_LEAST64_MAX 0xffffffffffffffffULL /* uint_least64_t */
-
-/* 7.18.2.3 Limits of fastest minimum-width integer types */
-
-/* minimum values of fastest minimum-width signed integer types */
-#define INT_FAST8_MIN (-0x7fffffff-1) /* int_fast8_t */
-#define INT_FAST16_MIN (-0x7fffffff-1) /* int_fast16_t */
-#define INT_FAST32_MIN (-0x7fffffff-1) /* int_fast32_t */
-#define INT_FAST64_MIN (-0x7fffffffffffffffLL-1) /* int_fast64_t */
-
-/* maximum values of fastest minimum-width signed integer types */
-#define INT_FAST8_MAX 0x7fffffff /* int_fast8_t */
-#define INT_FAST16_MAX 0x7fffffff /* int_fast16_t */
-#define INT_FAST32_MAX 0x7fffffff /* int_fast32_t */
-#define INT_FAST64_MAX 0x7fffffffffffffffLL /* int_fast64_t */
-
-/* maximum values of fastest minimum-width unsigned integer types */
-#define UINT_FAST8_MAX 0xffffffffU /* uint_fast8_t */
-#define UINT_FAST16_MAX 0xffffffffU /* uint_fast16_t */
-#define UINT_FAST32_MAX 0xffffffffU /* uint_fast32_t */
-#define UINT_FAST64_MAX 0xffffffffffffffffULL /* uint_fast64_t */
-
-/* 7.18.2.4 Limits of integer types capable of holding object pointers */
-
-#define INTPTR_MIN (-0x7fffffffffffffffLL-1) /* intptr_t */
-#define INTPTR_MAX 0x7fffffffffffffffLL /* intptr_t */
-#define UINTPTR_MAX 0xffffffffffffffffULL /* uintptr_t */
-
-/* 7.18.2.5 Limits of greatest-width integer types */
-
-#define INTMAX_MIN (-0x7fffffffffffffffLL-1) /* intmax_t */
-#define INTMAX_MAX 0x7fffffffffffffffLL /* intmax_t */
-#define UINTMAX_MAX 0xffffffffffffffffULL /* uintmax_t */
-
-
-/*
- * 7.18.3 Limits of other integer types
- */
-
-/* limits of ptrdiff_t */
-#define PTRDIFF_MIN (-0x7fffffffffffffffLL-1) /* ptrdiff_t */
-#define PTRDIFF_MAX 0x7fffffffffffffffLL /* ptrdiff_t */
-
-/* limits of sig_atomic_t */
-#define SIG_ATOMIC_MIN (-0x7fffffffffffffffLL-1) /* sig_atomic_t */
-#define SIG_ATOMIC_MAX 0x7fffffffffffffffLL /* sig_atomic_t */
-
-/* limit of size_t */
-#define SIZE_MAX 0xffffffffffffffffULL /* size_t */
-
-#endif /* !_AARCH64_INT_LIMITS_H_ */
diff --git a/StdLib/Include/Aarch64/machine/int_mwgwtypes.h b/StdLib/Include/Aarch64/machine/int_mwgwtypes.h
deleted file mode 100644
index d3a17847a3..0000000000
--- a/StdLib/Include/Aarch64/machine/int_mwgwtypes.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/** @file
- Minimum and Greatest Width Integer types.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Portions Copyright (c) 2001 The NetBSD Foundation, Inc.
- All rights reserved.
-
- This code is derived from software contributed to The NetBSD Foundation
- by Klaus Klein.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. All advertising materials mentioning features or use of this software
- must display the following acknowledgement:
- This product includes software developed by the NetBSD
- Foundation, Inc. and its contributors.
- 4. Neither the name of The NetBSD Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: int_mwgwtypes.h,v 1.5 2005/12/24 20:06:47 perry Exp
-**/
-#ifndef _AARCH64_INT_MWGWTYPES_H_
-#define _AARCH64_INT_MWGWTYPES_H_
-
-/*
- * 7.18.1 Integer types
- */
-
-/* 7.18.1.2 Minimum-width integer types */
-
-typedef CHAR8 int_least8_t;
-typedef UINT8 uint_least8_t;
-typedef INT16 int_least16_t;
-typedef UINT16 uint_least16_t;
-typedef INT32 int_least32_t;
-typedef UINT32 uint_least32_t;
-typedef INT64 int_least64_t;
-typedef UINT64 uint_least64_t;
-
-/* 7.18.1.3 Fastest minimum-width integer types */
-typedef INT32 int_fast8_t;
-typedef UINT32 uint_fast8_t;
-typedef INT32 int_fast16_t;
-typedef UINT32 uint_fast16_t;
-typedef INT32 int_fast32_t;
-typedef UINT32 uint_fast32_t;
-typedef INT64 int_fast64_t;
-typedef UINT64 uint_fast64_t;
-
-/* 7.18.1.5 Greatest-width integer types */
-
-typedef INT64 intmax_t;
-typedef UINT64 uintmax_t;
-
-#endif /* !_AARCH64_INT_MWGWTYPES_H_ */
diff --git a/StdLib/Include/Aarch64/machine/int_types.h b/StdLib/Include/Aarch64/machine/int_types.h
deleted file mode 100644
index 2fafff0ba5..0000000000
--- a/StdLib/Include/Aarch64/machine/int_types.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* $NetBSD: int_types.h,v 1.10 2005/12/24 20:07:10 perry Exp $ */
-
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: @(#)types.h 7.5 (Berkeley) 3/9/91
- */
-
-#ifndef _AARCH64_INT_TYPES_H_
-#define _AARCH64_INT_TYPES_H_
-
-#include <sys/EfiCdefs.h>
-
-/*
- * 7.18.1 Integer types
- */
-
-/* 7.18.1.1 Exact-width integer types */
-
-typedef INT8 __int8_t;
-typedef UINT8 __uint8_t;
-typedef INT16 __int16_t;
-typedef UINT16 __uint16_t;
-typedef INT32 __int32_t;
-typedef UINT32 __uint32_t;
-typedef INT64 __int64_t;
-typedef UINT64 __uint64_t;
-
-#define __BIT_TYPES_DEFINED__
-
-/* 7.18.1.4 Integer types capable of holding object pointers */
-
-typedef INTN __intptr_t;
-typedef UINTN __uintptr_t;
-
-#endif /* !_AARCH64_INT_TYPES_H_ */
diff --git a/StdLib/Include/Aarch64/machine/limits.h b/StdLib/Include/Aarch64/machine/limits.h
deleted file mode 100644
index dec214d465..0000000000
--- a/StdLib/Include/Aarch64/machine/limits.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* $NetBSD: limits.h,v 1.9 2008/08/29 19:08:29 matt Exp $ */
-
-/*
- * Copyright (c) 1988 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: @(#)limits.h 7.2 (Berkeley) 6/28/90
- */
-
-//TODO These values have been chosen during porting with the selection criteria
-//of being different from ARMv7 in the hope of discovering as many bugs as
-//possible as soon as possible. They are NOT authoritative!
-// ... (and should be replaced ASAP with more carefully chosen ones)
-
-#ifndef _AARCH64_LIMITS_H_
-#define _AARCH64_LIMITS_H_
-
-#include <sys/featuretest.h>
-
-#define __CHAR_BIT 8 /* number of bits in a char */
-//#define __MB_LEN_MAX 32 /* no multibyte characters */
-
-#define __SCHAR_MIN (-0x7f-1) /* max value for a signed char */
-#define __SCHAR_MAX 0x7f /* min value for a signed char */
-
-#define __UCHAR_MAX 0xff /* max value for an unsigned char */
-#define __CHAR_MAX 0xff /* max value for a char */
-#define __CHAR_MIN 0 /* min value for a char */
-
-#define __USHRT_MAX 0xffff /* max value for an unsigned short */
-#define __SHRT_MAX 0x7fff /* max value for a short */
-#define __SHRT_MIN (-0x7fff-1) /* min value for a short */
-
-#define __UINT_MAX 0xffffffffU /* max value for an unsigned int */
-#define __INT_MAX 0x7fffffff /* max value for an int */
-#define __INT_MIN (-0x7fffffff-1) /* min value for an int */
-
-#define __ULONG_MAX 0xffffffffffffffffUL /* max value for an unsigned long */
-#define __LONG_MAX 0x7fffffffffffffffL /* max value for a long */
-#define __LONG_MIN (-0x7fffffffffffffffL-1) /* min value for a long */
-
-#if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
- defined(_NETBSD_SOURCE)
-#define SSIZE_MAX LONG_MAX /* max value for a ssize_t */
-
-#if defined(_ISOC99_SOURCE) || (__STDC_VERSION__ - 0) >= 199901L || \
- defined(_NETBSD_SOURCE)
-#define __ULLONG_MAX 0xffffffffffffffffULL /* max unsigned long long */
-#define __LLONG_MAX 0x7fffffffffffffffLL /* max signed long long */
-#define __LLONG_MIN (-0x7fffffffffffffffLL-1) /* min signed long long */
-#endif
-
-#if defined(_NETBSD_SOURCE)
-#define SIZE_T_MAX LONG_MAX /* max value for a size_t */
-
-#define UQUAD_MAX 0xffffffffffffffffLL /* max unsigned quad */
-#define QUAD_MAX 0x7fffffffffffffffLL /* max signed quad */
-#define QUAD_MIN (-0x7fffffffffffffffLL-1) /* min signed quad */
-
-#endif /* _NETBSD_SOURCE */
-#endif /* _POSIX_C_SOURCE || _XOPEN_SOURCE || _NETBSD_SOURCE */
-
-#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
-#define LONG_BIT 64
-#define WORD_BIT 32
-
-#define DBL_DIG 15
-#define DBL_MAX 1.7976931348623157E+308
-#define DBL_MIN 2.2250738585072014E-308
-
-//#define FLT_DIG 6
-//#define FLT_MAX 3.40282347E+38F
-//#define FLT_MIN 1.17549435E-38F
-#endif
-
-#endif /* _AARCH64_LIMITS_H_ */
diff --git a/StdLib/Include/Aarch64/machine/math.h b/StdLib/Include/Aarch64/machine/math.h
deleted file mode 100644
index 35ace3d735..0000000000
--- a/StdLib/Include/Aarch64/machine/math.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: math.h,v 1.2 2002/02/19 13:08:14 simonb Exp $ */
-
-#define __HAVE_NANF
diff --git a/StdLib/Include/Aarch64/machine/param.h b/StdLib/Include/Aarch64/machine/param.h
deleted file mode 100644
index c7700b3ff1..0000000000
--- a/StdLib/Include/Aarch64/machine/param.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/* $NetBSD: param.h,v 1.13 2010/05/06 19:10:26 joerg Exp $ */
-
-/*
- * Copyright (c) 1994,1995 Mark Brinicombe.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the RiscBSD team.
- * 4. The name "RiscBSD" nor the name of the author may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY RISCBSD ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL RISCBSD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _AARCH64_PARAM_H_
-#define _AARCH64_PARAM_H_
-
-// TODO: These were based on the ARMv7 version. Verify that it is correct.
-
-/*
- * Machine dependent constants for all ARM processors
- */
-
-/*
- * For KERNEL code:
- * MACHINE must be defined by the individual port. This is so that
- * uname returns the correct thing, etc.
- *
- * MACHINE_ARCH may be defined by individual ports as a temporary
- * measure while we're finishing the conversion to ELF.
- *
- * For non-KERNEL code:
- * If ELF, MACHINE and MACHINE_ARCH are forced to "arm/armeb".
- */
-
-#if defined(_KERNEL)
-#undef _MACHINE
-#undef MACHINE
-#undef _MACHINE_ARCH
-#undef MACHINE_ARCH
-#define _MACHINE aarch64
-#define MACHINE "aarch64"
-#define _MACHINE_ARCH aarch64
-#define MACHINE_ARCH "aarch64"
-#endif /* !_KERNEL */
-
-#define MID_MACHINE MID_AARCH64
-
-/*
- * Round p (pointer or byte index) up to a correctly-aligned value
- * for all data types (int, long, ...). The result is u_int and
- * must be cast to any desired pointer type.
- *
- * ALIGNED_POINTER is a boolean macro that checks whether an address
- * is valid to fetch data elements of type t from on this architecture.
- * This does not reflect the optimal alignment, just the possibility
- * (within reasonable limits).
- *
- */
-#define ALIGNBYTES (sizeof(int) - 1)
-#define ALIGN(p) (((u_int)(p) + ALIGNBYTES) &~ ALIGNBYTES)
-#define ALIGNED_POINTER(p,t) ((((u_long)(p)) & (sizeof(t)-1)) == 0)
-/* ARM-specific macro to align a stack pointer (downwards). */
-#define STACKALIGNBYTES (8 - 1)
-#define STACKALIGN(p) ((u_int)(p) &~ STACKALIGNBYTES)
-
-#define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */
-#define DEV_BSIZE (1 << DEV_BSHIFT)
-#define BLKDEV_IOSIZE 2048
-
-#ifndef MAXPHYS
-#define MAXPHYS 65536 /* max I/O transfer size */
-#endif
-
-/*
- * Constants related to network buffer management.
- * MCLBYTES must be no larger than NBPG (the software page size), and,
- * on machines that exchange pages of input or output buffers with mbuf
- * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple
- * of the hardware page size.
- */
-#define MSIZE 256 /* size of an mbuf */
-
-#ifndef MCLSHIFT
-#define MCLSHIFT 11 /* convert bytes to m_buf clusters */
- /* 2K cluster can hold Ether frame */
-#endif /* MCLSHIFT */
-
-#define MCLBYTES (1 << MCLSHIFT) /* size of a m_buf cluster */
-
-#ifndef NMBCLUSTERS_MAX
-#define NMBCLUSTERS_MAX (0x2000000 / MCLBYTES) /* Limit to 64MB for clusters */
-#endif
-
-/*
- * Compatibility /dev/zero mapping.
- */
-#ifdef _KERNEL
-#ifdef COMPAT_16
-#define COMPAT_ZERODEV(x) (x == makedev(0, _DEV_ZERO_oARM))
-#endif
-#endif /* _KERNEL */
-
-#endif /* _AARCH64_PARAM_H_ */
diff --git a/StdLib/Include/Aarch64/machine/signal.h b/StdLib/Include/Aarch64/machine/signal.h
deleted file mode 100644
index 6628eb9e94..0000000000
--- a/StdLib/Include/Aarch64/machine/signal.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
-Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-This program and the accompanying materials are licensed and made available under
-the terms and conditions of the BSD License that accompanies this distribution.
-The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php.
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#ifndef _MACHINE_SIGNAL_H
-#define _MACHINE_SIGNAL_H
-#include <sys/EfiCdefs.h>
-
-/** The type sig_atomic_t is the (possibly volatile-qualified) integer type of
- an object that can be accessed as an atomic entity, even in the presence
- of asynchronous interrupts.
-**/
-typedef INTN sig_atomic_t;
-
-#endif /* _MACHINE_SIGNAL_H */
diff --git a/StdLib/Include/Aarch64/machine/types.h b/StdLib/Include/Aarch64/machine/types.h
deleted file mode 100644
index a59d5be087..0000000000
--- a/StdLib/Include/Aarch64/machine/types.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/** @file
- Machine dependent type definitions.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990 The Regents of the University of California.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- types.h 7.5 (Berkeley) 3/9/91
- NetBSD: types.h,v 1.49 2006/09/03 13:51:23 bjh21 Exp
-**/
-#ifndef _MACHTYPES_H_
-#define _MACHTYPES_H_
-
-#include <sys/EfiCdefs.h>
-#include <sys/featuretest.h>
-#include <machine/int_types.h>
-
-/* Handle the long and unsigned long data types which EFI doesn't directly support. */
-//typedef INTN LONGN;
-//typedef UINTN ULONGN;
-
-typedef PHYSICAL_ADDRESS paddr_t;
-typedef UINT64 psize_t;
-typedef PHYSICAL_ADDRESS vaddr_t;
-typedef UINT64 vsize_t;
-
-typedef INT32 pmc_evid_t;
-typedef UINT64 pmc_ctr_t;
-typedef INT32 register_t;
-
-typedef volatile INT32 __cpu_simple_lock_t;
-
-#define __SIMPLELOCK_LOCKED 1
-#define __SIMPLELOCK_UNLOCKED 0
-
-/* The ARMv7 does not have strict alignment requirements. */
-#define __NO_STRICT_ALIGNMENT
-//TODO: Fixme for the ARM architecture that requires strict alignment
-
-#define __HAVE_DEVICE_REGISTER
-#define __HAVE_CPU_COUNTER
-#define __HAVE_SYSCALL_INTERN
-#define __HAVE_MINIMAL_EMUL
-#define __HAVE_OLD_DISKLABEL
-#define __HAVE_GENERIC_SOFT_INTERRUPTS
-#define __HAVE_CPU_MAXPROC
-#define __HAVE_TIMECOUNTER
-#define __HAVE_GENERIC_TODR
-
-#endif /* _MACHTYPES_H_ */
diff --git a/StdLib/Include/Aarch64/milieu.h b/StdLib/Include/Aarch64/milieu.h
deleted file mode 100644
index 73643bfb45..0000000000
--- a/StdLib/Include/Aarch64/milieu.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* $NetBSD: milieu.h,v 1.1 2000/12/29 20:13:54 bjh21 Exp $ */
-
-/*
-===============================================================================
-
-This C header file is part of the SoftFloat IEC/IEEE Floating-point
-Arithmetic Package, Release 2a.
-
-Written by John R. Hauser. This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704. Funding was partially provided by the
-National Science Foundation under grant MIP-9311980. The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-/*
--------------------------------------------------------------------------------
-Include common integer types and flags.
--------------------------------------------------------------------------------
-*/
-#include "arm-gcc.h"
-
-
-// Used by profiler.
-#if 0
-/*
--------------------------------------------------------------------------------
-Symbolic Boolean literals.
--------------------------------------------------------------------------------
-*/
-enum {
- FALSE = 0,
- TRUE = 1
-};
-#endif
diff --git a/StdLib/Include/Aarch64/softfloat.h b/StdLib/Include/Aarch64/softfloat.h
deleted file mode 100644
index c290657d9e..0000000000
--- a/StdLib/Include/Aarch64/softfloat.h
+++ /dev/null
@@ -1,316 +0,0 @@
-/* $NetBSD: softfloat.h,v 1.10 2013/04/24 18:04:46 matt Exp $ */
-
-/* This is a derivative work. */
-
-/*
-===============================================================================
-
-This C header file is part of the SoftFloat IEC/IEEE Floating-point
-Arithmetic Package, Release 2a.
-
-Written by John R. Hauser. This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704. Funding was partially provided by the
-National Science Foundation under grant MIP-9311980. The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-/*
--------------------------------------------------------------------------------
-The macro `FLOATX80' must be defined to enable the extended double-precision
-floating-point format `floatx80'. If this macro is not defined, the
-`floatx80' type will not be defined, and none of the functions that either
-input or output the `floatx80' type will be defined. The same applies to
-the `FLOAT128' macro and the quadruple-precision format `float128'.
--------------------------------------------------------------------------------
-*/
-/* #define FLOATX80 */
-#define FLOAT128
-
-#include <stdint.h>
-#include <machine/ieeefp.h>
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE floating-point types.
--------------------------------------------------------------------------------
-*/
-typedef unsigned int float32;
-typedef unsigned long long float64;
-#ifdef FLOATX80
-typedef struct {
- unsigned short high;
- unsigned long long low;
-} floatx80;
-#endif
-#ifdef FLOAT128
-typedef struct {
- unsigned long long high, low;
-} float128;
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE floating-point underflow tininess-detection mode.
--------------------------------------------------------------------------------
-*/
-#ifndef SOFTFLOAT_FOR_GCC
-extern int float_detect_tininess;
-#endif
-enum {
- float_tininess_after_rounding = 0,
- float_tininess_before_rounding = 1
-};
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE floating-point rounding mode.
--------------------------------------------------------------------------------
-*/
-extern fp_rnd float_rounding_mode;
-#define float_round_nearest_even FP_RN
-#define float_round_to_zero FP_RZ
-#define float_round_down FP_RM
-#define float_round_up FP_RP
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE floating-point exception flags.
--------------------------------------------------------------------------------
-*/
-extern fp_except float_exception_flags;
-extern fp_except float_exception_mask;
-enum {
- float_flag_inexact = FP_X_IMP,
- float_flag_underflow = FP_X_UFL,
- float_flag_overflow = FP_X_OFL,
- float_flag_divbyzero = FP_X_DZ,
- float_flag_invalid = FP_X_INV
-};
-
-/*
--------------------------------------------------------------------------------
-Routine to raise any or all of the software IEC/IEEE floating-point
-exception flags.
--------------------------------------------------------------------------------
-*/
-void float_raise( fp_except );
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE integer-to-floating-point conversion routines.
--------------------------------------------------------------------------------
-*/
-float32 int32_to_float32( int32 );
-float32 uint32_to_float32( uint32 );
-float64 int32_to_float64( int32 );
-float64 uint32_to_float64( uint32 );
-#ifdef FLOATX80
-floatx80 int32_to_floatx80( int32 );
-floatx80 uint32_to_floatx80( uint32 );
-#endif
-#ifdef FLOAT128
-float128 int32_to_float128( int32 );
-float128 uint32_to_float128( uint32 );
-#endif
-#ifndef SOFTFLOAT_FOR_GCC /* __floatdi?f is in libgcc2.c */
-float32 int64_to_float32( long long );
-float64 int64_to_float64( long long );
-#ifdef FLOATX80
-floatx80 int64_to_floatx80( long long );
-#endif
-#ifdef FLOAT128
-float128 int64_to_float128( long long );
-#endif
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE single-precision conversion routines.
--------------------------------------------------------------------------------
-*/
-int float32_to_int32( float32 );
-int float32_to_int32_round_to_zero( float32 );
-#if defined(SOFTFLOAT_FOR_GCC) && defined(SOFTFLOAT_NEED_FIXUNS)
-unsigned int float32_to_uint32_round_to_zero( float32 );
-#endif
-#ifndef SOFTFLOAT_FOR_GCC /* __fix?fdi provided by libgcc2.c */
-long long float32_to_int64( float32 );
-long long float32_to_int64_round_to_zero( float32 );
-#endif
-float64 float32_to_float64( float32 );
-#ifdef FLOATX80
-floatx80 float32_to_floatx80( float32 );
-#endif
-#ifdef FLOAT128
-float128 float32_to_float128( float32 );
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE single-precision operations.
--------------------------------------------------------------------------------
-*/
-float32 float32_round_to_int( float32 );
-float32 float32_add( float32, float32 );
-float32 float32_sub( float32, float32 );
-float32 float32_mul( float32, float32 );
-float32 float32_div( float32, float32 );
-float32 float32_rem( float32, float32 );
-float32 float32_sqrt( float32 );
-int float32_eq( float32, float32 );
-int float32_le( float32, float32 );
-int float32_lt( float32, float32 );
-int float32_eq_signaling( float32, float32 );
-int float32_le_quiet( float32, float32 );
-int float32_lt_quiet( float32, float32 );
-#ifndef SOFTFLOAT_FOR_GCC
-int float32_is_signaling_nan( float32 );
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE double-precision conversion routines.
--------------------------------------------------------------------------------
-*/
-int float64_to_int32( float64 );
-int float64_to_int32_round_to_zero( float64 );
-#if defined(SOFTFLOAT_FOR_GCC) && defined(SOFTFLOAT_NEED_FIXUNS)
-unsigned int float64_to_uint32_round_to_zero( float64 );
-#endif
-#ifndef SOFTFLOAT_FOR_GCC /* __fix?fdi provided by libgcc2.c */
-long long float64_to_int64( float64 );
-long long float64_to_int64_round_to_zero( float64 );
-#endif
-float32 float64_to_float32( float64 );
-#ifdef FLOATX80
-floatx80 float64_to_floatx80( float64 );
-#endif
-#ifdef FLOAT128
-float128 float64_to_float128( float64 );
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE double-precision operations.
--------------------------------------------------------------------------------
-*/
-float64 float64_round_to_int( float64 );
-float64 float64_add( float64, float64 );
-float64 float64_sub( float64, float64 );
-float64 float64_mul( float64, float64 );
-float64 float64_div( float64, float64 );
-float64 float64_rem( float64, float64 );
-float64 float64_sqrt( float64 );
-int float64_eq( float64, float64 );
-int float64_le( float64, float64 );
-int float64_lt( float64, float64 );
-int float64_eq_signaling( float64, float64 );
-int float64_le_quiet( float64, float64 );
-int float64_lt_quiet( float64, float64 );
-#ifndef SOFTFLOAT_FOR_GCC
-int float64_is_signaling_nan( float64 );
-#endif
-
-#ifdef FLOATX80
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE extended double-precision conversion routines.
--------------------------------------------------------------------------------
-*/
-int floatx80_to_int32( floatx80 );
-int floatx80_to_int32_round_to_zero( floatx80 );
-long long floatx80_to_int64( floatx80 );
-long long floatx80_to_int64_round_to_zero( floatx80 );
-float32 floatx80_to_float32( floatx80 );
-float64 floatx80_to_float64( floatx80 );
-#ifdef FLOAT128
-float128 floatx80_to_float128( floatx80 );
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE extended double-precision rounding precision. Valid
-values are 32, 64, and 80.
--------------------------------------------------------------------------------
-*/
-extern int floatx80_rounding_precision;
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE extended double-precision operations.
--------------------------------------------------------------------------------
-*/
-floatx80 floatx80_round_to_int( floatx80 );
-floatx80 floatx80_add( floatx80, floatx80 );
-floatx80 floatx80_sub( floatx80, floatx80 );
-floatx80 floatx80_mul( floatx80, floatx80 );
-floatx80 floatx80_div( floatx80, floatx80 );
-floatx80 floatx80_rem( floatx80, floatx80 );
-floatx80 floatx80_sqrt( floatx80 );
-int floatx80_eq( floatx80, floatx80 );
-int floatx80_le( floatx80, floatx80 );
-int floatx80_lt( floatx80, floatx80 );
-int floatx80_eq_signaling( floatx80, floatx80 );
-int floatx80_le_quiet( floatx80, floatx80 );
-int floatx80_lt_quiet( floatx80, floatx80 );
-int floatx80_is_signaling_nan( floatx80 );
-
-#endif
-
-#ifdef FLOAT128
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE quadruple-precision conversion routines.
--------------------------------------------------------------------------------
-*/
-int float128_to_int32( float128 );
-int float128_to_int32_round_to_zero( float128 );
-long long float128_to_int64( float128 );
-long long float128_to_int64_round_to_zero( float128 );
-float32 float128_to_float32( float128 );
-float64 float128_to_float64( float128 );
-#ifdef FLOATX80
-floatx80 float128_to_floatx80( float128 );
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE quadruple-precision operations.
--------------------------------------------------------------------------------
-*/
-float128 float128_round_to_int( float128 );
-float128 float128_add( float128, float128 );
-float128 float128_sub( float128, float128 );
-float128 float128_mul( float128, float128 );
-float128 float128_div( float128, float128 );
-float128 float128_rem( float128, float128 );
-float128 float128_sqrt( float128 );
-int float128_eq( float128, float128 );
-int float128_le( float128, float128 );
-int float128_lt( float128, float128 );
-int float128_eq_signaling( float128, float128 );
-int float128_le_quiet( float128, float128 );
-int float128_lt_quiet( float128, float128 );
-int float128_is_signaling_nan( float128 );
-
-#endif
diff --git a/StdLib/Include/Arm/arm-gcc.h b/StdLib/Include/Arm/arm-gcc.h
deleted file mode 100644
index 8cd4989998..0000000000
--- a/StdLib/Include/Arm/arm-gcc.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/** @file
-
- Copyright (c) 2014, ARM Limited. All rights reserved.
-
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-/* $NetBSD: arm-gcc.h,v 1.4 2013/01/26 07:08:14 matt Exp $ */
-
-/*
--------------------------------------------------------------------------------
-One of the macros `BIGENDIAN' or `LITTLEENDIAN' must be defined.
--------------------------------------------------------------------------------
-*/
-#ifdef __ARMEB__
-#define BIGENDIAN
-#else
-#define LITTLEENDIAN
-#endif
-
-/*
--------------------------------------------------------------------------------
-The macro `BITS64' can be defined to indicate that 64-bit integer types are
-supported by the compiler.
--------------------------------------------------------------------------------
-*/
-#define BITS64
-
-/*
--------------------------------------------------------------------------------
-Each of the following `typedef's defines the most convenient type that holds
-integers of at least as many bits as specified. For example, `uint8' should
-be the most convenient type that can hold unsigned integers of as many as
-8 bits. The `flag' type must be able to hold either a 0 or 1. For most
-implementations of C, `flag', `uint8', and `int8' should all be `typedef'ed
-to the same as `int'.
--------------------------------------------------------------------------------
-*/
-typedef int flag;
-typedef int uint8;
-typedef int int8;
-typedef int uint16;
-typedef int int16;
-typedef unsigned int uint32;
-typedef signed int int32;
-#ifdef BITS64
-typedef unsigned long long int uint64;
-typedef signed long long int int64;
-#endif
-
-/*
--------------------------------------------------------------------------------
-Each of the following `typedef's defines a type that holds integers
-of _exactly_ the number of bits specified. For instance, for most
-implementation of C, `bits16' and `sbits16' should be `typedef'ed to
-`unsigned short int' and `signed short int' (or `short int'), respectively.
--------------------------------------------------------------------------------
-*/
-typedef unsigned char bits8;
-typedef signed char sbits8;
-typedef unsigned short int bits16;
-typedef signed short int sbits16;
-typedef unsigned int bits32;
-typedef signed int sbits32;
-#ifdef BITS64
-typedef unsigned long long int bits64;
-typedef signed long long int sbits64;
-#endif
-
-#ifdef BITS64
-/*
--------------------------------------------------------------------------------
-The `LIT64' macro takes as its argument a textual integer literal and
-if necessary ``marks'' the literal as having a 64-bit integer type.
-For example, the GNU C Compiler (`gcc') requires that 64-bit literals be
-appended with the letters `LL' standing for `long long', which is `gcc's
-name for the 64-bit integer type. Some compilers may allow `LIT64' to be
-defined as the identity macro: `#define LIT64( a ) a'.
--------------------------------------------------------------------------------
-*/
-#define LIT64( a ) a##ULL
-#endif
-
-/*
--------------------------------------------------------------------------------
-The macro `INLINE' can be used before functions that should be inlined. If
-a compiler does not support explicit inlining, this macro should be defined
-to be `static'.
--------------------------------------------------------------------------------
-*/
-#define INLINE static inline
-
-/*
--------------------------------------------------------------------------------
-The ARM FPA is odd in that it stores doubles high-order word first, no matter
-what the endianness of the CPU. VFP is sane.
--------------------------------------------------------------------------------
-*/
-#if defined(SOFTFLOAT_FOR_GCC)
-#if defined(__VFP_FP__) || defined(__ARMEB__)
-#define FLOAT64_DEMANGLE(a) (a)
-#define FLOAT64_MANGLE(a) (a)
-#else
-#define FLOAT64_DEMANGLE(a) (((a) << 32) | ((a) >> 32))
-#define FLOAT64_MANGLE(a) FLOAT64_DEMANGLE(a)
-#endif
-#endif
diff --git a/StdLib/Include/Arm/machine/_math.h b/StdLib/Include/Arm/machine/_math.h
deleted file mode 100644
index 67cf98c30d..0000000000
--- a/StdLib/Include/Arm/machine/_math.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
-
-Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-This program and the accompanying materials are licensed and made available under
-the terms and conditions of the BSD License that accompanies this distribution.
-The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php.
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#ifndef _MACHINE_MATH_H
-#define _MACHINE_MATH_H
-
-//#define __HUGE_VAL ???????????.?????????????
-
-#endif /* _MACHINE_MATH_H */
diff --git a/StdLib/Include/Arm/machine/ansi.h b/StdLib/Include/Arm/machine/ansi.h
deleted file mode 100644
index 8273905cd3..0000000000
--- a/StdLib/Include/Arm/machine/ansi.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/** @file
- Machine dependent ANSI type definitions.
-
- Copyright (c) 2010-2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: @(#)ansi.h 8.2 (Berkeley) 1/4/94
- NetBSD: ansi.h,v 1.7 2006/10/04 13:51:59 tnozaki Exp
-**/
-#ifndef _ANSI_H_
-#define _ANSI_H_
-
-#include <sys/EfiCdefs.h>
-
-#include <machine/int_types.h>
-
-/*
- * Types which are fundamental to the implementation and may appear in
- * more than one standard header are defined here. Standard headers
- * then use:
- * #ifdef _BSD_SIZE_T_
- * typedef _BSD_SIZE_T_ size_t;
- * #undef _BSD_SIZE_T_
- * #endif
- */
-#define _BSD_CLOCK_T_ _EFI_CLOCK_T /* clock() */
-#define _BSD_PTRDIFF_T_ _EFI_PTRDIFF_T_ /* ptr1 - ptr2 */
-#define _BSD_SIZE_T_ _EFI_SIZE_T_ /* sizeof() */
-#define _BSD_SSIZE_T_ INTN /* byte count or error */
-#define _BSD_TIME_T_ _EFI_TIME_T /* time() */
-#define _BSD_VA_LIST_ VA_LIST
-#define _BSD_CLOCKID_T_ INT64 /* clockid_t */
-#define _BSD_TIMER_T_ INT64 /* timer_t */
-#define _BSD_SUSECONDS_T_ INT64 /* suseconds_t */
-#define _BSD_USECONDS_T_ UINT64 /* useconds_t */
-
-/*
- * NOTE: rune_t is not covered by ANSI nor other standards, and should not
- * be instantiated outside of lib/libc/locale. use wchar_t.
- *
- * Runes (wchar_t) is declared to be an ``int'' instead of the more natural
- * ``unsigned long'' or ``long''. Two things are happening here. It is not
- * unsigned so that EOF (-1) can be naturally assigned to it and used. Also,
- * it looks like 10646 will be a 31 bit standard. This means that if your
- * ints cannot hold 32 bits, you will be in trouble. The reason an int was
- * chosen over a long is that the is*() and to*() routines take ints (says
- * ANSI C), but they use _RUNE_T_ instead of int. By changing it here, you
- * lose a bit of ANSI conformance, but your programs will still work.
- *
- * Note that _WCHAR_T_ and _RUNE_T_ must be of the same type. When wchar_t
- * and rune_t are typedef'd, _WCHAR_T_ will be undef'd, but _RUNE_T remains
- * defined for ctype.h.
- */
-#define _BSD_WCHAR_T_ _EFI_WCHAR_T /* wchar_t */
-#define _BSD_WINT_T_ _EFI_WINT_T /* wint_t */
-#define _BSD_RUNE_T_ _EFI_WCHAR_T /* rune_t */
-#define _BSD_WCTRANS_T_ void * /* wctrans_t */
-#define _BSD_WCTYPE_T_ unsigned int /* wctype_t */
-
-/*
- * mbstate_t is an opaque object to keep conversion state, during multibyte
- * stream conversions. The content must not be referenced by user programs.
- */
-typedef struct {
- UINT32 A; // Np;
- UINT32 B; // U;
- UINT32 E; // L
- UINT8 C[4]; // n[4]
- UINT16 D[2]; // w[2]
-} __mbstate_t;
-#define _BSD_MBSTATE_T_ __mbstate_t /* mbstate_t */
-
-#endif /* _ANSI_H_ */
diff --git a/StdLib/Include/Arm/machine/asm.h b/StdLib/Include/Arm/machine/asm.h
deleted file mode 100644
index b15698eb9f..0000000000
--- a/StdLib/Include/Arm/machine/asm.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/* $NetBSD: asm.h,v 1.8 2006/01/20 22:02:40 christos Exp $ */
-
-/*
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: @(#)asm.h 5.5 (Berkeley) 5/7/91
- */
-
-#ifndef _ARM32_ASM_H_
-#define _ARM32_ASM_H_
-
-#ifdef __ELF__
-# define _C_LABEL(x) x
-#else
-# ifdef __STDC__
-# define _C_LABEL(x) _ ## x
-# else
-# define _C_LABEL(x) _/**/x
-# endif
-#endif
-#define _ASM_LABEL(x) x
-
-#ifdef __STDC__
-# define __CONCAT(x,y) x ## y
-# define __STRING(x) #x
-#else
-# define __CONCAT(x,y) x/**/y
-# define __STRING(x) "x"
-#endif
-
-#ifndef _ALIGN_TEXT
-# define _ALIGN_TEXT .align 0
-#endif
-
-/*
- * gas/arm uses @ as a single comment character and thus cannot be used here
- * Instead it recognised the # instead of an @ symbols in .type directives
- * We define a couple of macros so that assembly code will not be dependant
- * on one or the other.
- */
-#define _ASM_TYPE_FUNCTION #function
-#define _ASM_TYPE_OBJECT #object
-#define _ENTRY(x) \
- .text; _ALIGN_TEXT; .globl x; .type x,_ASM_TYPE_FUNCTION; x:
-
-#ifdef GPROF
-# ifdef __ELF__
-# define _PROF_PROLOGUE \
- mov ip, lr; bl __mcount
-# else
-# define _PROF_PROLOGUE \
- mov ip,lr; bl mcount
-# endif
-#else
-# define _PROF_PROLOGUE
-#endif
-
-#define ENTRY(y) _ENTRY(_C_LABEL(y)); _PROF_PROLOGUE
-#define ENTRY_NP(y) _ENTRY(_C_LABEL(y))
-#define ASENTRY(y) _ENTRY(_ASM_LABEL(y)); _PROF_PROLOGUE
-#define ASENTRY_NP(y) _ENTRY(_ASM_LABEL(y))
-
-#define ASMSTR .asciz
-
-#if defined(__ELF__) && defined(PIC)
-#ifdef __STDC__
-#define PIC_SYM(x,y) x ## ( ## y ## )
-#else
-#define PIC_SYM(x,y) x/**/(/**/y/**/)
-#endif
-#else
-#define PIC_SYM(x,y) x
-#endif
-
-#ifdef __ELF__
-#define RCSID(x) .section ".ident"; .asciz x
-#else
-#define RCSID(x) .text; .asciz x
-#endif
-
-#ifdef __ELF__
-#define WEAK_ALIAS(alias,sym) \
- .weak alias; \
- alias = sym
-#endif
-
-/*
- * STRONG_ALIAS: create a strong alias.
- */
-#define STRONG_ALIAS(alias,sym) \
- .globl alias; \
- alias = sym
-
-#ifdef __STDC__
-#define WARN_REFERENCES(sym,msg) \
- .stabs msg ## ,30,0,0,0 ; \
- .stabs __STRING(_C_LABEL(sym)) ## ,1,0,0,0
-#elif defined(__ELF__)
-#define WARN_REFERENCES(sym,msg) \
- .stabs msg,30,0,0,0 ; \
- .stabs __STRING(sym),1,0,0,0
-#else
-#define WARN_REFERENCES(sym,msg) \
- .stabs msg,30,0,0,0 ; \
- .stabs __STRING(_/**/sym),1,0,0,0
-#endif /* __STDC__ */
-
-#if defined (__ARM_ARCH_6__) || defined (__ARM_ARCH_6J__)
-#define _ARM_ARCH_6
-#endif
-
-#if defined (_ARM_ARCH_6) || defined (__ARM_ARCH_5__) || \
- defined (__ARM_ARCH_5T__) || defined (__ARM_ARCH_5TE__) || \
- defined (__ARM_ARCH_5TEJ__)
-#define _ARM_ARCH_5
-#endif
-
-#if defined (_ARM_ARCH_5) || defined (__ARM_ARCH_4T__)
-#define _ARM_ARCH_4T
-#endif
-
-
-#if defined (_ARM_ARCH_4T)
-# define RET bx lr
-# ifdef __STDC__
-# define RETc(c) bx##c lr
-# else
-# define RETc(c) bx/**/c lr
-# endif
-#else
-# define RET mov pc, lr
-# ifdef __STDC__
-# define RETc(c) mov##c pc, lr
-# else
-# define RETc(c) mov/**/c pc, lr
-# endif
-#endif
-
-#endif /* !_ARM_ASM_H_ */
diff --git a/StdLib/Include/Arm/machine/atomic.h b/StdLib/Include/Arm/machine/atomic.h
deleted file mode 100644
index ffd83c7375..0000000000
--- a/StdLib/Include/Arm/machine/atomic.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* $NetBSD: atomic.h,v 1.5 2005/12/28 19:09:29 perry Exp $ */
-
-/*
- * Copyright (C) 1994-1997 Mark Brinicombe
- * Copyright (C) 1994 Brini
- * All rights reserved.
- *
- * This code is derived from software written for Brini by Mark Brinicombe
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Brini.
- * 4. The name of Brini may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY BRINI ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL BRINI BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _ARM_ATOMIC_H_
-#define _ARM_ATOMIC_H_
-
-#ifndef ATOMIC_SET_BIT_NONINLINE_REQUIRED
-
-#if defined(__PROG26) || defined(ATOMIC_SET_BIT_NOINLINE)
-#define ATOMIC_SET_BIT_NONINLINE_REQUIRED
-#endif
-
-#endif /* ATOMIC_SET_BIT_NONINLINE_REQUIRED */
-
-
-#ifndef _LOCORE
-
-#include <sys/types.h>
-#include <arm/armreg.h> /* I32_bit */
-
-#ifdef ATOMIC_SET_BIT_NONINLINE_REQUIRED
-void atomic_set_bit( u_int *, u_int );
-void atomic_clear_bit( u_int *, u_int );
-#endif
-
-#ifdef __PROG32
-#define __with_interrupts_disabled(expr) \
- do { \
- u_int cpsr_save, tmp; \
- \
- __asm volatile( \
- "mrs %0, cpsr;" \
- "orr %1, %0, %2;" \
- "msr cpsr_all, %1;" \
- : "=r" (cpsr_save), "=r" (tmp) \
- : "I" (I32_bit) \
- : "cc" ); \
- (expr); \
- __asm volatile( \
- "msr cpsr_all, %0" \
- : /* no output */ \
- : "r" (cpsr_save) \
- : "cc" ); \
- } while(0)
-
-static __inline void
-inline_atomic_set_bit( u_int *address, u_int setmask )
-{
- __with_interrupts_disabled( *address |= setmask );
-}
-
-static __inline void
-inline_atomic_clear_bit( u_int *address, u_int clearmask )
-{
- __with_interrupts_disabled( *address &= ~clearmask );
-}
-
-#if !defined(ATOMIC_SET_BIT_NOINLINE)
-
-#define atomic_set_bit(a,m) inline_atomic_set_bit(a,m)
-#define atomic_clear_bit(a,m) inline_atomic_clear_bit(a,m)
-
-#endif
-
-#endif /* __PROG32 */
-
-#undef __with_interrupts_disabled
-
-#endif /* _LOCORE */
-#endif /* _ARM_ATOMIC_H_ */
diff --git a/StdLib/Include/Arm/machine/bswap.h b/StdLib/Include/Arm/machine/bswap.h
deleted file mode 100644
index b486b373f3..0000000000
--- a/StdLib/Include/Arm/machine/bswap.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* $NetBSD: bswap.h,v 1.4 2006/01/31 07:49:18 dsl Exp $ */
-
-#ifndef _MACHINE_BSWAP_H_
-#define _MACHINE_BSWAP_H_
-
-#include <machine/byte_swap.h>
-
-#define __BSWAP_RENAME
-#include <sys/bswap.h>
-
-#endif /* !_MACHINE_BSWAP_H_ */
diff --git a/StdLib/Include/Arm/machine/byte_swap.h b/StdLib/Include/Arm/machine/byte_swap.h
deleted file mode 100644
index 2a0264599f..0000000000
--- a/StdLib/Include/Arm/machine/byte_swap.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*-
- * Copyright (c) 1997, 1999, 2002 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Charles M. Hannum, Neil A. Carson, and Jason R. Thorpe.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _ARM_BYTE_SWAP_H_
-#define _ARM_BYTE_SWAP_H_
-
-#ifdef __GNUC__
-#include <sys/types.h>
-__BEGIN_DECLS
-
-#define __BYTE_SWAP_U32_VARIABLE __byte_swap_u32_variable
-static __inline uint32_t
-__byte_swap_u32_variable(uint32_t v)
-{
- uint32_t t1;
-
- t1 = v ^ ((v << 16) | (v >> 16));
- t1 &= 0xff00ffffU;
- v = (v >> 8) | (v << 24);
- v ^= (t1 >> 8);
- return (v);
-}
-
-#define __BYTE_SWAP_U16_VARIABLE __byte_swap_u16_variable
-static __inline uint16_t
-__byte_swap_u16_variable(uint16_t v)
-{
-
- v &= 0xffff;
- v = (v >> 8) | (v << 8);
- return (v);
-}
-
-__END_DECLS
-#endif
-
-#endif /* _ARM_BYTE_SWAP_H_ */
diff --git a/StdLib/Include/Arm/machine/cpufunc.h b/StdLib/Include/Arm/machine/cpufunc.h
deleted file mode 100644
index c94a30a9e7..0000000000
--- a/StdLib/Include/Arm/machine/cpufunc.h
+++ /dev/null
@@ -1,558 +0,0 @@
-/* $NetBSD: cpufunc.h,v 1.37.24.1 2007/02/21 18:36:02 snj Exp $ */
-
-/*
- * Copyright (c) 1997 Mark Brinicombe.
- * Copyright (c) 1997 Causality Limited
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Causality Limited.
- * 4. The name of Causality Limited may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY CAUSALITY LIMITED ``AS IS'' AND ANY EXPRESS
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL CAUSALITY LIMITED BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * RiscBSD kernel project
- *
- * cpufunc.h
- *
- * Prototypes for cpu, mmu and tlb related functions.
- */
-
-#ifndef _ARM32_CPUFUNC_H_
-#define _ARM32_CPUFUNC_H_
-
-#ifdef _KERNEL
-
-#include <sys/types.h>
-#include <arm/cpuconf.h>
-
-struct cpu_functions {
-
- /* CPU functions */
-
- u_int (*cf_id) __P((void));
- void (*cf_cpwait) __P((void));
-
- /* MMU functions */
-
- u_int (*cf_control) __P((u_int, u_int));
- void (*cf_domains) __P((u_int));
- void (*cf_setttb) __P((u_int));
- u_int (*cf_faultstatus) __P((void));
- u_int (*cf_faultaddress) __P((void));
-
- /* TLB functions */
-
- void (*cf_tlb_flushID) __P((void));
- void (*cf_tlb_flushID_SE) __P((u_int));
- void (*cf_tlb_flushI) __P((void));
- void (*cf_tlb_flushI_SE) __P((u_int));
- void (*cf_tlb_flushD) __P((void));
- void (*cf_tlb_flushD_SE) __P((u_int));
-
- /*
- * Cache operations:
- *
- * We define the following primitives:
- *
- * icache_sync_all Synchronize I-cache
- * icache_sync_range Synchronize I-cache range
- *
- * dcache_wbinv_all Write-back and Invalidate D-cache
- * dcache_wbinv_range Write-back and Invalidate D-cache range
- * dcache_inv_range Invalidate D-cache range
- * dcache_wb_range Write-back D-cache range
- *
- * idcache_wbinv_all Write-back and Invalidate D-cache,
- * Invalidate I-cache
- * idcache_wbinv_range Write-back and Invalidate D-cache,
- * Invalidate I-cache range
- *
- * Note that the ARM term for "write-back" is "clean". We use
- * the term "write-back" since it's a more common way to describe
- * the operation.
- *
- * There are some rules that must be followed:
- *
- * I-cache Synch (all or range):
- * The goal is to synchronize the instruction stream,
- * so you may beed to write-back dirty D-cache blocks
- * first. If a range is requested, and you can't
- * synchronize just a range, you have to hit the whole
- * thing.
- *
- * D-cache Write-Back and Invalidate range:
- * If you can't WB-Inv a range, you must WB-Inv the
- * entire D-cache.
- *
- * D-cache Invalidate:
- * If you can't Inv the D-cache, you must Write-Back
- * and Invalidate. Code that uses this operation
- * MUST NOT assume that the D-cache will not be written
- * back to memory.
- *
- * D-cache Write-Back:
- * If you can't Write-back without doing an Inv,
- * that's fine. Then treat this as a WB-Inv.
- * Skipping the invalidate is merely an optimization.
- *
- * All operations:
- * Valid virtual addresses must be passed to each
- * cache operation.
- */
- void (*cf_icache_sync_all) __P((void));
- void (*cf_icache_sync_range) __P((vaddr_t, vsize_t));
-
- void (*cf_dcache_wbinv_all) __P((void));
- void (*cf_dcache_wbinv_range) __P((vaddr_t, vsize_t));
- void (*cf_dcache_inv_range) __P((vaddr_t, vsize_t));
- void (*cf_dcache_wb_range) __P((vaddr_t, vsize_t));
-
- void (*cf_idcache_wbinv_all) __P((void));
- void (*cf_idcache_wbinv_range) __P((vaddr_t, vsize_t));
-
- /* Other functions */
-
- void (*cf_flush_prefetchbuf) __P((void));
- void (*cf_drain_writebuf) __P((void));
- void (*cf_flush_brnchtgt_C) __P((void));
- void (*cf_flush_brnchtgt_E) __P((u_int));
-
- void (*cf_sleep) __P((int mode));
-
- /* Soft functions */
-
- int (*cf_dataabt_fixup) __P((void *));
- int (*cf_prefetchabt_fixup) __P((void *));
-
- void (*cf_context_switch) __P((void));
-
- void (*cf_setup) __P((char *));
-};
-
-extern struct cpu_functions cpufuncs;
-extern u_int cputype;
-
-#define cpu_id() cpufuncs.cf_id()
-#define cpu_cpwait() cpufuncs.cf_cpwait()
-
-#define cpu_control(c, e) cpufuncs.cf_control(c, e)
-#define cpu_domains(d) cpufuncs.cf_domains(d)
-#define cpu_setttb(t) cpufuncs.cf_setttb(t)
-#define cpu_faultstatus() cpufuncs.cf_faultstatus()
-#define cpu_faultaddress() cpufuncs.cf_faultaddress()
-
-#define cpu_tlb_flushID() cpufuncs.cf_tlb_flushID()
-#define cpu_tlb_flushID_SE(e) cpufuncs.cf_tlb_flushID_SE(e)
-#define cpu_tlb_flushI() cpufuncs.cf_tlb_flushI()
-#define cpu_tlb_flushI_SE(e) cpufuncs.cf_tlb_flushI_SE(e)
-#define cpu_tlb_flushD() cpufuncs.cf_tlb_flushD()
-#define cpu_tlb_flushD_SE(e) cpufuncs.cf_tlb_flushD_SE(e)
-
-#define cpu_icache_sync_all() cpufuncs.cf_icache_sync_all()
-#define cpu_icache_sync_range(a, s) cpufuncs.cf_icache_sync_range((a), (s))
-
-#define cpu_dcache_wbinv_all() cpufuncs.cf_dcache_wbinv_all()
-#define cpu_dcache_wbinv_range(a, s) cpufuncs.cf_dcache_wbinv_range((a), (s))
-#define cpu_dcache_inv_range(a, s) cpufuncs.cf_dcache_inv_range((a), (s))
-#define cpu_dcache_wb_range(a, s) cpufuncs.cf_dcache_wb_range((a), (s))
-
-#define cpu_idcache_wbinv_all() cpufuncs.cf_idcache_wbinv_all()
-#define cpu_idcache_wbinv_range(a, s) cpufuncs.cf_idcache_wbinv_range((a), (s))
-
-#define cpu_flush_prefetchbuf() cpufuncs.cf_flush_prefetchbuf()
-#define cpu_drain_writebuf() cpufuncs.cf_drain_writebuf()
-#define cpu_flush_brnchtgt_C() cpufuncs.cf_flush_brnchtgt_C()
-#define cpu_flush_brnchtgt_E(e) cpufuncs.cf_flush_brnchtgt_E(e)
-
-#define cpu_sleep(m) cpufuncs.cf_sleep(m)
-
-#define cpu_dataabt_fixup(a) cpufuncs.cf_dataabt_fixup(a)
-#define cpu_prefetchabt_fixup(a) cpufuncs.cf_prefetchabt_fixup(a)
-#define ABORT_FIXUP_OK 0 /* fixup succeeded */
-#define ABORT_FIXUP_FAILED 1 /* fixup failed */
-#define ABORT_FIXUP_RETURN 2 /* abort handler should return */
-
-#define cpu_setup(a) cpufuncs.cf_setup(a)
-
-int set_cpufuncs __P((void));
-#define ARCHITECTURE_NOT_PRESENT 1 /* known but not configured */
-#define ARCHITECTURE_NOT_SUPPORTED 2 /* not known */
-
-void cpufunc_nullop __P((void));
-int cpufunc_null_fixup __P((void *));
-int early_abort_fixup __P((void *));
-int late_abort_fixup __P((void *));
-u_int cpufunc_id __P((void));
-u_int cpufunc_control __P((u_int, u_int));
-void cpufunc_domains __P((u_int));
-u_int cpufunc_faultstatus __P((void));
-u_int cpufunc_faultaddress __P((void));
-
-#ifdef CPU_ARM3
-u_int arm3_control __P((u_int, u_int));
-void arm3_cache_flush __P((void));
-#endif /* CPU_ARM3 */
-
-#if defined(CPU_ARM6) || defined(CPU_ARM7)
-void arm67_setttb __P((u_int));
-void arm67_tlb_flush __P((void));
-void arm67_tlb_purge __P((u_int));
-void arm67_cache_flush __P((void));
-void arm67_context_switch __P((void));
-#endif /* CPU_ARM6 || CPU_ARM7 */
-
-#ifdef CPU_ARM6
-void arm6_setup __P((char *));
-#endif /* CPU_ARM6 */
-
-#ifdef CPU_ARM7
-void arm7_setup __P((char *));
-#endif /* CPU_ARM7 */
-
-#ifdef CPU_ARM7TDMI
-int arm7_dataabt_fixup __P((void *));
-void arm7tdmi_setup __P((char *));
-void arm7tdmi_setttb __P((u_int));
-void arm7tdmi_tlb_flushID __P((void));
-void arm7tdmi_tlb_flushID_SE __P((u_int));
-void arm7tdmi_cache_flushID __P((void));
-void arm7tdmi_context_switch __P((void));
-#endif /* CPU_ARM7TDMI */
-
-#ifdef CPU_ARM8
-void arm8_setttb __P((u_int));
-void arm8_tlb_flushID __P((void));
-void arm8_tlb_flushID_SE __P((u_int));
-void arm8_cache_flushID __P((void));
-void arm8_cache_flushID_E __P((u_int));
-void arm8_cache_cleanID __P((void));
-void arm8_cache_cleanID_E __P((u_int));
-void arm8_cache_purgeID __P((void));
-void arm8_cache_purgeID_E __P((u_int entry));
-
-void arm8_cache_syncI __P((void));
-void arm8_cache_cleanID_rng __P((vaddr_t, vsize_t));
-void arm8_cache_cleanD_rng __P((vaddr_t, vsize_t));
-void arm8_cache_purgeID_rng __P((vaddr_t, vsize_t));
-void arm8_cache_purgeD_rng __P((vaddr_t, vsize_t));
-void arm8_cache_syncI_rng __P((vaddr_t, vsize_t));
-
-void arm8_context_switch __P((void));
-
-void arm8_setup __P((char *));
-
-u_int arm8_clock_config __P((u_int, u_int));
-#endif
-
-#ifdef CPU_SA110
-void sa110_setup __P((char *));
-void sa110_context_switch __P((void));
-#endif /* CPU_SA110 */
-
-#if defined(CPU_SA1100) || defined(CPU_SA1110)
-void sa11x0_drain_readbuf __P((void));
-
-void sa11x0_context_switch __P((void));
-void sa11x0_cpu_sleep __P((int));
-
-void sa11x0_setup __P((char *));
-#endif
-
-#if defined(CPU_SA110) || defined(CPU_SA1100) || defined(CPU_SA1110)
-void sa1_setttb __P((u_int));
-
-void sa1_tlb_flushID_SE __P((u_int));
-
-void sa1_cache_flushID __P((void));
-void sa1_cache_flushI __P((void));
-void sa1_cache_flushD __P((void));
-void sa1_cache_flushD_SE __P((u_int));
-
-void sa1_cache_cleanID __P((void));
-void sa1_cache_cleanD __P((void));
-void sa1_cache_cleanD_E __P((u_int));
-
-void sa1_cache_purgeID __P((void));
-void sa1_cache_purgeID_E __P((u_int));
-void sa1_cache_purgeD __P((void));
-void sa1_cache_purgeD_E __P((u_int));
-
-void sa1_cache_syncI __P((void));
-void sa1_cache_cleanID_rng __P((vaddr_t, vsize_t));
-void sa1_cache_cleanD_rng __P((vaddr_t, vsize_t));
-void sa1_cache_purgeID_rng __P((vaddr_t, vsize_t));
-void sa1_cache_purgeD_rng __P((vaddr_t, vsize_t));
-void sa1_cache_syncI_rng __P((vaddr_t, vsize_t));
-
-#endif
-
-#ifdef CPU_ARM9
-void arm9_setttb __P((u_int));
-
-void arm9_tlb_flushID_SE __P((u_int));
-
-void arm9_icache_sync_all __P((void));
-void arm9_icache_sync_range __P((vaddr_t, vsize_t));
-
-void arm9_dcache_wbinv_all __P((void));
-void arm9_dcache_wbinv_range __P((vaddr_t, vsize_t));
-void arm9_dcache_inv_range __P((vaddr_t, vsize_t));
-void arm9_dcache_wb_range __P((vaddr_t, vsize_t));
-
-void arm9_idcache_wbinv_all __P((void));
-void arm9_idcache_wbinv_range __P((vaddr_t, vsize_t));
-
-void arm9_context_switch __P((void));
-
-void arm9_setup __P((char *));
-
-extern unsigned arm9_dcache_sets_max;
-extern unsigned arm9_dcache_sets_inc;
-extern unsigned arm9_dcache_index_max;
-extern unsigned arm9_dcache_index_inc;
-#endif
-
-#if defined(CPU_ARM9E) || defined(CPU_ARM10)
-void arm10_tlb_flushID_SE __P((u_int));
-void arm10_tlb_flushI_SE __P((u_int));
-
-void arm10_context_switch __P((void));
-
-void arm10_setup __P((char *));
-#endif
-
-#ifdef CPU_ARM11
-void arm11_setttb __P((u_int));
-
-void arm11_tlb_flushID_SE __P((u_int));
-void arm11_tlb_flushI_SE __P((u_int));
-
-void arm11_context_switch __P((void));
-
-void arm11_setup __P((char *string));
-void arm11_tlb_flushID __P((void));
-void arm11_tlb_flushI __P((void));
-void arm11_tlb_flushD __P((void));
-void arm11_tlb_flushD_SE __P((u_int va));
-
-void arm11_drain_writebuf __P((void));
-#endif
-
-#if defined(CPU_ARM9E) || defined (CPU_ARM10)
-void armv5_ec_setttb __P((u_int));
-
-void armv5_ec_icache_sync_all __P((void));
-void armv5_ec_icache_sync_range __P((vaddr_t, vsize_t));
-
-void armv5_ec_dcache_wbinv_all __P((void));
-void armv5_ec_dcache_wbinv_range __P((vaddr_t, vsize_t));
-void armv5_ec_dcache_inv_range __P((vaddr_t, vsize_t));
-void armv5_ec_dcache_wb_range __P((vaddr_t, vsize_t));
-
-void armv5_ec_idcache_wbinv_all __P((void));
-void armv5_ec_idcache_wbinv_range __P((vaddr_t, vsize_t));
-#endif
-
-#if defined (CPU_ARM10) || defined (CPU_ARM11)
-void armv5_setttb __P((u_int));
-
-void armv5_icache_sync_all __P((void));
-void armv5_icache_sync_range __P((vaddr_t, vsize_t));
-
-void armv5_dcache_wbinv_all __P((void));
-void armv5_dcache_wbinv_range __P((vaddr_t, vsize_t));
-void armv5_dcache_inv_range __P((vaddr_t, vsize_t));
-void armv5_dcache_wb_range __P((vaddr_t, vsize_t));
-
-void armv5_idcache_wbinv_all __P((void));
-void armv5_idcache_wbinv_range __P((vaddr_t, vsize_t));
-
-extern unsigned armv5_dcache_sets_max;
-extern unsigned armv5_dcache_sets_inc;
-extern unsigned armv5_dcache_index_max;
-extern unsigned armv5_dcache_index_inc;
-#endif
-
-#if defined(CPU_ARM9) || defined(CPU_ARM9E) || defined(CPU_ARM10) || \
- defined(CPU_SA110) || defined(CPU_SA1100) || defined(CPU_SA1110) || \
- defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
- defined(__CPU_XSCALE_PXA2XX) || defined(CPU_XSCALE_IXP425)
-
-void armv4_tlb_flushID __P((void));
-void armv4_tlb_flushI __P((void));
-void armv4_tlb_flushD __P((void));
-void armv4_tlb_flushD_SE __P((u_int));
-
-void armv4_drain_writebuf __P((void));
-#endif
-
-#if defined(CPU_IXP12X0)
-void ixp12x0_drain_readbuf __P((void));
-void ixp12x0_context_switch __P((void));
-void ixp12x0_setup __P((char *));
-#endif
-
-#if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
- defined(__CPU_XSCALE_PXA2XX) || defined(CPU_XSCALE_IXP425)
-void xscale_cpwait __P((void));
-
-void xscale_cpu_sleep __P((int));
-
-u_int xscale_control __P((u_int, u_int));
-
-void xscale_setttb __P((u_int));
-
-void xscale_tlb_flushID_SE __P((u_int));
-
-void xscale_cache_flushID __P((void));
-void xscale_cache_flushI __P((void));
-void xscale_cache_flushD __P((void));
-void xscale_cache_flushD_SE __P((u_int));
-
-void xscale_cache_cleanID __P((void));
-void xscale_cache_cleanD __P((void));
-void xscale_cache_cleanD_E __P((u_int));
-
-void xscale_cache_clean_minidata __P((void));
-
-void xscale_cache_purgeID __P((void));
-void xscale_cache_purgeID_E __P((u_int));
-void xscale_cache_purgeD __P((void));
-void xscale_cache_purgeD_E __P((u_int));
-
-void xscale_cache_syncI __P((void));
-void xscale_cache_cleanID_rng __P((vaddr_t, vsize_t));
-void xscale_cache_cleanD_rng __P((vaddr_t, vsize_t));
-void xscale_cache_purgeID_rng __P((vaddr_t, vsize_t));
-void xscale_cache_purgeD_rng __P((vaddr_t, vsize_t));
-void xscale_cache_syncI_rng __P((vaddr_t, vsize_t));
-void xscale_cache_flushD_rng __P((vaddr_t, vsize_t));
-
-void xscale_context_switch __P((void));
-
-void xscale_setup __P((char *));
-#endif /* CPU_XSCALE_80200 || CPU_XSCALE_80321 || __CPU_XSCALE_PXA2XX || CPU_XSCALE_IXP425 */
-
-#define tlb_flush cpu_tlb_flushID
-#define setttb cpu_setttb
-#define drain_writebuf cpu_drain_writebuf
-
-/*
- * Macros for manipulating CPU interrupts
- */
-#ifdef __PROG32
-static __inline u_int32_t __set_cpsr_c(u_int bic, u_int eor) __attribute__((__unused__));
-
-static __inline u_int32_t
-__set_cpsr_c(u_int bic, u_int eor)
-{
- u_int32_t tmp, ret;
-
- __asm volatile(
- "mrs %0, cpsr\n" /* Get the CPSR */
- "bic %1, %0, %2\n" /* Clear bits */
- "eor %1, %1, %3\n" /* XOR bits */
- "msr cpsr_c, %1\n" /* Set the control field of CPSR */
- : "=&r" (ret), "=&r" (tmp)
- : "r" (bic), "r" (eor) : "memory");
-
- return ret;
-}
-
-#define disable_interrupts(mask) \
- (__set_cpsr_c((mask) & (I32_bit | F32_bit), \
- (mask) & (I32_bit | F32_bit)))
-
-#define enable_interrupts(mask) \
- (__set_cpsr_c((mask) & (I32_bit | F32_bit), 0))
-
-#define restore_interrupts(old_cpsr) \
- (__set_cpsr_c((I32_bit | F32_bit), (old_cpsr) & (I32_bit | F32_bit)))
-#else /* ! __PROG32 */
-#define disable_interrupts(mask) \
- (set_r15((mask) & (R15_IRQ_DISABLE | R15_FIQ_DISABLE), \
- (mask) & (R15_IRQ_DISABLE | R15_FIQ_DISABLE)))
-
-#define enable_interrupts(mask) \
- (set_r15((mask) & (R15_IRQ_DISABLE | R15_FIQ_DISABLE), 0))
-
-#define restore_interrupts(old_r15) \
- (set_r15((R15_IRQ_DISABLE | R15_FIQ_DISABLE), \
- (old_r15) & (R15_IRQ_DISABLE | R15_FIQ_DISABLE)))
-#endif /* __PROG32 */
-
-#ifdef __PROG32
-/* Functions to manipulate the CPSR. */
-u_int SetCPSR(u_int, u_int);
-u_int GetCPSR(void);
-#else
-/* Functions to manipulate the processor control bits in r15. */
-u_int set_r15(u_int, u_int);
-u_int get_r15(void);
-#endif /* __PROG32 */
-
-/*
- * Functions to manipulate cpu r13
- * (in arm/arm32/setstack.S)
- */
-
-void set_stackptr __P((u_int, u_int));
-u_int get_stackptr __P((u_int));
-
-/*
- * Miscellany
- */
-
-int get_pc_str_offset __P((void));
-
-/*
- * CPU functions from locore.S
- */
-
-void cpu_reset __P((void)) __attribute__((__noreturn__));
-
-/*
- * Cache info variables.
- */
-
-/* PRIMARY CACHE VARIABLES */
-extern int arm_picache_size;
-extern int arm_picache_line_size;
-extern int arm_picache_ways;
-
-extern int arm_pdcache_size; /* and unified */
-extern int arm_pdcache_line_size;
-extern int arm_pdcache_ways;
-
-extern int arm_pcache_type;
-extern int arm_pcache_unified;
-
-extern int arm_dcache_align;
-extern int arm_dcache_align_mask;
-
-#endif /* _KERNEL */
-#endif /* _ARM32_CPUFUNC_H_ */
-
-/* End of cpufunc.h */
diff --git a/StdLib/Include/Arm/machine/endian.h b/StdLib/Include/Arm/machine/endian.h
deleted file mode 100644
index bb53c0ba07..0000000000
--- a/StdLib/Include/Arm/machine/endian.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: endian.h,v 1.3 2001/06/23 12:20:27 bjh21 Exp $ */
-
-#include <sys/endian.h>
diff --git a/StdLib/Include/Arm/machine/endian_machdep.h b/StdLib/Include/Arm/machine/endian_machdep.h
deleted file mode 100644
index abe2b406ed..0000000000
--- a/StdLib/Include/Arm/machine/endian_machdep.h
+++ /dev/null
@@ -1,8 +0,0 @@
-/* $NetBSD: endian_machdep.h,v 1.8 2006/01/30 21:52:38 dsl Exp $ */
-
-/* GCC predefines __ARMEB__ when building for big-endian ARM. */
-#ifdef __ARMEB__
-#define _BYTE_ORDER _BIG_ENDIAN
-#else
-#define _BYTE_ORDER _LITTLE_ENDIAN
-#endif
diff --git a/StdLib/Include/Arm/machine/fenv.h b/StdLib/Include/Arm/machine/fenv.h
deleted file mode 100644
index cdca48c094..0000000000
--- a/StdLib/Include/Arm/machine/fenv.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* $NetBSD: fenv.h,v 1.2 2014/01/29 00:22:09 matt Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
- /*
- * Based on ieeefp.h written by J.T. Conklin, Apr 28, 1995
- * Public domain.
- */
-
-#ifndef _ARM_FENV_H_
-#define _ARM_FENV_H_
-
-#ifdef __ARM_PCS_AAPCS64
-/* AArch64 split FPSCR into two registers FPCR and FPSR */
-typedef struct {
- unsigned int __fpcr;
- unsigned int __fpsr;
-} fenv_t;
-#else
-typedef int fenv_t; /* FPSCR */
-#endif
-typedef int fexcept_t;
-
-#define FE_INVALID 0x01 /* invalid operation exception */
-#define FE_DIVBYZERO 0x02 /* divide-by-zero exception */
-#define FE_OVERFLOW 0x04 /* overflow exception */
-#define FE_UNDERFLOW 0x08 /* underflow exception */
-#define FE_INEXACT 0x10 /* imprecise (loss of precision; "inexact") */
-
-#define FE_ALL_EXCEPT 0x1f
-
-#define FE_TONEAREST 0 /* round to nearest representable number */
-#define FE_UPWARD 1 /* round toward positive infinity */
-#define FE_DOWNWARD 2 /* round toward negative infinity */
-#define FE_TOWARDZERO 3 /* round to zero (truncate) */
-
-__BEGIN_DECLS
-
-/* Default floating-point environment */
-extern const fenv_t __fe_dfl_env;
-#define FE_DFL_ENV (&__fe_dfl_env)
-
-__END_DECLS
-
-#endif /* _ARM_FENV_H_ */
diff --git a/StdLib/Include/Arm/machine/float.h b/StdLib/Include/Arm/machine/float.h
deleted file mode 100644
index 4bd79b3a3d..0000000000
--- a/StdLib/Include/Arm/machine/float.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* $NetBSD: float.h,v 1.6 2005/12/11 12:16:47 christos Exp $ */
-
-#ifndef _ARM_FLOAT_H_
-#define _ARM_FLOAT_H_
-
-#ifndef __VFP_FP__
-#define LDBL_MANT_DIG 64
-#define LDBL_EPSILON 1.0842021724855044340E-19L
-#define LDBL_DIG 18
-#define LDBL_MIN_EXP (-16381)
-#define LDBL_MIN 1.6810515715560467531E-4932L
-#define LDBL_MIN_10_EXP (-4931)
-#define LDBL_MAX_EXP 16384
-#define LDBL_MAX 1.1897314953572317650E+4932L
-#define LDBL_MAX_10_EXP 4932
-#endif
-
-#include <sys/float_ieee754.h>
-
-#ifndef __VFP_FP__
-#if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) && \
- !defined(_XOPEN_SOURCE) || \
- ((__STDC_VERSION__ - 0) >= 199901L) || \
- ((_POSIX_C_SOURCE - 0) >= 200112L) || \
- ((_XOPEN_SOURCE - 0) >= 600) || \
- defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE)
-#define DECIMAL_DIG 21
-#endif /* !defined(_ANSI_SOURCE) && ... */
-#endif /* !__VFP_FP__ */
-
-#endif /* !_ARM_FLOAT_H_ */
diff --git a/StdLib/Include/Arm/machine/frame.h b/StdLib/Include/Arm/machine/frame.h
deleted file mode 100644
index 1037a9ff8d..0000000000
--- a/StdLib/Include/Arm/machine/frame.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* $NetBSD: frame.h,v 1.8 2005/12/11 12:16:47 christos Exp $ */
-
-/*
- * Copyright (c) 1994-1997 Mark Brinicombe.
- * Copyright (c) 1994 Brini.
- * All rights reserved.
- *
- * This code is derived from software written for Brini by Mark Brinicombe
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Brini.
- * 4. The name of the company nor the name of the author may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY BRINI ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL BRINI OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-/*
- * arm/frame.h - Stack frames structures common to arm26 and arm32
- */
-
-#ifndef _ARM_FRAME_H_
-#define _ARM_FRAME_H_
-
-#ifndef _LOCORE
-
-#include <sys/signal.h>
-#include <sys/sa.h>
-#include <sys/ucontext.h>
-
-/*
- * Trap frame. Pushed onto the kernel stack on a trap (synchronous exception).
- */
-
-typedef struct trapframe {
- register_t tf_spsr; /* Zero on arm26 */
- register_t tf_r0;
- register_t tf_r1;
- register_t tf_r2;
- register_t tf_r3;
- register_t tf_r4;
- register_t tf_r5;
- register_t tf_r6;
- register_t tf_r7;
- register_t tf_r8;
- register_t tf_r9;
- register_t tf_r10;
- register_t tf_r11;
- register_t tf_r12;
- register_t tf_usr_sp;
- register_t tf_usr_lr;
- register_t tf_svc_sp; /* Not used on arm26 */
- register_t tf_svc_lr; /* Not used on arm26 */
- register_t tf_pc;
-} trapframe_t;
-
-/* Register numbers */
-#define tf_r13 tf_usr_sp
-#define tf_r14 tf_usr_lr
-#define tf_r15 tf_pc
-
-/*
- * Signal frame. Pushed onto user stack before calling sigcode.
- */
-#ifdef COMPAT_16
-struct sigframe_sigcontext {
- struct sigcontext sf_sc;
-};
-#endif
-
-/* the pointers are use in the trampoline code to locate the ucontext */
-struct sigframe_siginfo {
- siginfo_t sf_si; /* actual saved siginfo */
- ucontext_t sf_uc; /* actual saved ucontext */
-};
-
-/*
- * Scheduler activations upcall frame. Pushed onto user stack before
- * calling an SA upcall.
- */
-
-struct saframe {
-#if 0 /* in registers on entry to upcall */
- int sa_type;
- struct sa_t ** sa_sas;
- int sa_events;
- int sa_interrupted;
-#endif
- void * sa_arg;
-};
-
-#ifdef _KERNEL
-__BEGIN_DECLS
-void sendsig_sigcontext(const ksiginfo_t *, const sigset_t *);
-void *getframe(struct lwp *, int, int *);
-__END_DECLS
-#define process_frame(l) ((l)->l_addr->u_pcb.pcb_tf)
-#endif
-
-#endif /* _LOCORE */
-
-#endif /* _ARM_FRAME_H_ */
-
-/* End of frame.h */
diff --git a/StdLib/Include/Arm/machine/ieee.h b/StdLib/Include/Arm/machine/ieee.h
deleted file mode 100644
index 5e6b4d9165..0000000000
--- a/StdLib/Include/Arm/machine/ieee.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* $NetBSD: ieee.h,v 1.9 2005/12/11 12:16:47 christos Exp $ */
-
-#include <sys/ieee754.h>
-
-/*
- * A NaN is a `signalling NaN' if its QUIETNAN bit is clear in its
- * high fraction; if the bit is set, it is a `quiet NaN'.
- */
-
-#if 0
-#define SNG_QUIETNAN (1 << 22)
-#define DBL_QUIETNAN (1 << 19)
-#endif
diff --git a/StdLib/Include/Arm/machine/ieeefp.h b/StdLib/Include/Arm/machine/ieeefp.h
deleted file mode 100644
index c3de5ef726..0000000000
--- a/StdLib/Include/Arm/machine/ieeefp.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* $NetBSD: ieeefp.h,v 1.3 2013/04/23 05:42:23 matt Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Based on ieeefp.h written by J.T. Conklin, Apr 28, 1995
- * Public domain.
- */
-
-#ifndef _ARM_IEEEFP_H_
-#define _ARM_IEEEFP_H_
-
-#include <LibConfig.h>
-#include <sys/featuretest.h>
-
-#if defined(_NETBSD_SOURCE) || defined(_ISOC99_SOURCE)
-
-//#include <arm/fenv.h>
-#include <machine/fenv.h>
-
-#if !defined(_ISOC99_SOURCE)
-
-/* Exception type (used by fpsetmask() et al.) */
-
-typedef int fp_except;
-
-/* Bit defines for fp_except */
-
-#define FP_X_INV FE_INVALID /* invalid operation exception */
-#define FP_X_DZ FE_DIVBYZERO /* divide-by-zero exception */
-#define FP_X_OFL FE_OVERFLOW /* overflow exception */
-#define FP_X_UFL FE_UNDERFLOW /* underflow exception */
-#define FP_X_IMP FE_INEXACT /* imprecise (prec. loss; "inexact") */
-
-/* Rounding modes */
-
-typedef enum {
- FP_RN=FE_TONEAREST, /* round to nearest representable number */
- FP_RP=FE_UPWARD, /* round toward positive infinity */
- FP_RM=FE_DOWNWARD, /* round toward negative infinity */
- FP_RZ=FE_TOWARDZERO /* round to zero (truncate) */
-} fp_rnd;
-
-#endif /* !_ISOC99_SOURCE */
-
-#endif /* _NETBSD_SOURCE || _ISOC99_SOURCE */
-
-#endif /* _ARM_IEEEFP_H_ */
diff --git a/StdLib/Include/Arm/machine/int_const.h b/StdLib/Include/Arm/machine/int_const.h
deleted file mode 100644
index f3a22f61c6..0000000000
--- a/StdLib/Include/Arm/machine/int_const.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* $NetBSD: int_const.h,v 1.1 2001/04/14 22:38:38 kleink Exp $ */
-
-/*-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _ARM_INT_CONST_H_
-#define _ARM_INT_CONST_H_
-
-/*
- * 7.18.4 Macros for integer constants
- */
-
-/* 7.18.4.1 Macros for minimum-width integer constants */
-
-#define INT8_C(c) c
-#define INT16_C(c) c
-#define INT32_C(c) c
-#define INT64_C(c) c ## LL
-
-#define UINT8_C(c) c ## U
-#define UINT16_C(c) c ## U
-#define UINT32_C(c) c ## U
-#define UINT64_C(c) c ## ULL
-
-/* 7.18.4.2 Macros for greatest-width integer constants */
-
-#define INTMAX_C(c) c ## LL
-#define UINTMAX_C(c) c ## ULL
-
-#endif /* !_ARM_INT_CONST_H_ */
diff --git a/StdLib/Include/Arm/machine/int_limits.h b/StdLib/Include/Arm/machine/int_limits.h
deleted file mode 100644
index c15eb7feb0..0000000000
--- a/StdLib/Include/Arm/machine/int_limits.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/* $NetBSD: int_limits.h,v 1.9 2008/08/29 19:08:29 matt Exp $ */
-
-/*-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _ARM_INT_LIMITS_H_
-#define _ARM_INT_LIMITS_H_
-
-/*
- * 7.18.2 Limits of specified-width integer types
- */
-
-/* 7.18.2.1 Limits of exact-width integer types */
-
-/* minimum values of exact-width signed integer types */
-#define INT8_MIN (-0x7f-1) /* int8_t */
-#define INT16_MIN (-0x7fff-1) /* int16_t */
-#define INT32_MIN (-0x7fffffff-1) /* int32_t */
-#define INT64_MIN (-0x7fffffffffffffffLL-1) /* int64_t */
-
-/* maximum values of exact-width signed integer types */
-#define INT8_MAX 0x7f /* int8_t */
-#define INT16_MAX 0x7fff /* int16_t */
-#define INT32_MAX 0x7fffffff /* int32_t */
-#define INT64_MAX 0x7fffffffffffffffLL /* int64_t */
-
-/* maximum values of exact-width unsigned integer types */
-#define UINT8_MAX 0xff /* uint8_t */
-#define UINT16_MAX 0xffff /* uint16_t */
-#define UINT32_MAX 0xffffffffU /* uint32_t */
-#define UINT64_MAX 0xffffffffffffffffULL /* uint64_t */
-
-/* 7.18.2.2 Limits of minimum-width integer types */
-
-/* minimum values of minimum-width signed integer types */
-#define INT_LEAST8_MIN (-0x7f-1) /* int_least8_t */
-#define INT_LEAST16_MIN (-0x7fff-1) /* int_least16_t */
-#define INT_LEAST32_MIN (-0x7fffffff-1) /* int_least32_t */
-#define INT_LEAST64_MIN (-0x7fffffffffffffffLL-1) /* int_least64_t */
-
-/* maximum values of minimum-width signed integer types */
-#define INT_LEAST8_MAX 0x7f /* int_least8_t */
-#define INT_LEAST16_MAX 0x7fff /* int_least16_t */
-#define INT_LEAST32_MAX 0x7fffffff /* int_least32_t */
-#define INT_LEAST64_MAX 0x7fffffffffffffffLL /* int_least64_t */
-
-/* maximum values of minimum-width unsigned integer types */
-#define UINT_LEAST8_MAX 0xff /* uint_least8_t */
-#define UINT_LEAST16_MAX 0xffff /* uint_least16_t */
-#define UINT_LEAST32_MAX 0xffffffffU /* uint_least32_t */
-#define UINT_LEAST64_MAX 0xffffffffffffffffULL /* uint_least64_t */
-
-/* 7.18.2.3 Limits of fastest minimum-width integer types */
-
-/* minimum values of fastest minimum-width signed integer types */
-#define INT_FAST8_MIN (-0x7fffffff-1) /* int_fast8_t */
-#define INT_FAST16_MIN (-0x7fffffff-1) /* int_fast16_t */
-#define INT_FAST32_MIN (-0x7fffffff-1) /* int_fast32_t */
-#define INT_FAST64_MIN (-0x7fffffffffffffffLL-1) /* int_fast64_t */
-
-/* maximum values of fastest minimum-width signed integer types */
-#define INT_FAST8_MAX 0x7fffffff /* int_fast8_t */
-#define INT_FAST16_MAX 0x7fffffff /* int_fast16_t */
-#define INT_FAST32_MAX 0x7fffffff /* int_fast32_t */
-#define INT_FAST64_MAX 0x7fffffffffffffffLL /* int_fast64_t */
-
-/* maximum values of fastest minimum-width unsigned integer types */
-#define UINT_FAST8_MAX 0xffffffffU /* uint_fast8_t */
-#define UINT_FAST16_MAX 0xffffffffU /* uint_fast16_t */
-#define UINT_FAST32_MAX 0xffffffffU /* uint_fast32_t */
-#define UINT_FAST64_MAX 0xffffffffffffffffULL /* uint_fast64_t */
-
-/* 7.18.2.4 Limits of integer types capable of holding object pointers */
-
-#define INTPTR_MIN (-0x7fffffffL-1) /* intptr_t */
-#define INTPTR_MAX 0x7fffffffL /* intptr_t */
-#define UINTPTR_MAX 0xffffffffUL /* uintptr_t */
-
-/* 7.18.2.5 Limits of greatest-width integer types */
-
-#define INTMAX_MIN (-0x7fffffffffffffffLL-1) /* intmax_t */
-#define INTMAX_MAX 0x7fffffffffffffffLL /* intmax_t */
-#define UINTMAX_MAX 0xffffffffffffffffULL /* uintmax_t */
-
-
-/*
- * 7.18.3 Limits of other integer types
- */
-
-/* limits of ptrdiff_t */
-#define PTRDIFF_MIN (-0x7fffffffL-1) /* ptrdiff_t */
-#define PTRDIFF_MAX 0x7fffffffL /* ptrdiff_t */
-
-/* limits of sig_atomic_t */
-#define SIG_ATOMIC_MIN (-0x7fffffff-1) /* sig_atomic_t */
-#define SIG_ATOMIC_MAX 0x7fffffff /* sig_atomic_t */
-
-/* limit of size_t */
-#define SIZE_MAX 0xffffffffUL /* size_t */
-
-#endif /* !_ARM_INT_LIMITS_H_ */
diff --git a/StdLib/Include/Arm/machine/int_mwgwtypes.h b/StdLib/Include/Arm/machine/int_mwgwtypes.h
deleted file mode 100644
index c9a49175c5..0000000000
--- a/StdLib/Include/Arm/machine/int_mwgwtypes.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/** @file
- Minimum and Greatest Width Integer types.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Portions Copyright (c) 2001 The NetBSD Foundation, Inc.
- All rights reserved.
-
- This code is derived from software contributed to The NetBSD Foundation
- by Klaus Klein.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. All advertising materials mentioning features or use of this software
- must display the following acknowledgement:
- This product includes software developed by the NetBSD
- Foundation, Inc. and its contributors.
- 4. Neither the name of The NetBSD Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: int_mwgwtypes.h,v 1.5 2005/12/24 20:06:47 perry Exp
-**/
-#ifndef _ARM_INT_MWGWTYPES_H_
-#define _ARM_INT_MWGWTYPES_H_
-
-/*
- * 7.18.1 Integer types
- */
-
-/* 7.18.1.2 Minimum-width integer types */
-
-typedef CHAR8 int_least8_t;
-typedef UINT8 uint_least8_t;
-typedef INT16 int_least16_t;
-typedef UINT16 uint_least16_t;
-typedef INT32 int_least32_t;
-typedef UINT32 uint_least32_t;
-typedef INT64 int_least64_t;
-typedef UINT64 uint_least64_t;
-
-/* 7.18.1.3 Fastest minimum-width integer types */
-typedef INT32 int_fast8_t;
-typedef UINT32 uint_fast8_t;
-typedef INT32 int_fast16_t;
-typedef UINT32 uint_fast16_t;
-typedef INT32 int_fast32_t;
-typedef UINT32 uint_fast32_t;
-typedef INT64 int_fast64_t;
-typedef UINT64 uint_fast64_t;
-
-/* 7.18.1.5 Greatest-width integer types */
-
-typedef INT64 intmax_t;
-typedef UINT64 uintmax_t;
-
-#endif /* !_ARM_INT_MWGWTYPES_H_ */
diff --git a/StdLib/Include/Arm/machine/int_types.h b/StdLib/Include/Arm/machine/int_types.h
deleted file mode 100644
index cebebe333a..0000000000
--- a/StdLib/Include/Arm/machine/int_types.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* $NetBSD: int_types.h,v 1.10 2005/12/24 20:07:10 perry Exp $ */
-
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: @(#)types.h 7.5 (Berkeley) 3/9/91
- */
-
-#ifndef _ARM_INT_TYPES_H_
-#define _ARM_INT_TYPES_H_
-
-#include <sys/EfiCdefs.h>
-
-/*
- * 7.18.1 Integer types
- */
-
-/* 7.18.1.1 Exact-width integer types */
-
-typedef INT8 __int8_t;
-typedef UINT8 __uint8_t;
-typedef INT16 __int16_t;
-typedef UINT16 __uint16_t;
-typedef INT32 __int32_t;
-typedef UINT32 __uint32_t;
-typedef INT64 __int64_t;
-typedef UINT64 __uint64_t;
-
-#define __BIT_TYPES_DEFINED__
-
-/* 7.18.1.4 Integer types capable of holding object pointers */
-
-typedef INTN __intptr_t;
-typedef UINTN __uintptr_t;
-
-#endif /* !_ARM_INT_TYPES_H_ */
diff --git a/StdLib/Include/Arm/machine/limits.h b/StdLib/Include/Arm/machine/limits.h
deleted file mode 100644
index 5caa9a18d7..0000000000
--- a/StdLib/Include/Arm/machine/limits.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* $NetBSD: limits.h,v 1.9 2008/08/29 19:08:29 matt Exp $ */
-
-/*
- * Copyright (c) 1988 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: @(#)limits.h 7.2 (Berkeley) 6/28/90
- */
-
-#ifndef _ARM32_LIMITS_H_
-#define _ARM32_LIMITS_H_
-
-#include <sys/featuretest.h>
-
-#define __CHAR_BIT 8 /* number of bits in a char */
-//#define __MB_LEN_MAX 32 /* no multibyte characters */
-
-#define __SCHAR_MIN (-0x7f-1) /* max value for a signed char */
-#define __SCHAR_MAX 0x7f /* min value for a signed char */
-
-#define __UCHAR_MAX 0xff /* max value for an unsigned char */
-#define __CHAR_MAX 0xff /* max value for a char */
-#define __CHAR_MIN 0 /* min value for a char */
-
-#define __USHRT_MAX 0xffff /* max value for an unsigned short */
-#define __SHRT_MAX 0x7fff /* max value for a short */
-#define __SHRT_MIN (-0x7fff-1) /* min value for a short */
-
-#define __UINT_MAX 0xffffffffU /* max value for an unsigned int */
-#define __INT_MAX 0x7fffffff /* max value for an int */
-#define __INT_MIN (-0x7fffffff-1) /* min value for an int */
-
-#define __ULONG_MAX 0xffffffffUL /* max value for an unsigned long */
-#define __LONG_MAX 0x7fffffffL /* max value for a long */
-#define __LONG_MIN (-0x7fffffffL-1) /* min value for a long */
-
-#if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
- defined(_NETBSD_SOURCE)
-#define SSIZE_MAX LONG_MAX /* max value for a ssize_t */
-
-#if defined(_ISOC99_SOURCE) || (__STDC_VERSION__ - 0) >= 199901L || \
- defined(_NETBSD_SOURCE)
-#define __ULLONG_MAX 0xffffffffffffffffULL /* max unsigned long long */
-#define __LLONG_MAX 0x7fffffffffffffffLL /* max signed long long */
-#define __LLONG_MIN (-0x7fffffffffffffffLL-1) /* min signed long long */
-#endif
-
-#if defined(_NETBSD_SOURCE)
-#define SIZE_T_MAX LONG_MAX /* max value for a size_t */
-
-#define UQUAD_MAX 0xffffffffffffffffLL /* max unsigned quad */
-#define QUAD_MAX 0x7fffffffffffffffLL /* max signed quad */
-#define QUAD_MIN (-0x7fffffffffffffffLL-1) /* min signed quad */
-
-#endif /* _NETBSD_SOURCE */
-#endif /* _POSIX_C_SOURCE || _XOPEN_SOURCE || _NETBSD_SOURCE */
-
-#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
-#define LONG_BIT 32
-#define WORD_BIT 32
-
-#define DBL_DIG 15
-#define DBL_MAX 1.7976931348623157E+308
-#define DBL_MIN 2.2250738585072014E-308
-
-//#define FLT_DIG 6
-//#define FLT_MAX 3.40282347E+38F
-//#define FLT_MIN 1.17549435E-38F
-#endif
-
-#endif /* _ARM32_LIMITS_H_ */
diff --git a/StdLib/Include/Arm/machine/lock.h b/StdLib/Include/Arm/machine/lock.h
deleted file mode 100644
index be11a470ab..0000000000
--- a/StdLib/Include/Arm/machine/lock.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* $NetBSD: lock.h,v 1.7 2005/12/28 19:09:29 perry Exp $ */
-
-/*-
- * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Jason R. Thorpe.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * Machine-dependent spin lock operations.
- *
- * NOTE: The SWP insn used here is available only on ARM architecture
- * version 3 and later (as well as 2a). What we are going to do is
- * expect that the kernel will trap and emulate the insn. That will
- * be slow, but give us the atomicity that we need.
- */
-
-#ifndef _ARM_LOCK_H_
-#define _ARM_LOCK_H_
-
-static __inline int
-__swp(int __val, volatile int *__ptr)
-{
-
- __asm volatile("swp %0, %1, [%2]"
- : "=r" (__val) : "r" (__val), "r" (__ptr) : "memory");
- return __val;
-}
-
-static __inline void __attribute__((__unused__))
-__cpu_simple_lock_init(__cpu_simple_lock_t *alp)
-{
-
- *alp = __SIMPLELOCK_UNLOCKED;
-}
-
-static __inline void __attribute__((__unused__))
-__cpu_simple_lock(__cpu_simple_lock_t *alp)
-{
-
- while (__swp(__SIMPLELOCK_LOCKED, alp) != __SIMPLELOCK_UNLOCKED)
- continue;
-}
-
-static __inline int __attribute__((__unused__))
-__cpu_simple_lock_try(__cpu_simple_lock_t *alp)
-{
-
- return (__swp(__SIMPLELOCK_LOCKED, alp) == __SIMPLELOCK_UNLOCKED);
-}
-
-static __inline void __attribute__((__unused__))
-__cpu_simple_unlock(__cpu_simple_lock_t *alp)
-{
-
- *alp = __SIMPLELOCK_UNLOCKED;
-}
-
-#endif /* _ARM_LOCK_H_ */
diff --git a/StdLib/Include/Arm/machine/math.h b/StdLib/Include/Arm/machine/math.h
deleted file mode 100644
index 7eca11187b..0000000000
--- a/StdLib/Include/Arm/machine/math.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: math.h,v 1.2 2002/02/19 13:08:14 simonb Exp $ */
-
-#define __HAVE_NANF
diff --git a/StdLib/Include/Arm/machine/mcontext.h b/StdLib/Include/Arm/machine/mcontext.h
deleted file mode 100644
index 0f450c43c1..0000000000
--- a/StdLib/Include/Arm/machine/mcontext.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/* $NetBSD: mcontext.h,v 1.5 2005/12/11 12:16:47 christos Exp $ */
-
-/*-
- * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein and by Jason R. Thorpe of Wasabi Systems, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _ARM_MCONTEXT_H_
-#define _ARM_MCONTEXT_H_
-
-/*
- * General register state
- */
-#define _NGREG 17
-typedef unsigned int __greg_t;
-typedef __greg_t __gregset_t[_NGREG];
-
-#define _REG_R0 0
-#define _REG_R1 1
-#define _REG_R2 2
-#define _REG_R3 3
-#define _REG_R4 4
-#define _REG_R5 5
-#define _REG_R6 6
-#define _REG_R7 7
-#define _REG_R8 8
-#define _REG_R9 9
-#define _REG_R10 10
-#define _REG_R11 11
-#define _REG_R12 12
-#define _REG_R13 13
-#define _REG_R14 14
-#define _REG_R15 15
-#define _REG_CPSR 16
-/* Convenience synonyms */
-#define _REG_FP _REG_R11
-#define _REG_SP _REG_R13
-#define _REG_LR _REG_R14
-#define _REG_PC _REG_R15
-
-/*
- * Floating point register state
- */
-/* Note: the storage layout of this structure must be identical to ARMFPE! */
-typedef struct {
- unsigned int __fp_fpsr;
- struct {
- unsigned int __fp_exponent;
- unsigned int __fp_mantissa_hi;
- unsigned int __fp_mantissa_lo;
- } __fp_fr[8];
-} __fpregset_t;
-
-typedef struct {
- unsigned int __vfp_fpscr;
- unsigned int __vfp_fstmx[33];
- unsigned int __vfp_fpsid;
-} __vfpregset_t;
-
-typedef struct {
- __gregset_t __gregs;
- union {
- __fpregset_t __fpregs;
- __vfpregset_t __vfpregs;
- } __fpu;
-} mcontext_t;
-
-/* Machine-dependent uc_flags */
-#define _UC_ARM_VFP 0x00010000 /* FPU field is VFP */
-
-/* used by signal delivery to indicate status of signal stack */
-#define _UC_SETSTACK 0x00020000
-#define _UC_CLRSTACK 0x00040000
-
-#define _UC_MACHINE_PAD 3 /* Padding appended to ucontext_t */
-
-#define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_SP])
-#define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_PC])
-#define _UC_MACHINE_INTRV(uc) ((uc)->uc_mcontext.__gregs[_REG_R0])
-
-#define _UC_MACHINE_SET_PC(uc, pc) _UC_MACHINE_PC(uc) = (pc)
-
-#endif /* !_ARM_MCONTEXT_H_ */
diff --git a/StdLib/Include/Arm/machine/param.h b/StdLib/Include/Arm/machine/param.h
deleted file mode 100644
index ac76253038..0000000000
--- a/StdLib/Include/Arm/machine/param.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/* $NetBSD: param.h,v 1.13 2010/05/06 19:10:26 joerg Exp $ */
-
-/*
- * Copyright (c) 1994,1995 Mark Brinicombe.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the RiscBSD team.
- * 4. The name "RiscBSD" nor the name of the author may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY RISCBSD ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL RISCBSD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _ARM_PARAM_H_
-#define _ARM_PARAM_H_
-
-/*
- * Machine dependent constants for all ARM processors
- */
-
-/*
- * For KERNEL code:
- * MACHINE must be defined by the individual port. This is so that
- * uname returns the correct thing, etc.
- *
- * MACHINE_ARCH may be defined by individual ports as a temporary
- * measure while we're finishing the conversion to ELF.
- *
- * For non-KERNEL code:
- * If ELF, MACHINE and MACHINE_ARCH are forced to "arm/armeb".
- */
-
-#if defined(_KERNEL)
-#ifndef MACHINE_ARCH /* XXX For now */
-#ifndef __ARMEB__
-#define _MACHINE_ARCH arm
-#define MACHINE_ARCH "arm"
-#else
-#define _MACHINE_ARCH armeb
-#define MACHINE_ARCH "armeb"
-#endif /* __ARMEB__ */
-#endif /* MACHINE_ARCH */
-#else
-#undef _MACHINE
-#undef MACHINE
-#undef _MACHINE_ARCH
-#undef MACHINE_ARCH
-#define _MACHINE arm
-#define MACHINE "arm"
-#ifndef __ARMEB__
-#define _MACHINE_ARCH arm
-#define MACHINE_ARCH "arm"
-#else
-#define _MACHINE_ARCH armeb
-#define MACHINE_ARCH "armeb"
-#endif /* __ARMEB__ */
-#endif /* !_KERNEL */
-
-#define MID_MACHINE MID_ARM6
-
-/*
- * Round p (pointer or byte index) up to a correctly-aligned value
- * for all data types (int, long, ...). The result is u_int and
- * must be cast to any desired pointer type.
- *
- * ALIGNED_POINTER is a boolean macro that checks whether an address
- * is valid to fetch data elements of type t from on this architecture.
- * This does not reflect the optimal alignment, just the possibility
- * (within reasonable limits).
- *
- */
-#define ALIGNBYTES (sizeof(int) - 1)
-#define ALIGN(p) (((u_int)(p) + ALIGNBYTES) &~ ALIGNBYTES)
-#define ALIGNED_POINTER(p,t) ((((u_long)(p)) & (sizeof(t)-1)) == 0)
-/* ARM-specific macro to align a stack pointer (downwards). */
-#define STACKALIGNBYTES (8 - 1)
-#define STACKALIGN(p) ((u_int)(p) &~ STACKALIGNBYTES)
-
-#define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */
-#define DEV_BSIZE (1 << DEV_BSHIFT)
-#define BLKDEV_IOSIZE 2048
-
-#ifndef MAXPHYS
-#define MAXPHYS 65536 /* max I/O transfer size */
-#endif
-
-/*
- * Constants related to network buffer management.
- * MCLBYTES must be no larger than NBPG (the software page size), and,
- * on machines that exchange pages of input or output buffers with mbuf
- * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple
- * of the hardware page size.
- */
-#define MSIZE 256 /* size of an mbuf */
-
-#ifndef MCLSHIFT
-#define MCLSHIFT 11 /* convert bytes to m_buf clusters */
- /* 2K cluster can hold Ether frame */
-#endif /* MCLSHIFT */
-
-#define MCLBYTES (1 << MCLSHIFT) /* size of a m_buf cluster */
-
-#ifndef NMBCLUSTERS_MAX
-#define NMBCLUSTERS_MAX (0x2000000 / MCLBYTES) /* Limit to 64MB for clusters */
-#endif
-
-/*
- * Compatibility /dev/zero mapping.
- */
-#ifdef _KERNEL
-#ifdef COMPAT_16
-#define COMPAT_ZERODEV(x) (x == makedev(0, _DEV_ZERO_oARM))
-#endif
-#endif /* _KERNEL */
-
-#endif /* _ARM_PARAM_H_ */
diff --git a/StdLib/Include/Arm/machine/proc.h b/StdLib/Include/Arm/machine/proc.h
deleted file mode 100644
index 14718611d3..0000000000
--- a/StdLib/Include/Arm/machine/proc.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* $NetBSD: proc.h,v 1.6 2003/03/05 11:28:14 agc Exp $ */
-
-/*
- * Copyright (c) 1994 Mark Brinicombe.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the RiscBSD team.
- * 4. The name "RiscBSD" nor the name of the author may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY RISCBSD ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL RISCBSD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _ARM32_PROC_H_
-#define _ARM32_PROC_H_
-
-/*
- * Machine-dependent part of the proc structure for arm.
- */
-
-struct trapframe;
-struct lwp;
-
-struct mdlwp {
- int md_dummy; /* must have at least one member */
-};
-
-struct mdproc {
- void (*md_syscall)(struct trapframe *, struct lwp *, u_int32_t);
- int pmc_enabled; /* bitfield of enabled counters */
- void *pmc_state; /* port-specific pmc state */
-};
-
-#endif /* _ARM32_PROC_H_ */
diff --git a/StdLib/Include/Arm/machine/signal.h b/StdLib/Include/Arm/machine/signal.h
deleted file mode 100644
index 6628eb9e94..0000000000
--- a/StdLib/Include/Arm/machine/signal.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
-Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-This program and the accompanying materials are licensed and made available under
-the terms and conditions of the BSD License that accompanies this distribution.
-The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php.
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#ifndef _MACHINE_SIGNAL_H
-#define _MACHINE_SIGNAL_H
-#include <sys/EfiCdefs.h>
-
-/** The type sig_atomic_t is the (possibly volatile-qualified) integer type of
- an object that can be accessed as an atomic entity, even in the presence
- of asynchronous interrupts.
-**/
-typedef INTN sig_atomic_t;
-
-#endif /* _MACHINE_SIGNAL_H */
diff --git a/StdLib/Include/Arm/machine/types.h b/StdLib/Include/Arm/machine/types.h
deleted file mode 100644
index a59d5be087..0000000000
--- a/StdLib/Include/Arm/machine/types.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/** @file
- Machine dependent type definitions.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990 The Regents of the University of California.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- types.h 7.5 (Berkeley) 3/9/91
- NetBSD: types.h,v 1.49 2006/09/03 13:51:23 bjh21 Exp
-**/
-#ifndef _MACHTYPES_H_
-#define _MACHTYPES_H_
-
-#include <sys/EfiCdefs.h>
-#include <sys/featuretest.h>
-#include <machine/int_types.h>
-
-/* Handle the long and unsigned long data types which EFI doesn't directly support. */
-//typedef INTN LONGN;
-//typedef UINTN ULONGN;
-
-typedef PHYSICAL_ADDRESS paddr_t;
-typedef UINT64 psize_t;
-typedef PHYSICAL_ADDRESS vaddr_t;
-typedef UINT64 vsize_t;
-
-typedef INT32 pmc_evid_t;
-typedef UINT64 pmc_ctr_t;
-typedef INT32 register_t;
-
-typedef volatile INT32 __cpu_simple_lock_t;
-
-#define __SIMPLELOCK_LOCKED 1
-#define __SIMPLELOCK_UNLOCKED 0
-
-/* The ARMv7 does not have strict alignment requirements. */
-#define __NO_STRICT_ALIGNMENT
-//TODO: Fixme for the ARM architecture that requires strict alignment
-
-#define __HAVE_DEVICE_REGISTER
-#define __HAVE_CPU_COUNTER
-#define __HAVE_SYSCALL_INTERN
-#define __HAVE_MINIMAL_EMUL
-#define __HAVE_OLD_DISKLABEL
-#define __HAVE_GENERIC_SOFT_INTERRUPTS
-#define __HAVE_CPU_MAXPROC
-#define __HAVE_TIMECOUNTER
-#define __HAVE_GENERIC_TODR
-
-#endif /* _MACHTYPES_H_ */
diff --git a/StdLib/Include/Arm/milieu.h b/StdLib/Include/Arm/milieu.h
deleted file mode 100644
index 8f4ac00076..0000000000
--- a/StdLib/Include/Arm/milieu.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* $NetBSD: milieu.h,v 1.1 2000/12/29 20:13:54 bjh21 Exp $ */
-
-/*
-===============================================================================
-
-This C header file is part of the SoftFloat IEC/IEEE Floating-point
-Arithmetic Package, Release 2a.
-
-Written by John R. Hauser. This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704. Funding was partially provided by the
-National Science Foundation under grant MIP-9311980. The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-/*
--------------------------------------------------------------------------------
-Include common integer types and flags.
--------------------------------------------------------------------------------
-*/
-#include "arm-gcc.h"
diff --git a/StdLib/Include/Arm/softfloat.h b/StdLib/Include/Arm/softfloat.h
deleted file mode 100644
index d52c5a9f8d..0000000000
--- a/StdLib/Include/Arm/softfloat.h
+++ /dev/null
@@ -1,316 +0,0 @@
-/* $NetBSD: softfloat.h,v 1.10 2013/04/24 18:04:46 matt Exp $ */
-
-/* This is a derivative work. */
-
-/*
-===============================================================================
-
-This C header file is part of the SoftFloat IEC/IEEE Floating-point
-Arithmetic Package, Release 2a.
-
-Written by John R. Hauser. This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704. Funding was partially provided by the
-National Science Foundation under grant MIP-9311980. The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-/*
--------------------------------------------------------------------------------
-The macro `FLOATX80' must be defined to enable the extended double-precision
-floating-point format `floatx80'. If this macro is not defined, the
-`floatx80' type will not be defined, and none of the functions that either
-input or output the `floatx80' type will be defined. The same applies to
-the `FLOAT128' macro and the quadruple-precision format `float128'.
--------------------------------------------------------------------------------
-*/
-/* #define FLOATX80 */
-/* #define FLOAT128 */
-
-#include <stdint.h>
-#include <machine/ieeefp.h>
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE floating-point types.
--------------------------------------------------------------------------------
-*/
-typedef unsigned int float32;
-typedef unsigned long long float64;
-#ifdef FLOATX80
-typedef struct {
- unsigned short high;
- unsigned long long low;
-} floatx80;
-#endif
-#ifdef FLOAT128
-typedef struct {
- unsigned long long high, low;
-} float128;
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE floating-point underflow tininess-detection mode.
--------------------------------------------------------------------------------
-*/
-#ifndef SOFTFLOAT_FOR_GCC
-extern int float_detect_tininess;
-#endif
-enum {
- float_tininess_after_rounding = 0,
- float_tininess_before_rounding = 1
-};
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE floating-point rounding mode.
--------------------------------------------------------------------------------
-*/
-extern fp_rnd float_rounding_mode;
-#define float_round_nearest_even FP_RN
-#define float_round_to_zero FP_RZ
-#define float_round_down FP_RM
-#define float_round_up FP_RP
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE floating-point exception flags.
--------------------------------------------------------------------------------
-*/
-extern fp_except float_exception_flags;
-extern fp_except float_exception_mask;
-enum {
- float_flag_inexact = FP_X_IMP,
- float_flag_underflow = FP_X_UFL,
- float_flag_overflow = FP_X_OFL,
- float_flag_divbyzero = FP_X_DZ,
- float_flag_invalid = FP_X_INV
-};
-
-/*
--------------------------------------------------------------------------------
-Routine to raise any or all of the software IEC/IEEE floating-point
-exception flags.
--------------------------------------------------------------------------------
-*/
-void float_raise( fp_except );
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE integer-to-floating-point conversion routines.
--------------------------------------------------------------------------------
-*/
-float32 int32_to_float32( int32 );
-float32 uint32_to_float32( uint32 );
-float64 int32_to_float64( int32 );
-float64 uint32_to_float64( uint32 );
-#ifdef FLOATX80
-floatx80 int32_to_floatx80( int32 );
-floatx80 uint32_to_floatx80( uint32 );
-#endif
-#ifdef FLOAT128
-float128 int32_to_float128( int32 );
-float128 uint32_to_float128( uint32 );
-#endif
-#ifndef SOFTFLOAT_FOR_GCC /* __floatdi?f is in libgcc2.c */
-float32 int64_to_float32( long long );
-float64 int64_to_float64( long long );
-#ifdef FLOATX80
-floatx80 int64_to_floatx80( long long );
-#endif
-#ifdef FLOAT128
-float128 int64_to_float128( long long );
-#endif
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE single-precision conversion routines.
--------------------------------------------------------------------------------
-*/
-int float32_to_int32( float32 );
-int float32_to_int32_round_to_zero( float32 );
-#if defined(SOFTFLOAT_FOR_GCC) && defined(SOFTFLOAT_NEED_FIXUNS)
-unsigned int float32_to_uint32_round_to_zero( float32 );
-#endif
-#ifndef SOFTFLOAT_FOR_GCC /* __fix?fdi provided by libgcc2.c */
-long long float32_to_int64( float32 );
-long long float32_to_int64_round_to_zero( float32 );
-#endif
-float64 float32_to_float64( float32 );
-#ifdef FLOATX80
-floatx80 float32_to_floatx80( float32 );
-#endif
-#ifdef FLOAT128
-float128 float32_to_float128( float32 );
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE single-precision operations.
--------------------------------------------------------------------------------
-*/
-float32 float32_round_to_int( float32 );
-float32 float32_add( float32, float32 );
-float32 float32_sub( float32, float32 );
-float32 float32_mul( float32, float32 );
-float32 float32_div( float32, float32 );
-float32 float32_rem( float32, float32 );
-float32 float32_sqrt( float32 );
-int float32_eq( float32, float32 );
-int float32_le( float32, float32 );
-int float32_lt( float32, float32 );
-int float32_eq_signaling( float32, float32 );
-int float32_le_quiet( float32, float32 );
-int float32_lt_quiet( float32, float32 );
-#ifndef SOFTFLOAT_FOR_GCC
-int float32_is_signaling_nan( float32 );
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE double-precision conversion routines.
--------------------------------------------------------------------------------
-*/
-int float64_to_int32( float64 );
-int float64_to_int32_round_to_zero( float64 );
-#if defined(SOFTFLOAT_FOR_GCC) && defined(SOFTFLOAT_NEED_FIXUNS)
-unsigned int float64_to_uint32_round_to_zero( float64 );
-#endif
-#ifndef SOFTFLOAT_FOR_GCC /* __fix?fdi provided by libgcc2.c */
-long long float64_to_int64( float64 );
-long long float64_to_int64_round_to_zero( float64 );
-#endif
-float32 float64_to_float32( float64 );
-#ifdef FLOATX80
-floatx80 float64_to_floatx80( float64 );
-#endif
-#ifdef FLOAT128
-float128 float64_to_float128( float64 );
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE double-precision operations.
--------------------------------------------------------------------------------
-*/
-float64 float64_round_to_int( float64 );
-float64 float64_add( float64, float64 );
-float64 float64_sub( float64, float64 );
-float64 float64_mul( float64, float64 );
-float64 float64_div( float64, float64 );
-float64 float64_rem( float64, float64 );
-float64 float64_sqrt( float64 );
-int float64_eq( float64, float64 );
-int float64_le( float64, float64 );
-int float64_lt( float64, float64 );
-int float64_eq_signaling( float64, float64 );
-int float64_le_quiet( float64, float64 );
-int float64_lt_quiet( float64, float64 );
-#ifndef SOFTFLOAT_FOR_GCC
-int float64_is_signaling_nan( float64 );
-#endif
-
-#ifdef FLOATX80
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE extended double-precision conversion routines.
--------------------------------------------------------------------------------
-*/
-int floatx80_to_int32( floatx80 );
-int floatx80_to_int32_round_to_zero( floatx80 );
-long long floatx80_to_int64( floatx80 );
-long long floatx80_to_int64_round_to_zero( floatx80 );
-float32 floatx80_to_float32( floatx80 );
-float64 floatx80_to_float64( floatx80 );
-#ifdef FLOAT128
-float128 floatx80_to_float128( floatx80 );
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE extended double-precision rounding precision. Valid
-values are 32, 64, and 80.
--------------------------------------------------------------------------------
-*/
-extern int floatx80_rounding_precision;
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE extended double-precision operations.
--------------------------------------------------------------------------------
-*/
-floatx80 floatx80_round_to_int( floatx80 );
-floatx80 floatx80_add( floatx80, floatx80 );
-floatx80 floatx80_sub( floatx80, floatx80 );
-floatx80 floatx80_mul( floatx80, floatx80 );
-floatx80 floatx80_div( floatx80, floatx80 );
-floatx80 floatx80_rem( floatx80, floatx80 );
-floatx80 floatx80_sqrt( floatx80 );
-int floatx80_eq( floatx80, floatx80 );
-int floatx80_le( floatx80, floatx80 );
-int floatx80_lt( floatx80, floatx80 );
-int floatx80_eq_signaling( floatx80, floatx80 );
-int floatx80_le_quiet( floatx80, floatx80 );
-int floatx80_lt_quiet( floatx80, floatx80 );
-int floatx80_is_signaling_nan( floatx80 );
-
-#endif
-
-#ifdef FLOAT128
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE quadruple-precision conversion routines.
--------------------------------------------------------------------------------
-*/
-int float128_to_int32( float128 );
-int float128_to_int32_round_to_zero( float128 );
-long long float128_to_int64( float128 );
-long long float128_to_int64_round_to_zero( float128 );
-float32 float128_to_float32( float128 );
-float64 float128_to_float64( float128 );
-#ifdef FLOATX80
-floatx80 float128_to_floatx80( float128 );
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE quadruple-precision operations.
--------------------------------------------------------------------------------
-*/
-float128 float128_round_to_int( float128 );
-float128 float128_add( float128, float128 );
-float128 float128_sub( float128, float128 );
-float128 float128_mul( float128, float128 );
-float128 float128_div( float128, float128 );
-float128 float128_rem( float128, float128 );
-float128 float128_sqrt( float128 );
-int float128_eq( float128, float128 );
-int float128_le( float128, float128 );
-int float128_lt( float128, float128 );
-int float128_eq_signaling( float128, float128 );
-int float128_le_quiet( float128, float128 );
-int float128_lt_quiet( float128, float128 );
-int float128_is_signaling_nan( float128 );
-
-#endif
diff --git a/StdLib/Include/Containers/Fifo.h b/StdLib/Include/Containers/Fifo.h
deleted file mode 100644
index 69dd55b03e..0000000000
--- a/StdLib/Include/Containers/Fifo.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/** @file
- Class for arbitrary sized FIFO queues.
-
- Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _FIFO_CLASS_H
-#define _FIFO_CLASS_H
-#include <Uefi.h>
-#include <wchar.h>
-#include <Containers/ModuloUtil.h>
-#include <sys/types.h>
-
-__BEGIN_DECLS
-
-typedef struct _FIFO_CLASS cFIFO;
-
-/// Constants to select what is counted by the FIFO_NumInQueue function.
-typedef enum {
- AsElements, ///< Count the number of readable elements in the queue.
- AsBytes ///< Count the number of readable bytes in the queue.
-} FIFO_ElemBytes;
-
-/** Construct a new instance of a FIFO Queue.
-
- @param[in] NumElements Number of elements to be contained in the new FIFO.
- @param[in] ElementSize Size, in bytes, of an element
-
- @retval NULL Unable to create the instance.
- @retval NonNULL Pointer to the new FIFO instance.
-**/
-cFIFO * EFIAPI New_cFIFO(UINT32 NumElements, size_t ElementSize);
-
-/** Add one or more elements to the FIFO.
-
- This function allows one to add one or more elements, as specified by Count,
- to the FIFO. Each element is of the size specified when the FIFO object
- was instantiated (FIFO.ElementSize).
-
- pElement points to the first byte of the first element to be added.
- If multiple elements are to be added, the elements are expected to be
- organized as a packed array.
-
- @param[in] Self Pointer to the FIFO instance.
- @param[in] pElement Pointer to the element(s) to enqueue (add).
- @param[in] Count Number of elements to add.
-
- @retval 0 The FIFO is full.
- @retval >=0 The number of elements added to the FIFO.
-**/
-typedef size_t (EFIAPI *cFIFO_Enqueue) (cFIFO *Self, const void *ElementPointer, size_t Count);
-
-/** Read or copy elements from the FIFO.
-
- This function allows one to read one or more elements, as specified by Count,
- from the FIFO. Each element is of the size specified when the FIFO object
- was instantiated (FIFO.ElementSize).
-
- pElement points to the destination of the first byte of the first element
- to be read. If multiple elements are to be read, the elements are expected
- to be organized as a packed array.
-
- @param[in] Self Pointer to the FIFO instance.
- @param[out] pElement Pointer to where to store the element(s) read from the FIFO.
- @param[in] Count Number of elements to dequeue.
- @param[in] Consume If TRUE, consume read elements. Otherwise, preserve.
-
- @retval 0 The FIFO is empty.
- @retval >=0 The number of elements read from the FIFO.
-**/
-typedef size_t (EFIAPI *cFIFO_Dequeue) (cFIFO *Self, void *ElementPointer, size_t Count);
-
-/** Make a copy of the FIFO's data.
- The contents of the FIFO is copied out and linearized without affecting the
- FIFO contents.
-
- @param[in] Self Pointer to the FIFO instance.
- @param[out] ElementPointer Pointer to where to store the elements copied from the FIFO.
- @param[in] Count Number of elements to copy.
-
- @retval 0 The FIFO is empty.
- @retval >=0 The number of elements copied from the FIFO.
-**/
-typedef size_t (EFIAPI *cFIFO_Copy) (cFIFO *Self, void *ElementPointer, size_t Count);
-
-/** Test whether the FIFO is empty.
-
- @param[in] Self Pointer to the FIFO instance.
-
- @retval TRUE The FIFO is empty.
- @retval FALSE The FIFO is NOT empty.
-**/
-typedef BOOLEAN (EFIAPI *cFIFO_IsEmpty) (cFIFO *Self);
-
-/** Test whether the FIFO is full.
-
- @param[in] Self Pointer to the FIFO instance.
-
- @retval TRUE The FIFO is full.
- @retval FALSE The FIFO is NOT full.
-**/
-typedef BOOLEAN (EFIAPI *cFIFO_IsFull) (cFIFO *Self);
-
-/** Determine number of items available to read from the FIFO.
-
- The number of items are either the number of bytes, or the number of elements
- depending upon the value of the As enumerator.
-
- @param[in] Self Pointer to the FIFO instance.
- @param[in] As An enumeration variable whose value determines whether the
- returned value is the number of bytes or the number of elements
- currently contained by the FIFO.
-
- @retval 0 The FIFO is empty.
- @retval >=0 The number of items contained in the FIFO.
-**/
-typedef size_t (EFIAPI *cFIFO_NumInQueue) (cFIFO *Self, FIFO_ElemBytes As);
-
-/** Determine amount of free space in the FIFO that can be written into.
-
- The number of items are either the number of bytes, or the number of elements
- depending upon the value of the As enumerator.
-
- @param[in] Self Pointer to the FIFO instance.
- @param[in] As An enumeration variable whose value determines whether the
- returned value is the number of bytes or the number of elements
- currently available in the FIFO.
-
- @retval 0 The FIFO is full.
- @retval >=0 The number of items which can be accepted by the FIFO.
-**/
-typedef size_t (EFIAPI *cFIFO_FreeSpace) (cFIFO *Self, FIFO_ElemBytes As);
-
-/** Empty the FIFO, discarding up to NumToFlush elements.
-
- @param[in] Self Pointer to the FIFO instance.
- @param[in] NumToFlush Number of elements to flush from the FIFO.
- If larger than the number of elements in the
- FIFO, the FIFO is emptied.
-
- @return Returns the number of elements remaining in the FIFO after the flush.
-**/
-typedef size_t (EFIAPI *cFIFO_Flush) (cFIFO *Self, size_t NumToFlush);
-
-/** Remove the most recent element from the FIFO.
-
- @param[in] Self Pointer to the FIFO instance.
-
- @return Returns the number of elements remaining in the FIFO.
-**/
-typedef size_t (EFIAPI *cFIFO_Truncate) (cFIFO *Self);
-
-/** Cleanly delete a FIFO instance.
-
- @param[in] Self Pointer to the FIFO instance.
-**/
-typedef void (EFIAPI *cFIFO_Delete) (cFIFO *Self);
-
-/** Get the FIFO's current Read Index.
-
- @param[in] Self Pointer to the FIFO instance.
-
- @return The current value of the FIFO's ReadIndex member is returned.
-**/
-typedef UINT32 (EFIAPI *cFIFO_GetRDex) (cFIFO *Self);
-
-/** Get the FIFO's current Write Index.
-
- @param[in] Self Pointer to the FIFO instance.
-
- @return The current value of the FIFO's WriteIndex member is returned.
-**/
-typedef UINT32 (EFIAPI *cFIFO_GetWDex) (cFIFO *Self);
-
-/// Structure declaration for FIFO objects.
-struct _FIFO_CLASS {
- /* ######## Public Functions ######## */
- cFIFO_Enqueue Write; ///< Write an element into the FIFO.
- cFIFO_Dequeue Read; ///< Read an element from the FIFO.
- cFIFO_Copy Copy; ///< Non-destructive copy from FIFO.
- cFIFO_IsEmpty IsEmpty; ///< Test whether the FIFO is empty.
- cFIFO_IsFull IsFull; ///< Test whether the FIFO is full.
- cFIFO_NumInQueue Count; ///< Return the number of elements contained in the FIFO.
- cFIFO_FreeSpace FreeSpace; ///< Return the number of available elements in the FIFO.
- cFIFO_Flush Flush; ///< Remove the N earliest elements from the FIFO.
- cFIFO_Truncate Truncate; ///< Remove the most recent element from the FIFO.
- cFIFO_Delete Delete; ///< Delete the FIFO object.
-
- /* ######## Protected Functions ######## */
- cFIFO_GetRDex GetRDex; ///< Get a copy of the current Read Index.
- cFIFO_GetWDex GetWDex; ///< Get a copy of the current Write Index.
-
- /* ######## PRIVATE Data ######## */
- void *Queue; ///< The FIFO's data storage.
- UINT32 ElementSize; ///< Number of bytes in an element.
- UINT32 NumElements; ///< Number of elements the FIFO can store.
- UINT32 ReadIndex; ///< Index of next element to Read.
- UINT32 WriteIndex; ///< Index of where next element will be Written.
-};
-
-__END_DECLS
-#endif /* _FIFO_CLASS_H */
diff --git a/StdLib/Include/Containers/ModuloUtil.h b/StdLib/Include/Containers/ModuloUtil.h
deleted file mode 100644
index f98ab0aea9..0000000000
--- a/StdLib/Include/Containers/ModuloUtil.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/** @file
- Utility functions for performing basic math operations constrained within a
- modulus.
-
- These functions are intended to simplify small changes to a value which much
- remain within a specified modulus. Changes must be less than or equal to
- the modulus specified by MaxVal.
-
- Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _MODULO_UTIL_H
-#define _MODULO_UTIL_H
-#include <Uefi.h>
-#include <sys/EfiCdefs.h>
-
-__BEGIN_DECLS
-
-/** Counter = (Counter + 1) % MaxVal;
-
- Counter is always expected to be LESS THAN MaxVal.
- 0 <= Counter < MaxVal
-
- @param[in] Counter The value to be incremented.
- @param[in] MaxVal Modulus of the operation.
-
- @return Returns the result of incrementing Counter, modulus MaxVal.
- If Counter >= MaxVal, returns -1.
-**/
-INT32
-EFIAPI
-ModuloIncrement(
- UINT32 Counter,
- UINT32 MaxVal
- );
-
-/** Counter = (Counter - 1) % MaxVal;
-
- Counter is always expected to be LESS THAN MaxVal.
- 0 <= Counter < MaxVal
-
- @param[in] Counter The value to be decremented.
- @param[in] MaxVal Modulus of the operation.
-
- @return Returns the result of decrementing Counter, modulus MaxVal.
- If Counter >= MaxVal, returns -1.
-**/
-INT32
-EFIAPI
-ModuloDecrement(
- UINT32 Counter,
- UINT32 MaxVal
- );
-
-/** Counter = (Counter + Increment) % MaxVal;
-
- @param[in] Counter The value to be incremented.
- @param[in] Increment The value to add to Counter.
- @param[in] MaxVal Modulus of the operation.
-
- @return Returns the result of adding Increment to Counter, modulus MaxVal,
- or -1 if Increment is larger than MaxVal.
-**/
-INT32
-EFIAPI
-ModuloAdd (
- UINT32 Counter,
- UINT32 Increment,
- UINT32 MaxVal
- );
-
-/** Increment Counter but don't increment past MaxVal.
-
- @param[in] Counter The value to be decremented.
- @param[in] MaxVal The upper bound for Counter. Counter < MaxVal.
-
- @return Returns the result of incrementing Counter.
-**/
-UINT32
-EFIAPI
-BoundIncrement(
- UINT32 Counter,
- UINT32 MaxVal
- );
-
-/** Decrement Counter but don't decrement past zero.
-
- @param[in] Counter The value to be decremented.
-
- @return Returns the result of decrementing Counter.
-**/
-UINT32
-EFIAPI
-BoundDecrement(
- UINT32 Counter
- );
-
-__END_DECLS
-#endif /* _MODULO_UTIL_H */
diff --git a/StdLib/Include/Efi/EfiSocketLib.h b/StdLib/Include/Efi/EfiSocketLib.h
deleted file mode 100644
index 7618d02801..0000000000
--- a/StdLib/Include/Efi/EfiSocketLib.h
+++ /dev/null
@@ -1,752 +0,0 @@
-/** @file
- Definitions for the EFI Socket layer library.
-
- Copyright (c) 2011 - 2015, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef _EFI_SOCKET_LIB_H_
-#define _EFI_SOCKET_LIB_H_
-
-#include <Uefi.h>
-
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiLib.h>
-
-#include <Protocol/EfiSocket.h>
-#include <Protocol/Ip4Config2.h>
-#include <Protocol/Ip6Config.h>
-#include <Protocol/ServiceBinding.h>
-#include <Protocol/Tcp4.h>
-#include <Protocol/Tcp6.h>
-#include <Protocol/Udp4.h>
-#include <Protocol/Udp6.h>
-
-#include <sys/time.h>
-
-//------------------------------------------------------------------------------
-// Constants
-//------------------------------------------------------------------------------
-
-#define DEBUG_TPL 0x40000000 ///< Display TPL change messages
-
-#define TPL_SOCKETS TPL_CALLBACK ///< TPL for routine synchronization
-
-//------------------------------------------------------------------------------
-// Macros
-//------------------------------------------------------------------------------
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
-#define DBG_ENTER() DEBUG (( DEBUG_INFO, "Entering " __FUNCTION__ "\n" )) ///< Display routine entry
-#define DBG_EXIT() DEBUG (( DEBUG_INFO, "Exiting " __FUNCTION__ "\n" )) ///< Display routine exit
-#define DBG_EXIT_DEC(Status) DEBUG (( DEBUG_INFO, "Exiting " __FUNCTION__ ", Status: %d\n", Status )) ///< Display routine exit with decimal value
-#define DBG_EXIT_HEX(Status) DEBUG (( DEBUG_INFO, "Exiting " __FUNCTION__ ", Status: 0x%08x\n", Status )) ///< Display routine exit with hex value
-#define DBG_EXIT_STATUS(Status) DEBUG (( DEBUG_INFO, "Exiting " __FUNCTION__ ", Status: %r\n", Status )) ///< Display routine exit with status value
-#define DBG_EXIT_TF(Status) DEBUG (( DEBUG_INFO, "Exiting " __FUNCTION__ ", returning %s\n", (FALSE == Status) ? L"FALSE" : L"TRUE" )) ///< Display routine with TRUE/FALSE value
-#else // _MSC_VER
-#define DBG_ENTER() ///< Display routine entry
-#define DBG_EXIT() ///< Display routine exit
-#define DBG_EXIT_DEC(Status) ///< Display routine exit with decimal value
-#define DBG_EXIT_HEX(Status) ///< Display routine exit with hex value
-#define DBG_EXIT_STATUS(Status) ///< Display routine exit with status value
-#define DBG_EXIT_TF(Status) ///< Display routine with TRUE/FALSE value
-#endif // _MSC_VER
-
-#define DIM(x) ( sizeof ( x ) / sizeof ( x[0] )) ///< Compute the number of entries in an array
-
-/**
- Verify new TPL value
-
- This macro which is enabled when debug is enabled verifies that
- the new TPL value is >= the current TPL value.
-**/
-#ifdef VERIFY_TPL
-#undef VERIFY_TPL
-#endif // VERIFY_TPL
-
-#if !defined(MDEPKG_NDEBUG)
-
-/**
- Verify that the TPL is at the correct level
-**/
-#define VERIFY_AT_TPL(tpl) \
-{ \
- EFI_TPL PreviousTpl; \
- \
- PreviousTpl = EfiGetCurrentTpl ( ); \
- if ( PreviousTpl != tpl ) { \
- DEBUG (( DEBUG_ERROR | DEBUG_TPL, \
- "Current TPL: %d, New TPL: %d\r\n", \
- PreviousTpl, tpl )); \
- ASSERT ( PreviousTpl == tpl ); \
- } \
-}
-
-#define VERIFY_TPL(tpl) \
-{ \
- EFI_TPL PreviousTpl; \
- \
- PreviousTpl = EfiGetCurrentTpl ( ); \
- if ( PreviousTpl > tpl ) { \
- DEBUG (( DEBUG_ERROR | DEBUG_TPL, \
- "Current TPL: %d, New TPL: %d\r\n", \
- PreviousTpl, tpl )); \
- ASSERT ( PreviousTpl <= tpl ); \
- } \
-}
-
-#else // MDEPKG_NDEBUG
-
-#define VERIFY_AT_TPL(tpl) ///< Verify that the TPL is at the correct level
-#define VERIFY_TPL(tpl) ///< Verify that the TPL is at the correct level
-
-#endif // MDEPKG_NDEBUG
-
-/**
- Raise TPL to the specified level
-**/
-#define RAISE_TPL(PreviousTpl, tpl) \
- VERIFY_TPL ( tpl ); \
- PreviousTpl = gBS->RaiseTPL ( tpl );
-
-/**
- Restore the TPL to the previous value
-**/
-#define RESTORE_TPL(tpl) \
- gBS->RestoreTPL ( tpl )
-
-//------------------------------------------------------------------------------
-// Data Types
-//------------------------------------------------------------------------------
-
-typedef struct _ESL_SERVICE ESL_SERVICE; ///< Forward delcaration
-
-/**
- Protocol binding and installation control structure
-
- The driver uses this structure to simplify the driver binding processing.
-**/
-typedef struct {
- CHAR16 * pName; ///< Protocol name
- EFI_GUID * pNetworkBinding; ///< Network service binding protocol for socket support
- EFI_GUID * pNetworkProtocolGuid;///< Network protocol GUID
- CONST EFI_GUID * pTagGuid; ///< Tag to mark protocol in use
- UINTN ServiceListOffset; ///< Offset in ::ESL_LAYER for the list of services
- UINTN RxIo; ///< Number of receive ESL_IO_MGMT structures for data
- UINTN TxIoNormal; ///< Number of transmit ESL_IO_MGMT structures for normal data
- UINTN TxIoUrgent; ///< Number of transmit ESL_IO_MGMT structures for urgent data
-} ESL_SOCKET_BINDING;
-
-//------------------------------------------------------------------------------
-// GUIDs
-//------------------------------------------------------------------------------
-
-extern CONST EFI_GUID mEslIp4ServiceGuid; ///< Tag GUID for the IPv4 layer
-extern CONST EFI_GUID mEslIp6ServiceGuid; ///< Tag GUID for the IPv6 layer
-extern CONST EFI_GUID mEslTcp4ServiceGuid; ///< Tag GUID for the TCPv4 layer
-extern CONST EFI_GUID mEslTcp6ServiceGuid; ///< Tag GUID for the TCPv6 layer
-extern CONST EFI_GUID mEslUdp4ServiceGuid; ///< Tag GUID for the UDPv4 layer
-extern CONST EFI_GUID mEslUdp6ServiceGuid; ///< Tag GUID for the UDPv6 layer
-
-//------------------------------------------------------------------------------
-// Data
-//------------------------------------------------------------------------------
-
-extern CONST ESL_SOCKET_BINDING cEslSocketBinding[];///< List of network service bindings
-extern CONST UINTN cEslSocketBindingEntries; ///< Number of network service bindings
-
-//------------------------------------------------------------------------------
-// DXE Support Routines
-//------------------------------------------------------------------------------
-
-/**
- Creates a child handle and installs a protocol.
-
- When the socket application is linked against UseSocketDxe, the ::socket
- routine indirectly calls this routine in SocketDxe to create a child
- handle if necessary and install the socket protocol on the handle.
- Upon return, EslServiceGetProtocol in UseSocketLib returns the
- ::EFI_SOCKET_PROTOCOL address to the socket routine.
-
- @param [in] pThis Pointer to the EFI_SERVICE_BINDING_PROTOCOL instance.
- @param [in] pChildHandle Pointer to the handle of the child to create. If it is NULL,
- then a new handle is created. If it is a pointer to an existing UEFI handle,
- then the protocol is added to the existing UEFI handle.
-
- @retval EFI_SUCCESS The protocol was added to ChildHandle.
- @retval EFI_INVALID_PARAMETER ChildHandle is NULL.
- @retval EFI_OUT_OF_RESOURCES There are not enough resources availabe to create
- the child
- @retval other The child handle was not created
-
-**/
-EFI_STATUS
-EFIAPI
-EslDxeCreateChild (
- IN EFI_SERVICE_BINDING_PROTOCOL * pThis,
- IN OUT EFI_HANDLE * pChildHandle
- );
-
-/**
- Destroys a child handle with a protocol installed on it.
-
- When the socket application is linked against UseSocketDxe, the ::close
- routine indirectly calls this routine in SocketDxe to undo the operations
- done by the ::EslDxeCreateChild routine. This routine removes the socket
- protocol from the handle and then destroys the child handle if there are
- no other protocols attached.
-
- @param [in] pThis Pointer to the EFI_SERVICE_BINDING_PROTOCOL instance.
- @param [in] ChildHandle Handle of the child to destroy
-
- @retval EFI_SUCCESS The protocol was removed from ChildHandle.
- @retval EFI_UNSUPPORTED ChildHandle does not support the protocol that is being removed.
- @retval EFI_INVALID_PARAMETER Child handle is not a valid UEFI Handle.
- @retval EFI_ACCESS_DENIED The protocol could not be removed from the ChildHandle
- because its services are being used.
- @retval other The child handle was not destroyed
-
-**/
-EFI_STATUS
-EFIAPI
-EslDxeDestroyChild (
- IN EFI_SERVICE_BINDING_PROTOCOL * pThis,
- IN EFI_HANDLE ChildHandle
- );
-
-/**
-Install the socket service
-
-SocketDxe uses this routine to announce the socket interface to
-the rest of EFI.
-
-@param [in] pImageHandle Address of the image handle
-
-@retval EFI_SUCCESS Service installed successfully
-**/
-EFI_STATUS
-EFIAPI
-EslDxeInstall (
- IN EFI_HANDLE * pImageHandle
- );
-
-/**
-Uninstall the socket service
-
-SocketDxe uses this routine to notify EFI that the socket layer
-is no longer available.
-
-@param [in] ImageHandle Handle for the image.
-
-@retval EFI_SUCCESS Service installed successfully
-**/
-EFI_STATUS
-EFIAPI
-EslDxeUninstall (
- IN EFI_HANDLE ImageHandle
- );
-
-//------------------------------------------------------------------------------
-// Service Support Routines
-//------------------------------------------------------------------------------
-
-/**
- Connect to the network service bindings
-
- Walk the network service protocols on the controller handle and
- locate any that are not in use. Create ::ESL_SERVICE structures to
- manage the network layer interfaces for the socket driver. Tag
- each of the network interfaces that are being used. Finally, this
- routine calls ESL_SOCKET_BINDING::pfnInitialize to prepare the network
- interface for use by the socket layer.
-
- @param [in] BindingHandle Handle for protocol binding.
- @param [in] Controller Handle of device to work with.
-
- @retval EFI_SUCCESS This driver is added to Controller.
- @retval other This driver does not support this device.
-
-**/
-EFI_STATUS
-EFIAPI
-EslServiceConnect (
- IN EFI_HANDLE BindingHandle,
- IN EFI_HANDLE Controller
- );
-
-/**
- Shutdown the connections to the network layer by locating the
- tags on the network interfaces established by ::EslServiceConnect.
- This routine calls ESL_SOCKET_BINDING::pfnShutdown to shutdown the any
- activity on the network interface and then free the ::ESL_SERVICE
- structures.
-
- @param [in] BindingHandle Handle for protocol binding.
- @param [in] Controller Handle of device to stop driver on.
-
- @retval EFI_SUCCESS This driver is removed Controller.
- @retval EFI_DEVICE_ERROR The device could not be stopped due to a device error.
- @retval other This driver was not removed from this device.
-
-**/
-EFI_STATUS
-EFIAPI
-EslServiceDisconnect (
- IN EFI_HANDLE BindingHandle,
- IN EFI_HANDLE Controller
- );
-
-/**
-Initialize the service layer
-
-@param [in] ImageHandle Handle for the image.
-
-**/
-VOID
-EFIAPI
-EslServiceLoad (
- IN EFI_HANDLE ImageHandle
- );
-
-/**
- Shutdown the service layer
-
-**/
-VOID
-EFIAPI
-EslServiceUnload (
- VOID
- );
-
-//------------------------------------------------------------------------------
-// Socket Protocol Routines
-//------------------------------------------------------------------------------
-
-/**
- Bind a name to a socket.
-
- This routine calls the network specific layer to save the network
- address of the local connection point.
-
- The ::bind routine calls this routine to connect a name
- (network address and port) to a socket on the local machine.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
-
- @param [in] pSockAddr Address of a sockaddr structure that contains the
- connection point on the local machine. An IPv4 address
- of INADDR_ANY specifies that the connection is made to
- all of the network stacks on the platform. Specifying a
- specific IPv4 address restricts the connection to the
- network stack supporting that address. Specifying zero
- for the port causes the network layer to assign a port
- number from the dynamic range. Specifying a specific
- port number causes the network layer to use that port.
-
- @param [in] SockAddrLength Specifies the length in bytes of the sockaddr structure.
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket successfully created
-
- **/
-EFI_STATUS
-EslSocketBind (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN CONST struct sockaddr * pSockAddr,
- IN socklen_t SockAddrLength,
- OUT int * pErrno
- );
-
-/**
- Determine if the socket is closed
-
- This routine checks the state of the socket to determine if
- the network specific layer has completed the close operation.
-
- The ::close routine polls this routine to determine when the
- close operation is complete. The close operation needs to
- reverse the operations of the ::EslSocketAllocate routine.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS Socket successfully closed
- @retval EFI_NOT_READY Close still in progress
- @retval EFI_ALREADY Close operation already in progress
- @retval Other Failed to close the socket
-
-**/
-EFI_STATUS
-EslSocketClosePoll (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int * pErrno
- );
-
-/**
- Start the close operation on the socket
-
- This routine calls the network specific layer to initiate the
- close state machine. This routine then calls the network
- specific layer to determine if the close state machine has gone
- to completion. The result from this poll is returned to the
- caller.
-
- The ::close routine calls this routine to start the close
- operation which reverses the operations of the
- ::EslSocketAllocate routine. The close routine then polls
- the ::EslSocketClosePoll routine to determine when the
- socket is closed.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param [in] bCloseNow Boolean to control close behavior
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS Socket successfully closed
- @retval EFI_NOT_READY Close still in progress
- @retval EFI_ALREADY Close operation already in progress
- @retval Other Failed to close the socket
-
-**/
-EFI_STATUS
-EslSocketCloseStart (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN BOOLEAN bCloseNow,
- IN int * pErrno
- );
-
-/**
- Connect to a remote system via the network.
-
- This routine calls the network specific layer to establish
- the remote system address and establish the connection to
- the remote system.
-
- The ::connect routine calls this routine to establish a
- connection with the specified remote system. This routine
- is designed to be polled by the connect routine for completion
- of the network connection.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
-
- @param [in] pSockAddr Network address of the remote system.
-
- @param [in] SockAddrLength Length in bytes of the network address.
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS The connection was successfully established.
- @retval EFI_NOT_READY The connection is in progress, call this routine again.
- @retval Others The connection attempt failed.
-
- **/
-EFI_STATUS
-EslSocketConnect (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN const struct sockaddr * pSockAddr,
- IN socklen_t SockAddrLength,
- IN int * pErrno
- );
-
-/**
- Get the local address.
-
- This routine calls the network specific layer to get the network
- address of the local host connection point.
-
- The ::getsockname routine calls this routine to obtain the network
- address associated with the local host connection point.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
-
- @param [out] pAddress Network address to receive the local system address
-
- @param [in,out] pAddressLength Length of the local network address structure
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Local address successfully returned
-
- **/
-EFI_STATUS
-EslSocketGetLocalAddress (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- OUT struct sockaddr * pAddress,
- IN OUT socklen_t * pAddressLength,
- IN int * pErrno
- );
-
-/**
- Get the peer address.
-
- This routine calls the network specific layer to get the remote
- system connection point.
-
- The ::getpeername routine calls this routine to obtain the network
- address of the remote connection point.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
-
- @param [out] pAddress Network address to receive the remote system address
-
- @param [in,out] pAddressLength Length of the remote network address structure
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Remote address successfully returned
-
- **/
-EFI_STATUS
-EslSocketGetPeerAddress (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- OUT struct sockaddr * pAddress,
- IN OUT socklen_t * pAddressLength,
- IN int * pErrno
- );
-
-/**
- Establish the known port to listen for network connections.
-
- This routine calls into the network protocol layer to establish
- a handler that is called upon connection completion. The handler
- is responsible for inserting the connection into the FIFO.
-
- The ::listen routine indirectly calls this routine to place the
- socket into a state that enables connection attempts. Connections
- are placed in a FIFO that is serviced by the application. The
- application calls the ::accept (::EslSocketAccept) routine to
- remove the next connection from the FIFO and get the associated
- socket and address.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
-
- @param [in] Backlog Backlog specifies the maximum FIFO depth for
- the connections waiting for the application
- to call accept. Connection attempts received
- while the queue is full are refused.
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket successfully created
- @retval Other - Failed to enable the socket for listen
-
-**/
-EFI_STATUS
-EslSocketListen (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN INT32 Backlog,
- OUT int * pErrno
- );
-
-/**
- Get the socket options
-
- This routine handles the socket level options and passes the
- others to the network specific layer.
-
- The ::getsockopt routine calls this routine to retrieve the
- socket options one at a time by name.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param [in] level Option protocol level
- @param [in] OptionName Name of the option
- @param [out] pOptionValue Buffer to receive the option value
- @param [in,out] pOptionLength Length of the buffer in bytes,
- upon return length of the option value in bytes
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket data successfully received
-
- **/
-EFI_STATUS
-EslSocketOptionGet (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int level,
- IN int option_name,
- OUT void * __restrict option_value,
- IN OUT socklen_t * __restrict option_len,
- IN int * pErrno
- );
-
-/**
- Set the socket options
-
- This routine handles the socket level options and passes the
- others to the network specific layer.
-
- The ::setsockopt routine calls this routine to adjust the socket
- options one at a time by name.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
- @param [in] level Option protocol level
- @param [in] OptionName Name of the option
- @param [in] pOptionValue Buffer containing the option value
- @param [in] OptionLength Length of the buffer in bytes
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Option successfully set
-
- **/
-EFI_STATUS
-EslSocketOptionSet (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int level,
- IN int option_name,
- IN CONST void * option_value,
- IN socklen_t option_len,
- IN int * pErrno
- );
-
-/**
- Poll a socket for pending activity.
-
- This routine builds a detected event mask which is returned to
- the caller in the buffer provided.
-
- The ::poll routine calls this routine to determine if the socket
- needs to be serviced as a result of connection, error, receive or
- transmit activity.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
-
- @param [in] Events Events of interest for this socket
-
- @param [in] pEvents Address to receive the detected events
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket successfully polled
- @retval EFI_INVALID_PARAMETER - When pEvents is NULL
-
- **/
-EFI_STATUS
-EslSocketPoll (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN short Events,
- IN short * pEvents,
- IN int * pErrno
- );
-
-/**
- Receive data from a network connection.
-
- This routine calls the network specific routine to remove the
- next portion of data from the receive queue and return it to the
- caller.
-
- The ::recvfrom routine calls this routine to determine if any data
- is received from the remote system. Note that the other routines
- ::recv and ::read are layered on top of ::recvfrom.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
-
- @param [in] Flags Message control flags
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer to receive the data.
-
- @param [in] pDataLength Number of received data bytes in the buffer.
-
- @param [out] pAddress Network address to receive the remote system address
-
- @param [in,out] pAddressLength Length of the remote network address structure
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket data successfully received
-
- **/
-EFI_STATUS
-EslSocketReceive (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN INT32 Flags,
- IN size_t BufferLength,
- IN UINT8 * pBuffer,
- OUT size_t * pDataLength,
- OUT struct sockaddr * pAddress,
- IN OUT socklen_t * pAddressLength,
- IN int * pErrno
- );
-
-/**
- Shutdown the socket receive and transmit operations
-
- This routine sets a flag to stop future transmissions and calls
- the network specific layer to cancel the pending receive operation.
-
- The ::shutdown routine calls this routine to stop receive and transmit
- operations on the socket.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
-
- @param [in] How Which operations to stop
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket operations successfully shutdown
-
- **/
-EFI_STATUS
-EslSocketShutdown (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int How,
- IN int * pErrno
- );
-
-/**
- Send data using a network connection.
-
- This routine calls the network specific layer to queue the data
- for transmission. Eventually the buffer will reach the head of
- the queue and will get transmitted over the network. For datagram
- sockets there is no guarantee that the data reaches the application
- running on the remote system.
-
- The ::sendto routine calls this routine to send data to the remote
- system. Note that ::send and ::write are layered on top of ::sendto.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
-
- @param [in] Flags Message control flags
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer containing the data to send
-
- @param [in] pDataLength Address to receive the number of data bytes sent
-
- @param [in] pAddress Network address of the remote system address
-
- @param [in] AddressLength Length of the remote network address structure
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket data successfully queued for transmit
-
- **/
-EFI_STATUS
-EslSocketTransmit (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int Flags,
- IN size_t BufferLength,
- IN CONST UINT8 * pBuffer,
- OUT size_t * pDataLength,
- IN const struct sockaddr * pAddress,
- IN socklen_t AddressLength,
- IN int * pErrno
- );
-
-//------------------------------------------------------------------------------
-
-#endif // _EFI_SOCKET_LIB_H_
diff --git a/StdLib/Include/Ia32/machine/_math.h b/StdLib/Include/Ia32/machine/_math.h
deleted file mode 100644
index 67cf98c30d..0000000000
--- a/StdLib/Include/Ia32/machine/_math.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
-
-Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-This program and the accompanying materials are licensed and made available under
-the terms and conditions of the BSD License that accompanies this distribution.
-The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php.
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#ifndef _MACHINE_MATH_H
-#define _MACHINE_MATH_H
-
-//#define __HUGE_VAL ???????????.?????????????
-
-#endif /* _MACHINE_MATH_H */
diff --git a/StdLib/Include/Ia32/machine/ansi.h b/StdLib/Include/Ia32/machine/ansi.h
deleted file mode 100644
index 6ef0a740ca..0000000000
--- a/StdLib/Include/Ia32/machine/ansi.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/** @file
- Machine dependent ANSI type definitions.
-
- Copyright (c) 2010-2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)ansi.h 8.2 (Berkeley) 1/4/94
- NetBSD: ansi.h,v 1.19 2006/10/04 13:52:00 tnozaki Exp
- */
-#ifndef _ANSI_H_
-#define _ANSI_H_
-
-#include <sys/EfiCdefs.h>
-
-#include <machine/int_types.h>
-
-/*
- * Types which are fundamental to the implementation and may appear in
- * more than one standard header are defined here. Standard headers
- * then use:
- * #ifdef _BSD_SIZE_T_
- * typedef _BSD_SIZE_T_ size_t;
- * #undef _BSD_SIZE_T_
- * #endif
- */
-#define _BSD_CLOCK_T_ _EFI_CLOCK_T /* clock() */
-#define _BSD_PTRDIFF_T_ _EFI_PTRDIFF_T_ /* ptr1 - ptr2 */
-#define _BSD_SIZE_T_ _EFI_SIZE_T_ /* sizeof() */
-#define _BSD_SSIZE_T_ INTN /* byte count or error */
-#define _BSD_TIME_T_ _EFI_TIME_T /* time() */
-#define _BSD_VA_LIST_ VA_LIST
-#define _BSD_CLOCKID_T_ INT64 /* clockid_t */
-#define _BSD_TIMER_T_ INT64 /* timer_t */
-#define _BSD_SUSECONDS_T_ INT64 /* suseconds_t */
-#define _BSD_USECONDS_T_ UINT64 /* useconds_t */
-
-/*
- * NOTE: rune_t is not covered by ANSI nor other standards, and should not
- * be instantiated outside of lib/libc/locale. use wchar_t.
- *
- * Runes (wchar_t) is declared to be an ``int'' instead of the more natural
- * ``unsigned long'' or ``long''. Two things are happening here. It is not
- * unsigned so that EOF (-1) can be naturally assigned to it and used. Also,
- * it looks like 10646 will be a 31 bit standard. This means that if your
- * ints cannot hold 32 bits, you will be in trouble. The reason an int was
- * chosen over a long is that the is*() and to*() routines take ints (says
- * ANSI C), but they use _RUNE_T_ instead of int. By changing it here, you
- * lose a bit of ANSI conformance, but your programs will still work.
- *
- * Note that _WCHAR_T_ and _RUNE_T_ must be of the same type. When wchar_t
- * and rune_t are typedef'd, _WCHAR_T_ will be undef'd, but _RUNE_T remains
- * defined for ctype.h.
- */
-#define _BSD_WCHAR_T_ _EFI_WCHAR_T /* wchar_t */
-#define _BSD_WINT_T_ _EFI_WINT_T /* wint_t */
-#define _BSD_RUNE_T_ _EFI_WCHAR_T /* rune_t */
-#define _BSD_WCTRANS_T_ void * /* wctrans_t */
-#define _BSD_WCTYPE_T_ unsigned int /* wctype_t */
-
-/*
- * mbstate_t is an opaque object to keep conversion state, during multibyte
- * stream conversions. The content must not be referenced by user programs.
- */
-typedef struct {
- UINT32 A; // Np;
- UINT32 B; // U;
- UINT32 E; // L
- UINT8 C[4]; // n[4]
- UINT16 D[2]; // w[2]
-} __mbstate_t;
-#define _BSD_MBSTATE_T_ __mbstate_t /* mbstate_t */
-
-#endif /* _ANSI_H_ */
diff --git a/StdLib/Include/Ia32/machine/asm.h b/StdLib/Include/Ia32/machine/asm.h
deleted file mode 100644
index 3d8f11f16c..0000000000
--- a/StdLib/Include/Ia32/machine/asm.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/* $NetBSD: asm.h,v 1.30 2006/01/20 22:02:40 christos Exp $ */
-
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)asm.h 5.5 (Berkeley) 5/7/91
- */
-
-#ifndef _I386_ASM_H_
-#define _I386_ASM_H_
-
-#ifdef _KERNEL_OPT
-#include "opt_multiprocessor.h"
-#endif
-
-#ifdef PIC
-#define PIC_PROLOGUE \
- pushl %ebx; \
- call 1f; \
-1: \
- popl %ebx; \
- addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
-#define PIC_EPILOGUE \
- popl %ebx
-#define PIC_PLT(x) x@PLT
-#define PIC_GOT(x) x@GOT(%ebx)
-#define PIC_GOTOFF(x) x@GOTOFF(%ebx)
-#else
-#define PIC_PROLOGUE
-#define PIC_EPILOGUE
-#define PIC_PLT(x) x
-#define PIC_GOT(x) x
-#define PIC_GOTOFF(x) x
-#endif
-
-#ifdef __ELF__
-# define _C_LABEL(x) x
-#else
-# ifdef __STDC__
-# define _C_LABEL(x) _ ## x
-# else
-# define _C_LABEL(x) _/**/x
-# endif
-#endif
-#define _ASM_LABEL(x) x
-
-#define CVAROFF(x, y) _C_LABEL(x) + y
-
-#ifdef __STDC__
-# define __CONCAT(x,y) x ## y
-# define __STRING(x) #x
-#else
-# define __CONCAT(x,y) x/**/y
-# define __STRING(x) "x"
-#endif
-
-/* let kernels and others override entrypoint alignment */
-#if !defined(_ALIGN_TEXT) && !defined(_KERNEL)
-# ifdef __ELF__
-# define _ALIGN_TEXT .align 4
-# else
-# define _ALIGN_TEXT .align 2
-# endif
-#endif
-
-#define _ENTRY(x) \
- .text; _ALIGN_TEXT; .globl x; .type x,@function; x:
-
-#ifdef _KERNEL
-
-#if defined(MULTIPROCESSOR)
-#define CPUVAR(off) %fs:__CONCAT(CPU_INFO_,off)
-#else
-#define CPUVAR(off) _C_LABEL(cpu_info_primary)+__CONCAT(CPU_INFO_,off)
-#endif /* MULTIPROCESSOR */
-
-/* XXX Can't use __CONCAT() here, as it would be evaluated incorrectly. */
-#ifdef __ELF__
-#ifdef __STDC__
-#define IDTVEC(name) \
- ALIGN_TEXT; .globl X ## name; .type X ## name,@function; X ## name:
-#else
-#define IDTVEC(name) \
- ALIGN_TEXT; .globl X/**/name; .type X/**/name,@function; X/**/name:
-#endif /* __STDC__ */
-#else
-#ifdef __STDC__
-#define IDTVEC(name) \
- ALIGN_TEXT; .globl _X ## name; .type _X ## name,@function; _X ## name:
-#else
-#define IDTVEC(name) \
- ALIGN_TEXT; .globl _X/**/name; .type _X/**/name,@function; _X/**/name:
-#endif /* __STDC__ */
-#endif /* __ELF__ */
-
-#ifdef __ELF__
-#define ALIGN_DATA .align 4
-#define ALIGN_TEXT .align 4,0x90 /* 4-byte boundaries, NOP-filled */
-#define SUPERALIGN_TEXT .align 16,0x90 /* 16-byte boundaries better for 486 */
-#else
-#define ALIGN_DATA .align 2
-#define ALIGN_TEXT .align 2,0x90 /* 4-byte boundaries, NOP-filled */
-#define SUPERALIGN_TEXT .align 4,0x90 /* 16-byte boundaries better for 486 */
-#endif /* __ELF__ */
-
-#define _ALIGN_TEXT ALIGN_TEXT
-
-#ifdef GPROF
-#ifdef __ELF__
-#define MCOUNT_ASM call _C_LABEL(__mcount)
-#else /* __ELF__ */
-#define MCOUNT_ASM call _C_LABEL(mcount)
-#endif /* __ELF__ */
-#else /* GPROF */
-#define MCOUNT_ASM /* nothing */
-#endif /* GPROF */
-
-#endif /* _KERNEL */
-
-
-
-#ifdef GPROF
-# ifdef __ELF__
-# define _PROF_PROLOGUE \
- pushl %ebp; movl %esp,%ebp; call PIC_PLT(__mcount); popl %ebp
-# else
-# define _PROF_PROLOGUE \
- pushl %ebp; movl %esp,%ebp; call PIC_PLT(mcount); popl %ebp
-# endif
-#else
-# define _PROF_PROLOGUE
-#endif
-
-#define ENTRY(y) _ENTRY(_C_LABEL(y)); _PROF_PROLOGUE
-#define NENTRY(y) _ENTRY(_C_LABEL(y))
-#define ASENTRY(y) _ENTRY(_ASM_LABEL(y)); _PROF_PROLOGUE
-
-#define ASMSTR .asciz
-
-#ifdef __ELF__
-#define RCSID(x) .section ".ident"; .asciz x
-#else
-#define RCSID(x) .text; .asciz x
-#endif
-
-#ifdef NO_KERNEL_RCSIDS
-#define __KERNEL_RCSID(_n, _s) /* nothing */
-#else
-#define __KERNEL_RCSID(_n, _s) RCSID(_s)
-#endif
-
-#ifdef __ELF__
-#define WEAK_ALIAS(alias,sym) \
- .weak alias; \
- alias = sym
-#endif
-/*
- * STRONG_ALIAS: create a strong alias.
- */
-#define STRONG_ALIAS(alias,sym) \
- .globl alias; \
- alias = sym
-
-#ifdef __STDC__
-#define WARN_REFERENCES(sym,msg) \
- .stabs msg ## ,30,0,0,0 ; \
- .stabs __STRING(_C_LABEL(sym)) ## ,1,0,0,0
-#elif defined(__ELF__)
-#define WARN_REFERENCES(sym,msg) \
- .stabs msg,30,0,0,0 ; \
- .stabs __STRING(sym),1,0,0,0
-#else
-#define WARN_REFERENCES(sym,msg) \
- .stabs msg,30,0,0,0 ; \
- .stabs __STRING(_/**/sym),1,0,0,0
-#endif /* __STDC__ */
-
-
-
-#endif /* !_I386_ASM_H_ */
diff --git a/StdLib/Include/Ia32/machine/bswap.h b/StdLib/Include/Ia32/machine/bswap.h
deleted file mode 100644
index 7016f7ca29..0000000000
--- a/StdLib/Include/Ia32/machine/bswap.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* $NetBSD: bswap.h,v 1.3 2006/01/31 07:49:18 dsl Exp $ */
-
-/* Written by Manuel Bouyer. Public domain */
-
-#ifndef _MACHINE_BSWAP_H_
-#define _MACHINE_BSWAP_H_
-
-#include <machine/byte_swap.h>
-
-#define __BSWAP_RENAME
-#include <sys/bswap.h>
-
-#endif /* !_MACHINE_BSWAP_H_ */
diff --git a/StdLib/Include/Ia32/machine/byte_swap.h b/StdLib/Include/Ia32/machine/byte_swap.h
deleted file mode 100644
index db16c97b2e..0000000000
--- a/StdLib/Include/Ia32/machine/byte_swap.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* $NetBSD: byte_swap.h,v 1.10 2006/01/30 22:46:36 dsl Exp $ */
-
-/*-
- * Copyright (c) 1998 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Charles M. Hannum.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _I386_BYTE_SWAP_H_
-#define _I386_BYTE_SWAP_H_
-
-#include <sys/types.h>
-
-#if defined(_KERNEL_OPT)
-#include "opt_cputype.h"
-#endif
-
-#ifdef __GNUC__
-#include <sys/types.h>
-__BEGIN_DECLS
-
-#define __BYTE_SWAP_U32_VARIABLE __byte_swap_u32_variable
-static __inline uint32_t __byte_swap_u32_variable(uint32_t);
-static __inline uint32_t
-__byte_swap_u32_variable(uint32_t x)
-{
- __asm volatile (
-#if defined(_KERNEL) && !defined(_LKM) && !defined(I386_CPU)
- "bswap %1"
-#else
- "rorw $8, %w1\n\trorl $16, %1\n\trorw $8, %w1"
-#endif
- : "=r" (x) : "0" (x));
- return (x);
-}
-
-#define __BYTE_SWAP_U16_VARIABLE __byte_swap_u16_variable
-static __inline uint16_t __byte_swap_u16_variable(uint16_t);
-static __inline uint16_t
-__byte_swap_u16_variable(uint16_t x)
-{
- __asm volatile ("rorw $8, %w1" : "=r" (x) : "0" (x));
- return (x);
-}
-
-__END_DECLS
-#endif
-
-#endif /* !_I386_BYTE_SWAP_H_ */
diff --git a/StdLib/Include/Ia32/machine/endian.h b/StdLib/Include/Ia32/machine/endian.h
deleted file mode 100644
index 8c2cfd12a1..0000000000
--- a/StdLib/Include/Ia32/machine/endian.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: endian.h,v 1.29 2000/03/17 00:09:20 mycroft Exp $ */
-
-#include <sys/endian.h>
diff --git a/StdLib/Include/Ia32/machine/endian_machdep.h b/StdLib/Include/Ia32/machine/endian_machdep.h
deleted file mode 100644
index 83947a5fe6..0000000000
--- a/StdLib/Include/Ia32/machine/endian_machdep.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: endian_machdep.h,v 1.3 2006/01/30 21:52:38 dsl Exp $ */
-
-#define _BYTE_ORDER _LITTLE_ENDIAN
diff --git a/StdLib/Include/Ia32/machine/float.h b/StdLib/Include/Ia32/machine/float.h
deleted file mode 100644
index c7dc6203f8..0000000000
--- a/StdLib/Include/Ia32/machine/float.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: float.h,v 1.12 2003/02/26 21:29:00 fvdl Exp $ */
-
-#include <x86/float.h>
diff --git a/StdLib/Include/Ia32/machine/ieee.h b/StdLib/Include/Ia32/machine/ieee.h
deleted file mode 100644
index 17a1d48d3a..0000000000
--- a/StdLib/Include/Ia32/machine/ieee.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: ieee.h,v 1.2 2003/02/26 21:29:01 fvdl Exp $ */
-
-#include <x86/ieee.h>
diff --git a/StdLib/Include/Ia32/machine/int_const.h b/StdLib/Include/Ia32/machine/int_const.h
deleted file mode 100644
index c3a59d7237..0000000000
--- a/StdLib/Include/Ia32/machine/int_const.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* $NetBSD: int_const.h,v 1.1 2001/04/14 22:38:38 kleink Exp $ */
-
-/*-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _I386_INT_CONST_H_
-#define _I386_INT_CONST_H_
-
-/*
- * 7.18.4 Macros for integer constants
- */
-
-/* 7.18.4.1 Macros for minimum-width integer constants */
-
-#define INT8_C(c) c
-#define INT16_C(c) c
-#define INT32_C(c) c
-#define INT64_C(c) c ## LL
-
-#define UINT8_C(c) c ## U
-#define UINT16_C(c) c ## U
-#define UINT32_C(c) c ## U
-#define UINT64_C(c) c ## ULL
-
-/* 7.18.4.2 Macros for greatest-width integer constants */
-
-#define INTMAX_C(c) c ## LL
-#define UINTMAX_C(c) c ## ULL
-
-#endif /* !_I386_INT_CONST_H_ */
diff --git a/StdLib/Include/Ia32/machine/int_limits.h b/StdLib/Include/Ia32/machine/int_limits.h
deleted file mode 100644
index b0aa9d5d7c..0000000000
--- a/StdLib/Include/Ia32/machine/int_limits.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/** @file
- 7.18.2 Limits of specified-width integer types.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: int_limits.h,v 1.5 2004/05/22 14:16:59 kleink Exp
-**/
-#ifndef _I386_INT_LIMITS_H_
-#define _I386_INT_LIMITS_H_
-
-/* 7.18.2.1 Limits of exact-width integer types */
-
-/* minimum values of exact-width signed integer types */
-#define INT8_MIN ((-0x7f)-1) /* int8_t */
-#define INT16_MIN ((-0x7fff)-1) /* int16_t */
-#define INT32_MIN ((-0x7fffffff)-1) /* int32_t */
-#define INT64_MIN ((-0x7fffffffffffffffLL)-1) /* int64_t */
-
-/* maximum values of exact-width signed integer types */
-#define INT8_MAX 0x7f /* int8_t */
-#define INT16_MAX 0x7fff /* int16_t */
-#define INT32_MAX 0x7fffffff /* int32_t */
-#define INT64_MAX 0x7fffffffffffffffLL /* int64_t */
-
-/* maximum values of exact-width unsigned integer types */
-#define UINT8_MAX 0xffU /* uint8_t */
-#define UINT16_MAX 0xffffU /* uint16_t */
-#define UINT32_MAX 0xffffffffU /* uint32_t */
-#define UINT64_MAX 0xffffffffffffffffULL /* uint64_t */
-
-/* 7.18.2.2 Limits of minimum-width integer types */
-
-/* minimum values of minimum-width signed integer types */
-#define INT_LEAST8_MIN ((-0x7f)-1) /* int_least8_t */
-#define INT_LEAST16_MIN ((-0x7fff)-1) /* int_least16_t */
-#define INT_LEAST32_MIN ((-0x7fffffff)-1) /* int_least32_t */
-#define INT_LEAST64_MIN ((-0x7fffffffffffffffLL)-1) /* int_least64_t */
-
-/* maximum values of minimum-width signed integer types */
-#define INT_LEAST8_MAX 0x7f /* int_least8_t */
-#define INT_LEAST16_MAX 0x7fff /* int_least16_t */
-#define INT_LEAST32_MAX 0x7fffffff /* int_least32_t */
-#define INT_LEAST64_MAX 0x7fffffffffffffffLL /* int_least64_t */
-
-/* maximum values of minimum-width unsigned integer types */
-#define UINT_LEAST8_MAX 0xffU /* uint_least8_t */
-#define UINT_LEAST16_MAX 0xffffU /* uint_least16_t */
-#define UINT_LEAST32_MAX 0xffffffffU /* uint_least32_t */
-#define UINT_LEAST64_MAX 0xffffffffffffffffULL /* uint_least64_t */
-
-/* 7.18.2.3 Limits of fastest minimum-width integer types */
-
-/* minimum values of fastest minimum-width signed integer types */
-#define INT_FAST8_MIN ((-0x7f)-1) /* int_fast8_t */
-#define INT_FAST16_MIN ((-0x7fffffff)-1) /* int_fast16_t */
-#define INT_FAST32_MIN ((-0x7fffffff)-1) /* int_fast32_t */
-#define INT_FAST64_MIN ((-0x7fffffffffffffffLL-1) /* int_fast64_t */
-
-/* maximum values of fastest minimum-width signed integer types */
-#define INT_FAST8_MAX 0x7f /* int_fast8_t */
-#define INT_FAST16_MAX 0x7fffffff /* int_fast16_t */
-#define INT_FAST32_MAX 0x7fffffff /* int_fast32_t */
-#define INT_FAST64_MAX 0x7fffffffffffffffLL /* int_fast64_t */
-
-/* maximum values of fastest minimum-width unsigned integer types */
-#define UINT_FAST8_MAX 0xffU /* uint_fast8_t */
-#define UINT_FAST16_MAX 0xffffffffU /* uint_fast16_t */
-#define UINT_FAST32_MAX 0xffffffffU /* uint_fast32_t */
-#define UINT_FAST64_MAX 0xffffffffffffffffULL /* uint_fast64_t */
-
-/* 7.18.2.4 Limits of integer types capable of holding object pointers */
-
-#define INTPTR_MIN ((-0x7fffffff)-1) /* intptr_t */
-#define INTPTR_MAX 0x7fffffff /* intptr_t */
-#define UINTPTR_MAX 0xffffffffU /* uintptr_t */
-
-/* 7.18.2.5 Limits of greatest-width integer types */
-
-#define INTMAX_MIN ((-0x7fffffffffffffffLL)-1) /* intmax_t */
-#define INTMAX_MAX 0x7fffffffffffffffLL /* intmax_t */
-#define UINTMAX_MAX 0xffffffffffffffffULL /* uintmax_t */
-
-
-/*
- * 7.18.3 Limits of other integer types
- */
-
-/* limits of ptrdiff_t */
-#define PTRDIFF_MIN ((-0x7fffffff)-1) /* ptrdiff_t */
-#define PTRDIFF_MAX 0x7fffffff /* ptrdiff_t */
-
-/* limits of sig_atomic_t */
-#define SIG_ATOMIC_MIN ((-0x7fffffff)-1) /* sig_atomic_t */
-#define SIG_ATOMIC_MAX 0x7fffffff /* sig_atomic_t */
-
-/* limit of size_t */
-#define SIZE_MAX 0xffffffffU /* size_t */
-#define SIZE_T_MAX SIZE_MAX
-
-#endif /* !_I386_INT_LIMITS_H_ */
diff --git a/StdLib/Include/Ia32/machine/int_mwgwtypes.h b/StdLib/Include/Ia32/machine/int_mwgwtypes.h
deleted file mode 100644
index 5e28108f8e..0000000000
--- a/StdLib/Include/Ia32/machine/int_mwgwtypes.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/** @file
- Minimum and Greatest Width Integer types.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Portions Copyright (c) 2001 The NetBSD Foundation, Inc.
- All rights reserved.
-
- This code is derived from software contributed to The NetBSD Foundation
- by Klaus Klein.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. All advertising materials mentioning features or use of this software
- must display the following acknowledgement:
- This product includes software developed by the NetBSD
- Foundation, Inc. and its contributors.
- 4. Neither the name of The NetBSD Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: int_mwgwtypes.h,v 1.5 2005/12/24 20:06:47 perry Exp
-**/
-#ifndef _AMD64_INT_MWGWTYPES_H_
-#define _AMD64_INT_MWGWTYPES_H_
-
-/*
- * 7.18.1 Integer types
- */
-
-/* 7.18.1.2 Minimum-width integer types */
-
-typedef CHAR8 int_least8_t;
-typedef UINT8 uint_least8_t;
-typedef INT16 int_least16_t;
-typedef UINT16 uint_least16_t;
-typedef INT32 int_least32_t;
-typedef UINT32 uint_least32_t;
-typedef INT64 int_least64_t;
-typedef UINT64 uint_least64_t;
-
-/* 7.18.1.3 Fastest minimum-width integer types */
-typedef INT32 int_fast8_t;
-typedef UINT32 uint_fast8_t;
-typedef INT32 int_fast16_t;
-typedef UINT32 uint_fast16_t;
-typedef INT32 int_fast32_t;
-typedef UINT32 uint_fast32_t;
-typedef INT64 int_fast64_t;
-typedef UINT64 uint_fast64_t;
-
-/* 7.18.1.5 Greatest-width integer types */
-
-typedef INT64 intmax_t;
-typedef UINT64 uintmax_t;
-
-#endif /* !_AMD64_INT_MWGWTYPES_H_ */
diff --git a/StdLib/Include/Ia32/machine/int_types.h b/StdLib/Include/Ia32/machine/int_types.h
deleted file mode 100644
index d04d8c0e4c..0000000000
--- a/StdLib/Include/Ia32/machine/int_types.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* $NetBSD: int_types.h,v 1.10 2005/12/24 20:07:10 perry Exp $ */
-
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: @(#)types.h 7.5 (Berkeley) 3/9/91
- */
-
-#ifndef _I386_INT_TYPES_H_
-#define _I386_INT_TYPES_H_
-
-#include <sys/EfiCdefs.h>
-
-/*
- * 7.18.1 Integer types
- */
-
-/* 7.18.1.1 Exact-width integer types */
-
-typedef INT8 __int8_t;
-typedef UINT8 __uint8_t;
-typedef INT16 __int16_t;
-typedef UINT16 __uint16_t;
-typedef INT32 __int32_t;
-typedef UINT32 __uint32_t;
-typedef INT64 __int64_t;
-typedef UINT64 __uint64_t;
-
-#define __BIT_TYPES_DEFINED__
-
-/* 7.18.1.4 Integer types capable of holding object pointers */
-
-typedef INTN __intptr_t;
-typedef UINTN __uintptr_t;
-
-#endif /* !_I386_INT_TYPES_H_ */
diff --git a/StdLib/Include/Ia32/machine/limits.h b/StdLib/Include/Ia32/machine/limits.h
deleted file mode 100644
index cc42e0f4c0..0000000000
--- a/StdLib/Include/Ia32/machine/limits.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/** @file
- This header <machine/limits.h> defines several macros that expand to various
- CPU-architecture-specific limits and parameters of the standard integer types.
-
- The values given below are constant expressions suitable for use
- in #if preprocessing directives.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <x86/limits.h>
-
-/** Number of bits making up a pointer. **/
-#define __POINTER_BIT 32
-
-/** Number of bits comprising an object of type long int. **/
-#define __LONG_BIT 32
-
-/** Minimum value for an object of type long int. **/
-#define __LONG_MIN (-2147483647L - 1L) // -(2^31 - 1)
-
-/** Maximum value for an object of type long int. **/
-#define __LONG_MAX 2147483647L // 2^31 - 1
-
-/** Maximum value for an object of type unsigned long int. **/
-#define __ULONG_MAX 0xffffffffUL // 2^32 - 1
-
diff --git a/StdLib/Include/Ia32/machine/math.h b/StdLib/Include/Ia32/machine/math.h
deleted file mode 100644
index a53422933c..0000000000
--- a/StdLib/Include/Ia32/machine/math.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: math.h,v 1.3 2005/12/11 12:16:25 christos Exp $ */
-
-#include <x86/math.h>
diff --git a/StdLib/Include/Ia32/machine/param.h b/StdLib/Include/Ia32/machine/param.h
deleted file mode 100644
index 9b57a32afd..0000000000
--- a/StdLib/Include/Ia32/machine/param.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/** @file
- Machine dependent constants for Intel IA32 Architecture.
-
- Copyright (c) 2010-2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)param.h 5.8 (Berkeley) 6/28/91
- * $NetBSD: param.h,v 1.61 2006/08/28 13:43:35 yamt Exp
- */
-#ifndef _I386_PARAM_H_
-#define _I386_PARAM_H_
-
-#define _MACHINE i386
-#define MACHINE "i386"
-#define _MACHINE_ARCH i386
-#define MACHINE_ARCH "i386"
-#define MID_MACHINE MID_I386
-
-/*
- * Round p (pointer or byte index) up to a correctly-aligned value
- * for all data types (int, long, ...). The result is u_int and
- * must be cast to any desired pointer type.
- *
- * ALIGNED_POINTER is a boolean macro that checks whether an address
- * is valid to fetch data elements of type t from on this architecture.
- * This does not reflect the optimal alignment, just the possibility
- * (within reasonable limits).
- *
- */
-#define ALIGNBYTES (sizeof(int) - 1)
-#define ALIGN(p) (((EFI_ULONG_T)(p) + ALIGNBYTES) & ~ALIGNBYTES)
-#define ALIGNED_POINTER(p,t) 1
-
-#define PGSHIFT 12 /* LOG2(NBPG) */
-#define NBPG (1 << PGSHIFT) /* bytes/page */
-#define PGOFSET (NBPG-1) /* byte offset into page */
-#define NPTEPG (NBPG/(sizeof (pt_entry_t)))
-
-#define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */
-#define DEV_BSIZE (1 << DEV_BSHIFT)
-#define BLKDEV_IOSIZE 2048
-#ifndef MAXPHYS
- #define MAXPHYS (64 * 1024) /* max raw I/O transfer size */
-#endif
-
-#define SSIZE 1 /* initial stack size/NBPG */
-#define SINCR 1 /* increment of stack/NBPG */
-
-#ifndef UPAGES
- #ifdef NOREDZONE
- #define UPAGES 2 /* pages of u-area */
- #else
- #define UPAGES 3
- #endif /*NOREDZONE */
-#endif /* !defined(UPAGES) */
-#define USPACE (UPAGES * NBPG) /* total size of u-area */
-
-#ifndef MSGBUFSIZE
- #define MSGBUFSIZE 4*NBPG /* default message buffer size */
-#endif
-
-/*
- * Constants related to network buffer management.
- * MCLBYTES must be no larger than NBPG (the software page size), and,
- * on machines that exchange pages of input or output buffers with mbuf
- * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple
- * of the hardware page size.
- */
-#define MSIZE 256 /* size of an mbuf */
-
-#ifndef MCLSHIFT
- #define MCLSHIFT 11 /* convert bytes to m_buf clusters */
- /* 2K cluster can hold Ether frame */
-#endif /* MCLSHIFT */
-
-#define MCLBYTES (1 << MCLSHIFT) /* size of a m_buf cluster */
-
-#ifndef NMBCLUSTERS
- #ifdef GATEWAY
- #define NMBCLUSTERS 2048 /* map size, max cluster allocation */
- #else
- #define NMBCLUSTERS 1024 /* map size, max cluster allocation */
- #endif
-#endif
-
-#ifndef NFS_RSIZE
- #define NFS_RSIZE 32768
-#endif
-#ifndef NFS_WSIZE
- #define NFS_WSIZE 32768
-#endif
-
-/*
- * Minimum and maximum sizes of the kernel malloc arena in PAGE_SIZE-sized
- * logical pages.
- */
-#define NKMEMPAGES_MIN_DEFAULT ((8 * 1024 * 1024) >> PAGE_SHIFT)
-#define NKMEMPAGES_MAX_DEFAULT ((128 * 1024 * 1024) >> PAGE_SHIFT)
-
-/*
- * Mach derived conversion macros
- */
-#define x86_round_pdr(x) ((((EFI_ULONG_T)(x)) + PDOFSET) & ~PDOFSET)
-#define x86_trunc_pdr(x) ((EFI_ULONG_T)(x) & ~PDOFSET)
-#define x86_btod(x) ((EFI_ULONG_T)(x) >> PDSHIFT)
-#define x86_dtob(x) ((EFI_ULONG_T)(x) << PDSHIFT)
-#define x86_round_page(x) ((((EFI_ULONG_T)(x)) + PGOFSET) & ~PGOFSET)
-#define x86_trunc_page(x) ((EFI_ULONG_T)(x) & ~PGOFSET)
-#define x86_btop(x) ((EFI_ULONG_T)(x) >> PGSHIFT)
-#define x86_ptob(x) ((EFI_ULONG_T)(x) << PGSHIFT)
-
-#endif /* _I386_PARAM_H_ */
diff --git a/StdLib/Include/Ia32/machine/signal.h b/StdLib/Include/Ia32/machine/signal.h
deleted file mode 100644
index 235797f4c1..0000000000
--- a/StdLib/Include/Ia32/machine/signal.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/** @file
- Machine (processor architecture) specific portion of <signal.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _MACHINE_SIGNAL_H
-#define _MACHINE_SIGNAL_H
-#include <sys/EfiCdefs.h>
-
-/** The type sig_atomic_t is the type of an object that can be accessed as an
- atomic entity, even in the presence of asynchronous interrupts.
-**/
-typedef INTN sig_atomic_t;
-
-#endif /* _MACHINE_SIGNAL_H */
diff --git a/StdLib/Include/Ia32/machine/types.h b/StdLib/Include/Ia32/machine/types.h
deleted file mode 100644
index 35c49bef06..0000000000
--- a/StdLib/Include/Ia32/machine/types.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/** @file
- Machine dependent type definitions.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990 The Regents of the University of California.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- types.h 7.5 (Berkeley) 3/9/91
- NetBSD: types.h,v 1.49 2006/09/03 13:51:23 bjh21 Exp
-**/
-#ifndef _MACHTYPES_H_
-#define _MACHTYPES_H_
-
-#include <sys/EfiCdefs.h>
-#include <sys/featuretest.h>
-#include <machine/int_types.h>
-
-/* Handle the long and unsigned long data types which EFI doesn't directly support. */
-//typedef INTN LONGN;
-//typedef UINTN ULONGN;
-
-typedef PHYSICAL_ADDRESS paddr_t;
-typedef UINT64 psize_t;
-typedef PHYSICAL_ADDRESS vaddr_t;
-typedef UINT64 vsize_t;
-
-typedef INT32 pmc_evid_t;
-typedef UINT64 pmc_ctr_t;
-typedef INT32 register_t;
-
-typedef volatile INT32 __cpu_simple_lock_t;
-
-#define __SIMPLELOCK_LOCKED 1
-#define __SIMPLELOCK_UNLOCKED 0
-
-/* The x86 does not have strict alignment requirements. */
-#define __NO_STRICT_ALIGNMENT
-
-#define __HAVE_DEVICE_REGISTER
-#define __HAVE_CPU_COUNTER
-#define __HAVE_SYSCALL_INTERN
-#define __HAVE_MINIMAL_EMUL
-#define __HAVE_OLD_DISKLABEL
-#define __HAVE_GENERIC_SOFT_INTERRUPTS
-#define __HAVE_CPU_MAXPROC
-#define __HAVE_TIMECOUNTER
-#define __HAVE_GENERIC_TODR
-
-#endif /* _MACHTYPES_H_ */
diff --git a/StdLib/Include/Ipf/machine/_regset.h b/StdLib/Include/Ipf/machine/_regset.h
deleted file mode 100644
index 82e4b91070..0000000000
--- a/StdLib/Include/Ipf/machine/_regset.h
+++ /dev/null
@@ -1,277 +0,0 @@
-/* $NetBSD: _regset.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 2002, 2003 Marcel Moolenaar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _MACHINE_REGSET_H_
-#define _MACHINE_REGSET_H_
-
-/*
- * Create register sets, based on the runtime specification. This allows
- * us to better reuse code and to copy sets around more efficiently.
- * Contexts are defined in terms of these sets. These include trapframe,
- * sigframe, pcb, mcontext, reg and fpreg. Other candidates are unwind
- * and coredump related contexts.
- *
- * Notes:
- * o Constant registers (r0, f0 and f1) are not accounted for,
- * o The stacked registers (r32-r127) are not accounted for,
- * o Predicates are not split across sets.
- */
-
-/* A single FP register. */
-union _ia64_fpreg {
- unsigned char fpr_bits[16];
- long double fpr_flt;
-};
-
-/*
- * Special registers.
- */
-struct _special {
- unsigned long sp;
- unsigned long unat; /* NaT before spilling */
- unsigned long rp;
- unsigned long pr;
- unsigned long pfs;
- unsigned long bspstore;
- unsigned long rnat;
- unsigned long __spare;
- /* Userland context and syscalls */
- unsigned long tp;
- unsigned long rsc;
- unsigned long fpsr;
- unsigned long psr;
- /* ASYNC: Interrupt specific */
- unsigned long gp;
- unsigned long ndirty;
- unsigned long cfm;
- unsigned long iip;
- unsigned long ifa;
- unsigned long isr;
-};
-
-struct _high_fp {
- union _ia64_fpreg fr32;
- union _ia64_fpreg fr33;
- union _ia64_fpreg fr34;
- union _ia64_fpreg fr35;
- union _ia64_fpreg fr36;
- union _ia64_fpreg fr37;
- union _ia64_fpreg fr38;
- union _ia64_fpreg fr39;
- union _ia64_fpreg fr40;
- union _ia64_fpreg fr41;
- union _ia64_fpreg fr42;
- union _ia64_fpreg fr43;
- union _ia64_fpreg fr44;
- union _ia64_fpreg fr45;
- union _ia64_fpreg fr46;
- union _ia64_fpreg fr47;
- union _ia64_fpreg fr48;
- union _ia64_fpreg fr49;
- union _ia64_fpreg fr50;
- union _ia64_fpreg fr51;
- union _ia64_fpreg fr52;
- union _ia64_fpreg fr53;
- union _ia64_fpreg fr54;
- union _ia64_fpreg fr55;
- union _ia64_fpreg fr56;
- union _ia64_fpreg fr57;
- union _ia64_fpreg fr58;
- union _ia64_fpreg fr59;
- union _ia64_fpreg fr60;
- union _ia64_fpreg fr61;
- union _ia64_fpreg fr62;
- union _ia64_fpreg fr63;
- union _ia64_fpreg fr64;
- union _ia64_fpreg fr65;
- union _ia64_fpreg fr66;
- union _ia64_fpreg fr67;
- union _ia64_fpreg fr68;
- union _ia64_fpreg fr69;
- union _ia64_fpreg fr70;
- union _ia64_fpreg fr71;
- union _ia64_fpreg fr72;
- union _ia64_fpreg fr73;
- union _ia64_fpreg fr74;
- union _ia64_fpreg fr75;
- union _ia64_fpreg fr76;
- union _ia64_fpreg fr77;
- union _ia64_fpreg fr78;
- union _ia64_fpreg fr79;
- union _ia64_fpreg fr80;
- union _ia64_fpreg fr81;
- union _ia64_fpreg fr82;
- union _ia64_fpreg fr83;
- union _ia64_fpreg fr84;
- union _ia64_fpreg fr85;
- union _ia64_fpreg fr86;
- union _ia64_fpreg fr87;
- union _ia64_fpreg fr88;
- union _ia64_fpreg fr89;
- union _ia64_fpreg fr90;
- union _ia64_fpreg fr91;
- union _ia64_fpreg fr92;
- union _ia64_fpreg fr93;
- union _ia64_fpreg fr94;
- union _ia64_fpreg fr95;
- union _ia64_fpreg fr96;
- union _ia64_fpreg fr97;
- union _ia64_fpreg fr98;
- union _ia64_fpreg fr99;
- union _ia64_fpreg fr100;
- union _ia64_fpreg fr101;
- union _ia64_fpreg fr102;
- union _ia64_fpreg fr103;
- union _ia64_fpreg fr104;
- union _ia64_fpreg fr105;
- union _ia64_fpreg fr106;
- union _ia64_fpreg fr107;
- union _ia64_fpreg fr108;
- union _ia64_fpreg fr109;
- union _ia64_fpreg fr110;
- union _ia64_fpreg fr111;
- union _ia64_fpreg fr112;
- union _ia64_fpreg fr113;
- union _ia64_fpreg fr114;
- union _ia64_fpreg fr115;
- union _ia64_fpreg fr116;
- union _ia64_fpreg fr117;
- union _ia64_fpreg fr118;
- union _ia64_fpreg fr119;
- union _ia64_fpreg fr120;
- union _ia64_fpreg fr121;
- union _ia64_fpreg fr122;
- union _ia64_fpreg fr123;
- union _ia64_fpreg fr124;
- union _ia64_fpreg fr125;
- union _ia64_fpreg fr126;
- union _ia64_fpreg fr127;
-};
-
-/*
- * Preserved registers.
- */
-struct _callee_saved {
- unsigned long unat; /* NaT after spilling. */
- unsigned long gr4;
- unsigned long gr5;
- unsigned long gr6;
- unsigned long gr7;
- unsigned long br1;
- unsigned long br2;
- unsigned long br3;
- unsigned long br4;
- unsigned long br5;
- unsigned long lc;
- unsigned long __spare;
-};
-
-struct _callee_saved_fp {
- union _ia64_fpreg fr2;
- union _ia64_fpreg fr3;
- union _ia64_fpreg fr4;
- union _ia64_fpreg fr5;
- union _ia64_fpreg fr16;
- union _ia64_fpreg fr17;
- union _ia64_fpreg fr18;
- union _ia64_fpreg fr19;
- union _ia64_fpreg fr20;
- union _ia64_fpreg fr21;
- union _ia64_fpreg fr22;
- union _ia64_fpreg fr23;
- union _ia64_fpreg fr24;
- union _ia64_fpreg fr25;
- union _ia64_fpreg fr26;
- union _ia64_fpreg fr27;
- union _ia64_fpreg fr28;
- union _ia64_fpreg fr29;
- union _ia64_fpreg fr30;
- union _ia64_fpreg fr31;
-};
-
-/*
- * Scratch registers.
- */
-struct _caller_saved {
- unsigned long unat; /* NaT after spilling. */
- unsigned long gr2;
- unsigned long gr3;
- unsigned long gr8;
- unsigned long gr9;
- unsigned long gr10;
- unsigned long gr11;
- unsigned long gr14;
- unsigned long gr15;
- unsigned long gr16;
- unsigned long gr17;
- unsigned long gr18;
- unsigned long gr19;
- unsigned long gr20;
- unsigned long gr21;
- unsigned long gr22;
- unsigned long gr23;
- unsigned long gr24;
- unsigned long gr25;
- unsigned long gr26;
- unsigned long gr27;
- unsigned long gr28;
- unsigned long gr29;
- unsigned long gr30;
- unsigned long gr31;
- unsigned long br6;
- unsigned long br7;
- unsigned long ccv;
- unsigned long csd;
- unsigned long ssd;
-};
-
-struct _caller_saved_fp {
- union _ia64_fpreg fr6;
- union _ia64_fpreg fr7;
- union _ia64_fpreg fr8;
- union _ia64_fpreg fr9;
- union _ia64_fpreg fr10;
- union _ia64_fpreg fr11;
- union _ia64_fpreg fr12;
- union _ia64_fpreg fr13;
- union _ia64_fpreg fr14;
- union _ia64_fpreg fr15;
-};
-
-#ifdef _KERNEL
-void restore_callee_saved(const struct _callee_saved *);
-void restore_callee_saved_fp(const struct _callee_saved_fp *);
-void restore_high_fp(const struct _high_fp *);
-void save_callee_saved(struct _callee_saved *);
-void save_callee_saved_fp(struct _callee_saved_fp *);
-void save_high_fp(struct _high_fp *);
-#endif
-
-#endif /* _MACHINE_REGSET_H_ */
diff --git a/StdLib/Include/Ipf/machine/acpi_func.h b/StdLib/Include/Ipf/machine/acpi_func.h
deleted file mode 100644
index 000fbbd9ac..0000000000
--- a/StdLib/Include/Ipf/machine/acpi_func.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* $NetBSD: acpi_func.h,v 1.2 2006/05/14 21:55:38 elad Exp $ */
-
-/*-
- * Copyright (c) 2002 Mitsuru IWASAKI
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/ia64/include/acpica_machdep.h,v 1.4 2004/10/11 05:39:15 njl Exp $
- */
-
-/******************************************************************************
- *
- * Name: acpica_machdep.h - arch-specific defines, etc.
- * $Revision: 1.2 $
- *
- *****************************************************************************/
-
-#ifndef _IA64_ACPI_FUNC_H_
-#define _IA64_ACPI_FUNC_H_
-
-#include <machine/cpufunc.h>
-#include <machine/atomic.h>
-
-/* Asm macros */
-
-#define ACPI_ASM_MACROS
-#define BREAKPOINT3
-#define ACPI_DISABLE_IRQS() disable_intr()
-#define ACPI_ENABLE_IRQS() enable_intr()
-
-#define ACPI_FLUSH_CPU_CACHE() /* XXX ia64_fc()? */
-
-
-/* Section 5.2.9.1: global lock acquire/release functions */
-extern int acpi_acquire_global_lock(uint32_t *lock);
-extern int acpi_release_global_lock(uint32_t *lock);
-#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
- ((Acq) = acpi_acquire_global_lock(GLptr))
-#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
- ((Acq) = acpi_release_global_lock(GLptr))
-
-
-/* Section 5.2.9.1: global lock acquire/release functions */
-#define GL_ACQUIRED (-1)
-#define GL_BUSY 0
-#define GL_BIT_PENDING 0x1
-#define GL_BIT_OWNED 0x2
-#define GL_BIT_MASK (GL_BIT_PENDING | GL_BIT_OWNED)
-
-/*
- * Acquire the global lock. If busy, set the pending bit. The caller
- * will wait for notification from the BIOS that the lock is available
- * and then attempt to acquire it again.
- */
-int
-acpi_acquire_global_lock(uint32_t *lock)
-{
- uint32_t new, old;
-
- do {
- old = *lock;
- new = ((old & ~GL_BIT_MASK) | GL_BIT_OWNED) |
- ((old >> 1) & GL_BIT_PENDING);
- } while (atomic_cmpset_acq_int(lock, old, new) == 0);
-
- return ((new < GL_BIT_MASK) ? GL_ACQUIRED : GL_BUSY);
-}
-
-/*
- * Release the global lock, returning whether there is a waiter pending.
- * If the BIOS set the pending bit, OSPM must notify the BIOS when it
- * releases the lock.
- */
-int
-acpi_release_global_lock(uint32_t *lock)
-{
- uint32_t new, old;
-
- do {
- old = *lock;
- new = old & ~GL_BIT_MASK;
- } while (atomic_cmpset_rel_int(lock, old, new) == 0);
-
- return (old & GL_BIT_PENDING);
-}
-
-#endif /* _IA64_ACPI_FUNC_H_ */
diff --git a/StdLib/Include/Ipf/machine/acpi_machdep.h b/StdLib/Include/Ipf/machine/acpi_machdep.h
deleted file mode 100644
index a2903519a5..0000000000
--- a/StdLib/Include/Ipf/machine/acpi_machdep.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: acpi_machdep.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-
diff --git a/StdLib/Include/Ipf/machine/acpica_machdep.h b/StdLib/Include/Ipf/machine/acpica_machdep.h
deleted file mode 100644
index 71156b1ede..0000000000
--- a/StdLib/Include/Ipf/machine/acpica_machdep.h
+++ /dev/null
@@ -1 +0,0 @@
-/* $NetBSD: acpica_machdep.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
diff --git a/StdLib/Include/Ipf/machine/ansi.h b/StdLib/Include/Ipf/machine/ansi.h
deleted file mode 100644
index bab41b040c..0000000000
--- a/StdLib/Include/Ipf/machine/ansi.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/** @file
- Machine dependent ANSI type definitions.
-
- Copyright (c) 2010-2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)ansi.h 8.2 (Berkeley) 1/4/94
- NetBSD: ansi.h,v 1.3 2006/10/04 13:52:00 tnozaki Exp
- */
-#ifndef _ANSI_H_
-#define _ANSI_H_
-
-#include <sys/EfiCdefs.h>
-#include <machine/int_types.h>
-
-/*
- * Types which are fundamental to the implementation and may appear in
- * more than one standard header are defined here. Standard headers
- * then use:
- * #ifdef _SIZE_T_
- * typedef _SIZE_T_ size_t;
- * #undef _SIZE_T_
- * #endif
- *
- * Thanks, ANSI!
- */
-#define _BSD_CLOCK_T_ _EFI_CLOCK_T /* clock() */
-#define _BSD_PTRDIFF_T_ _EFI_PTRDIFF_T_ /* ptr1 - ptr2 */
-#define _BSD_SIZE_T_ _EFI_SIZE_T_ /* sizeof() */
-#define _BSD_SSIZE_T_ INTN /* byte count or error */
-#define _BSD_TIME_T_ _EFI_TIME_T /* time() */
-
-#define _BSD_VA_LIST_ VA_LIST
-#define _BSD_CLOCKID_T_ INT64 /* clockid_t */
-#define _BSD_TIMER_T_ INT64 /* timer_t */
-#define _BSD_SUSECONDS_T_ INT64 /* suseconds_t */
-#define _BSD_USECONDS_T_ UINT64 /* useconds_t */
-
-/*
- * NOTE: rune_t is not covered by ANSI nor other standards, and should not
- * be instantiated outside of lib/libc/locale. use wchar_t.
- *
- * Runes (wchar_t) is declared to be an ``int'' instead of the more natural
- * ``unsigned long'' or ``long''. Two things are happening here. It is not
- * unsigned so that EOF (-1) can be naturally assigned to it and used. Also,
- * it looks like 10646 will be a 31 bit standard. This means that if your
- * ints cannot hold 32 bits, you will be in trouble. The reason an int was
- * chosen over a long is that the is*() and to*() routines take ints (says
- * ANSI C), but they use _RUNE_T_ instead of int. By changing it here, you
- * lose a bit of ANSI conformance, but your programs will still work.
- *
- * Note that _WCHAR_T_ and _RUNE_T_ must be of the same type. When wchar_t
- * and rune_t are typedef'd, _WCHAR_T_ will be undef'd, but _RUNE_T remains
- * defined for ctype.h.
- */
-#define _BSD_WCHAR_T_ _EFI_WCHAR_T /* wchar_t */
-#define _BSD_WINT_T_ _EFI_WINT_T /* wint_t */
-#define _BSD_RUNE_T_ _EFI_WCHAR_T /* rune_t */
-#define _BSD_WCTRANS_T_ void * /* wctrans_t */
-#define _BSD_WCTYPE_T_ unsigned int /* wctype_t */
-/*
- * mbstate_t is an opaque object to keep conversion state, during multibyte
- * stream conversions. The content must not be referenced by user programs.
- */
-typedef struct {
- UINT32 A; // Np;
- UINT32 B; // U;
- UINT32 E; // L
- UINT8 C[4]; // n[4]
- UINT16 D[2]; // w[2]
-} __mbstate_t;
-#define _BSD_MBSTATE_T_ __mbstate_t /* mbstate_t */
-
-#endif /* _ANSI_H_ */
diff --git a/StdLib/Include/Ipf/machine/aout_machdep.h b/StdLib/Include/Ipf/machine/aout_machdep.h
deleted file mode 100644
index 7c6f3d3652..0000000000
--- a/StdLib/Include/Ipf/machine/aout_machdep.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* $NetBSD: aout_machdep.h,v 1.2 2006/07/03 17:01:45 cherry Exp $ */
-
-/*-
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)exec.h 8.1 (Berkeley) 6/10/93
- */
-
-#define AOUT_LDPGSZ 16384
-
-
diff --git a/StdLib/Include/Ipf/machine/asm.h b/StdLib/Include/Ipf/machine/asm.h
deleted file mode 100644
index 2022b888f4..0000000000
--- a/StdLib/Include/Ipf/machine/asm.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/* $NetBSD: asm.h,v 1.4 2006/08/30 11:14:23 cherry Exp $ */
-
-/* -
- * Copyright (c) 1991,1990,1989,1994,1995,1996 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- */
-
-/*
- * Assembly coding style
- *
- * This file contains macros and register defines to
- * aid in writing more readable assembly code.
- * Some rules to make assembly code understandable by
- * a debugger are also noted.
- */
-
-/*
- * Macro to make a local label name.
- */
-#define LLABEL(name,num) L ## name ## num
-
-/*
- * MCOUNT
- */
-#if defined(GPROF)
-#define MCOUNT \
- alloc out0 = ar.pfs, 8, 0, 4, 0; \
- mov out1 = r1; \
- mov out2 = b0;; \
- mov out3 = r0; \
- br.call.sptk b0 = _mcount;;
-#else
-#define MCOUNT /* nothing */
-#endif
-
-/*
- * ENTRY
- * Declare a global leaf function.
- * A leaf function does not call other functions.
- */
-#define ENTRY(_name_, _n_args_) \
- .global _name_; \
- .align 16; \
- .proc _name_; \
-_name_:; \
- .regstk _n_args_, 0, 0, 0; \
- MCOUNT
-
-#define ENTRY_NOPROFILE(_name_, _n_args_) \
- .global _name_; \
- .align 16; \
- .proc _name_; \
-_name_:; \
- .regstk _n_args_, 0, 0, 0
-
-/*
- * STATIC_ENTRY
- * Declare a local leaf function.
- */
-#define STATIC_ENTRY(_name_, _n_args_) \
- .align 16; \
- .proc _name_; \
-_name_:; \
- .regstk _n_args_, 0, 0, 0 \
- MCOUNT
-/*
- * XENTRY
- * Global alias for a leaf function, or alternate entry point
- */
-#define XENTRY(_name_) \
- .globl _name_; \
-_name_:
-
-/*
- * STATIC_XENTRY
- * Local alias for a leaf function, or alternate entry point
- */
-#define STATIC_XENTRY(_name_) \
-_name_:
-
-
-/*
- * END
- * Function delimiter
- */
-#define END(_name_) \
- .endp _name_
-
-
-/*
- * EXPORT
- * Export a symbol
- */
-#define EXPORT(_name_) \
- .global _name_; \
-_name_:
-
-
-/*
- * IMPORT
- * Make an external name visible, typecheck the size
- */
-#define IMPORT(_name_, _size_) \
- /* .extern _name_,_size_ */
-
-
-/*
- * ABS
- * Define an absolute symbol
- */
-#define ABS(_name_, _value_) \
- .globl _name_; \
-_name_ = _value_
-
-
-/*
- * BSS
- * Allocate un-initialized space for a global symbol
- */
-#define BSS(_name_,_numbytes_) \
- .comm _name_,_numbytes_
-
-
-/*
- * MSG
- * Allocate space for a message (a read-only ascii string)
- */
-#define ASCIZ .asciz
-#define MSG(msg,reg,label) \
- addl reg,@ltoff(label),gp;; \
- ld8 reg=[reg];; \
- .data; \
-label: ASCIZ msg; \
- .text;
-
-
-/*
- * System call glue.
- */
-#define SYSCALLNUM(name) ___CONCAT(SYS_,name)
-
-#define CALLSYS_NOERROR(name) \
-{ .mmi ; \
- alloc r9 = ar.pfs, 0, 0, 8, 0 ; \
- mov r31 = ar.k5 ; \
- mov r10 = b0 ;; } \
-{ .mib ; \
- mov r8 = SYSCALLNUM(name) ; \
- mov b7 = r31 ; \
- br.call.sptk b0 = b7 ;; }
-
-
-/*
- * WEAK_ALIAS: create a weak alias (ELF only).
- */
-#define WEAK_ALIAS(alias,sym) \
- .weak alias; \
- alias = sym
-
-/*
- * STRONG_ALIAS: create a strong alias.
- */
-#define STRONG_ALIAS(alias,sym) \
- .globl alias; \
- alias = sym
diff --git a/StdLib/Include/Ipf/machine/bootinfo.h b/StdLib/Include/Ipf/machine/bootinfo.h
deleted file mode 100644
index 1b1d7e9e57..0000000000
--- a/StdLib/Include/Ipf/machine/bootinfo.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* $NetBSD: bootinfo.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
- * All rights reserved.
- *
- * Author: Chris G. Demetriou
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
- * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- */
-
-struct bootinfo {
- uint64_t bi_magic; /* BOOTINFO_MAGIC */
-#define BOOTINFO_MAGIC 0xdeadbeeffeedface
- uint64_t bi_version; /* version 1 */
- uint64_t bi_spare[5]; /* was: name of booted kernel */
- uint64_t bi_hcdp; /* DIG64 HCDP table */
- uint64_t bi_fpswa; /* FPSWA interface */
- uint64_t bi_boothowto; /* value for boothowto */
- uint64_t bi_systab; /* pa of EFI system table */
- uint64_t bi_memmap; /* pa of EFI memory map */
- uint64_t bi_memmap_size; /* size of EFI memory map */
- uint64_t bi_memdesc_size; /* sizeof EFI memory desc */
- uint32_t bi_memdesc_version; /* EFI memory desc version */
- uint32_t bi_spare2;
- uint64_t bi_unwindtab; /* start of ia64 unwind table */
- uint64_t bi_unwindtablen; /* lenght of the table, in bytes */
- uint64_t bi_symtab; /* start of kernel sym table */
- uint64_t bi_esymtab; /* end of kernel sym table */
- uint64_t bi_kernend; /* end of kernel space */
- uint64_t bi_envp; /* environment */
-};
-
-extern struct bootinfo bootinfo;
diff --git a/StdLib/Include/Ipf/machine/bswap.h b/StdLib/Include/Ipf/machine/bswap.h
deleted file mode 100644
index e3c52b5fa7..0000000000
--- a/StdLib/Include/Ipf/machine/bswap.h
+++ /dev/null
@@ -1,8 +0,0 @@
-/* $NetBSD: bswap.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-#ifndef _MACHINE_BSWAP_H_
-#define _MACHINE_BSWAP_H_
-
-#include <sys/bswap.h>
-
-#endif /* !_MACHINE_BSWAP_H_ */
diff --git a/StdLib/Include/Ipf/machine/cdefs.h b/StdLib/Include/Ipf/machine/cdefs.h
deleted file mode 100644
index f1b4ddc56d..0000000000
--- a/StdLib/Include/Ipf/machine/cdefs.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* $NetBSD: cdefs.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-#ifndef _MACHINE_CDEFS_H_
-#define _MACHINE_CDEFS_H_
-
-/* We're elf only: inspected by sys/cdefs.h */
-#ifndef __ELF__
-#define __ELF__
-#endif
-
-#endif /* !_MACHINE_CDEFS_H_ */
diff --git a/StdLib/Include/Ipf/machine/cpu.h b/StdLib/Include/Ipf/machine/cpu.h
deleted file mode 100644
index 33d70dd83e..0000000000
--- a/StdLib/Include/Ipf/machine/cpu.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/* $NetBSD: cpu.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 2006 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
- * NASA Ames Research Center, and by Charles M. Hannum.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-
-/*-
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1982, 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Utah $Hdr: cpu.h 1.16 91/03/25$
- *
- * @(#)cpu.h 8.4 (Berkeley) 1/5/94
- */
-
-
-#ifndef _IA64_CPU_H_
-#define _IA64_CPU_H_
-
-#ifdef _KERNEL
-#include <sys/cpu_data.h>
-#include <sys/cc_microtime.h>
-#include <machine/frame.h>
-#include <machine/ia64_cpu.h>
-
-
-struct cpu_info {
- struct device *ci_dev; /* pointer to our device */
- struct cpu_info *ci_self; /* self-pointer */
- /*
- * Public members.
- */
- struct lwp *ci_curlwp; /* current owner of the processor */
- struct cpu_data ci_data; /* MI per-cpu data */
- struct cc_microtime_state ci_cc;/* cc_microtime state */
- struct cpu_info *ci_next; /* next cpu_info structure */
-
- /* XXX: Todo */
- /*
- * Private members.
- */
- cpuid_t ci_cpuid; /* our CPU ID */
- struct pmap *ci_pmap; /* current pmap */
- struct lwp *ci_fpcurlwp; /* current owner of the FPU */
- paddr_t ci_curpcb; /* PA of current HW PCB */
- struct pcb *ci_idle_pcb; /* our idle PCB */
- struct cpu_softc *ci_softc; /* pointer to our device */
- u_long ci_want_resched; /* preempt current process */
- u_long ci_intrdepth; /* interrupt trap depth */
- struct trapframe *ci_db_regs; /* registers for debuggers */
-};
-
-
-extern struct cpu_info cpu_info_primary;
-
-#ifdef MULTIPROCESSOR
-/* XXX: TODO */
-#else
-#define curcpu() (&cpu_info_primary)
-#endif /* MULTIPROCESSOR */
-
-#define cpu_number() 0 /*XXX: FIXME */
-
-#define aston(p) ((p)->p_md.md_astpending = 1)
-
-#define need_resched(ci) /*XXX: FIXME */
-
-struct clockframe {
- struct trapframe cf_tf;
-};
-
-#define CLKF_PC(cf) ((cf)->cf_tf.tf_special.iip)
-#define CLKF_CPL(cf) ((cf)->cf_tf.tf_special.psr & IA64_PSR_CPL)
-#define CLKF_USERMODE(cf) (CLKF_CPL(cf) != IA64_PSR_CPL_KERN)
-#define CLKF_BASEPRI(frame) (0) /*XXX: CHECKME */
-#define CLKF_INTR(frame) (curcpu()->ci_intrdepth)
-
-#define TRAPF_PC(tf) ((tf)->tf_special.iip)
-#define TRAPF_CPL(tf) ((tf)->tf_special.psr & IA64_PSR_CPL)
-#define TRAPF_USERMODE(tf) (TRAPF_CPL(tf) != IA64_PSR_CPL_KERN)
-
-
-
-
-
-
-
-/*
- * Give a profiling tick to the current process when the user profiling
- * buffer pages are invalid. XXX:Fixme.... On the ia64 I haven't yet figured
- * out what to do about this.. XXX.
- */
-
-
-#define need_proftick(p)
-
-/*
- * Notify the current process (p) that it has a signal pending,
- * process as soon as possible.
- */
-#define signotify(p) aston(p)
-
-#define setsoftclock() /*XXX: FIXME */
-
-/* machdep.c */
-int cpu_maxproc(void); /*XXX: Fill in machdep.c */
-
-#define cpu_proc_fork(p1, p2) /* XXX: Look into this. */
-
-
-/* XXX: TODO: generic microtime support kern/kern_microtime.c
- * #define microtime(tv) cc_microtime(tv)
- */
-
-
-#endif /* _KERNEL_ */
-#endif /* _IA64_CPU_H */
diff --git a/StdLib/Include/Ipf/machine/cpu_counter.h b/StdLib/Include/Ipf/machine/cpu_counter.h
deleted file mode 100644
index e28ab24ef2..0000000000
--- a/StdLib/Include/Ipf/machine/cpu_counter.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* $NetBSD: cpu_counter.h,v 1.1 2006/09/20 13:33:04 kochi Exp $ */
-
-/*-
- * Copyright (c) 2006 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Takayoshi Kochi.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _IA64_CPU_COUNTER_H_
-#define _IA64_CPU_COUNTER_H_
-
-/*
- * Machine-specific support for CPU counter.
- */
-
-#ifdef _KERNEL
-
-#include <machine/ia64_cpu.h>
-
-static __inline int
-cpu_hascounter(void)
-{
- return 1;
-}
-
-static __inline uint64_t
-cpu_counter(void)
-{
- return ia64_get_itc();
-}
-
-static __inline uint32_t
-cpu_counter32(void)
-{
- return (ia64_get_itc() & 0xffffffffUL);
-}
-
-static __inline uint64_t
-cpu_frequency(struct cpu_info *ci)
-{
- extern uint64_t itc_frequency;
-
- return itc_frequency;
-}
-
-#endif /* _KERNEL */
-
-#endif /* !_IA64_CPU_COUNTER_H_ */
diff --git a/StdLib/Include/Ipf/machine/db_machdep.h b/StdLib/Include/Ipf/machine/db_machdep.h
deleted file mode 100644
index 94739fd337..0000000000
--- a/StdLib/Include/Ipf/machine/db_machdep.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/* $NetBSD: db_machdep.h,v 1.2 2006/08/30 11:12:04 cherry Exp $ */
-
-/*
- * Copyright (c) 1995 Carnegie-Mellon University.
- * All rights reserved.
- *
- * Author: Chris G. Demetriou
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
- * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- */
-
-#ifndef _IA64_DB_MACHDEP_H_
-#define _IA64_DB_MACHDEP_H_
-
-/*
- * Machine-dependent defines for new kernel debugger.
- */
-
-#include <sys/lock.h>
-#include <sys/param.h>
-#include <uvm/uvm_extern.h>
-#include <machine/frame.h>
-#include <machine/ia64_cpu.h>
-
-typedef vaddr_t db_addr_t; /* address - unsigned */
-typedef long db_expr_t; /* expression - signed */
-
-typedef struct trapframe db_regs_t;
-extern db_regs_t *ddb_regp; /* pointer to current register state */
-#define DDB_REGS (ddb_regp)
-
-#if 0 /* XXX: disabling this until we switch on makectx()and have a proper \
- curlwp(). TODO: please switch this back on ASAP */
-
-#define PC_REGS(regs) ((db_addr_t)(regs)->tf_special.__spare == 0) ? \
- ((db_addr_t)(regs)->tf_special.rp) : \
- ((db_addr_t)(regs)->tf_special.iip + (((regs)->tf_special.psr>>41) & 3))
-#endif
-
-#if 1
-#define PC_REGS(regs) ((db_addr_t)(regs)->tf_special.iip + (((regs)->tf_special.psr>>41) & 3))
-#endif
-
-#define db_set_single_step(regs) ((regs)->tf_special.psr |= IA64_PSR_SS)
-#define db_clear_single_step(regs) ((regs)->tf_special.psr &= ~IA64_PSR_SS)
-
-
-
-/* defines to help with manipulating ia64 VLIW instruction bundles and slots */
-
-#define TMPL_BITS 5
-#define TMPL_MASK ((1 << TMPL_BITS) - 1)
-#define SLOT_BITS 41
-#define SLOT_COUNT 3
-#define SLOT_MASK ((1ULL << SLOT_BITS) - 1ULL)
-#define SLOT_SHIFT(i) (TMPL_BITS+((i)<<3)+(i))
-
-#define ADDR_SLOT0(addr) ( (addr) & ~(0xFUL) )
-#define SLOT_ADDR(addr) ( (addr) & (0xFUL) )
-/* breakpoint address.
- * Check for violations of pseudo offsets above 2.
- * Adjust for 32 bit shift within Bundle.
- */
-
-#define BKPT_ADDR(addr) ( (SLOT_ADDR(addr) < SLOT_COUNT) ? \
- (ADDR_SLOT0(addr) | (SLOT_ADDR(addr) << 2)) \
- : ADDR_SLOT0(addr) )
-
-#define BKPT_SIZE 8
-
-#define BKPT_SET(inst, addr) db_bkpt_set(inst, addr)
-db_expr_t db_bkpt_set(db_expr_t inst, db_addr_t addr);
-
-
-#define PC_ADVANCE(regs) db_pc_advance(regs)
-void db_pc_advance(db_regs_t *);
-
-#define IS_BREAKPOINT_TRAP(type, code) (type == IA64_VEC_BREAK)
-#define IS_WATCHPOINT_TRAP(type, code) 0
-
-
-#define inst_trap_return(ins) (ins & 0)
-#define inst_return(ins) (ins & 0)
-#define inst_call(ins) (ins & 0)
-#define inst_branch(ins) (ins & 0)
-#define inst_load(ins) (ins & 0)
-#define inst_store(ins) (ins & 0)
-#define inst_unconditional_flow_transfer(ins) (ins & 0)
-
-#define branch_taken(ins, pc, regs) pc
-
-u_long db_register_value(db_regs_t *, int);
-int ddb_trap(unsigned long, unsigned long, unsigned long,
- unsigned long, struct trapframe *);
-
-int ia64_trap(int, int, db_regs_t *); /* See: trap.c */
-
-/*
- * We define some of our own commands.
- */
-#define DB_MACHINE_COMMANDS
-
-/*
- * We use Elf64 symbols in DDB.
- */
-#define DB_ELF_SYMBOLS
-#define DB_ELFSIZE 64
-
-/*
- * Stuff for KGDB.
- */
-typedef long kgdb_reg_t;
-#define KGDB_NUMREGS 66 /* from tm-alpha.h, NUM_REGS */
-#define KGDB_REG_V0 0
-#define KGDB_REG_T0 1
-#define KGDB_REG_T1 2
-#define KGDB_REG_T2 3
-#define KGDB_REG_T3 4
-#define KGDB_REG_T4 5
-#define KGDB_REG_T5 6
-#define KGDB_REG_T6 7
-#define KGDB_REG_T7 8
-#define KGDB_REG_S0 9
-#define KGDB_REG_S1 10
-#define KGDB_REG_S2 11
-#define KGDB_REG_S3 12
-#define KGDB_REG_S4 13
-#define KGDB_REG_S5 14
-#define KGDB_REG_S6 15 /* FP */
-#define KGDB_REG_A0 16
-#define KGDB_REG_A1 17
-#define KGDB_REG_A2 18
-#define KGDB_REG_A3 19
-#define KGDB_REG_A4 20
-#define KGDB_REG_A5 21
-#define KGDB_REG_T8 22
-#define KGDB_REG_T9 23
-#define KGDB_REG_T10 24
-#define KGDB_REG_T11 25
-#define KGDB_REG_RA 26
-#define KGDB_REG_T12 27
-#define KGDB_REG_AT 28
-#define KGDB_REG_GP 29
-#define KGDB_REG_SP 30
-#define KGDB_REG_ZERO 31
-#define KGDB_REG_F0 32
-#define KGDB_REG_F1 33
-#define KGDB_REG_F2 34
-#define KGDB_REG_F3 35
-#define KGDB_REG_F4 36
-#define KGDB_REG_F5 37
-#define KGDB_REG_F6 38
-#define KGDB_REG_F7 39
-#define KGDB_REG_F8 40
-#define KGDB_REG_F9 41
-#define KGDB_REG_F10 42
-#define KGDB_REG_F11 43
-#define KGDB_REG_F12 44
-#define KGDB_REG_F13 45
-#define KGDB_REG_F14 46
-#define KGDB_REG_F15 47
-#define KGDB_REG_F16 48
-#define KGDB_REG_F17 49
-#define KGDB_REG_F18 50
-#define KGDB_REG_F19 51
-#define KGDB_REG_F20 52
-#define KGDB_REG_F21 53
-#define KGDB_REG_F22 54
-#define KGDB_REG_F23 55
-#define KGDB_REG_F24 56
-#define KGDB_REG_F25 57
-#define KGDB_REG_F26 58
-#define KGDB_REG_F27 59
-#define KGDB_REG_F28 60
-#define KGDB_REG_F29 61
-#define KGDB_REG_F30 62
-#define KGDB_REG_F31 63
-#define KGDB_REG_PC 64
-#define KGDB_REG_VFP 65
-
-/* Too much? Must be large enough for register transfer. */
-#define KGDB_BUFLEN 1024
-
-#endif /* _IA64_DB_MACHDEP_H_ */
diff --git a/StdLib/Include/Ipf/machine/dig64.h b/StdLib/Include/Ipf/machine/dig64.h
deleted file mode 100644
index 690845800a..0000000000
--- a/StdLib/Include/Ipf/machine/dig64.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* $NetBSD: dig64.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 2002 Marcel Moolenaar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _MACHINE_DIG64_H_
-#define _MACHINE_DIG64_H_
-
-struct dig64_gas {
- uint8_t addr_space;
- uint8_t bit_width;
- uint8_t bit_offset;
- uint8_t _reserved_;
- /*
- * XXX using a 64-bit type for the address would cause padding and
- * using __packed would cause unaligned accesses...
- */
- uint32_t addr_low;
- uint32_t addr_high;
-};
-
-struct dig64_hcdp_entry {
- uint8_t type;
-#define DIG64_HCDP_CONSOLE 0
-#define DIG64_HCDP_DBGPORT 1
- uint8_t databits;
- uint8_t parity;
- uint8_t stopbits;
- uint8_t pci_segment;
- uint8_t pci_bus;
- uint8_t pci_device:5;
- uint8_t _reserved1_:3;
- uint8_t pci_function:3;
- uint8_t _reserved2_:3;
- uint8_t interrupt:1;
- uint8_t pci_flag:1;
- /*
- * XXX using a 64-bit type for the baudrate would cause padding and
- * using __packed would cause unaligned accesses...
- */
- uint32_t baud_low;
- uint32_t baud_high;
- struct dig64_gas address;
- uint16_t pci_devid;
- uint16_t pci_vendor;
- uint32_t irq;
- uint32_t pclock;
- uint8_t pci_interface;
- uint8_t _reserved3_[7];
-};
-
-struct dig64_hcdp_table {
- char signature[4];
-#define HCDP_SIGNATURE "HCDP"
- uint32_t length;
- uint8_t revision;
- uint8_t checksum;
- char oem_id[6];
- char oem_tbl_id[8];
- uint32_t oem_rev;
- char creator_id[4];
- uint32_t creator_rev;
- uint32_t entries;
- struct dig64_hcdp_entry entry[1];
-};
-
-#endif
diff --git a/StdLib/Include/Ipf/machine/disklabel.h b/StdLib/Include/Ipf/machine/disklabel.h
deleted file mode 100644
index 34b9b6c5aa..0000000000
--- a/StdLib/Include/Ipf/machine/disklabel.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* $NetBSD: disklabel.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*
- * Copyright (c) 1994 Christopher G. Demetriou
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Christopher G. Demetriou.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _MACHINE_DISKLABEL_H_
-#define _MACHINE_DISKLABEL_H_
-
-#define LABELSECTOR 1 /* sector containing label */
-#define LABELOFFSET 0 /* offset of label in sector */
-#define MAXPARTITIONS 16 /* number of partitions */
-#define OLDMAXPARTITIONS 8 /* number of partitions before 1.6 */
-#define RAW_PART 3 /* raw partition: XX?d (XXX) */
-
-/*
- * We use the highest bit of the minor number for the partition number.
- * This maintains backward compatibility with device nodes created before
- * MAXPARTITIONS was increased.
- */
-#define __I386_MAXDISKS ((1 << 20) / MAXPARTITIONS)
-#define DISKUNIT(dev) ((minor(dev) / OLDMAXPARTITIONS) % __I386_MAXDISKS)
-#define DISKPART(dev) ((minor(dev) % OLDMAXPARTITIONS) + \
- ((minor(dev) / (__I386_MAXDISKS * OLDMAXPARTITIONS)) * OLDMAXPARTITIONS))
-#define DISKMINOR(unit, part) \
- (((unit) * OLDMAXPARTITIONS) + ((part) % OLDMAXPARTITIONS) + \
- ((part) / OLDMAXPARTITIONS) * (__I386_MAXDISKS * OLDMAXPARTITIONS))
-
-/* Pull in MBR partition definitions. */
-#if HAVE_NBTOOL_CONFIG_H
-#include <nbinclude/sys/bootblock.h>
-#else
-#include <sys/bootblock.h>
-#endif /* HAVE_NBTOOL_CONFIG_H */
-
-#ifndef __ASSEMBLER__
-#if HAVE_NBTOOL_CONFIG_H
-#include <nbinclude/sys/dkbad.h>
-#else
-#include <sys/dkbad.h>
-#endif /* HAVE_NBTOOL_CONFIG_H */
-struct cpu_disklabel {
- struct dkbad bad;
-};
-#endif
-
-#endif /* _MACHINE_DISKLABEL_H_ */
diff --git a/StdLib/Include/Ipf/machine/efi.h b/StdLib/Include/Ipf/machine/efi.h
deleted file mode 100644
index 67cf901e15..0000000000
--- a/StdLib/Include/Ipf/machine/efi.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/* $NetBSD: efi.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 2004 Marcel Moolenaar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _MACHINE_EFI_H_
-#define _MACHINE_EFI_H_
-
-#include <sys/uuid.h>
-
-#define EFI_PAGE_SHIFT 12
-#define EFI_PAGE_SIZE (1 << EFI_PAGE_SHIFT)
-#define EFI_PAGE_MASK (EFI_PAGE_SIZE - 1)
-
-#define EFI_TABLE_ACPI20 \
- {0x8868e871,0xe4f1,0x11d3,0xbc,0x22,{0x00,0x80,0xc7,0x3c,0x88,0x81}}
-#define EFI_TABLE_SAL \
- {0xeb9d2d32,0x2d88,0x11d3,0x9a,0x16,{0x00,0x90,0x27,0x3f,0xc1,0x4d}}
-
-enum efi_reset {
- EFI_RESET_COLD,
- EFI_RESET_WARM
-};
-
-typedef uint16_t efi_char;
-typedef unsigned long efi_status;
-
-struct efi_cfgtbl {
- struct uuid ct_uuid;
- uint64_t ct_data;
-};
-
-struct efi_md {
- uint32_t md_type;
-#define EFI_MD_TYPE_NULL 0
-#define EFI_MD_TYPE_CODE 1 /* Loader text. */
-#define EFI_MD_TYPE_DATA 2 /* Loader data. */
-#define EFI_MD_TYPE_BS_CODE 3 /* Boot services text. */
-#define EFI_MD_TYPE_BS_DATA 4 /* Boot services data. */
-#define EFI_MD_TYPE_RT_CODE 5 /* Runtime services text. */
-#define EFI_MD_TYPE_RT_DATA 6 /* Runtime services data. */
-#define EFI_MD_TYPE_FREE 7 /* Unused/free memory. */
-#define EFI_MD_TYPE_BAD 8 /* Bad memory */
-#define EFI_MD_TYPE_RECLAIM 9 /* ACPI reclaimable memory. */
-#define EFI_MD_TYPE_FIRMWARE 10 /* ACPI NV memory */
-#define EFI_MD_TYPE_IOMEM 11 /* Memory-mapped I/O. */
-#define EFI_MD_TYPE_IOPORT 12 /* I/O port space. */
-#define EFI_MD_TYPE_PALCODE 13 /* PAL */
- uint32_t __pad;
- uint64_t md_phys;
- void *md_virt;
- uint64_t md_pages;
- uint64_t md_attr;
-#define EFI_MD_ATTR_UC 0x0000000000000001UL
-#define EFI_MD_ATTR_WC 0x0000000000000002UL
-#define EFI_MD_ATTR_WT 0x0000000000000004UL
-#define EFI_MD_ATTR_WB 0x0000000000000008UL
-#define EFI_MD_ATTR_UCE 0x0000000000000010UL
-#define EFI_MD_ATTR_WP 0x0000000000001000UL
-#define EFI_MD_ATTR_RP 0x0000000000002000UL
-#define EFI_MD_ATTR_XP 0x0000000000004000UL
-#define EFI_MD_ATTR_RT 0x8000000000000000UL
-};
-
-struct efi_tm {
- uint16_t tm_year; /* 1998 - 20XX */
- uint8_t tm_mon; /* 1 - 12 */
- uint8_t tm_mday; /* 1 - 31 */
- uint8_t tm_hour; /* 0 - 23 */
- uint8_t tm_min; /* 0 - 59 */
- uint8_t tm_sec; /* 0 - 59 */
- uint8_t __pad1;
- uint32_t tm_nsec; /* 0 - 999,999,999 */
- int16_t tm_tz; /* -1440 to 1440 or 2047 */
- uint8_t tm_dst;
- uint8_t __pad2;
-};
-
-struct efi_tmcap {
- uint32_t tc_res; /* 1e-6 parts per million */
- uint32_t tc_prec; /* hertz */
- uint8_t tc_stz; /* Set clears sub-second time */
-};
-
-struct efi_tblhdr {
- uint64_t th_sig;
- uint32_t th_rev;
- uint32_t th_hdrsz;
- uint32_t th_crc32;
- uint32_t __res;
-};
-
-struct efi_rt {
- struct efi_tblhdr rt_hdr;
- efi_status (*rt_gettime)(struct efi_tm *, struct efi_tmcap *);
- efi_status (*rt_settime)(struct efi_tm *);
- efi_status (*rt_getwaketime)(uint8_t *, uint8_t *,
- struct efi_tm *);
- efi_status (*rt_setwaketime)(uint8_t, struct efi_tm *);
- efi_status (*rt_setvirtual)(u_long, u_long, uint32_t,
- struct efi_md *);
- efi_status (*rt_cvtptr)(u_long, void **);
- efi_status (*rt_getvar)(efi_char *, struct uuid *, uint32_t *,
- u_long *, void *);
- efi_status (*rt_scanvar)(u_long *, efi_char *, struct uuid *);
- efi_status (*rt_setvar)(efi_char *, struct uuid *, uint32_t,
- u_long, void *);
- efi_status (*rt_gethicnt)(uint32_t *);
- efi_status (*rt_reset)(enum efi_reset, efi_status, u_long,
- efi_char *);
-};
-
-struct efi_systbl {
- struct efi_tblhdr st_hdr;
-#define EFI_SYSTBL_SIG 0x5453595320494249UL
- efi_char *st_fwvendor;
- uint32_t st_fwrev;
- uint32_t __pad;
- void *st_cin;
- void *st_cinif;
- void *st_cout;
- void *st_coutif;
- void *st_cerr;
- void *st_cerrif;
- uint64_t st_rt;
- void *st_bs;
- u_long st_entries;
- uint64_t st_cfgtbl;
-};
-
-void efi_boot_finish(void);
-int efi_boot_minimal(uint64_t);
-void *efi_get_table(struct uuid *);
-void efi_get_time(struct efi_tm *);
-struct efi_md *efi_md_first(void);
-struct efi_md *efi_md_next(struct efi_md *);
-void efi_reset_system(void);
-efi_status efi_set_time(struct efi_tm *);
-
-#endif /* _MACHINE_EFI_H_ */
diff --git a/StdLib/Include/Ipf/machine/elf_machdep.h b/StdLib/Include/Ipf/machine/elf_machdep.h
deleted file mode 100644
index 2cbb3d3daf..0000000000
--- a/StdLib/Include/Ipf/machine/elf_machdep.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/* $NetBSD */
-
-/*-
- * Copyright (c) 1996-1997 John D. Polstra.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/ia64/include/elf.h,v 1.11 2003/09/25 01:10:24 peter Exp $
- */
-
-
-#define ELF32_MACHDEP_ENDIANNESS XXX /* break compilation */
-#define ELF32_MACHDEP_ID_CASES \
- /* no 32-bit ELF machine types supported until 32bit emu */
-
-#define ELF64_MACHDEP_ENDIANNESS ELFDATA2LSB
-#define ELF64_MACHDEP_ID_CASES \
- case EM_IA_64: \
- break;
-
-#define ELF64_MACHDEP_ID EM_IA_64 /* XXX */
-
-#define ARCH_ELFSIZE 64 /* MD native binary size */
-
-/*
- * Relocation types.
- */
-
-/* Name Value Field Calculation */
-#define R_IA64_NONE 0 /* None */
-#define R_IA64_IMM14 0x21 /* immediate14 S + A */
-#define R_IA64_IMM22 0x22 /* immediate22 S + A */
-#define R_IA64_IMM64 0x23 /* immediate64 S + A */
-#define R_IA64_DIR32MSB 0x24 /* word32 MSB S + A */
-#define R_IA64_DIR32LSB 0x25 /* word32 LSB S + A */
-#define R_IA64_DIR64MSB 0x26 /* word64 MSB S + A */
-#define R_IA64_DIR64LSB 0x27 /* word64 LSB S + A */
-#define R_IA64_GPREL22 0x2a /* immediate22 @gprel(S + A) */
-#define R_IA64_GPREL64I 0x2b /* immediate64 @gprel(S + A) */
-#define R_IA64_GPREL64MSB 0x2e /* word64 MSB @gprel(S + A) */
-#define R_IA64_GPREL64LSB 0x2f /* word64 LSB @gprel(S + A) */
-#define R_IA64_LTOFF22 0x32 /* immediate22 @ltoff(S + A) */
-#define R_IA64_LTOFF64I 0x33 /* immediate64 @ltoff(S + A) */
-#define R_IA64_PLTOFF22 0x3a /* immediate22 @pltoff(S + A) */
-#define R_IA64_PLTOFF64I 0x3b /* immediate64 @pltoff(S + A) */
-#define R_IA64_PLTOFF64MSB 0x3e /* word64 MSB @pltoff(S + A) */
-#define R_IA64_PLTOFF64LSB 0x3f /* word64 LSB @pltoff(S + A) */
-#define R_IA64_FPTR64I 0x43 /* immediate64 @fptr(S + A) */
-#define R_IA64_FPTR32MSB 0x44 /* word32 MSB @fptr(S + A) */
-#define R_IA64_FPTR32LSB 0x45 /* word32 LSB @fptr(S + A) */
-#define R_IA64_FPTR64MSB 0x46 /* word64 MSB @fptr(S + A) */
-#define R_IA64_FPTR64LSB 0x47 /* word64 LSB @fptr(S + A) */
-#define R_IA64_PCREL21B 0x49 /* immediate21 form1 S + A - P */
-#define R_IA64_PCREL21M 0x4a /* immediate21 form2 S + A - P */
-#define R_IA64_PCREL21F 0x4b /* immediate21 form3 S + A - P */
-#define R_IA64_PCREL32MSB 0x4c /* word32 MSB S + A - P */
-#define R_IA64_PCREL32LSB 0x4d /* word32 LSB S + A - P */
-#define R_IA64_PCREL64MSB 0x4e /* word64 MSB S + A - P */
-#define R_IA64_PCREL64LSB 0x4f /* word64 LSB S + A - P */
-#define R_IA64_LTOFF_FPTR22 0x52 /* immediate22 @ltoff(@fptr(S + A)) */
-#define R_IA64_LTOFF_FPTR64I 0x53 /* immediate64 @ltoff(@fptr(S + A)) */
-#define R_IA64_LTOFF_FPTR32MSB 0x54 /* word32 MSB @ltoff(@fptr(S + A)) */
-#define R_IA64_LTOFF_FPTR32LSB 0x55 /* word32 LSB @ltoff(@fptr(S + A)) */
-#define R_IA64_LTOFF_FPTR64MSB 0x56 /* word64 MSB @ltoff(@fptr(S + A)) */
-#define R_IA64_LTOFF_FPTR64LSB 0x57 /* word64 LSB @ltoff(@fptr(S + A)) */
-#define R_IA64_SEGREL32MSB 0x5c /* word32 MSB @segrel(S + A) */
-#define R_IA64_SEGREL32LSB 0x5d /* word32 LSB @segrel(S + A) */
-#define R_IA64_SEGREL64MSB 0x5e /* word64 MSB @segrel(S + A) */
-#define R_IA64_SEGREL64LSB 0x5f /* word64 LSB @segrel(S + A) */
-#define R_IA64_SECREL32MSB 0x64 /* word32 MSB @secrel(S + A) */
-#define R_IA64_SECREL32LSB 0x65 /* word32 LSB @secrel(S + A) */
-#define R_IA64_SECREL64MSB 0x66 /* word64 MSB @secrel(S + A) */
-#define R_IA64_SECREL64LSB 0x67 /* word64 LSB @secrel(S + A) */
-#define R_IA64_REL32MSB 0x6c /* word32 MSB BD + A */
-#define R_IA64_REL32LSB 0x6d /* word32 LSB BD + A */
-#define R_IA64_REL64MSB 0x6e /* word64 MSB BD + A */
-#define R_IA64_REL64LSB 0x6f /* word64 LSB BD + A */
-#define R_IA64_LTV32MSB 0x74 /* word32 MSB S + A */
-#define R_IA64_LTV32LSB 0x75 /* word32 LSB S + A */
-#define R_IA64_LTV64MSB 0x76 /* word64 MSB S + A */
-#define R_IA64_LTV64LSB 0x77 /* word64 LSB S + A */
-#define R_IA64_IPLTMSB 0x80 /* function descriptor MSB special */
-#define R_IA64_IPLTLSB 0x81 /* function descriptor LSB speciaal */
-#define R_IA64_SUB 0x85 /* immediate64 A - S */
-#define R_IA64_LTOFF22X 0x86 /* immediate22 special */
-#define R_IA64_LDXMOV 0x87 /* immediate22 special */
-#define R_IA64_TPREL14 0x91 /* imm14 @tprel(S + A) */
-#define R_IA64_TPREL22 0x92 /* imm22 @tprel(S + A) */
-#define R_IA64_TPREL64I 0x93 /* imm64 @tprel(S + A) */
-#define R_IA64_TPREL64MSB 0x96 /* word64 MSB @tprel(S + A) */
-#define R_IA64_TPREL64LSB 0x97 /* word64 LSB @tprel(S + A) */
-#define R_IA64_LTOFF_TPREL22 0x9a /* imm22 @ltoff(@tprel(S+A)) */
-#define R_IA64_DTPMOD64MSB 0xa6 /* word64 MSB @dtpmod(S + A) */
-#define R_IA64_DTPMOD64LSB 0xa7 /* word64 LSB @dtpmod(S + A) */
-#define R_IA64_LTOFF_DTPMOD22 0xaa /* imm22 @ltoff(@dtpmod(S+A)) */
-#define R_IA64_DTPREL14 0xb1 /* imm14 @dtprel(S + A) */
-#define R_IA64_DTPREL22 0xb2 /* imm22 @dtprel(S + A) */
-#define R_IA64_DTPREL64I 0xb3 /* imm64 @dtprel(S + A) */
-#define R_IA64_DTPREL32MSB 0xb4 /* word32 MSB @dtprel(S + A) */
-#define R_IA64_DTPREL32LSB 0xb5 /* word32 LSB @dtprel(S + A) */
-#define R_IA64_DTPREL64MSB 0xb6 /* word64 MSB @dtprel(S + A) */
-#define R_IA64_DTPREL64LSB 0xb7 /* word64 LSB @dtprel(S + A) */
-#define R_IA64_LTOFF_DTPREL22 0xba /* imm22 @ltoff(@dtprel(S+A)) */
-
-/* p_type */
-
-#define PT_IA_64_ARCHEXT 0x70000000 /* segment contains a section of type SHT_IA_64_EXT */
-#define PT_IA_64_UNWIND 0x70000001 /* segment contains the stack unwind tables */
-
-/* p_flags */
-
-#define PF_IA_64_NORECOV 0x80000000 /* segment contains the stack unwind tables */
-
-/* sh_type */
-
-#define SHT_IA_64_EXT 0x70000000 /* section contains product specific extension bits */
-#define SHT_IA_64_UNWIND 0x70000001 /* section contains unwind function table entries for stack unwinding */
-#define SHT_IA_64_LOPSREG 0x78000000 /* reserved for implementation-specific section types */
-#define SHT_IA_64_HIPSREG 0x7fffffff /* Ditto */
-#define SHT_IA_64_PRIORITY_INIT 0x79000000 /* section contains priority initialization record */
-
-/* sh_flags */
-
-#define SHF_IA_64_SHORT 0x10000000 /* section must be placed near gp. */
-#define SHF_IA_64_NORECOV 0x20000000 /* section contains code that uses speculative instructions without
- * recovery code
- */
-
-
-
diff --git a/StdLib/Include/Ipf/machine/endian.h b/StdLib/Include/Ipf/machine/endian.h
deleted file mode 100644
index 3c2244efa3..0000000000
--- a/StdLib/Include/Ipf/machine/endian.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: endian.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-#include <sys/endian.h>
diff --git a/StdLib/Include/Ipf/machine/endian_machdep.h b/StdLib/Include/Ipf/machine/endian_machdep.h
deleted file mode 100644
index 7d69f7b16a..0000000000
--- a/StdLib/Include/Ipf/machine/endian_machdep.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: endian_machdep.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-#define _BYTE_ORDER _LITTLE_ENDIAN
diff --git a/StdLib/Include/Ipf/machine/float.h b/StdLib/Include/Ipf/machine/float.h
deleted file mode 100644
index 2cf8fecb44..0000000000
--- a/StdLib/Include/Ipf/machine/float.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* $NetBSD: float.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-#include <sys/float_ieee754.h>
-
-
-/* #ifndef _IA64_FLOAT_H_ */
-/* #define _IA64_FLOAT_H_ */
-
-/* #define LDBL_MANT_DIG 64 */
-/* #define LDBL_EPSILON 1.0842021724855044340E-19L */
-/* #define LDBL_DIG 18 */
-/* #define LDBL_MIN_EXP (-16381) */
-/* #define LDBL_MIN 3.3621031431120935063E-4932L */
-/* #define LDBL_MIN_10_EXP (-4931) */
-/* #define LDBL_MAX_EXP 16384 */
-/* #define LDBL_MAX 1.1897314953572317650E+4932L */
-/* #define LDBL_MAX_10_EXP 4932 */
-
-/* #include <sys/float_ieee754.h> */
-
-/* #if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) && \ */
-/* !defined(_XOPEN_SOURCE) || \ */
-/* ((__STDC_VERSION__ - 0) >= 199901L) || \ */
-/* ((_POSIX_C_SOURCE - 0) >= 200112L) || \ */
-/* ((_XOPEN_SOURCE - 0) >= 600) || \ */
-/* defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE) */
-/* #define DECIMAL_DIG 35 */
-/* #endif /\* !defined(_ANSI_SOURCE) && ... *\/ */
-
-/* #endif /\* _IA64_FLOAT_H_ *\/ */
diff --git a/StdLib/Include/Ipf/machine/ia64_cpu.h b/StdLib/Include/Ipf/machine/ia64_cpu.h
deleted file mode 100644
index 075bfbeff1..0000000000
--- a/StdLib/Include/Ipf/machine/ia64_cpu.h
+++ /dev/null
@@ -1,427 +0,0 @@
-/* $NetBSD: ia64_cpu.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 2000 Doug Rabson
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _MACHINE_IA64_CPU_H_
-#define _MACHINE_IA64_CPU_H_
-
-/*
- * Definition of PSR and IPSR bits.
- */
-#define IA64_PSR_BE 0x0000000000000002
-#define IA64_PSR_UP 0x0000000000000004
-#define IA64_PSR_AC 0x0000000000000008
-#define IA64_PSR_MFL 0x0000000000000010
-#define IA64_PSR_MFH 0x0000000000000020
-#define IA64_PSR_IC 0x0000000000002000
-#define IA64_PSR_I 0x0000000000004000
-#define IA64_PSR_PK 0x0000000000008000
-#define IA64_PSR_DT 0x0000000000020000
-#define IA64_PSR_DFL 0x0000000000040000
-#define IA64_PSR_DFH 0x0000000000080000
-#define IA64_PSR_SP 0x0000000000100000
-#define IA64_PSR_PP 0x0000000000200000
-#define IA64_PSR_DI 0x0000000000400000
-#define IA64_PSR_SI 0x0000000000800000
-#define IA64_PSR_DB 0x0000000001000000
-#define IA64_PSR_LP 0x0000000002000000
-#define IA64_PSR_TB 0x0000000004000000
-#define IA64_PSR_RT 0x0000000008000000
-#define IA64_PSR_CPL 0x0000000300000000
-#define IA64_PSR_CPL_KERN 0x0000000000000000
-#define IA64_PSR_CPL_1 0x0000000100000000
-#define IA64_PSR_CPL_2 0x0000000200000000
-#define IA64_PSR_CPL_USER 0x0000000300000000
-#define IA64_PSR_IS 0x0000000400000000
-#define IA64_PSR_MC 0x0000000800000000
-#define IA64_PSR_IT 0x0000001000000000
-#define IA64_PSR_ID 0x0000002000000000
-#define IA64_PSR_DA 0x0000004000000000
-#define IA64_PSR_DD 0x0000008000000000
-#define IA64_PSR_SS 0x0000010000000000
-#define IA64_PSR_RI 0x0000060000000000
-#define IA64_PSR_RI_0 0x0000000000000000
-#define IA64_PSR_RI_1 0x0000020000000000
-#define IA64_PSR_RI_2 0x0000040000000000
-#define IA64_PSR_ED 0x0000080000000000
-#define IA64_PSR_BN 0x0000100000000000
-#define IA64_PSR_IA 0x0000200000000000
-
-/*
- * Definition of ISR bits.
- */
-#define IA64_ISR_CODE 0x000000000000ffff
-#define IA64_ISR_VECTOR 0x0000000000ff0000
-#define IA64_ISR_X 0x0000000100000000
-#define IA64_ISR_W 0x0000000200000000
-#define IA64_ISR_R 0x0000000400000000
-#define IA64_ISR_NA 0x0000000800000000
-#define IA64_ISR_SP 0x0000001000000000
-#define IA64_ISR_RS 0x0000002000000000
-#define IA64_ISR_IR 0x0000004000000000
-#define IA64_ISR_NI 0x0000008000000000
-#define IA64_ISR_SO 0x0000010000000000
-#define IA64_ISR_EI 0x0000060000000000
-#define IA64_ISR_EI_0 0x0000000000000000
-#define IA64_ISR_EI_1 0x0000020000000000
-#define IA64_ISR_EI_2 0x0000040000000000
-#define IA64_ISR_ED 0x0000080000000000
-
-/*
- * Vector numbers for various ia64 interrupts.
- */
-#define IA64_VEC_VHPT 0
-#define IA64_VEC_ITLB 1
-#define IA64_VEC_DTLB 2
-#define IA64_VEC_ALT_ITLB 3
-#define IA64_VEC_ALT_DTLB 4
-#define IA64_VEC_NESTED_DTLB 5
-#define IA64_VEC_IKEY_MISS 6
-#define IA64_VEC_DKEY_MISS 7
-#define IA64_VEC_DIRTY_BIT 8
-#define IA64_VEC_INST_ACCESS 9
-#define IA64_VEC_DATA_ACCESS 10
-#define IA64_VEC_BREAK 11
-#define IA64_VEC_EXT_INTR 12
-#define IA64_VEC_PAGE_NOT_PRESENT 20
-#define IA64_VEC_KEY_PERMISSION 21
-#define IA64_VEC_INST_ACCESS_RIGHTS 22
-#define IA64_VEC_DATA_ACCESS_RIGHTS 23
-#define IA64_VEC_GENERAL_EXCEPTION 24
-#define IA64_VEC_DISABLED_FP 25
-#define IA64_VEC_NAT_CONSUMPTION 26
-#define IA64_VEC_SPECULATION 27
-#define IA64_VEC_DEBUG 29
-#define IA64_VEC_UNALIGNED_REFERENCE 30
-#define IA64_VEC_UNSUPP_DATA_REFERENCE 31
-#define IA64_VEC_FLOATING_POINT_FAULT 32
-#define IA64_VEC_FLOATING_POINT_TRAP 33
-#define IA64_VEC_LOWER_PRIVILEGE_TRANSFER 34
-#define IA64_VEC_TAKEN_BRANCH_TRAP 35
-#define IA64_VEC_SINGLE_STEP_TRAP 36
-#define IA64_VEC_IA32_EXCEPTION 45
-#define IA64_VEC_IA32_INTERCEPT 46
-#define IA64_VEC_IA32_INTERRUPT 47
-
-/*
- * IA-32 exceptions.
- */
-#define IA32_EXCEPTION_DIVIDE 0
-#define IA32_EXCEPTION_DEBUG 1
-#define IA32_EXCEPTION_BREAK 3
-#define IA32_EXCEPTION_OVERFLOW 4
-#define IA32_EXCEPTION_BOUND 5
-#define IA32_EXCEPTION_DNA 7
-#define IA32_EXCEPTION_NOT_PRESENT 11
-#define IA32_EXCEPTION_STACK_FAULT 12
-#define IA32_EXCEPTION_GPFAULT 13
-#define IA32_EXCEPTION_FPERROR 16
-#define IA32_EXCEPTION_ALIGNMENT_CHECK 17
-#define IA32_EXCEPTION_STREAMING_SIMD 19
-
-#define IA32_INTERCEPT_INSTRUCTION 0
-#define IA32_INTERCEPT_GATE 1
-#define IA32_INTERCEPT_SYSTEM_FLAG 2
-#define IA32_INTERCEPT_LOCK 4
-
-#ifndef _LOCORE
-
-/*
- * Various special ia64 instructions.
- */
-
-/*
- * Memory Fence.
- */
-static __inline void
-ia64_mf(void)
-{
- __asm __volatile("mf");
-}
-
-static __inline void
-ia64_mf_a(void)
-{
- __asm __volatile("mf.a");
-}
-
-/*
- * Flush Cache.
- */
-static __inline void
-ia64_fc(u_int64_t va)
-{
- __asm __volatile("fc %0" :: "r"(va));
-}
-
-/*
- * Flush Instruction Cache
- */
-
-static __inline void
-ia64_fc_i(u_int64_t va)
-{
- __asm __volatile("fc.i %0" :: "r"(va));
-}
-
-/*
- * Sync instruction stream.
- */
-static __inline void
-ia64_sync_i(void)
-{
- __asm __volatile("sync.i");
-}
-
-/*
- * Calculate address in VHPT for va.
- */
-static __inline u_int64_t
-ia64_thash(u_int64_t va)
-{
- u_int64_t result;
- __asm __volatile("thash %0=%1" : "=r" (result) : "r" (va));
- return result;
-}
-
-/*
- * Calculate VHPT tag for va.
- */
-static __inline u_int64_t
-ia64_ttag(u_int64_t va)
-{
- u_int64_t result;
- __asm __volatile("ttag %0=%1" : "=r" (result) : "r" (va));
- return result;
-}
-
-/*
- * Convert virtual address to physical.
- */
-static __inline u_int64_t
-ia64_tpa(u_int64_t va)
-{
- u_int64_t result;
- __asm __volatile("tpa %0=%1" : "=r" (result) : "r" (va));
- return result;
-}
-
-/*
- * Generate a ptc.e instruction.
- */
-static __inline void
-ia64_ptc_e(u_int64_t v)
-{
- __asm __volatile("ptc.e %0;; srlz.d;;" :: "r"(v));
-}
-
-/*
- * Generate a ptc.g instruction.
- */
-static __inline void
-ia64_ptc_g(u_int64_t va, u_int64_t log2size)
-{
- __asm __volatile("ptc.g %0,%1;; srlz.d;;" :: "r"(va), "r"(log2size));
-}
-
-/*
- * Generate a ptc.ga instruction.
- */
-static __inline void
-ia64_ptc_ga(u_int64_t va, u_int64_t log2size)
-{
- __asm __volatile("ptc.ga %0,%1;; srlz.d;;" :: "r"(va), "r"(log2size));
-}
-
-/*
- * Generate a ptc.l instruction.
- */
-static __inline void
-ia64_ptc_l(u_int64_t va, u_int64_t log2size)
-{
- __asm __volatile("ptc.l %0,%1;; srlz.d;;" :: "r"(va), "r"(log2size));
-}
-
-/*
- * Read the value of psr.
- */
-static __inline u_int64_t
-ia64_get_psr(void)
-{
- u_int64_t result;
- __asm __volatile("mov %0=psr;;" : "=r" (result));
- return result;
-}
-
-/*
- * Define accessors for application registers.
- */
-
-#define IA64_AR(name) \
- \
-static __inline u_int64_t \
-ia64_get_##name(void) \
-{ \
- u_int64_t result; \
- __asm __volatile("mov %0=ar." #name : "=r" (result)); \
- return result; \
-} \
- \
-static __inline void \
-ia64_set_##name(u_int64_t v) \
-{ \
- __asm __volatile("mov ar." #name "=%0;;" :: "r" (v)); \
-}
-
-IA64_AR(k0)
-IA64_AR(k1)
-IA64_AR(k2)
-IA64_AR(k3)
-IA64_AR(k4)
-IA64_AR(k5)
-IA64_AR(k6)
-IA64_AR(k7)
-
-IA64_AR(rsc)
-IA64_AR(bsp)
-IA64_AR(bspstore)
-IA64_AR(rnat)
-
-IA64_AR(fcr)
-
-IA64_AR(eflag)
-IA64_AR(csd)
-IA64_AR(ssd)
-IA64_AR(cflg)
-IA64_AR(fsr)
-IA64_AR(fir)
-IA64_AR(fdr)
-
-IA64_AR(ccv)
-
-IA64_AR(unat)
-
-IA64_AR(fpsr)
-
-IA64_AR(itc)
-
-IA64_AR(pfs)
-IA64_AR(lc)
-IA64_AR(ec)
-
-/*
- * Define accessors for control registers.
- */
-
-#define IA64_CR(name) \
- \
-static __inline u_int64_t \
-ia64_get_##name(void) \
-{ \
- u_int64_t result; \
- __asm __volatile("mov %0=cr." #name : "=r" (result)); \
- return result; \
-} \
- \
-static __inline void \
-ia64_set_##name(u_int64_t v) \
-{ \
- __asm __volatile("mov cr." #name "=%0;;" :: "r" (v)); \
-}
-
-IA64_CR(dcr)
-IA64_CR(itm)
-IA64_CR(iva)
-
-IA64_CR(pta)
-
-IA64_CR(ipsr)
-IA64_CR(isr)
-
-IA64_CR(iip)
-IA64_CR(ifa)
-IA64_CR(itir)
-IA64_CR(iipa)
-IA64_CR(ifs)
-IA64_CR(iim)
-IA64_CR(iha)
-
-IA64_CR(lid)
-IA64_CR(ivr)
-IA64_CR(tpr)
-IA64_CR(eoi)
-IA64_CR(irr0)
-IA64_CR(irr1)
-IA64_CR(irr2)
-IA64_CR(irr3)
-IA64_CR(itv)
-IA64_CR(pmv)
-IA64_CR(cmcv)
-
-IA64_CR(lrr0)
-IA64_CR(lrr1)
-
-/*
- * Write a region register.
- */
-static __inline void
-ia64_set_rr(u_int64_t rrbase, u_int64_t v)
-{
- __asm __volatile("mov rr[%0]=%1;; srlz.d;;"
- :: "r"(rrbase), "r"(v) : "memory");
-}
-
-/*
- * Read a CPUID register.
- */
-static __inline u_int64_t
-ia64_get_cpuid(int i)
-{
- u_int64_t result;
- __asm __volatile("mov %0=cpuid[%1]"
- : "=r" (result) : "r"(i));
- return result;
-}
-
-static __inline void
-ia64_disable_highfp(void)
-{
- __asm __volatile("ssm psr.dfh;; srlz.d");
-}
-
-static __inline void
-ia64_enable_highfp(void)
-{
- __asm __volatile("rsm psr.dfh;; srlz.d");
-}
-
-#endif /* !_LOCORE */
-
-#endif /* _MACHINE_IA64_CPU_H_ */
-
diff --git a/StdLib/Include/Ipf/machine/ieee.h b/StdLib/Include/Ipf/machine/ieee.h
deleted file mode 100644
index 783ceeb0c9..0000000000
--- a/StdLib/Include/Ipf/machine/ieee.h
+++ /dev/null
@@ -1,2 +0,0 @@
-
-#include <sys/ieee754.h>
diff --git a/StdLib/Include/Ipf/machine/ieeefp.h b/StdLib/Include/Ipf/machine/ieeefp.h
deleted file mode 100644
index 02662769f0..0000000000
--- a/StdLib/Include/Ipf/machine/ieeefp.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*-
- * Copyright (c) 2001 Doug Rabson
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/ia64/include/ieeefp.h,v 1.5.10.1.4.1 2010/06/14 02:09:06 kensmith Exp $
- */
-
-#ifndef _MACHINE_IEEEFP_H_
-#define _MACHINE_IEEEFP_H_
-
-#include <machine/fpu.h>
-
-typedef int fp_except_t;
-#define FP_X_INV IA64_FPSR_TRAP_VD /* invalid operation exception */
-#define FP_X_DZ IA64_FPSR_TRAP_ZD /* divide-by-zero exception */
-#define FP_X_OFL IA64_FPSR_TRAP_OD /* overflow exception */
-#define FP_X_UFL IA64_FPSR_TRAP_UD /* underflow exception */
-#define FP_X_IMP IA64_FPSR_TRAP_ID /* imprecise(inexact) exception */
-
-typedef enum {
- FP_RN = 0, /* round to nearest */
- FP_RM, /* round toward minus infinity */
- FP_RP, /* round toward plus infinity */
- FP_RZ /* round toward zero */
-} fp_rnd_t;
-
-#endif /* !_MACHINE_IEEEFP_H_ */
diff --git a/StdLib/Include/Ipf/machine/int_const.h b/StdLib/Include/Ipf/machine/int_const.h
deleted file mode 100644
index dcf1ede3f5..0000000000
--- a/StdLib/Include/Ipf/machine/int_const.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* $NetBSD: int_const.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _IA64_INT_CONST_H_
-#define _IA64_INT_CONST_H_
-
-/* XXX: cherry: needs to be audited */
-/*
- * 7.18.4 Macros for integer constants
- */
-
-/* 7.18.4.1 Macros for minimum-width integer constants */
-
-#define INT8_C(c) c
-#define INT16_C(c) c
-#define INT32_C(c) c
-#define INT64_C(c) c ## L
-
-#define UINT8_C(c) c ## U
-#define UINT16_C(c) c ## U
-#define UINT32_C(c) c ## U
-#define UINT64_C(c) c ## UL
-
-/* 7.18.4.2 Macros for greatest-width integer constants */
-
-#define INTMAX_C(c) c ## L
-#define UINTMAX_C(c) c ## UL
-
-#endif /* !_IA64_INT_CONST_H_ */
diff --git a/StdLib/Include/Ipf/machine/int_fmtio.h b/StdLib/Include/Ipf/machine/int_fmtio.h
deleted file mode 100644
index a74f7cf02d..0000000000
--- a/StdLib/Include/Ipf/machine/int_fmtio.h
+++ /dev/null
@@ -1,219 +0,0 @@
-/* $NetBSD: int_fmtio.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _IA64_INT_FMTIO_H_
-#define _IA64_INT_FMTIO_H_
-
-/*
- * 7.8.1 Macros for format specifiers
- */
-
-/* fprintf macros for signed integers */
-
-#define PRId8 "d" /* int8_t */
-#define PRId16 "d" /* int16_t */
-#define PRId32 "d" /* int32_t */
-#define PRId64 "ld" /* int64_t */
-#define PRIdLEAST8 "d" /* int_least8_t */
-#define PRIdLEAST16 "d" /* int_least16_t */
-#define PRIdLEAST32 "d" /* int_least32_t */
-#define PRIdLEAST64 "ld" /* int_least64_t */
-#define PRIdFAST8 "d" /* int_fast8_t */
-#define PRIdFAST16 "d" /* int_fast16_t */
-#define PRIdFAST32 "d" /* int_fast32_t */
-#define PRIdFAST64 "ld" /* int_fast64_t */
-#define PRIdMAX "ld" /* intmax_t */
-#define PRIdPTR "ld" /* intptr_t */
-
-#define PRIi8 "i" /* int8_t */
-#define PRIi16 "i" /* int16_t */
-#define PRIi32 "i" /* int32_t */
-#define PRIi64 "li" /* int64_t */
-#define PRIiLEAST8 "i" /* int_least8_t */
-#define PRIiLEAST16 "i" /* int_least16_t */
-#define PRIiLEAST32 "i" /* int_least32_t */
-#define PRIiLEAST64 "li" /* int_least64_t */
-#define PRIiFAST8 "i" /* int_fast8_t */
-#define PRIiFAST16 "i" /* int_fast16_t */
-#define PRIiFAST32 "i" /* int_fast32_t */
-#define PRIiFAST64 "li" /* int_fast64_t */
-#define PRIiMAX "li" /* intmax_t */
-#define PRIiPTR "li" /* intptr_t */
-
-/* fprintf macros for unsigned integers */
-
-#define PRIo8 "o" /* uint8_t */
-#define PRIo16 "o" /* uint16_t */
-#define PRIo32 "o" /* uint32_t */
-#define PRIo64 "lo" /* uint64_t */
-#define PRIoLEAST8 "o" /* uint_least8_t */
-#define PRIoLEAST16 "o" /* uint_least16_t */
-#define PRIoLEAST32 "o" /* uint_least32_t */
-#define PRIoLEAST64 "lo" /* uint_least64_t */
-#define PRIoFAST8 "o" /* uint_fast8_t */
-#define PRIoFAST16 "o" /* uint_fast16_t */
-#define PRIoFAST32 "o" /* uint_fast32_t */
-#define PRIoFAST64 "lo" /* uint_fast64_t */
-#define PRIoMAX "lo" /* uintmax_t */
-#define PRIoPTR "lo" /* uintptr_t */
-
-#define PRIu8 "u" /* uint8_t */
-#define PRIu16 "u" /* uint16_t */
-#define PRIu32 "u" /* uint32_t */
-#define PRIu64 "lu" /* uint64_t */
-#define PRIuLEAST8 "u" /* uint_least8_t */
-#define PRIuLEAST16 "u" /* uint_least16_t */
-#define PRIuLEAST32 "u" /* uint_least32_t */
-#define PRIuLEAST64 "lu" /* uint_least64_t */
-#define PRIuFAST8 "u" /* uint_fast8_t */
-#define PRIuFAST16 "u" /* uint_fast16_t */
-#define PRIuFAST32 "u" /* uint_fast32_t */
-#define PRIuFAST64 "lu" /* uint_fast64_t */
-#define PRIuMAX "lu" /* uintmax_t */
-#define PRIuPTR "lu" /* uintptr_t */
-
-#define PRIx8 "x" /* uint8_t */
-#define PRIx16 "x" /* uint16_t */
-#define PRIx32 "x" /* uint32_t */
-#define PRIx64 "lx" /* uint64_t */
-#define PRIxLEAST8 "x" /* uint_least8_t */
-#define PRIxLEAST16 "x" /* uint_least16_t */
-#define PRIxLEAST32 "x" /* uint_least32_t */
-#define PRIxLEAST64 "lx" /* uint_least64_t */
-#define PRIxFAST8 "x" /* uint_fast8_t */
-#define PRIxFAST16 "x" /* uint_fast16_t */
-#define PRIxFAST32 "x" /* uint_fast32_t */
-#define PRIxFAST64 "lx" /* uint_fast64_t */
-#define PRIxMAX "lx" /* uintmax_t */
-#define PRIxPTR "lx" /* uintptr_t */
-
-#define PRIX8 "X" /* uint8_t */
-#define PRIX16 "X" /* uint16_t */
-#define PRIX32 "X" /* uint32_t */
-#define PRIX64 "lX" /* uint64_t */
-#define PRIXLEAST8 "X" /* uint_least8_t */
-#define PRIXLEAST16 "X" /* uint_least16_t */
-#define PRIXLEAST32 "X" /* uint_least32_t */
-#define PRIXLEAST64 "lX" /* uint_least64_t */
-#define PRIXFAST8 "X" /* uint_fast8_t */
-#define PRIXFAST16 "X" /* uint_fast16_t */
-#define PRIXFAST32 "X" /* uint_fast32_t */
-#define PRIXFAST64 "lX" /* uint_fast64_t */
-#define PRIXMAX "lX" /* uintmax_t */
-#define PRIXPTR "lX" /* uintptr_t */
-
-/* fscanf macros for signed integers */
-
-#define SCNd8 "hhd" /* int8_t */
-#define SCNd16 "hd" /* int16_t */
-#define SCNd32 "d" /* int32_t */
-#define SCNd64 "ld" /* int64_t */
-#define SCNdLEAST8 "hhd" /* int_least8_t */
-#define SCNdLEAST16 "hd" /* int_least16_t */
-#define SCNdLEAST32 "d" /* int_least32_t */
-#define SCNdLEAST64 "ld" /* int_least64_t */
-#define SCNdFAST8 "d" /* int_fast8_t */
-#define SCNdFAST16 "d" /* int_fast16_t */
-#define SCNdFAST32 "d" /* int_fast32_t */
-#define SCNdFAST64 "ld" /* int_fast64_t */
-#define SCNdMAX "ld" /* intmax_t */
-#define SCNdPTR "ld" /* intptr_t */
-
-#define SCNi8 "hhi" /* int8_t */
-#define SCNi16 "hi" /* int16_t */
-#define SCNi32 "i" /* int32_t */
-#define SCNi64 "li" /* int64_t */
-#define SCNiLEAST8 "hhi" /* int_least8_t */
-#define SCNiLEAST16 "hi" /* int_least16_t */
-#define SCNiLEAST32 "i" /* int_least32_t */
-#define SCNiLEAST64 "li" /* int_least64_t */
-#define SCNiFAST8 "i" /* int_fast8_t */
-#define SCNiFAST16 "i" /* int_fast16_t */
-#define SCNiFAST32 "i" /* int_fast32_t */
-#define SCNiFAST64 "li" /* int_fast64_t */
-#define SCNiMAX "li" /* intmax_t */
-#define SCNiPTR "li" /* intptr_t */
-
-/* fscanf macros for unsigned integers */
-
-#define SCNo8 "hho" /* uint8_t */
-#define SCNo16 "ho" /* uint16_t */
-#define SCNo32 "o" /* uint32_t */
-#define SCNo64 "lo" /* uint64_t */
-#define SCNoLEAST8 "hho" /* uint_least8_t */
-#define SCNoLEAST16 "ho" /* uint_least16_t */
-#define SCNoLEAST32 "o" /* uint_least32_t */
-#define SCNoLEAST64 "lo" /* uint_least64_t */
-#define SCNoFAST8 "o" /* uint_fast8_t */
-#define SCNoFAST16 "o" /* uint_fast16_t */
-#define SCNoFAST32 "o" /* uint_fast32_t */
-#define SCNoFAST64 "lo" /* uint_fast64_t */
-#define SCNoMAX "lo" /* uintmax_t */
-#define SCNoPTR "lo" /* uintptr_t */
-
-#define SCNu8 "hhu" /* uint8_t */
-#define SCNu16 "hu" /* uint16_t */
-#define SCNu32 "u" /* uint32_t */
-#define SCNu64 "lu" /* uint64_t */
-#define SCNuLEAST8 "hhu" /* uint_least8_t */
-#define SCNuLEAST16 "hu" /* uint_least16_t */
-#define SCNuLEAST32 "u" /* uint_least32_t */
-#define SCNuLEAST64 "lu" /* uint_least64_t */
-#define SCNuFAST8 "u" /* uint_fast8_t */
-#define SCNuFAST16 "u" /* uint_fast16_t */
-#define SCNuFAST32 "u" /* uint_fast32_t */
-#define SCNuFAST64 "lu" /* uint_fast64_t */
-#define SCNuMAX "lu" /* uintmax_t */
-#define SCNuPTR "lu" /* uintptr_t */
-
-#define SCNx8 "hhx" /* uint8_t */
-#define SCNx16 "hx" /* uint16_t */
-#define SCNx32 "x" /* uint32_t */
-#define SCNx64 "lx" /* uint64_t */
-#define SCNxLEAST8 "hhx" /* uint_least8_t */
-#define SCNxLEAST16 "hx" /* uint_least16_t */
-#define SCNxLEAST32 "x" /* uint_least32_t */
-#define SCNxLEAST64 "lx" /* uint_least64_t */
-#define SCNxFAST8 "x" /* uint_fast8_t */
-#define SCNxFAST16 "x" /* uint_fast16_t */
-#define SCNxFAST32 "x" /* uint_fast32_t */
-#define SCNxFAST64 "lx" /* uint_fast64_t */
-#define SCNxMAX "lx" /* uintmax_t */
-#define SCNxPTR "lx" /* uintptr_t */
-
-#endif /* !_IA64_INT_FMTIO_H_ */
diff --git a/StdLib/Include/Ipf/machine/int_limits.h b/StdLib/Include/Ipf/machine/int_limits.h
deleted file mode 100644
index d548a73e5c..0000000000
--- a/StdLib/Include/Ipf/machine/int_limits.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/* $NetBSD: int_limits.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _IA64_INT_LIMITS_H_
-#define _IA64_INT_LIMITS_H_
-
-/*
- * 7.18.2 Limits of specified-width integer types
- */
-
-/* 7.18.2.1 Limits of exact-width integer types */
-
-/* minimum values of exact-width signed integer types */
-#define INT8_MIN (-0x7f-1) /* int8_t */
-#define INT16_MIN (-0x7fff-1) /* int16_t */
-#define INT32_MIN (-0x7fffffff-1) /* int32_t */
-#define INT64_MIN (-0x7fffffffffffffffL-1) /* int64_t */
-
-/* maximum values of exact-width signed integer types */
-#define INT8_MAX 0x7f /* int8_t */
-#define INT16_MAX 0x7fff /* int16_t */
-#define INT32_MAX 0x7fffffff /* int32_t */
-#define INT64_MAX 0x7fffffffffffffffL /* int64_t */
-
-/* maximum values of exact-width unsigned integer types */
-#define UINT8_MAX 0xffU /* uint8_t */
-#define UINT16_MAX 0xffffU /* uint16_t */
-#define UINT32_MAX 0xffffffffU /* uint32_t */
-#define UINT64_MAX 0xffffffffffffffffUL /* uint64_t */
-
-/* 7.18.2.2 Limits of minimum-width integer types */
-
-/* minimum values of minimum-width signed integer types */
-#define INT_LEAST8_MIN (-0x7f-1) /* int_least8_t */
-#define INT_LEAST16_MIN (-0x7fff-1) /* int_least16_t */
-#define INT_LEAST32_MIN (-0x7fffffff-1) /* int_least32_t */
-#define INT_LEAST64_MIN (-0x7fffffffffffffffL-1) /* int_least64_t */
-
-/* maximum values of minimum-width signed integer types */
-#define INT_LEAST8_MAX 0x7f /* int_least8_t */
-#define INT_LEAST16_MAX 0x7fff /* int_least16_t */
-#define INT_LEAST32_MAX 0x7fffffff /* int_least32_t */
-#define INT_LEAST64_MAX 0x7fffffffffffffffL /* int_least64_t */
-
-/* maximum values of minimum-width unsigned integer types */
-#define UINT_LEAST8_MAX 0xffU /* uint_least8_t */
-#define UINT_LEAST16_MAX 0xffffU /* uint_least16_t */
-#define UINT_LEAST32_MAX 0xffffffffU /* uint_least32_t */
-#define UINT_LEAST64_MAX 0xffffffffffffffffUL /* uint_least64_t */
-
-/* 7.18.2.3 Limits of fastest minimum-width integer types */
-
-/* minimum values of fastest minimum-width signed integer types */
-#define INT_FAST8_MIN (-0x7fffffff-1) /* int_fast8_t */
-#define INT_FAST16_MIN (-0x7fffffff-1) /* int_fast16_t */
-#define INT_FAST32_MIN (-0x7fffffff-1) /* int_fast32_t */
-#define INT_FAST64_MIN (-0x7fffffffffffffffLL-1) /* int_fast64_t */
-
-/* maximum values of fastest minimum-width signed integer types */
-#define INT_FAST8_MAX 0x7fffffff /* int_fast8_t */
-#define INT_FAST16_MAX 0x7fffffff /* int_fast16_t */
-#define INT_FAST32_MAX 0x7fffffff /* int_fast32_t */
-#define INT_FAST64_MAX 0x7fffffffffffffffLL /* int_fast64_t */
-
-/* maximum values of fastest minimum-width unsigned integer types */
-#define UINT_FAST8_MAX 0xffffffffU /* uint_fast8_t */
-#define UINT_FAST16_MAX 0xffffffffU /* uint_fast16_t */
-#define UINT_FAST32_MAX 0xffffffffU /* uint_fast32_t */
-#define UINT_FAST64_MAX 0xffffffffffffffffULL /* uint_fast64_t */
-
-/* 7.18.2.4 Limits of integer types capable of holding object pointers */
-
-#define INTPTR_MIN (-0x7fffffffffffffffL-1) /* intptr_t */
-#define INTPTR_MAX 0x7fffffffffffffffL /* intptr_t */
-#define UINTPTR_MAX 0xffffffffffffffffUL /* uintptr_t */
-
-/* 7.18.2.5 Limits of greatest-width integer types */
-
-#define INTMAX_MIN (-0x7fffffffffffffffL-1) /* intmax_t */
-#define INTMAX_MAX 0x7fffffffffffffffL /* intmax_t */
-#define UINTMAX_MAX 0xffffffffffffffffUL /* uintmax_t */
-
-
-/*
- * 7.18.3 Limits of other integer types
- */
-
-/* limits of ptrdiff_t */
-#define PTRDIFF_MIN (-0x7fffffffffffffffL-1) /* ptrdiff_t */
-#define PTRDIFF_MAX 0x7fffffffffffffffL /* ptrdiff_t */
-
-/* limits of sig_atomic_t */
-#define SIG_ATOMIC_MIN (-0x7fffffffffffffffL-1) /* sig_atomic_t */
-#define SIG_ATOMIC_MAX 0x7fffffffffffffffL /* sig_atomic_t */
-
-/* limit of size_t */
-#define SIZE_MAX 0xffffffffffffffffUL /* size_t */
-
-#endif /* !_IA64_INT_LIMITS_H_ */
diff --git a/StdLib/Include/Ipf/machine/int_mwgwtypes.h b/StdLib/Include/Ipf/machine/int_mwgwtypes.h
deleted file mode 100644
index 6172c00ee9..0000000000
--- a/StdLib/Include/Ipf/machine/int_mwgwtypes.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/** @file
- Minimum and Greatest Width Integer types.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Portions Copyright (c) 2001 The NetBSD Foundation, Inc.
- All rights reserved.
-
- This code is derived from software contributed to The NetBSD Foundation
- by Klaus Klein.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. All advertising materials mentioning features or use of this software
- must display the following acknowledgement:
- This product includes software developed by the NetBSD
- Foundation, Inc. and its contributors.
- 4. Neither the name of The NetBSD Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: int_mwgwtypes.h,v 1.1 2006/04/07 14:21:18 cherry Exp
-**/
-
-#ifndef _IA64_INT_MWGWTYPES_H_
-#define _IA64_INT_MWGWTYPES_H_
-
-/*
- * 7.18.1 Integer types
- */
-
-/* 7.18.1.2 Minimum-width integer types */
-
-typedef CHAR8 int_least8_t;
-typedef UINT8 uint_least8_t;
-typedef INT16 int_least16_t;
-typedef UINT16 uint_least16_t;
-typedef INT32 int_least32_t;
-typedef UINT32 uint_least32_t;
-typedef INT64 int_least64_t;
-typedef UINT64 uint_least64_t;
-
-/* 7.18.1.3 Fastest minimum-width integer types */
-typedef INT32 int_fast8_t;
-typedef UINT32 uint_fast8_t;
-typedef INT32 int_fast16_t;
-typedef UINT32 uint_fast16_t;
-typedef INT32 int_fast32_t;
-typedef UINT32 uint_fast32_t;
-typedef INT64 int_fast64_t;
-typedef UINT64 uint_fast64_t;
-
-/* 7.18.1.5 Greatest-width integer types */
-
-typedef INT64 intmax_t;
-typedef UINT64 uintmax_t;
-
-#endif /* !_IA64_INT_MWGWTYPES_H_ */
diff --git a/StdLib/Include/Ipf/machine/int_types.h b/StdLib/Include/Ipf/machine/int_types.h
deleted file mode 100644
index a429a389c3..0000000000
--- a/StdLib/Include/Ipf/machine/int_types.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* $NetBSD: int_types.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: @(#)types.h 7.5 (Berkeley) 3/9/91
- */
-
-#ifndef _IA64_INT_TYPES_H_
-#define _IA64_INT_TYPES_H_
-
-/*
- * 7.18.1 Integer types
- */
-
-/* 7.18.1.1 Exact-width integer types */
-
-typedef __signed char __int8_t;
-typedef unsigned char __uint8_t;
-typedef short int __int16_t;
-typedef unsigned short int __uint16_t;
-typedef int __int32_t;
-typedef unsigned int __uint32_t;
-#ifdef __COMPILER_INT64__
-typedef __COMPILER_INT64__ __int64_t;
-typedef __COMPILER_UINT64__ __uint64_t;
-#elif defined(_LP64)
-typedef long int __int64_t;
-typedef unsigned long int __uint64_t;
-#else
-/* LONGLONG */
-typedef long long int __int64_t;
-/* LONGLONG */
-typedef unsigned long long int __uint64_t;
-#endif
-
-#define __BIT_TYPES_DEFINED__
-
-/* 7.18.1.4 Integer types capable of holding object pointers */
-
-#ifdef _LP64
-typedef long int __intptr_t;
-typedef unsigned long int __uintptr_t;
-#else
-typedef int __intptr_t;
-typedef unsigned int __uintptr_t;
-#endif
-
-#endif /* !_IA64_INT_TYPES_H_ */
diff --git a/StdLib/Include/Ipf/machine/intr.h b/StdLib/Include/Ipf/machine/intr.h
deleted file mode 100644
index a7ca5cfcf4..0000000000
--- a/StdLib/Include/Ipf/machine/intr.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* $NetBSD: intr.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/* XXX: cherry: To Be fixed when we switch on interrupts. */
-
-#ifndef _IA64_INTR_H_
-#define _IA64_INTR_H_
-
-#define IPL_NONE 0 /* XXX: Placeholder */
-#define IPL_BIO 0 /* XXX: Placeholder */
-#define IPL_NET 0 /* XXX: Placeholder */
-#define IPL_TTY 0 /* XXX: Placeholder */
-#define IPL_CLOCK 0 /* XXX: Placeholder */
-#define IPL_HIGH 0 /* XXX: Placeholder */
-#define IPL_SERIAL 0 /* XXX: Placeholder */
-#define IPL_SCHED 0 /* XXX: Placeholder */
-#define IPL_VM 0 /* XXX: Placeholder */
-
-#define IPL_SOFTCLOCK 0 /* XXX: Placeholder */
-#define IPL_SOFTNET 0 /* XXX: Placeholder */
-#define IPL_SOFTSERIAL 0 /* XXX: Placeholder */
-
-static __inline int splraise(int dummy) { return 0; }
-static __inline void spllower(int dummy) { }
-
-/*
- * Hardware interrupt masks
- */
-#define splbio() splraise(IPL_BIO)
-#define splnet() splraise(IPL_NET)
-#define spltty() splraise(IPL_TTY)
-#define splaudio() splraise(IPL_AUDIO)
-#define splclock() splraise(IPL_CLOCK)
-#define splstatclock() splclock()
-#define splserial() splraise(IPL_SERIAL)
-#define splipi() splraise(IPL_IPI)
-
-
-/*
- * Miscellaneous
- */
-#define splvm() splraise(IPL_VM)
-#define splhigh() splraise(IPL_HIGH)
-#define spl0() spllower(IPL_NONE)
-#define splsched() splraise(IPL_SCHED)
-#define spllock() splhigh()
-#define splx(x) spllower(x)
-
-/*
- * Software interrupt masks
- *
- * NOTE: spllowersoftclock() is used by hardclock() to lower the priority from
- * clock to softclock before it calls softclock().
- */
-
-#define spllowersoftclock() spllower(IPL_SOFTCLOCK)
-#define splsoftclock() splraise(IPL_SOFTCLOCK)
-#define splsoftnet() splraise(IPL_SOFTNET)
-#define splsoftserial() splraise(IPL_SOFTSERIAL)
-
-#endif /* ! _IA64_INTR_H_ */
diff --git a/StdLib/Include/Ipf/machine/intrcnt.h b/StdLib/Include/Ipf/machine/intrcnt.h
deleted file mode 100644
index 16d91c4ee9..0000000000
--- a/StdLib/Include/Ipf/machine/intrcnt.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* $NetBSD: intrcnt.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 1995, 1996 Carnegie-Mellon University.
- * All rights reserved.
- *
- * Author: Chris G. Demetriou
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
- * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- */
-
-#define INTRCNT_CLOCK 0
-#define INTRCNT_ISA_IRQ (INTRCNT_CLOCK + 1)
-#define INTRCNT_ISA_IRQ_LEN 16
-#define INTRCNT_OTHER_BASE (INTRCNT_ISA_IRQ + INTRCNT_ISA_IRQ_LEN)
-#define INTRCNT_OTHER_LEN 240
-#define INTRCNT_COUNT (INTRCNT_OTHER_BASE + INTRCNT_OTHER_LEN)
-
-/*
- * Maximum name length in intrnames table (including terminating '\0'.
- * Since vmstat(8) assumes a maximum length of 13 (including '\0'), we're
- * pretty much limited to that (unless we don't care about the alignment
- * of the columns :-)
- */
-#define INTRNAME_LEN 13
diff --git a/StdLib/Include/Ipf/machine/limits.h b/StdLib/Include/Ipf/machine/limits.h
deleted file mode 100644
index 311b4bb578..0000000000
--- a/StdLib/Include/Ipf/machine/limits.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* $NetBSD: limits.h,v 1.2 2006/05/14 21:55:38 elad Exp $ */
-
-/*
- * Copyright (c) 1988 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)limits.h 7.2 (Berkeley) 6/28/90
- */
-
-#ifndef _MACHINE_LIMITS_H_
-#define _MACHINE_LIMITS_H_
-
-#define __CHAR_BIT 8 /* number of bits in a char */
-//#define MB_LEN_MAX 32 /* no multibyte characters */
-
-#define __SCHAR_MIN (-128) /* max value for a signed char */
-#define __SCHAR_MAX 127 /* min value for a signed char */
-
-#define __UCHAR_MAX 255 /* max value for an unsigned char */
-//#define CHAR_MAX 0x7f /* max value for a char */
-//#define CHAR_MIN (-0x7f-1) /* min value for a char */
-
-#define __USHRT_MAX 0xffffU /* max value for an unsigned short */
-#define __SHRT_MAX 0x7fff /* max value for a short */
-#define __SHRT_MIN (-0x7fff-1) /* min value for a short */
-
-#define __UINT_MAX 0xffffffffU /* max value for an unsigned int */
-#define __INT_MAX 0x7fffffff /* max value for an int */
-#define __INT_MIN (-0x7fffffff-1) /* min value for an int */
-
-//#define __ULONG_MAX 0xffffffffffffffffUL /* max value for an unsigned long */
-//#define __LONG_MAX 0x7fffffffffffffffL /* max value for a long */
-//#define __LONG_MIN (-0x7fffffffffffffffL-1) /* min value for a long */
-#define __ULONG_MAX __UINT_MAX /* max value for an unsigned long */
-#define __LONG_MAX __INT_MAX /* max value for a long */
-#define __LONG_MIN __INT_MIN /* min value for a long */
-
-
-#define SSIZE_MAX LONG_MAX /* max value for a ssize_t */
-
-#define __ULLONG_MAX 0xffffffffffffffffULL /* max unsigned long long */
-#define __LLONG_MAX 0x7fffffffffffffffLL /* max signed long long */
-#define __LLONG_MIN (-0x7fffffffffffffffLL-1) /* min signed long long */
-
-#define SIZE_T_MAX __ULLONG_MAX /* max value for a size_t */
-
-/* GCC requires that quad constants be written as expressions. */
-#define UQUAD_MAX ((u_quad_t)0-1) /* max value for a uquad_t */
- /* max value for a quad_t */
-#define QUAD_MAX ((quad_t)(UQUAD_MAX >> 1))
-#define QUAD_MIN (-QUAD_MAX-1) /* min value for a quad_t */
-
-
-#define LONG_BIT 32
-#define WORD_BIT 32
-
-/* Intel extensions to <limits.h> for UEFI */
-#define __SHORT_BIT 16
-#define __WCHAR_BIT 16
-#define __INT_BIT 32
-#define __LONG_BIT 32 /* Compiler dependent */
-#define __LONG_LONG_BIT 64
-#define __POINTER_BIT 64
-
-#endif /* _MACHINE_LIMITS_H_ */
diff --git a/StdLib/Include/Ipf/machine/loadfile_machdep.h b/StdLib/Include/Ipf/machine/loadfile_machdep.h
deleted file mode 100644
index 5c2099d304..0000000000
--- a/StdLib/Include/Ipf/machine/loadfile_machdep.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* $NetBSD: loadfile_machdep.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 1998 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Christos Zoulas and Ross Harvey.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#define BOOT_ELF64
-
-#define LOAD_KERNEL (LOAD_ALL & ~LOAD_TEXTA)
-#define COUNT_KERNEL (COUNT_ALL & ~COUNT_TEXTA)
-
-#ifndef MD_LOADSEG
-/* XXX: Multiple unwind sections are ignored, and the last one found returned... Fixme! */
-extern vaddr_t ia64_unwindtab;
-extern vsize_t ia64_unwindtablen;
-#define MD_LOADSEG(phdr) ((phdr)->p_type == PT_IA_64_UNWIND ? ia64_unwindtab = (phdr)->p_vaddr, ia64_unwindtablen = (phdr)->p_filesz, 1 : 0)
-#endif
-
-#ifdef _STANDALONE
-
-/* XXX: cherry: This whole thing is glue between the NetBSD pread/vpbcopy etc. etc
- * and the FreeBSD kern_pread/bzero etc. etc. Needs to be cleaned up
- * after discussion.
- */
-
-#include "bootstrap.h"
-
-#define LOADADDR(a) ((a) + offset)
-#define ALIGNENTRY(a) Error! alpha supports ECOFF and ELF only! /* Fixme: for ia64 */
-#define READ(f, b, c) pread((f), LOADADDR(b), (c))
-#define BCOPY(s, d, c) vpbcopy((s), LOADADDR(d), (c))
-#define BZERO(d, c) pbzero(LOADADDR(d), (c))
-#define WARN(a) (void)(printf a, \
- printf((errno ? ": %s\n" : "\n"), \
- strerror(errno)))
-#define PROGRESS(a) (void) printf a
-#define ALLOC(a) alloc(a)
-#define DEALLOC(a, b) dealloc(a, b)
-#define OKMAGIC(a) Error! ia64 supports ELF only!
-
-
-/* XXX: defines below glues NetBSD conventions with bootstrap.h. */
-
-#define vpbcopy archsw.arch_copyin
-#define pbzero kern_bzero
-#define pread archsw.arch_readin
-
-#else
-
-#define LOADADDR(a) (((u_long)(a)) + offset)
-#define ALIGNENTRY(a) ((u_long)(a))
-#define READ(f, b, c) read((f), (void *)LOADADDR(b), (c))
-#define BCOPY(s, d, c) memcpy((void *)LOADADDR(d), (void *)(s), (c))
-#define BZERO(d, c) memset((void *)LOADADDR(d), 0, (c))
-#define WARN(a) warn a
-#define PROGRESS(a) /* nothing */
-#define ALLOC(a) malloc(a)
-#define DEALLOC(a, b) free(a)
-#define OKMAGIC(a) ((a) == OMAGIC)
-
-ssize_t vread(int, u_long, u_long *, size_t);
-void vcopy(u_long, u_long, u_long *, size_t);
-void vzero(u_long, u_long *, size_t);
-
-#endif
diff --git a/StdLib/Include/Ipf/machine/math.h b/StdLib/Include/Ipf/machine/math.h
deleted file mode 100644
index ddd3922d1b..0000000000
--- a/StdLib/Include/Ipf/machine/math.h
+++ /dev/null
@@ -1,6 +0,0 @@
-/* $NetBSD: math.h,v 1.3 2005/12/11 12:16:25 christos Exp $ */
-
-//#include <x86/math.h>
-
-//#define __HAVE_LONG_DOUBLE
-//#define __HAVE_NANF
diff --git a/StdLib/Include/Ipf/machine/mca_machdep.h b/StdLib/Include/Ipf/machine/mca_machdep.h
deleted file mode 100644
index 48674e1b2e..0000000000
--- a/StdLib/Include/Ipf/machine/mca_machdep.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/* $NetBSD: mca_machdep.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 2002 Marcel Moolenaar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _MACHINE_MCA_H_
-#define _MACHINE_MCA_H_
-
-struct mca_record_header {
- uint64_t rh_seqnr; /* Record id. */
- uint8_t rh_major; /* BCD (=02). */
- uint8_t rh_minor; /* BCD (=00). */
- uint8_t rh_error; /* Error severity. */
-#define MCA_RH_ERROR_RECOVERABLE 0
-#define MCA_RH_ERROR_FATAL 1
-#define MCA_RH_ERROR_CORRECTED 2
- uint8_t rh_flags;
-#define MCA_RH_FLAGS_PLATFORM_ID 0x01 /* Platform_id present. */
- uint32_t rh_length; /* Size including header. */
- uint8_t rh_time[8];
-#define MCA_RH_TIME_SEC 0
-#define MCA_RH_TIME_MIN 1
-#define MCA_RH_TIME_HOUR 2
-#define MCA_RH_TIME_MDAY 4
-#define MCA_RH_TIME_MON 5
-#define MCA_RH_TIME_YEAR 6
-#define MCA_RH_TIME_CENT 7
- struct uuid rh_platform;
-};
-
-struct mca_section_header {
- struct uuid sh_uuid;
- uint8_t sh_major; /* BCD (=02). */
- uint8_t sh_minor; /* BCD (=00). */
- uint8_t sh_flags;
-#define MCA_SH_FLAGS_CORRECTED 0x01 /* Error has been corrected. */
-#define MCA_SH_FLAGS_PROPAGATE 0x02 /* Possible propagation. */
-#define MCA_SH_FLAGS_RESET 0x04 /* Reset device before use. */
-#define MCA_SH_FLAGS_VALID 0x80 /* Flags are valid. */
- uint8_t __reserved;
- uint32_t sh_length; /* Size including header. */
-};
-
-struct mca_cpu_record {
- uint64_t cpu_flags;
-#define MCA_CPU_FLAGS_ERRMAP (1ULL << 0)
-#define MCA_CPU_FLAGS_STATE (1ULL << 1)
-#define MCA_CPU_FLAGS_CR_LID (1ULL << 2)
-#define MCA_CPU_FLAGS_PSI_STRUCT (1ULL << 3)
-#define MCA_CPU_FLAGS_CACHE(x) (((x) >> 4) & 15)
-#define MCA_CPU_FLAGS_TLB(x) (((x) >> 8) & 15)
-#define MCA_CPU_FLAGS_BUS(x) (((x) >> 12) & 15)
-#define MCA_CPU_FLAGS_REG(x) (((x) >> 16) & 15)
-#define MCA_CPU_FLAGS_MS(x) (((x) >> 20) & 15)
-#define MCA_CPU_FLAGS_CPUID (1ULL << 24)
- uint64_t cpu_errmap;
- uint64_t cpu_state;
- uint64_t cpu_cr_lid;
- /* Nx cpu_mod (cache). */
- /* Nx cpu_mod (TLB). */
- /* Nx cpu_mod (bus). */
- /* Nx cpu_mod (reg). */
- /* Nx cpu_mod (MS). */
- /* cpu_cpuid. */
- /* cpu_psi. */
-};
-
-struct mca_cpu_cpuid {
- uint64_t cpuid[6];
-};
-
-struct mca_cpu_mod {
- uint64_t cpu_mod_flags;
-#define MCA_CPU_MOD_FLAGS_INFO (1ULL << 0)
-#define MCA_CPU_MOD_FLAGS_REQID (1ULL << 1)
-#define MCA_CPU_MOD_FLAGS_RSPID (1ULL << 2)
-#define MCA_CPU_MOD_FLAGS_TGTID (1ULL << 3)
-#define MCA_CPU_MOD_FLAGS_IP (1ULL << 4)
- uint64_t cpu_mod_info;
- uint64_t cpu_mod_reqid;
- uint64_t cpu_mod_rspid;
- uint64_t cpu_mod_tgtid;
- uint64_t cpu_mod_ip;
-};
-
-struct mca_cpu_psi {
- uint64_t cpu_psi_flags;
-#define MCA_CPU_PSI_FLAGS_STATE (1ULL << 0)
-#define MCA_CPU_PSI_FLAGS_BR (1ULL << 1)
-#define MCA_CPU_PSI_FLAGS_CR (1ULL << 2)
-#define MCA_CPU_PSI_FLAGS_AR (1ULL << 3)
-#define MCA_CPU_PSI_FLAGS_RR (1ULL << 4)
-#define MCA_CPU_PSI_FLAGS_FR (1ULL << 5)
- uint8_t cpu_psi_state[1024]; /* XXX variable? */
- uint64_t cpu_psi_br[8];
- uint64_t cpu_psi_cr[128]; /* XXX variable? */
- uint64_t cpu_psi_ar[128]; /* XXX variable? */
- uint64_t cpu_psi_rr[8];
- uint64_t cpu_psi_fr[256]; /* 16 bytes per register! */
-};
-
-struct mca_mem_record {
- uint64_t mem_flags;
-#define MCA_MEM_FLAGS_STATUS (1ULL << 0)
-#define MCA_MEM_FLAGS_ADDR (1ULL << 1)
-#define MCA_MEM_FLAGS_ADDRMASK (1ULL << 2)
-#define MCA_MEM_FLAGS_NODE (1ULL << 3)
-#define MCA_MEM_FLAGS_CARD (1ULL << 4)
-#define MCA_MEM_FLAGS_MODULE (1ULL << 5)
-#define MCA_MEM_FLAGS_BANK (1ULL << 6)
-#define MCA_MEM_FLAGS_DEVICE (1ULL << 7)
-#define MCA_MEM_FLAGS_ROW (1ULL << 8)
-#define MCA_MEM_FLAGS_COLUMN (1ULL << 9)
-#define MCA_MEM_FLAGS_BITPOS (1ULL << 10)
-#define MCA_MEM_FLAGS_REQID (1ULL << 11)
-#define MCA_MEM_FLAGS_RSPID (1ULL << 12)
-#define MCA_MEM_FLAGS_TGTID (1ULL << 13)
-#define MCA_MEM_FLAGS_BUSDATA (1ULL << 14)
-#define MCA_MEM_FLAGS_OEM_ID (1ULL << 15)
-#define MCA_MEM_FLAGS_OEM_DATA (1ULL << 16)
- uint64_t mem_status;
- uint64_t mem_addr;
- uint64_t mem_addrmask;
- uint16_t mem_node;
- uint16_t mem_card;
- uint16_t mem_module;
- uint16_t mem_bank;
- uint16_t mem_device;
- uint16_t mem_row;
- uint16_t mem_column;
- uint16_t mem_bitpos;
- uint64_t mem_reqid;
- uint64_t mem_rspid;
- uint64_t mem_tgtid;
- uint64_t mem_busdata;
- struct uuid mem_oem_id;
- uint16_t mem_oem_length; /* Size of OEM data. */
- /* N bytes of OEM platform data. */
-};
-
-struct mca_pcibus_record {
- uint64_t pcibus_flags;
-#define MCA_PCIBUS_FLAGS_STATUS (1ULL << 0)
-#define MCA_PCIBUS_FLAGS_ERROR (1ULL << 1)
-#define MCA_PCIBUS_FLAGS_BUS (1ULL << 2)
-#define MCA_PCIBUS_FLAGS_ADDR (1ULL << 3)
-#define MCA_PCIBUS_FLAGS_DATA (1ULL << 4)
-#define MCA_PCIBUS_FLAGS_CMD (1ULL << 5)
-#define MCA_PCIBUS_FLAGS_REQID (1ULL << 6)
-#define MCA_PCIBUS_FLAGS_RSPID (1ULL << 7)
-#define MCA_PCIBUS_FLAGS_TGTID (1ULL << 8)
-#define MCA_PCIBUS_FLAGS_OEM_ID (1ULL << 9)
-#define MCA_PCIBUS_FLAGS_OEM_DATA (1ULL << 10)
- uint64_t pcibus_status;
- uint16_t pcibus_error;
- uint16_t pcibus_bus;
- uint32_t __reserved;
- uint64_t pcibus_addr;
- uint64_t pcibus_data;
- uint64_t pcibus_cmd;
- uint64_t pcibus_reqid;
- uint64_t pcibus_rspid;
- uint64_t pcibus_tgtid;
- struct uuid pcibus_oem_id;
- uint16_t pcibus_oem_length; /* Size of OEM data. */
- /* N bytes of OEM platform data. */
-};
-
-struct mca_pcidev_record {
- uint64_t pcidev_flags;
-#define MCA_PCIDEV_FLAGS_STATUS (1ULL << 0)
-#define MCA_PCIDEV_FLAGS_INFO (1ULL << 1)
-#define MCA_PCIDEV_FLAGS_REG_MEM (1ULL << 2)
-#define MCA_PCIDEV_FLAGS_REG_IO (1ULL << 3)
-#define MCA_PCIDEV_FLAGS_REG_DATA (1ULL << 4)
-#define MCA_PCIDEV_FLAGS_OEM_DATA (1ULL << 5)
- uint64_t pcidev_status;
- struct {
- uint16_t info_vendor;
- uint16_t info_device;
- uint32_t info_ccfn; /* Class code & funct. nr. */
-#define MCA_PCIDEV_INFO_CLASS(x) ((x) & 0xffffff)
-#define MCA_PCIDEV_INFO_FUNCTION(x) (((x) >> 24) & 0xff)
- uint8_t info_slot;
- uint8_t info_bus;
- uint8_t info_segment;
- uint8_t __res0;
- uint32_t __res1;
- } pcidev_info;
- uint32_t pcidev_reg_mem;
- uint32_t pcidev_reg_io;
- /* Nx pcidev_reg. */
- /* M bytes of OEM platform data. */
-};
-
-struct mca_pcidev_reg {
- uint64_t pcidev_reg_addr;
- uint64_t pcidev_reg_data;
-};
-
-#define MCA_UUID_CPU \
- {0xe429faf1,0x3cb7,0x11d4,0xbc,0xa7,{0x00,0x80,0xc7,0x3c,0x88,0x81}}
-#define MCA_UUID_MEMORY \
- {0xe429faf2,0x3cb7,0x11d4,0xbc,0xa7,{0x00,0x80,0xc7,0x3c,0x88,0x81}}
-#define MCA_UUID_SEL \
- {0xe429faf3,0x3cb7,0x11d4,0xbc,0xa7,{0x00,0x80,0xc7,0x3c,0x88,0x81}}
-#define MCA_UUID_PCI_BUS \
- {0xe429faf4,0x3cb7,0x11d4,0xbc,0xa7,{0x00,0x80,0xc7,0x3c,0x88,0x81}}
-#define MCA_UUID_SMBIOS \
- {0xe429faf5,0x3cb7,0x11d4,0xbc,0xa7,{0x00,0x80,0xc7,0x3c,0x88,0x81}}
-#define MCA_UUID_PCI_DEV \
- {0xe429faf6,0x3cb7,0x11d4,0xbc,0xa7,{0x00,0x80,0xc7,0x3c,0x88,0x81}}
-#define MCA_UUID_GENERIC \
- {0xe429faf7,0x3cb7,0x11d4,0xbc,0xa7,{0x00,0x80,0xc7,0x3c,0x88,0x81}}
-
-#ifdef _KERNEL
-
-void ia64_mca_init(void);
-void ia64_mca_save_state(int);
-
-#endif /* _KERNEL */
-
-#endif /* _MACHINE_MCA_H_ */
diff --git a/StdLib/Include/Ipf/machine/md_var.h b/StdLib/Include/Ipf/machine/md_var.h
deleted file mode 100644
index 1f5a75d3da..0000000000
--- a/StdLib/Include/Ipf/machine/md_var.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* $NetBSD: md_var.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 1998 Doug Rabson
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _IA64_MD_VAR_H_
-#define _IA64_MD_VAR_H_
-
-/*
- * Miscellaneous machine-dependent declarations.
- */
-
-struct ia64_fdesc {
- uint64_t func;
- uint64_t gp;
-};
-
-#define FDESC_FUNC(fn) (((struct ia64_fdesc *) fn)->func)
-#define FDESC_GP(fn) (((struct ia64_fdesc *) fn)->gp)
-
-/* Convenience macros to decompose CFM & ar.pfs. */
-#define IA64_CFM_SOF(x) ((x) & 0x7f)
-#define IA64_CFM_SOL(x) (((x) >> 7) & 0x7f)
-#define IA64_CFM_SOR(x) (((x) >> 14) & 0x0f)
-#define IA64_CFM_RRB_GR(x) (((x) >> 18) & 0x7f)
-#define IA64_CFM_RRB_FR(x) (((x) >> 25) & 0x7f)
-#define IA64_CFM_RRB_PR(x) (((x) >> 32) & 0x3f)
-
-#define IA64_RNATINDEX(x) (((x) & 0x1f8) >> 3)
-
-#ifdef _KERNEL
-
-extern char sigcode[];
-extern char esigcode[];
-extern int szsigcode;
-extern long Maxmem;
-extern vaddr_t kernstart, kernend;
-
-
-struct _special;
-struct fpreg;
-struct reg;
-struct thread;
-struct trapframe;
-
-void busdma_swi(void);
-int copyout_regstack(struct thread *, uint64_t *, uint64_t *);
-void cpu_mp_add(u_int, u_int, u_int);
-int do_ast(struct trapframe *);
-void ia32_trap(int, struct trapframe *);
-int ia64_count_cpus(void);
-void ia64_flush_dirty(struct thread *, struct _special *);
-uint64_t ia64_get_hcdp(void);
-int ia64_highfp_drop(struct thread *);
-int ia64_highfp_save(struct thread *);
-void ia64_init(void);
-void ia64_probe_sapics(void);
-int interrupt(uint64_t, struct trapframe *);
-void map_gateway_page(void);
-void map_pal_code(void);
-void os_boot_rendez(void);
-void os_mca(void);
-int syscall(struct trapframe *);
-void trap(int, struct trapframe *);
-void trap_panic(int, struct trapframe *);
-int unaligned_fixup(struct trapframe *, struct thread *);
-
-#endif /* _KERNEL */
-
-#endif /* !_IA64_MD_VAR_H_ */
diff --git a/StdLib/Include/Ipf/machine/pal.h b/StdLib/Include/Ipf/machine/pal.h
deleted file mode 100644
index 4a76d62f52..0000000000
--- a/StdLib/Include/Ipf/machine/pal.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* $NetBSD: pal.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 2000 Doug Rabson
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _MACHINE_PAL_H_
-#define _MACHINE_PAL_H_
-
-/*
- * Architected static calling convention procedures.
- */
-#define PAL_CACHE_FLUSH 1
-#define PAL_CACHE_INFO 2
-#define PAL_CACHE_INIT 3
-#define PAL_CACHE_SUMMARY 4
-#define PAL_MEM_ATTRIB 5
-#define PAL_PTCE_INFO 6
-#define PAL_VM_INFO 7
-#define PAL_VM_SUMMARY 8
-#define PAL_BUS_GET_FEATURES 9
-#define PAL_BUS_SET_FEATURES 10
-#define PAL_DEBUG_INFO 11
-#define PAL_FIXED_ADDR 12
-#define PAL_FREQ_BASE 13
-#define PAL_FREQ_RATIOS 14
-#define PAL_PERF_MON_INFO 15
-#define PAL_PLATFORM_ADDR 16
-#define PAL_PROC_GET_FEATURE 17
-#define PAL_PROC_SET_FEATURE 18
-#define PAL_RSE_INFO 19
-#define PAL_VERSION 20
-#define PAL_MC_CLEAR_LOG 21
-#define PAL_MC_DRAIN 22
-#define PAL_MC_DYNAMIC_STATE 24
-#define PAL_MC_ERROR_INFO 25
-#define PAL_MC_EXPECTED 23
-#define PAL_MC_REGISTER_MEM 27
-#define PAL_MC_RESUME 26
-#define PAL_HALT 28
-#define PAL_HALT_LIGHT 29
-#define PAL_COPY_INFO 30
-#define PAL_CACHE_LINE_INIT 31
-#define PAL_PMI_ENTRYPOINT 32
-#define PAL_ENTER_IA_32_ENV 33
-#define PAL_VM_PAGE_SIZE 34
-#define PAL_MEM_FOR_TEST 37
-#define PAL_CACHE_PROT_INFO 38
-#define PAL_REGISTER_INFO 39
-#define PAL_SHUTDOWN 40
-#define PAL_PREFETCH_VISIBILITY 41
-
-/*
- * Architected stacked calling convention procedures.
- */
-#define PAL_COPY_PAL 256
-#define PAL_HALT_INFO 257
-#define PAL_TEST_PROC 258
-#define PAL_CACHE_READ 259
-#define PAL_CACHE_WRITE 260
-#define PAL_VM_TR_READ 261
-
-/*
- * Default physical address of the Processor Interrupt Block (PIB).
- * See also: IA-64 SDM, rev 1.1, volume 2, page 5-31.
- */
-#define PAL_PIB_DEFAULT_ADDR 0x00000000FEE00000L
-
-struct ia64_pal_result {
- int64_t pal_status;
- u_int64_t pal_result[3];
-};
-
-extern struct ia64_pal_result
- ia64_call_pal_static(u_int64_t proc, u_int64_t arg1,
- u_int64_t arg2, u_int64_t arg3);
-extern struct ia64_pal_result
- ia64_call_pal_static_physical(u_int64_t proc, u_int64_t arg1,
- u_int64_t arg2, u_int64_t arg3);
-extern struct ia64_pal_result
- ia64_call_pal_stacked(u_int64_t proc, u_int64_t arg1,
- u_int64_t arg2, u_int64_t arg3);
-extern struct ia64_pal_result
- ia64_call_pal_stacked_physical(u_int64_t proc, u_int64_t arg1,
- u_int64_t arg2, u_int64_t arg3);
-
-#endif /* _MACHINE_PAL_H_ */
diff --git a/StdLib/Include/Ipf/machine/param.h b/StdLib/Include/Ipf/machine/param.h
deleted file mode 100644
index 4675804ce9..0000000000
--- a/StdLib/Include/Ipf/machine/param.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/** @file
- Machine dependent constants for Intel Itanium Architecture(IPF).
-
- Copyright (c) 2010-2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)param.h 5.8 (Berkeley) 6/28/91
- * $NetBSD: param.h,v 1.2 2006/08/28 13:43:35 yamt Exp
- */
-#ifndef _IA64_PARAM_H_
-#define _IA64_PARAM_H_
-
-#define _MACHINE ia64
-#define MACHINE "ia64"
-#define _MACHINE_ARCH ia64
-#define MACHINE_ARCH "ia64"
-#define MID_MACHINE MID_IA64
-
-#ifdef SMP
-#define MAXCPU 512
-#else
-#define MAXCPU 1
-#endif
-
-#define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */
-#define DEV_BSIZE (1<<DEV_BSHIFT)
-#define BLKDEV_IOSIZE 2048
-
-#ifndef MAXPHYS
-#define MAXPHYS (64 * 1024) /* max raw I/O transfer size */
-#endif
-
-#define UPAGES 4
-#define USPACE (UPAGES * NBPG) /* total size of u-area */
-
-#ifndef MSGBUFSIZE
-#define MSGBUFSIZE NBPG /* default message buffer size */
-#endif
-
-#ifndef KSTACK_PAGES
-#define KSTACK_PAGES 4 /* pages of kernel stack */
-#endif
-#define KSTACK_GUARD_PAGES 0 /* pages of kstack guard; 0 disables */
-
-/*
- * Round p (pointer or byte index) up to a correctly-aligned value
- * for all data types (int, long, ...). The result is u_int and
- * must be cast to any desired pointer type.
- *
- * ALIGNED_POINTER is a boolean macro that checks whether an address
- * is valid to fetch data elements of type t from on this architecture.
- * This does not reflect the optimal alignment, just the possibility
- * (within reasonable limits).
- *
- */
-
-#define ALIGNBYTES 15
-#define ALIGN(p) (((UINT64)(p) + ALIGNBYTES) &~ ALIGNBYTES)
-#define ALIGNED_POINTER(p,t) ((((UINT64)(p)) & (sizeof(t)-1)) == 0)
-
-#define ALIGNBYTES32 (sizeof(INT32) - 1)
-#define ALIGN32(p) (((UINT64)(p) + ALIGNBYTES32) &~ALIGNBYTES32)
-
-#define PGSHIFT 14 /* LOG2(NBPG) */
-#define NBPG (1 << PGSHIFT) /* bytes/page */
-#define PGOFSET (NBPG-1) /* byte offset into page */
-#define NPTEPG (NBPG/(sizeof (pt_entry_t)))
-/*
- * Constants related to network buffer management.
- * MCLBYTES must be no larger than NBPG (the software page size), and,
- * on machines that exchange pages of input or output buffers with mbuf
- * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple
- * of the hardware page size.
- */
-#define MSIZE 256 /* size of an mbuf */
-
-#ifndef MCLSHIFT
- #define MCLSHIFT 11 /* convert bytes to m_buf clusters */
- /* 2K cluster can hold Ether frame */
-#endif /* MCLSHIFT */
-
-#define MCLBYTES (1 << MCLSHIFT) /* size of a m_buf cluster */
-
-#ifdef GATEWAY
- #define NMBCLUSTERS 2048 /* map size, max cluster allocation */
-#else
- #define NMBCLUSTERS 1024 /* map size, max cluster allocation */
-#endif
-
-/*
- * Minimum and maximum sizes of the kernel malloc arena in PAGE_SIZE-sized
- * logical pages.
- */
-#define NKMEMPAGES_MIN_DEFAULT ((12 * 1024 * 1024) >> PAGE_SHIFT)
-#define NKMEMPAGES_MAX_DEFAULT ((128 * 1024 * 1024) >> PAGE_SHIFT)
-
-/*
- * Mach derived conversion macros
- */
-
-#define ia64_round_page(x) ((((EFI_ULONG_T)(x)) + NBPG - 1) & ~(NBPG - 1))
-#define ia64_trunc_page(x) ((EFI_ULONG_T)(x) & ~(NBPG - 1))
-
-#define ia64_btop(x) ((EFI_ULONG_T)(x) >> PGSHIFT)
-#define ia64_ptob(x) ((EFI_ULONG_T)(x) << PGSHIFT)
-
-#endif /* _IA64_PARAM_H_ */
diff --git a/StdLib/Include/Ipf/machine/pcb.h b/StdLib/Include/Ipf/machine/pcb.h
deleted file mode 100644
index 6158e29f93..0000000000
--- a/StdLib/Include/Ipf/machine/pcb.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* $NetBSD: pcb.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 2003,2004 Marcel Moolenaar
- * Copyright (c) 2000 Doug Rabson
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/ia64/include/pcb.h,v 1.16 2004/08/16 19:05:08 marcel Exp $
- */
-
-#ifndef _IA64_PCB_H_
-#define _IA64_PCB_H_
-
-#include <machine/_regset.h>
-#include <sys/lock.h>
-
-/*
- * PCB: process control block
- */
-struct pmap;
-struct pcb {
- struct _special pcb_special;
- struct _callee_saved pcb_preserved;
- struct _callee_saved_fp pcb_preserved_fp;
- struct _high_fp pcb_high_fp;
- struct pcpu *pcb_fpcpu;
- struct simplelock pcb_fpcpu_slock;
-
-
- /* IA32 specific registers. */
- uint64_t pcb_ia32_cflg;
- uint64_t pcb_ia32_eflag;
- uint64_t pcb_ia32_fcr;
- uint64_t pcb_ia32_fdr;
- uint64_t pcb_ia32_fir;
- uint64_t pcb_ia32_fsr;
-
- uint64_t pcb_onfault; /* for copy faults */
- // struct pmap *pcb_current_pmap;
-};
-
-#ifdef _KERNEL
-
-#define savectx(p) swapctx(p, NULL)
-
-struct trapframe;
-
-void makectx(struct trapframe *, struct pcb *);
-/*void restorectx(struct pcb *) __dead2;*/
-int swapctx(struct pcb *old, struct pcb *new);
-
-void ia32_restorectx(struct pcb *);
-void ia32_savectx(struct pcb *);
-
-#endif
-
-#endif /* _IA64_PCB_H_ */
diff --git a/StdLib/Include/Ipf/machine/pmap.h b/StdLib/Include/Ipf/machine/pmap.h
deleted file mode 100644
index 04b78a3e60..0000000000
--- a/StdLib/Include/Ipf/machine/pmap.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*-
- * Copyright (c) 1998, 1999, 2000, 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
- * NASA Ames Research Center and by Chris G. Demetriou.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*-
- * Copyright (c) 1991 Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and William Jolitz of UUNET Technologies Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * Derived from hp300 version by Mike Hibler, this version by William
- * Jolitz uses a recursive map [a pde points to the page directory] to
- * map the page tables using the pagetables themselves. This is done to
- * reduce the impact on kernel virtual memory for lots of sparse address
- * space, and to reduce the cost of memory to each process.
- *
- * from: hp300: @(#)pmap.h 7.2 (Berkeley) 12/16/90
- * from: @(#)pmap.h 7.4 (Berkeley) 5/12/91
- * from: i386 pmap.h,v 1.54 1997/11/20 19:30:35 bde Exp
- * $FreeBSD: src/sys/ia64/include/pmap.h,v 1.25 2005/09/03 23:53:50 marcel Exp $
- */
-
-#ifndef _PMAP_MACHINE_
-#define _PMAP_MACHINE_
-
-#include <sys/lock.h>
-
-paddr_t vtophys(vaddr_t);
-
-struct pv_entry; /* Forward declaration. */
-
-struct pmap {
- TAILQ_ENTRY(pmap) pm_list; /* list of all pmaps */
- TAILQ_HEAD(,pv_entry) pm_pvlist; /* list of mappings in pmap */
- int pm_count; /* pmap reference count */
- struct simplelock pm_slock; /* lock on pmap */
- u_int32_t pm_rid[5]; /* base RID for pmap */
- int pm_active; /* active flag */
- struct pmap_statistics pm_stats; /* pmap statistics */
- unsigned long pm_cpus; /* mask of CPUs using pmap */
-
-};
-
-typedef struct pmap *pmap_t;
-
-/*
- * For each vm_page_t, there is a list of all currently valid virtual
- * mappings of that page. An entry is a pv_entry_t, the list is pv_pvlist.
- */
-typedef struct pv_entry {
- pmap_t pv_pmap; /* pmap where mapping lies */
- vaddr_t pv_va; /* virtual address for mapping */
- TAILQ_ENTRY(pv_entry) pv_list;
- TAILQ_ENTRY(pv_entry) pv_plist;
-} *pv_entry_t;
-
-/* pvh_attrs */
-#define PGA_MODIFIED 0x01 /* modified */
-#define PGA_REFERENCED 0x02 /* referenced */
-
-
-extern struct pmap kernel_pmap_store;
-
-#define pmap_kernel() (&kernel_pmap_store)
-
-#define pmap_resident_count(pmap) ((pmap)->pm_stats.resident_count)
-#define pmap_wired_count(pmap) ((pmap)->pm_stats.wired_count)
-
-#define pmap_copy(dp, sp, da, l, sa) /* nothing */
-#define pmap_update(pmap) /* nothing (yet) */
-
-void pmap_bootstrap(void);
-
-#define pmap_is_referenced(pg) \
- (((pg)->mdpage.pvh_attrs & PGA_REFERENCED) != 0)
-#define pmap_is_modified(pg) \
- (((pg)->mdpage.pvh_attrs & PGA_MODIFIED) != 0)
-
-
-#define PMAP_STEAL_MEMORY /* enable pmap_steal_memory() */
-
-/*
- * Alternate mapping hooks for pool pages. Avoids thrashing the TLB.
- */
-#define PMAP_MAP_POOLPAGE(pa) IA64_PHYS_TO_RR7((pa))
-#define PMAP_UNMAP_POOLPAGE(va) IA64_RR_MASK((va))
-
-/*
- * Macros for locking pmap structures.
- *
- * Note that we if we access the kernel pmap in interrupt context, it
- * is only to update statistics. Since stats are updated using atomic
- * operations, locking the kernel pmap is not necessary. Therefore,
- * it is not necessary to block interrupts when locking pmap strucutres.
- */
-#define PMAP_LOCK(pmap) simple_lock(&(pmap)->pm_slock)
-#define PMAP_UNLOCK(pmap) simple_unlock(&(pmap)->pm_slock)
-
-
-#define PMAP_VHPT_LOG2SIZE 16
-
-
-#endif /* _PMAP_MACHINE_ */
diff --git a/StdLib/Include/Ipf/machine/pte.h b/StdLib/Include/Ipf/machine/pte.h
deleted file mode 100644
index aa4fe017d7..0000000000
--- a/StdLib/Include/Ipf/machine/pte.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/* $NetBSD: pte.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 2001 Doug Rabson
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _MACHINE_PTE_H_
-#define _MACHINE_PTE_H_
-
-#define PTE_PRESENT 0x0000000000000001
-#define PTE__RV1_ 0x0000000000000002
-#define PTE_MA_MASK 0x000000000000001C
-#define PTE_MA_WB 0x0000000000000000
-#define PTE_MA_UC 0x0000000000000010
-#define PTE_MA_UCE 0x0000000000000014
-#define PTE_MA_WC 0x0000000000000018
-#define PTE_MA_NATPAGE 0x000000000000001C
-#define PTE_ACCESSED 0x0000000000000020
-#define PTE_DIRTY 0x0000000000000040
-#define PTE_PL_MASK 0x0000000000000180
-#define PTE_PL_KERN 0x0000000000000000
-#define PTE_PL_USER 0x0000000000000180
-#define PTE_AR_MASK 0x0000000000000E00
-
-#define PTE_AR_R 0x0000000000000000
-#define PTE_AR_RX 0x0000000000000200
-#define PTE_AR_RW 0x0000000000000400
-#define PTE_AR_RWX 0x0000000000000600
-#define PTE_AR_R_RW 0x0000000000000800
-#define PTE_AR_RX_RWX 0x0000000000000A00
-#define PTE_AR_RWX_RW 0x0000000000000C00
-#define PTE_AR_X_RX 0x0000000000000E00
-#define PTE_PPN_MASK 0x0003FFFFFFFFF000
-#define PTE__RV2_ 0x000C000000000000
-#define PTE_ED 0x0010000000000000
-#define PTE_IG_MASK 0xFFE0000000000000
-#define PTE_WIRED 0x0020000000000000
-#define PTE_MANAGED 0x0040000000000000
-#define PTE_PROT_MASK 0x0700000000000000
-
-#define ITIR__RV1_ 0x0000000000000003
-#define ITIR_PS_MASK 0x00000000000000FC
-#define ITIR_KEY_MASK 0x00000000FFFFFF00
-#define ITIR__RV2_ 0xFFFFFFFF00000000
-
-#ifndef _LOCORE
-
-typedef uint64_t pt_entry_t;
-
-static __inline pt_entry_t
-pte_atomic_clear(pt_entry_t *ptep, uint64_t val)
-{
- return (atomic_clear_64(ptep, val));
-}
-
-static __inline pt_entry_t
-pte_atomic_set(pt_entry_t *ptep, uint64_t val)
-{
- return (atomic_set_64(ptep, val));
-}
-
-/*
- * A long-format VHPT entry.
- */
-struct ia64_lpte {
- pt_entry_t pte;
- uint64_t itir;
- uint64_t tag; /* includes ti */
- uint64_t chain; /* pa of collision chain */
-};
-
-
-/*
- * Layout of rr[x].
- */
-struct ia64_rr {
- uint64_t rr_ve :1; /* bit 0 */
- uint64_t __rv1__ :1; /* bit 1 */
- uint64_t rr_ps :6; /* bits 2..7 */
- uint64_t rr_rid :24; /* bits 8..31 */
- uint64_t __rv2__ :32; /* bits 32..63 */
-};
-
-#endif /* !LOCORE */
-
-#endif /* !_MACHINE_PTE_H_ */
diff --git a/StdLib/Include/Ipf/machine/ptrace.h b/StdLib/Include/Ipf/machine/ptrace.h
deleted file mode 100644
index 1f29a8394c..0000000000
--- a/StdLib/Include/Ipf/machine/ptrace.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* $NetBSD: ptrace.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*
- * Copyright (c) 1994 Christopher G. Demetriou
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Christopher G. Demetriou.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * IA64 dependent ptrace definitions.
- */
-#define PT_STEP (PT_FIRSTMACH + 0)
-#define PT_GETREGS (PT_FIRSTMACH + 1)
-#define PT_SETREGS (PT_FIRSTMACH + 2)
-#define PT_GETFPREGS (PT_FIRSTMACH + 3)
-#define PT_SETFPREGS (PT_FIRSTMACH + 4)
diff --git a/StdLib/Include/Ipf/machine/reg.h b/StdLib/Include/Ipf/machine/reg.h
deleted file mode 100644
index 4aa811ab33..0000000000
--- a/StdLib/Include/Ipf/machine/reg.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* $NetBSD: reg.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 2000 Doug Rabson
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _IA64_REG_H_
-#define _IA64_REG_H_
-
-#include <machine/_regset.h>
-
-struct reg {
- struct _special r_special;
- struct _callee_saved r_preserved;
- struct _caller_saved r_scratch;
-};
-
-struct fpreg {
- struct _callee_saved_fp fpr_preserved;
- struct _caller_saved_fp fpr_scratch;
- struct _high_fp fpr_high;
-};
-
-struct dbreg {
- unsigned long dbr_data[8];
- unsigned long dbr_inst[8];
-};
-
-#endif /* _IA64_REG_H_ */
diff --git a/StdLib/Include/Ipf/machine/sal.h b/StdLib/Include/Ipf/machine/sal.h
deleted file mode 100644
index f7b244ceb9..0000000000
--- a/StdLib/Include/Ipf/machine/sal.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/* $NetBSD: sal.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 2001 Doug Rabson
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _MACHINE_SAL_H_
-#define _MACHINE_SAL_H_
-
-struct sal_system_table {
- char sal_signature[4];
-#define SAL_SIGNATURE "SST_"
- u_int32_t sal_length;
- u_int8_t sal_rev[2];
- u_int16_t sal_entry_count;
- u_int8_t sal_checksum;
- u_int8_t sal_reserved1[7];
- u_int8_t sal_a_version[2];
- u_int8_t sal_b_version[2];
- char sal_oem_id[32];
- char sal_product_id[32];
- u_int8_t sal_reserved2[8];
-};
-
-struct sal_entrypoint_descriptor {
- u_int8_t sale_type; /* == 0 */
- u_int8_t sale_reserved1[7];
- u_int64_t sale_pal_proc;
- u_int64_t sale_sal_proc;
- u_int64_t sale_sal_gp;
- u_int8_t sale_reserved2[16];
-};
-
-struct sal_memory_descriptor {
- u_int8_t sale_type; /* == 1 */
- u_int8_t sale_need_virtual;
- u_int8_t sale_current_attribute;
- u_int8_t sale_access_rights;
- u_int8_t sale_supported_attributes;
- u_int8_t sale_reserved1;
- u_int8_t sale_memory_type[2];
- u_int64_t sale_physical_address;
- u_int32_t sale_length;
- u_int8_t sale_reserved2[12];
-};
-
-struct sal_platform_descriptor {
- u_int8_t sale_type; /* == 2 */
- u_int8_t sale_features;
- u_int8_t sale_reserved[14];
-};
-
-struct sal_tr_descriptor {
- u_int8_t sale_type; /* == 3 */
- u_int8_t sale_register_type;
- u_int8_t sale_register_number;
- u_int8_t sale_reserved1[5];
- u_int64_t sale_virtual_address;
- u_int64_t sale_page_size;
- u_int8_t sale_reserved2[8];
-};
-
-struct sal_ptc_cache_descriptor {
- u_int8_t sale_type; /* == 4 */
- u_int8_t sale_reserved[3];
- u_int32_t sale_domains;
- u_int64_t sale_address;
-};
-
-struct sal_ap_wakeup_descriptor {
- u_int8_t sale_type; /* == 5 */
- u_int8_t sale_mechanism;
- u_int8_t sale_reserved[6];
- u_int64_t sale_vector;
-};
-
-/*
- * SAL Procedure numbers.
- */
-
-#define SAL_SET_VECTORS 0x01000000
-#define SAL_GET_STATE_INFO 0x01000001
-#define SAL_GET_STATE_INFO_SIZE 0x01000002
-#define SAL_CLEAR_STATE_INFO 0x01000003
-#define SAL_MC_RENDEZ 0x01000004
-#define SAL_MC_SET_PARAMS 0x01000005
-#define SAL_REGISTER_PHYSICAL_ADDR 0x01000006
-#define SAL_CACHE_FLUSH 0x01000008
-#define SAL_CACHE_INIT 0x01000009
-#define SAL_PCI_CONFIG_READ 0x01000010
-#define SAL_PCI_CONFIG_WRITE 0x01000011
-#define SAL_FREQ_BASE 0x01000012
-#define SAL_UPDATE_PAL 0x01000020
-
-/* SAL_SET_VECTORS event handler types */
-#define SAL_OS_MCA 0
-#define SAL_OS_INIT 1
-#define SAL_OS_BOOT_RENDEZ 2
-
-/* SAL_GET_STATE_INFO, SAL_GET_STATE_INFO_SIZE types */
-#define SAL_INFO_MCA 0
-#define SAL_INFO_INIT 1
-#define SAL_INFO_CMC 2
-#define SAL_INFO_CPE 3
-#define SAL_INFO_TYPES 4 /* number of types we know about */
-
-struct ia64_sal_result {
- int64_t sal_status;
- u_int64_t sal_result[3];
-};
-
-typedef struct ia64_sal_result sal_entry_t
- (u_int64_t, u_int64_t, u_int64_t, u_int64_t,
- u_int64_t, u_int64_t, u_int64_t, u_int64_t);
-
-extern sal_entry_t *ia64_sal_entry;
-
-extern void ia64_sal_init(void);
-
-#endif /* _MACHINE_SAL_H_ */
diff --git a/StdLib/Include/Ipf/machine/setjmp.h b/StdLib/Include/Ipf/machine/setjmp.h
deleted file mode 100644
index 34b54efe65..0000000000
--- a/StdLib/Include/Ipf/machine/setjmp.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* $NetBSD: setjmp.h,v 1.2 2006/09/10 21:16:56 cherry Exp $ */
-
-/*-
- * Copyright (c) 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and
- * its contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/ia64/include/setjmp.h,v 1.12 2003/07/26 08:03:43 marcel Exp $
- */
-
-#ifndef _MACHINE_SETJMP_H_
-#define _MACHINE_SETJMP_H_
-
-#include <sys/cdefs.h>
-
-#define JMPBUF_ADDR_OF(buf, item) ((unsigned long)((char *)buf + item))
-
-#define J_UNAT 0
-#define J_NATS 0x8
-#define J_PFS 0x10
-#define J_BSP 0x18
-#define J_RNAT 0x20
-#define J_PREDS 0x28
-#define J_LC 0x30
-#define J_R4 0x38
-#define J_R5 0x40
-#define J_R6 0x48
-#define J_R7 0x50
-#define J_SP 0x58
-#define J_F2 0x60
-#define J_F3 0x70
-#define J_F4 0x80
-#define J_F5 0x90
-#define J_F16 0xa0
-#define J_F17 0xb0
-#define J_F18 0xc0
-#define J_F19 0xd0
-#define J_F20 0xe0
-#define J_F21 0xf0
-#define J_F22 0x100
-#define J_F23 0x110
-#define J_F24 0x120
-#define J_F25 0x130
-#define J_F26 0x140
-#define J_F27 0x150
-#define J_F28 0x160
-#define J_F29 0x170
-#define J_F30 0x180
-#define J_F31 0x190
-#define J_FPSR 0x1a0
-#define J_B0 0x1a8
-#define J_B1 0x1b0
-#define J_B2 0x1b8
-#define J_B3 0x1c0
-#define J_B4 0x1c8
-#define J_B5 0x1d0
-#define J_SIGMASK 0x1d8
-#define J_SIGSET 0x1e0
-
-#define _JBLEN 0x200 /* Size in long XXX: Set to sizeof(mcontext_t)/sizeof(long) */
-
-#ifdef _KERNEL
-#ifdef CTASSERT
-CTASSERT(sizeof(struct _jmp_buf) == 512);
-#endif
-#endif
-
-#endif /* !_MACHINE_SETJMP_H_ */
diff --git a/StdLib/Include/Ipf/machine/signal.h b/StdLib/Include/Ipf/machine/signal.h
deleted file mode 100644
index bd9b92d046..0000000000
--- a/StdLib/Include/Ipf/machine/signal.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
-Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-This program and the accompanying materials are licensed and made available under
-the terms and conditions of the BSD License that accompanies this distribution.
-The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php.
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#ifndef _MACHINE_SIGNAL_H
-#define _MACHINE_SIGNAL_H
-#include <sys/EfiCdefs.h>
-
-/** The type sig_atomic_t is the (possibly volatile-qualified) integer type of
- an object that can be accessed as an atomic entity, even in the presence
- of asynchronous interrupts.
-**/
-typedef INTN sig_atomic_t;
-
-#endif /* _MACHINE_SIGNAL_H */
diff --git a/StdLib/Include/Ipf/machine/smp.h b/StdLib/Include/Ipf/machine/smp.h
deleted file mode 100644
index d96346b703..0000000000
--- a/StdLib/Include/Ipf/machine/smp.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * $FreeBSD: src/sys/ia64/include/smp.h,v 1.10 2005/08/06 20:28:19 marcel Exp $
- */
-#ifndef _MACHINE_SMP_H_
-#define _MACHINE_SMP_H_
-
-#ifdef _KERNEL
-
-/*
- * Interprocessor interrupts for SMP. The following values are indices
- * into the IPI vector table. The SAL gives us the vector used for AP
- * wake-up. We base the other vectors on that. Keep IPI_AP_WAKEUP at
- * index 0 and IPI_MCA_RENDEZ at index 1. See sal.c for details.
- */
-/* Architecture specific IPIs. */
-#define IPI_AP_WAKEUP 0
-#define IPI_HIGH_FP 1
-#define IPI_MCA_CMCV 2
-#define IPI_MCA_RENDEZ 3
-#define IPI_TEST 4
-/* Machine independent IPIs. */
-#define IPI_AST 5
-#define IPI_RENDEZVOUS 6
-#define IPI_STOP 7
-
-#define IPI_COUNT 8
-
-#ifndef LOCORE
-
-extern int ipi_vector[];
-
-void ipi_all(int ipi);
-void ipi_all_but_self(int ipi);
-void ipi_selected(u_int64_t cpus, int ipi);
-void ipi_self(int ipi);
-void ipi_send(u_int64_t lid, int ipi);
-
-#endif /* !LOCORE */
-#endif /* _KERNEL */
-#endif /* !_MACHINE_SMP_H */
diff --git a/StdLib/Include/Ipf/machine/ssc.h b/StdLib/Include/Ipf/machine/ssc.h
deleted file mode 100644
index ed1ae172fc..0000000000
--- a/StdLib/Include/Ipf/machine/ssc.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* $NetBSD: ssc.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-#define SSC_CONSOLE_INIT 20
-#define SSC_GETCHAR 21
-#define SSC_PUTCHAR 31
-#define SSC_OPEN 50
-#define SSC_CLOSE 51
-#define SSC_READ 52
-#define SSC_WRITE 53
-#define SSC_GET_COMPLETION 54
-#define SSC_WAIT_COMPLETION 55
-#define SSC_GET_RTC 65
-#define SSC_EXIT 66
-#define SSC_LOAD_SYMBOLS 69
-#define SSC_SAL_SET_VECTORS 120
-
-u_int64_t
-ssc(u_int64_t in0, u_int64_t in1, u_int64_t in2, u_int64_t in3, int which);
diff --git a/StdLib/Include/Ipf/machine/stdarg.h b/StdLib/Include/Ipf/machine/stdarg.h
deleted file mode 100644
index 96c1a4128c..0000000000
--- a/StdLib/Include/Ipf/machine/stdarg.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* $NetBSD: stdarg.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 1991, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)stdarg.h 8.1 (Berkeley) 6/10/93
- */
-
-#ifndef _IA64_STDARG_H_
-#define _IA64_STDARG_H_
-
-#include <machine/ansi.h>
-#include <sys/featuretest.h>
-
-typedef _BSD_VA_LIST_ va_list;
-
-#ifdef __lint__
-#define __builtin_next_arg(t) ((t) ? 0 : 0)
-#define __builtin_stdarg_start(a, l) ((a) = (va_list)(void *)&(l))
-#define __builtin_va_arg(a, t) ((a) ? (t) 0 : (t) 0)
-#define __builtin_va_end(a) /* nothing */
-#define __builtin_va_copy(d, s) ((d) = (s))
-#endif
-
-#define va_start(ap, last) __builtin_stdarg_start((ap), (last))
-#define va_arg __builtin_va_arg
-#define va_end(ap) __builtin_va_end(ap)
-#define __va_copy(dest, src) __builtin_va_copy((dest), (src))
-
-#if !defined(_ANSI_SOURCE) && \
- (defined(_ISOC99_SOURCE) || (__STDC_VERSION__ - 0) >= 199901L || \
- defined(_NETBSD_SOURCE))
-#define va_copy(dest, src) __va_copy((dest), (src))
-#endif
-
-#endif /* !_IA64_STDARG_H_ */
diff --git a/StdLib/Include/Ipf/machine/types.h b/StdLib/Include/Ipf/machine/types.h
deleted file mode 100644
index 206c4e4d12..0000000000
--- a/StdLib/Include/Ipf/machine/types.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* $NetBSD: types.h,v 1.2 2006/09/10 21:30:14 gdamore Exp $ */
-
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)types.h 7.5 (Berkeley) 3/9/91
- */
-
-#ifndef _MACHTYPES_H_
-#define _MACHTYPES_H_
-#include <sys/EfiCdefs.h>
-#include <sys/featuretest.h>
-#include <machine/int_types.h>
-
-/* Handle the long and unsigned long data types which EFI doesn't directly support */
-//typedef INTN LONGN;
-//typedef UINTN ULONGN;
-
-typedef PHYSICAL_ADDRESS paddr_t;
-typedef UINT64 psize_t;
-typedef PHYSICAL_ADDRESS vaddr_t;
-typedef UINT64 vsize_t;
-
-typedef INTN pmc_evid_t;
-typedef UINT64 pmc_ctr_t;
-typedef INTN register_t;
-
-typedef __volatile INT32 __cpu_simple_lock_t;
-
-#define __SIMPLELOCK_LOCKED 1
-#define __SIMPLELOCK_UNLOCKED 0
-
-#define __HAVE_CPU_COUNTER
-#define __HAVE_SYSCALL_INTERN
-#define __HAVE_MINIMAL_EMUL
-#define __HAVE_OLD_DISKLABEL
-/* XXX: #define __HAVE_CPU_MAXPROC */
-
-#endif /* _MACHTYPES_H_ */
diff --git a/StdLib/Include/Ipf/machine/varargs.h b/StdLib/Include/Ipf/machine/varargs.h
deleted file mode 100644
index 9158eb5b1f..0000000000
--- a/StdLib/Include/Ipf/machine/varargs.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* $NetBSD: varargs.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)varargs.h 8.2 (Berkeley) 3/22/94
- */
-
-#ifndef _IA64_VARARGS_H_
-#define _IA64_VARARGS_H_
-
-#include <machine/stdarg.h>
-
-#define __va_ellipsis ...
-#define __va_alist_t __builtin_va_alist_t
-#define va_alist __builtin_va_alist
-#define va_dcl __va_alist_t __builtin_va_alist; __va_ellipsis
-
-#undef va_start
-#define va_start(ap) __builtin_varargs_start((ap))
-
-#endif /* !_IA64_VARARGS_H_ */
diff --git a/StdLib/Include/Ipf/machine/vmparam.h b/StdLib/Include/Ipf/machine/vmparam.h
deleted file mode 100644
index 116b7cc3f7..0000000000
--- a/StdLib/Include/Ipf/machine/vmparam.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/* $NetBSD: vmparam.h,v 1.2 2006/07/03 17:01:45 cherry Exp $ */
-
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)vmparam.h 5.9 (Berkeley) 5/12/91
- */
-
-#ifndef _VMPARAM_H_
-#define _VMPARAM_H_
-
-#include <sys/tree.h>
-
-#define USRSTACK VM_MAX_ADDRESS /* XXX: Revisit vm address space. */
-
-/*
- * Virtual memory related constants, all in bytes
- */
-#ifndef MAXTSIZ
-#define MAXTSIZ (1<<30) /* max text size (1G) */
-#endif
-#ifndef DFLDSIZ
-#define DFLDSIZ (1<<27) /* initial data size (128M) */
-#endif
-#ifndef MAXDSIZ
-#define MAXDSIZ (1<<30) /* max data size (1G) */
-#endif
-#ifndef DFLSSIZ
-#define DFLSSIZ (1<<21) /* initial stack size (2M) */
-#endif
-#ifndef MAXSSIZ
-#define MAXSSIZ (1<<28) /* max stack size (256M) */
-#endif
-#ifndef SGROWSIZ
-#define SGROWSIZ (128UL*1024) /* amount to grow stack */
-#endif
-
-
-
-/*
- * PTEs for mapping user space into the kernel for phyio operations.
- * 64 pte's are enough to cover 8 disks * MAXBSIZE.
- */
-#ifndef USRIOSIZE
-#define USRIOSIZE 64
-#endif
-
-/*
- * Manipulating region bits of an address.
- */
-#define IA64_RR_BASE(n) (((u_int64_t) (n)) << 61)
-#define IA64_RR_MASK(x) ((x) & ((1L << 61) - 1))
-
-#define IA64_PHYS_TO_RR6(x) ((x) | IA64_RR_BASE(6))
-#define IA64_PHYS_TO_RR7(x) ((x) | IA64_RR_BASE(7))
-
-#define IA64_ID_PAGE_SHIFT 28 /* 256M */
-#define IA64_ID_PAGE_SIZE (1 << IA64_ID_PAGE_SHIFT)
-#define IA64_ID_PAGE_MASK (IA64_ID_PAGE_SIZE-1)
-
-#define IA64_BACKINGSTORE IA64_RR_BASE(4)
-
-#define PAGE_SHIFT 14 /* 16K pages by default. */
-#define PAGE_SIZE (1 << PAGE_SHIFT)
-#define PAGE_MASK (PAGE_SIZE - 1)
-
-/* user/kernel map constants */
-#define VM_MIN_ADDRESS ((vaddr_t)0)
-#define VM_MAX_ADDRESS ((vaddr_t) IA64_RR_BASE(5))
-#define VM_GATEWAY_SIZE PAGE_SIZE
-#define VM_MAXUSER_ADDRESS (VM_MAX_ADDRESS + VM_GATEWAY_SIZE)
-#define VM_MIN_KERNEL_ADDRESS VM_MAXUSER_ADDRESS
-#define VM_MAX_KERNEL_ADDRESS ((vaddr_t) (IA64_RR_BASE(6) - 1))
-
-#define VM_PHYSSEG_MAX 16 /* XXX: */
-#define VM_PHYSSEG_STRAT VM_PSTRAT_BSEARCH
-#define VM_PHYSSEG_NOADD /* no more after vm_mem_init */
-
-#define VM_NFREELIST 1 /* XXX: */
-#define VM_FREELIST_DEFAULT 0 /* XXX: */
-
-/* virtual sizes (bytes) for various kernel submaps */
-#define VM_PHYS_SIZE (USRIOSIZE*PAGE_SIZE)
-
-#ifndef _LOCORE
-/*
- * pmap-specific data store in the vm_page structure.
- */
-#define __HAVE_VM_PAGE_MD
-struct vm_page_md {
- TAILQ_HEAD(,pv_entry) pv_list; /* pv_entry list */
- int pv_list_count;
- struct simplelock pv_slock; /* lock on this head */
- int pvh_attrs; /* page attributes */
-};
-
-#define VM_MDPAGE_INIT(pg) \
-do { \
- TAILQ_INIT(&(pg)->mdpage.pv_list); \
- simple_lock_init(&(pg)->mdpage.pv_slock); \
-} while (/*CONSTCOND*/0)
-#endif /*_LOCORE*/
-
-#endif /* _VMPARAM_H_ */
diff --git a/StdLib/Include/Ipf/machine/wchar_limits.h b/StdLib/Include/Ipf/machine/wchar_limits.h
deleted file mode 100644
index 38bdfb8a68..0000000000
--- a/StdLib/Include/Ipf/machine/wchar_limits.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* $NetBSD: wchar_limits.h,v 1.1 2006/04/07 14:21:18 cherry Exp $ */
-
-/*-
- * Copyright (c) 2004 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _IA64_WCHAR_LIMITS_H_
-#define _IA64_WCHAR_LIMITS_H_
-
-#endif /* !_IA64_WCHAR_LIMITS_H_ */
diff --git a/StdLib/Include/Lua/lauxlib.h b/StdLib/Include/Lua/lauxlib.h
deleted file mode 100644
index c21d2455b7..0000000000
--- a/StdLib/Include/Lua/lauxlib.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
-** $Id: lauxlib.h,v 1.120.1.1 2013/04/12 18:48:47 roberto Exp $
-** Auxiliary functions for building Lua libraries
-** See Copyright Notice in lua.h
-*/
-
-
-#ifndef lauxlib_h
-#define lauxlib_h
-
-
-#include <stddef.h>
-#include <stdio.h>
-
-#include <Lua/lua.h>
-
-
-
-/* extra error code for `luaL_load' */
-#define LUA_ERRFILE (LUA_ERRERR+1)
-
-
-typedef struct luaL_Reg {
- const char *name;
- lua_CFunction func;
-} luaL_Reg;
-
-
-LUALIB_API void (luaL_checkversion_) (lua_State *L, lua_Number ver);
-#define luaL_checkversion(L) luaL_checkversion_(L, LUA_VERSION_NUM)
-
-LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e);
-LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e);
-LUALIB_API const char *(luaL_tolstring) (lua_State *L, int idx, size_t *len);
-LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg);
-LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg,
- size_t *l);
-LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg,
- const char *def, size_t *l);
-LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg);
-LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def);
-
-LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg);
-LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg,
- lua_Integer def);
-LUALIB_API lua_Unsigned (luaL_checkunsigned) (lua_State *L, int numArg);
-LUALIB_API lua_Unsigned (luaL_optunsigned) (lua_State *L, int numArg,
- lua_Unsigned def);
-
-LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg);
-LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t);
-LUALIB_API void (luaL_checkany) (lua_State *L, int narg);
-
-LUALIB_API int (luaL_newmetatable) (lua_State *L, const char *tname);
-LUALIB_API void (luaL_setmetatable) (lua_State *L, const char *tname);
-LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname);
-LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname);
-
-LUALIB_API void (luaL_where) (lua_State *L, int lvl);
-LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...);
-
-LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def,
- const char *const lst[]);
-
-LUALIB_API int (luaL_fileresult) (lua_State *L, int stat, const char *fname);
-LUALIB_API int (luaL_execresult) (lua_State *L, int stat);
-
-/* pre-defined references */
-#define LUA_NOREF (-2)
-#define LUA_REFNIL (-1)
-
-LUALIB_API int (luaL_ref) (lua_State *L, int t);
-LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref);
-
-LUALIB_API int (luaL_loadfilex) (lua_State *L, const char *filename,
- const char *mode);
-
-#define luaL_loadfile(L,f) luaL_loadfilex(L,f,NULL)
-
-LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz,
- const char *name, const char *mode);
-LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s);
-
-LUALIB_API lua_State *(luaL_newstate) (void);
-
-LUALIB_API int (luaL_len) (lua_State *L, int idx);
-
-LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p,
- const char *r);
-
-LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
-
-LUALIB_API int (luaL_getsubtable) (lua_State *L, int idx, const char *fname);
-
-LUALIB_API void (luaL_traceback) (lua_State *L, lua_State *L1,
- const char *msg, int level);
-
-LUALIB_API void (luaL_requiref) (lua_State *L, const char *modname,
- lua_CFunction openf, int glb);
-
-/*
-** ===============================================================
-** some useful macros
-** ===============================================================
-*/
-
-
-#define luaL_newlibtable(L,l) \
- lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1)
-
-#define luaL_newlib(L,l) (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0))
-
-#define luaL_argcheck(L, cond,numarg,extramsg) \
- ((void)((cond) || luaL_argerror(L, (numarg), (extramsg))))
-#define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL))
-#define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL))
-#define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n)))
-#define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d)))
-#define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n)))
-#define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d)))
-
-#define luaL_typename(L,i) lua_typename(L, lua_type(L,(i)))
-
-#define luaL_dofile(L, fn) \
- (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0))
-
-#define luaL_dostring(L, s) \
- (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0))
-
-#define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n)))
-
-#define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n)))
-
-#define luaL_loadbuffer(L,s,sz,n) luaL_loadbufferx(L,s,sz,n,NULL)
-
-
-/*
-** {======================================================
-** Generic Buffer manipulation
-** =======================================================
-*/
-
-typedef struct luaL_Buffer {
- char *b; /* buffer address */
- size_t size; /* buffer size */
- size_t n; /* number of characters in buffer */
- lua_State *L;
- char initb[LUAL_BUFFERSIZE]; /* initial buffer */
-} luaL_Buffer;
-
-
-#define luaL_addchar(B,c) \
- ((void)((B)->n < (B)->size || luaL_prepbuffsize((B), 1)), \
- ((B)->b[(B)->n++] = (c)))
-
-#define luaL_addsize(B,s) ((B)->n += (s))
-
-LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B);
-LUALIB_API char *(luaL_prepbuffsize) (luaL_Buffer *B, size_t sz);
-LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l);
-LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s);
-LUALIB_API void (luaL_addvalue) (luaL_Buffer *B);
-LUALIB_API void (luaL_pushresult) (luaL_Buffer *B);
-LUALIB_API void (luaL_pushresultsize) (luaL_Buffer *B, size_t sz);
-LUALIB_API char *(luaL_buffinitsize) (lua_State *L, luaL_Buffer *B, size_t sz);
-
-#define luaL_prepbuffer(B) luaL_prepbuffsize(B, LUAL_BUFFERSIZE)
-
-/* }====================================================== */
-
-
-
-/*
-** {======================================================
-** File handles for IO library
-** =======================================================
-*/
-
-/*
-** A file handle is a userdata with metatable 'LUA_FILEHANDLE' and
-** initial structure 'luaL_Stream' (it may contain other fields
-** after that initial structure).
-*/
-
-#define LUA_FILEHANDLE "FILE*"
-
-
-typedef struct luaL_Stream {
- FILE *f; /* stream (NULL for incompletely created streams) */
- lua_CFunction closef; /* to close stream (NULL for closed streams) */
-} luaL_Stream;
-
-/* }====================================================== */
-
-
-
-/* compatibility with old module system */
-#if defined(LUA_COMPAT_MODULE)
-
-LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname,
- int sizehint);
-LUALIB_API void (luaL_openlib) (lua_State *L, const char *libname,
- const luaL_Reg *l, int nup);
-
-#define luaL_register(L,n,l) (luaL_openlib(L,(n),(l),0))
-
-#endif
-
-
-#endif
-
-
diff --git a/StdLib/Include/Lua/lua.h b/StdLib/Include/Lua/lua.h
deleted file mode 100644
index bf3a2e240d..0000000000
--- a/StdLib/Include/Lua/lua.h
+++ /dev/null
@@ -1,444 +0,0 @@
-/*
-** $Id: lua.h,v 1.285.1.2 2013/11/11 12:09:16 roberto Exp $
-** Lua - A Scripting Language
-** Lua.org, PUC-Rio, Brazil (http://www.lua.org)
-** See Copyright Notice at the end of this file
-*/
-
-
-#ifndef lua_h
-#define lua_h
-
-#include <stdarg.h>
-#include <stddef.h>
-
-
-#include <Lua/luaconf.h>
-
-
-#define LUA_VERSION_MAJOR "5"
-#define LUA_VERSION_MINOR "2"
-#define LUA_VERSION_NUM 502
-#define LUA_VERSION_RELEASE "3"
-
-#define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR
-#define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE
-#define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2013 Lua.org, PUC-Rio"
-#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo, W. Celes"
-
-
-/* mark for precompiled code ('<esc>Lua') */
-#define LUA_SIGNATURE "\033Lua"
-
-/* option for multiple returns in 'lua_pcall' and 'lua_call' */
-#define LUA_MULTRET (-1)
-
-
-/*
-** pseudo-indices
-*/
-#define LUA_REGISTRYINDEX LUAI_FIRSTPSEUDOIDX
-#define lua_upvalueindex(i) (LUA_REGISTRYINDEX - (i))
-
-
-/* thread status */
-#define LUA_OK 0
-#define LUA_YIELD 1
-#define LUA_ERRRUN 2
-#define LUA_ERRSYNTAX 3
-#define LUA_ERRMEM 4
-#define LUA_ERRGCMM 5
-#define LUA_ERRERR 6
-
-
-typedef struct lua_State lua_State;
-
-typedef int (*lua_CFunction) (lua_State *L);
-
-
-/*
-** functions that read/write blocks when loading/dumping Lua chunks
-*/
-typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz);
-
-typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud);
-
-
-/*
-** prototype for memory-allocation functions
-*/
-typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize);
-
-
-/*
-** basic types
-*/
-#define LUA_TNONE (-1)
-
-#define LUA_TNIL 0
-#define LUA_TBOOLEAN 1
-#define LUA_TLIGHTUSERDATA 2
-#define LUA_TNUMBER 3
-#define LUA_TSTRING 4
-#define LUA_TTABLE 5
-#define LUA_TFUNCTION 6
-#define LUA_TUSERDATA 7
-#define LUA_TTHREAD 8
-
-#define LUA_NUMTAGS 9
-
-
-
-/* minimum Lua stack available to a C function */
-#define LUA_MINSTACK 20
-
-
-/* predefined values in the registry */
-#define LUA_RIDX_MAINTHREAD 1
-#define LUA_RIDX_GLOBALS 2
-#define LUA_RIDX_LAST LUA_RIDX_GLOBALS
-
-
-/* type of numbers in Lua */
-typedef LUA_NUMBER lua_Number;
-
-
-/* type for integer functions */
-typedef LUA_INTEGER lua_Integer;
-
-/* unsigned integer type */
-typedef LUA_UNSIGNED lua_Unsigned;
-
-
-
-/*
-** generic extra include file
-*/
-#if defined(LUA_USER_H)
-#include LUA_USER_H
-#endif
-
-
-/*
-** RCS ident string
-*/
-extern const char lua_ident[];
-
-
-/*
-** state manipulation
-*/
-LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud);
-LUA_API void (lua_close) (lua_State *L);
-LUA_API lua_State *(lua_newthread) (lua_State *L);
-
-LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf);
-
-
-LUA_API const lua_Number *(lua_version) (lua_State *L);
-
-
-/*
-** basic stack manipulation
-*/
-LUA_API int (lua_absindex) (lua_State *L, int idx);
-LUA_API int (lua_gettop) (lua_State *L);
-LUA_API void (lua_settop) (lua_State *L, int idx);
-LUA_API void (lua_pushvalue) (lua_State *L, int idx);
-LUA_API void (lua_remove) (lua_State *L, int idx);
-LUA_API void (lua_insert) (lua_State *L, int idx);
-LUA_API void (lua_replace) (lua_State *L, int idx);
-LUA_API void (lua_copy) (lua_State *L, int fromidx, int toidx);
-LUA_API int (lua_checkstack) (lua_State *L, int sz);
-
-LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n);
-
-
-/*
-** access functions (stack -> C)
-*/
-
-LUA_API int (lua_isnumber) (lua_State *L, int idx);
-LUA_API int (lua_isstring) (lua_State *L, int idx);
-LUA_API int (lua_iscfunction) (lua_State *L, int idx);
-LUA_API int (lua_isuserdata) (lua_State *L, int idx);
-LUA_API int (lua_type) (lua_State *L, int idx);
-LUA_API const char *(lua_typename) (lua_State *L, int tp);
-
-LUA_API lua_Number (lua_tonumberx) (lua_State *L, int idx, int *isnum);
-LUA_API lua_Integer (lua_tointegerx) (lua_State *L, int idx, int *isnum);
-LUA_API lua_Unsigned (lua_tounsignedx) (lua_State *L, int idx, int *isnum);
-LUA_API int (lua_toboolean) (lua_State *L, int idx);
-LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len);
-LUA_API size_t (lua_rawlen) (lua_State *L, int idx);
-LUA_API lua_CFunction (lua_tocfunction) (lua_State *L, int idx);
-LUA_API void *(lua_touserdata) (lua_State *L, int idx);
-LUA_API lua_State *(lua_tothread) (lua_State *L, int idx);
-LUA_API const void *(lua_topointer) (lua_State *L, int idx);
-
-
-/*
-** Comparison and arithmetic functions
-*/
-
-#define LUA_OPADD 0 /* ORDER TM */
-#define LUA_OPSUB 1
-#define LUA_OPMUL 2
-#define LUA_OPDIV 3
-#define LUA_OPMOD 4
-#define LUA_OPPOW 5
-#define LUA_OPUNM 6
-
-LUA_API void (lua_arith) (lua_State *L, int op);
-
-#define LUA_OPEQ 0
-#define LUA_OPLT 1
-#define LUA_OPLE 2
-
-LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2);
-LUA_API int (lua_compare) (lua_State *L, int idx1, int idx2, int op);
-
-
-/*
-** push functions (C -> stack)
-*/
-LUA_API void (lua_pushnil) (lua_State *L);
-LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n);
-LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n);
-LUA_API void (lua_pushunsigned) (lua_State *L, lua_Unsigned n);
-LUA_API const char *(lua_pushlstring) (lua_State *L, const char *s, size_t l);
-LUA_API const char *(lua_pushstring) (lua_State *L, const char *s);
-LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt,
- va_list argp);
-LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...);
-LUA_API void (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n);
-LUA_API void (lua_pushboolean) (lua_State *L, int b);
-LUA_API void (lua_pushlightuserdata) (lua_State *L, void *p);
-LUA_API int (lua_pushthread) (lua_State *L);
-
-
-/*
-** get functions (Lua -> stack)
-*/
-LUA_API void (lua_getglobal) (lua_State *L, const char *var);
-LUA_API void (lua_gettable) (lua_State *L, int idx);
-LUA_API void (lua_getfield) (lua_State *L, int idx, const char *k);
-LUA_API void (lua_rawget) (lua_State *L, int idx);
-LUA_API void (lua_rawgeti) (lua_State *L, int idx, int n);
-LUA_API void (lua_rawgetp) (lua_State *L, int idx, const void *p);
-LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec);
-LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz);
-LUA_API int (lua_getmetatable) (lua_State *L, int objindex);
-LUA_API void (lua_getuservalue) (lua_State *L, int idx);
-
-
-/*
-** set functions (stack -> Lua)
-*/
-LUA_API void (lua_setglobal) (lua_State *L, const char *var);
-LUA_API void (lua_settable) (lua_State *L, int idx);
-LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k);
-LUA_API void (lua_rawset) (lua_State *L, int idx);
-LUA_API void (lua_rawseti) (lua_State *L, int idx, int n);
-LUA_API void (lua_rawsetp) (lua_State *L, int idx, const void *p);
-LUA_API int (lua_setmetatable) (lua_State *L, int objindex);
-LUA_API void (lua_setuservalue) (lua_State *L, int idx);
-
-
-/*
-** 'load' and 'call' functions (load and run Lua code)
-*/
-LUA_API void (lua_callk) (lua_State *L, int nargs, int nresults, int ctx,
- lua_CFunction k);
-#define lua_call(L,n,r) lua_callk(L, (n), (r), 0, NULL)
-
-LUA_API int (lua_getctx) (lua_State *L, int *ctx);
-
-LUA_API int (lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc,
- int ctx, lua_CFunction k);
-#define lua_pcall(L,n,r,f) lua_pcallk(L, (n), (r), (f), 0, NULL)
-
-LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt,
- const char *chunkname,
- const char *mode);
-
-LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data);
-
-
-/*
-** coroutine functions
-*/
-LUA_API int (lua_yieldk) (lua_State *L, int nresults, int ctx,
- lua_CFunction k);
-#define lua_yield(L,n) lua_yieldk(L, (n), 0, NULL)
-LUA_API int (lua_resume) (lua_State *L, lua_State *from, int narg);
-LUA_API int (lua_status) (lua_State *L);
-
-/*
-** garbage-collection function and options
-*/
-
-#define LUA_GCSTOP 0
-#define LUA_GCRESTART 1
-#define LUA_GCCOLLECT 2
-#define LUA_GCCOUNT 3
-#define LUA_GCCOUNTB 4
-#define LUA_GCSTEP 5
-#define LUA_GCSETPAUSE 6
-#define LUA_GCSETSTEPMUL 7
-#define LUA_GCSETMAJORINC 8
-#define LUA_GCISRUNNING 9
-#define LUA_GCGEN 10
-#define LUA_GCINC 11
-
-LUA_API int (lua_gc) (lua_State *L, int what, int data);
-
-
-/*
-** miscellaneous functions
-*/
-
-LUA_API int (lua_error) (lua_State *L);
-
-LUA_API int (lua_next) (lua_State *L, int idx);
-
-LUA_API void (lua_concat) (lua_State *L, int n);
-LUA_API void (lua_len) (lua_State *L, int idx);
-
-LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud);
-LUA_API void (lua_setallocf) (lua_State *L, lua_Alloc f, void *ud);
-
-
-
-/*
-** ===============================================================
-** some useful macros
-** ===============================================================
-*/
-
-#define lua_tonumber(L,i) lua_tonumberx(L,i,NULL)
-#define lua_tointeger(L,i) lua_tointegerx(L,i,NULL)
-#define lua_tounsigned(L,i) lua_tounsignedx(L,i,NULL)
-
-#define lua_pop(L,n) lua_settop(L, -(n)-1)
-
-#define lua_newtable(L) lua_createtable(L, 0, 0)
-
-#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n)))
-
-#define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0)
-
-#define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION)
-#define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE)
-#define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA)
-#define lua_isnil(L,n) (lua_type(L, (n)) == LUA_TNIL)
-#define lua_isboolean(L,n) (lua_type(L, (n)) == LUA_TBOOLEAN)
-#define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD)
-#define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE)
-#define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0)
-
-#define lua_pushliteral(L, s) \
- lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1)
-
-#define lua_pushglobaltable(L) \
- lua_rawgeti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS)
-
-#define lua_tostring(L,i) lua_tolstring(L, (i), NULL)
-
-
-
-/*
-** {======================================================================
-** Debug API
-** =======================================================================
-*/
-
-
-/*
-** Event codes
-*/
-#define LUA_HOOKCALL 0
-#define LUA_HOOKRET 1
-#define LUA_HOOKLINE 2
-#define LUA_HOOKCOUNT 3
-#define LUA_HOOKTAILCALL 4
-
-
-/*
-** Event masks
-*/
-#define LUA_MASKCALL (1 << LUA_HOOKCALL)
-#define LUA_MASKRET (1 << LUA_HOOKRET)
-#define LUA_MASKLINE (1 << LUA_HOOKLINE)
-#define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT)
-
-typedef struct lua_Debug lua_Debug; /* activation record */
-
-
-/* Functions to be called by the debugger in specific events */
-typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
-
-
-LUA_API int (lua_getstack) (lua_State *L, int level, lua_Debug *ar);
-LUA_API int (lua_getinfo) (lua_State *L, const char *what, lua_Debug *ar);
-LUA_API const char *(lua_getlocal) (lua_State *L, const lua_Debug *ar, int n);
-LUA_API const char *(lua_setlocal) (lua_State *L, const lua_Debug *ar, int n);
-LUA_API const char *(lua_getupvalue) (lua_State *L, int funcindex, int n);
-LUA_API const char *(lua_setupvalue) (lua_State *L, int funcindex, int n);
-
-LUA_API void *(lua_upvalueid) (lua_State *L, int fidx, int n);
-LUA_API void (lua_upvaluejoin) (lua_State *L, int fidx1, int n1,
- int fidx2, int n2);
-
-LUA_API int (lua_sethook) (lua_State *L, lua_Hook func, int mask, int count);
-LUA_API lua_Hook (lua_gethook) (lua_State *L);
-LUA_API int (lua_gethookmask) (lua_State *L);
-LUA_API int (lua_gethookcount) (lua_State *L);
-
-
-struct lua_Debug {
- int event;
- const char *name; /* (n) */
- const char *namewhat; /* (n) 'global', 'local', 'field', 'method' */
- const char *what; /* (S) 'Lua', 'C', 'main', 'tail' */
- const char *source; /* (S) */
- int currentline; /* (l) */
- int linedefined; /* (S) */
- int lastlinedefined; /* (S) */
- unsigned char nups; /* (u) number of upvalues */
- unsigned char nparams;/* (u) number of parameters */
- char isvararg; /* (u) */
- char istailcall; /* (t) */
- char short_src[LUA_IDSIZE]; /* (S) */
- /* private part */
- struct CallInfo *i_ci; /* active function */
-};
-
-/* }====================================================================== */
-
-
-/******************************************************************************
-* Copyright (C) 1994-2013 Lua.org, PUC-Rio.
-*
-* Permission is hereby granted, free of charge, to any person obtaining
-* a copy of this software and associated documentation files (the
-* "Software"), to deal in the Software without restriction, including
-* without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to
-* permit persons to whom the Software is furnished to do so, subject to
-* the following conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-******************************************************************************/
-
-
-#endif
diff --git a/StdLib/Include/Lua/luaconf.h b/StdLib/Include/Lua/luaconf.h
deleted file mode 100644
index db154d62a3..0000000000
--- a/StdLib/Include/Lua/luaconf.h
+++ /dev/null
@@ -1,550 +0,0 @@
-/*
-** $Id: luaconf.h,v 1.176.1.1 2013/04/12 18:48:47 roberto Exp $
-** Configuration file for Lua
-** See Copyright Notice in lua.h
-*/
-
-
-#ifndef lconfig_h
-#define lconfig_h
-
-#include <limits.h>
-#include <stddef.h>
-
-
-/*
-** ==================================================================
-** Search for "@@" to find all configurable definitions.
-** ===================================================================
-*/
-
-#if defined(_DOS_WATCOM) || defined(UEFI_C_SOURCE)
-#undef _WIN32
-#define LUA_ANSI
-#endif
-
-/*
-@@ LUA_ANSI controls the use of non-ansi features.
-** CHANGE it (define it) if you want Lua to avoid the use of any
-** non-ansi feature or library.
-*/
-#if !defined(LUA_ANSI) && defined(__STRICT_ANSI__)
-#define LUA_ANSI
-#endif
-
-
-#if !defined(LUA_ANSI) && defined(_WIN32) && !defined(_WIN32_WCE)
-#define LUA_WIN /* enable goodies for regular Windows platforms */
-#endif
-
-#if defined(LUA_WIN)
-#define LUA_DL_DLL
-#define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */
-#endif
-
-#if defined(LUA_USE_LINUX)
-#define LUA_USE_POSIX
-#define LUA_USE_DLOPEN /* needs an extra library: -ldl */
-#define LUA_USE_READLINE /* needs some extra libraries */
-#define LUA_USE_STRTODHEX /* assume 'strtod' handles hex formats */
-#define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */
-#define LUA_USE_LONGLONG /* assume support for long long */
-#endif
-
-#if defined(LUA_USE_MACOSX)
-#define LUA_USE_POSIX
-#define LUA_USE_DLOPEN /* does not need -ldl */
-#define LUA_USE_READLINE /* needs an extra library: -lreadline */
-#define LUA_USE_STRTODHEX /* assume 'strtod' handles hex formats */
-#define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */
-#define LUA_USE_LONGLONG /* assume support for long long */
-#endif
-
-/*
-@@ LUA_USE_POSIX includes all functionality listed as X/Open System
-@* Interfaces Extension (XSI).
-** CHANGE it (define it) if your system is XSI compatible.
-*/
-#if defined(LUA_USE_POSIX)
-#define LUA_USE_MKSTEMP
-#define LUA_USE_ISATTY
-#define LUA_USE_POPEN
-#define LUA_USE_ULONGJMP
-#define LUA_USE_GMTIME_R
-#endif
-
-
-
-/*
-@@ LUA_PATH_DEFAULT is the default path that Lua uses to look for
-@* Lua libraries.
-@@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for
-@* C libraries.
-** CHANGE them if your machine has a non-conventional directory
-** hierarchy or if you want to install your libraries in
-** non-conventional directories.
-*/
-#if defined(_WIN32) /* { */
-/*
-** In Windows, any exclamation mark ('!') in the path is replaced by the
-** path of the directory of the executable file of the current process.
-*/
-#define LUA_LDIR "!\\lua\\"
-#define LUA_CDIR "!\\"
-#define LUA_PATH_DEFAULT \
- LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" \
- LUA_CDIR"?.lua;" LUA_CDIR"?\\init.lua;" ".\\?.lua"
-#define LUA_CPATH_DEFAULT \
- LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll;" ".\\?.dll"
-
-#else /* }{ */
-
-#define LUA_VDIR LUA_VERSION_MAJOR "." LUA_VERSION_MINOR "/"
-#define LUA_ROOT "/usr/local/"
-#define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR
-#define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR
-#define LUA_PATH_DEFAULT \
- LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \
- LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua;" "./?.lua"
-#define LUA_CPATH_DEFAULT \
- LUA_CDIR"?.so;" LUA_CDIR"loadall.so;" "./?.so"
-#endif /* } */
-
-
-/*
-@@ LUA_DIRSEP is the directory separator (for submodules).
-** CHANGE it if your machine does not use "/" as the directory separator
-** and is not Windows. (On Windows Lua automatically uses "\".)
-*/
-#if defined(_WIN32) || defined (_DOS_WATCOM) || defined(_EFI)
-#define LUA_DIRSEP "\\"
-#else
-#define LUA_DIRSEP "/"
-#endif
-
-
-/*
-@@ LUA_ENV is the name of the variable that holds the current
-@@ environment, used to access global names.
-** CHANGE it if you do not like this name.
-*/
-#define LUA_ENV "_ENV"
-
-
-/*
-@@ LUA_API is a mark for all core API functions.
-@@ LUALIB_API is a mark for all auxiliary library functions.
-@@ LUAMOD_API is a mark for all standard library opening functions.
-** CHANGE them if you need to define those functions in some special way.
-** For instance, if you want to create one Windows DLL with the core and
-** the libraries, you may want to use the following definition (define
-** LUA_BUILD_AS_DLL to get it).
-*/
-#if defined(LUA_BUILD_AS_DLL) /* { */
-
-#if defined(LUA_CORE) || defined(LUA_LIB) /* { */
-#define LUA_API __declspec(dllexport)
-#else /* }{ */
-#define LUA_API __declspec(dllimport)
-#endif /* } */
-
-#else /* }{ */
-
-#define LUA_API extern
-
-#endif /* } */
-
-
-/* more often than not the libs go together with the core */
-#define LUALIB_API LUA_API
-#define LUAMOD_API LUALIB_API
-
-
-/*
-@@ LUAI_FUNC is a mark for all extern functions that are not to be
-@* exported to outside modules.
-@@ LUAI_DDEF and LUAI_DDEC are marks for all extern (const) variables
-@* that are not to be exported to outside modules (LUAI_DDEF for
-@* definitions and LUAI_DDEC for declarations).
-** CHANGE them if you need to mark them in some special way. Elf/gcc
-** (versions 3.2 and later) mark them as "hidden" to optimize access
-** when Lua is compiled as a shared library. Not all elf targets support
-** this attribute. Unfortunately, gcc does not offer a way to check
-** whether the target offers that support, and those without support
-** give a warning about it. To avoid these warnings, change to the
-** default definition.
-*/
-#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \
- defined(__ELF__) /* { */
-#define LUAI_FUNC __attribute__((visibility("hidden"))) extern
-#define LUAI_DDEC LUAI_FUNC
-#define LUAI_DDEF /* empty */
-
-#else /* }{ */
-#define LUAI_FUNC extern
-#define LUAI_DDEC extern
-#define LUAI_DDEF /* empty */
-#endif /* } */
-
-
-
-/*
-@@ LUA_QL describes how error messages quote program elements.
-** CHANGE it if you want a different appearance.
-*/
-#define LUA_QL(x) "'" x "'"
-#define LUA_QS LUA_QL("%s")
-
-
-/*
-@@ LUA_IDSIZE gives the maximum size for the description of the source
-@* of a function in debug information.
-** CHANGE it if you want a different size.
-*/
-#define LUA_IDSIZE 60
-
-
-/*
-@@ luai_writestring/luai_writeline define how 'print' prints its results.
-** They are only used in libraries and the stand-alone program. (The #if
-** avoids including 'stdio.h' everywhere.)
-*/
-#if defined(LUA_LIB) || defined(lua_c)
-#include <stdio.h>
-#define luai_writestring(s,l) fwrite((s), sizeof(char), (l), stdout)
-#define luai_writeline() (luai_writestring("\n", 1), fflush(stdout))
-#endif
-
-/*
-@@ luai_writestringerror defines how to print error messages.
-** (A format string with one argument is enough for Lua...)
-*/
-#define luai_writestringerror(s,p) \
- (fprintf(stderr, (s), (p)), fflush(stderr))
-
-
-/*
-@@ LUAI_MAXSHORTLEN is the maximum length for short strings, that is,
-** strings that are internalized. (Cannot be smaller than reserved words
-** or tags for metamethods, as these strings must be internalized;
-** #("function") = 8, #("__newindex") = 10.)
-*/
-#define LUAI_MAXSHORTLEN 40
-
-
-
-/*
-** {==================================================================
-** Compatibility with previous versions
-** ===================================================================
-*/
-
-/*
-@@ LUA_COMPAT_ALL controls all compatibility options.
-** You can define it to get all options, or change specific options
-** to fit your specific needs.
-*/
-#if defined(LUA_COMPAT_ALL) /* { */
-
-/*
-@@ LUA_COMPAT_UNPACK controls the presence of global 'unpack'.
-** You can replace it with 'table.unpack'.
-*/
-#define LUA_COMPAT_UNPACK
-
-/*
-@@ LUA_COMPAT_LOADERS controls the presence of table 'package.loaders'.
-** You can replace it with 'package.searchers'.
-*/
-#define LUA_COMPAT_LOADERS
-
-/*
-@@ macro 'lua_cpcall' emulates deprecated function lua_cpcall.
-** You can call your C function directly (with light C functions).
-*/
-#define lua_cpcall(L,f,u) \
- (lua_pushcfunction(L, (f)), \
- lua_pushlightuserdata(L,(u)), \
- lua_pcall(L,1,0,0))
-
-
-/*
-@@ LUA_COMPAT_LOG10 defines the function 'log10' in the math library.
-** You can rewrite 'log10(x)' as 'log(x, 10)'.
-*/
-#define LUA_COMPAT_LOG10
-
-/*
-@@ LUA_COMPAT_LOADSTRING defines the function 'loadstring' in the base
-** library. You can rewrite 'loadstring(s)' as 'load(s)'.
-*/
-#define LUA_COMPAT_LOADSTRING
-
-/*
-@@ LUA_COMPAT_MAXN defines the function 'maxn' in the table library.
-*/
-#define LUA_COMPAT_MAXN
-
-/*
-@@ The following macros supply trivial compatibility for some
-** changes in the API. The macros themselves document how to
-** change your code to avoid using them.
-*/
-#define lua_strlen(L,i) lua_rawlen(L, (i))
-
-#define lua_objlen(L,i) lua_rawlen(L, (i))
-
-#define lua_equal(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPEQ)
-#define lua_lessthan(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPLT)
-
-/*
-@@ LUA_COMPAT_MODULE controls compatibility with previous
-** module functions 'module' (Lua) and 'luaL_register' (C).
-*/
-#define LUA_COMPAT_MODULE
-
-#endif /* } */
-
-/* }================================================================== */
-
-
-
-/*
-@@ LUAI_BITSINT defines the number of bits in an int.
-** CHANGE here if Lua cannot automatically detect the number of bits of
-** your machine. Probably you do not need to change this.
-*/
-/* avoid overflows in comparison */
-#if INT_MAX-20 < 32760 /* { */
-#define LUAI_BITSINT 16
-#elif INT_MAX > 2147483640L /* }{ */
-/* int has at least 32 bits */
-#define LUAI_BITSINT 32
-#else /* }{ */
-#error "you must define LUA_BITSINT with number of bits in an integer"
-#endif /* } */
-
-
-/*
-@@ LUA_INT32 is an signed integer with exactly 32 bits.
-@@ LUAI_UMEM is an unsigned integer big enough to count the total
-@* memory used by Lua.
-@@ LUAI_MEM is a signed integer big enough to count the total memory
-@* used by Lua.
-** CHANGE here if for some weird reason the default definitions are not
-** good enough for your machine. Probably you do not need to change
-** this.
-*/
-#if LUAI_BITSINT >= 32 /* { */
-#define LUA_INT32 int
-#define LUAI_UMEM size_t
-#define LUAI_MEM ptrdiff_t
-#else /* }{ */
-/* 16-bit ints */
-#define LUA_INT32 long
-#define LUAI_UMEM unsigned long
-#define LUAI_MEM long
-#endif /* } */
-
-
-/*
-@@ LUAI_MAXSTACK limits the size of the Lua stack.
-** CHANGE it if you need a different limit. This limit is arbitrary;
-** its only purpose is to stop Lua to consume unlimited stack
-** space (and to reserve some numbers for pseudo-indices).
-*/
-#if LUAI_BITSINT >= 32
-#define LUAI_MAXSTACK 1000000
-#else
-#define LUAI_MAXSTACK 15000
-#endif
-
-/* reserve some space for error handling */
-#define LUAI_FIRSTPSEUDOIDX (-LUAI_MAXSTACK - 1000)
-
-
-
-
-/*
-@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system.
-** CHANGE it if it uses too much C-stack space.
-*/
-#define LUAL_BUFFERSIZE BUFSIZ
-
-
-
-
-/*
-** {==================================================================
-@@ LUA_NUMBER is the type of numbers in Lua.
-** CHANGE the following definitions only if you want to build Lua
-** with a number type different from double. You may also need to
-** change lua_number2int & lua_number2integer.
-** ===================================================================
-*/
-
-#define LUA_NUMBER_DOUBLE
-#define LUA_NUMBER double
-
-/*
-@@ LUAI_UACNUMBER is the result of an 'usual argument conversion'
-@* over a number.
-*/
-#define LUAI_UACNUMBER double
-
-/*
-@@ LUA_NUMBER_SCAN is the format for reading numbers.
-@@ LUA_NUMBER_FMT is the format for writing numbers.
-@@ lua_number2str converts a number to a string.
-@@ LUAI_MAXNUMBER2STR is maximum size of previous conversion.
-*/
-#define LUA_NUMBER_SCAN "%lf"
-#define LUA_NUMBER_FMT "%.14g"
-#define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n))
-#define LUAI_MAXNUMBER2STR 32 /* 16 digits, sign, point, and \0 */
-
-
-/*
-@@ l_mathop allows the addition of an 'l' or 'f' to all math operations
-*/
-#define l_mathop(x) (x)
-
-
-/*
-@@ lua_str2number converts a decimal numeric string to a number.
-@@ lua_strx2number converts an hexadecimal numeric string to a number.
-** In C99, 'strtod' does both conversions. C89, however, has no function
-** to convert floating hexadecimal strings to numbers. For these
-** systems, you can leave 'lua_strx2number' undefined and Lua will
-** provide its own implementation.
-*/
-#define lua_str2number(s,p) strtod((s), (p))
-
-#if defined(LUA_USE_STRTODHEX)
-#define lua_strx2number(s,p) strtod((s), (p))
-#endif
-
-
-/*
-@@ The luai_num* macros define the primitive operations over numbers.
-*/
-
-/* the following operations need the math library */
-#if defined(lobject_c) || defined(lvm_c)
-#include <math.h>
-#define luai_nummod(L,a,b) ((a) - l_mathop(floor)((a)/(b))*(b))
-#define luai_numpow(L,a,b) (l_mathop(pow)(a,b))
-#endif
-
-/* these are quite standard operations */
-#if defined(LUA_CORE)
-#define luai_numadd(L,a,b) ((a)+(b))
-#define luai_numsub(L,a,b) ((a)-(b))
-#define luai_nummul(L,a,b) ((a)*(b))
-#define luai_numdiv(L,a,b) ((a)/(b))
-#define luai_numunm(L,a) (-(a))
-#define luai_numeq(a,b) ((a)==(b))
-#define luai_numlt(L,a,b) ((a)<(b))
-#define luai_numle(L,a,b) ((a)<=(b))
-#define luai_numisnan(L,a) (!luai_numeq((a), (a)))
-#endif
-
-
-
-/*
-@@ LUA_INTEGER is the integral type used by lua_pushinteger/lua_tointeger.
-** CHANGE that if ptrdiff_t is not adequate on your machine. (On most
-** machines, ptrdiff_t gives a good choice between int or long.)
-*/
-#define LUA_INTEGER ptrdiff_t
-
-/*
-@@ LUA_UNSIGNED is the integral type used by lua_pushunsigned/lua_tounsigned.
-** It must have at least 32 bits.
-*/
-#define LUA_UNSIGNED unsigned LUA_INT32
-
-
-
-/*
-** Some tricks with doubles
-*/
-
-#if defined(LUA_NUMBER_DOUBLE) && !defined(LUA_ANSI) /* { */
-/*
-** The next definitions activate some tricks to speed up the
-** conversion from doubles to integer types, mainly to LUA_UNSIGNED.
-**
-@@ LUA_MSASMTRICK uses Microsoft assembler to avoid clashes with a
-** DirectX idiosyncrasy.
-**
-@@ LUA_IEEE754TRICK uses a trick that should work on any machine
-** using IEEE754 with a 32-bit integer type.
-**
-@@ LUA_IEEELL extends the trick to LUA_INTEGER; should only be
-** defined when LUA_INTEGER is a 32-bit integer.
-**
-@@ LUA_IEEEENDIAN is the endianness of doubles in your machine
-** (0 for little endian, 1 for big endian); if not defined, Lua will
-** check it dynamically for LUA_IEEE754TRICK (but not for LUA_NANTRICK).
-**
-@@ LUA_NANTRICK controls the use of a trick to pack all types into
-** a single double value, using NaN values to represent non-number
-** values. The trick only works on 32-bit machines (ints and pointers
-** are 32-bit values) with numbers represented as IEEE 754-2008 doubles
-** with conventional endianess (12345678 or 87654321), in CPUs that do
-** not produce signaling NaN values (all NaNs are quiet).
-*/
-
-/* Microsoft compiler on a Pentium (32 bit) ? */
-#if defined(LUA_WIN) && defined(_MSC_VER) && defined(_M_IX86) /* { */
-
-#define LUA_MSASMTRICK
-#define LUA_IEEEENDIAN 0
-#define LUA_NANTRICK
-
-
-/* pentium 32 bits? */
-#elif defined(__i386__) || defined(__i386) || defined(__X86__) /* }{ */
-
-#define LUA_IEEE754TRICK
-#define LUA_IEEELL
-#define LUA_IEEEENDIAN 0
-#define LUA_NANTRICK
-
-/* pentium 64 bits? */
-#elif defined(__x86_64) /* }{ */
-
-#define LUA_IEEE754TRICK
-#define LUA_IEEEENDIAN 0
-
-#elif defined(__POWERPC__) || defined(__ppc__) /* }{ */
-
-#define LUA_IEEE754TRICK
-#define LUA_IEEEENDIAN 1
-
-#else /* }{ */
-
-/* assume IEEE754 and a 32-bit integer type */
-#define LUA_IEEE754TRICK
-
-#endif /* } */
-
-#endif /* } */
-
-/* }================================================================== */
-
-
-
-
-/* =================================================================== */
-
-/*
-** Local configuration. You can use this space to add your redefinitions
-** without modifying the main part of the file.
-*/
-
-
-
-#endif
-
diff --git a/StdLib/Include/Lua/lualib.h b/StdLib/Include/Lua/lualib.h
deleted file mode 100644
index 5a5ecb2842..0000000000
--- a/StdLib/Include/Lua/lualib.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-** $Id: lualib.h,v 1.43.1.1 2013/04/12 18:48:47 roberto Exp $
-** Lua standard libraries
-** See Copyright Notice in lua.h
-*/
-
-
-#ifndef lualib_h
-#define lualib_h
-
-#include <Lua/lua.h>
-
-
-
-LUAMOD_API int (luaopen_base) (lua_State *L);
-
-#define LUA_COLIBNAME "coroutine"
-LUAMOD_API int (luaopen_coroutine) (lua_State *L);
-
-#define LUA_TABLIBNAME "table"
-LUAMOD_API int (luaopen_table) (lua_State *L);
-
-#define LUA_IOLIBNAME "io"
-LUAMOD_API int (luaopen_io) (lua_State *L);
-
-#define LUA_OSLIBNAME "os"
-LUAMOD_API int (luaopen_os) (lua_State *L);
-
-#define LUA_STRLIBNAME "string"
-LUAMOD_API int (luaopen_string) (lua_State *L);
-
-#define LUA_BITLIBNAME "bit32"
-LUAMOD_API int (luaopen_bit32) (lua_State *L);
-
-#define LUA_MATHLIBNAME "math"
-LUAMOD_API int (luaopen_math) (lua_State *L);
-
-#define LUA_DBLIBNAME "debug"
-LUAMOD_API int (luaopen_debug) (lua_State *L);
-
-#define LUA_LOADLIBNAME "package"
-LUAMOD_API int (luaopen_package) (lua_State *L);
-
-
-/* open all previous libraries */
-LUALIB_API void (luaL_openlibs) (lua_State *L);
-
-
-
-#if !defined(lua_assert)
-#define lua_assert(x) ((void)0)
-#endif
-
-
-#endif
diff --git a/StdLib/Include/Protocol/EfiSocket.h b/StdLib/Include/Protocol/EfiSocket.h
deleted file mode 100644
index 022a6a5f22..0000000000
--- a/StdLib/Include/Protocol/EfiSocket.h
+++ /dev/null
@@ -1,650 +0,0 @@
-/** @file
- Definitions for the EFI Socket protocol.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef _EFI_SOCKET_H_
-#define _EFI_SOCKET_H_
-
-#include <errno.h>
-#include <Uefi.h>
-
-#include <netinet/in.h>
-
-#include <sys/poll.h>
-#include <sys/socket.h>
-
-//------------------------------------------------------------------------------
-// Data Types
-//------------------------------------------------------------------------------
-
-/**
-EfiSocketLib (SocketDxe) interface
-**/
-typedef struct _EFI_SOCKET_PROTOCOL EFI_SOCKET_PROTOCOL;
-
-/**
- Constructor/Destructor
-
- @retval EFI_SUCCESS The operation was successful
-
- **/
-typedef
-EFI_STATUS
-(* PFN_ESL_xSTRUCTOR) (
- VOID
- );
-
-//------------------------------------------------------------------------------
-// Data
-//------------------------------------------------------------------------------
-
-extern PFN_ESL_xSTRUCTOR mpfnEslConstructor; ///< Constructor address for EslSocketLib
-extern PFN_ESL_xSTRUCTOR mpfnEslDestructor; ///< Destructor address for EslSocketLib
-
-extern EFI_GUID gEfiSocketProtocolGuid; ///< Socket protocol GUID
-extern EFI_GUID gEfiSocketServiceBindingProtocolGuid; ///< Socket layer service binding protocol GUID
-
-//------------------------------------------------------------------------------
-// Socket API
-//------------------------------------------------------------------------------
-
-/**
- Accept a network connection.
-
- This routine calls the network specific layer to remove the next
- connection from the FIFO.
-
- The ::accept calls this routine to poll for a network
- connection to the socket. When a connection is available
- this routine returns the ::EFI_SOCKET_PROTOCOL structure address
- associated with the new socket and the remote network address
- if requested.
-
- @param [in] pSocketProtocol Address of the ::EFI_SOCKET_PROTOCOL structure.
-
- @param [in] pSockAddr Address of a buffer to receive the remote
- network address.
-
- @param [in, out] pSockAddrLength Length in bytes of the address buffer.
- On output specifies the length of the
- remote network address.
-
- @param [out] ppSocketProtocol Address of a buffer to receive the
- ::EFI_SOCKET_PROTOCOL instance
- associated with the new socket.
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS New connection successfully created
- @retval EFI_NOT_READY No connection is available
-
- **/
-typedef
-EFI_STATUS
-(* PFN_ACCEPT) (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN struct sockaddr * pSockAddr,
- IN OUT socklen_t * pSockAddrLength,
- IN EFI_SOCKET_PROTOCOL ** ppSocketProtocol,
- IN int * pErrno
- );
-
-/**
- Bind a name to a socket.
-
- This routine calls the network specific layer to save the network
- address of the local connection point.
-
- The ::bind routine calls this routine to connect a name
- (network address and port) to a socket on the local machine.
-
- @param [in] pSocketProtocol Address of the ::EFI_SOCKET_PROTOCOL structure.
-
- @param [in] pSockAddr Address of a sockaddr structure that contains the
- connection point on the local machine. An IPv4 address
- of INADDR_ANY specifies that the connection is made to
- all of the network stacks on the platform. Specifying a
- specific IPv4 address restricts the connection to the
- network stack supporting that address. Specifying zero
- for the port causes the network layer to assign a port
- number from the dynamic range. Specifying a specific
- port number causes the network layer to use that port.
-
- @param [in] SockAddrLen Specifies the length in bytes of the sockaddr structure.
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket successfully created
-
- **/
-typedef
-EFI_STATUS
-(* PFN_BIND) (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN const struct sockaddr * pSockAddr,
- IN socklen_t SockAddrLength,
- OUT int * pErrno
- );
-
-/**
- Determine if the socket is closed
-
- This routine checks the state of the socket to determine if
- the network specific layer has completed the close operation.
-
- The ::close routine polls this routine to determine when the
- close operation is complete. The close operation needs to
- reverse the operations of the ::EslSocketAllocate routine.
-
- @param [in] pSocketProtocol Address of the ::EFI_SOCKET_PROTOCOL structure.
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS Socket successfully closed
- @retval EFI_NOT_READY Close still in progress
- @retval EFI_ALREADY Close operation already in progress
- @retval Other Failed to close the socket
-
-**/
-typedef
-EFI_STATUS
-(* PFN_CLOSE_POLL) (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int * pErrno
- );
-
-/**
- Start the close operation on the socket
-
- This routine calls the network specific layer to initiate the
- close state machine. This routine then calls the network
- specific layer to determine if the close state machine has gone
- to completion. The result from this poll is returned to the
- caller.
-
- The ::close routine calls this routine to start the close
- operation which reverses the operations of the
- ::EslSocketAllocate routine. The close routine then polls
- the ::EslSocketClosePoll routine to determine when the
- socket is closed.
-
- @param [in] pSocketProtocol Address of the ::EFI_SOCKET_PROTOCOL structure.
- @param [in] bCloseNow Boolean to control close behavior
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS Socket successfully closed
- @retval EFI_NOT_READY Close still in progress
- @retval EFI_ALREADY Close operation already in progress
- @retval Other Failed to close the socket
-
-**/
-typedef
-EFI_STATUS
-(* PFN_CLOSE_START) (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN BOOLEAN bCloseNow,
- IN int * pErrno
- );
-
-/**
- Connect to a remote system via the network.
-
- This routine calls the network specific layer to establish
- the remote system address and establish the connection to
- the remote system.
-
- The ::connect routine calls this routine to establish a
- connection with the specified remote system. This routine
- is designed to be polled by the connect routine for completion
- of the network connection.
-
- @param [in] pSocketProtocol Address of the ::EFI_SOCKET_PROTOCOL structure.
-
- @param [in] pSockAddr Network address of the remote system.
-
- @param [in] SockAddrLength Length in bytes of the network address.
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS The connection was successfully established.
- @retval EFI_NOT_READY The connection is in progress, call this routine again.
- @retval Others The connection attempt failed.
-
- **/
-typedef
-EFI_STATUS
-(* PFN_CONNECT) (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN const struct sockaddr * pSockAddr,
- IN socklen_t SockAddrLength,
- IN int * pErrno
- );
-
-/**
- Get the local address.
-
- This routine calls the network specific layer to get the network
- address of the local host connection point.
-
- The ::getsockname routine calls this routine to obtain the network
- address associated with the local host connection point.
-
- @param [in] pSocketProtocol Address of the ::EFI_SOCKET_PROTOCOL structure.
-
- @param [out] pAddress Network address to receive the local system address
-
- @param [in,out] pAddressLength Length of the local network address structure
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Local address successfully returned
-
- **/
-typedef
-EFI_STATUS
-(* PFN_GET_LOCAL) (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- OUT struct sockaddr * pAddress,
- IN OUT socklen_t * pAddressLength,
- IN int * pErrno
- );
-
-/**
- Get the peer address.
-
- This routine calls the network specific layer to get the remote
- system connection point.
-
- The ::getpeername routine calls this routine to obtain the network
- address of the remote connection point.
-
- @param [in] pSocketProtocol Address of the ::EFI_SOCKET_PROTOCOL structure.
-
- @param [out] pAddress Network address to receive the remote system address
-
- @param [in,out] pAddressLength Length of the remote network address structure
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Remote address successfully returned
-
- **/
-typedef
-EFI_STATUS
-(* PFN_GET_PEER) (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- OUT struct sockaddr * pAddress,
- IN OUT socklen_t * pAddressLength,
- IN int * pErrno
- );
-
-/**
- Establish the known port to listen for network connections.
-
- This routine calls into the network protocol layer to establish
- a handler that is called upon connection completion. The handler
- is responsible for inserting the connection into the FIFO.
-
- The ::listen routine indirectly calls this routine to place the
- socket into a state that enables connection attempts. Connections
- are placed in a FIFO that is serviced by the application. The
- application calls the ::accept (::EslSocketAccept) routine to
- remove the next connection from the FIFO and get the associated
- socket and address.
-
- @param [in] pSocketProtocol Address of the socket protocol structure.
-
- @param [in] Backlog Backlog specifies the maximum FIFO depth for
- the connections waiting for the application
- to call accept. Connection attempts received
- while the queue is full are refused.
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket successfully created
- @retval Other - Failed to enable the socket for listen
-
-**/
-typedef
-EFI_STATUS
-(* PFN_LISTEN) (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN INT32 Backlog,
- OUT int * pErrno
- );
-
-/**
- Get the socket options
-
- This routine handles the socket level options and passes the
- others to the network specific layer.
-
- The ::getsockopt routine calls this routine to retrieve the
- socket options one at a time by name.
-
- @param [in] pSocketProtocol Address of the ::EFI_SOCKET_PROTOCOL structure.
- @param [in] level Option protocol level
- @param [in] OptionName Name of the option
- @param [out] pOptionValue Buffer to receive the option value
- @param [in,out] pOptionLength Length of the buffer in bytes,
- upon return length of the option value in bytes
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket data successfully received
-
- **/
-typedef
-EFI_STATUS
-(* PFN_OPTION_GET) (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int level,
- IN int OptionName,
- OUT void * __restrict pOptionValue,
- IN OUT socklen_t * __restrict pOptionLength,
- IN int * pErrno
- );
-
-/**
- Set the socket options
-
- This routine handles the socket level options and passes the
- others to the network specific layer.
-
- The ::setsockopt routine calls this routine to adjust the socket
- options one at a time by name.
-
- @param [in] pSocketProtocol Address of the ::EFI_SOCKET_PROTOCOL structure.
- @param [in] level Option protocol level
- @param [in] OptionName Name of the option
- @param [in] pOptionValue Buffer containing the option value
- @param [in] OptionLength Length of the buffer in bytes
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Option successfully set
-
- **/
-typedef
-EFI_STATUS
-(* PFN_OPTION_SET) (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int level,
- IN int OptionName,
- IN CONST void * pOptionValue,
- IN socklen_t OptionLength,
- IN int * pErrno
- );
-
-/**
- Poll a socket for pending activity.
-
- This routine builds a detected event mask which is returned to
- the caller in the buffer provided.
-
- The ::poll routine calls this routine to determine if the socket
- needs to be serviced as a result of connection, error, receive or
- transmit activity.
-
- @param [in] pSocketProtocol Address of the ::EFI_SOCKET_PROTOCOL structure.
-
- @param [in] Events Events of interest for this socket
-
- @param [in] pEvents Address to receive the detected events
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket successfully polled
- @retval EFI_INVALID_PARAMETER - When pEvents is NULL
-
- **/
-typedef
-EFI_STATUS
-(* PFN_POLL) (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN short Events,
- IN short * pEvents,
- IN int * pErrno
- );
-
-/**
- Receive data from a network connection.
-
- This routine calls the network specific routine to remove the
- next portion of data from the receive queue and return it to the
- caller.
-
- The ::recvfrom routine calls this routine to determine if any data
- is received from the remote system. Note that the other routines
- ::recv and ::read are layered on top of ::recvfrom.
-
- @param [in] pSocketProtocol Address of the ::EFI_SOCKET_PROTOCOL structure.
-
- @param [in] Flags Message control flags
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer to receive the data.
-
- @param [in] pDataLength Number of received data bytes in the buffer.
-
- @param [out] pAddress Network address to receive the remote system address
-
- @param [in,out] pAddressLength Length of the remote network address structure
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket data successfully received
-
- **/
-typedef
-EFI_STATUS
-(* PFN_RECEIVE) (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int Flags,
- IN size_t BufferLength,
- IN UINT8 * pBuffer,
- OUT size_t * pDataLength,
- OUT struct sockaddr * pAddress,
- IN OUT socklen_t * pAddressLength,
- IN int * pErrno
- );
-
-/**
- Shutdown the socket receive and transmit operations
-
- This routine sets a flag to stop future transmissions and calls
- the network specific layer to cancel the pending receive operation.
-
- The ::shutdown routine calls this routine to stop receive and transmit
- operations on the socket.
-
- @param [in] pSocketProtocol Address of the ::EFI_SOCKET_PROTOCOL structure.
-
- @param [in] How Which operations to stop
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket operations successfully shutdown
-
- **/
-typedef
-EFI_STATUS
-(* PFN_SHUTDOWN) (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int How,
- IN int * pErrno
- );
-
-/**
- Initialize an endpoint for network communication.
-
- This routine initializes the communication endpoint.
-
- The ::socket routine calls this routine indirectly to create
- the communication endpoint.
-
- @param [in] pSocketProtocol Address of the socket protocol structure.
- @param [in] domain Select the family of protocols for the client or server
- application. See the ::socket documentation for values.
- @param [in] type Specifies how to make the network connection.
- See the ::socket documentation for values.
- @param [in] protocol Specifies the lower layer protocol to use.
- See the ::socket documentation for values.
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket successfully created
- @retval EFI_INVALID_PARAMETER - Invalid domain value, errno = EAFNOSUPPORT
- @retval EFI_INVALID_PARAMETER - Invalid type value, errno = EINVAL
- @retval EFI_INVALID_PARAMETER - Invalid protocol value, errno = EINVAL
-
- **/
-typedef
-EFI_STATUS
-(*PFN_SOCKET) (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int domain,
- IN int type,
- IN int protocol,
- IN int * pErrno
- );
-
-/**
- Send data using a network connection.
-
- This routine calls the network specific layer to queue the data
- for transmission. Eventually the buffer will reach the head of
- the queue and will get transmitted over the network. For datagram
- sockets there is no guarantee that the data reaches the application
- running on the remote system.
-
- The ::sendto routine calls this routine to send data to the remote
- system. Note that ::send and ::write are layered on top of ::sendto.
-
- @param [in] pSocketProtocol Address of the ::EFI_SOCKET_PROTOCOL structure.
-
- @param [in] Flags Message control flags
-
- @param [in] BufferLength Length of the the buffer
-
- @param [in] pBuffer Address of a buffer containing the data to send
-
- @param [in] pDataLength Address to receive the number of data bytes sent
-
- @param [in] pAddress Network address of the remote system address
-
- @param [in] AddressLength Length of the remote network address structure
-
- @param [out] pErrno Address to receive the errno value upon completion.
-
- @retval EFI_SUCCESS - Socket data successfully queued for transmit
-
- **/
-typedef
-EFI_STATUS
-(* PFN_TRANSMIT) (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol,
- IN int Flags,
- IN size_t BufferLength,
- IN CONST UINT8 * pBuffer,
- OUT size_t * pDataLength,
- IN const struct sockaddr * pAddress,
- IN socklen_t AddressLength,
- IN int * pErrno
- );
-
-//------------------------------------------------------------------------------
-// Socket Protocol
-//------------------------------------------------------------------------------
-
-/**
- Socket protocol declaration
-**/
-typedef struct _EFI_SOCKET_PROTOCOL {
- EFI_HANDLE SocketHandle; ///< Handle for the socket
- PFN_ACCEPT pfnAccept; ///< Accept a network connection
- PFN_BIND pfnBind; ///< Bind a local address to the socket
- PFN_CLOSE_POLL pfnClosePoll; ///< Determine if the socket is closed
- PFN_CLOSE_START pfnCloseStart; ///< Start the close operation
- PFN_CONNECT pfnConnect; ///< Connect to a remote system
- PFN_GET_LOCAL pfnGetLocal; ///< Get local address
- PFN_GET_PEER pfnGetPeer; ///< Get peer address
- PFN_LISTEN pfnListen; ///< Enable connection attempts on known port
- PFN_OPTION_GET pfnOptionGet; ///< Get socket options
- PFN_OPTION_SET pfnOptionSet; ///< Set socket options
- PFN_POLL pfnPoll; ///< Poll for socket activity
- PFN_RECEIVE pfnReceive; ///< Receive data from a socket
- PFN_SHUTDOWN pfnShutdown; ///< Shutdown receive and transmit operations
- PFN_SOCKET pfnSocket; ///< Initialize the socket
- PFN_TRANSMIT pfnTransmit; ///< Transmit data using the socket
-} GCC_EFI_SOCKET_PROTOCOL;
-
-//------------------------------------------------------------------------------
-// Non-blocking routines
-//------------------------------------------------------------------------------
-
-/**
- Non blocking version of ::accept.
-
- @param [in] s Socket file descriptor returned from ::socket.
-
- @param [in] address Address of a buffer to receive the remote network address.
-
- @param [in, out] address_len Address of a buffer containing the Length in bytes
- of the remote network address buffer. Upon return,
- contains the length of the remote network address.
-
- @return This routine returns zero if successful and -1 when an error occurs.
- In the case of an error, ::errno contains more details.
-
- **/
-int
-AcceptNB (
- int s,
- struct sockaddr * address,
- socklen_t * address_len
- );
-
-/**
- Free the socket resources
-
- This releases the socket resources allocated by calling
- EslServiceGetProtocol.
-
- This routine is called from the ::close routine in BsdSocketLib
- to release the socket resources.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL
- structure
-
- @return Value for ::errno, zero (0) indicates success.
-
- **/
-int
-EslServiceFreeProtocol (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol
- );
-
-/**
- Connect to the EFI socket library
-
- @param [in] ppSocketProtocol Address to receive the socket protocol address
-
- @return Value for ::errno, zero (0) indicates success.
-
- **/
-int
-EslServiceGetProtocol (
- IN EFI_SOCKET_PROTOCOL ** ppSocketProtocol
- );
-
-//------------------------------------------------------------------------------
-
-#endif // _EFI_SOCKET_H_
diff --git a/StdLib/Include/X64/machine/ansi.h b/StdLib/Include/X64/machine/ansi.h
deleted file mode 100644
index e6ff195a82..0000000000
--- a/StdLib/Include/X64/machine/ansi.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/** @file
- Machine dependent ANSI type definitions.
-
- Copyright (c) 2010-2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: ansi.h,v 1.4 2006/10/04 13:51:59 tnozaki Exp
- ansi.h 8.2 (Berkeley) 1/4/94
-**/
-#ifndef _ANSI_H_
-#define _ANSI_H_
-
-#include <sys/EfiCdefs.h>
-
-#include <machine/int_types.h>
-
-/*
- * Types which are fundamental to the implementation and may appear in
- * more than one standard header are defined here. Standard headers
- * then use:
- * #ifdef _BSD_SIZE_T_
- * typedef _BSD_SIZE_T_ size_t;
- * #undef _BSD_SIZE_T_
- * #endif
- */
-#define _BSD_CLOCK_T_ _EFI_CLOCK_T /* clock() */
-#define _BSD_PTRDIFF_T_ _EFI_PTRDIFF_T_ /* ptr1 - ptr2 */
-#define _BSD_SIZE_T_ _EFI_SIZE_T_ /* sizeof() */
-#define _BSD_SSIZE_T_ INTN /* byte count or error */
-#define _BSD_TIME_T_ _EFI_TIME_T /* time() */
-#define _BSD_VA_LIST_ VA_LIST
-#define _BSD_CLOCKID_T_ INT64 /* clockid_t */
-#define _BSD_TIMER_T_ INT64 /* timer_t */
-#define _BSD_SUSECONDS_T_ INT64 /* suseconds_t */
-#define _BSD_USECONDS_T_ UINT64 /* useconds_t */
-
-/*
- * NOTE: rune_t is not covered by ANSI nor other standards, and should not
- * be instantiated outside of lib/libc/locale. use wchar_t.
- *
- * Runes (wchar_t) is declared to be an ``int'' instead of the more natural
- * ``unsigned long'' or ``long''. Two things are happening here. It is not
- * unsigned so that EOF (-1) can be naturally assigned to it and used. Also,
- * it looks like 10646 will be a 31 bit standard. This means that if your
- * ints cannot hold 32 bits, you will be in trouble. The reason an int was
- * chosen over a long is that the is*() and to*() routines take ints (says
- * ANSI C), but they use _RUNE_T_ instead of int. By changing it here, you
- * lose a bit of ANSI conformance, but your programs will still work.
- *
- * Note that _WCHAR_T_ and _RUNE_T_ must be of the same type. When wchar_t
- * and rune_t are typedef'd, _WCHAR_T_ will be undef'd, but _RUNE_T remains
- * defined for ctype.h.
- */
-#define _BSD_WCHAR_T_ _EFI_WCHAR_T /* wchar_t */
-#define _BSD_WINT_T_ _EFI_WINT_T /* wint_t */
-#define _BSD_RUNE_T_ _EFI_WCHAR_T /* rune_t */
-#define _BSD_WCTRANS_T_ void * /* wctrans_t */
-#define _BSD_WCTYPE_T_ unsigned int /* wctype_t */
-
-/*
- * mbstate_t is an opaque object to keep conversion state, during multibyte
- * stream conversions. The content must not be referenced by user programs.
- */
-typedef struct {
- UINT32 A; // Np;
- UINT32 B; // U;
- UINT32 E; // L
- UINT8 C[4]; // n[4]
- UINT16 D[2]; // w[2]
-} __mbstate_t;
-#define _BSD_MBSTATE_T_ __mbstate_t /* mbstate_t */
-
-#endif /* _ANSI_H_ */
diff --git a/StdLib/Include/X64/machine/asm.h b/StdLib/Include/X64/machine/asm.h
deleted file mode 100644
index 109d1e1879..0000000000
--- a/StdLib/Include/X64/machine/asm.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/* $NetBSD: asm.h,v 1.6 2006/09/05 19:00:42 ad Exp $ */
-
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)asm.h 5.5 (Berkeley) 5/7/91
- */
-
-#ifndef _AMD64_ASM_H_
-#define _AMD64_ASM_H_
-
-#ifdef PIC
-#define PIC_PLT(x) x@PLT
-#define PIC_GOT(x) x@GOTPCREL(%rip)
-#else
-#define PIC_PLT(x) x
-#define PIC_GOT(x) x
-#endif
-
-# define _C_LABEL(x) x
-#define _ASM_LABEL(x) x
-
-#define CVAROFF(x,y) (_C_LABEL(x)+y)(%rip)
-
-#ifdef __STDC__
-# define __CONCAT(x,y) x ## y
-# define __STRING(x) #x
-#else
-# define __CONCAT(x,y) x/**/y
-# define __STRING(x) "x"
-#endif
-
-/* let kernels and others override entrypoint alignment */
-#ifndef _ALIGN_TEXT
-#define _ALIGN_TEXT .align 4
-#endif
-
-#define _ENTRY(x) \
- .text; _ALIGN_TEXT; .globl x; .type x,@function; x:
-
-#ifdef _KERNEL
-/* XXX Can't use __CONCAT() here, as it would be evaluated incorrectly. */
-#ifdef __STDC__
-#define IDTVEC(name) \
- ALIGN_TEXT; .globl X ## name; .type X ## name,@function; X ## name:
-#else
-#define IDTVEC(name) \
- ALIGN_TEXT; .globl X/**/name; .type X/**/name,@function; X/**/name:
-#endif /* __STDC__ */
-#endif /* _KERNEL */
-
-#ifdef __STDC__
-#define CPUVAR(off) %gs:CPU_INFO_ ## off
-#else
-#define CPUVAR(off) %gs:CPU_INFO_/**/off
-#endif
-
-
-#ifdef GPROF
-# define _PROF_PROLOGUE \
- pushq %rbp; leaq (%rsp),%rbp; call PIC_PLT(__mcount); popq %rbp
-#else
-# define _PROF_PROLOGUE
-#endif
-
-#define ENTRY(y) _ENTRY(_C_LABEL(y)); _PROF_PROLOGUE
-#define NENTRY(y) _ENTRY(_C_LABEL(y))
-#define ASENTRY(y) _ENTRY(_ASM_LABEL(y)); _PROF_PROLOGUE
-
-#define ASMSTR .asciz
-
-#define RCSID(x) .text; .asciz x
-
-#define WEAK_ALIAS(alias,sym) \
- .weak alias; \
- alias = sym
-
-/*
- * STRONG_ALIAS: create a strong alias.
- */
-#define STRONG_ALIAS(alias,sym) \
- .globl alias; \
- alias = sym
-
-/* XXXfvdl do not use stabs here */
-#ifdef __STDC__
-#define WARN_REFERENCES(sym,msg) \
- .stabs msg ## ,30,0,0,0 ; \
- .stabs __STRING(_C_LABEL(sym)) ## ,1,0,0,0
-#else
-#define WARN_REFERENCES(sym,msg) \
- .stabs msg,30,0,0,0 ; \
- .stabs __STRING(sym),1,0,0,0
-#endif /* __STDC__ */
-
-/*
- * Assembley equivalent of spllower(). Label contains the label to jump to
- * if we need to fire off pending interrupts (e.g. _C_LABEL(Xspllower)).
- *
- * On entry %rcx = new SPL.
- */
-#define SPLLOWER(label) \
- movq CPUVAR(SELF), %r9 ; \
- cmpl CPU_INFO_ILEVEL(%r9), %ecx ; \
- jae 99f ; \
- movl CPU_INFO_IUNMASK(%r9,%rcx,4), %edi ; \
- pushfq ; \
- popq %rax ; \
- cli ; \
- testl CPU_INFO_IPENDING(%r9), %edi ; \
- movq %rcx, %rdi ; \
- jnz label ; \
- movl %ecx, CPU_INFO_ILEVEL(%r9) ; \
- pushq %rax ; \
- popfq ; \
-99:
-
-#endif /* !_AMD64_ASM_H_ */
diff --git a/StdLib/Include/X64/machine/atomic.h b/StdLib/Include/X64/machine/atomic.h
deleted file mode 100644
index fa5672b4d3..0000000000
--- a/StdLib/Include/X64/machine/atomic.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* $NetBSD: atomic.h,v 1.4 2005/12/28 19:09:29 perry Exp $ */
-
-/*
- * Copyright 2002 (c) Wasabi Systems, Inc.
- * All rights reserved.
- *
- * Written by Frank van der Linden for Wasabi Systems, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed for the NetBSD Project by
- * Wasabi Systems, Inc.
- * 4. The name of Wasabi Systems, Inc. may not be used to endorse
- * or promote products derived from this software without specific prior
- * written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _ATOMIC_H
-#define _ATOMIC_H
-
-#ifndef _LOCORE
-
-static __inline u_int64_t
-x86_atomic_testset_u64(volatile u_int64_t *ptr, u_int64_t val) {
- __asm volatile ("xchgq %0,(%2)" :"=r" (val):"0" (val),"r" (ptr));
- return val;
-}
-
-static __inline u_int32_t
-x86_atomic_testset_u32(volatile u_int32_t *ptr, u_int32_t val) {
- __asm volatile ("xchgl %0,(%2)" :"=r" (val):"0" (val),"r" (ptr));
- return val;
-}
-
-
-
-static __inline int32_t
-x86_atomic_testset_i32(volatile int32_t *ptr, int32_t val) {
- __asm volatile ("xchgl %0,(%2)" :"=r" (val):"0" (val),"r" (ptr));
- return val;
-}
-
-
-
-static __inline void
-x86_atomic_setbits_u32(volatile u_int32_t *ptr, u_int32_t bits) {
- __asm volatile("lock ; orl %1,%0" : "=m" (*ptr) : "ir" (bits));
-}
-
-static __inline void
-x86_atomic_clearbits_u32(volatile u_int32_t *ptr, u_int32_t bits) {
- __asm volatile("lock ; andl %1,%0" : "=m" (*ptr) : "ir" (~bits));
-}
-
-
-
-static __inline void
-x86_atomic_setbits_u64(volatile u_int64_t *ptr, u_int64_t bits) {
- __asm volatile("lock ; orq %1,%0" : "=m" (*ptr) : "ir" (~bits));
-}
-
-static __inline void
-x86_atomic_clearbits_u64(volatile u_int64_t *ptr, u_int64_t bits) {
- __asm volatile("lock ; andq %1,%0" : "=m" (*ptr) : "ir" (~bits));
-}
-
-#define x86_atomic_testset_ul x86_atomic_testset_u32
-#define x86_atomic_testset_i x86_atomic_testset_i32
-#define x86_atomic_setbits_l x86_atomic_setbits_u32
-#define x86_atomic_setbits_ul x86_atomic_setbits_u32
-#define x86_atomic_clearbits_l x86_atomic_clearbits_u32
-#define x86_atomic_clearbits_ul x86_atomic_clearbits_u32
-
-#endif
-#endif
diff --git a/StdLib/Include/X64/machine/bswap.h b/StdLib/Include/X64/machine/bswap.h
deleted file mode 100644
index 1c8caaad4c..0000000000
--- a/StdLib/Include/X64/machine/bswap.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* $NetBSD: bswap.h,v 1.2 2006/01/31 07:49:18 dsl Exp $ */
-
-/* Written by Manuel Bouyer. Public domain */
-
-#ifndef _MACHINE_BSWAP_H_
-#define _MACHINE_BSWAP_H_
-
-#include <machine/byte_swap.h>
-
-#define __BSWAP_RENAME
-#include <sys/bswap.h>
-
-#endif /* !_MACHINE_BSWAP_H_ */
diff --git a/StdLib/Include/X64/machine/byte_swap.h b/StdLib/Include/X64/machine/byte_swap.h
deleted file mode 100644
index dec8a24015..0000000000
--- a/StdLib/Include/X64/machine/byte_swap.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* $NetBSD: byte_swap.h,v 1.4 2006/01/30 22:46:35 dsl Exp $ */
-
-/*-
- * Copyright (c) 1998 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Charles M. Hannum.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * Copy of the i386 version. 64 bit versions may be added later.
- */
-
-#ifndef _AMD64_BYTE_SWAP_H_
-#define _AMD64_BYTE_SWAP_H_
-
-#ifdef __GNUC__
-#include <sys/types.h>
-__BEGIN_DECLS
-
-#define __BYTE_SWAP_U32_VARIABLE __byte_swap_u32_variable
-static __inline uint32_t __byte_swap_u32_variable(uint32_t);
-static __inline uint32_t
-__byte_swap_u32_variable(uint32_t x)
-{
- __asm volatile ( "bswap %1" : "=r" (x) : "0" (x));
- return (x);
-}
-
-#define __BYTE_SWAP_U16_VARIABLE __byte_swap_u16_variable
-static __inline uint16_t __byte_swap_u16_variable(uint16_t);
-static __inline uint16_t
-__byte_swap_u16_variable(uint16_t x)
-{
- __asm volatile ("rorw $8, %w1" : "=r" (x) : "0" (x));
- return (x);
-}
-
-__END_DECLS
-#endif
-
-#endif /* !_AMD64_BYTE_SWAP_H_ */
diff --git a/StdLib/Include/X64/machine/endian.h b/StdLib/Include/X64/machine/endian.h
deleted file mode 100644
index 53de9c6ef4..0000000000
--- a/StdLib/Include/X64/machine/endian.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: endian.h,v 1.1 2003/04/26 18:39:40 fvdl Exp $ */
-
-#include <sys/endian.h>
diff --git a/StdLib/Include/X64/machine/endian_machdep.h b/StdLib/Include/X64/machine/endian_machdep.h
deleted file mode 100644
index efe81a3ec3..0000000000
--- a/StdLib/Include/X64/machine/endian_machdep.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: endian_machdep.h,v 1.4 2006/01/30 21:52:38 dsl Exp $ */
-
-#define _BYTE_ORDER _LITTLE_ENDIAN
diff --git a/StdLib/Include/X64/machine/float.h b/StdLib/Include/X64/machine/float.h
deleted file mode 100644
index 620601e169..0000000000
--- a/StdLib/Include/X64/machine/float.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: float.h,v 1.1 2003/04/26 18:39:40 fvdl Exp $ */
-
-#include <x86/float.h>
diff --git a/StdLib/Include/X64/machine/fpu.h b/StdLib/Include/X64/machine/fpu.h
deleted file mode 100644
index b463062f31..0000000000
--- a/StdLib/Include/X64/machine/fpu.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* $NetBSD: fpu.h,v 1.1 2003/04/26 18:39:40 fvdl Exp $ */
-
-#ifndef _AMD64_FPU_H_
-#define _AMD64_FPU_H_
-
-/*
- * NetBSD/amd64 only uses the extended save/restore format used
- * by fxsave/fsrestore, to always deal with the SSE registers,
- * which are part of the ABI to pass floating point values.
- * Must be stored in memory on a 16-byte boundary.
- */
-
-struct fxsave64 {
- u_int16_t fx_fcw;
- u_int16_t fx_fsw;
- u_int8_t fx_ftw;
- u_int8_t fx_unused1;
- u_int16_t fx_fop;
- u_int64_t fx_rip;
- u_int64_t fx_rdp;
- u_int32_t fx_mxcsr;
- u_int32_t fx_mxcsr_mask;
- u_int64_t fx_st[8][2]; /* 8 normal FP regs */
- u_int64_t fx_xmm[16][2]; /* 16 SSE2 registers */
- u_int8_t fx_unused3[96];
-} __attribute__((packed));
-
-struct savefpu {
- struct fxsave64 fp_fxsave; /* see above */
- u_int16_t fp_ex_sw; /* saved status from last exception */
- u_int16_t fp_ex_tw; /* saved tag from last exception */
-};
-
-#ifdef _KERNEL
-
-/*
- * This one only used for backward compat coredumping.
- */
-struct oldfsave {
- u_int16_t fs_control;
- u_int16_t fs_unused0;
- u_int16_t fs_status;
- u_int16_t fs_unused1;
- u_int16_t fs_tag;
- u_int16_t fs_unused2;
- u_int32_t fs_ipoff;
- u_int16_t fs_ipsel;
- u_int16_t fs_op;
- u_int32_t fs_opoff;
- u_int16_t fs_opsel;
-} __attribute__ ((packed));
-
-#endif
-
-
-/*
- * The i387 defaults to Intel extended precision mode and round to nearest,
- * with all exceptions masked.
- */
-#define __INITIAL_NPXCW__ 0x037f
-#define __INITIAL_MXCSR__ 0x1f80
-#define __INITIAL_MXCSR_MASK__ 0xffbf
-
-/* NetBSD uses IEEE double precision. */
-#define __NetBSD_NPXCW__ 0x127f
-/* Linux just uses the default control word. */
-#define __Linux_NPXCW__ 0x037f
-
-/*
- * The standard control word from finit is 0x37F, giving:
- * round to nearest
- * 64-bit precision
- * all exceptions masked.
- *
- * Now we want:
- * affine mode (if we decide to support 287's)
- * round to nearest
- * 53-bit precision
- * all exceptions masked.
- *
- * 64-bit precision often gives bad results with high level languages
- * because it makes the results of calculations depend on whether
- * intermediate values are stored in memory or in FPU registers.
- */
-
-#ifdef _KERNEL
-/*
- * XXX
- */
-struct trapframe;
-struct cpu_info;
-
-void fpuinit(struct cpu_info *);
-void fpudrop(void);
-void fpusave(struct lwp *);
-void fpudiscard(struct lwp *);
-void fputrap(struct trapframe *);
-void fpusave_lwp(struct lwp *, int);
-void fpusave_cpu(struct cpu_info *, int);
-
-#endif
-
-#endif /* _AMD64_FPU_H_ */
diff --git a/StdLib/Include/X64/machine/ieee.h b/StdLib/Include/X64/machine/ieee.h
deleted file mode 100644
index 6f942256dc..0000000000
--- a/StdLib/Include/X64/machine/ieee.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: ieee.h,v 1.1 2003/04/26 18:39:41 fvdl Exp $ */
-
-#include <x86/ieee.h>
diff --git a/StdLib/Include/X64/machine/int_const.h b/StdLib/Include/X64/machine/int_const.h
deleted file mode 100644
index 084796358d..0000000000
--- a/StdLib/Include/X64/machine/int_const.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* $NetBSD: int_const.h,v 1.1 2003/04/26 18:39:42 fvdl Exp $ */
-
-/*-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _AMD64_INT_CONST_H_
-#define _AMD64_INT_CONST_H_
-
-/*
- * 7.18.4 Macros for integer constants
- */
-
-/* 7.18.4.1 Macros for minimum-width integer constants */
-
-#define INT8_C(c) c
-#define INT16_C(c) c
-#define INT32_C(c) c
-#define INT64_C(c) c ## LL
-
-#define UINT8_C(c) c ## U
-#define UINT16_C(c) c ## U
-#define UINT32_C(c) c ## U
-#define UINT64_C(c) c ## ULL
-
-/* 7.18.4.2 Macros for greatest-width integer constants */
-
-#define INTMAX_C(c) c ## LL
-#define UINTMAX_C(c) c ## ULL
-
-#endif /* !_AMD64_INT_CONST_H_ */
diff --git a/StdLib/Include/X64/machine/int_fmtio.h b/StdLib/Include/X64/machine/int_fmtio.h
deleted file mode 100644
index 181cc26e84..0000000000
--- a/StdLib/Include/X64/machine/int_fmtio.h
+++ /dev/null
@@ -1,219 +0,0 @@
-/* $NetBSD: int_fmtio.h,v 1.4 2005/12/11 12:16:25 christos Exp $ */
-
-/*-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _AMD64_INT_FMTIO_H_
-#define _AMD64_INT_FMTIO_H_
-
-/*
- * 7.8.1 Macros for format specifiers
- */
-
-/* fprintf macros for signed integers */
-
-#define PRId8 "d" /* int8_t */
-#define PRId16 "d" /* int16_t */
-#define PRId32 "d" /* int32_t */
-#define PRId64 "ld" /* int64_t */
-#define PRIdLEAST8 "d" /* int_least8_t */
-#define PRIdLEAST16 "d" /* int_least16_t */
-#define PRIdLEAST32 "d" /* int_least32_t */
-#define PRIdLEAST64 "ld" /* int_least64_t */
-#define PRIdFAST8 "d" /* int_fast8_t */
-#define PRIdFAST16 "d" /* int_fast16_t */
-#define PRIdFAST32 "d" /* int_fast32_t */
-#define PRIdFAST64 "ld" /* int_fast64_t */
-#define PRIdMAX "ld" /* intmax_t */
-#define PRIdPTR "ld" /* intptr_t */
-
-#define PRIi8 "i" /* int8_t */
-#define PRIi16 "i" /* int16_t */
-#define PRIi32 "i" /* int32_t */
-#define PRIi64 "li" /* int64_t */
-#define PRIiLEAST8 "i" /* int_least8_t */
-#define PRIiLEAST16 "i" /* int_least16_t */
-#define PRIiLEAST32 "i" /* int_least32_t */
-#define PRIiLEAST64 "li" /* int_least64_t */
-#define PRIiFAST8 "i" /* int_fast8_t */
-#define PRIiFAST16 "i" /* int_fast16_t */
-#define PRIiFAST32 "i" /* int_fast32_t */
-#define PRIiFAST64 "li" /* int_fast64_t */
-#define PRIiMAX "li" /* intmax_t */
-#define PRIiPTR "li" /* intptr_t */
-
-/* fprintf macros for unsigned integers */
-
-#define PRIo8 "o" /* uint8_t */
-#define PRIo16 "o" /* uint16_t */
-#define PRIo32 "o" /* uint32_t */
-#define PRIo64 "lo" /* uint64_t */
-#define PRIoLEAST8 "o" /* uint_least8_t */
-#define PRIoLEAST16 "o" /* uint_least16_t */
-#define PRIoLEAST32 "o" /* uint_least32_t */
-#define PRIoLEAST64 "lo" /* uint_least64_t */
-#define PRIoFAST8 "o" /* uint_fast8_t */
-#define PRIoFAST16 "o" /* uint_fast16_t */
-#define PRIoFAST32 "o" /* uint_fast32_t */
-#define PRIoFAST64 "lo" /* uint_fast64_t */
-#define PRIoMAX "lo" /* uintmax_t */
-#define PRIoPTR "lo" /* uintptr_t */
-
-#define PRIu8 "u" /* uint8_t */
-#define PRIu16 "u" /* uint16_t */
-#define PRIu32 "u" /* uint32_t */
-#define PRIu64 "lu" /* uint64_t */
-#define PRIuLEAST8 "u" /* uint_least8_t */
-#define PRIuLEAST16 "u" /* uint_least16_t */
-#define PRIuLEAST32 "u" /* uint_least32_t */
-#define PRIuLEAST64 "lu" /* uint_least64_t */
-#define PRIuFAST8 "u" /* uint_fast8_t */
-#define PRIuFAST16 "u" /* uint_fast16_t */
-#define PRIuFAST32 "u" /* uint_fast32_t */
-#define PRIuFAST64 "lu" /* uint_fast64_t */
-#define PRIuMAX "lu" /* uintmax_t */
-#define PRIuPTR "lu" /* uintptr_t */
-
-#define PRIx8 "x" /* uint8_t */
-#define PRIx16 "x" /* uint16_t */
-#define PRIx32 "x" /* uint32_t */
-#define PRIx64 "lx" /* uint64_t */
-#define PRIxLEAST8 "x" /* uint_least8_t */
-#define PRIxLEAST16 "x" /* uint_least16_t */
-#define PRIxLEAST32 "x" /* uint_least32_t */
-#define PRIxLEAST64 "lx" /* uint_least64_t */
-#define PRIxFAST8 "x" /* uint_fast8_t */
-#define PRIxFAST16 "x" /* uint_fast16_t */
-#define PRIxFAST32 "x" /* uint_fast32_t */
-#define PRIxFAST64 "lx" /* uint_fast64_t */
-#define PRIxMAX "lx" /* uintmax_t */
-#define PRIxPTR "lx" /* uintptr_t */
-
-#define PRIX8 "X" /* uint8_t */
-#define PRIX16 "X" /* uint16_t */
-#define PRIX32 "X" /* uint32_t */
-#define PRIX64 "lX" /* uint64_t */
-#define PRIXLEAST8 "X" /* uint_least8_t */
-#define PRIXLEAST16 "X" /* uint_least16_t */
-#define PRIXLEAST32 "X" /* uint_least32_t */
-#define PRIXLEAST64 "lX" /* uint_least64_t */
-#define PRIXFAST8 "X" /* uint_fast8_t */
-#define PRIXFAST16 "X" /* uint_fast16_t */
-#define PRIXFAST32 "X" /* uint_fast32_t */
-#define PRIXFAST64 "lX" /* uint_fast64_t */
-#define PRIXMAX "lX" /* uintmax_t */
-#define PRIXPTR "lX" /* uintptr_t */
-
-/* fscanf macros for signed integers */
-
-#define SCNd8 "hhd" /* int8_t */
-#define SCNd16 "hd" /* int16_t */
-#define SCNd32 "d" /* int32_t */
-#define SCNd64 "ld" /* int64_t */
-#define SCNdLEAST8 "hhd" /* int_least8_t */
-#define SCNdLEAST16 "hd" /* int_least16_t */
-#define SCNdLEAST32 "d" /* int_least32_t */
-#define SCNdLEAST64 "ld" /* int_least64_t */
-#define SCNdFAST8 "d" /* int_fast8_t */
-#define SCNdFAST16 "d" /* int_fast16_t */
-#define SCNdFAST32 "d" /* int_fast32_t */
-#define SCNdFAST64 "ld" /* int_fast64_t */
-#define SCNdMAX "ld" /* intmax_t */
-#define SCNdPTR "ld" /* intptr_t */
-
-#define SCNi8 "hhi" /* int8_t */
-#define SCNi16 "hi" /* int16_t */
-#define SCNi32 "i" /* int32_t */
-#define SCNi64 "li" /* int64_t */
-#define SCNiLEAST8 "hhi" /* int_least8_t */
-#define SCNiLEAST16 "hi" /* int_least16_t */
-#define SCNiLEAST32 "i" /* int_least32_t */
-#define SCNiLEAST64 "li" /* int_least64_t */
-#define SCNiFAST8 "i" /* int_fast8_t */
-#define SCNiFAST16 "i" /* int_fast16_t */
-#define SCNiFAST32 "i" /* int_fast32_t */
-#define SCNiFAST64 "li" /* int_fast64_t */
-#define SCNiMAX "li" /* intmax_t */
-#define SCNiPTR "li" /* intptr_t */
-
-/* fscanf macros for unsigned integers */
-
-#define SCNo8 "hho" /* uint8_t */
-#define SCNo16 "ho" /* uint16_t */
-#define SCNo32 "o" /* uint32_t */
-#define SCNo64 "lo" /* uint64_t */
-#define SCNoLEAST8 "hho" /* uint_least8_t */
-#define SCNoLEAST16 "ho" /* uint_least16_t */
-#define SCNoLEAST32 "o" /* uint_least32_t */
-#define SCNoLEAST64 "lo" /* uint_least64_t */
-#define SCNoFAST8 "o" /* uint_fast8_t */
-#define SCNoFAST16 "o" /* uint_fast16_t */
-#define SCNoFAST32 "o" /* uint_fast32_t */
-#define SCNoFAST64 "lo" /* uint_fast64_t */
-#define SCNoMAX "lo" /* uintmax_t */
-#define SCNoPTR "lo" /* uintptr_t */
-
-#define SCNu8 "hhu" /* uint8_t */
-#define SCNu16 "hu" /* uint16_t */
-#define SCNu32 "u" /* uint32_t */
-#define SCNu64 "lu" /* uint64_t */
-#define SCNuLEAST8 "hhu" /* uint_least8_t */
-#define SCNuLEAST16 "hu" /* uint_least16_t */
-#define SCNuLEAST32 "u" /* uint_least32_t */
-#define SCNuLEAST64 "lu" /* uint_least64_t */
-#define SCNuFAST8 "u" /* uint_fast8_t */
-#define SCNuFAST16 "u" /* uint_fast16_t */
-#define SCNuFAST32 "u" /* uint_fast32_t */
-#define SCNuFAST64 "lu" /* uint_fast64_t */
-#define SCNuMAX "lu" /* uintmax_t */
-#define SCNuPTR "lu" /* uintptr_t */
-
-#define SCNx8 "hhx" /* uint8_t */
-#define SCNx16 "hx" /* uint16_t */
-#define SCNx32 "x" /* uint32_t */
-#define SCNx64 "lx" /* uint64_t */
-#define SCNxLEAST8 "hhx" /* uint_least8_t */
-#define SCNxLEAST16 "hx" /* uint_least16_t */
-#define SCNxLEAST32 "x" /* uint_least32_t */
-#define SCNxLEAST64 "lx" /* uint_least64_t */
-#define SCNxFAST8 "x" /* uint_fast8_t */
-#define SCNxFAST16 "x" /* uint_fast16_t */
-#define SCNxFAST32 "x" /* uint_fast32_t */
-#define SCNxFAST64 "lx" /* uint_fast64_t */
-#define SCNxMAX "lx" /* uintmax_t */
-#define SCNxPTR "lx" /* uintptr_t */
-
-#endif /* !_AMD64_INT_FMTIO_H_ */
diff --git a/StdLib/Include/X64/machine/int_limits.h b/StdLib/Include/X64/machine/int_limits.h
deleted file mode 100644
index 8543760e53..0000000000
--- a/StdLib/Include/X64/machine/int_limits.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/* $NetBSD: int_limits.h,v 1.3 2005/12/11 12:16:25 christos Exp $ */
-
-/*-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _AMD64_INT_LIMITS_H_
-#define _AMD64_INT_LIMITS_H_
-
-/*
- * 7.18.2 Limits of specified-width integer types
- */
-
-/* 7.18.2.1 Limits of exact-width integer types */
-
-/* minimum values of exact-width signed integer types */
-#define INT8_MIN (-0x7f-1) /* int8_t */
-#define INT16_MIN (-0x7fff-1) /* int16_t */
-#define INT32_MIN (-0x7fffffff-1) /* int32_t */
-#define INT64_MIN (-0x7fffffffffffffffLL-1) /* int64_t */
-
-/* maximum values of exact-width signed integer types */
-#define INT8_MAX 0x7f /* int8_t */
-#define INT16_MAX 0x7fff /* int16_t */
-#define INT32_MAX 0x7fffffff /* int32_t */
-#define INT64_MAX 0x7fffffffffffffffLL /* int64_t */
-
-/* maximum values of exact-width unsigned integer types */
-#define UINT8_MAX 0xffU /* uint8_t */
-#define UINT16_MAX 0xffffU /* uint16_t */
-#define UINT32_MAX 0xffffffffU /* uint32_t */
-#define UINT64_MAX 0xffffffffffffffffULL /* uint64_t */
-
-/* 7.18.2.2 Limits of minimum-width integer types */
-
-/* minimum values of minimum-width signed integer types */
-#define INT_LEAST8_MIN (-0x7f-1) /* int_least8_t */
-#define INT_LEAST16_MIN (-0x7fff-1) /* int_least16_t */
-#define INT_LEAST32_MIN (-0x7fffffff-1) /* int_least32_t */
-#define INT_LEAST64_MIN (-0x7fffffffffffffffLL-1) /* int_least64_t */
-
-/* maximum values of minimum-width signed integer types */
-#define INT_LEAST8_MAX 0x7f /* int_least8_t */
-#define INT_LEAST16_MAX 0x7fff /* int_least16_t */
-#define INT_LEAST32_MAX 0x7fffffff /* int_least32_t */
-#define INT_LEAST64_MAX 0x7fffffffffffffffLL /* int_least64_t */
-
-/* maximum values of minimum-width unsigned integer types */
-#define UINT_LEAST8_MAX 0xffU /* uint_least8_t */
-#define UINT_LEAST16_MAX 0xffffU /* uint_least16_t */
-#define UINT_LEAST32_MAX 0xffffffffU /* uint_least32_t */
-#define UINT_LEAST64_MAX 0xffffffffffffffffULL /* uint_least64_t */
-
-/* 7.18.2.3 Limits of fastest minimum-width integer types */
-
-/* minimum values of fastest minimum-width signed integer types */
-#define INT_FAST8_MIN (-0x7fffffff-1) /* int_fast8_t */
-#define INT_FAST16_MIN (-0x7fffffff-1) /* int_fast16_t */
-#define INT_FAST32_MIN (-0x7fffffff-1) /* int_fast32_t */
-#define INT_FAST64_MIN (-0x7fffffffffffffffLL-1) /* int_fast64_t */
-
-/* maximum values of fastest minimum-width signed integer types */
-#define INT_FAST8_MAX 0x7fffffff /* int_fast8_t */
-#define INT_FAST16_MAX 0x7fffffff /* int_fast16_t */
-#define INT_FAST32_MAX 0x7fffffff /* int_fast32_t */
-#define INT_FAST64_MAX 0x7fffffffffffffffLL /* int_fast64_t */
-
-/* maximum values of fastest minimum-width unsigned integer types */
-#define UINT_FAST8_MAX 0xffffffffU /* uint_fast8_t */
-#define UINT_FAST16_MAX 0xffffffffU /* uint_fast16_t */
-#define UINT_FAST32_MAX 0xffffffffU /* uint_fast32_t */
-#define UINT_FAST64_MAX 0xffffffffffffffffULL /* uint_fast64_t */
-
-/* 7.18.2.4 Limits of integer types capable of holding object pointers */
-
-#define INTPTR_MIN (-0x7fffffffffffffffLL-1) /* intptr_t */
-#define INTPTR_MAX 0x7fffffffffffffffLL /* intptr_t */
-#define UINTPTR_MAX 0xffffffffffffffffULL /* uintptr_t */
-
-/* 7.18.2.5 Limits of greatest-width integer types */
-
-#define INTMAX_MIN (-0x7fffffffffffffffLL-1) /* intmax_t */
-#define INTMAX_MAX 0x7fffffffffffffffLL /* intmax_t */
-#define UINTMAX_MAX 0xffffffffffffffffULL /* uintmax_t */
-
-
-/*
- * 7.18.3 Limits of other integer types
- */
-
-/* limits of ptrdiff_t */
-#define PTRDIFF_MIN (-0x7fffffffffffffffLL-1) /* ptrdiff_t */
-#define PTRDIFF_MAX 0x7fffffffffffffffLL /* ptrdiff_t */
-
-/* limits of sig_atomic_t */
-#define SIG_ATOMIC_MIN (-0x7fffffffffffffffLL-1) /* sig_atomic_t */
-#define SIG_ATOMIC_MAX 0x7fffffffffffffffLL /* sig_atomic_t */
-
-/* limit of size_t */
-#define SIZE_MAX 0xffffffffffffffffULL /* size_t */
-#define SIZE_T_MAX SIZE_MAX
-
-#endif /* !_AMD64_INT_LIMITS_H_ */
diff --git a/StdLib/Include/X64/machine/int_mwgwtypes.h b/StdLib/Include/X64/machine/int_mwgwtypes.h
deleted file mode 100644
index 5e28108f8e..0000000000
--- a/StdLib/Include/X64/machine/int_mwgwtypes.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/** @file
- Minimum and Greatest Width Integer types.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Portions Copyright (c) 2001 The NetBSD Foundation, Inc.
- All rights reserved.
-
- This code is derived from software contributed to The NetBSD Foundation
- by Klaus Klein.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. All advertising materials mentioning features or use of this software
- must display the following acknowledgement:
- This product includes software developed by the NetBSD
- Foundation, Inc. and its contributors.
- 4. Neither the name of The NetBSD Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: int_mwgwtypes.h,v 1.5 2005/12/24 20:06:47 perry Exp
-**/
-#ifndef _AMD64_INT_MWGWTYPES_H_
-#define _AMD64_INT_MWGWTYPES_H_
-
-/*
- * 7.18.1 Integer types
- */
-
-/* 7.18.1.2 Minimum-width integer types */
-
-typedef CHAR8 int_least8_t;
-typedef UINT8 uint_least8_t;
-typedef INT16 int_least16_t;
-typedef UINT16 uint_least16_t;
-typedef INT32 int_least32_t;
-typedef UINT32 uint_least32_t;
-typedef INT64 int_least64_t;
-typedef UINT64 uint_least64_t;
-
-/* 7.18.1.3 Fastest minimum-width integer types */
-typedef INT32 int_fast8_t;
-typedef UINT32 uint_fast8_t;
-typedef INT32 int_fast16_t;
-typedef UINT32 uint_fast16_t;
-typedef INT32 int_fast32_t;
-typedef UINT32 uint_fast32_t;
-typedef INT64 int_fast64_t;
-typedef UINT64 uint_fast64_t;
-
-/* 7.18.1.5 Greatest-width integer types */
-
-typedef INT64 intmax_t;
-typedef UINT64 uintmax_t;
-
-#endif /* !_AMD64_INT_MWGWTYPES_H_ */
diff --git a/StdLib/Include/X64/machine/int_types.h b/StdLib/Include/X64/machine/int_types.h
deleted file mode 100644
index 5797db8e7f..0000000000
--- a/StdLib/Include/X64/machine/int_types.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/** @file
- Machine dependent integer type definitions.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: int_types.h,v 1.5 2005/12/24 20:06:47 perry Exp
- types.h 7.5 (Berkeley) 3/9/91
-**/
-#ifndef _AMD64_INT_TYPES_H_
-#define _AMD64_INT_TYPES_H_
-
-#include <sys/EfiCdefs.h>
-
-/*
- * 7.18.1 Integer types
- */
-
-/* 7.18.1.1 Exact-width integer types */
-
-typedef INT8 __int8_t;
-typedef UINT8 __uint8_t;
-typedef INT16 __int16_t;
-typedef UINT16 __uint16_t;
-typedef INT32 __int32_t;
-typedef UINT32 __uint32_t;
-typedef INT64 __int64_t;
-typedef UINT64 __uint64_t;
-
-#define __BIT_TYPES_DEFINED__
-
-/* 7.18.1.4 Integer types capable of holding object pointers */
-
-typedef INTN __intptr_t;
-typedef UINTN __uintptr_t;
-
-#endif /* !_AMD64_INT_TYPES_H_ */
diff --git a/StdLib/Include/X64/machine/limits.h b/StdLib/Include/X64/machine/limits.h
deleted file mode 100644
index 193ce366f4..0000000000
--- a/StdLib/Include/X64/machine/limits.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <x86/limits.h>
-
-#define __POINTER_BIT 64
-
-#if defined(__GNUC__)
-#if __GNUC_PREREQ__(4,4)
- #define __LONG_BIT 64
-
- /** minimum value for an object of type long int **/
- #define __LONG_MIN (-9223372036854775807LL - 1LL) // -(2^63 - 2)
-
- /** maximum value for an object of type long int **/
- #define __LONG_MAX (9223372036854775807LL) // 2^63 - 1
-
- /** maximum value for an object of type unsigned long int **/
- #define __ULONG_MAX 0xFFFFFFFFFFFFFFFFULL // 2^64 - 1
-#else
- #define __LONG_BIT 32
- /** minimum value for an object of type long int **/
- #define __LONG_MIN (-2147483647L - 1L) // -(2^31 - 1)
-
- /** maximum value for an object of type long int **/
- #define __LONG_MAX 2147483647L // 2^31 - 1
-
- /** maximum value for an object of type unsigned long int **/
- #define __ULONG_MAX 0xffffffff // 2^32 - 1
-#endif
-
-
-#else /* NOT defined(__GNUC__) */
-#define __LONG_BIT 32
-/** minimum value for an object of type long int **/
-#define __LONG_MIN (-2147483647L - 1L) // -(2^31 - 1)
-
-/** maximum value for an object of type long int **/
-#define __LONG_MAX 2147483647L // 2^31 - 1
-
-/** maximum value for an object of type unsigned long int **/
-#define __ULONG_MAX 0xffffffff // 2^32 - 1
-#endif
diff --git a/StdLib/Include/X64/machine/math.h b/StdLib/Include/X64/machine/math.h
deleted file mode 100644
index a53422933c..0000000000
--- a/StdLib/Include/X64/machine/math.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* $NetBSD: math.h,v 1.3 2005/12/11 12:16:25 christos Exp $ */
-
-#include <x86/math.h>
diff --git a/StdLib/Include/X64/machine/param.h b/StdLib/Include/X64/machine/param.h
deleted file mode 100644
index 8526909024..0000000000
--- a/StdLib/Include/X64/machine/param.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/** @file
- Machine dependent constants for the Intel64 Architecture(X64).
-
- Copyright (c) 2010-2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * $NetBSD: param.h,v 1.3 2006/08/28 13:43:35 yamt Exp
-**/
-#ifndef _X64_PARAM_H_
-#define _X64_PARAM_H_
-
-#define _MACHINE amd64
-#define MACHINE "amd64"
-#define _MACHINE_ARCH x86_64
-#define MACHINE_ARCH "x86_64"
-#define MID_MACHINE MID_X86_64
-
-/*
- * Round p (pointer or byte index) up to a correctly-aligned value
- * for all data types (int, long, ...). The result is u_int and
- * must be cast to any desired pointer type.
- *
- * ALIGNED_POINTER is a boolean macro that checks whether an address
- * is valid to fetch data elements of type t from on this architecture.
- * This does not reflect the optimal alignment, just the possibility
- * (within reasonable limits).
- *
- */
-#define ALIGNBYTES (sizeof(INT64) - 1)
-#define ALIGN(p) (((UINT64)(p) + ALIGNBYTES) &~ALIGNBYTES)
-#define ALIGNED_POINTER(p,t) 1
-
-#define ALIGNBYTES32 (sizeof(INT32) - 1)
-#define ALIGN32(p) (((UINT64)(p) + ALIGNBYTES32) &~ALIGNBYTES32)
-
-#define PGSHIFT 12 /* LOG2(NBPG) */
-#define NBPG (1 << PGSHIFT) /* bytes/page */
-#define PGOFSET (NBPG-1) /* byte offset into page */
-#define NPTEPG (NBPG/(sizeof (pt_entry_t)))
-
-#define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */
-#define DEV_BSIZE (1 << DEV_BSHIFT)
-#define BLKDEV_IOSIZE 2048
-#ifndef MAXPHYS
- #define MAXPHYS (64 * 1024) /* max raw I/O transfer size */
-#endif
-
-#define SSIZE 1 /* initial stack size/NBPG */
-#define SINCR 1 /* increment of stack/NBPG */
-#define UPAGES 5 /* pages of u-area */
-#define USPACE (UPAGES * NBPG) /* total size of u-area */
-
-#ifndef MSGBUFSIZE
- #define MSGBUFSIZE 4*NBPG /* default message buffer size */
-#endif
-
-/*
- * Constants related to network buffer management.
- * MCLBYTES must be no larger than NBPG (the software page size), and,
- * on machines that exchange pages of input or output buffers with mbuf
- * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple
- * of the hardware page size.
- */
-#define MSIZE 512 /* size of an mbuf */
-
-#ifndef MCLSHIFT
- #define MCLSHIFT 11 /* convert bytes to m_buf clusters */
- /* 2K cluster can hold Ether frame */
-#endif /* MCLSHIFT */
-
-#define MCLBYTES (1 << MCLSHIFT) /* size of a m_buf cluster */
-
-#ifndef NMBCLUSTERS
- #ifdef GATEWAY
- #define NMBCLUSTERS 4096 /* map size, max cluster allocation */
- #else
- #define NMBCLUSTERS 2048 /* map size, max cluster allocation */
- #endif
-#endif
-
-#ifndef NFS_RSIZE
- #define NFS_RSIZE 32768
-#endif
-#ifndef NFS_WSIZE
- #define NFS_WSIZE 32768
-#endif
-
-#define x86_round_page(x) ((((EFI_ULONG_T)(x)) + PGOFSET) & ~PGOFSET)
-#define x86_trunc_page(x) ((EFI_ULONG_T)(x) & ~PGOFSET)
-#define x86_btop(x) ((EFI_ULONG_T)(x) >> PGSHIFT)
-#define x86_ptob(x) ((EFI_ULONG_T)(x) << PGSHIFT)
-
-#define btop(x) x86_btop(x)
-#define ptob(x) x86_ptob(x)
-#define round_pdr(x) x86_round_pdr(x)
-
-#define mstohz(ms) ((ms + 0UL) * hz / 1000)
-
-#endif /* _X64_PARAM_H_ */
diff --git a/StdLib/Include/X64/machine/signal.h b/StdLib/Include/X64/machine/signal.h
deleted file mode 100644
index 6628eb9e94..0000000000
--- a/StdLib/Include/X64/machine/signal.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
-Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-This program and the accompanying materials are licensed and made available under
-the terms and conditions of the BSD License that accompanies this distribution.
-The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php.
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#ifndef _MACHINE_SIGNAL_H
-#define _MACHINE_SIGNAL_H
-#include <sys/EfiCdefs.h>
-
-/** The type sig_atomic_t is the (possibly volatile-qualified) integer type of
- an object that can be accessed as an atomic entity, even in the presence
- of asynchronous interrupts.
-**/
-typedef INTN sig_atomic_t;
-
-#endif /* _MACHINE_SIGNAL_H */
diff --git a/StdLib/Include/X64/machine/types.h b/StdLib/Include/X64/machine/types.h
deleted file mode 100644
index f14625b4cd..0000000000
--- a/StdLib/Include/X64/machine/types.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/** @file
- Machine dependent type definitions.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: types.h,v 1.14 2006/09/03 20:42:14 perry Exp
- types.h 7.5 (Berkeley) 3/9/91
-**/
-#ifndef _MACHTYPES_H_
-#define _MACHTYPES_H_
-
-#include <sys/EfiCdefs.h>
-#include <machine/int_types.h>
-
-typedef PHYSICAL_ADDRESS paddr_t;
-typedef UINT64 psize_t;
-typedef PHYSICAL_ADDRESS vaddr_t;
-typedef UINT64 vsize_t;
-
-typedef INTN register_t;
-typedef INT32 register32_t;
-
-typedef volatile INT32 __cpu_simple_lock_t;
-
-#define __SIMPLELOCK_LOCKED 1
-#define __SIMPLELOCK_UNLOCKED 0
-
-/* The amd64 does not have strict alignment requirements. */
-#define __NO_STRICT_ALIGNMENT
-
-#define __HAVE_DEVICE_REGISTER
-#define __HAVE_CPU_COUNTER
-#define __HAVE_SYSCALL_INTERN
-#define __HAVE_MINIMAL_EMUL
-#define __HAVE_GENERIC_SOFT_INTERRUPTS
-#define __HAVE_CPU_MAXPROC
-#define __HAVE_TIMECOUNTER
-#define __HAVE_GENERIC_TODR
-
-#endif /* _MACHTYPES_H_ */
diff --git a/StdLib/Include/arpa/ftp.h b/StdLib/Include/arpa/ftp.h
deleted file mode 100644
index 3cb509daea..0000000000
--- a/StdLib/Include/arpa/ftp.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 1983, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)ftp.h 8.1 (Berkeley) 6/2/93
- */
-
-#ifndef _ARPA_FTP_H_
-#define _ARPA_FTP_H_
-
-/* Definitions for FTP; see RFC-765. */
-
-/*
- * Reply codes.
- */
-#define PRELIM 1 /* positive preliminary */
-#define COMPLETE 2 /* positive completion */
-#define CONTINUE 3 /* positive intermediate */
-#define TRANSIENT 4 /* transient negative completion */
-#define ERROR 5 /* permanent negative completion */
-
-/*
- * Type codes
- */
-#define TYPE_A 1 /* ASCII */
-#define TYPE_E 2 /* EBCDIC */
-#define TYPE_I 3 /* image */
-#define TYPE_L 4 /* local byte size */
-
-#ifdef FTP_NAMES
-char *typenames[] = {"0", "ASCII", "EBCDIC", "Image", "Local" };
-#endif
-
-/*
- * Form codes
- */
-#define FORM_N 1 /* non-print */
-#define FORM_T 2 /* telnet format effectors */
-#define FORM_C 3 /* carriage control (ASA) */
-#ifdef FTP_NAMES
-char *formnames[] = {"0", "Nonprint", "Telnet", "Carriage-control" };
-#endif
-
-/*
- * Structure codes
- */
-#define STRU_F 1 /* file (no record structure) */
-#define STRU_R 2 /* record structure */
-#define STRU_P 3 /* page structure */
-#ifdef FTP_NAMES
-char *strunames[] = {"0", "File", "Record", "Page" };
-#endif
-
-/*
- * Mode types
- */
-#define MODE_S 1 /* stream */
-#define MODE_B 2 /* block */
-#define MODE_C 3 /* compressed */
-#ifdef FTP_NAMES
-char *modenames[] = {"0", "Stream", "Block", "Compressed" };
-#endif
-
-/*
- * Record Tokens
- */
-#define REC_ESC '\377' /* Record-mode Escape */
-#define REC_EOR '\001' /* Record-mode End-of-Record */
-#define REC_EOF '\002' /* Record-mode End-of-File */
-
-/*
- * Block Header
- */
-#define BLK_EOR 0x80 /* Block is End-of-Record */
-#define BLK_EOF 0x40 /* Block is End-of-File */
-#define BLK_ERRORS 0x20 /* Block is suspected of containing errors */
-#define BLK_RESTART 0x10 /* Block is Restart Marker */
-
-#define BLK_BYTECOUNT 2 /* Bytes in this block */
-
-#endif /* !_FTP_H_ */
diff --git a/StdLib/Include/arpa/inet.h b/StdLib/Include/arpa/inet.h
deleted file mode 100644
index 888a7654e6..0000000000
--- a/StdLib/Include/arpa/inet.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/* $NetBSD: inet.h,v 1.21.10.1 2007/05/17 21:25:11 jdc Exp $ */
-
-/*
- * ++Copyright++ 1983, 1993
- * -
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * -
- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- * -
- * --Copyright--
- */
-
-/*%
- * @(#)inet.h 8.1 (Berkeley) 6/2/93
- * Id: inet.h,v 1.2.18.1 2005/04/27 05:00:50 sra Exp
- */
-
-#ifndef _ARPA_INET_H_
-#define _ARPA_INET_H_
-
-/* External definitions for functions in inet(3) */
-
-#include <sys/ansi.h>
-#include <sys/EfiCdefs.h>
-#include <sys/featuretest.h>
-#include <sys/types.h>
-
-#include <netinet/in.h>
-
-#if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \
- defined(_NETBSD_SOURCE)
-#ifndef socklen_t
-typedef __socklen_t socklen_t;
-#define socklen_t __socklen_t
-#endif
-#endif /* _POSIX_C_SOURCE >= 200112 || XOPEN_SOURCE >= 520 || _NETBSD_SOURCE */
-
-__BEGIN_DECLS
-in_addr_t inet_addr(const char *);
-in_addr_t inet_lnaof(struct in_addr);
-struct in_addr inet_makeaddr(in_addr_t, in_addr_t);
-in_addr_t inet_netof(struct in_addr);
-in_addr_t inet_network(const char *);
-char *inet_ntoa(struct in_addr);
-#if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \
- defined(_NETBSD_SOURCE)
-const char *inet_ntop(int, const void * __restrict,
- char * __restrict, socklen_t);
-int inet_pton(int, const char * __restrict,
- void * __restrict);
-#endif
-#if defined(_NETBSD_SOURCE)
-int inet_aton(const char *, struct in_addr *);
-char * inet_neta(u_long, char *, size_t);
-char *inet_net_ntop(int, const void *, int, char *, size_t);
-int inet_net_pton(int, const char *, void *, size_t);
-char *inet_cidr_ntop(int, const void *, int, char *, size_t);
-int inet_cidr_pton(int, const char *, void *, int *);
-u_int inet_nsap_addr(const char *, u_char *, int);
-char *inet_nsap_ntoa(int, const u_char *, char *);
-#endif
-__END_DECLS
-
-#endif /* _ARPA_INET_H_ */
diff --git a/StdLib/Include/arpa/nameser.h b/StdLib/Include/arpa/nameser.h
deleted file mode 100644
index 8f8a840f5b..0000000000
--- a/StdLib/Include/arpa/nameser.h
+++ /dev/null
@@ -1,598 +0,0 @@
-/* $NetBSD: nameser.h,v 1.19.4.1 2007/05/17 21:25:12 jdc Exp $ */
-
-/*
- * Copyright (c) 1983, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
- * Copyright (c) 1996-1999 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
- * ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * Id: nameser.h,v 1.7.18.1 2005/04/27 05:00:50 sra Exp
- */
-
-#ifndef _ARPA_NAMESER_H_
-#define _ARPA_NAMESER_H_
-
-#define BIND_4_COMPAT
-
-#include <sys/param.h>
-#if (!defined(BSD)) || (BSD < 199306)
-# include <sys/bitypes.h>
-#else
-# include <sys/types.h>
-#endif
-#include <sys/EfiCdefs.h>
-
-/*%
- * Revision information. This is the release date in YYYYMMDD format.
- * It can change every day so the right thing to do with it is use it
- * in preprocessor commands such as "#if (__NAMESER > 19931104)". Do not
- * compare for equality; rather, use it to determine whether your libbind.a
- * contains a new enough lib/nameser/ to support the feature you need.
- */
-
-#define __NAMESER 19991006 /*%< New interface version stamp. */
-
-/*
- * Define constants based on RFC0883, RFC1034, RFC 1035
- */
-#define NS_PACKETSZ 512 /*%< default UDP packet size */
-#define NS_MAXDNAME 1025 /*%< maximum domain name */
-#define NS_MAXMSG 65535 /*%< maximum message size */
-#define NS_MAXCDNAME 255 /*%< maximum compressed domain name */
-#define NS_MAXLABEL 63 /*%< maximum length of domain label */
-#define NS_HFIXEDSZ 12 /*%< #/bytes of fixed data in header */
-#define NS_QFIXEDSZ 4 /*%< #/bytes of fixed data in query */
-#define NS_RRFIXEDSZ 10 /*%< #/bytes of fixed data in r record */
-#define NS_INT32SZ 4 /*%< #/bytes of data in a u_int32_t */
-#define NS_INT16SZ 2 /*%< #/bytes of data in a u_int16_t */
-#define NS_INT8SZ 1 /*%< #/bytes of data in a u_int8_t */
-#define NS_INADDRSZ 4 /*%< IPv4 T_A */
-#define NS_IN6ADDRSZ 16 /*%< IPv6 T_AAAA */
-#define NS_CMPRSFLGS 0xc0 /*%< Flag bits indicating name compression. */
-#define NS_DEFAULTPORT 53 /*%< For both TCP and UDP. */
-
-/*
- * These can be expanded with synonyms, just keep ns_parse.c:ns_parserecord()
- * in synch with it.
- */
-typedef enum __ns_sect {
- ns_s_qd = 0, /*%< Query: Question. */
- ns_s_zn = 0, /*%< Update: Zone. */
- ns_s_an = 1, /*%< Query: Answer. */
- ns_s_pr = 1, /*%< Update: Prerequisites. */
- ns_s_ns = 2, /*%< Query: Name servers. */
- ns_s_ud = 2, /*%< Update: Update. */
- ns_s_ar = 3, /*%< Query|Update: Additional records. */
- ns_s_max = 4
-} ns_sect;
-
-/*%
- * This is a message handle. It is caller allocated and has no dynamic data.
- * This structure is intended to be opaque to all but ns_parse.c, thus the
- * leading _'s on the member names. Use the accessor functions, not the _'s.
- */
-typedef struct __ns_msg {
- const u_char *_msg, *_eom;
- uint16_t _id, _flags, _counts[ns_s_max];
- const u_char *_sections[ns_s_max];
- ns_sect _sect;
- int _rrnum;
- const u_char *_msg_ptr;
-} ns_msg;
-
-/* Private data structure - do not use from outside library. */
-struct _ns_flagdata { int mask, shift; };
-extern struct _ns_flagdata _ns_flagdata[];
-
-/* Accessor macros - this is part of the public interface. */
-#define ns_msg_getflag(handle, flag) ( \
- ((handle)._flags & _ns_flagdata[flag].mask) \
- >> _ns_flagdata[flag].shift \
- )
-
-#define ns_msg_id(handle) ((handle)._id + 0)
-#define ns_msg_base(handle) ((handle)._msg + 0)
-#define ns_msg_end(handle) ((handle)._eom + 0)
-#define ns_msg_size(handle) ((size_t)((handle)._eom - (handle)._msg))
-#define ns_msg_count(handle, section) ((handle)._counts[section] + 0)
-
-/*%
- * This is a parsed record. It is caller allocated and has no dynamic data.
- */
-typedef struct __ns_rr {
- char name[NS_MAXDNAME];
- uint16_t type;
- uint16_t rr_class;
- uint32_t ttl;
- uint16_t rdlength;
- const u_char * rdata;
-} ns_rr;
-
-/* Accessor macros - this is part of the public interface. */
-#define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".")
-#define ns_rr_type(rr) ((ns_type)((rr).type + 0))
-#define ns_rr_class(rr) ((ns_class)((rr).rr_class + 0))
-#define ns_rr_ttl(rr) ((u_long)(rr).ttl + 0)
-#define ns_rr_rdlen(rr) ((size_t)(rr).rdlength + 0)
-#define ns_rr_rdata(rr) ((rr).rdata + 0)
-
-/*%
- * These don't have to be in the same order as in the packet flags word,
- * and they can even overlap in some cases, but they will need to be kept
- * in synch with ns_parse.c:ns_flagdata[].
- */
-typedef enum __ns_flag {
- ns_f_qr, /*%< Question/Response. */
- ns_f_opcode, /*%< Operation code. */
- ns_f_aa, /*%< Authoritative Answer. */
- ns_f_tc, /*%< Truncation occurred. */
- ns_f_rd, /*%< Recursion Desired. */
- ns_f_ra, /*%< Recursion Available. */
- ns_f_z, /*%< MBZ. */
- ns_f_ad, /*%< Authentic Data (DNSSEC). */
- ns_f_cd, /*%< Checking Disabled (DNSSEC). */
- ns_f_rcode, /*%< Response code. */
- ns_f_max
-} ns_flag;
-
-/*%
- * Currently defined opcodes.
- */
-typedef enum __ns_opcode {
- ns_o_query = 0, /*%< Standard query. */
- ns_o_iquery = 1, /*%< Inverse query (deprecated/unsupported). */
- ns_o_status = 2, /*%< Name server status query (unsupported). */
- /* Opcode 3 is undefined/reserved. */
- ns_o_notify = 4, /*%< Zone change notification. */
- ns_o_update = 5, /*%< Zone update message. */
- ns_o_max = 6
-} ns_opcode;
-
-/*%
- * Currently defined response codes.
- */
-typedef enum __ns_rcode {
- ns_r_noerror = 0, /*%< No error occurred. */
- ns_r_formerr = 1, /*%< Format error. */
- ns_r_servfail = 2, /*%< Server failure. */
- ns_r_nxdomain = 3, /*%< Name error. */
- ns_r_notimpl = 4, /*%< Unimplemented. */
- ns_r_refused = 5, /*%< Operation refused. */
- /* these are for BIND_UPDATE */
- ns_r_yxdomain = 6, /*%< Name exists */
- ns_r_yxrrset = 7, /*%< RRset exists */
- ns_r_nxrrset = 8, /*%< RRset does not exist */
- ns_r_notauth = 9, /*%< Not authoritative for zone */
- ns_r_notzone = 10, /*%< Zone of record different from zone section */
- ns_r_max = 11,
- /* The following are EDNS extended rcodes */
- ns_r_badvers = 16,
- /* The following are TSIG errors */
- ns_r_badsig = 16,
- ns_r_badkey = 17,
- ns_r_badtime = 18
-} ns_rcode;
-
-/* BIND_UPDATE */
-typedef enum __ns_update_operation {
- ns_uop_delete = 0,
- ns_uop_add = 1,
- ns_uop_max = 2
-} ns_update_operation;
-
-/*
- * This RR-like structure is particular to UPDATE.
- */
-struct _ns_updrec {
- struct _ns_updrec *r_prev; /* prev record */
- struct _ns_updrec *r_next; /* next record */
- u_int8_t r_section; /* ZONE/PREREQUISITE/UPDATE */
- char * r_dname; /* owner of the RR */
- u_int16_t r_class; /* class number */
- u_int16_t r_type; /* type number */
- u_int32_t r_ttl; /* time to live */
- u_char * r_data; /* rdata fields as text string */
- u_int16_t r_size; /* size of r_data field */
- int r_opcode; /* type of operation */
- /* following fields for private use by the resolver/server routines */
- struct _ns_updrec *r_grpnext; /* next record when grouped */
- struct databuf *r_dp; /* databuf to process */
- struct databuf *r_deldp; /* databuf's deleted/overwritten */
- u_int16_t r_zone; /* zone number on server */
-};
-typedef struct _ns_updrec ns_updrec;
-
-/*%
- * This structure is used for TSIG authenticated messages
- */
-struct ns_tsig_key {
- char name[NS_MAXDNAME], alg[NS_MAXDNAME];
- unsigned char *data;
- int len;
-};
-typedef struct ns_tsig_key ns_tsig_key;
-
-/*%
- * This structure is used for TSIG authenticated TCP messages
- */
-struct ns_tcp_tsig_state {
- int counter;
- struct dst_key *key;
- void *ctx;
- unsigned char sig[NS_PACKETSZ];
- int siglen;
-};
-typedef struct ns_tcp_tsig_state ns_tcp_tsig_state;
-
-#define NS_TSIG_FUDGE 300
-#define NS_TSIG_TCP_COUNT 100
-#define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT"
-
-#define NS_TSIG_ERROR_NO_TSIG -10
-#define NS_TSIG_ERROR_NO_SPACE -11
-#define NS_TSIG_ERROR_FORMERR -12
-
-/*%
- * Currently defined type values for resources and queries.
- */
-typedef enum __ns_type {
- ns_t_invalid = 0, /*%< Cookie. */
- ns_t_a = 1, /*%< Host address. */
- ns_t_ns = 2, /*%< Authoritative server. */
- ns_t_md = 3, /*%< Mail destination. */
- ns_t_mf = 4, /*%< Mail forwarder. */
- ns_t_cname = 5, /*%< Canonical name. */
- ns_t_soa = 6, /*%< Start of authority zone. */
- ns_t_mb = 7, /*%< Mailbox domain name. */
- ns_t_mg = 8, /*%< Mail group member. */
- ns_t_mr = 9, /*%< Mail rename name. */
- ns_t_null = 10, /*%< Null resource record. */
- ns_t_wks = 11, /*%< Well known service. */
- ns_t_ptr = 12, /*%< Domain name pointer. */
- ns_t_hinfo = 13, /*%< Host information. */
- ns_t_minfo = 14, /*%< Mailbox information. */
- ns_t_mx = 15, /*%< Mail routing information. */
- ns_t_txt = 16, /*%< Text strings. */
- ns_t_rp = 17, /*%< Responsible person. */
- ns_t_afsdb = 18, /*%< AFS cell database. */
- ns_t_x25 = 19, /*%< X_25 calling address. */
- ns_t_isdn = 20, /*%< ISDN calling address. */
- ns_t_rt = 21, /*%< Router. */
- ns_t_nsap = 22, /*%< NSAP address. */
- ns_t_nsap_ptr = 23, /*%< Reverse NSAP lookup (deprecated). */
- ns_t_sig = 24, /*%< Security signature. */
- ns_t_key = 25, /*%< Security key. */
- ns_t_px = 26, /*%< X.400 mail mapping. */
- ns_t_gpos = 27, /*%< Geographical position (withdrawn). */
- ns_t_aaaa = 28, /*%< Ip6 Address. */
- ns_t_loc = 29, /*%< Location Information. */
- ns_t_nxt = 30, /*%< Next domain (security). */
- ns_t_eid = 31, /*%< Endpoint identifier. */
- ns_t_nimloc = 32, /*%< Nimrod Locator. */
- ns_t_srv = 33, /*%< Server Selection. */
- ns_t_atma = 34, /*%< ATM Address */
- ns_t_naptr = 35, /*%< Naming Authority PoinTeR */
- ns_t_kx = 36, /*%< Key Exchange */
- ns_t_cert = 37, /*%< Certification record */
- ns_t_a6 = 38, /*%< IPv6 address (deprecates AAAA) */
- ns_t_dname = 39, /*%< Non-terminal DNAME (for IPv6) */
- ns_t_sink = 40, /*%< Kitchen sink (experimentatl) */
- ns_t_opt = 41, /*%< EDNS0 option (meta-RR) */
- ns_t_apl = 42, /*%< Address prefix list (RFC3123) */
- ns_t_tkey = 249, /*%< Transaction key */
- ns_t_tsig = 250, /*%< Transaction signature. */
- ns_t_ixfr = 251, /*%< Incremental zone transfer. */
- ns_t_axfr = 252, /*%< Transfer zone of authority. */
- ns_t_mailb = 253, /*%< Transfer mailbox records. */
- ns_t_maila = 254, /*%< Transfer mail agent records. */
- ns_t_any = 255, /*%< Wildcard match. */
- ns_t_zxfr = 256, /*%< BIND-specific, nonstandard. */
- ns_t_max = 65536
-} ns_type;
-
-/* Exclusively a QTYPE? (not also an RTYPE) */
-#define ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \
- (t) == ns_t_mailb || (t) == ns_t_maila)
-/* Some kind of meta-RR? (not a QTYPE, but also not an RTYPE) */
-#define ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt)
-/* Exclusively an RTYPE? (not also a QTYPE or a meta-RR) */
-#define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t))
-#define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr)
-#define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \
- (t) == ns_t_zxfr)
-
-/*%
- * Values for class field
- */
-typedef enum __ns_class {
- ns_c_invalid = 0, /*%< Cookie. */
- ns_c_in = 1, /*%< Internet. */
- ns_c_2 = 2, /*%< unallocated/unsupported. */
- ns_c_chaos = 3, /*%< MIT Chaos-net. */
- ns_c_hs = 4, /*%< MIT Hesiod. */
- /* Query class values which do not appear in resource records */
- ns_c_none = 254, /*%< for prereq. sections in update requests */
- ns_c_any = 255, /*%< Wildcard match. */
- ns_c_max = 65536
-} ns_class;
-
-/* DNSSEC constants. */
-
-typedef enum __ns_key_types {
- ns_kt_rsa = 1, /*%< key type RSA/MD5 */
- ns_kt_dh = 2, /*%< Diffie Hellman */
- ns_kt_dsa = 3, /*%< Digital Signature Standard (MANDATORY) */
- ns_kt_private = 254 /*%< Private key type starts with OID */
-} ns_key_types;
-
-typedef enum __ns_cert_types {
- cert_t_pkix = 1, /*%< PKIX (X.509v3) */
- cert_t_spki = 2, /*%< SPKI */
- cert_t_pgp = 3, /*%< PGP */
- cert_t_url = 253, /*%< URL private type */
- cert_t_oid = 254 /*%< OID private type */
-} ns_cert_types;
-
-/* Flags field of the KEY RR rdata. */
-#define NS_KEY_TYPEMASK 0xC000 /*%< Mask for "type" bits */
-#define NS_KEY_TYPE_AUTH_CONF 0x0000 /*%< Key usable for both */
-#define NS_KEY_TYPE_CONF_ONLY 0x8000 /*%< Key usable for confidentiality */
-#define NS_KEY_TYPE_AUTH_ONLY 0x4000 /*%< Key usable for authentication */
-#define NS_KEY_TYPE_NO_KEY 0xC000 /*%< No key usable for either; no key */
-/* The type bits can also be interpreted independently, as single bits: */
-#define NS_KEY_NO_AUTH 0x8000 /*%< Key unusable for authentication */
-#define NS_KEY_NO_CONF 0x4000 /*%< Key unusable for confidentiality */
-#define NS_KEY_RESERVED2 0x2000 /* Security is *mandatory* if bit=0 */
-#define NS_KEY_EXTENDED_FLAGS 0x1000 /*%< reserved - must be zero */
-#define NS_KEY_RESERVED4 0x0800 /*%< reserved - must be zero */
-#define NS_KEY_RESERVED5 0x0400 /*%< reserved - must be zero */
-#define NS_KEY_NAME_TYPE 0x0300 /*%< these bits determine the type */
-#define NS_KEY_NAME_USER 0x0000 /*%< key is assoc. with user */
-#define NS_KEY_NAME_ENTITY 0x0200 /*%< key is assoc. with entity eg host */
-#define NS_KEY_NAME_ZONE 0x0100 /*%< key is zone key */
-#define NS_KEY_NAME_RESERVED 0x0300 /*%< reserved meaning */
-#define NS_KEY_RESERVED8 0x0080 /*%< reserved - must be zero */
-#define NS_KEY_RESERVED9 0x0040 /*%< reserved - must be zero */
-#define NS_KEY_RESERVED10 0x0020 /*%< reserved - must be zero */
-#define NS_KEY_RESERVED11 0x0010 /*%< reserved - must be zero */
-#define NS_KEY_SIGNATORYMASK 0x000F /*%< key can sign RR's of same name */
-#define NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \
- NS_KEY_RESERVED4 | \
- NS_KEY_RESERVED5 | \
- NS_KEY_RESERVED8 | \
- NS_KEY_RESERVED9 | \
- NS_KEY_RESERVED10 | \
- NS_KEY_RESERVED11 )
-#define NS_KEY_RESERVED_BITMASK2 0xFFFF /*%< no bits defined here */
-
-/* The Algorithm field of the KEY and SIG RR's is an integer, {1..254} */
-#define NS_ALG_MD5RSA 1 /*%< MD5 with RSA */
-#define NS_ALG_DH 2 /*%< Diffie Hellman KEY */
-#define NS_ALG_DSA 3 /*%< DSA KEY */
-#define NS_ALG_DSS NS_ALG_DSA
-#define NS_ALG_EXPIRE_ONLY 253 /*%< No alg, no security */
-#define NS_ALG_PRIVATE_OID 254 /*%< Key begins with OID giving alg */
-
-/* Protocol values */
-/* value 0 is reserved */
-#define NS_KEY_PROT_TLS 1
-#define NS_KEY_PROT_EMAIL 2
-#define NS_KEY_PROT_DNSSEC 3
-#define NS_KEY_PROT_IPSEC 4
-#define NS_KEY_PROT_ANY 255
-
-/* Signatures */
-#define NS_MD5RSA_MIN_BITS 512 /*%< Size of a mod or exp in bits */
-#define NS_MD5RSA_MAX_BITS 4096
- /* Total of binary mod and exp */
-#define NS_MD5RSA_MAX_BYTES ((NS_MD5RSA_MAX_BITS+7/8)*2+3)
- /* Max length of text sig block */
-#define NS_MD5RSA_MAX_BASE64 (((NS_MD5RSA_MAX_BYTES+2)/3)*4)
-#define NS_MD5RSA_MIN_SIZE ((NS_MD5RSA_MIN_BITS+7)/8)
-#define NS_MD5RSA_MAX_SIZE ((NS_MD5RSA_MAX_BITS+7)/8)
-
-#define NS_DSA_SIG_SIZE 41
-#define NS_DSA_MIN_SIZE 213
-#define NS_DSA_MAX_BYTES 405
-
-/* Offsets into SIG record rdata to find various values */
-#define NS_SIG_TYPE 0 /*%< Type flags */
-#define NS_SIG_ALG 2 /*%< Algorithm */
-#define NS_SIG_LABELS 3 /*%< How many labels in name */
-#define NS_SIG_OTTL 4 /*%< Original TTL */
-#define NS_SIG_EXPIR 8 /*%< Expiration time */
-#define NS_SIG_SIGNED 12 /*%< Signature time */
-#define NS_SIG_FOOT 16 /*%< Key footprint */
-#define NS_SIG_SIGNER 18 /*%< Domain name of who signed it */
-
-/* How RR types are represented as bit-flags in NXT records */
-#define NS_NXT_BITS 8
-#define NS_NXT_BIT_SET( n,p) (p[(n)/NS_NXT_BITS] |= (0x80>>((n)%NS_NXT_BITS)))
-#define NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS)))
-#define NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] & (0x80>>((n)%NS_NXT_BITS)))
-#define NS_NXT_MAX 127
-
-/*%
- * EDNS0 extended flags, host order.
- */
-#define NS_OPT_DNSSEC_OK 0x8000U
-
-/*%
- * Inline versions of get/put short/long. Pointer is advanced.
- */
-#define NS_GET16(s, cp) do { \
- const u_char *t_cp = (const u_char *)(cp); \
- (s) = ((uint16_t)t_cp[0] << 8) \
- | ((uint16_t)t_cp[1]) \
- ; \
- (cp) += NS_INT16SZ; \
-} while (/*CONSTCOND*/0)
-
-#define NS_GET32(l, cp) do { \
- const u_char *t_cp = (const u_char *)(cp); \
- (l) = ((uint32_t)t_cp[0] << 24) \
- | ((uint32_t)t_cp[1] << 16) \
- | ((uint32_t)t_cp[2] << 8) \
- | ((uint32_t)t_cp[3]) \
- ; \
- (cp) += NS_INT32SZ; \
-} while (/*CONSTCOND*/0)
-
-#define NS_PUT16(s, cp) do { \
- uint32_t t_s = (uint32_t)(s); \
- u_char *t_cp = (u_char *)(cp); \
- *t_cp++ = (u_char)( t_s >> 8 ); \
- *t_cp = (u_char)( t_s ); \
- (cp) += NS_INT16SZ; \
-} while (/*CONSTCOND*/0)
-
-#define NS_PUT32(l, cp) do { \
- uint32_t t_l = (uint32_t)(l); \
- u_char *t_cp = (u_char *)(cp); \
- *t_cp++ = (u_char)( t_l >> 24 ); \
- *t_cp++ = (u_char)( t_l >> 16 ); \
- *t_cp++ = (u_char)( t_l >> 8 ); \
- *t_cp = (u_char)( t_l ); \
- (cp) += NS_INT32SZ; \
-} while (/*CONSTCOND*/0)
-
-/*%
- * ANSI C identifier hiding for bind's lib/nameser.
- */
-#define ns_get16 __ns_get16
-#define ns_get32 __ns_get32
-#define ns_put16 __ns_put16
-#define ns_put32 __ns_put32
-#define ns_initparse __ns_initparse
-#define ns_skiprr __ns_skiprr
-#define ns_parserr __ns_parserr
-#define ns_sprintrr __ns_sprintrr
-#define ns_sprintrrf __ns_sprintrrf
-#define ns_format_ttl __ns_format_ttl
-#define ns_parse_ttl __ns_parse_ttl
-#define ns_datetosecs __ns_datetosecs
-#define ns_name_ntol __ns_name_ntol
-#define ns_name_ntop __ns_name_ntop
-#define ns_name_pton __ns_name_pton
-#define ns_name_unpack __ns_name_unpack
-#define ns_name_pack __ns_name_pack
-#define ns_name_compress __ns_name_compress
-#define ns_name_uncompress __ns_name_uncompress
-#define ns_name_skip __ns_name_skip
-#define ns_name_rollback __ns_name_rollback
-#define ns_sign __ns_sign
-#define ns_sign2 __ns_sign2
-#define ns_sign_tcp __ns_sign_tcp
-#define ns_sign_tcp2 __ns_sign_tcp2
-#define ns_sign_tcp_init __ns_sign_tcp_init
-#define ns_find_tsig __ns_find_tsig
-#define ns_verify __ns_verify
-#define ns_verify_tcp __ns_verify_tcp
-#define ns_verify_tcp_init __ns_verify_tcp_init
-#define ns_samedomain __ns_samedomain
-#define ns_subdomain __ns_subdomain
-#define ns_makecanon __ns_makecanon
-#define ns_samename __ns_samename
-
-__BEGIN_DECLS
-uint16_t ns_get16(const u_char *);
-uint32_t ns_get32(const u_char *);
-void ns_put16(uint16_t, u_char *);
-void ns_put32(uint32_t, u_char *);
-int ns_initparse(const u_char *, int, ns_msg *);
-int ns_skiprr(const u_char *, const u_char *, ns_sect, int);
-int ns_parserr(ns_msg *, ns_sect, int, ns_rr *);
-int ns_sprintrr(const ns_msg *, const ns_rr *,
- const char *, const char *, char *, size_t);
-int ns_sprintrrf(const u_char *, size_t, const char *,
- ns_class, ns_type, u_long, const u_char *,
- size_t, const char *, const char *,
- char *, size_t);
-int ns_format_ttl(u_long, char *, size_t);
-int ns_parse_ttl(const char *, u_long *);
-uint32_t ns_datetosecs(const char *cp, int *errp);
-int ns_name_ntol(const u_char *, u_char *, size_t);
-int ns_name_ntop(const u_char *, char *, size_t);
-int ns_name_pton(const char *, u_char *, size_t);
-int ns_name_unpack(const u_char *, const u_char *,
- const u_char *, u_char *, size_t);
-int ns_name_pack(const u_char *, u_char *, int,
- const u_char **, const u_char **);
-int ns_name_uncompress(const u_char *, const u_char *,
- const u_char *, char *, size_t);
-int ns_name_compress(const char *, u_char *, size_t,
- const u_char **, const u_char **);
-int ns_name_skip(const u_char **, const u_char *);
-void ns_name_rollback(const u_char *, const u_char **,
- const u_char **);
-int ns_sign(u_char *, int *, int, int, void *,
- const u_char *, int, u_char *, int *, time_t);
-int ns_sign2(u_char *, int *, int, int, void *,
- const u_char *, int, u_char *, int *, time_t,
- u_char **, u_char **);
-int ns_sign_tcp(u_char *, int *, int, int,
- ns_tcp_tsig_state *, int);
-int ns_sign_tcp2(u_char *, int *, int, int,
- ns_tcp_tsig_state *, int,
- u_char **, u_char **);
-int ns_sign_tcp_init(void *, const u_char *, int,
- ns_tcp_tsig_state *);
-u_char *ns_find_tsig(u_char *, u_char *);
-int ns_verify(u_char *, int *, void *,
- const u_char *, int, u_char *, int *,
- time_t *, int);
-int ns_verify_tcp(u_char *, int *, ns_tcp_tsig_state *, int);
-int ns_verify_tcp_init(void *, const u_char *, int,
- ns_tcp_tsig_state *);
-int ns_samedomain(const char *, const char *);
-int ns_subdomain(const char *, const char *);
-int ns_makecanon(const char *, char *, size_t);
-int ns_samename(const char *, const char *);
-__END_DECLS
-
-#ifdef BIND_4_COMPAT
-#include <arpa/nameser_compat.h>
-#endif
-
-#endif /* !_ARPA_NAMESER_H_ */
diff --git a/StdLib/Include/arpa/nameser_compat.h b/StdLib/Include/arpa/nameser_compat.h
deleted file mode 100644
index 524b1fd2d4..0000000000
--- a/StdLib/Include/arpa/nameser_compat.h
+++ /dev/null
@@ -1,236 +0,0 @@
-/* $NetBSD: nameser_compat.h,v 1.1.1.2.10.1 2007/05/17 21:25:12 jdc Exp $ */
-
-/* Copyright (c) 1983, 1989
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*%
- * from nameser.h 8.1 (Berkeley) 6/2/93
- * Id: nameser_compat.h,v 1.5.18.3 2006/05/19 02:36:00 marka Exp
- */
-
-#ifndef _ARPA_NAMESER_COMPAT_
-#define _ARPA_NAMESER_COMPAT_
-
-#define __BIND 19950621 /*%< (DEAD) interface version stamp. */
-
-#ifndef BYTE_ORDER
-#if (BSD >= 199103)
-# include <machine/endian.h>
-#else
-#ifdef __linux
-# include <endian.h>
-#else
-#define LITTLE_ENDIAN 1234 /*%< least-significant byte first (vax, pc) */
-#define BIG_ENDIAN 4321 /*%< most-significant byte first (IBM, net) */
-#define PDP_ENDIAN 3412 /*%< LSB first in word, MSW first in long (pdp) */
-
-#if defined(vax) || defined(ns32000) || defined(sun386) || defined(i386) || \
- defined(MIPSEL) || defined(_MIPSEL) || defined(BIT_ZERO_ON_RIGHT) || \
- defined(__i386__) || defined(__i386) || defined(__amd64__) || \
- defined(__x86_64__) || defined(MIPSEL) || defined(_MIPSEL) || \
- defined(BIT_ZERO_ON_RIGHT) || defined(__alpha__) || defined(__alpha) || \
- (defined(__Lynx__) && defined(__x86__))
-#define BYTE_ORDER LITTLE_ENDIAN
-#endif
-
-#if defined(sel) || defined(pyr) || defined(mc68000) || defined(sparc) || \
- defined(is68k) || defined(tahoe) || defined(ibm032) || defined(ibm370) || \
- defined(MIPSEB) || defined(_MIPSEB) || defined(_IBMR2) || defined(DGUX) ||\
- defined(apollo) || defined(__convex__) || defined(_CRAY) || \
- defined(__hppa) || defined(__hp9000) || \
- defined(__hp9000s300) || defined(__hp9000s700) || \
- defined(__hp3000s900) || defined(__hpux) || defined(MPE) || \
- defined (BIT_ZERO_ON_LEFT) || defined(m68k) || defined(__sparc) || \
- (defined(__Lynx__) && \
- (defined(__68k__) || defined(__sparc__) || defined(__powerpc__)))
-#define BYTE_ORDER BIG_ENDIAN
-#endif
-#endif /* __linux */
-#endif /* BSD */
-#endif /* BYTE_ORDER */
-
-#if !defined(BYTE_ORDER) || \
- (BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN && \
- BYTE_ORDER != PDP_ENDIAN)
- /* you must determine what the correct bit order is for
- * your compiler - the next line is an intentional error
- * which will force your compiles to bomb until you fix
- * the above macros.
- */
- error "Undefined or invalid BYTE_ORDER";
-#endif
-
-/*%
- * Structure for query header. The order of the fields is machine- and
- * compiler-dependent, depending on the byte/bit order and the layout
- * of bit fields. We use bit fields only in int variables, as this
- * is all ANSI requires. This requires a somewhat confusing rearrangement.
- */
-
-typedef struct {
- unsigned id :16; /*%< query identification number */
-#if BYTE_ORDER == BIG_ENDIAN
- /* fields in third byte */
- unsigned qr: 1; /*%< response flag */
- unsigned opcode: 4; /*%< purpose of message */
- unsigned aa: 1; /*%< authoritive answer */
- unsigned tc: 1; /*%< truncated message */
- unsigned rd: 1; /*%< recursion desired */
- /* fields in fourth byte */
- unsigned ra: 1; /*%< recursion available */
- unsigned unused :1; /*%< unused bits (MBZ as of 4.9.3a3) */
- unsigned ad: 1; /*%< authentic data from named */
- unsigned cd: 1; /*%< checking disabled by resolver */
- unsigned rcode :4; /*%< response code */
-#endif
-#if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
- /* fields in third byte */
- unsigned rd :1; /*%< recursion desired */
- unsigned tc :1; /*%< truncated message */
- unsigned aa :1; /*%< authoritive answer */
- unsigned opcode :4; /*%< purpose of message */
- unsigned qr :1; /*%< response flag */
- /* fields in fourth byte */
- unsigned rcode :4; /*%< response code */
- unsigned cd: 1; /*%< checking disabled by resolver */
- unsigned ad: 1; /*%< authentic data from named */
- unsigned unused :1; /*%< unused bits (MBZ as of 4.9.3a3) */
- unsigned ra :1; /*%< recursion available */
-#endif
- /* remaining bytes */
- unsigned qdcount :16; /*%< number of question entries */
- unsigned ancount :16; /*%< number of answer entries */
- unsigned nscount :16; /*%< number of authority entries */
- unsigned arcount :16; /*%< number of resource entries */
-} HEADER;
-
-#define PACKETSZ NS_PACKETSZ
-#define MAXDNAME NS_MAXDNAME
-#define MAXCDNAME NS_MAXCDNAME
-#define MAXLABEL NS_MAXLABEL
-#define HFIXEDSZ NS_HFIXEDSZ
-#define QFIXEDSZ NS_QFIXEDSZ
-#define RRFIXEDSZ NS_RRFIXEDSZ
-#define INT32SZ NS_INT32SZ
-#define INT16SZ NS_INT16SZ
-#define INT8SZ NS_INT8SZ
-#define INADDRSZ NS_INADDRSZ
-#define IN6ADDRSZ NS_IN6ADDRSZ
-#define INDIR_MASK NS_CMPRSFLGS
-#define NAMESERVER_PORT NS_DEFAULTPORT
-
-#define S_ZONE ns_s_zn
-#define S_PREREQ ns_s_pr
-#define S_UPDATE ns_s_ud
-#define S_ADDT ns_s_ar
-
-#define QUERY ns_o_query
-#define IQUERY ns_o_iquery
-#define STATUS ns_o_status
-#define NS_NOTIFY_OP ns_o_notify
-#define NS_UPDATE_OP ns_o_update
-
-#define NOERROR ns_r_noerror
-#define FORMERR ns_r_formerr
-#define SERVFAIL ns_r_servfail
-#define NXDOMAIN ns_r_nxdomain
-#define NOTIMP ns_r_notimpl
-#define REFUSED ns_r_refused
-#define YXDOMAIN ns_r_yxdomain
-#define YXRRSET ns_r_yxrrset
-#define NXRRSET ns_r_nxrrset
-#define NOTAUTH ns_r_notauth
-#define NOTZONE ns_r_notzone
-/*#define BADSIG ns_r_badsig*/
-/*#define BADKEY ns_r_badkey*/
-/*#define BADTIME ns_r_badtime*/
-
-
-#define DELETE ns_uop_delete
-#define ADD ns_uop_add
-
-#define T_A ns_t_a
-#define T_NS ns_t_ns
-#define T_MD ns_t_md
-#define T_MF ns_t_mf
-#define T_CNAME ns_t_cname
-#define T_SOA ns_t_soa
-#define T_MB ns_t_mb
-#define T_MG ns_t_mg
-#define T_MR ns_t_mr
-#define T_NULL ns_t_null
-#define T_WKS ns_t_wks
-#define T_PTR ns_t_ptr
-#define T_HINFO ns_t_hinfo
-#define T_MINFO ns_t_minfo
-#define T_MX ns_t_mx
-#define T_TXT ns_t_txt
-#define T_RP ns_t_rp
-#define T_AFSDB ns_t_afsdb
-#define T_X25 ns_t_x25
-#define T_ISDN ns_t_isdn
-#define T_RT ns_t_rt
-#define T_NSAP ns_t_nsap
-#define T_NSAP_PTR ns_t_nsap_ptr
-#define T_SIG ns_t_sig
-#define T_KEY ns_t_key
-#define T_PX ns_t_px
-#define T_GPOS ns_t_gpos
-#define T_AAAA ns_t_aaaa
-#define T_LOC ns_t_loc
-#define T_NXT ns_t_nxt
-#define T_EID ns_t_eid
-#define T_NIMLOC ns_t_nimloc
-#define T_SRV ns_t_srv
-#define T_ATMA ns_t_atma
-#define T_NAPTR ns_t_naptr
-#define T_A6 ns_t_a6
-#define T_TSIG ns_t_tsig
-#define T_IXFR ns_t_ixfr
-#define T_AXFR ns_t_axfr
-#define T_MAILB ns_t_mailb
-#define T_MAILA ns_t_maila
-#define T_ANY ns_t_any
-
-#define C_IN ns_c_in
-#define C_CHAOS ns_c_chaos
-#define C_HS ns_c_hs
-/* BIND_UPDATE */
-#define C_NONE ns_c_none
-#define C_ANY ns_c_any
-
-#define GETSHORT NS_GET16
-#define GETLONG NS_GET32
-#define PUTSHORT NS_PUT16
-#define PUTLONG NS_PUT32
-
-#endif /* _ARPA_NAMESER_COMPAT_ */
diff --git a/StdLib/Include/arpa/telnet.h b/StdLib/Include/arpa/telnet.h
deleted file mode 100644
index d7c8ecbd57..0000000000
--- a/StdLib/Include/arpa/telnet.h
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)telnet.h 8.2 (Berkeley) 12/15/93
- */
-
-#ifndef _ARPA_TELNET_H_
-#define _ARPA_TELNET_H_
-
-/*
- * Definitions for the TELNET protocol.
- */
-#define IAC 255 /* interpret as command: */
-#define DONT 254 /* you are not to use option */
-#define DO 253 /* please, you use option */
-#define WONT 252 /* I won't use option */
-#define WILL 251 /* I will use option */
-#define SB 250 /* interpret as subnegotiation */
-#define GA 249 /* you may reverse the line */
-#define EL 248 /* erase the current line */
-#define EC 247 /* erase the current character */
-#define AYT 246 /* are you there */
-#define AO 245 /* abort output--but let prog finish */
-#define IP 244 /* interrupt process--permanently */
-#define BREAK 243 /* break */
-#define DM 242 /* data mark--for connect. cleaning */
-#define NOP 241 /* nop */
-#define SE 240 /* end sub negotiation */
-#define EOR 239 /* end of record (transparent mode) */
-#define ABORT 238 /* Abort process */
-#define SUSP 237 /* Suspend process */
-#define xEOF 236 /* End of file: EOF is already used... */
-
-#define SYNCH 242 /* for telfunc calls */
-
-#ifdef TELCMDS
-char *telcmds[] = {
- "EOF", "SUSP", "ABORT", "EOR",
- "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
- "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC",
- 0
-};
-#else
-extern char *telcmds[];
-#endif
-
-#define TELCMD_FIRST xEOF
-#define TELCMD_LAST IAC
-#define TELCMD_OK(x) ((unsigned int)(x) <= TELCMD_LAST && \
- (unsigned int)(x) >= TELCMD_FIRST)
-#define TELCMD(x) telcmds[(x)-TELCMD_FIRST]
-
-/* telnet options */
-#define TELOPT_BINARY 0 /* 8-bit data path */
-#define TELOPT_ECHO 1 /* echo */
-#define TELOPT_RCP 2 /* prepare to reconnect */
-#define TELOPT_SGA 3 /* suppress go ahead */
-#define TELOPT_NAMS 4 /* approximate message size */
-#define TELOPT_STATUS 5 /* give status */
-#define TELOPT_TM 6 /* timing mark */
-#define TELOPT_RCTE 7 /* remote controlled transmission and echo */
-#define TELOPT_NAOL 8 /* negotiate about output line width */
-#define TELOPT_NAOP 9 /* negotiate about output page size */
-#define TELOPT_NAOCRD 10 /* negotiate about CR disposition */
-#define TELOPT_NAOHTS 11 /* negotiate about horizontal tabstops */
-#define TELOPT_NAOHTD 12 /* negotiate about horizontal tab disposition */
-#define TELOPT_NAOFFD 13 /* negotiate about formfeed disposition */
-#define TELOPT_NAOVTS 14 /* negotiate about vertical tab stops */
-#define TELOPT_NAOVTD 15 /* negotiate about vertical tab disposition */
-#define TELOPT_NAOLFD 16 /* negotiate about output LF disposition */
-#define TELOPT_XASCII 17 /* extended ascic character set */
-#define TELOPT_LOGOUT 18 /* force logout */
-#define TELOPT_BM 19 /* byte macro */
-#define TELOPT_DET 20 /* data entry terminal */
-#define TELOPT_SUPDUP 21 /* supdup protocol */
-#define TELOPT_SUPDUPOUTPUT 22 /* supdup output */
-#define TELOPT_SNDLOC 23 /* send location */
-#define TELOPT_TTYPE 24 /* terminal type */
-#define TELOPT_EOR 25 /* end or record */
-#define TELOPT_TUID 26 /* TACACS user identification */
-#define TELOPT_OUTMRK 27 /* output marking */
-#define TELOPT_TTYLOC 28 /* terminal location number */
-#define TELOPT_3270REGIME 29 /* 3270 regime */
-#define TELOPT_X3PAD 30 /* X.3 PAD */
-#define TELOPT_NAWS 31 /* window size */
-#define TELOPT_TSPEED 32 /* terminal speed */
-#define TELOPT_LFLOW 33 /* remote flow control */
-#define TELOPT_LINEMODE 34 /* Linemode option */
-#define TELOPT_XDISPLOC 35 /* X Display Location */
-#define TELOPT_OLD_ENVIRON 36 /* Old - Environment variables */
-#define TELOPT_AUTHENTICATION 37/* Authenticate */
-#define TELOPT_ENCRYPT 38 /* Encryption option */
-#define TELOPT_NEW_ENVIRON 39 /* New - Environment variables */
-#define TELOPT_EXOPL 255 /* extended-options-list */
-
-
-#define NTELOPTS (1+TELOPT_NEW_ENVIRON)
-#ifdef TELOPTS
-char *telopts[NTELOPTS+1] = {
- "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
- "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
- "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
- "NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO",
- "DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT",
- "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
- "TACACS UID", "OUTPUT MARKING", "TTYLOC",
- "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
- "LINEMODE", "XDISPLOC", "OLD-ENVIRON", "AUTHENTICATION",
- "ENCRYPT", "NEW-ENVIRON",
- 0
-};
-#define TELOPT_FIRST TELOPT_BINARY
-#define TELOPT_LAST TELOPT_NEW_ENVIRON
-#define TELOPT_OK(x) ((unsigned int)(x) <= TELOPT_LAST)
-#define TELOPT(x) telopts[(x)-TELOPT_FIRST]
-#endif
-
-/* sub-option qualifiers */
-#define TELQUAL_IS 0 /* option is... */
-#define TELQUAL_SEND 1 /* send option */
-#define TELQUAL_INFO 2 /* ENVIRON: informational version of IS */
-#define TELQUAL_REPLY 2 /* AUTHENTICATION: client version of IS */
-#define TELQUAL_NAME 3 /* AUTHENTICATION: client version of IS */
-
-#define LFLOW_OFF 0 /* Disable remote flow control */
-#define LFLOW_ON 1 /* Enable remote flow control */
-#define LFLOW_RESTART_ANY 2 /* Restart output on any char */
-#define LFLOW_RESTART_XON 3 /* Restart output only on XON */
-
-/*
- * LINEMODE suboptions
- */
-
-#define LM_MODE 1
-#define LM_FORWARDMASK 2
-#define LM_SLC 3
-
-#define MODE_EDIT 0x01
-#define MODE_TRAPSIG 0x02
-#define MODE_ACK 0x04
-#define MODE_SOFT_TAB 0x08
-#define MODE_LIT_ECHO 0x10
-
-#define MODE_MASK 0x1f
-
-/* Not part of protocol, but needed to simplify things... */
-#define MODE_FLOW 0x0100
-#define MODE_ECHO 0x0200
-#define MODE_INBIN 0x0400
-#define MODE_OUTBIN 0x0800
-#define MODE_FORCE 0x1000
-
-#define SLC_SYNCH 1
-#define SLC_BRK 2
-#define SLC_IP 3
-#define SLC_AO 4
-#define SLC_AYT 5
-#define SLC_EOR 6
-#define SLC_ABORT 7
-#define SLC_EOF 8
-#define SLC_SUSP 9
-#define SLC_EC 10
-#define SLC_EL 11
-#define SLC_EW 12
-#define SLC_RP 13
-#define SLC_LNEXT 14
-#define SLC_XON 15
-#define SLC_XOFF 16
-#define SLC_FORW1 17
-#define SLC_FORW2 18
-#define SLC_MCL 19
-#define SLC_MCR 20
-#define SLC_MCWL 21
-#define SLC_MCWR 22
-#define SLC_MCBOL 23
-#define SLC_MCEOL 24
-#define SLC_INSRT 25
-#define SLC_OVER 26
-#define SLC_ECR 27
-#define SLC_EWR 28
-#define SLC_EBOL 29
-#define SLC_EEOL 30
-
-#define NSLC 30
-
-/*
- * For backwards compatability, we define SLC_NAMES to be the
- * list of names if SLC_NAMES is not defined.
- */
-#define SLC_NAMELIST "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \
- "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \
- "LNEXT", "XON", "XOFF", "FORW1", "FORW2", \
- "MCL", "MCR", "MCWL", "MCWR", "MCBOL", \
- "MCEOL", "INSRT", "OVER", "ECR", "EWR", \
- "EBOL", "EEOL", \
- 0
-
-#ifdef SLC_NAMES
-char *slc_names[] = {
- SLC_NAMELIST
-};
-#else
-extern char *slc_names[];
-#define SLC_NAMES SLC_NAMELIST
-#endif
-
-#define SLC_NAME_OK(x) ((unsigned int)(x) <= NSLC)
-#define SLC_NAME(x) slc_names[x]
-
-#define SLC_NOSUPPORT 0
-#define SLC_CANTCHANGE 1
-#define SLC_VARIABLE 2
-#define SLC_DEFAULT 3
-#define SLC_LEVELBITS 0x03
-
-#define SLC_FUNC 0
-#define SLC_FLAGS 1
-#define SLC_VALUE 2
-
-#define SLC_ACK 0x80
-#define SLC_FLUSHIN 0x40
-#define SLC_FLUSHOUT 0x20
-
-#define OLD_ENV_VAR 1
-#define OLD_ENV_VALUE 0
-#define NEW_ENV_VAR 0
-#define NEW_ENV_VALUE 1
-#define ENV_ESC 2
-#define ENV_USERVAR 3
-
-/*
- * AUTHENTICATION suboptions
- */
-
-/*
- * Who is authenticating who ...
- */
-#define AUTH_WHO_CLIENT 0 /* Client authenticating server */
-#define AUTH_WHO_SERVER 1 /* Server authenticating client */
-#define AUTH_WHO_MASK 1
-
-/*
- * amount of authentication done
- */
-#define AUTH_HOW_ONE_WAY 0
-#define AUTH_HOW_MUTUAL 2
-#define AUTH_HOW_MASK 2
-
-#define AUTHTYPE_NULL 0
-#define AUTHTYPE_KERBEROS_V4 1
-#define AUTHTYPE_KERBEROS_V5 2
-#define AUTHTYPE_SPX 3
-#define AUTHTYPE_MINK 4
-#define AUTHTYPE_CNT 5
-
-#define AUTHTYPE_TEST 99
-
-#ifdef AUTH_NAMES
-char *authtype_names[] = {
- "NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK",
- 0
-};
-#else
-extern char *authtype_names[];
-#endif
-
-#define AUTHTYPE_NAME_OK(x) ((unsigned int)(x) < AUTHTYPE_CNT)
-#define AUTHTYPE_NAME(x) authtype_names[x]
-
-/*
- * ENCRYPTion suboptions
- */
-#define ENCRYPT_IS 0 /* I pick encryption type ... */
-#define ENCRYPT_SUPPORT 1 /* I support encryption types ... */
-#define ENCRYPT_REPLY 2 /* Initial setup response */
-#define ENCRYPT_START 3 /* Am starting to send encrypted */
-#define ENCRYPT_END 4 /* Am ending encrypted */
-#define ENCRYPT_REQSTART 5 /* Request you start encrypting */
-#define ENCRYPT_REQEND 6 /* Request you end encrypting */
-#define ENCRYPT_ENC_KEYID 7
-#define ENCRYPT_DEC_KEYID 8
-#define ENCRYPT_CNT 9
-
-#define ENCTYPE_ANY 0
-#define ENCTYPE_DES_CFB64 1
-#define ENCTYPE_DES_OFB64 2
-#define ENCTYPE_CNT 3
-
-#ifdef ENCRYPT_NAMES
-char *encrypt_names[] = {
- "IS", "SUPPORT", "REPLY", "START", "END",
- "REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID",
- 0
-};
-char *enctype_names[] = {
- "ANY", "DES_CFB64", "DES_OFB64",
- 0
-};
-#else
-extern char *encrypt_names[];
-extern char *enctype_names[];
-#endif
-
-
-#define ENCRYPT_NAME_OK(x) ((unsigned int)(x) < ENCRYPT_CNT)
-#define ENCRYPT_NAME(x) encrypt_names[x]
-
-#define ENCTYPE_NAME_OK(x) ((unsigned int)(x) < ENCTYPE_CNT)
-#define ENCTYPE_NAME(x) enctype_names[x]
-
-#endif /* !_TELNET_H_ */
diff --git a/StdLib/Include/assert.h b/StdLib/Include/assert.h
deleted file mode 100644
index 26c7037ea6..0000000000
--- a/StdLib/Include/assert.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/** @file
- Provides a definition of the assert macro used to insert diagnostic messages
- into code.
-
- This header file defines the assert macro and refers to the NDEBUG macro,
- which is NOT defined in this file.
-
- Unlike other header files, assert.h is designed to be included multiple
- times, with potentially different behavior on each inclusion.
-
- If the NDEBUG macro is defined at the point where assert.h
- is included, the assert macro is defined so as to not produce code.
- Otherwise, the assertion is tested and if the assertion is FALSE
- (e.g. evaluates to 0) a diagnostic message of the form<BR>
- "Assertion failed: (EXPR), file FILE, function FUNC, line LINE.\n"<BR>
- is produced.
- A FALSE evaluation will also result in the application being aborted.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <sys/EfiCdefs.h>
-
-#undef assert ///< Remove any existing definition for assert.
-
-/** Internal helper function for the assert macro.
- The __assert function prints a diagnostic message then exits the
- currently running application.
-
- This function should NEVER be called directly.
-
- Some pre-processors do not provide the __func__ identifier. When that is
- the case, __func__ will be NULL. This function accounts for this and
- will modify the diagnostic message appropriately.
-
-
- @param[in] file The name of the file containing the assert.
- @param[in] func The name of the function containing the assert.
- @param[in] line The line number the assert is located on.
- @param[in] failedexpr A literal representation of the assert's expression.
-
- @return The __assert function will never return. It aborts the
- current application and returns to the environment that
- the application was launched from.
-**/
-extern void
-__assert(const char *file, const char *func, int line, const char *failedexpr);
-
-/** The assert macro puts diagnostic tests into programs; it expands to a
- void expression.
-
- When it is executed, if expression (which must have a scalar type) is
- FALSE (that is, compares equal to 0), the assert macro writes information
- about the particular call that failed (including the text of the argument,
- the name of the source file, the source line number, and the name of the
- enclosing function - the latter are respectively the values of the
- preprocessing macros __FILE__ and __LINE__ and of the identifier __func__)
- on the standard error stream. It then calls the abort function.
-
- If NDEBUG is not defined, Expression is evaluated. If Expression evaluates to FALSE,
- then __assert is called passing in the source filename, source function, source
- line number, and the Expression.
-
- @param Expression Boolean expression.
-
-@{
-**/
-#ifdef NDEBUG
-#define assert(Expression) /* ignored */
-
-#else
-#define assert(Expression) ((Expression) ? (void)0 :\
- __assert(__FILE__, __func__, __LINE__, #Expression) )
-#endif
-/// @}
-/* END of file assert.h */
diff --git a/StdLib/Include/ctype.h b/StdLib/Include/ctype.h
deleted file mode 100644
index d35367f520..0000000000
--- a/StdLib/Include/ctype.h
+++ /dev/null
@@ -1,241 +0,0 @@
-/** @file
- Single-byte character classification, case conversion macros, and
- function declarations.
-
- The header <ctype.h> declares several functions useful for testing and mapping
- characters. In all cases, the argument is an int, the value of which shall be
- representable as an unsigned char or shall equal the value of the macro EOF.
- If the argument has any other value, the behavior is undefined.
-
- The behavior of these functions is affected by the current locale. The
- default is the "C" locale.
-
- The term "printing character" refers to a member of a locale-specific
- set of characters, each of which occupies at least one printing position on an output
- device; the term control character refers to a member of a locale-specific
- set of characters that are not printing characters.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _CTYPE_H
-#define _CTYPE_H
-#include <sys/EfiCdefs.h>
-#include <sys/_ctype.h>
-
-__BEGIN_DECLS
-// Declarations for the classification Functions
-
-/** The isalnum function tests for any character for which isalpha or isdigit
- is true.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int isalnum(int c);
-
-/** The isalpha function tests for any character for which isupper or islower
- is true, or any character that is one of a locale-specific set of
- alphabetic characters for which none of iscntrl, isdigit, ispunct, or
- isspace is true. In the "C" locale, isalpha returns true only for the
- characters for which isupper or islower is true.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int isalpha(int c);
-
-/** The isblank function tests that a character is a white-space character that results
- in a number of space (' ') characters being sent to the output device. In the C locale
- this is either ' ' or '\t'.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int isblank(int);
-
-/** The iscntrl function tests for any control character.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int iscntrl(int c);
-
-/** The isdigit function tests for any decimal-digit character.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int isdigit(int c);
-
-/** The isgraph function tests for any printing character except space (' ').
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int isgraph(int c);
-
-/** The islower function tests for any character that is a lowercase letter or
- is one of a locale-specific set of characters for which none of iscntrl,
- isdigit, ispunct, or isspace is true. In the "C" locale, islower returns
- true only for the lowercase letters.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int islower(int c);
-
-/** The isprint function tests for any printing character including space (' ').
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int isprint(int c);
-
-/** The ispunct function tests for any printing character that is one of a
- locale-specific set of punctuation characters for which neither isspace nor
- isalnum is true. In the "C" locale, ispunct returns true for every printing
- character for which neither isspace nor isalnum is true.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int ispunct(int c);
-
-/** The isspace function tests for any character that is a standard white-space
- character or is one of a locale-specific set of characters for which
- isalnum is false. The standard white-space characters are the following:
- space (' '), form feed ('\f'), new-line ('\n'), carriage return ('\r'),
- horizontal tab ('\t'), and vertical tab ('\v'). In the "C" locale, isspace
- returns true only for the standard white-space characters.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int isspace(int c);
-
-/** The isupper function tests for any character that is an uppercase letter or
- is one of a locale-specific set of characters for which none of iscntrl,
- isdigit, ispunct, or isspace is true. In the "C" locale, isupper returns
- true only for the uppercase letters.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int isupper(int c);
-
-/** The isxdigit function tests for any hexadecimal-digit character.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int isxdigit(int c);
-
-/** The isascii function tests that a character is one of the 128 7-bit ASCII characters.
- This function is not part of the C standard, but is commonly used.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int isascii(int c);
-
-/** Test whether a character is one of the characters used as a separator
- between directory elements in a path.
-
- Characters are '/', '\\'
-
- This non-standard function is unique to this implementation.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int isDirSep(int c);
-
-/** The tolower function converts an uppercase letter to a corresponding
- lowercase letter.
-
- @param[in] c The character to be converted.
-
- @return If the argument is a character for which isupper is true and
- there are one or more corresponding characters, as specified by
- the current locale, for which islower is true, the tolower
- function returns one of the corresponding characters (always the
- same one for any given locale); otherwise, the argument is
- returned unchanged.
-**/
-int tolower(int c);
-
-/** The toupper function converts a lowercase letter to a corresponding
- uppercase letter.
-
- @param[in] c The character to be converted.
-
- @return If the argument is a character for which islower is true and
- there are one or more corresponding characters, as specified by
- the current locale, for which isupper is true, the toupper
- function returns one of the corresponding characters (always the
- same one for any given locale); otherwise, the argument is
- returned unchanged.
-**/
-int toupper(int c);
-
-__END_DECLS
-
-/** Character Classification Macros.
- Undefine individually or define NO_CTYPE_MACROS, before including <ctype.h>,
- in order to use the Function version of the character classification macros.
-@{
-**/
-#ifndef NO_CTYPE_MACROS
- #define isalnum(c) (__isCClass( (int)c, (_CD | _CU | _CL | _XA)))
- #define isalpha(c) (__isCClass( (int)c, (_CU | _CL | _XA)))
- #define iscntrl(c) (__isCClass( (int)c, (_CC)))
- #define isdigit(c) (__isCClass( (int)c, (_CD)))
- #define isgraph(c) (__isCClass( (int)c, (_CG)))
- #define islower(c) (__isCClass( (int)c, (_CL)))
- #define isprint(c) (__isCClass( (int)c, (_CS | _CG)))
- #define ispunct(c) (__isCClass( (int)c, (_CP)))
- #define isspace(c) (__isCClass( (int)c, (_CW)))
- #define isupper(c) (__isCClass( (int)c, (_CU)))
- #define isxdigit(c) (__isCClass( (int)c, (_CD | _CX)))
- #define isDirSep(c) (__isCClass( (int)c, (_C0)))
- #define tolower(c) (__toLower((int)c))
- #define toupper(c) (__toUpper((int)c))
-#endif /* NO_CTYPE_MACROS */
-///@}
-
-#endif /* _CTYPE_H */
diff --git a/StdLib/Include/dirent.h b/StdLib/Include/dirent.h
deleted file mode 100644
index d67a9e7bfb..0000000000
--- a/StdLib/Include/dirent.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/** @file
- Declarations pertaining to directory entries under the UEFI environment.
-
- The information is based upon the EFI_FILE_INFO structure
- in MdePkg/Include/Guid/FileInfo.h.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1989, 1993
- The Regents of the University of California. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- NetBSD: dirent.h,v 1.30 2008/01/09 20:55:03 christos Exp
- @(#)dirent.h 8.2 (Berkeley) 7/28/94
-**/
-#ifndef _DIRENT_H_
-#define _DIRENT_H_
-
-#include <sys/featuretest.h>
-#include <sys/types.h>
-
-#include <sys/dirent.h>
-
-typedef struct _dirdesc DIR;
-
-/* definitions for library routines operating on directories. */
-#define DIRBLKSIZ 1024
-
-/* structure describing an open directory. */
-struct _dirdesc {
- int dd_fd; /* file descriptor associated with directory */
- long dd_loc; /* offset in current buffer */
- long dd_size; /* amount of data returned by getdents */
- char *dd_buf; /* data buffer */
- int dd_len; /* size of data buffer */
- off_t dd_seek; /* magic cookie returned by getdents */
- void *dd_internal; /* state for seekdir/telldir */
- int dd_flags; /* flags for readdir */
- void *dd_lock; /* lock for concurrent access */
-};
-
-#define dirfd(dirp) ((dirp)->dd_fd)
-
-/* flags for __opendir2() */
-#define DTF_HIDEW 0x0001 /* hide whiteout entries */
-#define DTF_NODUP 0x0002 /* don't return duplicate names */
-#define DTF_REWIND 0x0004 /* rewind after reading union stack */
-#define __DTF_READALL 0x0008 /* everything has been read */
-
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
- int closedir(DIR *);
- void rewinddir(DIR *);
-
- DIR *opendir(const char *) __RENAME(__opendir30);
- struct dirent *readdir(DIR *) __RENAME(__readdir30);
- int readdir_r(DIR * __restrict, struct dirent * __restrict,
- struct dirent ** __restrict) __RENAME(__readdir_r30);
-
- void seekdir(DIR *, long);
- long telldir(DIR *);
- DIR *__opendir2(const char *, int) __RENAME(__opendir230);
-
- //#ifndef __LIBC12_SOURCE__
- //int scandir(const char *, struct dirent ***,
- // int (*)(const struct dirent *), int (*)(const void *,
- // const void *)) __RENAME(__scandir30);
- //int getdents(int, char *, size_t) __RENAME(__getdents30);
- //#endif
-
- //int alphasort(const void *, const void *);
-__END_DECLS
-
-
-#endif /* _DIRENT_H_ */
diff --git a/StdLib/Include/err.h b/StdLib/Include/err.h
deleted file mode 100644
index 6207d18039..0000000000
--- a/StdLib/Include/err.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/** @file error and warning output messages
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-
-#ifndef _ERR_H_
-#define _ERR_H_
-
-//
-// Error and Warning outputs
-//
-
-void errx (int eval, const char *fmt, ...);
-void err (int eval, const char *fmt, ...);
-void warnx(const char *fmt, ...);
-void warn (const char *fmt, ...);
-
-#endif \ No newline at end of file
diff --git a/StdLib/Include/errno.h b/StdLib/Include/errno.h
deleted file mode 100644
index a819d0849c..0000000000
--- a/StdLib/Include/errno.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/** @file
- The header <errno.h> defines several macros, all relating to the reporting of
- error conditions.
-
- The ISO/IEC 9899 specification requires that these be macros.
-
- The macros expand to integral constant expressions
- with distinct nonzero values, suitable for use in #if preprocessing
- directives; the variable errno which expands to a modifiable lvalue that has type int,
- the value of which is set to a positive error number by several library
- functions; and the variable EFIerrno which is an extension allowing the return status
- of the underlying UEFI functions to be returned.
-
- The value of errno and EFIerrno is zero at program startup. On program startup, errno
- is initialized to zero but is never set to zero by
- any library function. The value of errno may be set to a non-zero value by
- a library function call whether or not there is an error, provided the use
- of errno is not documented in the description of the function in
- the governing standard: ISO/IEC 9899:1990 with Amendment 1 or ISO/IEC 9899:199409.
-
- EFIerrno, like errno, should only be checked if it is known that the preceeding function call
- called a UEFI function. Functions in which UEFI functions are called dependent upon context
- or parameter values should guarantee that EFIerrno is set to zero by default, or to the status
- value returned by any UEFI functions which are called.
-
- All macro definitions in this list must begin with the letter 'E'
- and be followed by a digit or an uppercase letter.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _ERRNO_H
-#define _ERRNO_H
-#include <sys/EfiCdefs.h>
-#include <sys/errno.h>
-
-extern int errno;
-extern RETURN_STATUS EFIerrno;
-
-// Define error number in terms of the ENUM in <sys/errno.h>
-
-#define ERESTART -1 /* restart syscall */
-#define ESUCCESS __ESUCCESS /* No Problems */
-
-#define EMINERRORVAL __EMINERRORVAL /* 1 The lowest valid error value */
-
-#define EPERM __EPERM /* 1 Operation not permitted */
-#define ENOENT __ENOENT /* 2 No such file or directory */
-#define ESRCH __ESRCH /* 3 No such process */
-#define EINTR __EINTR /* 4 Interrupted system call */
-#define EIO __EIO /* 5 Input/output error */
-#define ENXIO __ENXIO /* 6 Device not configured */
-#define E2BIG __E2BIG /* 7 Argument list too long */
-#define ENOEXEC __ENOEXEC /* 8 Exec format error */
-#define EBADF __EBADF /* 9 Bad file descriptor */
-#define ECHILD __ECHILD /* 10 No child processes */
-#define EDEADLK __EDEADLK /* 11 Resource deadlock avoided */
-#define ENOMEM __ENOMEM /* 12 Cannot allocate memory */
-#define EACCES __EACCES /* 13 Permission denied */
-#define EFAULT __EFAULT /* 14 Bad address */
-#define ENOTBLK __ENOTBLK /* 15 Block device required */
-#define EBUSY __EBUSY /* 16 Device busy */
-#define EEXIST __EEXIST /* 17 File exists */
-#define EXDEV __EXDEV /* 18 Cross-device link */
-#define ENODEV __ENODEV /* 19 Operation not supported by device */
-#define ENOTDIR __ENOTDIR /* 20 Not a directory */
-#define EISDIR __EISDIR /* 21 Is a directory */
-#define EINVAL __EINVAL /* 22 Invalid argument */
-#define ENFILE __ENFILE /* 23 Too many open files in system */
-#define EMFILE __EMFILE /* 24 Too many open file descriptors */
-#define ENOTTY __ENOTTY /* 25 Inappropriate ioctl for device */
-#define ETXTBSY __ETXTBSY /* 26 Text file busy */
-#define EFBIG __EFBIG /* 27 File too large */
-#define ENOSPC __ENOSPC /* 28 No space left on device */
-#define ESPIPE __ESPIPE /* 29 Illegal seek */
-#define EROFS __EROFS /* 30 Read-only filesystem */
-#define EMLINK __EMLINK /* 31 Too many links */
-#define EPIPE __EPIPE /* 32 Broken pipe */
-
-/* math software -- these are the only two values required by the C Standard */
-#define EDOM __EDOM /* 33 Numerical argument out of domain */
-#define ERANGE __ERANGE /* 34 Result too large */
-
-/* non-blocking and interrupt i/o */
-#define EAGAIN __EAGAIN /* 35 Resource temporarily unavailable */
-#define EWOULDBLOCK __EWOULDBLOCK /* 35 Operation would block */
-#define EINPROGRESS __EINPROGRESS /* 36 Operation now in progress */
-#define EALREADY __EALREADY /* 37 Operation already in progress */
-
-/* ipc/network software -- argument errors */
-#define ENOTSOCK __ENOTSOCK /* 38 Socket operation on non-socket */
-#define EDESTADDRREQ __EDESTADDRREQ /* 39 Destination address required */
-#define EMSGSIZE __EMSGSIZE /* 40 Message too long */
-#define EPROTOTYPE __EPROTOTYPE /* 41 Protocol wrong type for socket */
-#define ENOPROTOOPT __ENOPROTOOPT /* 42 Protocol not available */
-#define EPROTONOSUPPORT __EPROTONOSUPPORT /* 43 Protocol not supported */
-#define ESOCKTNOSUPPORT __ESOCKTNOSUPPORT /* 44 Socket type not supported */
-#define EOPNOTSUPP __EOPNOTSUPP /* 45 Operation not supported */
-#define ENOTSUP __ENOTSUP /* 45 Operation not supported */
-#define EPFNOSUPPORT __EPFNOSUPPORT /* 46 Protocol family not supported */
-#define EAFNOSUPPORT __EAFNOSUPPORT /* 47 Address family not supported by protocol family */
-#define EADDRINUSE __EADDRINUSE /* 48 Address already in use */
-#define EADDRNOTAVAIL __EADDRNOTAVAIL /* 49 Can't assign requested address */
-
-/* ipc/network software -- operational errors */
-#define ENETDOWN __ENETDOWN /* 50 Network is down */
-#define ENETUNREACH __ENETUNREACH /* 51 Network is unreachable */
-#define ENETRESET __ENETRESET /* 52 Network dropped connection on reset */
-#define ECONNABORTED __ECONNABORTED /* 53 Software caused connection abort */
-#define ECONNRESET __ECONNRESET /* 54 Connection reset by peer */
-#define ENOBUFS __ENOBUFS /* 55 No buffer space available */
-#define EISCONN __EISCONN /* 56 Socket is already connected */
-#define ENOTCONN __ENOTCONN /* 57 Socket is not connected */
-#define ESHUTDOWN __ESHUTDOWN /* 58 Can't send after socket shutdown */
-#define ETOOMANYREFS __ETOOMANYREFS /* 59 Too many references: can't splice */
-#define ETIMEDOUT __ETIMEDOUT /* 60 Operation timed out */
-#define ECONNREFUSED __ECONNREFUSED /* 61 Connection refused */
-#define ELOOP __ELOOP /* 62 Too many levels of symbolic links */
-#define ENAMETOOLONG __ENAMETOOLONG /* 63 File name too long */
-#define EHOSTDOWN __EHOSTDOWN /* 64 Host is down */
-#define EHOSTUNREACH __EHOSTUNREACH /* 65 No route to host */
-
-#define ENOTEMPTY __ENOTEMPTY /* 66 Directory not empty */
-
-/* quotas, etc. */
-#define EPROCLIM __EPROCLIM /* 67 Too many processes */
-#define EUSERS __EUSERS /* 68 Too many users */
-#define EDQUOT __EDQUOT /* 69 Disc quota exceeded */
-
-/* Network File System */
-#define ESTALE __ESTALE /* 70 Stale NFS file handle */
-#define EREMOTE __EREMOTE /* 71 Too many levels of remote in path */
-#define EBADRPC __EBADRPC /* 72 RPC struct is bad */
-#define ERPCMISMATCH __ERPCMISMATCH /* 73 RPC version wrong */
-#define EPROGUNAVAIL __EPROGUNAVAIL /* 74 RPC prog. not avail */
-#define EPROGMISMATCH __EPROGMISMATCH /* 75 Program version wrong */
-#define EPROCUNAVAIL __EPROCUNAVAIL /* 76 Bad procedure for program */
-#define ENOLCK __ENOLCK /* 77 No locks available */
-#define ENOSYS __ENOSYS /* 78 Function not implemented */
-#define EFTYPE __EFTYPE /* 79 Inappropriate file type or format */
-#define EAUTH __EAUTH /* 80 Authentication error */
-#define ENEEDAUTH __ENEEDAUTH /* 81 Need authenticator */
-#define EIDRM __EIDRM /* 82 Identifier removed */
-#define ENOMSG __ENOMSG /* 83 No message of desired type */
-#define EOVERFLOW __EOVERFLOW /* 84 Value too large to be stored in data type */
-#define EILSEQ __EILSEQ /* 85 Illegal byte sequence */
-#define ENOTHING_1 __ENOTHING_1 /* 86 Place Holder */
-#define ECANCELED __ECANCELED /* 87 Operation canceled */
-
-#define EBADMSG __EBADMSG /* 88 Bad message */
-#define ENODATA __ENODATA /* 89 No message available */
-#define ENOSR __ENOSR /* 90 No STREAM resources */
-#define ENOSTR __ENOSTR /* 91 Not a STREAM */
-#define ETIME __ETIME /* 92 STREAM ioctl timeout */
-
-#define ENOATTR __ENOATTR /* 93 Attribute not found */
-
-#define EDOOFUS __EDOOFUS /* 94 Programming error */
-
-#define EMULTIHOP __EMULTIHOP /* 95 Multihop attempted */
-#define ENOLINK __ENOLINK /* 96 Link has been severed */
-#define EPROTO __EPROTO /* 97 Protocol error */
-
-#define EBUFSIZE __EBUFSIZE /* 98 Buffer too small to hold result */
-
-#define EMAXERRORVAL __EMAXERRORVAL /* One more than the highest defined error value. */
-
-#endif /* _ERRNO_H */
diff --git a/StdLib/Include/fcntl.h b/StdLib/Include/fcntl.h
deleted file mode 100644
index f5b4474572..0000000000
--- a/StdLib/Include/fcntl.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <sys/fcntl.h>
diff --git a/StdLib/Include/float.h b/StdLib/Include/float.h
deleted file mode 100644
index 4a590d052c..0000000000
--- a/StdLib/Include/float.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/** @file
- Limits and constants for floating-point operations.
-
- Accuracy of the floating-point operations provided by this implementation
- of the Standard C Library has not been determined.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <machine/float.h>
diff --git a/StdLib/Include/glob.h b/StdLib/Include/glob.h
deleted file mode 100644
index 5842130447..0000000000
--- a/StdLib/Include/glob.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* $NetBSD: glob.h,v 1.24 2008/09/13 17:05:07 christos Exp $ */
-
-/*
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Guido van Rossum.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)glob.h 8.1 (Berkeley) 6/2/93
- */
-
-#ifndef _GLOB_H_
-#define _GLOB_H_
-
-#include <sys/cdefs.h>
-#include <sys/featuretest.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifndef __gl_size_t
-#define __gl_size_t size_t
-#endif
-#ifndef __gl_stat_t
-#define __gl_stat_t struct stat
-#endif
-
-typedef struct {
- __gl_size_t gl_pathc; /* Count of total paths so far. */
- __gl_size_t gl_matchc; /* Count of paths matching pattern. */
- __gl_size_t gl_offs; /* Reserved at beginning of gl_pathv. */
- int gl_flags; /* Copy of flags parameter to glob. */
- char **gl_pathv; /* List of paths matching pattern. */
- /* Copy of errfunc parameter to glob. */
- int (*gl_errfunc)(const char *, int);
-
- /*
- * Alternate filesystem access methods for glob; replacement
- * versions of closedir(3), readdir(3), opendir(3), stat(2)
- * and lstat(2).
- */
- void (*gl_closedir)(void *);
- struct dirent *(*gl_readdir)(void *);
- void *(*gl_opendir)(const char *);
- int (*gl_lstat)(const char *, __gl_stat_t *);
- int (*gl_stat)(const char *, __gl_stat_t *);
-} glob_t;
-
-#define GLOB_APPEND 0x0001 /* Append to output from previous call. */
-#define GLOB_DOOFFS 0x0002 /* Use gl_offs. */
-#define GLOB_ERR 0x0004 /* Return on error. */
-#define GLOB_MARK 0x0008 /* Append / to matching directories. */
-#define GLOB_NOCHECK 0x0010 /* Return pattern itself if nothing matches. */
-#define GLOB_NOSORT 0x0020 /* Don't sort. */
-#define GLOB_NOESCAPE 0x1000 /* Disable backslash escaping. */
-
-#define GLOB_NOSPACE (-1) /* Malloc call failed. */
-#define GLOB_ABORTED (-2) /* Unignored error. */
-#define GLOB_NOMATCH (-3) /* No match, and GLOB_NOCHECK was not set. */
-#define GLOB_NOSYS (-4) /* Implementation does not support function. */
-
-#if defined(_NETBSD_SOURCE) || defined(HAVE_NBTOOL_CONFIG_H)
-#define GLOB_ALTDIRFUNC 0x0040 /* Use alternately specified directory funcs. */
-#define GLOB_BRACE 0x0080 /* Expand braces ala csh. */
-#define GLOB_MAGCHAR 0x0100 /* Pattern had globbing characters. */
-#define GLOB_NOMAGIC 0x0200 /* GLOB_NOCHECK without magic chars (csh). */
-#define GLOB_LIMIT 0x0400 /* Limit memory used by matches to ARG_MAX */
-#define GLOB_TILDE 0x0800 /* Expand tilde names from the passwd file. */
-/* GLOB_NOESCAPE 0x1000 above */
-#define GLOB_PERIOD 0x2000 /* Allow metachars to match leading periods. */
-#define GLOB_NO_DOTDIRS 0x4000 /* Make . and .. vanish from wildcards. */
-#define GLOB_QUOTE 0 /* source compatibility */
-
-#define GLOB_ABEND GLOB_ABORTED /* source compatibility */
-#endif
-
-__BEGIN_DECLS
-#ifndef __LIBC12_SOURCE__
-int glob(const char * __restrict, int,
- int (*)(const char *, int), glob_t * __restrict) __RENAME(__glob30);
-void globfree(glob_t *) __RENAME(__globfree30);
-#endif
-__END_DECLS
-
-#endif /* !_GLOB_H_ */
diff --git a/StdLib/Include/ieeefp.h b/StdLib/Include/ieeefp.h
deleted file mode 100644
index ee3edf5566..0000000000
--- a/StdLib/Include/ieeefp.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* $NetBSD: ieeefp.h,v 1.9 2011/03/27 05:13:15 mrg Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by J.T. Conklin, Apr 6, 1995
- * Public domain.
- */
-
-#ifndef _IEEEFP_H_
-#define _IEEEFP_H_
-
-#include <sys/cdefs.h>
-#include <machine/ieeefp.h>
-
-__BEGIN_DECLS
-typedef fp_rnd fp_rnd_t;
-#ifdef _X86_IEEEFP_H_ /* XXX */
-typedef fp_prec fp_prec_t;
-#endif
-typedef fp_except fp_except_t;
-
-fp_rnd_t fpgetround(void);
-fp_rnd_t fpsetround(fp_rnd_t);
-#ifdef _X86_IEEEFP_H_ /* XXX */
-fp_prec_t fpgetprec(void);
-fp_prec_t fpsetprec(fp_prec_t);
-#endif
-fp_except_t fpgetmask(void);
-fp_except_t fpsetmask(fp_except_t);
-fp_except_t fpgetsticky(void);
-fp_except_t fpsetsticky(fp_except_t);
-fp_except_t fpresetsticky(fp_except_t);
-__END_DECLS
-
-#endif /* _IEEEFP_H_ */
diff --git a/StdLib/Include/inttypes.h b/StdLib/Include/inttypes.h
deleted file mode 100644
index 51cdb5b879..0000000000
--- a/StdLib/Include/inttypes.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* $NetBSD: inttypes.h,v 1.4 2005/04/18 19:47:51 kleink Exp $ */
-
-/*-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef _INTTYPES_H_
-#define _INTTYPES_H_
-
-#include <sys/EfiCdefs.h>
-//#include <sys/inttypes.h>
-#include <sys/stdint.h>
-#include <machine/ansi.h>
-
-#ifdef _EFI_WCHAR_T
- typedef _EFI_WCHAR_T wchar_t;
- #undef _EFI_WCHAR_T
- #undef _BSD_WCHAR_T_
-#endif
-
-__BEGIN_DECLS
-intmax_t strtoimax(const char * __restrict,
- char ** __restrict, int);
-uintmax_t strtoumax(const char * __restrict,
- char ** __restrict, int);
-intmax_t wcstoimax(const wchar_t * __restrict,
- wchar_t ** __restrict, int);
-uintmax_t wcstoumax(const wchar_t * __restrict,
- wchar_t ** __restrict, int);
-__END_DECLS
-
-#endif /* !_INTTYPES_H_ */
diff --git a/StdLib/Include/iso646.h b/StdLib/Include/iso646.h
deleted file mode 100644
index d9dc860346..0000000000
--- a/StdLib/Include/iso646.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/** @file
- Provides alternative "spellings" for several C operators.
-
- The header <iso646.h> defines the following eleven macros (on the left) that expand
- to the corresponding tokens (on the right).
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _ISO646_H
-#define _ISO646_H
-#include <sys/EfiCdefs.h>
-
-#define and && ///< Logical AND of two boolean expressions
-#define and_eq &= ///< Bitwise AND with assignment to lval
-#define bitand & ///< Bitwise AND of two scalar expressions
-#define bitor | ///< Bitwise OR of two scalar expressions
-#define compl ~ ///< Binary complement
-#define not ! ///< Logical complement of a boolean expression
-#define not_eq != ///< Not-equal comparison
-#define or || ///< Logical OR of two boolean expressions
-#define or_eq |= ///< Bitwise OR with assignment to lval
-#define xor ^ ///< Exclusive OR
-#define xor_eq ^= ///< Exclusive OR with assignment to lval
-
-#endif /* _ISO646_H */
diff --git a/StdLib/Include/langinfo.h b/StdLib/Include/langinfo.h
deleted file mode 100644
index 70a8f1b5a0..0000000000
--- a/StdLib/Include/langinfo.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* $NetBSD: langinfo.h,v 1.9 2005/02/03 04:39:32 perry Exp $ */
-
-/*
- * Written by J.T. Conklin <jtc@NetBSD.org>
- * Public domain.
- */
-
-#ifndef _LANGINFO_H_
-#define _LANGINFO_H_
-
-#include <sys/EfiCdefs.h>
-#include <nl_types.h>
-
-#define D_T_FMT ((nl_item)0) /* String for formatting date and
- time */
-#define D_FMT ((nl_item)1) /* Date format string */
-#define T_FMT ((nl_item)2) /* Time format string */
-#define T_FMT_AMPM ((nl_item)3) /* Time format string with 12 hour
- clock */
-#define AM_STR ((nl_item)4) /* Ante Meridiem afix */
-#define PM_STR ((nl_item)5) /* Post Meridiem afix */
-
-#define DAY_1 ((nl_item)6) /* Name of the first day of the week */
-#define DAY_2 ((nl_item)7)
-#define DAY_3 ((nl_item)8)
-#define DAY_4 ((nl_item)9)
-#define DAY_5 ((nl_item)10)
-#define DAY_6 ((nl_item)11)
-#define DAY_7 ((nl_item)12)
-
-#define ABDAY_1 ((nl_item)13) /* Abbrev. name of the first day of
- the week */
-#define ABDAY_2 ((nl_item)14)
-#define ABDAY_3 ((nl_item)15)
-#define ABDAY_4 ((nl_item)16)
-#define ABDAY_5 ((nl_item)17)
-#define ABDAY_6 ((nl_item)18)
-#define ABDAY_7 ((nl_item)19)
-
-#define MON_1 ((nl_item)20) /* Name of the first month */
-#define MON_2 ((nl_item)21)
-#define MON_3 ((nl_item)22)
-#define MON_4 ((nl_item)23)
-#define MON_5 ((nl_item)24)
-#define MON_6 ((nl_item)25)
-#define MON_7 ((nl_item)26)
-#define MON_8 ((nl_item)27)
-#define MON_9 ((nl_item)28)
-#define MON_10 ((nl_item)29)
-#define MON_11 ((nl_item)30)
-#define MON_12 ((nl_item)31)
-
-#define ABMON_1 ((nl_item)32) /* Abbrev. name of the first month */
-#define ABMON_2 ((nl_item)33)
-#define ABMON_3 ((nl_item)34)
-#define ABMON_4 ((nl_item)35)
-#define ABMON_5 ((nl_item)36)
-#define ABMON_6 ((nl_item)37)
-#define ABMON_7 ((nl_item)38)
-#define ABMON_8 ((nl_item)39)
-#define ABMON_9 ((nl_item)40)
-#define ABMON_10 ((nl_item)41)
-#define ABMON_11 ((nl_item)42)
-#define ABMON_12 ((nl_item)43)
-
-#define RADIXCHAR ((nl_item)44) /* Radix character */
-#define THOUSEP ((nl_item)45) /* Separator for thousands */
-#define YESSTR ((nl_item)46) /* Affirmitive response for yes/no
- queries */
-#define YESEXPR ((nl_item)47) /* Affirmitive response for yes/no
- queries */
-#define NOSTR ((nl_item)48) /* Negative response for yes/no
- queries */
-#define NOEXPR ((nl_item)49) /* Negative response for yes/no
- queries */
-#define CRNCYSTR ((nl_item)50) /* Currency symbol */
-
-#define CODESET ((nl_item)51) /* codeset name */
-
-#define ERA ((nl_item)52) /* Era description segments */
-#define ERA_D_FMT ((nl_item)53) /* Era date format string */
-#define ERA_D_T_FMT ((nl_item)54) /* Era date and time format string */
-#define ERA_T_FMT ((nl_item)55) /* Era time format string */
-
-#define ALT_DIGITS ((nl_item)56) /* Alternative symbols for digits */
-
-__BEGIN_DECLS
-char *nl_langinfo(nl_item);
-__END_DECLS
-
-#endif /* _LANGINFO_H_ */
diff --git a/StdLib/Include/libgen.h b/StdLib/Include/libgen.h
deleted file mode 100644
index 3ee673832d..0000000000
--- a/StdLib/Include/libgen.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/** @file
-
-Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
-This program and the accompanying materials are licensed and made available under
-the terms and conditions of the BSD License that accompanies this distribution.
-The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php.
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-char *dirname(char *path);
diff --git a/StdLib/Include/limits.h b/StdLib/Include/limits.h
deleted file mode 100644
index 5da4032f02..0000000000
--- a/StdLib/Include/limits.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/** @file
- The header <limits.h> defines several macros that expand to various limits and
- parameters of the standard integer types.
-
- The values given below are constant expressions suitable for
- use in #if preprocessing directives. Except for CHAR_BIT and
- MB_LEN_MAX, they have the same
- type as would an expression that is an object of the corresponding type
- converted according to the integer promotions.
-
- Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _LIMITS_H
-#define _LIMITS_H
-#include <sys/EfiCdefs.h>
-#include <Library/PcdLib.h>
-
-/* Get the architecturally defined limits for this compilation unit. */
-#include <machine/limits.h>
-
-/* Define the values required by the ISO/IEC 9899 Specification. */
-
-/** Maximum number of bytes in a multibyte character, for any supported locale. **/
-#define MB_LEN_MAX 4 /* UTF-8 can require up to 4 bytes */
-
-/** Number of bits comprising the smallest object that is not a bit-field (byte). **/
-#define CHAR_BIT __CHAR_BIT
-
-/** Minimum value for an object of type signed char. **/
-#define SCHAR_MIN __SCHAR_MIN
-
-/** Maximum value for an object of type signed char. **/
-#define SCHAR_MAX __SCHAR_MAX
-
-/** Maximum value for an object of type unsigned char. **/
-#define UCHAR_MAX __UCHAR_MAX
-
-#ifdef __CHAR_UNSIGNED__
- /** Maximum value for an object of type char. **/
- #define CHAR_MAX UCHAR_MAX
- /** Minimum value for an object of type char. **/
- #define CHAR_MIN 0
-#else
- /** Maximum value for an object of type char. **/
- #define CHAR_MAX SCHAR_MAX
- /** Minimum value for an object of type char. **/
- #define CHAR_MIN SCHAR_MIN
-#endif
-
-/** Minimum value for an object of type short int. **/
-#define SHRT_MIN __SHRT_MIN
-
-/** Maximum value for an object of type short int. **/
-#define SHRT_MAX __SHRT_MAX
-
-/** Maximum value for an object of type unsigned short int. **/
-#define USHRT_MAX __USHRT_MAX
-
-/** Minimum value for an object of type int. **/
-#define INT_MIN __INT_MIN
-
-/** Maximum value for an object of type int. **/
-#define INT_MAX __INT_MAX
-
-/** Maximum value for an object of type unsigned int. **/
-#define UINT_MAX __UINT_MAX
-
-/** Minimum value for an object of type long int. **/
-#define LONG_MIN __LONG_MIN
-
-/** Maximum value for an object of type long int. **/
-#define LONG_MAX __LONG_MAX
-
-/** Maximum value for an object of type unsigned long int. **/
-#define ULONG_MAX __ULONG_MAX
-
-/** Minimum value for an object of type long long int. **/
-#define LLONG_MIN __LLONG_MIN
-
-/** Maximum value for an object of type long long int. **/
-#define LLONG_MAX __LLONG_MAX
-
-/** Maximum value for an object of type unsigned long long int. **/
-#define ULLONG_MAX __ULLONG_MAX
-
-/* Object limits used in the Standard Libraries */
-#if (PcdGet32(PcdMaximumAsciiStringLength) > 0)
- /** Maximum length of an arbitrary "narrow-character" string. **/
- #define ASCII_STRING_MAX PcdGet32(PcdMaximumAsciiStringLength)
-#else
- /** Maximum length of an arbitrary "narrow-character" string. **/
- #define ASCII_STRING_MAX 256
-#endif
-
-#if (PcdGet32(PcdMaximumUnicodeStringLength) > 0)
- /** Maximum length of an arbitrary "wide-character" string. **/
- #define UNICODE_STRING_MAX PcdGet32(PcdMaximumUnicodeStringLength)
-#else
- /** Maximum length of an arbitrary "wide-character" string. **/
- #define UNICODE_STRING_MAX 512
-#endif
-
-/* Limits for BSD Compatibility */
-#define NL_TEXTMAX 2048
-
-#include <sys/syslimits.h>
-
-#endif /* _LIMITS_H */
diff --git a/StdLib/Include/locale.h b/StdLib/Include/locale.h
deleted file mode 100644
index 93aac0ad40..0000000000
--- a/StdLib/Include/locale.h
+++ /dev/null
@@ -1,194 +0,0 @@
-/** @file
- Localization functions and macros.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1991, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)locale.h 8.1 (Berkeley) 6/2/93
- * $NetBSD: locale.h,v 1.14 2005/02/03 04:39:32 perry Exp
-**/
-
-#ifndef _LOCALE_H_
-#define _LOCALE_H_
-
-/** This is a structure containing members pertaining to the formatting and display of numeric values.
- Each member of this structure is commented with its value in the "C" locale.
-
- The decimal_point member must point to a string with a length greater than zero.
- All other pointer members may point to "" in order to indicate that the value is not available
- in the current locale, or that it is of zero length. Except for grouping and mon_grouping, the
- strings start and end in the initial shift state.
-
- The remaining members, of type char, are non-negative numbers or CHAR_MAX, which indicates that
- the value is not available in the current locale.
-
- Members grouping and mon_grouping point to strings where each element (character) of the string
- indicates the size of the corresponding group of digits and is interpreted as follows:
- - CHAR_MAX No further grouping is to be performed.
- - 0 The previous element is to be repeatedly used for the remainder of the digits.
- - other The ISO specification states: "The integer value is the number of digits that
- compose the current group. The next element is examined to determine the size
- of the next group of digits before the current group." The EDK II implementation
- interprets this to mean that the groups are specified left-to-right.
-
- The *_sep_by_space members are interpreted as follows:
- - 0 No space separates the currency symbol and value.
- - 1 If the currency symbol and sign string are adjacent, a space separates them from the
- value; otherwise, a space separates the currency symbol from the value.
- - 2 If the currency symbol and sign string are adjacent, a space separates them;
- otherwise, a space separates the sign string from the value.
- For int_p_sep_by_space and int_n_sep_by_space, the fourth character of int_curr_symbol is
- used instead of a space.
-
- The values of the *_sign_posn members are interpreted as follows:
- - 0 Parentheses surround the quantity and currency symbol.
- - 1 The sign string precedes the quantity and currency symbol.
- - 2 The sign string succeeds the quantity and currency symbol.
- - 3 The sign string immediately precedes the currency symbol.
- - 4 The sign string immediately succeeds the currency symbol.
-**/
-struct lconv {
- char *decimal_point; /**< "." Non-monetary decimal-point. */
- char *thousands_sep; /**< "" Separates groups of digits before the decimal-point */
- char *grouping; /**< "" A string whose elements (characters) indicate the size
- of each group of digits in formatted nonmonetary quantities. */
- char *int_curr_symbol; /**< "" A 4-character string providing the international currency
- symbol. The first three characters contain the alphabetic
- international currency symbol in accordance with those
- specified in ISO 4217. The fourth character, immediately
- preceding the null character, is the character used to separate
- the international currency symbol from the monetary quantity. */
- char *currency_symbol; /**< "" The local currency symbol for the current locale. */
- char *mon_decimal_point; /**< "" The decimal point used for monetary values. */
- char *mon_thousands_sep; /**< "" The separator for digit groups preceeding the decimal-point. */
- char *mon_grouping; /**< "" A string, like grouping, for monetary values. */
- char *positive_sign; /**< "" A string to indicate a non-negative monetary value. */
- char *negative_sign; /**< "" A string to indicate a negative monetary value. */
- char int_frac_digits; /**< CHAR_MAX The number of digits after the decimal-point for international
- monetary values. */
- char frac_digits; /**< CHAR_MAX The number of digits after the decimal-point for local
- monetary values. */
- char p_cs_precedes; /**< CHAR_MAX Set to 1 or 0 if the currency_symbol respectively precedes or
- succeeds the value for non-negative local monetary values. */
- char p_sep_by_space; /**< CHAR_MAX Value specifying the separation between the currency_symbol,
- the sign string, and the value for non-negative local values. */
- char n_cs_precedes; /**< CHAR_MAX Set to 1 or 0 if the currency_symbol respectively precedes or
- succeeds the value for negative local monetary values. */
- char n_sep_by_space; /**< CHAR_MAX Value specifying the separation between the currency_symbol,
- the sign string, and the value for negative local values. */
- char p_sign_posn; /**< CHAR_MAX Value specifying the positioning of the positive_sign for a
- non-negative local monetary quantity. */
- char n_sign_posn; /**< CHAR_MAX Value specifying the positioning of the negative_sign for a
- negative local monetary quantity. */
- char int_p_cs_precedes; /**< CHAR_MAX Set to 1 or 0 if the currency_symbol respectively precedes or
- succeeds the value for non-negative international monetary values. */
- char int_n_cs_precedes; /**< CHAR_MAX Set to 1 or 0 if the currency_symbol respectively precedes or
- succeeds the value for negative international monetary values. */
- char int_p_sep_by_space; /**< CHAR_MAX Value specifying the separation between the currency_symbol,
- the sign string, and the value for non-negative international values. */
- char int_n_sep_by_space; /**< CHAR_MAX Value specifying the separation between the currency_symbol,
- the sign string, and the value for negative international values. */
- char int_p_sign_posn; /**< CHAR_MAX Value specifying the positioning of the positive_sign for a
- non-negative international monetary quantity. */
- char int_n_sign_posn; /**< CHAR_MAX Value specifying the positioning of the negative_sign for a
- negative international monetary quantity. */
-};
-
-/** @{
- These macros expand to integer expressions suitable for use as the first
- argument (category) to the setlocale() function.
-
- Only the first six macros are required by the C language specification.
- Implementations are free to extend this list, as has been done with LC_MESSAGES,
- with additional macro definitions, beginning with the characters LC_ and
- an uppercase letter.
-**/
-#define LC_ALL 0 ///< The application's entire locale.
-#define LC_COLLATE 1 ///< Affects the behavior of the strcoll and strxfrm functions.
-#define LC_CTYPE 2 ///< Affects the behavior of the character handling, multibyte, and wide character functions.
-#define LC_MONETARY 3 ///< Affects monetary formatting information.
-#define LC_NUMERIC 4 ///< Affects the decimal-point character and non-monetary formatting information.
-#define LC_TIME 5 ///< Affects the behavior of the strftime and wcsftime functions.
-#define LC_MESSAGES 6
-#define _LC_LAST 7 ///< Number of defined macros. Marks end.
-/*@}*/
-
-#include <sys/EfiCdefs.h>
-
-/** @fn char *setlocale(int category, const char *locale)
-
- @brief The setlocale function is used to retrieve or change parts or all of the current locale.
-
- @details If locale is NULL, or the same as the current locale, this function just retrieves the
- values for the specified category in the current locale. Otherwise, the specified category
- in the current locale is set to the corresponding values from the specified locale and a pointer
- to the new values is returned.
-
- @param[in] category The portion of the current locale to be affected by this call.
- The LC_ macros list the supported categories and the meaning of each.
- @param[in] locale A value of "C" for locale specifies the minimal environment for C translation;
- A value of "" specifies the native environment, which is "C" for this
- implementation. If locale is NULL, the current locale is specified.
-
- @return A pointer to the string associated with the specified category for the new locale,
- a pointer to the string associated with the category for the current locale,
- or NULL if category or locale can not be honored. The return value should not be
- modified by the program, but may be overwritten by subsequent calls to either
- setlocale or localeconv.
-**/
-
-/** @fn struct lconv *localeconv(void)
-
- @brief The localeconv function returns a pointer to a lconv structure containing the appropriate
- values for the current locale.
-
- @return A pointer to a filled-in lconv structure. The returned structure should not be
- modified by the program, but may be overwritten by subsequent calls to either
- setlocale or localeconv.
-**/
-
-__BEGIN_DECLS
-#ifdef __SETLOCALE_SOURCE__
- char *setlocale(int category, const char *locale);
- char *__setlocale(int category, const char *locale);
-#else /* !__SETLOCALE_SOURCE__ */
- char *setlocale(int category, const char *locale) __RENAME(__setlocale_mb_len_max_32);
-#endif /* !__SETLOCALE_SOURCE__ */
-struct lconv *localeconv(void);
- char *__setlocale_mb_len_max_32(int category, const char *locale);
-__END_DECLS
-
-#endif /* _LOCALE_H_ */
diff --git a/StdLib/Include/math.h b/StdLib/Include/math.h
deleted file mode 100644
index 3041120087..0000000000
--- a/StdLib/Include/math.h
+++ /dev/null
@@ -1,442 +0,0 @@
-/** @file
- Floating-point Math functions and macros.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
-
- NetBSD: math.h,v 1.44 2006/03/25 16:41:11 xtraeme Exp
- dlibm.h 5.1 93/09/24
-**/
-#ifndef _MATH_H_
-#define _MATH_H_
-
-#include <sys/EfiCdefs.h>
-#include <sys/featuretest.h>
-
-/** @{
- @brief These are forward references to unions and macros used internaly
- by the implementation of the math functions and macros.
-**/
-union __float_u {
- unsigned char __dummy[sizeof(float)];
- float __val;
-};
-
-union __double_u {
- unsigned char __dummy[sizeof(double)];
- double __val;
-};
-
-union __long_double_u {
- unsigned char __dummy[sizeof(long double)];
- long double __val;
-};
-
-#include <machine/math.h> /* may use __float_u, __double_u, or __long_double_u */
-
-#ifdef __HAVE_LONG_DOUBLE
-#define __fpmacro_unary_floating(__name, __arg0) \
- /* LINTED */ \
- ((sizeof (__arg0) == sizeof (float)) \
- ? __ ## __name ## f (__arg0) \
- : (sizeof (__arg0) == sizeof (double)) \
- ? __ ## __name ## d (__arg0) \
- : __ ## __name ## l (__arg0))
-#else
-#define __fpmacro_unary_floating(__name, __arg0) \
- /* LINTED */ \
- ((sizeof (__arg0) == sizeof (float)) \
- ? __ ## __name ## f (__arg0) \
- : __ ## __name ## d (__arg0))
-#endif /* __HAVE_LONG_DOUBLE */
-
-extern const union __double_u __infinity;
-extern const union __float_u __infinityf;
-extern const union __long_double_u __infinityl;
-
-/* C99 7.12.3.1 int fpclassify(real-floating x) */
-#define fpclassify(__x) __fpmacro_unary_floating(fpclassify, __x)
-
-/* C99 7.12.3.3 int isinf(real-floating x) */
-#ifdef __isinf
- #define isinf(__x) __isinf(__x)
-#else
- #define isinf(__x) __fpmacro_unary_floating(isinf, __x)
-#endif
-
-/* C99 7.12.3.4 int isnan(real-floating x) */
-#ifdef __isnan
- #define isnan(__x) __isnan(__x)
-#else
- #define isnan(__x) __fpmacro_unary_floating(isnan, __x)
-#endif
-/*@)*/
-
-/*#############################################################
- * ISO C95
- */
-
-/**@{
- Double, float, and long double versions, respectively, of HUGE_VAL.
-*/
-#define HUGE_VAL __infinity.__val
-#define HUGE_VALF __infinityf.__val
-#define HUGE_VALL __infinityl.__val
-/*@)*/
-
-__BEGIN_DECLS
-/*
- * ANSI/POSIX
- */
-/** Compute the principal value of the arc cosine of Arg.
-
- @param[in] Arg The value to compute the arc cosine of.
-
- @return The computed value of the arc cosine of Arg in the interval [0,pi] radians.
- If Arg is not in the interval [-1,+1], errno is set to EDOM.
-**/
-double acos(double Arg);
-
-/** Compute the principal value of the arc sine of Arg.
-
- @param[in] Arg The value to compute the arc sine of.
-
- @return The computed value of the arc sine of Arg in the interval [-pi/2,+pi/2] radians.
- If Arg is not in the interval [-1,+1], errno is set to EDOM.
-**/
-double asin(double Arg);
-
-/** Compute the principal value of the arc tangent of Arg.
-
- @param[in] Arg The value to compute the arc tangent of.
-
- @return The computed value of the arc tangent of Arg in the interval [-pi/2,+pi/2] radians.
-**/
-double atan(double Arg);
-
-/** Compute the value of the arc tangent of (Num / Denom).
- The sign of both arguments is used to determine the quadrant of the return value.
-
- @param[in] Num The numerator of the value to compute the arc tangent of.
- @param[in] Denom The denominator of the value to compute the arc tangent of.
-
- @return The computed value of the arc tangent of (Num / Denom) in the interval [-pi,+pi] radians.
-**/
-double atan2(double Num, double Denom);
-
-/** Compute the value of the cosine of Arg, measured in radians.
-
- @param[in] Arg The value to compute the cosine of.
-
- @return The computed value of the cosine of Arg.
-**/
-double cos(double Arg);
-
-/** Compute the value of the sine of Arg.
-
- @param[in] Arg The value to compute the sine of.
-
- @return The computed value of the sine of Arg.
-**/
-double sin(double Arg);
-
-/** Compute the value of the tangent of Arg.
-
- @param[in] Arg The value to compute the tangent of.
-
- @return The computed value of the tangent of Arg.
-**/
-double tan(double Arg);
-
-
-/** Compute the value of the hyperbolic cosine of Arg.
-
- @param[in] Arg The value to compute the hyperbolic cosine of.
-
- @return The computed value of the hyperbolic cosine of Arg.
- If the magnitude of Arg is too large, errno is set to ERANGE.
-**/
-double cosh(double Arg);
-
-/** Compute the value of the hyperbolic sine of Arg.
-
- @param[in] Arg The value to compute the hyperbolic sine of.
-
- @return The computed value of the hyperbolic sine of Arg.
- If the magnitude of Arg is too large, errno is set to ERANGE.
-**/
-double sinh(double Arg);
-
-/** Compute the value of the hyperbolic tangent of Arg.
-
- @param[in] Arg The value to compute the hyperbolic tangent of.
-
- @return The computed value of the hyperbolic tangent of Arg.
-**/
-double tanh(double Arg);
-
-
-/** Compute the base-e exponential of Arg.
-
- @param[in] Arg The value to compute the base-e exponential of.
-
- @return The computed value of e**Arg.
- If the magnitude of Arg is too large, errno is set to ERANGE.
-**/
-double exp(double Arg);
-
-/** Break a floating-point number into a normalized fraction and an integral power of 2.
-
- @param[in] Value The floating-point value to be broken down.
- @param[out] Exp A pointer to an integer object to receive the integral power of 2 exponent.
-
- @return The frexp function returns a value R, such that Value == R**Exp.
- If Value is zero, both parts of the result are zero.
-**/
-double frexp(double Value, int *Exp);
-
-/** Multiply a floating-point number, Value, by an integral power of 2, Exp.
-
- @param[in] Value The floating-point value to be multiplied.
- @param[out] Exp The integral power of 2 to multiply Value by.
-
- @return The ldexp function returns a value R, such that R = Value x 2**Exp.
- If a range error occurs, errno will be set to ERANGE.
-**/
-double ldexp(double Value, int Exp);
-
-/** Compute the natural logarithm of Arg.
-
- @param[in] Arg The value to compute the natural logarithm of.
-
- @return The log function returns log base-e of Arg. If Arg is negative, errno is set to EDOM.
- Otherwise, errno will be set to ERANGE if a range error occurs.
-**/
-double log(double Arg);
-
-/** Compute the common (base-10) logarithm of Arg.
-
- @param[in] Arg The value to compute the common logarithm of.
-
- @return The log10 function returns log base-10 of Arg. If Arg is negative, errno is set to EDOM.
- Otherwise, errno will be set to ERANGE if Arg is 0.
-**/
-double log10(double Arg);
-
-/** Compute the base-2 logarithm of Arg.
-
- @param[in] Arg The value to compute the base-2 logarithm of.
-
- @return The log function returns log base-2 of Arg. If Arg is negative, errno is set to EDOM.
- Otherwise, errno will be set to ERANGE if Arg is 0.
-**/
-double log2(double Arg);
-
-/** Break Value into integral and fractional parts, each of which has the same type and sign
- as Value. Store the integral part in the object pointed to by Integ and return the
- fractional part.
-
- @param[in] Value The value to compute the arc cosine of.
- @param[out] Integ Pointer to where the integral component is to be stored.
-
- @return The fractional part of Value is returned directly while the integral part is
- returned in the location pointed to by Integ.
-**/
-double modf(double Value, double *Integ);
-
-/** Compute Value raised to the power Exp.
-
- @param[in] Value The value to be raised.
- @param[in] Exp The power Value is to be raised to.
-
- @return The pow function returns Value**Exp. If an error occurs, errno will be set as follows:
- - EDOM: Value is finite and negative and Exp is finite and not an integer.
- - EDOM: Both Value and Exp are zero.
- - EDOM: Value is zero and Exp is less than zero.
-**/
-double pow(double Value, double Exp);
-
-/** Compute the non-negative square root of Arg.
-
- @param[in] Arg The value to compute the square root of.
-
- @return The square root of Arg. If Arg is less than zero, errno is set to EDOM.
-**/
-double sqrt(double Arg);
-
-
-/** Compute the smallest integer value not less than Arg.
-
- @param[in] Arg The value to compute the ceiling of.
-
- @return The ceiling of Arg expressed as a floating-point number.
-**/
-double ceil(double Arg);
-
-/** Compute the absolute value of Arg.
-
- @param[in] Arg The value to compute the absolute value of.
-
- @return The absolute value of Arg.
-**/
-double fabs(double Arg);
-
-/** Compute the largest integer value not greater than Arg.
-
- @param[in] Arg The value to compute the floor of.
-
- @return The largest integer value not greater than Arg, expressed as a floating-point number.
-**/
-double floor(double);
-
-/** Compute the floating-point remainder of A1 / A2.
-
- @param[in] A1 The dividend.
- @param[in] A2 The divisor.
-
- @return The remainder of A1 / A2 with the same sign as A1. If A2 is zero, the fmod function
- returns 0.
-**/
-double fmod(double A1, double A2);
-
-
-int finite(double);
-double expm1(double);
-
-/**@{
- C99, Posix, or NetBSD functions that are not part of the C95 specification.
-**/
-/*
- * Functions callable from C, intended to support IEEE arithmetic.
- */
-double copysign(double, double);
-double scalbn(double, int);
-
-/*
- * Library implementation
- */
-int __fpclassifyf(float);
-int __fpclassifyd(double);
-int __isinff(float);
-int __isinfd(double);
-int __isnanf(float);
-int __isnand(double);
-
-#ifdef __HAVE_LONG_DOUBLE
- int __fpclassifyl(long double);
- int __isinfl(long double);
- int __isnanl(long double);
-#endif /* __HAVE_LONG_DOUBLE */
-/*@}*/
-
-__END_DECLS
-
-/**@{
- Extensions provided by NetBSD but not required by the C95 standard.
-**/
-extern int signgam;
-
-enum fdversion {fdlibm_ieee = -1, fdlibm_svid, fdlibm_xopen, fdlibm_posix};
-
-#define _LIB_VERSION_TYPE enum fdversion
-#define _LIB_VERSION _fdlib_version
-
-/** If global variable _LIB_VERSION is not desirable, one may
- * change the following to be a constant by:
- * #define _LIB_VERSION_TYPE const enum version
- * In that case, after one initializes the value _LIB_VERSION (see
- * s_lib_version.c) during compile time, it cannot be modified
- * in the middle of a program
- */
-extern _LIB_VERSION_TYPE _LIB_VERSION;
-
-#define _IEEE_ fdlibm_ieee
-#define _SVID_ fdlibm_svid
-#define _XOPEN_ fdlibm_xopen
-#define _POSIX_ fdlibm_posix
-
-#ifndef __cplusplus
-struct exception {
- int type;
- char *name;
- double arg1;
- double arg2;
- double retval;
-};
-#endif
-
-#define HUGE MAXFLOAT
-
-/** set X_TLOSS = pi*2**52 **/
-#define X_TLOSS 1.41484755040568800000e+16
-
-#define DOMAIN 1
-#define SING 2
-#define OVERFLOW 3
-#define UNDERFLOW 4
-#define TLOSS 5
-#define PLOSS 6
-/*@}*/
-
-/* 7.12#4 INFINITY */
-#ifdef __INFINITY
-#define INFINITY __INFINITY /**< float constant which overflows */
-#else
-#define INFINITY HUGE_VALF /**< positive infinity */
-#endif /* __INFINITY */
-
-/* 7.12#5 NAN: a quiet NaN, if supported */
-#ifdef __HAVE_NANF
-extern const union __float_u __nanf;
-#define NAN __nanf.__val
-#endif /* __HAVE_NANF */
-
-/**@{
- C99 7.12#6 Number classification macros represent mutually exclusive kinds of floating-point
- values.
-**/
-#define FP_INFINITE 0x00
-#define FP_NAN 0x01
-#define FP_NORMAL 0x02
-#define FP_SUBNORMAL 0x03
-#define FP_ZERO 0x04
-/* NetBSD extensions */
-#define _FP_LOMD 0x80 /**< range for machine-specific classes */
-#define _FP_HIMD 0xff
-/*@)*/
-
-/**@{
- * Constants ala XOPEN/SVID.
- */
-#define M_E 2.7182818284590452354 /**< e */
-#define M_LOG2E 1.4426950408889634074 /**< log 2e */
-#define M_LOG10E 0.43429448190325182765 /**< log 10e */
-#define M_LN2 0.69314718055994530942 /**< log e2 */
-#define M_LN10 2.30258509299404568402 /**< log e10 */
-#define M_PI 3.14159265358979323846 /**< pi */
-#define M_PI_2 1.57079632679489661923 /**< pi/2 */
-#define M_PI_4 0.78539816339744830962 /**< pi/4 */
-#define M_1_PI 0.31830988618379067154 /**< 1/pi */
-#define M_2_PI 0.63661977236758134308 /**< 2/pi */
-#define M_2_SQRTPI 1.12837916709551257390 /**< 2/sqrt(pi) */
-#define M_SQRT2 1.41421356237309504880 /**< sqrt(2) */
-#define M_SQRT1_2 0.70710678118654752440 /**< 1/sqrt(2) */
-#define MAXFLOAT ((float)3.40282346638528860e+38)
-/*@}*/
-
-#endif /* _MATH_H_ */
diff --git a/StdLib/Include/net/if.h b/StdLib/Include/net/if.h
deleted file mode 100644
index 0b8afa0965..0000000000
--- a/StdLib/Include/net/if.h
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright (c) 1982, 1986, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)if.h 8.1 (Berkeley) 6/10/93
- * $Id: if.h,v 1.1.1.1 2006/05/30 06:12:41 hhzhou Exp $
- */
-
-#ifndef _NET_IF_H_
-#define _NET_IF_H_
-
-/*
- * <net/if.h> does not depend on <sys/time.h> on most other systems. This
- * helps userland compatability. (struct timeval ifi_lastchange)
- */
-#ifndef KERNEL
-#include <sys/time.h>
-#endif
-
-/*
- * Structure describing information about an interface
- * which may be of interest to management entities.
- */
-struct if_data {
- /* generic interface information */
- u_char ifi_type; /* ethernet, tokenring, etc */
- u_char ifi_physical; /* e.g., AUI, Thinnet, 10base-T, etc */
- u_char ifi_addrlen; /* media address length */
- u_char ifi_hdrlen; /* media header length */
- u_char ifi_recvquota; /* polling quota for receive intrs */
- u_char ifi_xmitquota; /* polling quota for xmit intrs */
- u_long ifi_mtu; /* maximum transmission unit */
- u_long ifi_metric; /* routing metric (external only) */
- u_long ifi_baudrate; /* linespeed */
- /* volatile statistics */
- u_long ifi_ipackets; /* packets received on interface */
- u_long ifi_ierrors; /* input errors on interface */
- u_long ifi_opackets; /* packets sent on interface */
- u_long ifi_oerrors; /* output errors on interface */
- u_long ifi_collisions; /* collisions on csma interfaces */
- u_long ifi_ibytes; /* total number of octets received */
- u_long ifi_obytes; /* total number of octets sent */
- u_long ifi_imcasts; /* packets received via multicast */
- u_long ifi_omcasts; /* packets sent via multicast */
- u_long ifi_iqdrops; /* dropped on input, this interface */
- u_long ifi_noproto; /* destined for unsupported protocol */
- u_long ifi_recvtiming; /* usec spent receiving when timing */
- u_long ifi_xmittiming; /* usec spent xmitting when timing */
- struct timeval ifi_lastchange; /* time of last administrative change */
-};
-
-#define IFF_UP 0x1 /* interface is up */
-#define IFF_BROADCAST 0x2 /* broadcast address valid */
-#define IFF_DEBUG 0x4 /* turn on debugging */
-#define IFF_LOOPBACK 0x8 /* is a loopback net */
-#define IFF_POINTOPOINT 0x10 /* interface is point-to-point link */
-/*#define IFF_NOTRAILERS 0x20 * obsolete: avoid use of trailers */
-#define IFF_RUNNING 0x40 /* resources allocated */
-#define IFF_NOARP 0x80 /* no address resolution protocol */
-#define IFF_PROMISC 0x100 /* receive all packets */
-#define IFF_ALLMULTI 0x200 /* receive all multicast packets */
-#define IFF_OACTIVE 0x400 /* transmission in progress */
-#define IFF_SIMPLEX 0x800 /* can't hear own transmissions */
-#define IFF_LINK0 0x1000 /* per link layer defined bit */
-#define IFF_LINK1 0x2000 /* per link layer defined bit */
-#define IFF_LINK2 0x4000 /* per link layer defined bit */
-#define IFF_ALTPHYS IFF_LINK2 /* use alternate physical connection */
-#define IFF_MULTICAST 0x8000 /* supports multicast */
-
-/* flags set internally only: */
-#define IFF_CANTCHANGE \
- (IFF_BROADCAST|IFF_POINTOPOINT|IFF_RUNNING|IFF_OACTIVE|\
- IFF_SIMPLEX|IFF_MULTICAST|IFF_ALLMULTI)
-
-#define IFQ_MAXLEN 50
-#define IFNET_SLOWHZ 1 /* granularity is 1 second */
-
-/*
- * Message format for use in obtaining information about interfaces
- * from getkerninfo and the routing socket
- */
-struct if_msghdr {
- u_short ifm_msglen; /* to skip over non-understood messages */
- u_char ifm_version; /* future binary compatability */
- u_char ifm_type; /* message type */
- int ifm_addrs; /* like rtm_addrs */
- int ifm_flags; /* value of if_flags */
- u_short ifm_index; /* index for associated ifp */
- struct if_data ifm_data;/* statistics and other data about if */
-};
-
-/*
- * Message format for use in obtaining information about interface addresses
- * from getkerninfo and the routing socket
- */
-struct ifa_msghdr {
- u_short ifam_msglen; /* to skip over non-understood messages */
- u_char ifam_version; /* future binary compatability */
- u_char ifam_type; /* message type */
- int ifam_addrs; /* like rtm_addrs */
- int ifam_flags; /* value of ifa_flags */
- u_short ifam_index; /* index for associated ifp */
- int ifam_metric; /* value of ifa_metric */
-};
-
-/*
- * Message format for use in obtaining information about multicast addresses
- * from the routing socket
- */
-struct ifma_msghdr {
- u_short ifmam_msglen; /* to skip over non-understood messages */
- u_char ifmam_version; /* future binary compatability */
- u_char ifmam_type; /* message type */
- int ifmam_addrs; /* like rtm_addrs */
- int ifmam_flags; /* value of ifa_flags */
- u_short ifmam_index; /* index for associated ifp */
-};
-
-/*
- * Interface request structure used for socket
- * ioctl's. All interface ioctl's must have parameter
- * definitions which begin with ifr_name. The
- * remainder may be interface specific.
- */
-struct ifreq {
-#define IFNAMSIZ 16
- char ifr_name[IFNAMSIZ]; /* if name, e.g. "en0" */
- union {
- struct sockaddr ifru_addr;
- struct sockaddr ifru_dstaddr;
- struct sockaddr ifru_broadaddr;
- short ifru_flags;
- int ifru_metric;
- int ifru_mtu;
- int ifru_phys;
- int ifru_media;
- caddr_t ifru_data;
- } ifr_ifru;
-#define ifr_addr ifr_ifru.ifru_addr /* address */
-#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-to-p link */
-#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
-#define ifr_flags ifr_ifru.ifru_flags /* flags */
-#define ifr_metric ifr_ifru.ifru_metric /* metric */
-#define ifr_mtu ifr_ifru.ifru_mtu /* mtu */
-#define ifr_phys ifr_ifru.ifru_phys /* physical wire */
-#define ifr_media ifr_ifru.ifru_media /* physical media */
-#define ifr_data ifr_ifru.ifru_data /* for use by interface */
-};
-
-#define _SIZEOF_ADDR_IFREQ(ifr) \
- ((ifr).ifr_addr.sa_len > sizeof(struct sockaddr) ? \
- (sizeof(struct ifreq) - sizeof(struct sockaddr) + \
- (ifr).ifr_addr.sa_len) : sizeof(struct ifreq))
-
-struct ifaliasreq {
- char ifra_name[IFNAMSIZ]; /* if name, e.g. "en0" */
- struct sockaddr ifra_addr;
- struct sockaddr ifra_broadaddr;
- struct sockaddr ifra_mask;
-};
-
-struct ifmediareq {
- char ifm_name[IFNAMSIZ]; /* if name, e.g. "en0" */
- int ifm_current; /* current media options */
- int ifm_mask; /* don't care mask */
- int ifm_status; /* media status */
- int ifm_active; /* active options */
- int ifm_count; /* # entries in ifm_ulist array */
- int *ifm_ulist; /* media words */
-};
-/*
- * Structure used in SIOCGIFCONF request.
- * Used to retrieve interface configuration
- * for machine (useful for programs which
- * must know all networks accessible).
- */
-struct ifconf {
- int ifc_len; /* size of associated buffer */
- union {
- caddr_t ifcu_buf;
- struct ifreq *ifcu_req;
- } ifc_ifcu;
-#define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */
-#define ifc_req ifc_ifcu.ifcu_req /* array of structures returned */
-};
-
-#ifdef KERNEL
-#ifdef MALLOC_DECLARE
-MALLOC_DECLARE(M_IFADDR);
-MALLOC_DECLARE(M_IFMADDR);
-#endif
-#endif
-
-/* XXX - this should go away soon */
-#ifdef KERNEL
-#include <net/if_var.h>
-#endif
-
-#endif /* !_NET_IF_H_ */
diff --git a/StdLib/Include/net/if_dl.h b/StdLib/Include/net/if_dl.h
deleted file mode 100644
index 3a2104d461..0000000000
--- a/StdLib/Include/net/if_dl.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)if_dl.h 8.1 (Berkeley) 6/10/93
- * $Id: if_dl.h,v 1.1.1.1 2006/05/30 06:12:42 hhzhou Exp $
- */
-
-#ifndef _NET_IF_DL_H_
-#define _NET_IF_DL_H_
-
-/*
- * A Link-Level Sockaddr may specify the interface in one of two
- * ways: either by means of a system-provided index number (computed
- * anew and possibly differently on every reboot), or by a human-readable
- * string such as "il0" (for managerial convenience).
- *
- * Census taking actions, such as something akin to SIOCGCONF would return
- * both the index and the human name.
- *
- * High volume transactions (such as giving a link-level ``from'' address
- * in a recvfrom or recvmsg call) may be likely only to provide the indexed
- * form, (which requires fewer copy operations and less space).
- *
- * The form and interpretation of the link-level address is purely a matter
- * of convention between the device driver and its consumers; however, it is
- * expected that all drivers for an interface of a given if_type will agree.
- */
-
-/*
- * Structure of a Link-Level sockaddr:
- */
-struct sockaddr_dl {
- u_char sdl_len; /* Total length of sockaddr */
- u_char sdl_family; /* AF_DLI */
- u_short sdl_index; /* if != 0, system given index for interface */
- u_char sdl_type; /* interface type */
- u_char sdl_nlen; /* interface name length, no trailing 0 reqd. */
- u_char sdl_alen; /* link level address length */
- u_char sdl_slen; /* link layer selector length */
- char sdl_data[12]; /* minimum work area, can be larger;
- contains both if name and ll address */
-};
-
-#define LLADDR(s) ((caddr_t)((s)->sdl_data + (s)->sdl_nlen))
-
-#ifndef KERNEL
-
-#include <sys/EfiCdefs.h>
-
-__BEGIN_DECLS
-void link_addr (const char *, struct sockaddr_dl *);
-char *link_ntoa (const struct sockaddr_dl *);
-__END_DECLS
-
-#endif /* !KERNEL */
-
-#endif
diff --git a/StdLib/Include/net/radix.h b/StdLib/Include/net/radix.h
deleted file mode 100644
index 20ad34b6e8..0000000000
--- a/StdLib/Include/net/radix.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (c) 1988, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)radix.h 8.2 (Berkeley) 10/31/94
- * $Id: radix.h,v 1.1.1.1 2006/05/30 06:12:46 hhzhou Exp $
- */
-
-#ifndef _RADIX_H_
-#define _RADIX_H_
-
-#ifdef MALLOC_DECLARE
-MALLOC_DECLARE(M_RTABLE);
-#endif
-
-/*
- * Radix search tree node layout.
- */
-
-struct radix_node {
- struct radix_mask *rn_mklist; /* list of masks contained in subtree */
- struct radix_node *rn_p; /* parent */
- short rn_b; /* bit offset; -1-index(netmask) */
- char rn_bmask; /* node: mask for bit test*/
- u_char rn_flags; /* enumerated next */
-#define RNF_NORMAL 1 /* leaf contains normal route */
-#define RNF_ROOT 2 /* leaf is root leaf for tree */
-#define RNF_ACTIVE 4 /* This node is alive (for rtfree) */
- union {
- struct { /* leaf only data: */
- caddr_t rn_Key; /* object of search */
- caddr_t rn_Mask; /* netmask, if present */
- struct radix_node *rn_Dupedkey;
- } rn_leaf;
- struct { /* node only data: */
- int rn_Off; /* where to start compare */
- struct radix_node *rn_L;/* progeny */
- struct radix_node *rn_R;/* progeny */
- } rn_node;
- } rn_u;
-#ifdef RN_DEBUG
- int rn_info;
- struct radix_node *rn_twin;
- struct radix_node *rn_ybro;
-#endif
-};
-
-#define rn_dupedkey rn_u.rn_leaf.rn_Dupedkey
-#define rn_key rn_u.rn_leaf.rn_Key
-#define rn_mask rn_u.rn_leaf.rn_Mask
-#define rn_off rn_u.rn_node.rn_Off
-#define rn_l rn_u.rn_node.rn_L
-#define rn_r rn_u.rn_node.rn_R
-
-/*
- * Annotations to tree concerning potential routes applying to subtrees.
- */
-
-struct radix_mask {
- short rm_b; /* bit offset; -1-index(netmask) */
- char rm_unused; /* cf. rn_bmask */
- u_char rm_flags; /* cf. rn_flags */
- struct radix_mask *rm_mklist; /* more masks to try */
- union {
- caddr_t rmu_mask; /* the mask */
- struct radix_node *rmu_leaf; /* for normal routes */
- } rm_rmu;
- int rm_refs; /* # of references to this struct */
-};
-
-#define rm_mask rm_rmu.rmu_mask
-#define rm_leaf rm_rmu.rmu_leaf /* extra field would make 32 bytes */
-
-#define MKGet(m) {\
- if (rn_mkfreelist) {\
- m = rn_mkfreelist; \
- rn_mkfreelist = (m)->rm_mklist; \
- } else \
- R_Malloc(m, struct radix_mask *, sizeof (*(m))); }\
-
-#define MKFree(m) { (m)->rm_mklist = rn_mkfreelist; rn_mkfreelist = (m);}
-
-typedef int walktree_f_t __P((struct radix_node *, void *));
-
-struct radix_node_head {
- struct radix_node *rnh_treetop;
- int rnh_addrsize; /* permit, but not require fixed keys */
- int rnh_pktsize; /* permit, but not require fixed keys */
- struct radix_node *(*rnh_addaddr) /* add based on sockaddr */
- __P((void *v, void *mask,
- struct radix_node_head *head, struct radix_node nodes[]));
- struct radix_node *(*rnh_addpkt) /* add based on packet hdr */
- __P((void *v, void *mask,
- struct radix_node_head *head, struct radix_node nodes[]));
- struct radix_node *(*rnh_deladdr) /* remove based on sockaddr */
- __P((void *v, void *mask, struct radix_node_head *head));
- struct radix_node *(*rnh_delpkt) /* remove based on packet hdr */
- __P((void *v, void *mask, struct radix_node_head *head));
- struct radix_node *(*rnh_matchaddr) /* locate based on sockaddr */
- __P((void *v, struct radix_node_head *head));
- struct radix_node *(*rnh_lookup) /* locate based on sockaddr */
- __P((void *v, void *mask, struct radix_node_head *head));
- struct radix_node *(*rnh_matchpkt) /* locate based on packet hdr */
- __P((void *v, struct radix_node_head *head));
- int (*rnh_walktree) /* traverse tree */
- __P((struct radix_node_head *head, walktree_f_t *f, void *w));
- int (*rnh_walktree_from) /* traverse tree below a */
- __P((struct radix_node_head *head, void *a, void *m,
- walktree_f_t *f, void *w));
- void (*rnh_close) /* do something when the last ref drops */
- __P((struct radix_node *rn, struct radix_node_head *head));
- struct radix_node rnh_nodes[3]; /* empty tree for common case */
-};
-
-#ifndef KERNEL
-#define Bcmp(a, b, n) bcmp(((char *)(a)), ((char *)(b)), (n))
-#define Bcopy(a, b, n) bcopy(((char *)(a)), ((char *)(b)), (unsigned)(n))
-#define Bzero(p, n) bzero((char *)(p), (int)(n));
-#define R_Malloc(p, t, n) (p = (t) malloc((unsigned int)(n)))
-#define Free(p) free((char *)p);
-#else
-#define Bcmp(a, b, n) bcmp(((caddr_t)(a)), ((caddr_t)(b)), (unsigned)(n))
-#define Bcopy(a, b, n) bcopy(((caddr_t)(a)), ((caddr_t)(b)), (unsigned)(n))
-#define Bzero(p, n) bzero((caddr_t)(p), (unsigned)(n));
-#define R_Malloc(p, t, n) (p = (t) malloc((unsigned long)(n), M_RTABLE, M_DONTWAIT))
-#define Free(p) free((caddr_t)p, M_RTABLE);
-#endif /*KERNEL*/
-
-void rn_init __P((void));
-int rn_inithead __P((void **, int));
-int rn_refines __P((void *, void *));
-struct radix_node
- *rn_addmask __P((void *, int, int)),
- *rn_addroute __P((void *, void *, struct radix_node_head *,
- struct radix_node [2])),
- *rn_delete __P((void *, void *, struct radix_node_head *)),
- *rn_lookup __P((void *v_arg, void *m_arg,
- struct radix_node_head *head)),
- *rn_match __P((void *, struct radix_node_head *));
-
-
-#endif /* _RADIX_H_ */
diff --git a/StdLib/Include/net/route.h b/StdLib/Include/net/route.h
deleted file mode 100644
index ec5d9eba7e..0000000000
--- a/StdLib/Include/net/route.h
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Copyright (c) 1980, 1986, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)route.h 8.3 (Berkeley) 4/19/94
- * $Id: route.h,v 1.1.1.1 2006/05/30 06:12:46 hhzhou Exp $
- */
-
-#ifndef _NET_ROUTE_H_
-#define _NET_ROUTE_H_
-
-#define __P(protos) protos /* full-blown ANSI C */
-
-
-/*
- * Kernel resident routing tables.
- *
- * The routing tables are initialized when interface addresses
- * are set by making entries for all directly connected interfaces.
- */
-
-/*
- * A route consists of a destination address and a reference
- * to a routing entry. These are often held by protocols
- * in their control blocks, e.g. inpcb.
- */
-struct route {
- struct rtentry *ro_rt;
- struct sockaddr ro_dst;
-};
-
-/*
- * These numbers are used by reliable protocols for determining
- * retransmission behavior and are included in the routing structure.
- */
-struct rt_metrics {
- u_long rmx_locks; /* Kernel must leave these values alone */
- u_long rmx_mtu; /* MTU for this path */
- u_long rmx_hopcount; /* max hops expected */
- u_long rmx_expire; /* lifetime for route, e.g. redirect */
- u_long rmx_recvpipe; /* inbound delay-bandwidth product */
- u_long rmx_sendpipe; /* outbound delay-bandwidth product */
- u_long rmx_ssthresh; /* outbound gateway buffer limit */
- u_long rmx_rtt; /* estimated round trip time */
- u_long rmx_rttvar; /* estimated rtt variance */
- u_long rmx_pksent; /* packets sent using this route */
- u_long rmx_filler[4]; /* will be used for T/TCP later */
-};
-
-/*
- * rmx_rtt and rmx_rttvar are stored as microseconds;
- * RTTTOPRHZ(rtt) converts to a value suitable for use
- * by a protocol slowtimo counter.
- */
-#define RTM_RTTUNIT 1000000 /* units for rtt, rttvar, as units per sec */
-#define RTTTOPRHZ(r) ((r) / (RTM_RTTUNIT / PR_SLOWHZ))
-
-/*
- * XXX kernel function pointer `rt_output' is visible to applications.
- */
-struct mbuf;
-
-/*
- * We distinguish between routes to hosts and routes to networks,
- * preferring the former if available. For each route we infer
- * the interface to use from the gateway address supplied when
- * the route was entered. Routes that forward packets through
- * gateways are marked so that the output routines know to address the
- * gateway rather than the ultimate destination.
- */
-#ifndef RNF_NORMAL
-#include <net/radix.h>
-#endif
-struct rtentry {
- struct radix_node rt_nodes[2]; /* tree glue, and other values */
-#define rt_key(r) ((struct sockaddr *)((r)->rt_nodes->rn_key))
-#define rt_mask(r) ((struct sockaddr *)((r)->rt_nodes->rn_mask))
- struct sockaddr *rt_gateway; /* value */
- short rt_filler; /* was short flags field */
- short rt_refcnt; /* # held references */
- u_long rt_flags; /* up/down?, host/net */
- struct ifnet *rt_ifp; /* the answer: interface to use */
- struct ifaddr *rt_ifa; /* the answer: interface to use */
- struct sockaddr *rt_genmask; /* for generation of cloned routes */
- caddr_t rt_llinfo; /* pointer to link level info cache */
- struct rt_metrics rt_rmx; /* metrics used by rx'ing protocols */
- struct rtentry *rt_gwroute; /* implied entry for gatewayed routes */
- int (*rt_output) __P((struct ifnet *, struct mbuf *,
- struct sockaddr *, struct rtentry *));
- /* output routine for this (rt,if) */
- struct rtentry *rt_parent; /* cloning parent of this route */
- void *rt_filler2; /* more filler */
-};
-
-/*
- * Following structure necessary for 4.3 compatibility;
- * We should eventually move it to a compat file.
- */
-struct ortentry {
- u_long rt_hash; /* to speed lookups */
- struct sockaddr rt_dst; /* key */
- struct sockaddr rt_gateway; /* value */
- short rt_flags; /* up/down?, host/net */
- short rt_refcnt; /* # held references */
- u_long rt_use; /* raw # packets forwarded */
- struct ifnet *rt_ifp; /* the answer: interface to use */
-};
-
-#define rt_use rt_rmx.rmx_pksent
-
-#define RTF_UP 0x1 /* route usable */
-#define RTF_GATEWAY 0x2 /* destination is a gateway */
-#define RTF_HOST 0x4 /* host entry (net otherwise) */
-#define RTF_REJECT 0x8 /* host or net unreachable */
-#define RTF_DYNAMIC 0x10 /* created dynamically (by redirect) */
-#define RTF_MODIFIED 0x20 /* modified dynamically (by redirect) */
-#define RTF_DONE 0x40 /* message confirmed */
-/* 0x80 unused */
-#define RTF_CLONING 0x100 /* generate new routes on use */
-#define RTF_XRESOLVE 0x200 /* external daemon resolves name */
-#define RTF_LLINFO 0x400 /* generated by link layer (e.g. ARP) */
-#define RTF_STATIC 0x800 /* manually added */
-#define RTF_BLACKHOLE 0x1000 /* just discard pkts (during updates) */
-#define RTF_PROTO2 0x4000 /* protocol specific routing flag */
-#define RTF_PROTO1 0x8000 /* protocol specific routing flag */
-
-#define RTF_PRCLONING 0x10000 /* protocol requires cloning */
-#define RTF_WASCLONED 0x20000 /* route generated through cloning */
-#define RTF_PROTO3 0x40000 /* protocol specific routing flag */
-/* 0x80000 unused */
-#define RTF_PINNED 0x100000 /* future use */
-#define RTF_LOCAL 0x200000 /* route represents a local address */
-#define RTF_BROADCAST 0x400000 /* route represents a bcast address */
-#define RTF_MULTICAST 0x800000 /* route represents a mcast address */
- /* 0x1000000 and up unassigned */
-
-/*
- * Routing statistics.
- */
-struct rtstat {
- short rts_badredirect; /* bogus redirect calls */
- short rts_dynamic; /* routes created by redirects */
- short rts_newgateway; /* routes modified by redirects */
- short rts_unreach; /* lookups which failed */
- short rts_wildcard; /* lookups satisfied by a wildcard */
-};
-/*
- * Structures for routing messages.
- */
-struct rt_msghdr {
- u_short rtm_msglen; /* to skip over non-understood messages */
- u_char rtm_version; /* future binary compatibility */
- u_char rtm_type; /* message type */
- u_short rtm_index; /* index for associated ifp */
- int rtm_flags; /* flags, incl. kern & message, e.g. DONE */
- int rtm_addrs; /* bitmask identifying sockaddrs in msg */
- pid_t rtm_pid; /* identify sender */
- int rtm_seq; /* for sender to identify action */
- int rtm_errno; /* why failed */
- int rtm_use; /* from rtentry */
- u_long rtm_inits; /* which metrics we are initializing */
- struct rt_metrics rtm_rmx; /* metrics themselves */
-};
-
-#define RTM_VERSION 5 /* Up the ante and ignore older versions */
-
-#define RTM_ADD 0x1 /* Add Route */
-#define RTM_DELETE 0x2 /* Delete Route */
-#define RTM_CHANGE 0x3 /* Change Metrics or flags */
-#define RTM_GET 0x4 /* Report Metrics */
-#define RTM_LOSING 0x5 /* Kernel Suspects Partitioning */
-#define RTM_REDIRECT 0x6 /* Told to use different route */
-#define RTM_MISS 0x7 /* Lookup failed on this address */
-#define RTM_LOCK 0x8 /* fix specified metrics */
-#define RTM_OLDADD 0x9 /* caused by SIOCADDRT */
-#define RTM_OLDDEL 0xa /* caused by SIOCDELRT */
-#define RTM_RESOLVE 0xb /* req to resolve dst to LL addr */
-#define RTM_NEWADDR 0xc /* address being added to iface */
-#define RTM_DELADDR 0xd /* address being removed from iface */
-#define RTM_IFINFO 0xe /* iface going up/down etc. */
-#define RTM_NEWMADDR 0xf /* mcast group membership being added to if */
-#define RTM_DELMADDR 0x10 /* mcast group membership being deleted */
-
-#define RTV_MTU 0x1 /* init or lock _mtu */
-#define RTV_HOPCOUNT 0x2 /* init or lock _hopcount */
-#define RTV_EXPIRE 0x4 /* init or lock _hopcount */
-#define RTV_RPIPE 0x8 /* init or lock _recvpipe */
-#define RTV_SPIPE 0x10 /* init or lock _sendpipe */
-#define RTV_SSTHRESH 0x20 /* init or lock _ssthresh */
-#define RTV_RTT 0x40 /* init or lock _rtt */
-#define RTV_RTTVAR 0x80 /* init or lock _rttvar */
-
-/*
- * Bitmask values for rtm_addr.
- */
-#define RTA_DST 0x1 /* destination sockaddr present */
-#define RTA_GATEWAY 0x2 /* gateway sockaddr present */
-#define RTA_NETMASK 0x4 /* netmask sockaddr present */
-#define RTA_GENMASK 0x8 /* cloning mask sockaddr present */
-#define RTA_IFP 0x10 /* interface name sockaddr present */
-#define RTA_IFA 0x20 /* interface addr sockaddr present */
-#define RTA_AUTHOR 0x40 /* sockaddr for author of redirect */
-#define RTA_BRD 0x80 /* for NEWADDR, broadcast or p-p dest addr */
-
-/*
- * Index offsets for sockaddr array for alternate internal encoding.
- */
-#define RTAX_DST 0 /* destination sockaddr present */
-#define RTAX_GATEWAY 1 /* gateway sockaddr present */
-#define RTAX_NETMASK 2 /* netmask sockaddr present */
-#define RTAX_GENMASK 3 /* cloning mask sockaddr present */
-#define RTAX_IFP 4 /* interface name sockaddr present */
-#define RTAX_IFA 5 /* interface addr sockaddr present */
-#define RTAX_AUTHOR 6 /* sockaddr for author of redirect */
-#define RTAX_BRD 7 /* for NEWADDR, broadcast or p-p dest addr */
-#define RTAX_MAX 8 /* size of array to allocate */
-
-struct rt_addrinfo {
- int rti_addrs;
- struct sockaddr *rti_info[RTAX_MAX];
-};
-
-struct route_cb {
- int ip_count;
- int ipx_count;
- int ns_count;
- int iso_count;
- int any_count;
-};
-
-#ifdef KERNEL
-#define RTFREE(rt) \
- if ((rt)->rt_refcnt <= 1) \
- rtfree(rt); \
- else \
- (rt)->rt_refcnt--;
-
-extern struct route_cb route_cb;
-extern struct radix_node_head *rt_tables[AF_MAX+1];
-
-struct ifmultiaddr;
-struct proc;
-
-void route_init __P((void));
-void rt_ifmsg __P((struct ifnet *));
-void rt_missmsg __P((int, struct rt_addrinfo *, int, int));
-void rt_newaddrmsg __P((int, struct ifaddr *, int, struct rtentry *));
-void rt_newmaddrmsg __P((int, struct ifmultiaddr *));
-int rt_setgate __P((struct rtentry *,
- struct sockaddr *, struct sockaddr *));
-void rtalloc __P((struct route *));
-void rtalloc_ign __P((struct route *, unsigned long));
-struct rtentry *
- rtalloc1 __P((struct sockaddr *, int, unsigned long));
-void rtfree __P((struct rtentry *));
-int rtinit __P((struct ifaddr *, int, int));
-int rtioctl __P((int, caddr_t, struct proc *));
-void rtredirect __P((struct sockaddr *, struct sockaddr *,
- struct sockaddr *, int, struct sockaddr *, struct rtentry **));
-int rtrequest __P((int, struct sockaddr *,
- struct sockaddr *, struct sockaddr *, int, struct rtentry **));
-#endif
-
-#endif
diff --git a/StdLib/Include/net/servent.h b/StdLib/Include/net/servent.h
deleted file mode 100644
index 09931f69d4..0000000000
--- a/StdLib/Include/net/servent.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* $NetBSD: servent.h,v 1.3 2008/04/28 20:23:00 martin Exp $ */
-
-/*-
- * Copyright (c) 2004 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Christos Zoulas.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-
-struct servent_data {
- void *db;
- struct servent serv;
- char **aliases;
- size_t maxaliases;
- int flags;
-#define _SV_STAYOPEN 1
-#define _SV_DB 2
-#define _SV_FIRST 4
- char *line;
- void *dummy;
-};
-
-#if 0
-struct servent *getservent_r(struct servent *, struct servent_data *);
-struct servent *getservbyname_r(const char *, const char *,
- struct servent *, struct servent_data *);
-struct servent *getservbyport_r(int, const char *,
- struct servent *, struct servent_data *);
-void setservent_r(int, struct servent_data *);
-void endservent_r(struct servent_data *);
-#endif // 0
-
-int _servent_open(struct servent_data *);
-void _servent_close(struct servent_data *);
-int _servent_getline(struct servent_data *);
-struct servent *_servent_parseline(struct servent_data *, struct servent *);
diff --git a/StdLib/Include/netatalk/at.h b/StdLib/Include/netatalk/at.h
deleted file mode 100644
index 6c2b4f45c8..0000000000
--- a/StdLib/Include/netatalk/at.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 1990,1991 Regents of The University of Michigan.
- * 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 appears in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation, and that the name of The University
- * of Michigan not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. This software is supplied as is without expressed or
- * implied warranties of any kind.
- *
- * Research Systems Unix Group
- * The University of Michigan
- * c/o Mike Clark
- * 535 W. William Street
- * Ann Arbor, Michigan
- * +1-313-763-0525
- * netatalk@itd.umich.edu
- */
-
-#ifndef __AT_HEADER__
-#define __AT_HEADER__
-/*
- * Supported protocols
- */
-#define ATPROTO_DDP 0
-#define ATPROTO_AARP 254
-
-/*
- * Ethernet types, for DIX.
- * These should really be in some global header file, but we can't
- * count on them being there, and it's annoying to patch system files.
- */
-#define ETHERTYPE_AT 0x809B /* AppleTalk protocol */
-#define ETHERTYPE_AARP 0x80F3 /* AppleTalk ARP */
-
-#define DDP_MAXSZ 587
-
-/*
- * If ATPORT_FIRST <= Port < ATPORT_RESERVED,
- * Port was created by a privileged process.
- * If ATPORT_RESERVED <= Port < ATPORT_LAST,
- * Port was not necessarily created by a
- * privileged process.
- */
-#define ATPORT_FIRST 1
-#define ATPORT_RESERVED 128
-#define ATPORT_LAST 255
-
-/*
- * AppleTalk address.
- */
-struct at_addr {
- u_short s_net;
- u_char s_node;
-};
-
-#define ATADDR_ANYNET (u_short)0x0000
-#define ATADDR_ANYNODE (u_char)0x00
-#define ATADDR_ANYPORT (u_char)0x00
-#define ATADDR_BCAST (u_char)0xff /* There is no BCAST for NET */
-
-struct netrange {
- u_char nr_phase;
- u_short nr_firstnet;
- u_short nr_lastnet;
-};
-
-/*
- * Socket address, AppleTalk style. We keep magic information in the
- * zero bytes. There are three types, NONE, CONFIG which has the phase
- * and a net range, and IFACE which has the network address of an
- * interface. IFACE may be filled in by the client, and is filled in
- * by the kernel.
- */
-struct sockaddr_at {
- u_char sat_len;
- u_char sat_family;
- u_char sat_port;
- struct at_addr sat_addr;
- union {
- struct netrange r_netrange;
- char r_zero[ 8 ]; /* Hide a struct netrange in here */
- } sat_range;
-};
-
-#define sat_zero sat_range.r_zero
-
-#endif /* !__AT_HEADER__ */
diff --git a/StdLib/Include/netdb.h b/StdLib/Include/netdb.h
deleted file mode 100644
index f50c8cea31..0000000000
--- a/StdLib/Include/netdb.h
+++ /dev/null
@@ -1,270 +0,0 @@
-/** @file
-
- Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1980, 1983, 1988, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * -
- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- * -
- * Portions Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by WIDE Project and
- * its contributors.
- * 4. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * -
- * @(#)netdb.h 8.1 (Berkeley) 6/2/93
- * netdb.h,v 1.15.18.6 2006/10/02 01:23:09 marka Exp
- * netdb.h,v 1.55.2.1 2007/05/17 21:25:10 jdc Exp
- */
-#ifndef _NETDB_H_
-#define _NETDB_H_
-
-#include <machine/ansi.h>
-#include <machine/endian_machdep.h>
-#include <sys/ansi.h>
-#include <sys/cdefs.h>
-#include <sys/featuretest.h>
-#include <inttypes.h>
-#include <paths.h>
-
-/* Data types */
-#ifndef socklen_t
-typedef __socklen_t socklen_t;
-#define socklen_t __socklen_t
-#endif
-
-#ifdef _EFI_SIZE_T_
- typedef _EFI_SIZE_T_ size_t;
- #undef _EFI_SIZE_T_
- #undef _BSD_SIZE_T_
-#endif
-
-__BEGIN_DECLS
-extern int h_errno;
-__END_DECLS
-
-/** Structures returned by network data base library. All addresses are
- * supplied in host order, and returned in network order (suitable for
- * use in system calls).
- */
-struct hostent {
- char *h_name; /**< official name of host */
- char **h_aliases; /**< alias list */
- int h_addrtype; /**< host address type */
- int h_length; /**< length of address */
- char **h_addr_list; /**< list of addresses from name server */
-};
-#define h_addr h_addr_list[0] /**< address, for backward compatiblity */
-
-/** Assumption here is that a network number
- * fits in an unsigned long -- probably a poor one.
- */
-struct netent {
- char *n_name; /**< official name of net */
- char **n_aliases; /**< alias list */
- int n_addrtype; /**< net address type */
- uint32_t n_net; /**< network # */
-#if defined(__alpha__) || (defined(__i386__) && defined(_LP64)) || \
- (defined(__sh__) && defined(_LP64) && (_BYTE_ORDER == _LITTLE_ENDIAN))
- int __n_pad0; /* ABI compatibility */
-#endif
-};
-
-struct servent {
- char *s_name; /**< official service name */
- char **s_aliases; /**< alias list */
- int s_port; /**< port # */
- char *s_proto; /**< protocol to use */
-};
-
-struct protoent {
- char *p_name; /**< official protocol name */
- char **p_aliases; /**< alias list */
- int p_proto; /**< protocol # */
-};
-
-/* Note: ai_addrlen used to be a size_t, per RFC 2553.
- * In XNS5.2, and subsequently in POSIX-2001 and
- * draft-ietf-ipngwg-rfc2553bis-02.txt it was changed to a socklen_t.
- * To accommodate for this while preserving binary compatibility with the
- * old interface, we prepend or append 32 bits of padding, depending on
- * the (LP64) architecture's endianness.
- *
- * This should be deleted the next time the libc major number is
- * incremented.
- */
-struct addrinfo {
- int ai_flags; /**< AI_PASSIVE, AI_CANONNAME */
- int ai_family; /**< PF_xxx */
- int ai_socktype; /**< SOCK_xxx */
- int ai_protocol; /**< 0 or IPPROTO_xxx for IPv4 and IPv6 */
- socklen_t ai_addrlen; /**< length of ai_addr */
-#if defined(__alpha__) || (defined(__i386__) && defined(_LP64))
- int __ai_pad0; /* ABI compatibility */
-#endif
- char *ai_canonname; /**< canonical name for hostname */
- struct sockaddr *ai_addr; /**< binary address */
- struct addrinfo *ai_next; /**< next structure in linked list */
-};
-
-/* Error return codes from gethostbyname() and gethostbyaddr()
- * (left in extern int h_errno).
-*/
-
-#define NETDB_INTERNAL -1 /**< see errno */
-#define NETDB_SUCCESS 0 /**< no problem */
-#define NO_ADDRESS NO_DATA /* no address, look for MX record */
-#define HOST_NOT_FOUND 1 /**< Authoritative Answer Host not found */
-#define TRY_AGAIN 2 /**< Non-Authoritive Host not found, or SERVERFAIL */
-#define NO_RECOVERY 3 /**< Non recoverable errors, FORMERR, REFUSED, NOTIMP */
-#define NO_DATA 4 /**< Valid name, no data record of requested type */
-
-/* Error return codes from getaddrinfo() */
-#define EAI_ADDRFAMILY 1 /**< address family for hostname not supported */
-#define EAI_AGAIN 2 /**< temporary failure in name resolution */
-#define EAI_BADFLAGS 3 /**< invalid value for ai_flags */
-#define EAI_FAIL 4 /**< non-recoverable failure in name resolution */
-#define EAI_FAMILY 5 /**< ai_family not supported */
-#define EAI_MEMORY 6 /**< memory allocation failure */
-#define EAI_NODATA 7 /**< no address associated with hostname */
-#define EAI_NONAME 8 /**< hostname nor servname provided, or not known */
-#define EAI_SERVICE 9 /**< servname not supported for ai_socktype */
-#define EAI_SOCKTYPE 10 /**< ai_socktype not supported */
-#define EAI_SYSTEM 11 /**< system error returned in errno */
-#define EAI_BADHINTS 12 /**< invalid value for hints */
-#define EAI_PROTOCOL 13 /**< resolved protocol is unknown */
-#define EAI_OVERFLOW 14 /**< argument buffer overflow */
-#define EAI_MAX 15
-
-/* Flag values for getaddrinfo() */
-#define AI_PASSIVE 0x00000001 /* get address to use bind() */
-#define AI_CANONNAME 0x00000002 /* fill ai_canonname */
-
-#define AI_NUMERICHOST 0x00000004 /* prevent host name resolution */
-#define AI_NUMERICSERV 0x00000008 /* prevent service name resolution */
-/* valid flags for addrinfo (not a standard def, apps should not use it) */
-#define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV)
-
-/* Constants for getnameinfo() */
-#define NI_MAXHOST 1025
-#define NI_MAXSERV 32
-
-/* Flag values for getnameinfo() */
-#define NI_NOFQDN 0x00000001
-#define NI_NUMERICHOST 0x00000002
-#define NI_NAMEREQD 0x00000004
-#define NI_NUMERICSERV 0x00000008
-#define NI_DGRAM 0x00000010
-#define NI_NUMERICSCOPE 0x00000040
-
-/** Scope delimit character */
-#define SCOPE_DELIMITER '%'
-
-__BEGIN_DECLS
-void endhostent (void);
-void endnetent (void);
-void endprotoent (void);
-void endservent (void);
-struct hostent *gethostbyaddr (const char *, socklen_t, int);
-struct hostent *gethostbyname (const char *);
-struct hostent *gethostbyname2 (const char *, int);
-struct hostent *gethostent (void);
-struct netent *getnetbyaddr (uint32_t, int);
-struct netent *getnetbyname (const char *);
-struct netent *getnetent (void);
-struct protoent *getprotobyname (const char *);
-struct protoent *getprotobynumber(int);
-struct protoent *getprotoent (void);
-struct servent *getservbyname (const char *, const char *);
-struct servent *getservbyport (int, const char *);
-struct servent *getservent (void);
-void sethostent (int);
-void setnetent (int);
-void setprotoent (int);
-void setservent (int);
-int getaddrinfo ( const char * __restrict, const char * __restrict,
- const struct addrinfo * __restrict,
- struct addrinfo ** __restrict);
-int getnameinfo ( const struct sockaddr * __restrict, socklen_t,
- char * __restrict, socklen_t,
- char * __restrict, socklen_t, int);
-void freeaddrinfo (struct addrinfo *);
-const char *gai_strerror (int);
-void setservent (int);
-
-__END_DECLS
-
-#endif /* !_NETDB_H_ */
diff --git a/StdLib/Include/netinet/in.h b/StdLib/Include/netinet/in.h
deleted file mode 100644
index 6f13b02d3a..0000000000
--- a/StdLib/Include/netinet/in.h
+++ /dev/null
@@ -1,557 +0,0 @@
-/* $NetBSD: in.h,v 1.77 2006/11/13 05:13:41 dyoung Exp $ */
-
-/*
- * Copyright (c) 1982, 1986, 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)in.h 8.3 (Berkeley) 1/3/94
- */
-
-/*
- * Constants and structures defined by the internet system,
- * Per RFC 790, September 1981, and numerous additions.
- */
-
-#ifndef _NETINET_IN_H_
-#define _NETINET_IN_H_
-
-#include <machine/int_types.h>
-
-#ifndef uint8_t
-typedef __uint8_t uint8_t;
-#define uint8_t __uint8_t
-#endif
-
-#ifndef uint32_t
-typedef __uint32_t uint32_t;
-#define uint32_t __uint32_t
-#endif
-
-#include <sys/ansi.h>
-
-#ifndef in_addr_t
-typedef __in_addr_t in_addr_t;
-#define in_addr_t __in_addr_t
-#endif
-
-#ifndef in_port_t
-typedef __in_port_t in_port_t;
-#define in_port_t __in_port_t
-#endif
-
-#ifndef sa_family_t
-typedef __sa_family_t sa_family_t;
-#define sa_family_t __sa_family_t
-#endif
-
-/*
- * Protocols
- */
-#define IPPROTO_IP 0 /* dummy for IP */
-#define IPPROTO_HOPOPTS 0 /* IP6 hop-by-hop options */
-#define IPPROTO_ICMP 1 /* control message protocol */
-#define IPPROTO_IGMP 2 /* group mgmt protocol */
-#define IPPROTO_GGP 3 /* gateway^2 (deprecated) */
-#define IPPROTO_IPV4 4 /* IP header */
-#define IPPROTO_IPIP 4 /* IP inside IP */
-#define IPPROTO_TCP 6 /* tcp */
-#define IPPROTO_EGP 8 /* exterior gateway protocol */
-#define IPPROTO_PUP 12 /* pup */
-#define IPPROTO_UDP 17 /* user datagram protocol */
-#define IPPROTO_IDP 22 /* xns idp */
-#define IPPROTO_TP 29 /* tp-4 w/ class negotiation */
-#define IPPROTO_IPV6 41 /* IP6 header */
-#define IPPROTO_ROUTING 43 /* IP6 routing header */
-#define IPPROTO_FRAGMENT 44 /* IP6 fragmentation header */
-#define IPPROTO_RSVP 46 /* resource reservation */
-#define IPPROTO_GRE 47 /* GRE encaps RFC 1701 */
-#define IPPROTO_ESP 50 /* encap. security payload */
-#define IPPROTO_AH 51 /* authentication header */
-#define IPPROTO_MOBILE 55 /* IP Mobility RFC 2004 */
-#define IPPROTO_IPV6_ICMP 58 /* IPv6 ICMP */
-#define IPPROTO_ICMPV6 58 /* ICMP6 */
-#define IPPROTO_NONE 59 /* IP6 no next header */
-#define IPPROTO_DSTOPTS 60 /* IP6 destination option */
-#define IPPROTO_EON 80 /* ISO cnlp */
-#define IPPROTO_ETHERIP 97 /* Ethernet-in-IP */
-#define IPPROTO_ENCAP 98 /* encapsulation header */
-#define IPPROTO_PIM 103 /* Protocol indep. multicast */
-#define IPPROTO_IPCOMP 108 /* IP Payload Comp. Protocol */
-#define IPPROTO_VRRP 112 /* VRRP RFC 2338 */
-#define IPPROTO_CARP 112 /* Common Address Resolution Protocol */
-#define IPPROTO_RAW 255 /* raw IP packet */
-#define IPPROTO_MAX 256
-
-/* last return value of *_input(), meaning "all job for this pkt is done". */
-#define IPPROTO_DONE 257
-
-/* sysctl placeholder for (FAST_)IPSEC */
-#define CTL_IPPROTO_IPSEC 258
-
-
-/*
- * Local port number conventions:
- *
- * Ports < IPPORT_RESERVED are reserved for privileged processes (e.g. root),
- * unless a kernel is compiled with IPNOPRIVPORTS defined.
- *
- * When a user does a bind(2) or connect(2) with a port number of zero,
- * a non-conflicting local port address is chosen.
- *
- * The default range is IPPORT_ANONMIN to IPPORT_ANONMAX, although
- * that is settable by sysctl(3); net.inet.ip.anonportmin and
- * net.inet.ip.anonportmax respectively.
- *
- * A user may set the IPPROTO_IP option IP_PORTRANGE to change this
- * default assignment range.
- *
- * The value IP_PORTRANGE_DEFAULT causes the default behavior.
- *
- * The value IP_PORTRANGE_HIGH is the same as IP_PORTRANGE_DEFAULT,
- * and exists only for FreeBSD compatibility purposes.
- *
- * The value IP_PORTRANGE_LOW changes the range to the "low" are
- * that is (by convention) restricted to privileged processes.
- * This convention is based on "vouchsafe" principles only.
- * It is only secure if you trust the remote host to restrict these ports.
- * The range is IPPORT_RESERVEDMIN to IPPORT_RESERVEDMAX.
- */
-
-#define IPPORT_RESERVED 1024
-#define IPPORT_ANONMIN 49152
-#define IPPORT_ANONMAX 65535
-#define IPPORT_RESERVEDMIN 600
-#define IPPORT_RESERVEDMAX (IPPORT_RESERVED-1)
-
-/*
- * Internet address (a structure for historical reasons)
- */
-struct in_addr {
- in_addr_t s_addr;
-} __attribute__((__packed__));
-
-/*
- * Definitions of bits in internet address integers.
- * On subnets, the decomposition of addresses to host and net parts
- * is done according to subnet mask, not the masks here.
- *
- * By byte-swapping the constants, we avoid ever having to byte-swap IP
- * addresses inside the kernel. Unfortunately, user-level programs rely
- * on these macros not doing byte-swapping.
- */
-#ifdef _KERNEL
-#define __IPADDR(x) ((uint32_t) htonl((uint32_t)(x)))
-#else
-#define __IPADDR(x) ((uint32_t)(x))
-#endif
-
-#define IN_CLASSA(i) (((uint32_t)(i) & __IPADDR(0x80000000)) == \
- __IPADDR(0x00000000))
-#define IN_CLASSA_NET __IPADDR(0xff000000)
-#define IN_CLASSA_NSHIFT 24
-#define IN_CLASSA_HOST __IPADDR(0x00ffffff)
-#define IN_CLASSA_MAX 128
-
-#define IN_CLASSB(i) (((uint32_t)(i) & __IPADDR(0xc0000000)) == \
- __IPADDR(0x80000000))
-#define IN_CLASSB_NET __IPADDR(0xffff0000)
-#define IN_CLASSB_NSHIFT 16
-#define IN_CLASSB_HOST __IPADDR(0x0000ffff)
-#define IN_CLASSB_MAX 65536
-
-#define IN_CLASSC(i) (((uint32_t)(i) & __IPADDR(0xe0000000)) == \
- __IPADDR(0xc0000000))
-#define IN_CLASSC_NET __IPADDR(0xffffff00)
-#define IN_CLASSC_NSHIFT 8
-#define IN_CLASSC_HOST __IPADDR(0x000000ff)
-
-#define IN_CLASSD(i) (((uint32_t)(i) & __IPADDR(0xf0000000)) == \
- __IPADDR(0xe0000000))
-/* These ones aren't really net and host fields, but routing needn't know. */
-#define IN_CLASSD_NET __IPADDR(0xf0000000)
-#define IN_CLASSD_NSHIFT 28
-#define IN_CLASSD_HOST __IPADDR(0x0fffffff)
-#define IN_MULTICAST(i) IN_CLASSD(i)
-
-#define IN_EXPERIMENTAL(i) (((uint32_t)(i) & __IPADDR(0xf0000000)) == \
- __IPADDR(0xf0000000))
-#define IN_BADCLASS(i) (((uint32_t)(i) & __IPADDR(0xf0000000)) == \
- __IPADDR(0xf0000000))
-
-#define IN_LINKLOCAL(i) (((uint32_t)(i) & __IPADDR(0xffff0000)) == \
- __IPADDR(0xa9fe0000))
-
-#define IN_PRIVATE(i) ((((uint32_t)(i) & __IPADDR(0xff000000)) == \
- __IPADDR(0x0a000000)) || \
- (((uint32_t)(i) & __IPADDR(0xfff00000)) == \
- __IPADDR(0xac100000)) || \
- (((uint32_t)(i) & __IPADDR(0xffff0000)) == \
- __IPADDR(0xc0a80000)))
-
-#define IN_LOCAL_GROUP(i) (((uint32_t)(i) & __IPADDR(0xffffff00)) == \
- __IPADDR(0xe0000000))
-
-#define IN_ANY_LOCAL(i) (IN_LINKLOCAL(i) || IN_LOCAL_GROUP(i))
-
-#define INADDR_ANY __IPADDR(0x00000000)
-#define INADDR_LOOPBACK __IPADDR(0x7f000001)
-#define INADDR_BROADCAST __IPADDR(0xffffffff) /* must be masked */
-#define INADDR_NONE __IPADDR(0xffffffff) /* -1 return */
-
-#define INADDR_UNSPEC_GROUP __IPADDR(0xe0000000) /* 224.0.0.0 */
-#define INADDR_ALLHOSTS_GROUP __IPADDR(0xe0000001) /* 224.0.0.1 */
-#define INADDR_ALLRTRS_GROUP __IPADDR(0xe0000002) /* 224.0.0.2 */
-#define INADDR_CARP_GROUP __IPADDR(0xe0000012) /* 224.0.0.18 */
-#define INADDR_MAX_LOCAL_GROUP __IPADDR(0xe00000ff) /* 224.0.0.255 */
-
-#define IN_LOOPBACKNET 127 /* official! */
-
-/*
- * Socket address, internet style.
- */
-struct sockaddr_in {
- uint8_t sin_len;
- sa_family_t sin_family;
- in_port_t sin_port;
- struct in_addr sin_addr;
- __int8_t sin_zero[8];
-};
-
-#define INET_ADDRSTRLEN 16
-
-/*
- * Structure used to describe IP options.
- * Used to store options internally, to pass them to a process,
- * or to restore options retrieved earlier.
- * The ip_dst is used for the first-hop gateway when using a source route
- * (this gets put into the header proper).
- */
-struct ip_opts {
- struct in_addr ip_dst; /* first hop, 0 w/o src rt */
-#if defined(__cplusplus)
- __int8_t Ip_opts[40]; /* actually variable in size */
-#else
- __int8_t ip_opts[40]; /* actually variable in size */
-#endif
-};
-
-/*
- * Options for use with [gs]etsockopt at the IP level.
- * First word of comment is data type; bool is stored in int.
- */
-#define IP_OPTIONS 1 /* buf/ip_opts; set/get IP options */
-#define IP_HDRINCL 2 /* int; header is included with data */
-#define IP_TOS 3 /* int; IP type of service and preced. */
-#define IP_TTL 4 /* int; IP time to live */
-#define IP_RECVOPTS 5 /* bool; receive all IP opts w/dgram */
-#define IP_RECVRETOPTS 6 /* bool; receive IP opts for response */
-#define IP_RECVDSTADDR 7 /* bool; receive IP dst addr w/dgram */
-#define IP_RETOPTS 8 /* ip_opts; set/get IP options */
-#define IP_MULTICAST_IF 9 /* in_addr; set/get IP multicast i/f */
-#define IP_MULTICAST_TTL 10 /* u_char; set/get IP multicast ttl */
-#define IP_MULTICAST_LOOP 11 /* u_char; set/get IP multicast loopback */
-#define IP_ADD_MEMBERSHIP 12 /* ip_mreq; add an IP group membership */
-#define IP_DROP_MEMBERSHIP 13 /* ip_mreq; drop an IP group membership */
-#define IP_PORTRANGE 19 /* int; range to use for ephemeral port */
-#define IP_RECVIF 20 /* bool; receive reception if w/dgram */
-#define IP_ERRORMTU 21 /* int; get MTU of last xmit = EMSGSIZE */
-#if 1 /*IPSEC*/
-#define IP_IPSEC_POLICY 22 /* struct; get/set security policy */
-#endif
-
-/*
- * Defaults and limits for options
- */
-#define IP_DEFAULT_MULTICAST_TTL 1 /* normally limit m'casts to 1 hop */
-#define IP_DEFAULT_MULTICAST_LOOP 1 /* normally hear sends if a member */
-#define IP_MAX_MEMBERSHIPS 20 /* per socket; must fit in one mbuf */
-
-/*
- * Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
- */
-struct ip_mreq {
- struct in_addr imr_multiaddr; /* IP multicast address of group */
- struct in_addr imr_interface; /* local IP address of interface */
-};
-
-/*
- * Argument for IP_PORTRANGE:
- * - which range to search when port is unspecified at bind() or connect()
- */
-#define IP_PORTRANGE_DEFAULT 0 /* default range */
-#define IP_PORTRANGE_HIGH 1 /* same as DEFAULT (FreeBSD compat) */
-#define IP_PORTRANGE_LOW 2 /* use privileged range */
-
-#if defined(_NETBSD_SOURCE)
-/*
- * Definitions for inet sysctl operations.
- *
- * Third level is protocol number.
- * Fourth level is desired variable within that protocol.
- */
-#define IPPROTO_MAXID (IPPROTO_AH + 1) /* don't list to IPPROTO_MAX */
-
-#define CTL_IPPROTO_NAMES { \
- { "ip", CTLTYPE_NODE }, \
- { "icmp", CTLTYPE_NODE }, \
- { "igmp", CTLTYPE_NODE }, \
- { "ggp", CTLTYPE_NODE }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { "tcp", CTLTYPE_NODE }, \
- { 0, 0 }, \
- { "egp", CTLTYPE_NODE }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { "pup", CTLTYPE_NODE }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { "udp", CTLTYPE_NODE }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { "idp", CTLTYPE_NODE }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { "ipsec", CTLTYPE_NODE }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { "pim", CTLTYPE_NODE }, \
-}
-
-/*
- * Names for IP sysctl objects
- */
-#define IPCTL_FORWARDING 1 /* act as router */
-#define IPCTL_SENDREDIRECTS 2 /* may send redirects when forwarding */
-#define IPCTL_DEFTTL 3 /* default TTL */
-#ifdef notyet
-#define IPCTL_DEFMTU 4 /* default MTU */
-#endif
-#define IPCTL_FORWSRCRT 5 /* forward source-routed packets */
-#define IPCTL_DIRECTEDBCAST 6 /* default broadcast behavior */
-#define IPCTL_ALLOWSRCRT 7 /* allow/drop all source-routed pkts */
-#define IPCTL_SUBNETSARELOCAL 8 /* treat subnets as local addresses */
-#define IPCTL_MTUDISC 9 /* allow path MTU discovery */
-#define IPCTL_ANONPORTMIN 10 /* minimum ephemeral port */
-#define IPCTL_ANONPORTMAX 11 /* maximum ephemeral port */
-#define IPCTL_MTUDISCTIMEOUT 12 /* allow path MTU discovery */
-#define IPCTL_MAXFLOWS 13 /* maximum ip flows allowed */
-#define IPCTL_HOSTZEROBROADCAST 14 /* is host zero a broadcast addr? */
-#define IPCTL_GIF_TTL 15 /* default TTL for gif encap packet */
-#define IPCTL_LOWPORTMIN 16 /* minimum reserved port */
-#define IPCTL_LOWPORTMAX 17 /* maximum reserved port */
-#define IPCTL_MAXFRAGPACKETS 18 /* max packets reassembly queue */
-#define IPCTL_GRE_TTL 19 /* default TTL for gre encap packet */
-#define IPCTL_CHECKINTERFACE 20 /* drop pkts in from 'wrong' iface */
-#define IPCTL_IFQ 21 /* ipintrq node */
-#define IPCTL_RANDOMID 22 /* use random IP ids (if configured) */
-#define IPCTL_LOOPBACKCKSUM 23 /* do IP checksum on loopback */
-#define IPCTL_STATS 24 /* IP statistics */
-#define IPCTL_MAXID 25
-
-#define IPCTL_NAMES { \
- { 0, 0 }, \
- { "forwarding", CTLTYPE_INT }, \
- { "redirect", CTLTYPE_INT }, \
- { "ttl", CTLTYPE_INT }, \
- { "mtu", CTLTYPE_INT }, \
- { "forwsrcrt", CTLTYPE_INT }, \
- { "directed-broadcast", CTLTYPE_INT }, \
- { "allowsrcrt", CTLTYPE_INT }, \
- { "subnetsarelocal", CTLTYPE_INT }, \
- { "mtudisc", CTLTYPE_INT }, \
- { "anonportmin", CTLTYPE_INT }, \
- { "anonportmax", CTLTYPE_INT }, \
- { "mtudisctimeout", CTLTYPE_INT }, \
- { "maxflows", CTLTYPE_INT }, \
- { "hostzerobroadcast", CTLTYPE_INT }, \
- { "gifttl", CTLTYPE_INT }, \
- { "lowportmin", CTLTYPE_INT }, \
- { "lowportmax", CTLTYPE_INT }, \
- { "maxfragpackets", CTLTYPE_INT }, \
- { "grettl", CTLTYPE_INT }, \
- { "checkinterface", CTLTYPE_INT }, \
- { "ifq", CTLTYPE_NODE }, \
- { "random_id", CTLTYPE_INT }, \
- { "do_loopback_cksum", CTLTYPE_INT }, \
- { "stats", CTLTYPE_STRUCT }, \
-}
-#endif /* _NETBSD_SOURCE */
-
-/* INET6 stuff */
-#define __KAME_NETINET_IN_H_INCLUDED_
-#include <netinet6/in6.h>
-#undef __KAME_NETINET_IN_H_INCLUDED_
-
-#ifdef _KERNEL
-/*
- * in_cksum_phdr:
- *
- * Compute significant parts of the IPv4 checksum pseudo-header
- * for use in a delayed TCP/UDP checksum calculation.
- *
- * Args:
- *
- * src Source IP address
- * dst Destination IP address
- * lenproto htons(proto-hdr-len + proto-number)
- */
-static __inline u_int16_t __attribute__((__unused__))
-in_cksum_phdr(u_int32_t src, u_int32_t dst, u_int32_t lenproto)
-{
- u_int32_t sum;
-
- sum = lenproto +
- (u_int16_t)(src >> 16) +
- (u_int16_t)(src /*& 0xffff*/) +
- (u_int16_t)(dst >> 16) +
- (u_int16_t)(dst /*& 0xffff*/);
-
- sum = (u_int16_t)(sum >> 16) + (u_int16_t)(sum /*& 0xffff*/);
-
- if (sum > 0xffff)
- sum -= 0xffff;
-
- return (sum);
-}
-
-/*
- * in_cksum_addword:
- *
- * Add the two 16-bit network-order values, carry, and return.
- */
-static __inline u_int16_t __attribute__((__unused__))
-in_cksum_addword(u_int16_t a, u_int16_t b)
-{
- u_int32_t sum = a + b;
-
- if (sum > 0xffff)
- sum -= 0xffff;
-
- return (sum);
-}
-
-extern struct in_addr zeroin_addr;
-extern u_char ip_protox[];
-
-int in_broadcast(struct in_addr, struct ifnet *);
-int in_canforward(struct in_addr);
-int in_cksum(struct mbuf *, int);
-int in4_cksum(struct mbuf *, u_int8_t, int, int);
-void in_delayed_cksum(struct mbuf *);
-int in_localaddr(struct in_addr);
-void in_socktrim(struct sockaddr_in *);
-
-#define in_hosteq(s,t) ((s).s_addr == (t).s_addr)
-#define in_nullhost(x) ((x).s_addr == INADDR_ANY)
-
-#define satosin(sa) ((struct sockaddr_in *)(sa))
-#define sintosa(sin) ((struct sockaddr *)(sin))
-#define ifatoia(ifa) ((struct in_ifaddr *)(ifa))
-#endif /* _KERNEL */
-
-#endif /* !_NETINET_IN_H_ */
diff --git a/StdLib/Include/netinet/in_systm.h b/StdLib/Include/netinet/in_systm.h
deleted file mode 100644
index f86bf65fbc..0000000000
--- a/StdLib/Include/netinet/in_systm.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 1982, 1986, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)in_systm.h 8.1 (Berkeley) 6/10/93
- * $Id: in_systm.h,v 1.1.1.1 2006/05/30 06:12:48 hhzhou Exp $
- */
-
-#ifndef _NETINET_IN_SYSTM_H_
-#define _NETINET_IN_SYSTM_H_
-
-/*
- * Miscellaneous internetwork
- * definitions for kernel.
- */
-
-/*
- * Network types.
- *
- * Internally the system keeps counters in the headers with the bytes
- * swapped so that VAX instructions will work on them. It reverses
- * the bytes before transmission at each protocol level. The n_ types
- * represent the types with the bytes in ``high-ender'' order.
- */
-typedef u_int16_t n_short; /* short as received from the net */
-typedef u_int32_t n_long; /* long as received from the net */
-
-typedef u_int32_t n_time; /* ms since 00:00 GMT, byte rev */
-
-#ifdef KERNEL
-n_time iptime __P((void));
-#endif
-
-#endif
diff --git a/StdLib/Include/netinet/ip.h b/StdLib/Include/netinet/ip.h
deleted file mode 100644
index b2de1b9779..0000000000
--- a/StdLib/Include/netinet/ip.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright (c) 1982, 1986, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by the University of
- * California, Berkeley, Intel Corporation, and its contributors.
- *
- * 4. Neither the name of University, Intel Corporation, or their respective
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
- * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * @(#)ip.h 8.2 (Berkeley) 6/1/94
- * $Id: ip.h,v 1.1.1.1 2006/05/30 06:12:48 hhzhou Exp $
- */
-
-#ifndef _NETINET_IP_H_
-#define _NETINET_IP_H_
-
-#ifndef _ORG_FREEBSD_
-#define _IP_VHL
-#endif
-
-/*
- * Definitions for internet protocol version 4.
- * Per RFC 791, September 1981.
- */
-#define IPVERSION 4
-
-/*
- * Structure of an internet header, naked of options.
- */
-struct ip {
-#ifdef _IP_VHL
- u_char ip_vhl; /* version << 4 | header length >> 2 */
-#else
-#if BYTE_ORDER == LITTLE_ENDIAN
- u_int ip_hl:4, /* header length */
- ip_v:4; /* version */
-#endif
-#if BYTE_ORDER == BIG_ENDIAN
- u_int ip_v:4, /* version */
- ip_hl:4; /* header length */
-#endif
-#endif /* not _IP_VHL */
- u_char ip_tos; /* type of service */
- u_short ip_len; /* total length */
- u_short ip_id; /* identification */
- u_short ip_off; /* fragment offset field */
-#define IP_RF 0x8000 /* reserved fragment flag */
-#define IP_DF 0x4000 /* dont fragment flag */
-#define IP_MF 0x2000 /* more fragments flag */
-#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
- u_char ip_ttl; /* time to live */
- u_char ip_p; /* protocol */
- u_short ip_sum; /* checksum */
- struct in_addr ip_src,ip_dst; /* source and dest address */
-};
-
-#ifdef _IP_VHL
-#define IP_MAKE_VHL(v, hl) ((v) << 4 | (hl))
-#define IP_VHL_HL(vhl) ((vhl) & 0x0f)
-#define IP_VHL_V(vhl) ((vhl) >> 4)
-#define IP_VHL_BORING 0x45
-#endif
-
-#define IP_MAXPACKET 65535 /* maximum packet size */
-
-/*
- * Definitions for IP type of service (ip_tos)
- */
-#define IPTOS_LOWDELAY 0x10
-#define IPTOS_THROUGHPUT 0x08
-#define IPTOS_RELIABILITY 0x04
-#define IPTOS_MINCOST 0x02
-
-/*
- * Definitions for IP precedence (also in ip_tos) (hopefully unused)
- */
-#define IPTOS_PREC_NETCONTROL 0xe0
-#define IPTOS_PREC_INTERNETCONTROL 0xc0
-#define IPTOS_PREC_CRITIC_ECP 0xa0
-#define IPTOS_PREC_FLASHOVERRIDE 0x80
-#define IPTOS_PREC_FLASH 0x60
-#define IPTOS_PREC_IMMEDIATE 0x40
-#define IPTOS_PREC_PRIORITY 0x20
-#define IPTOS_PREC_ROUTINE 0x00
-
-/*
- * Definitions for options.
- */
-#define IPOPT_COPIED(o) ((o)&0x80)
-#define IPOPT_CLASS(o) ((o)&0x60)
-#define IPOPT_NUMBER(o) ((o)&0x1f)
-
-#define IPOPT_CONTROL 0x00
-#define IPOPT_RESERVED1 0x20
-#define IPOPT_DEBMEAS 0x40
-#define IPOPT_RESERVED2 0x60
-
-#define IPOPT_EOL 0 /* end of option list */
-#define IPOPT_NOP 1 /* no operation */
-
-#define IPOPT_RR 7 /* record packet route */
-#define IPOPT_TS 68 /* timestamp */
-#define IPOPT_SECURITY 130 /* provide s,c,h,tcc */
-#define IPOPT_LSRR 131 /* loose source route */
-#define IPOPT_SATID 136 /* satnet id */
-#define IPOPT_SSRR 137 /* strict source route */
-#define IPOPT_RA 148 /* router alert */
-
-/*
- * Offsets to fields in options other than EOL and NOP.
- */
-#define IPOPT_OPTVAL 0 /* option ID */
-#define IPOPT_OLEN 1 /* option length */
-#define IPOPT_OFFSET 2 /* offset within option */
-#define IPOPT_MINOFF 4 /* min value of above */
-
-/*
- * Time stamp option structure.
- */
-struct ip_timestamp {
- u_char ipt_code; /* IPOPT_TS */
- u_char ipt_len; /* size of structure (variable) */
- u_char ipt_ptr; /* index of current entry */
-#if BYTE_ORDER == LITTLE_ENDIAN
- u_int ipt_flg:4, /* flags, see below */
- ipt_oflw:4; /* overflow counter */
-#endif
-#if BYTE_ORDER == BIG_ENDIAN
- u_int ipt_oflw:4, /* overflow counter */
- ipt_flg:4; /* flags, see below */
-#endif
- union ipt_timestamp {
- n_long ipt_time[1];
- struct ipt_ta {
- struct in_addr ipt_addr;
- n_long ipt_time;
- } ipt_ta[1];
- } ipt_timestamp;
-};
-
-/* flag bits for ipt_flg */
-#define IPOPT_TS_TSONLY 0 /* timestamps only */
-#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */
-#define IPOPT_TS_PRESPEC 3 /* specified modules only */
-
-/* bits for security (not byte swapped) */
-#define IPOPT_SECUR_UNCLASS 0x0000
-#define IPOPT_SECUR_CONFID 0xf135
-#define IPOPT_SECUR_EFTO 0x789a
-#define IPOPT_SECUR_MMMM 0xbc4d
-#define IPOPT_SECUR_RESTR 0xaf13
-#define IPOPT_SECUR_SECRET 0xd788
-#define IPOPT_SECUR_TOPSECRET 0x6bc5
-
-/*
- * Internet implementation parameters.
- */
-#define MAXTTL 255 /* maximum time to live (seconds) */
-#define IPDEFTTL 64 /* default ttl, from RFC 1340 */
-#define IPFRAGTTL 60 /* time to live for frags, slowhz */
-#define IPTTLDEC 1 /* subtracted when forwarding */
-
-#define IP_MSS 576 /* default maximum segment size */
-
-#endif
diff --git a/StdLib/Include/netinet/tcp.h b/StdLib/Include/netinet/tcp.h
deleted file mode 100644
index 31948a6a70..0000000000
--- a/StdLib/Include/netinet/tcp.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/** @file
- Declarations for TCP.
-
- Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1982, 1986, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)tcp.h 8.1 (Berkeley) 6/10/93
- NetBSD: tcp.h,v 1.28 2007/12/25 18:33:47 perry Exp
- */
-#ifndef _NETINET_TCP_H_
-#define _NETINET_TCP_H_
-
-#include <sys/featuretest.h>
-
-typedef u_int32_t tcp_seq;
-
-/* Flag definitions for tcphdr.th_flags */
-#define TH_FIN 0x01
-#define TH_SYN 0x02
-#define TH_RST 0x04
-#define TH_PUSH 0x08
-#define TH_ACK 0x10
-#define TH_URG 0x20
-#define TH_ECE 0x40
-#define TH_CWR 0x80
-
-#pragma pack(1)
-/*
- * TCP header.
- * Per RFC 793, September, 1981.
- * Updated by RFC 3168, September, 2001.
- */
-struct tcphdr {
- u_int16_t th_sport; /* source port */
- u_int16_t th_dport; /* destination port */
- tcp_seq th_seq; /* sequence number */
- tcp_seq th_ack; /* acknowledgement number */
-#if BYTE_ORDER == LITTLE_ENDIAN
- /*LINTED non-portable bitfields*/
- u_int8_t th_x2:4, /* (unused) */
- th_off:4; /* data offset */
-#endif
-#if BYTE_ORDER == BIG_ENDIAN
- /*LINTED non-portable bitfields*/
- u_int8_t th_off:4, /* data offset */
- th_x2:4; /* (unused) */
-#endif
- u_int8_t th_flags;
- u_int16_t th_win; /* window */
- u_int16_t th_sum; /* checksum */
- u_int16_t th_urp; /* urgent pointer */
-};
-#pragma pack()
-
-#define TCPOPT_EOL 0
-#define TCPOPT_NOP 1
-#define TCPOPT_MAXSEG 2
-#define TCPOLEN_MAXSEG 4
-#define TCPOPT_WINDOW 3
-#define TCPOLEN_WINDOW 3
-#define TCPOPT_SACK_PERMITTED 4 /* Experimental */
-#define TCPOLEN_SACK_PERMITTED 2
-#define TCPOPT_SACK 5 /* Experimental */
-#define TCPOPT_TIMESTAMP 8
-#define TCPOLEN_TIMESTAMP 10
-#define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */
-
-#define TCPOPT_TSTAMP_HDR \
- (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
-
-#define TCPOPT_SIGNATURE 19 /* Keyed MD5: RFC 2385 */
-#define TCPOLEN_SIGNATURE 18
-#define TCPOLEN_SIGLEN (TCPOLEN_SIGNATURE+2) /* padding */
-
-#define MAX_TCPOPTLEN 40 /* max # bytes that go in options */
-
-/* Default maximum segment size for TCP.
- * This is defined by RFC 1112 Sec 4.2.2.6.
- */
-#define TCP_MSS 536
-
-#define TCP_MINMSS 216
-
-#define TCP_MAXWIN 65535 /* largest value for (unscaled) window */
-
-#define TCP_MAX_WINSHIFT 14 /* maximum window shift */
-
-#define TCP_MAXBURST 4 /* maximum segments in a burst */
-
-/* User-settable options (used with setsockopt). */
-#define TCP_NODELAY 1 /* don't delay send to coalesce packets */
-#define TCP_MAXSEG 2 /* set maximum segment size */
-#define TCP_KEEPIDLE 3
-
-#ifdef notyet
-#define TCP_NOPUSH 4 /* reserved for FreeBSD compat */
-#endif
-
-#define TCP_KEEPINTVL 5
-#define TCP_KEEPCNT 6
-#define TCP_KEEPINIT 7
-
-#ifdef notyet
-#define TCP_NOOPT 8 /* reserved for FreeBSD compat */
-#endif
-
-#define TCP_MD5SIG 0x10 /* use MD5 digests (RFC2385) */
-#define TCP_CONGCTL 0x20 /* selected congestion control */
-
-#endif /* !_NETINET_TCP_H_ */
diff --git a/StdLib/Include/netinet6/in6.h b/StdLib/Include/netinet6/in6.h
deleted file mode 100644
index f9a645aef1..0000000000
--- a/StdLib/Include/netinet6/in6.h
+++ /dev/null
@@ -1,791 +0,0 @@
-/* $NetBSD: in6.h,v 1.57 2006/10/31 00:29:30 cbiere Exp $ */
-/* $KAME: in6.h,v 1.83 2001/03/29 02:55:07 jinmei Exp $ */
-
-/*
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*/
-
-/*
- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Copyright (c) 1982, 1986, 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)in.h 8.3 (Berkeley) 1/3/94
- */
-
-#ifndef _NETINET6_IN6_H_
-#define _NETINET6_IN6_H_
-
-#ifndef __KAME_NETINET_IN_H_INCLUDED_
-#error "do not include netinet6/in6.h directly, include netinet/in.h. see RFC2553"
-#endif
-
-#include <sys/socket.h>
-
-/*
- * Identification of the network protocol stack
- * for *BSD-current/release: http://www.kame.net/dev/cvsweb.cgi/kame/COVERAGE
- * has the table of implementation/integration differences.
- */
-#define __KAME__
-#define __KAME_VERSION "NetBSD-current"
-
-/*
- * Local port number conventions:
- *
- * Ports < IPPORT_RESERVED are reserved for privileged processes (e.g. root),
- * unless a kernel is compiled with IPNOPRIVPORTS defined.
- *
- * When a user does a bind(2) or connect(2) with a port number of zero,
- * a non-conflicting local port address is chosen.
- *
- * The default range is IPPORT_ANONMIN to IPPORT_ANONMAX, although
- * that is settable by sysctl(3); net.inet.ip.anonportmin and
- * net.inet.ip.anonportmax respectively.
- *
- * A user may set the IPPROTO_IP option IP_PORTRANGE to change this
- * default assignment range.
- *
- * The value IP_PORTRANGE_DEFAULT causes the default behavior.
- *
- * The value IP_PORTRANGE_HIGH is the same as IP_PORTRANGE_DEFAULT,
- * and exists only for FreeBSD compatibility purposes.
- *
- * The value IP_PORTRANGE_LOW changes the range to the "low" are
- * that is (by convention) restricted to privileged processes.
- * This convention is based on "vouchsafe" principles only.
- * It is only secure if you trust the remote host to restrict these ports.
- * The range is IPPORT_RESERVEDMIN to IPPORT_RESERVEDMAX.
- */
-
-#if defined(_NETBSD_SOURCE)
-#define IPV6PORT_RESERVED 1024
-#define IPV6PORT_ANONMIN 49152
-#define IPV6PORT_ANONMAX 65535
-#define IPV6PORT_RESERVEDMIN 600
-#define IPV6PORT_RESERVEDMAX (IPV6PORT_RESERVED-1)
-#endif
-
-/*
- * IPv6 address
- */
-struct in6_addr {
- union {
- __uint8_t __u6_addr8[16];
- __uint16_t __u6_addr16[8];
- uint32_t __u6_addr32[4];
- } __u6_addr; /* 128-bit IP6 address */
-};
-
-#define s6_addr __u6_addr.__u6_addr8
-#ifdef _KERNEL /* XXX nonstandard */
-#define s6_addr8 __u6_addr.__u6_addr8
-#define s6_addr16 __u6_addr.__u6_addr16
-#define s6_addr32 __u6_addr.__u6_addr32
-#endif
-
-#define INET6_ADDRSTRLEN 46
-
-/*
- * Socket address for IPv6
- */
-#if defined(_NETBSD_SOURCE)
-#define SIN6_LEN
-#endif
-struct sockaddr_in6 {
- uint8_t sin6_len; /* length of this struct(socklen_t)*/
- sa_family_t sin6_family; /* AF_INET6 (sa_family_t) */
- in_port_t sin6_port; /* Transport layer port */
- uint32_t sin6_flowinfo; /* IP6 flow information */
- struct in6_addr sin6_addr; /* IP6 address */
- uint32_t sin6_scope_id; /* scope zone index */
-};
-
-/*
- * Local definition for masks
- */
-#ifdef _KERNEL /* XXX nonstandard */
-#define IN6MASK0 {{{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }}}
-#define IN6MASK32 {{{ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, \
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
-#define IN6MASK64 {{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
-#define IN6MASK96 {{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }}}
-#define IN6MASK128 {{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }}}
-#endif
-
-#ifdef _KERNEL
-extern const struct sockaddr_in6 sa6_any;
-
-extern const struct in6_addr in6mask0;
-extern const struct in6_addr in6mask32;
-extern const struct in6_addr in6mask64;
-extern const struct in6_addr in6mask96;
-extern const struct in6_addr in6mask128;
-#endif /* _KERNEL */
-
-/*
- * Macros started with IPV6_ADDR is KAME local
- */
-#ifdef _KERNEL /* XXX nonstandard */
-#if BYTE_ORDER == BIG_ENDIAN
-#define IPV6_ADDR_INT32_ONE 1
-#define IPV6_ADDR_INT32_TWO 2
-#define IPV6_ADDR_INT32_MNL 0xff010000
-#define IPV6_ADDR_INT32_MLL 0xff020000
-#define IPV6_ADDR_INT32_SMP 0x0000ffff
-#define IPV6_ADDR_INT16_ULL 0xfe80
-#define IPV6_ADDR_INT16_USL 0xfec0
-#define IPV6_ADDR_INT16_MLL 0xff02
-#elif BYTE_ORDER == LITTLE_ENDIAN
-#define IPV6_ADDR_INT32_ONE 0x01000000
-#define IPV6_ADDR_INT32_TWO 0x02000000
-#define IPV6_ADDR_INT32_MNL 0x000001ff
-#define IPV6_ADDR_INT32_MLL 0x000002ff
-#define IPV6_ADDR_INT32_SMP 0xffff0000
-#define IPV6_ADDR_INT16_ULL 0x80fe
-#define IPV6_ADDR_INT16_USL 0xc0fe
-#define IPV6_ADDR_INT16_MLL 0x02ff
-#endif
-#endif
-
-/*
- * Definition of some useful macros to handle IP6 addresses
- */
-#define IN6ADDR_ANY_INIT \
- {{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
-#define IN6ADDR_LOOPBACK_INIT \
- {{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
-#define IN6ADDR_NODELOCAL_ALLNODES_INIT \
- {{{ 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
-#define IN6ADDR_LINKLOCAL_ALLNODES_INIT \
- {{{ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
-#define IN6ADDR_LINKLOCAL_ALLROUTERS_INIT \
- {{{ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }}}
-
-extern const struct in6_addr in6addr_any;
-extern const struct in6_addr in6addr_loopback;
-extern const struct in6_addr in6addr_nodelocal_allnodes;
-extern const struct in6_addr in6addr_linklocal_allnodes;
-extern const struct in6_addr in6addr_linklocal_allrouters;
-
-/*
- * Equality
- * NOTE: Some of kernel programming environment (for example, openbsd/sparc)
- * does not supply memcmp(). For userland memcmp() is preferred as it is
- * in ANSI standard.
- */
-#ifdef _KERNEL
-#define IN6_ARE_ADDR_EQUAL(a, b) \
- (bcmp(&(a)->s6_addr[0], &(b)->s6_addr[0], sizeof(struct in6_addr)) == 0)
-#else
-#define IN6_ARE_ADDR_EQUAL(a, b) \
- (memcmp(&(a)->s6_addr[0], &(b)->s6_addr[0], sizeof(struct in6_addr)) == 0)
-#endif
-
-/*
- * Unspecified
- */
-#define IN6_IS_ADDR_UNSPECIFIED(a) \
- ((*(const uint32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
- (*(const uint32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
- (*(const uint32_t *)(const void *)(&(a)->s6_addr[8]) == 0) && \
- (*(const uint32_t *)(const void *)(&(a)->s6_addr[12]) == 0))
-
-/*
- * Loopback
- */
-#define IN6_IS_ADDR_LOOPBACK(a) \
- ((*(const uint32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
- (*(const uint32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
- (*(const uint32_t *)(const void *)(&(a)->s6_addr[8]) == 0) && \
- (*(const uint32_t *)(const void *)(&(a)->s6_addr[12]) == ntohl(1)))
-
-/*
- * IPv4 compatible
- */
-#define IN6_IS_ADDR_V4COMPAT(a) \
- ((*(const uint32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
- (*(const uint32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
- (*(const uint32_t *)(const void *)(&(a)->s6_addr[8]) == 0) && \
- (*(const uint32_t *)(const void *)(&(a)->s6_addr[12]) != 0) && \
- (*(const uint32_t *)(const void *)(&(a)->s6_addr[12]) != ntohl(1)))
-
-/*
- * Mapped
- */
-#define IN6_IS_ADDR_V4MAPPED(a) \
- ((*(const uint32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
- (*(const uint32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
- (*(const uint32_t *)(const void *)(&(a)->s6_addr[8]) == ntohl(0x0000ffff)))
-
-/*
- * KAME Scope Values
- */
-
-#ifdef _KERNEL /* XXX nonstandard */
-#define IPV6_ADDR_SCOPE_NODELOCAL 0x01
-#define IPV6_ADDR_SCOPE_INTFACELOCAL 0x01
-#define IPV6_ADDR_SCOPE_LINKLOCAL 0x02
-#define IPV6_ADDR_SCOPE_SITELOCAL 0x05
-#define IPV6_ADDR_SCOPE_ORGLOCAL 0x08 /* just used in this file */
-#define IPV6_ADDR_SCOPE_GLOBAL 0x0e
-#else
-#define __IPV6_ADDR_SCOPE_NODELOCAL 0x01
-#define __IPV6_ADDR_SCOPE_LINKLOCAL 0x02
-#define __IPV6_ADDR_SCOPE_SITELOCAL 0x05
-#define __IPV6_ADDR_SCOPE_ORGLOCAL 0x08 /* just used in this file */
-#define __IPV6_ADDR_SCOPE_GLOBAL 0x0e
-#endif
-
-/*
- * Unicast Scope
- * Note that we must check topmost 10 bits only, not 16 bits (see RFC2373).
- */
-#define IN6_IS_ADDR_LINKLOCAL(a) \
- (((a)->s6_addr[0] == 0xfe) && (((a)->s6_addr[1] & 0xc0) == 0x80))
-#define IN6_IS_ADDR_SITELOCAL(a) \
- (((a)->s6_addr[0] == 0xfe) && (((a)->s6_addr[1] & 0xc0) == 0xc0))
-
-/*
- * Multicast
- */
-#define IN6_IS_ADDR_MULTICAST(a) ((a)->s6_addr[0] == 0xff)
-
-#ifdef _KERNEL /* XXX nonstandard */
-#define IPV6_ADDR_MC_SCOPE(a) ((a)->s6_addr[1] & 0x0f)
-#else
-#define __IPV6_ADDR_MC_SCOPE(a) ((a)->s6_addr[1] & 0x0f)
-#endif
-
-/*
- * Multicast Scope
- */
-#ifdef _KERNEL /* refers nonstandard items */
-#define IN6_IS_ADDR_MC_NODELOCAL(a) \
- (IN6_IS_ADDR_MULTICAST(a) && \
- (IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_NODELOCAL))
-#define IN6_IS_ADDR_MC_INTFACELOCAL(a) \
- (IN6_IS_ADDR_MULTICAST(a) && \
- (IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_INTFACELOCAL))
-#define IN6_IS_ADDR_MC_LINKLOCAL(a) \
- (IN6_IS_ADDR_MULTICAST(a) && \
- (IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_LINKLOCAL))
-#define IN6_IS_ADDR_MC_SITELOCAL(a) \
- (IN6_IS_ADDR_MULTICAST(a) && \
- (IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_SITELOCAL))
-#define IN6_IS_ADDR_MC_ORGLOCAL(a) \
- (IN6_IS_ADDR_MULTICAST(a) && \
- (IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_ORGLOCAL))
-#define IN6_IS_ADDR_MC_GLOBAL(a) \
- (IN6_IS_ADDR_MULTICAST(a) && \
- (IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_GLOBAL))
-#else
-#define IN6_IS_ADDR_MC_NODELOCAL(a) \
- (IN6_IS_ADDR_MULTICAST(a) && \
- (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_NODELOCAL))
-#define IN6_IS_ADDR_MC_LINKLOCAL(a) \
- (IN6_IS_ADDR_MULTICAST(a) && \
- (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_LINKLOCAL))
-#define IN6_IS_ADDR_MC_SITELOCAL(a) \
- (IN6_IS_ADDR_MULTICAST(a) && \
- (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_SITELOCAL))
-#define IN6_IS_ADDR_MC_ORGLOCAL(a) \
- (IN6_IS_ADDR_MULTICAST(a) && \
- (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_ORGLOCAL))
-#define IN6_IS_ADDR_MC_GLOBAL(a) \
- (IN6_IS_ADDR_MULTICAST(a) && \
- (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_GLOBAL))
-#endif
-
-#ifdef _KERNEL /* nonstandard */
-/*
- * KAME Scope
- */
-#define IN6_IS_SCOPE_LINKLOCAL(a) \
- ((IN6_IS_ADDR_LINKLOCAL(a)) || \
- (IN6_IS_ADDR_MC_LINKLOCAL(a)))
-
-#define IN6_IS_SCOPE_EMBEDDABLE(__a) \
- (IN6_IS_SCOPE_LINKLOCAL(__a) || IN6_IS_ADDR_MC_INTFACELOCAL(__a))
-
-#define IFA6_IS_DEPRECATED(a) \
- ((a)->ia6_lifetime.ia6t_pltime != ND6_INFINITE_LIFETIME && \
- (u_int32_t)((time_second - (a)->ia6_updatetime)) > \
- (a)->ia6_lifetime.ia6t_pltime)
-#define IFA6_IS_INVALID(a) \
- ((a)->ia6_lifetime.ia6t_vltime != ND6_INFINITE_LIFETIME && \
- (u_int32_t)((time_second - (a)->ia6_updatetime)) > \
- (a)->ia6_lifetime.ia6t_vltime)
-#endif
-
-/*
- * IP6 route structure
- */
-#if defined(_NETBSD_SOURCE)
-struct route_in6 {
- struct rtentry *ro_rt;
- struct sockaddr_in6 ro_dst;
-};
-#endif
-
-/*
- * Options for use with [gs]etsockopt at the IPV6 level.
- * First word of comment is data type; bool is stored in int.
- */
-/* no hdrincl */
-#if 0
-/* These are deprecated non-standard options which are no longer supported. */
-#define IPV6_OPTIONS 1 /* buf/ip6_opts; set/get IP6 options */
-#define IPV6_RECVOPTS 5 /* bool; receive all IP6 opts w/dgram */
-#define IPV6_RECVRETOPTS 6 /* bool; receive IP6 opts for response */
-#define IPV6_RECVDSTADDR 7 /* bool; receive IP6 dst addr w/dgram */
-#define IPV6_RETOPTS 8 /* ip6_opts; set/get IP6 options */
-#endif
-#define IPV6_SOCKOPT_RESERVED1 3 /* reserved for future use */
-#define IPV6_UNICAST_HOPS 4 /* int; IP6 hops */
-#define IPV6_MULTICAST_IF 9 /* u_int; set/get IP6 multicast i/f */
-#define IPV6_MULTICAST_HOPS 10 /* int; set/get IP6 multicast hops */
-#define IPV6_MULTICAST_LOOP 11 /* u_int; set/get IP6 multicast loopback */
-#define IPV6_JOIN_GROUP 12 /* ip6_mreq; join a group membership */
-#define IPV6_LEAVE_GROUP 13 /* ip6_mreq; leave a group membership */
-#define IPV6_PORTRANGE 14 /* int; range to choose for unspec port */
-#if defined(_NETBSD_SOURCE)
-#define ICMP6_FILTER 18 /* icmp6_filter; icmp6 filter */
-#endif
-/* RFC2292 options */
-#ifdef _KERNEL
-#define IPV6_2292PKTINFO 19 /* bool; send/recv if, src/dst addr */
-#define IPV6_2292HOPLIMIT 20 /* bool; hop limit */
-#define IPV6_2292NEXTHOP 21 /* bool; next hop addr */
-#define IPV6_2292HOPOPTS 22 /* bool; hop-by-hop option */
-#define IPV6_2292DSTOPTS 23 /* bool; destinaion option */
-#define IPV6_2292RTHDR 24 /* bool; routing header */
-#define IPV6_2292PKTOPTIONS 25 /* buf/cmsghdr; set/get IPv6 options */
-#endif
-#define IPV6_CHECKSUM 26 /* int; checksum offset for raw socket */
-#define IPV6_V6ONLY 27 /* bool; make AF_INET6 sockets v6 only */
-
-#if 1 /* IPSEC */
-#define IPV6_IPSEC_POLICY 28 /* struct; get/set security policy */
-#endif
-#define IPV6_FAITH 29 /* bool; accept FAITH'ed connections */
-
-/* new socket options introduced in RFC3542 */
-#define IPV6_RTHDRDSTOPTS 35 /* ip6_dest; send dst option before rthdr */
-
-#define IPV6_RECVPKTINFO 36 /* bool; recv if, dst addr */
-#define IPV6_RECVHOPLIMIT 37 /* bool; recv hop limit */
-#define IPV6_RECVRTHDR 38 /* bool; recv routing header */
-#define IPV6_RECVHOPOPTS 39 /* bool; recv hop-by-hop option */
-#define IPV6_RECVDSTOPTS 40 /* bool; recv dst option after rthdr */
-#ifdef _KERNEL
-#define IPV6_RECVRTHDRDSTOPTS 41 /* bool; recv dst option before rthdr */
-#endif
-#define IPV6_USE_MIN_MTU 42 /* bool; send packets at the minimum MTU */
-#define IPV6_RECVPATHMTU 43 /* bool; notify an according MTU */
-#define IPV6_PATHMTU 44 /* mtuinfo; get the current path MTU (sopt),
- 4 bytes int; MTU notification (cmsg) */
-
-/* more new socket options introduced in RFC3542 */
-#define IPV6_PKTINFO 46 /* in6_pktinfo; send if, src addr */
-#define IPV6_HOPLIMIT 47 /* int; send hop limit */
-#define IPV6_NEXTHOP 48 /* sockaddr; next hop addr */
-#define IPV6_HOPOPTS 49 /* ip6_hbh; send hop-by-hop option */
-#define IPV6_DSTOPTS 50 /* ip6_dest; send dst option befor rthdr */
-#define IPV6_RTHDR 51 /* ip6_rthdr; send routing header */
-
-#define IPV6_RECVTCLASS 57 /* bool; recv traffic class values */
-#ifdef _KERNEL
-#define IPV6_OTCLASS 58 /* u_int8_t; send traffic class value */
-#endif
-
-#define IPV6_TCLASS 61 /* int; send traffic class value */
-#define IPV6_DONTFRAG 62 /* bool; disable IPv6 fragmentation */
-/* to define items, should talk with KAME guys first, for *BSD compatibility */
-
-#define IPV6_RTHDR_LOOSE 0 /* this hop need not be a neighbor. XXX old spec */
-#define IPV6_RTHDR_STRICT 1 /* this hop must be a neighbor. XXX old spec */
-#define IPV6_RTHDR_TYPE_0 0 /* IPv6 routing header type 0 */
-
-/*
- * Defaults and limits for options
- */
-#define IPV6_DEFAULT_MULTICAST_HOPS 1 /* normally limit m'casts to 1 hop */
-#define IPV6_DEFAULT_MULTICAST_LOOP 1 /* normally hear sends if a member */
-
-/*
- * Argument structure for IPV6_JOIN_GROUP and IPV6_LEAVE_GROUP.
- */
-struct ipv6_mreq {
- struct in6_addr ipv6mr_multiaddr;
- unsigned int ipv6mr_interface;
-};
-
-/*
- * IPV6_PKTINFO: Packet information(RFC2292 sec 5)
- */
-struct in6_pktinfo {
- struct in6_addr ipi6_addr; /* src/dst IPv6 address */
- unsigned int ipi6_ifindex; /* send/recv interface index */
-};
-
-/*
- * Control structure for IPV6_RECVPATHMTU socket option.
- */
-struct ip6_mtuinfo {
- struct sockaddr_in6 ip6m_addr; /* or sockaddr_storage? */
- uint32_t ip6m_mtu;
-};
-
-/*
- * Argument for IPV6_PORTRANGE:
- * - which range to search when port is unspecified at bind() or connect()
- */
-#define IPV6_PORTRANGE_DEFAULT 0 /* default range */
-#define IPV6_PORTRANGE_HIGH 1 /* "high" - request firewall bypass */
-#define IPV6_PORTRANGE_LOW 2 /* "low" - vouchsafe security */
-
-#if defined(_NETBSD_SOURCE)
-/*
- * Definitions for inet6 sysctl operations.
- *
- * Third level is protocol number.
- * Fourth level is desired variable within that protocol.
- */
-#define IPV6PROTO_MAXID (IPPROTO_PIM + 1) /* don't list to IPV6PROTO_MAX */
-
-#define CTL_IPV6PROTO_NAMES { \
- { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
- { 0, 0 }, \
- { "tcp6", CTLTYPE_NODE }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { "udp6", CTLTYPE_NODE }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
- { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
- { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
- { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
- { 0, 0 }, \
- { "ip6", CTLTYPE_NODE }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
- { 0, 0 }, \
- { "ipsec6", CTLTYPE_NODE }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { "icmp6", CTLTYPE_NODE }, \
- { 0, 0 }, \
- { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
- { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
- { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
- { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
- { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
- { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
- { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
- { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { "pim6", CTLTYPE_NODE }, \
-}
-
-/*
- * Names for IP sysctl objects
- */
-#define IPV6CTL_FORWARDING 1 /* act as router */
-#define IPV6CTL_SENDREDIRECTS 2 /* may send redirects when forwarding*/
-#define IPV6CTL_DEFHLIM 3 /* default Hop-Limit */
-#ifdef notyet
-#define IPV6CTL_DEFMTU 4 /* default MTU */
-#endif
-#define IPV6CTL_FORWSRCRT 5 /* forward source-routed dgrams */
-#define IPV6CTL_STATS 6 /* stats */
-#define IPV6CTL_MRTSTATS 7 /* multicast forwarding stats */
-#define IPV6CTL_MRTPROTO 8 /* multicast routing protocol */
-#define IPV6CTL_MAXFRAGPACKETS 9 /* max packets reassembly queue */
-#define IPV6CTL_SOURCECHECK 10 /* verify source route and intf */
-#define IPV6CTL_SOURCECHECK_LOGINT 11 /* minimume logging interval */
-#define IPV6CTL_ACCEPT_RTADV 12
-#define IPV6CTL_KEEPFAITH 13
-#define IPV6CTL_LOG_INTERVAL 14
-#define IPV6CTL_HDRNESTLIMIT 15
-#define IPV6CTL_DAD_COUNT 16
-#define IPV6CTL_AUTO_FLOWLABEL 17
-#define IPV6CTL_DEFMCASTHLIM 18
-#define IPV6CTL_GIF_HLIM 19 /* default HLIM for gif encap packet */
-#define IPV6CTL_KAME_VERSION 20
-#define IPV6CTL_USE_DEPRECATED 21 /* use deprecated addr (RFC2462 5.5.4) */
-#define IPV6CTL_RR_PRUNE 22 /* walk timer for router renumbering */
-/* 23: reserved */
-#define IPV6CTL_V6ONLY 24
-/* 25 to 27: reserved */
-#define IPV6CTL_ANONPORTMIN 28 /* minimum ephemeral port */
-#define IPV6CTL_ANONPORTMAX 29 /* maximum ephemeral port */
-#define IPV6CTL_LOWPORTMIN 30 /* minimum reserved port */
-#define IPV6CTL_LOWPORTMAX 31 /* maximum reserved port */
-/* 32 to 38: reserved */
-#define IPV6CTL_USE_DEFAULTZONE 39 /* use default scope zone */
-/* 40: reserved */
-#define IPV6CTL_MAXFRAGS 41 /* max fragments */
-#define IPV6CTL_IFQ 42 /* ip6intrq node */
-/* New entries should be added here from current IPV6CTL_MAXID value. */
-/* to define items, should talk with KAME guys first, for *BSD compatibility */
-#define IPV6CTL_MAXID 43
-
-#define IPV6CTL_NAMES { \
- { 0, 0 }, \
- { "forwarding", CTLTYPE_INT }, \
- { "redirect", CTLTYPE_INT }, \
- { "hlim", CTLTYPE_INT }, \
- { "mtu", CTLTYPE_INT }, \
- { "forwsrcrt", CTLTYPE_INT }, \
- { "stats", CTLTYPE_STRUCT }, \
- { 0, 0 }, \
- { "mrtproto", CTLTYPE_INT }, \
- { "maxfragpackets", CTLTYPE_INT }, \
- { "sourcecheck", CTLTYPE_INT }, \
- { "sourcecheck_logint", CTLTYPE_INT }, \
- { "accept_rtadv", CTLTYPE_INT }, \
- { "keepfaith", CTLTYPE_INT }, \
- { "log_interval", CTLTYPE_INT }, \
- { "hdrnestlimit", CTLTYPE_INT }, \
- { "dad_count", CTLTYPE_INT }, \
- { "auto_flowlabel", CTLTYPE_INT }, \
- { "defmcasthlim", CTLTYPE_INT }, \
- { "gifhlim", CTLTYPE_INT }, \
- { "kame_version", CTLTYPE_STRING }, \
- { "use_deprecated", CTLTYPE_INT }, \
- { "rr_prune", CTLTYPE_INT }, \
- { 0, 0 }, \
- { "v6only", CTLTYPE_INT }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { "anonportmin", CTLTYPE_INT }, \
- { "anonportmax", CTLTYPE_INT }, \
- { "lowportmin", CTLTYPE_INT }, \
- { "lowportmax", CTLTYPE_INT }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { 0, 0 }, \
- { "maxfrags", CTLTYPE_INT }, \
- { "ifq", CTLTYPE_NODE }, \
-}
-
-#endif /* _NETBSD_SOURCE */
-
-#ifdef _KERNEL
-struct cmsghdr;
-
-/*
- * in6_cksum_phdr:
- *
- * Compute significant parts of the IPv6 checksum pseudo-header
- * for use in a delayed TCP/UDP checksum calculation.
- *
- * Args:
- *
- * src Source IPv6 address
- * dst Destination IPv6 address
- * len htonl(proto-hdr-len)
- * nxt htonl(next-proto-number)
- *
- * NOTE: We expect the src and dst addresses to be 16-bit
- * aligned!
- */
-static __inline u_int16_t __attribute__((__unused__))
-in6_cksum_phdr(const struct in6_addr *src, const struct in6_addr *dst,
- u_int32_t len, u_int32_t nxt)
-{
- u_int32_t sum = 0;
- const u_int16_t *w;
-
- /*LINTED*/
- w = (const u_int16_t *) src;
- sum += w[0];
- if (!IN6_IS_SCOPE_LINKLOCAL(src))
- sum += w[1];
- sum += w[2]; sum += w[3]; sum += w[4]; sum += w[5];
- sum += w[6]; sum += w[7];
-
- /*LINTED*/
- w = (const u_int16_t *) dst;
- sum += w[0];
- if (!IN6_IS_SCOPE_LINKLOCAL(dst))
- sum += w[1];
- sum += w[2]; sum += w[3]; sum += w[4]; sum += w[5];
- sum += w[6]; sum += w[7];
-
- sum += (u_int16_t)(len >> 16) + (u_int16_t)(len /*& 0xffff*/);
-
- sum += (u_int16_t)(nxt >> 16) + (u_int16_t)(nxt /*& 0xffff*/);
-
- sum = (u_int16_t)(sum >> 16) + (u_int16_t)(sum /*& 0xffff*/);
-
- if (sum > 0xffff)
- sum -= 0xffff;
-
- return (sum);
-}
-
-struct mbuf;
-struct ifnet;
-int in6_cksum __P((struct mbuf *, u_int8_t, u_int32_t, u_int32_t));
-void in6_delayed_cksum __P((struct mbuf *));
-int in6_localaddr __P((struct in6_addr *));
-int in6_addrscope __P((struct in6_addr *));
-struct in6_ifaddr *in6_ifawithifp __P((struct ifnet *, struct in6_addr *));
-extern void in6_if_up __P((struct ifnet *));
-#ifndef __FreeBSD__
-extern int in6_src_sysctl __P((void *, size_t *, void *, size_t));
-#endif
-extern void addrsel_policy_init __P((void));
-extern u_char ip6_protox[];
-
-#define satosin6(sa) ((struct sockaddr_in6 *)(sa))
-#define sin6tosa(sin6) ((struct sockaddr *)(sin6))
-#define ifatoia6(ifa) ((struct in6_ifaddr *)(ifa))
-#endif /* _KERNEL */
-
-#if defined(_NETBSD_SOURCE)
-
-#include <machine/ansi.h>
-
-#ifdef _EFI_SIZE_T_
-typedef _EFI_SIZE_T_ size_t;
-#define _SIZE_T
-#undef _EFI_SIZE_T_
-#undef _BSD_SIZE_T_
-#endif
-
-#include <sys/EfiCdefs.h>
-
-__BEGIN_DECLS
-struct cmsghdr;
-
-extern int inet6_option_space (int);
-extern int inet6_option_init (void *, struct cmsghdr **, int);
-extern int inet6_option_append (struct cmsghdr *, const uint8_t *,
- int, int);
-extern uint8_t *inet6_option_alloc (struct cmsghdr *, int, int, int);
-extern int inet6_option_next (const struct cmsghdr *, uint8_t **);
-extern int inet6_option_find (const struct cmsghdr *, uint8_t **, int);
-
-extern size_t inet6_rthdr_space (int, int);
-extern struct cmsghdr *inet6_rthdr_init (void *, int);
-extern int inet6_rthdr_add (struct cmsghdr *, const struct in6_addr *,
- unsigned int);
-extern int inet6_rthdr_lasthop (struct cmsghdr *, unsigned int);
-#if 0 /* not implemented yet */
-extern int inet6_rthdr_reverse (const struct cmsghdr *, struct cmsghdr *);
-#endif
-extern int inet6_rthdr_segments (const struct cmsghdr *);
-extern struct in6_addr *inet6_rthdr_getaddr (struct cmsghdr *, int);
-extern int inet6_rthdr_getflags (const struct cmsghdr *, int);
-
-extern int inet6_opt_init (void *, socklen_t);
-extern int inet6_opt_append (void *, socklen_t, int, uint8_t,
- socklen_t, uint8_t, void **);
-extern int inet6_opt_finish (void *, socklen_t, int);
-extern int inet6_opt_set_val (void *, int, void *, socklen_t);
-
-extern int inet6_opt_next (void *, socklen_t, int, uint8_t *,
- socklen_t *, void **);
-extern int inet6_opt_find (void *, socklen_t, int, uint8_t,
- socklen_t *, void **);
-extern int inet6_opt_get_val (void *, int, void *, socklen_t);
-extern socklen_t inet6_rth_space (int, int);
-extern void *inet6_rth_init (void *, socklen_t, int, int);
-extern int inet6_rth_add (void *, const struct in6_addr *);
-extern int inet6_rth_reverse (const void *, void *);
-extern int inet6_rth_segments (const void *);
-extern struct in6_addr *inet6_rth_getaddr (const void *, int);
-__END_DECLS
-#endif /* _NETBSD_SOURCE */
-
-#endif /* !_NETINET6_IN6_H_ */
diff --git a/StdLib/Include/netns/ns.h b/StdLib/Include/netns/ns.h
deleted file mode 100644
index 58bac08301..0000000000
--- a/StdLib/Include/netns/ns.h
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (c) 1984, 1985, 1986, 1987, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)ns.h 8.1 (Berkeley) 6/10/93
- * $Id: ns.h,v 1.1.1.1 2003/11/19 01:48:56 kyu3 Exp $
- */
-
-#ifndef _NETNS_NS_H_
-#define _NETNS_NS_H_
-
-/*
- * Constants and Structures defined by the Xerox Network Software
- * per "Internet Transport Protocols", XSIS 028112, December 1981
- */
-
-/*
- * Protocols
- */
-#define NSPROTO_RI 1 /* Routing Information */
-#define NSPROTO_ECHO 2 /* Echo Protocol */
-#define NSPROTO_ERROR 3 /* Error Protocol */
-#define NSPROTO_PE 4 /* Packet Exchange */
-#define NSPROTO_SPP 5 /* Sequenced Packet */
-#define NSPROTO_RAW 255 /* Placemarker*/
-#define NSPROTO_MAX 256 /* Placemarker*/
-
-
-/*
- * Port/Socket numbers: network standard functions
- */
-
-#define NSPORT_RI 1 /* Routing Information */
-#define NSPORT_ECHO 2 /* Echo */
-#define NSPORT_RE 3 /* Router Error */
-
-/*
- * Ports < NSPORT_RESERVED are reserved for priveleged
- * processes (e.g. root).
- */
-#define NSPORT_RESERVED 3000
-
-/* flags passed to ns_output as last parameter */
-
-#define NS_FORWARDING 0x1 /* most of idp header exists */
-#define NS_ROUTETOIF 0x10 /* same as SO_DONTROUTE */
-#define NS_ALLOWBROADCAST SO_BROADCAST /* can send broadcast packets */
-
-#define NS_MAXHOPS 15
-
-/* flags passed to get/set socket option */
-#define SO_HEADERS_ON_INPUT 1
-#define SO_HEADERS_ON_OUTPUT 2
-#define SO_DEFAULT_HEADERS 3
-#define SO_LAST_HEADER 4
-#define SO_NSIP_ROUTE 5
-#define SO_SEQNO 6
-#define SO_ALL_PACKETS 7
-#define SO_MTU 8
-
-
-/*
- * NS addressing
- */
-union ns_host {
- u_char c_host[6];
- u_short s_host[3];
-};
-
-union ns_net {
- u_char c_net[4];
- u_short s_net[2];
-};
-
-union ns_net_u {
- union ns_net net_e;
- u_long long_e;
-};
-
-struct ns_addr {
- union ns_net x_net;
- union ns_host x_host;
- u_short x_port;
-};
-
-/*
- * Socket address, Xerox style
- */
-struct sockaddr_ns {
- u_char sns_len;
- u_char sns_family;
- struct ns_addr sns_addr;
- char sns_zero[2];
-};
-#define sns_port sns_addr.x_port
-
-#ifdef vax
-#define ns_netof(a) (*(long *) & ((a).x_net)) /* XXX - not needed */
-#endif
-#define ns_neteqnn(a,b) (((a).s_net[0]==(b).s_net[0]) && \
- ((a).s_net[1]==(b).s_net[1]))
-#define ns_neteq(a,b) ns_neteqnn((a).x_net, (b).x_net)
-#define satons_addr(sa) (((struct sockaddr_ns *)&(sa))->sns_addr)
-#define ns_hosteqnh(s,t) ((s).s_host[0] == (t).s_host[0] && \
- (s).s_host[1] == (t).s_host[1] && (s).s_host[2] == (t).s_host[2])
-#define ns_hosteq(s,t) (ns_hosteqnh((s).x_host,(t).x_host))
-#define ns_nullhost(x) (((x).x_host.s_host[0]==0) && \
- ((x).x_host.s_host[1]==0) && ((x).x_host.s_host[2]==0))
-
-#ifdef KERNEL
-extern struct domain nsdomain;
-union ns_host ns_thishost;
-union ns_host ns_zerohost;
-union ns_host ns_broadhost;
-union ns_net ns_zeronet;
-union ns_net ns_broadnet;
-u_short ns_cksum();
-#else
-
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-extern struct ns_addr ns_addr (const char *);
-extern char *ns_ntoa (struct ns_addr);
-__END_DECLS
-
-#endif
-
-#endif
diff --git a/StdLib/Include/nl_types.h b/StdLib/Include/nl_types.h
deleted file mode 100644
index f98111a242..0000000000
--- a/StdLib/Include/nl_types.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* $NetBSD: nl_types.h,v 1.11 2005/02/03 04:39:32 perry Exp $ */
-
-/*-
- * Copyright (c) 1996 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by J.T. Conklin.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _NL_TYPES_H_
-#define _NL_TYPES_H_
-#include <sys/EfiCdefs.h>
-
-#ifdef _NLS_PRIVATE
-/*
- * MESSAGE CATALOG FILE FORMAT.
- *
- * The NetBSD message catalog format is similar to the format used by
- * Svr4 systems. The differences are:
- * * fixed byte order (big endian)
- * * fixed data field sizes
- *
- * A message catalog contains four data types: a catalog header, one
- * or more set headers, one or more message headers, and one or more
- * text strings.
- */
-
-#define _NLS_MAGIC 0xff88ff89
-
-struct _nls_cat_hdr {
- int32_t __magic;
- int32_t __nsets;
- int32_t __mem;
- int32_t __msg_hdr_offset;
- int32_t __msg_txt_offset;
-} ;
-
-struct _nls_set_hdr {
- int32_t __setno; /* set number: 0 < x <= NL_SETMAX */
- int32_t __nmsgs; /* number of messages in the set */
- int32_t __index; /* index of first msg_hdr in msg_hdr table */
-} ;
-
-struct _nls_msg_hdr {
- int32_t __msgno; /* msg number: 0 < x <= NL_MSGMAX */
- int32_t __msglen;
- int32_t __offset;
-} ;
-
-#endif
-
-#define NL_SETD 1
-#define NL_CAT_LOCALE 1
-
-typedef struct __nl_cat_d {
- void *__data;
- int __size;
-} *nl_catd;
-
-typedef LONG32 nl_item;
-
-__BEGIN_DECLS
-nl_catd catopen(const char *, int);
-char *catgets(nl_catd, int, int, const char *)
- __attribute__((__format_arg__(4)));
-int catclose(nl_catd);
-__END_DECLS
-
-#endif /* _NL_TYPES_H_ */
diff --git a/StdLib/Include/nsswitch.h b/StdLib/Include/nsswitch.h
deleted file mode 100644
index 89e3a3e68b..0000000000
--- a/StdLib/Include/nsswitch.h
+++ /dev/null
@@ -1,237 +0,0 @@
-/* $NetBSD: nsswitch.h,v 1.20 2008/04/28 20:22:54 martin Exp $ */
-
-/*-
- * Copyright (c) 1997, 1998, 1999, 2004 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Luke Mewburn.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _NSSWITCH_H
-#define _NSSWITCH_H 1
-
-/*
- * Don't use va_list in prototypes. va_list is typedef'd in two places
- * (<machine/varargs.h> and <machine/stdarg.h>), so if we include one of
- * them here we may collide with the utility's includes. It's unreasonable
- * for utilities to have to include one of them to include nsswitch.h, so
- * we get _BSD_VA_LIST_ from <machine/ansi.h> and use it.
- */
-#include <machine/ansi.h>
-#include <sys/types.h>
-
-#define NSS_MODULE_INTERFACE_VERSION 0
-
-#ifndef _PATH_NS_CONF
-#define _PATH_NS_CONF "/etc/nsswitch.conf"
-#endif
-
-#define NS_CONTINUE 0
-#define NS_RETURN 1
-
-/*
- * Layout of:
- * uint32_t ns_src.flags
- */
- /* nsswitch.conf status codes and nsdispatch(3) return values */
-#define NS_SUCCESS (1<<0) /* entry was found */
-#define NS_UNAVAIL (1<<1) /* source not responding, or corrupt */
-#define NS_NOTFOUND (1<<2) /* source responded 'no such entry' */
-#define NS_TRYAGAIN (1<<3) /* source busy, may respond to retrys */
-#define NS_STATUSMASK 0x000000ff /* bitmask to get the status flags */
-
- /* internal nsdispatch(3) flags; not settable in nsswitch.conf(5) */
-#define NS_FORCEALL (1<<8) /* force all methods to be invoked; */
-
-/*
- * Currently implemented sources.
- */
-#define NSSRC_FILES "files" /* local files */
-#define NSSRC_DNS "dns" /* DNS; IN for hosts, HS for others */
-#define NSSRC_NIS "nis" /* YP/NIS */
-#define NSSRC_COMPAT "compat" /* passwd,group in YP compat mode */
-
-/*
- * Currently implemented databases.
- */
-#define NSDB_HOSTS "hosts"
-#define NSDB_GROUP "group"
-#define NSDB_GROUP_COMPAT "group_compat"
-#define NSDB_NETGROUP "netgroup"
-#define NSDB_NETWORKS "networks"
-#define NSDB_PASSWD "passwd"
-#define NSDB_PASSWD_COMPAT "passwd_compat"
-#define NSDB_SHELLS "shells"
-
-/*
- * Suggested databases to implement.
- */
-#define NSDB_ALIASES "aliases"
-#define NSDB_AUTH "auth"
-#define NSDB_AUTOMOUNT "automount"
-#define NSDB_BOOTPARAMS "bootparams"
-#define NSDB_ETHERS "ethers"
-#define NSDB_EXPORTS "exports"
-#define NSDB_NETMASKS "netmasks"
-#define NSDB_PHONES "phones"
-#define NSDB_PRINTCAP "printcap"
-#define NSDB_PROTOCOLS "protocols"
-#define NSDB_REMOTE "remote"
-#define NSDB_RPC "rpc"
-#define NSDB_SENDMAILVARS "sendmailvars"
-#define NSDB_SERVICES "services"
-#define NSDB_TERMCAP "termcap"
-#define NSDB_TTYS "ttys"
-
-/*
- * ns_dtab `callback' function signature.
- */
-typedef int (*nss_method)(void *, void *, _BSD_VA_LIST_);
-
-/*
- * ns_dtab - `nsswitch dispatch table'
- * Contains an entry for each source and the appropriate function to call.
- */
-typedef struct {
- const char *src;
- nss_method callback;
- void *cb_data;
-} ns_dtab;
-
-/*
- * Macros to help build an ns_dtab[]
- */
-#define NS_FILES_CB(F,C) { NSSRC_FILES, F, __UNCONST(C) },
-#define NS_COMPAT_CB(F,C) { NSSRC_COMPAT, F, __UNCONST(C) },
-
-#ifdef HESIOD
-# define NS_DNS_CB(F,C) { NSSRC_DNS, F, __UNCONST(C) },
-#else
-# define NS_DNS_CB(F,C)
-#endif
-
-#ifdef YP
-# define NS_NIS_CB(F,C) { NSSRC_NIS, F, __UNCONST(C) },
-#else
-# define NS_NIS_CB(F,C)
-#endif
-#define NS_NULL_CB { NULL, NULL, NULL },
-
-/*
- * ns_src - `nsswitch source'
- * Used by the nsparser routines to store a mapping between a source
- * and its dispatch control flags for a given database.
- */
-typedef struct {
- const char *name;
- uint32_t flags;
-} ns_src;
-
-
-/*
- * Default sourcelists (if nsswitch.conf is missing, corrupt,
- * or the requested database doesn't have an entry)
- */
-extern const ns_src __nsdefaultsrc[];
-extern const ns_src __nsdefaultcompat[];
-extern const ns_src __nsdefaultcompat_forceall[];
-extern const ns_src __nsdefaultfiles[];
-extern const ns_src __nsdefaultfiles_forceall[];
-extern const ns_src __nsdefaultnis[];
-extern const ns_src __nsdefaultnis_forceall[];
-
-
-/*
- * ns_mtab - `nsswitch method table'
- * An nsswitch module provides a mapping from (database name, method name)
- * tuples to the nss_method and associated callback data. Effectively,
- * ns_dtab, but used for dynamically loaded modules.
- */
-typedef struct {
- const char *database;
- const char *name;
- nss_method method;
- void *mdata;
-} ns_mtab;
-
-/*
- * nss_module_register_fn - module registration function
- * called at module load
- * nss_module_unregister_fn - module un-registration function
- * called at module unload
- */
-typedef void (*nss_module_unregister_fn)(ns_mtab *, u_int);
-typedef ns_mtab *(*nss_module_register_fn)(const char *, u_int *,
- nss_module_unregister_fn *);
-
-#ifdef _NS_PRIVATE
-
-/*
- * Private data structures for back-end nsswitch implementation.
- */
-
-/*
- * ns_dbt - `nsswitch database thang'
- * For each database in /etc/nsswitch.conf there is a ns_dbt, with its
- * name and a list of ns_src's containing the source information.
- */
-typedef struct {
- const char *name; /* name of database */
- ns_src *srclist; /* list of sources */
- u_int srclistsize; /* size of srclist */
-} ns_dbt;
-
-/*
- * ns_mod - `nsswitch module'
- */
-typedef struct {
- const char *name; /* module name */
- void *handle; /* handle from dlopen() */
- ns_mtab *mtab; /* method table */
- u_int mtabsize; /* size of mtab */
- /* called to unload module */
- nss_module_unregister_fn unregister;
-} ns_mod;
-
-#endif /* _NS_PRIVATE */
-
-
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-int nsdispatch(void *, const ns_dtab [], const char *,
- const char *, const ns_src [], ...);
-
-#ifdef _NS_PRIVATE
-int _nsdbtaddsrc(ns_dbt *, const ns_src *);
-void _nsdbtdump(const ns_dbt *);
-int _nsdbtput(const ns_dbt *);
-void _nsyyerror(const char *);
-int _nsyylex(void);
-#endif /* _NS_PRIVATE */
-
-__END_DECLS
-
-#endif /* !_NSSWITCH_H */
diff --git a/StdLib/Include/paths.h b/StdLib/Include/paths.h
deleted file mode 100644
index 560bd033af..0000000000
--- a/StdLib/Include/paths.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/** @file
-
- Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)paths.h 8.1 (Berkeley) 6/2/93
- * $NetBSD: paths.h,v 1.30 2004/12/11 06:01:33 christos Exp
- */
-
-#ifndef _PATHS_H_
-#define _PATHS_H_
-
-/* Provide trailing slash, since mostly used for building pathnames.
- * see the __CONCAT() macro from <sys/EfiCdefs.h> for cpp examples.
- */
-#define _PATH_DEV "/dev/"
-#define _PATH_STDLIB "/Efi/StdLib/"
-#define _PATH_ETC _PATH_STDLIB "etc/"
-#define _PATH_TMP _PATH_STDLIB "tmp/"
-#define _PATH_LIB _PATH_STDLIB "lib/"
-#define _PATH_BIN "/Efi/Tools/"
-
-/* DOS style device paths */
-#define _PATH_TTYDEV "tty:"
-#define _PATH_NULLDEV "null:"
-#define _PATH_CONSOLE "console:"
-#define _PATH_CONSTTY "constty:"
-#define _PATH_STDIN "stdin:"
-#define _PATH_STDOUT "stdout:"
-#define _PATH_STDERR "stderr:"
-#define _PATH_SOCKET "socket:"
-
-/* *nix style device paths */
-#define _PATH_DEVTTY _PATH_DEV "tty"
-#define _PATH_DEVNULL _PATH_DEV "null"
-#define _PATH_DEVCONSOLE _PATH_DEV "console"
-#define _PATH_DEVCONSTTY _PATH_DEV "constty"
-#define _PATH_DEVSTDIN _PATH_DEV "stdin"
-#define _PATH_DEVSTDOUT _PATH_DEV "stdout"
-#define _PATH_DEVSTDERR _PATH_DEV "stderr"
-#define _PATH_DEVSOCKET _PATH_DEV "socket"
-
-/* Special files and locations */
-#define _PATH_FSTAB _PATH_ETC "fstab"
-#define _PATH_HOSTNAME _PATH_ETC "hostname"
-#define _PATH_HOSTS _PATH_ETC "hosts"
-#define _PATH_HOSTCONF _PATH_ETC "host.conf"
-#define _PATH_LOCALE _PATH_ETC "Locale"
-#define _PATH_NETCONF _PATH_ETC "host.conf"
-#define _PATH_NETWORKS _PATH_ETC "networks"
-#define _PATH_PROTOCOLS _PATH_ETC "protocols"
-
-/* Resolver configuration file.
- * Normally not present, but may contain the address of the
- * inital name server(s) to query and the domain search list.
- */
-#define _PATH_RESCONF _PATH_ETC "resolv.conf"
-#define _PATH_SERVICES _PATH_ETC "services"
-
-#endif /* !_PATHS_H_ */
diff --git a/StdLib/Include/pwd.h b/StdLib/Include/pwd.h
deleted file mode 100644
index afbae1589e..0000000000
--- a/StdLib/Include/pwd.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/* $NetBSD: pwd.h,v 1.39 2005/05/24 17:36:29 kleink Exp $ */
-
-/*-
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)pwd.h 8.2 (Berkeley) 1/21/94
- */
-
-/*-
- * Portions Copyright(C) 1995, Jason Downs. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _PWD_H_
-#define _PWD_H_
-
-#include <sys/EfiCdefs.h>
-#include <sys/featuretest.h>
-#include <sys/types.h>
-
-#define _PATH_PASSWD "/etc/passwd"
-#define _PATH_MASTERPASSWD "/etc/master.passwd"
-#define _PATH_MASTERPASSWD_LOCK "/etc/ptmp"
-
-#define _PATH_PASSWD_CONF "/etc/passwd.conf"
-#define _PATH_PASSWDCONF _PATH_PASSWD_CONF /* XXX: compat */
-#define _PATH_USERMGMT_CONF "/etc/usermgmt.conf"
-
-#define _PATH_MP_DB "/etc/pwd.db"
-#define _PATH_SMP_DB "/etc/spwd.db"
-
-#define _PATH_PWD_MKDB "/usr/sbin/pwd_mkdb"
-
-#define _PW_KEYBYNAME '1' /* stored by name */
-#define _PW_KEYBYNUM '2' /* stored by entry in the "file" */
-#define _PW_KEYBYUID '3' /* stored by uid */
-
-#define _PASSWORD_EFMT1 '_' /* extended DES encryption format */
-#define _PASSWORD_NONDES '$' /* non-DES encryption formats */
-
-#define _PASSWORD_LEN 128 /* max length, not counting NUL */
-
-#define _PASSWORD_NOUID 0x01 /* flag for no specified uid. */
-#define _PASSWORD_NOGID 0x02 /* flag for no specified gid. */
-#define _PASSWORD_NOCHG 0x04 /* flag for no specified change. */
-#define _PASSWORD_NOEXP 0x08 /* flag for no specified expire. */
-
-#define _PASSWORD_OLDFMT 0x10 /* flag to expect an old style entry */
-#define _PASSWORD_NOWARN 0x20 /* no warnings for bad entries */
-
-#define _PASSWORD_WARNDAYS 14 /* days to warn about expiry */
-#define _PASSWORD_CHGNOW -1 /* special day to force password
- * change at next login */
-
-struct passwd {
- __aconst char *pw_name; /* user name */
- __aconst char *pw_passwd; /* encrypted password */
- uid_t pw_uid; /* user uid */
- gid_t pw_gid; /* user gid */
- time_t pw_change; /* password change time */
- __aconst char *pw_class; /* user login class */
- __aconst char *pw_gecos; /* general information */
- __aconst char *pw_dir; /* home directory */
- __aconst char *pw_shell; /* default shell */
- time_t pw_expire; /* account expiration */
-};
-
-__BEGIN_DECLS
- struct passwd *getpwuid(uid_t);
- struct passwd *getpwnam(const char *);
-
-#if 0 /* Normally declared here but not implemented for UEFI. */
-
- int getpwnam_r( const char *, struct passwd *, char *, size_t,
- struct passwd **);
- int getpwuid_r( uid_t, struct passwd *, char *, size_t,
- struct passwd **);
-
- struct passwd *getpwent(void);
- void setpwent(void);
- void endpwent(void);
-
- int pw_gensalt(char *, size_t, const char *, const char *);
- int pw_scan(char *, struct passwd *, int *);
- int setpassent(int);
- int getpwent_r(struct passwd *, char *, size_t, struct passwd **);
- const char *user_from_uid(uid_t, int);
- int uid_from_user(const char *, uid_t *);
- int pwcache_userdb( int (*)(int), void (*)(void),
- struct passwd * (*)(const char *),
- struct passwd * (*)(uid_t));
-#endif
-__END_DECLS
-
-#endif /* !_PWD_H_ */
diff --git a/StdLib/Include/resolv.h b/StdLib/Include/resolv.h
deleted file mode 100644
index d94b3cfb7f..0000000000
--- a/StdLib/Include/resolv.h
+++ /dev/null
@@ -1,297 +0,0 @@
-/*-
- * Copyright (c) 1983, 1987, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Portions Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
- */
-
-/*
- * @(#)resolv.h 8.1 (Berkeley) 6/2/93
- * From Id: resolv.h,v 8.12 1998/04/28 19:36:46 halley Exp $
- * $Id: resolv.h,v 1.1.1.1 2003/11/19 01:48:35 kyu3 Exp $
- */
-
-#ifndef _RESOLV_H_
-#define _RESOLV_H_
-
-#include <arpa/nameser.h>
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/cdefs.h>
-#include <stdio.h>
-#include <paths.h>
-
-#ifndef __P
-#define __P(x) x
-#endif // __P
-
-/*
- * Revision information. This is the release date in YYYYMMDD format.
- * It can change every day so the right thing to do with it is use it
- * in preprocessor commands such as "#if (__RES > 19931104)". Do not
- * compare for equality; rather, use it to determine whether your resolver
- * is new enough to contain a certain feature.
- */
-
-#define __RES 19960801
-
-/*
- * Global defines and variables for resolver stub.
- */
-#define MAXNS 3 /* max # name servers we'll track */
-#define MAXDFLSRCH 3 /* # default domain levels to try */
-#define MAXDNSRCH 6 /* max # domains in search path */
-#define LOCALDOMAINPARTS 2 /* min levels in name that is "local" */
-
-#define RES_TIMEOUT 5 /* min. seconds between retries */
-#define MAXRESOLVSORT 10 /* number of net to sort on */
-#define RES_MAXNDOTS 15 /* should reflect bit field size */
-
-struct __res_state {
- int retrans; /* retransmition time interval */
- int retry; /* number of times to retransmit */
- u_long options; /* option flags - see below. */
- int nscount; /* number of name servers */
- struct sockaddr_in
- nsaddr_list[MAXNS]; /* address of name server */
-#define nsaddr nsaddr_list[0] /* for backward compatibility */
- u_short id; /* current message id */
- char *dnsrch[MAXDNSRCH+1]; /* components of domain to search */
- char defdname[256]; /* default domain (deprecated) */
- u_long pfcode; /* RES_PRF_ flags - see below. */
- unsigned ndots:4; /* threshold for initial abs. query */
- unsigned nsort:4; /* number of elements in sort_list[] */
- char unused[3];
- struct {
- struct in_addr addr;
- u_int32_t mask;
- } sort_list[MAXRESOLVSORT];
- char pad[72]; /* on an i386 this means 512b total */
-};
-
-typedef struct __res_state *res_state;
-
-/*
- * Resolver options (keep these in synch with res_debug.c, please)
- */
-#define RES_INIT 0x00000001 /* address initialized */
-#define RES_DEBUG 0x00000002 /* print debug messages */
-#define RES_AAONLY 0x00000004 /* authoritative answers only (!IMPL)*/
-#define RES_USEVC 0x00000008 /* use virtual circuit */
-#define RES_PRIMARY 0x00000010 /* query primary server only (!IMPL) */
-#define RES_IGNTC 0x00000020 /* ignore truncation errors */
-#define RES_RECURSE 0x00000040 /* recursion desired */
-#define RES_DEFNAMES 0x00000080 /* use default domain name */
-#define RES_STAYOPEN 0x00000100 /* Keep TCP socket open */
-#define RES_DNSRCH 0x00000200 /* search up local domain tree */
-#define RES_INSECURE1 0x00000400 /* type 1 security disabled */
-#define RES_INSECURE2 0x00000800 /* type 2 security disabled */
-#define RES_NOALIASES 0x00001000 /* shuts off HOSTALIASES feature */
-#define RES_USE_INET6 0x00002000 /* use/map IPv6 in gethostbyname() */
-#define RES_NOTLDQUERY 0x00004000 /* Don't query TLD names */
-
-#define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | RES_DNSRCH)
-
-/*
- * Resolver "pfcode" values. Used by dig.
- */
-#define RES_PRF_STATS 0x00000001
-#define RES_PRF_UPDATE 0x00000002
-#define RES_PRF_CLASS 0x00000004
-#define RES_PRF_CMD 0x00000008
-#define RES_PRF_QUES 0x00000010
-#define RES_PRF_ANS 0x00000020
-#define RES_PRF_AUTH 0x00000040
-#define RES_PRF_ADD 0x00000080
-#define RES_PRF_HEAD1 0x00000100
-#define RES_PRF_HEAD2 0x00000200
-#define RES_PRF_TTLID 0x00000400
-#define RES_PRF_HEADX 0x00000800
-#define RES_PRF_QUERY 0x00001000
-#define RES_PRF_REPLY 0x00002000
-#define RES_PRF_INIT 0x00004000
-/* 0x00008000 */
-
-typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error }
- res_sendhookact;
-
-typedef res_sendhookact (*res_send_qhook)__P((struct sockaddr_in * const *ns,
- const u_char **query,
- int *querylen,
- u_char *ans,
- int anssiz,
- int *resplen));
-
-typedef res_sendhookact (*res_send_rhook)__P((const struct sockaddr_in *ns,
- const u_char *query,
- int querylen,
- u_char *ans,
- int anssiz,
- int *resplen));
-
-struct res_sym {
- int number; /* Identifying number, like T_MX */
- char * name; /* Its symbolic name, like "MX" */
- char * humanname; /* Its fun name, like "mail exchanger" */
-};
-
-extern struct __res_state _res;
-extern const struct res_sym __p_class_syms[];
-extern const struct res_sym __p_type_syms[];
-
-/* Private routines shared between libc/net, named, nslookup and others. */
-#define res_hnok __res_hnok
-#define res_ownok __res_ownok
-#define res_mailok __res_mailok
-#define res_dnok __res_dnok
-#define sym_ston __sym_ston
-#define sym_ntos __sym_ntos
-#define sym_ntop __sym_ntop
-#define b64_ntop __b64_ntop
-#define b64_pton __b64_pton
-#define loc_ntoa __loc_ntoa
-#define loc_aton __loc_aton
-#define fp_resstat __fp_resstat
-#define p_query __p_query
-#define dn_skipname __dn_skipname
-#define fp_resstat __fp_resstat
-#define fp_query __fp_query
-#define fp_nquery __fp_nquery
-#define hostalias __hostalias
-#define putlong __putlong
-#define putshort __putshort
-uint16_t _getshort(const u_char *);
-#define p_class __p_class
-#define p_time __p_time
-#define p_type __p_type
-#define p_query __p_query
-#define p_cdnname __p_cdnname
-#define p_section __p_section
-#define p_cdname __p_cdname
-#define p_fqnname __p_fqnname
-#define p_fqname __p_fqname
-#define p_option __p_option
-#define p_secstodate __p_secstodate
-#define dn_count_labels __dn_count_labels
-#define dn_comp __dn_comp
-#define dn_expand __dn_expand
-#define res_init __res_init
-#define res_randomid __res_randomid
-#define res_query __res_query
-#define res_search __res_search
-#define res_querydomain __res_querydomain
-#define res_mkquery __res_mkquery
-#define res_send __res_send
-#define res_isourserver __res_isourserver
-#define res_nameinquery __res_nameinquery
-#define res_queriesmatch __res_queriesmatch
-#define res_close __res_close
-#define res_mkupdate __res_mkupdate
-#define res_mkupdrec __res_mkupdrec
-#define res_freeupdrec __res_freeupdrec
-
-__BEGIN_DECLS
-int res_hnok __P((const char *));
-int res_ownok __P((const char *));
-int res_mailok __P((const char *));
-int res_dnok __P((const char *));
-int sym_ston __P((const struct res_sym *, const char *, int *));
-const char * sym_ntos __P((const struct res_sym *, int, int *));
-const char * sym_ntop __P((const struct res_sym *, int, int *));
-int b64_ntop __P((u_char const *, size_t, char *, size_t));
-int b64_pton __P((char const *, u_char *, size_t));
-int loc_aton __P((const char *, u_char *));
-const char * loc_ntoa __P((const u_char *, char *));
-int dn_skipname __P((const u_char *, const u_char *));
-void fp_resstat __P((struct __res_state *, FILE *));
-void fp_query __P((const u_char *, FILE *));
-void fp_nquery __P((const u_char *, int, FILE *));
-const char * hostalias __P((const char *));
-void putlong __P((u_int32_t, u_char *));
-void putshort __P((u_int16_t, u_char *));
-const char * p_class __P((int));
-const char * p_time __P((u_int32_t));
-const char * p_type __P((int));
-void p_query __P((const u_char *));
-const u_char * p_cdnname __P((const u_char *, const u_char *, int, FILE *));
-const u_char * p_cdname __P((const u_char *, const u_char *, FILE *));
-const u_char * p_fqnname __P((const u_char *, const u_char *,
- int, char *, int));
-const u_char * p_fqname __P((const u_char *, const u_char *, FILE *));
-const char * p_option __P((u_long));
-char * p_secstodate __P((u_long));
-int dn_count_labels __P((const char *));
-int dn_comp __P((const char *, u_char *, int,
- u_char **, u_char **));
-int dn_expand __P((const u_char *, const u_char *, const u_char *,
- char *, int));
-int res_init __P((void));
-u_int res_randomid __P((void));
-int res_query __P((const char *, int, int, u_char *, int));
-int res_search __P((const char *, int, int, u_char *, int));
-int res_querydomain __P((const char *, const char *, int, int,
- u_char *, int));
-int res_mkquery __P((int, const char *, int, int, const u_char *,
- int, const u_char *, u_char *, int));
-int res_send __P((const u_char *, int, u_char *, int));
-int res_isourserver __P((const struct sockaddr_in *));
-int res_nameinquery __P((const char *, int, int,
- const u_char *, const u_char *));
-int res_queriesmatch __P((const u_char *, const u_char *,
- const u_char *, const u_char *));
-void res_close __P((void));
-const char * p_section __P((int, int));
-/* XXX The following depend on the ns_updrec typedef in arpa/nameser.h */
-#ifdef _ARPA_NAMESER_H_
-int res_update __P((ns_updrec *));
-int res_mkupdate __P((ns_updrec *, u_char *, int));
-ns_updrec * res_mkupdrec __P((int, const char *, u_int, u_int, u_long));
-void res_freeupdrec __P((ns_updrec *));
-#endif
-
-__END_DECLS
-
-#endif /* !_RESOLV_H_ */
diff --git a/StdLib/Include/setjmp.h b/StdLib/Include/setjmp.h
deleted file mode 100644
index 33ea161799..0000000000
--- a/StdLib/Include/setjmp.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/** @file
- This file defines the macro setjmp, and declares the function longjmp
- and the type jmp_buf, for bypassing the normal function call and return discipline.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _SETJMP_H
-#define _SETJMP_H
-#include <Library/BaseLib.h>
-#include <sys/EfiCdefs.h>
-
-/** jmp_buf is an array type suitable for holding the information needed to
- restore a calling environment. The environment of a call to the setjmp
- macro consists of information sufficient for a call to the longjmp function
- to return execution to the correct block and invocation of that block, were
- it called recursively. It does not include the state of the floating-point
- status flags, of open files, or of any other component of the abstract
- machine.
-**/
-typedef BASE_LIBRARY_JUMP_BUFFER jmp_buf[1];
-
-/** The setjmp macro saves its calling environment in its jmp_buf argument for
- later use by the longjmp function.
-
- The Standard does not specify whether setjmp is a macro or an identifier
- declared with external linkage. If a macro definition is suppressed in
- order to access an actual function, or a program defines an external
- identifier with the name setjmp, the behavior is undefined by the Standard.
-
- @param[in,out] env A jmp_buf type object into which
- the current environment is stored.
-
- @return If the return is from a direct invocation, the setjmp macro
- returns the value zero. If the return is from a call to the longjmp
- function, the setjmp macro returns a nonzero value based upon the value
- of the second argument to the longjmp function.
-**/
-#define setjmp(env) (INTN)SetJump((env))
-
-/** The longjmp function restores the environment saved by the most recent
- invocation of the setjmp macro in the same invocation of the program with
- the corresponding jmp_buf argument. If there has been no such invocation,
- or if the function containing the invocation of the setjmp macro has
- terminated execution in the interim, or if the invocation of the setjmp
- macro was within the scope of an identifier with variably modified type and
- execution has left that scope in the interim, the behavior is undefined.
-
- @param[in] env The jump buffer containing the environment to be returned to.
- @param[in] val A non-zero value to be returned from setjmp.
-
- @return After longjmp is completed, program execution continues as if the
- corresponding invocation of the setjmp macro had just returned the value
- specified by val. The longjmp function cannot cause the setjmp macro to
- return the value 0; if val is 0, the setjmp macro returns the value 1.
-**/
-extern void longjmp(jmp_buf env, int val);
-
-#endif /* _SETJMP_H */
diff --git a/StdLib/Include/signal.h b/StdLib/Include/signal.h
deleted file mode 100644
index 26f8d6b798..0000000000
--- a/StdLib/Include/signal.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/** @file
- This file declares a type and two functions and defines several
- macros, for handling various signals (conditions that may be reported during
- program execution).
-
- For historical reasons; programs expect signal to be declared
- in <sys/signal.h>. The signal function is documented in <sys/signal.h>.
-
- The signal function is declared in the C Standard as:<BR>
- void (*signal(int sig, void (*func)(int)))(int);
-
- The EDK II implementation of the library or base firmware does not generate
- any of these signals, except as a result of explicit calls to the raise function.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _SIGNAL_H
-#define _SIGNAL_H
-#include <sys/EfiCdefs.h>
-#include <sys/signal.h>
-
-/* The type sig_atomic_t is the (possibly volatile-qualified) integer type of
- an object that can be accessed as an atomic entity, even in the presence
- of asynchronous interrupts.
-
- This, possibly machine specific, type is defined in <machine/signal.h>.
-*/
-
-/** @{
- The following three macros expand to constant expressions with distinct
- values that have type compatible with the second argument to, and the
- return value of, the signal function, and whose values compare unequal to
- the address of any declarable function.
-**/
-#define SIG_IGN ((__sighandler_t *) 0)
-#define SIG_DFL ((__sighandler_t *) 1)
-#define SIG_ERR ((__sighandler_t *) 3)
-/*@}*/
-
-/** @{
- The following macros expand to positive integer constant expressions with
- type int and distinct values that are the signal numbers, each
- corresponding to the specified condition.
- The C95 specification requires these to be macros.
-**/
-#define SIGINT __SigInt ///< receipt of an interactive attention signal
-#define SIGILL __SigIll ///< detection of an invalid function image, such as an invalid instruction
-#define SIGABRT __SigAbrt ///< abnormal termination, such as is initiated by the abort function
-#define SIGFPE __SigFpe ///< an erroneous arithmetic operation, such as zero divide or an operation resulting in overflow
-#define SIGSEGV __SigSegv ///< an invalid access to storage
-#define SIGTERM __SigTerm ///< a termination request sent to the program
-#define SIGBREAK __SigBreak ///< added for Python
-#define SIGALRM __SigAlrm ///< Added for Posix timer functions
-#define SIGVTALRM __SigVtAlrm ///< Added for Posix timer functions
-#define SIGPROF __SigProf ///< Added for Posix timer functions
-#define SIGUSR1 __SigUsr1 ///< Added for Posix timer functions
-#define SIGUSR2 __SigUsr2 ///< Added for Posix timer functions
-#define SIGWINCH __SigWinch ///< Added for Posix timer functions
-#define SIGPIPE __SigPipe ///< Added for Posix timer functions
-#define SIGQUIT __SigQuit ///< Added for Posix timer functions
-#define SIG_LAST __Sig_Last ///< One more than the largest signal number
-/*@}*/
-
-__BEGIN_DECLS
-
-/** Send a signal.
-
- The raise function carries out the actions described for signal,
- in <sys/signal.h>, for the signal sig. If a signal handler is called, the
- raise function does not return until after the signal handler does.
-
- @return The raise function returns zero if successful,
- or nonzero if unsuccessful.
-**/
-int raise(int sig);
-
-__END_DECLS
-
-#endif /* _SIGNAL_H */
diff --git a/StdLib/Include/stdarg.h b/StdLib/Include/stdarg.h
deleted file mode 100644
index 9a30e28fbf..0000000000
--- a/StdLib/Include/stdarg.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/** @file
- This header, <stdarg.h>, declares type va_list and defines macros: va_start, va_arg, va_end;
- for advancing through a list of arguments whose number and types are not known to the
- called function when it is translated.
-
- A function may be called with a variable number of arguments of varying types.
- The rightmost argument plays a special role in the access mechanism, and will
- be designated paramN in this and subsequent descriptions.
-
- The type va_list is a type suitable for holding information needed by the
- macros va_start, va_arg, and va_end. If access to the varying arguments
- is desired, the called function shall declare an object (referred to as ap
- in these descriptions) having type va_list. The object ap may be passed as
- an argument to another function; if the receiving function invokes the va_arg macro
- with parameter ap, the value of ap in the calling function becomes indeterminate
- and must be passed to the va_end macro prior to any further reference to ap.
-
- The va_start and va_arg macros must be implemented as macros, not as actual
- functions. The va_start and va_end macros must be invoked in the
- function accepting a varying number of arguments, if access to the varying
- arguments is desired.
-
- Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _STDARG_H
-#define _STDARG_H
-#include <sys/EfiCdefs.h>
-
-/** @{
- The type va_list is a type suitable for holding information needed by the
- macros va_start, va_arg, and va_end.
-
- Depending upon compiler or CPU architecture, different definitions are required.
-**/
-#if defined(__GNUC__)
-typedef __builtin_va_list va_list;
-#else
-#define va_list VA_LIST
-#endif
-/*@}*/
-
-/** @{
- The va_start macro must be invoked before any access to the unnamed arguments.
- The va_start macro initializes ap for subsequent use by va_arg and va_end.
-
- Synopsys: void va_start(va_list ap, paramN);
-
- @param ap An object of type va_list that is to be initialized such
- that subsequent successive invocations of va_arg will
- return the values of the parameters following paramN.
-
- @param paramN The parameter paramN is the identifier of the rightmost
- parameter in the variable parameter list in the function
- definition (the one just before the ,...). If the
- parameter parmN is declared with the register storage
- class, with a function of array type, or with a type that
- is not compatible with the type that results after
- application of the default argument promotions, the
- behavior is undefined.
-**/
-#if defined(__GNUC__)
-#define va_start __builtin_va_start
-#else
-#define va_start VA_START
-#endif
-/*@}*/
-
-/** @{
- The va_arg macro expands to an expression that has the type and value of
- the next argument in the call. The parameter ap shall be the same as the
- va_list ap initialized by va_start. Each invocation of va_arg modifies ap
- so that the values of successive arguments are returned in turn. The
- parameter type is a type name specified such that the type of a pointer to
- an object that has the specified type can be obtained simply by postfixing
- a * to type. If there is no actual next argument, or if type is not
- compatible with the type of the actual next argument (as promoted
- according to the default argument promotions), the behavior is undefined.
-
- Synopsys: type va_arg(va_list ap, type);
-
- @param ap An object of type va_list that was initialized by a prior
- invocation of va_start.
-
- @param type A type name specifying the type of the parameter to be retrieved.
-
- @return The first invocation of the va_arg macro after that of the
- va_start macro returns the value of the argument after that
- specified by paramN. Successive invocations return the values
- of the remaining arguments in succession.
-**/
-#if defined(__GNUC__)
-#define va_arg __builtin_va_arg
-#else
-#define va_arg VA_ARG
-#endif
-/*@}*/
-
-/** @{
- The va_end macro facillitates a normal return from the function whose
- variable argument list was referred to by the expansion of va_start that
- initialized the va_list ap.
-
- Synopsys: void va_end(va_list ap);
-
- The va_end macro may modify ap so that it is no longer usable (without an
- intervening invocation of va_start). If there is no corresponding
- invocation of the va_start macro, or if the va_end macro is not invoked
- before the return, the behavior is undefined.
-
- @param ap An object of type va_list, initialized by a prior
- invocation of va_start, that will no longer be referenced.
-**/
-#if defined(__GNUC__)
-#define va_end __builtin_va_end
-#else
-#define va_end VA_END
-#endif
-/*@}*/
-
-/** @{
- For BSD compatibility.
-**/
-#if defined(__GNUC__)
-#define va_copy __builtin_va_copy
-#else
-#define va_copy(s,d) (s) = (d)
-#endif
-/*@}*/
-
-/** Provide a generic version of the compiler-dependent __va_copy macro.
- Some software, such as Python 2.7.2, relies upon the existence of __va_copy.
- If this macro is not defined, it just assigns one va_list item to another.
- This breaks for compiler environments that define va_list as an array or structure.
-**/
-#ifndef __va_copy
- #define __va_copy va_copy
-#endif
-
-#endif /* _STDARG_H */
diff --git a/StdLib/Include/stdbool.h b/StdLib/Include/stdbool.h
deleted file mode 100644
index 32088665c4..0000000000
--- a/StdLib/Include/stdbool.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/** @file
- Macros to simplify boolean expressions and operations.
-
- This header is not specified by the C95 standard but is included here for
- operational convenience.
-
- The macro bool expands to _Bool, as required by the C99 specification.
- This subsequently expands to BOOLEAN, is a UEFI data type which is automatically
- defined correctly for the target CPU architecture.
-
- The remaining three macros are suitable for use in #if preprocessing
- directives. They are true, which expands to the integer constant 1,
- false, which expands to the integer constant 0, and
- __bool_true_false_are_defined which expands to the integer constant 1.
-
- A program may undefine and perhaps then redefine the
- macros bool, true, and false.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _STDBOOL_H
-#define _STDBOOL_H
-#include <sys/EfiCdefs.h>
-
-#define bool _Bool
-#define true 1
-#define false 0
-#define __bool_true_false_are_defined 1
-
-#endif /* _STDBOOL_H */
diff --git a/StdLib/Include/stddef.h b/StdLib/Include/stddef.h
deleted file mode 100644
index ce4483acbf..0000000000
--- a/StdLib/Include/stddef.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/** @file
- Common "Standard" Definitions.
-
- The files stddef.h and stdlib.h are "catch all" headers for definitions and declarations
- that don't fit well in the other headers. There are two separate header files because
- the contents of <stddef.h> are valid in both freestanding and hosted environment, while the
- header <stdlib.h> contains elements that are only valid in a hosted environment.
-
- This means that the elements in this file may not impose dependencies on headers other than
- <float.h>, <iso646.h>, <limits.h>, <stdarg.h>, <stdbool.h>, and (of course) <sys/EfiCdefs.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _STDDEF_H
-#define _STDDEF_H
-#include <sys/EfiCdefs.h>
-
-#ifdef _EFI_PTRDIFF_T_
- /** ptrdiff_t is the signed integer type of the result of subtracting two pointers. **/
- typedef _EFI_PTRDIFF_T_ ptrdiff_t;
- #undef _EFI_PTRDIFF_T_
-#endif
-
-#ifdef _EFI_SIZE_T_
- /** size_t is the unsigned integer type of the result of the sizeof operator. **/
- typedef _EFI_SIZE_T_ size_t;
- #undef _EFI_SIZE_T_
- #undef _BSD_SIZE_T_
-#endif
-
-#ifndef __cplusplus
- #ifdef _EFI_WCHAR_T
- /** wchar_t is an integer type whose range of values can represent distinct
- codes for all members of the largest extended character set specified among
- the supported locales. The null character shall have the code value zero.
- **/
- typedef _EFI_WCHAR_T wchar_t;
- #undef _EFI_WCHAR_T
- #undef _BSD_WCHAR_T_
- #endif
-#endif
-
-/** @def NULL
- A macro that expands to a null pointer constant.<BR>
- NULL is defined in MdePkg/Include/Base.h which is automatically included
- by the EDK II build tools.
-**/
-
-/** The offsetof macro determines the offset of the beginning of a structure
- member from the beginning of the structure.
-
- The macro expands to an integer constant expression that has type size_t,
- the value of which is the offset in bytes, to the structure member (Member),
- from the beginning of its structure (StrucName).
-
- Alliased to OFFSET_OF which is defined in MdePkg/Include/Base.h which is
- automatically included by the EDK II build tools.
-**/
-#define offsetof(StrucName, Member) OFFSET_OF(StrucName, Member)
-
-#endif /* _STDDEF_H */
diff --git a/StdLib/Include/stdint.h b/StdLib/Include/stdint.h
deleted file mode 100644
index 04656a1d26..0000000000
--- a/StdLib/Include/stdint.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <sys/stdint.h>
diff --git a/StdLib/Include/stdio.h b/StdLib/Include/stdio.h
deleted file mode 100644
index c0a4deb783..0000000000
--- a/StdLib/Include/stdio.h
+++ /dev/null
@@ -1,1620 +0,0 @@
-/** @file
- Macros, types, and functions for performing I/O.
-
- The following functions are declared in this file:<BR>
-@verbatim
- ################### Operations on files. ####
- int remove (const char *FileName);
- int rename (const char *, const char *);
- FILE *tmpfile (void);
- char *tmpnam (char *);
-
- ################### File access functions. ####
- int fclose (FILE *);
- int fflush (FILE *);
- FILE *fopen (const char * __restrict ,
- const char * __restrict);
- FILE *freopen (const char * __restrict,
- const char * __restrict, FILE * __restrict);
- void setbuf (FILE * __restrict, char * __restrict);
- int setvbuf (FILE * __restrict, char * __restrict,
- int, size_t);
-
- ################### Formatted Input/Output Functions. ####
- int fprintf (FILE * __restrict stream,
- const char * __restrict format, ...);
- int fscanf (FILE * __restrict, const char * __restrict, ...);
- int printf (const char * __restrict, ...);
- int scanf (const char * __restrict, ...);
- int sprintf (char * __restrict, const char * __restrict, ...);
- int sscanf (const char * __restrict,
- const char * __restrict, ...);
- int vfprintf (FILE * __restrict,
- const char * __restrict, va_list);
- int vprintf (const char * __restrict, va_list);
- int vsprintf (char * __restrict,
- const char * __restrict, va_list);
-
- ################### Character Input/Output Functions. ####
- int fgetc (FILE *);
- char *fgets (char * __restrict, int, FILE * __restrict);
- int fputc (int, FILE *);
- int fputs (const char * __restrict, FILE * __restrict);
- int getc (FILE *);
- int getchar (void);
- char *gets (char *);
- int putc (int, FILE *);
- int putchar (int);
- int puts (const char *);
- int ungetc (int, FILE *);
-
- ################### Direct Input/Output Functions. ####
- size_t fread (void * __restrict, size_t, size_t,
- FILE * __restrict);
- size_t fwrite (const void * __restrict, size_t, size_t,
- FILE * __restrict);
-
- ################### File Positioning Functions. ####
- int fgetpos (FILE * __restrict, fpos_t * __restrict);
- int fseek (FILE *, long, int);
- int fsetpos (FILE *, const fpos_t *);
- long ftell (FILE *);
- void rewind (FILE *);
-
- ################### Error-handling Functions. ####
- void clearerr (FILE *);
- int feof (FILE *);
- int ferror (FILE *);
- void perror (const char *);
-
- ################### Functions NOT specified by C95 ####
-
- FILE *fdopen (int, const char *);
- void flockfile (FILE *);
- int ftrylockfile (FILE *);
- void funlockfile (FILE *);
- int getc_unlocked (FILE *);
- int getchar_unlocked(void);
- int putc_unlocked (int, FILE *);
- int putchar_unlocked(int);
- int pclose (FILE *);
- FILE *popen (const char *, const char *);
- int snprintf (char * __restrict, size_t,
- const char * __restrict, ...);
- int vsnprintf (char * __restrict, size_t,
- const char * __restrict, va_list);
- char *mkdtemp (char *);
- int mkstemp (char *);
- char *mktemp (char *);
- char *tempnam (const char *, const char *);
- int fseeko (FILE *, off_t, int);
- char *fgetln (FILE * __restrict, size_t * __restrict);
- char *fparseln (FILE *, size_t *, size_t *, const char[3], int);
- int fpurge (FILE *);
- void setbuffer (FILE *, char *, int);
- int setlinebuf (FILE *);
- int vasprintf (char ** __restrict, const char * __restrict,
- va_list);
- int vscanf (const char * __restrict, va_list);
- int vsscanf (const char * __restrict,
- const char * __restrict, va_list);
-@endverbatim
-
- @note To fit things in six character monocase externals, the stdio
- code uses the prefix `__s' for stdio objects, typically followed
- by a three-character attempt at a mnemonic.
-
-
- Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)stdio.h 8.5 (Berkeley) 4/29/95
- NetBSD: stdio.h,v 1.66.2.3 2007/08/24 20:07:38 liamjfoy Exp
- */
-#ifndef _STDIO_H_
-#define _STDIO_H_
-
-#include <stdarg.h>
-#include <limits.h>
-#include <sys/ansi.h>
-#include <machine/ansi.h>
-
-#ifdef _EFI_SIZE_T_
- /** size_t is the unsigned integer type of the result of the sizeof operator. **/
- typedef _EFI_SIZE_T_ size_t;
- #undef _EFI_SIZE_T_
- #undef _BSD_SIZE_T_
-#endif
-
-/** @{
- An object type capable of holding all information necessary to specify any
- position within a file.
-
- Each wide-oriented stream has an associated mbstate_t object that stores the
- current parse state of the stream. A successful call to fgetpos stores a
- representation of the value of this mbstate_t object as part of the value
- of the fpos_t object. A later successful call to fsetpos using the same
- stored fpos_t value restores the value of the associated mbstate_t object
- as well as the position within the controlled stream.
-
- This is fairly grotesque, but pure ANSI code must not inspect the
- innards of an fpos_t anyway. The library internally uses off_t,
- which we assume is exactly as big as eight chars.
-**/
-#if (!defined(_ANSI_SOURCE) && !defined(__STRICT_ANSI__)) || defined(_LIBC)
-typedef __off_t fpos_t;
-#else
-typedef struct __sfpos {
- __off_t _pos;
-} fpos_t;
-#endif
-/*@}*/
-
-/* stdio buffers */
-struct __sbuf {
- unsigned char *_base;
- int _size;
-};
-
-/** Structure which holds all the information needed to control a stream or file.
- *
- * The following always hold:<BR>
- *
- * - if (_flags&(__SLBF|__SWR)) == (__SLBF|__SWR),
- * - _lbfsize is -_bf._size, else _lbfsize is 0
- * - if _flags&__SRD, _w is 0
- * - if _flags&__SWR, _r is 0
- *
- * This ensures that the getc and putc macros (or inline functions) never
- * try to write or read from a file that is in `read' or `write' mode.
- * (Moreover, they can, and do, automatically switch from read mode to
- * write mode, and back, on "r+" and "w+" files.)
- *
- * _lbfsize is used only to make the inline line-buffered output stream
- * code as compact as possible.
- *
- * _ub, _up, and _ur are used when ungetc() pushes back more characters
- * than fit in the current _bf, or when ungetc() pushes back a character
- * that does not match the previous one in _bf. When this happens,
- * _ub._base becomes non-nil (i.e., a stream has ungetc() data iff
- * _ub._base!=NULL) and _up and _ur save the current values of _p and _r.
- *
- */
-typedef struct __sFILE {
- unsigned char *_p; /**< current position in (some) buffer */
- int _r; /**< read space left for getc() */
- int _w; /**< write space left for putc() */
- unsigned short _flags; /**< flags, below; this FILE is free if 0 */
- short _file; /**< fileno, if Unix descriptor, else -1 */
- struct __sbuf _bf; /**< the buffer (at least 1 byte, if !NULL) */
- int _lbfsize; /**< 0 or -_bf._size, for inline putc */
-
- /* operations */
- void *_cookie; /**< cookie passed to io functions */
- int (*_close)(void *);
- int (*_read) (void *, char *, int);
- fpos_t (*_seek) (void *, fpos_t, int);
- int (*_write)(void *, const char *, int);
-
- /** file extension */
- struct __sbuf _ext;
-
- /** @{
- Separate buffer for long sequences of ungetc().
- **/
- unsigned char *_up; /**< saved _p when _p is doing ungetc data */
- int _ur; /**< saved _r when _r is counting ungetc data */
- /*@}*/
-
- /* tricks to meet minimum requirements even when malloc() fails */
- unsigned char _ubuf[3 * MB_LEN_MAX]; /**< guarantee an ungetc() buffer */
- unsigned char _nbuf[1 * MB_LEN_MAX]; /**< guarantee a getc() buffer */
-
- /** separate buffer for fgetln() when line crosses buffer boundary */
- struct __sbuf _lb; /* buffer for fgetln() */
-
- /* Unix stdio files get aligned to block boundaries on fseek() */
- int _blksize; /**< stat.st_blksize (may be != _bf._size) */
- fpos_t _offset; /**< current lseek offset */
-} FILE;
-
-__BEGIN_DECLS
-extern FILE __sF[];
-__END_DECLS
-
-#define __SLBF 0x0001 /**< line buffered */
-#define __SNBF 0x0002 /**< unbuffered */
-#define __SRD 0x0004 /**< OK to read */
-#define __SWR 0x0008 /**< OK to write */
- /* RD and WR are never simultaneously asserted */
-#define __SRW 0x0010 /**< open for reading & writing */
-#define __SEOF 0x0020 /**< found EOF */
-#define __SERR 0x0040 /**< found error */
-#define __SMBF 0x0080 /**< _buf is from malloc */
-#define __SAPP 0x0100 /**< fdopen()ed in append mode */
-#define __SSTR 0x0200 /**< this is an sprintf/snprintf string */
-#define __SOPT 0x0400 /**< do fseek() optimization */
-#define __SNPT 0x0800 /**< do not do fseek() optimization */
-#define __SOFF 0x1000 /**< set iff _offset is in fact correct */
-#define __SMOD 0x2000 /**< true => fgetln modified _p text */
-#define __SALC 0x4000 /**< allocate string space dynamically */
-
-/* The following three definitions are for ANSI C, which took them
- from System V, which brilliantly took internal interface macros and
- made them official arguments to setvbuf(), without renaming them.
- Hence, these ugly _IOxxx names are *supposed* to appear in user code.
-
- Although numbered as their counterparts above, the implementation
- does not rely on this.
- */
-#define _IOFBF 0 /**< setvbuf should set fully buffered */
-#define _IOLBF 1 /**< setvbuf should set line buffered */
-#define _IONBF 2 /**< setvbuf should set unbuffered */
-
-#define BUFSIZ 1024 /**< size of buffer used by setbuf */
-#define EOF (-1) /**< A constant integer expression indicating end-of-file. */
-
-/** FOPEN_MAX is a minimum maximum, and is the number of streams that
- stdio can provide without attempting to allocate further resources
- (which could fail). Do not use this for anything.
- */
-#define FOPEN_MAX OPEN_MAX /* must be <= OPEN_MAX <sys/syslimits.h> */
-
-/** Size needed for an array of char large enough to hold the longest file name string. */
-#define FILENAME_MAX PATH_MAX /* must be <= PATH_MAX <sys/syslimits.h> */
-
-/** Size needed for an array of char large enough to hold the file name string
- generated by the tmpname() function.
-**/
-#define L_tmpnam PATH_MAX /* must be == PATH_MAX */
-
-#ifndef TMP_MAX
-#define TMP_MAX 308915776 /**< The maximum number of unique file names
- that can be generated by tmpnam(). **/
-#endif
-
-/* Always ensure that these are consistent with <fcntl.h>! */
-#ifndef SEEK_SET
-#define SEEK_SET 0 /**< set file offset to offset */
-#endif
-#ifndef SEEK_CUR
-#define SEEK_CUR 1 /**< set file offset to current plus offset */
-#endif
-#ifndef SEEK_END
-#define SEEK_END 2 /**< set file offset to EOF plus offset */
-#endif
-
-#define stdin (&__sF[0]) /**< FILE reference for the STanDard INput stream. */
-#define stdout (&__sF[1]) /**< FILE reference for the STanDard OUTput stream. */
-#define stderr (&__sF[2]) /**< FILE reference for the STanDard ERRor stream. */
-
-__BEGIN_DECLS
-/* Functions defined in C95 standard. ###################################### */
-
-/* ################ Operations on files. */
-
-/** Remove (delete) a file.
-
- @param[in] FileName The path to the file to be removed.
-
- @retval Zero The operation succeeded.
- @retval Non-zero The operation failed.
-**/
-int remove (const char *FileName);
-
-/** Rename the file named OldName to NewName.
-
- @param[in] OldName The name of the existing file to be renamed.
- @param[in] NewName The new name of the file.
-
- @retval Zero The operation succeeded.
- @retval Non-zero The operation failed. OldName still exists and has been unmodified.
- If OldName does not exist, or a file named NewName already exists,
- rename() will fail are return a non-zero value.
-**/
-int rename (const char *OldName, const char *NewName);
-
-/** Create a guaranteed unique temporary file.
- A binary file is created in the _PATH_TMP directory that is guaranteed to
- have a unique name. The file will be open for update with mode "wb+" and
- its FILE pointer returned upon successfull completion. When the file is
- closed, or when the creating program terminates, the file will be removed.
-
- @retval NULL The temporary file could not be created.
- @retval non-NULL The returned value is a pointer to the FILE object
- associated with the newly created and open temporary file.
-**/
-FILE *tmpfile (void);
-
-/** Generate a string that is a valid file name, in the _PATH_TMP directory, that
- is not the same as the name of an existing file. The function can potentially
- generate up to TMP_MAX different strings.
-
- @param[out] Buffer A pointer to an array of at least L_tmpnam char elements.
- or NULL. If non-NULL, the tmpnam function writes its
- result into that array and returns the argument
- as its value.
-
- @return If no suitable string can be generated a NULL pointer is returned.
- Otherwise, if Buffer is NULL, the result is produced in an internal
- static object and a pointer to that object is returned. If Buffer
- is non-null, the results are written into the array pointed to by
- Buffer and Buffer is returned.
-**/
-char *tmpnam (char *Buffer);
-
-/* ################ File access functions. */
-
-/** Close the open stream, specified by fp, and de-associate it from any file or device.
-
- @param[in] fp Pointer to a stream object, of type FILE, associated with a
- file or device.
-
- @retval Zero The stream was successfully closed.
- @retval Non-zero There was an error closing the stream.
-**/
-int fclose (FILE *fp);
-
-/** Empties any buffers associated with the stream specified by fp.
-
- @param[in] fp Pointer to a stream object, of type FILE, associated with a
- file or device.
-
- @retval Zero The stream's buffers were successfully emptied.
- @retval EOF There was an error writing to the stream.
-**/
-int fflush (FILE *fp);
-
-/** Associates a file, named by Path, with a stream and prepares it for subsequent
- operations.
-
- The parameter Mode points to a string specifying behavior characteristics for
- the opened file. The recognized Mode strings are:
- - r Open text file for reading.
- - w Truncate file to zero length or create text file for writing.
- - a Open or create a text file for writing at end-of-file (append).
- - rb Open binary file for reading.
- - wb Truncate file to zero length or create binary file for writing.
- - ab Open or create a binary file for writing at end-of-file (append).
- - r+ Open text file for update (reading and writing).
- - w+ Truncate file to zero length or create text file for update.
- - a+ Open or create a text file for update, writing at end-of-file.
- - r+b or rb+ Open binary file for update (reading and writing).
- - w+b or wb+ Truncate file to zero length or create binary file for update.
- - a+b or ab+ Open or create a binary file for update, writing at end-of-file.
-
- Opening a file with read mode fails if the file does not exist.
-
- Opening a file with append mode causes all writes to the file to be forced to
- the current end-of-file, regardless of any intervening calls to fseek.
-
- @param[in] Path The path or name of the file or device to open.
- @param[in] Mode The mode in which the file is to be opened.
-
- @return A pointer to a FILE object associated with the opened file is returned
- if the file was opened successfully. Otherwise, NULL is returned.
-**/
-FILE *fopen (const char * __restrict Path, const char * __restrict Mode);
-
-/** Closes the file associated with Ofp then opens the file specified by Path and associates it with
- stream Ofp.
-
- Any errors that occur when closing Ofp are ignored. The file specified by Path is opened with mode Mode
- and associated with stream Ofp instead of producing a new stream object.
-
- If Path is NULL, the mode of the file associated with Ofp is changed to Mode.
-
- @param[in] Path The path or name of the file or device to open.
- @param[in] Mode The mode in which the file is to be opened.
- @param[in] Ofp Pointer to the FILE object to be closed and associated with the new file.
-
- @return If Path was not able to be opened, or the mode changed, NULL is returned;
- otherwise Ofp is returned.
-**/
-FILE *freopen (const char * __restrict Path, const char * __restrict Mode, FILE * __restrict Ofp);
-
-/** Establishes Fully Buffered or Non-buffered mode for a stream, fp, using Buff as the buffer.
-
- The file associated with fp must have been successfully opened with no operations, other than
- possibly an unsuccessful call to setvbuf, performed prior to the call to setbuf.
-
- If Buff is non-NULL, the stream associated with fp is set to Fully Buffered mode using the
- array pointed to by Buff as the buffer. The buffer is assumed to be BUFSIZ char long.
- This is equivalent to calling setvbuf(fp, Buff, _IOFBF, BUFSIZ);
-
- If Buff is NULL, stream fp is set to Non-buffered mode.
- This is equivalent to calling setvbuf(fp, NULL, _IONBF, 0);
-
- @param[in] fp Pointer to the FILE object which will have its buffer set.
- @param[in] Buff The buffer to use for fp, or NULL.
-**/
-void setbuf (FILE * __restrict fp, char * __restrict Buff);
-
-/** Establishes a buffering mode and buffer for use by operations performed on the file associated with fp.
-
- The file associated with fp must have been successfully opened with no operations, other than
- possibly an unsuccessful call to setvbuf, performed prior to the call to setbuf.
-
- Parameter BufMode determines how stream fp will be buffered:
- - _IOFBF causes I/O to be fully buffered.
- - _IOLBF causes I/O to be line buffered.
- - _IONBF causes I/O to be unbuffered.
-
- If Buff is not NULL, it points to an array to be used as an I/O buffer for stream fp. The
- buffer is set to BufSize char in length. Otherwise, an array of BufSize char is allocated
- by the setvbuf function if BufMode is not _IONBF.
-
- It is an error for BufSize to be zero unless BufMode is _IONBF, in which case BufSize is ignored.
-
- @param[in] fp Pointer to the FILE object which will have its buffer set.
- @param[in] Buff The buffer to use for fp, or NULL.
- @param[in] BufMode The buffering mode to use.
- @param[in] BufSize The size of the buffer to use, specified in char.
-
- @retval Zero The buffer and mode were established successfully.
- @retval Non-zero The request can not be honored, or an invalid value for BufMode was given.
-**/
-int setvbuf (FILE * __restrict fp, char * __restrict Buff, int BufMode, size_t BufSize);
-
-/* ################ Formatted Input/Output Functions. */
-
-/** The fprintf function writes output to the stream pointed to by stream,
- under control of the string pointed to by format that specifies how
- subsequent arguments are converted for output. If there are insufficient
- arguments for the format, the behavior is indeterminate. If the format is
- exhausted while arguments remain, the excess arguments are evaluated
- (as always) but are otherwise ignored. The fprintf function returns when
- the end of the format string is encountered.
-
- The format is interpreted as a multibyte character sequence, beginning and ending
- in its initial shift state. The format is composed of zero or more directives:
- ordinary multibyte characters (not %), which are copied unchanged to the
- output stream; and conversion specifications, each of which results in
- fetching zero or more subsequent arguments, converting them, if applicable,
- according to the corresponding conversion specifier, and then writing the
- result to the output stream.
-
- Each conversion specification is introduced by the character %. After
- the %, the following appear in sequence:
- - Zero or more flags (in any order) that modify the meaning of the
- conversion specification.
- - An optional minimum field width. If the converted value has fewer
- characters than the field width, it is padded with spaces (by default)
- on the left (or right, if the left adjustment flag, described later,
- has been given) to the field width. The field width takes the form of
- an asterisk * (described later) or a nonnegative decimal integer.
- - An optional precision that gives the minimum number of digits to appear
- for the d, i, o, u, x, and X conversions, the number of digits to
- appear after the decimal-point character for e, E, f, and F
- conversions, the maximum number of significant digits for the g and G
- conversions, or the maximum number of bytes to be written for s
- conversions. The precision takes the form of a period (.) followed
- either by an asterisk * (described later) or by an optional decimal
- integer; if only the period is specified, the precision is taken as
- zero. If a precision appears with any other conversion specifier, it
- is ignored.
- - An optional length modifier that specifies the size of the argument.
- - A conversion specifier character that specifies the type of conversion
- to be applied.
-
- As noted above, a field width, or precision, or both, may be indicated by
- an asterisk. In this case, an int argument supplies the field width or
- precision. The arguments specifying field width, or precision, or both, shall
- appear (in that order) before the argument (if any) to be converted. A negative
- field width argument is taken as a - flag followed by a positive field width.
- A negative precision argument is interpreted as if the precision were omitted.
-
- The flag characters and their meanings are:
- - The result of the conversion is left-justified within the field.
- (It is right-justified if this flag is not specified.)
- + The result of a signed conversion always begins with a plus or
- minus sign. (It begins with a sign only when a negative value is
- converted if this flag is not specified.)
- space If the first character of a signed conversion is not a sign, or
- if a signed conversion results in no characters, a space is
- prefixed to the result. If the space and + flags both appear, the
- space flag is ignored.
- # The result is converted to an "alternative form".
- - For o conversion, it increases the precision, if and only if necessary,
- to force the first digit of the result to be a zero (if the value
- and precision are both 0, a single 0 is printed).
- - For x (or X) conversion, a nonzero result has 0x (or 0X) prefixed to it.
- - For e, E, f, F, g, and G conversions, the result of converting a
- floating-point number always contains a decimal-point character,
- even if no digits follow it. (Normally, a decimal-point character
- appears in the result of these conversions only if a digit follows
- it.)
- - For g and G conversions, trailing zeros are not removed from
- the result. For other conversions, it is ignored.
- 0 For d, i, o, u, x, X, e, E, f, F, g, and G conversions, leading
- zeros (following any indication of sign or base) are used to pad to
- the field width rather than performing space padding, except when
- converting an infinity or NaN. If the 0 and - flags both appear,
- the 0 flag is ignored. For d, i, o, u, x, and X conversions, if a
- precision is specified, the 0 flag is ignored.
-
- The length modifiers and their meanings are:
- hh Specifies that a following d, i, o, u, x, or X conversion specifier
- applies to a signed char or unsigned char argument (the argument
- will have been promoted according to the integer promotions, but
- its value shall be converted to signed char or unsigned char before
- printing); or that a following n conversion specifier applies to a
- pointer to a signed char argument.
- h Specifies that a following d, i, o, u, x, or X conversion specifier
- applies to a short int or unsigned short int argument (the argument
- will have been promoted according to the integer promotions, but
- its value shall be converted to short int or unsigned short int
- before printing); or that a following n conversion specifier
- applies to a pointer to a short int argument.
- l (ell) Specifies that a following d, i, o, u, x, or X conversion
- specifier applies to a long int or unsigned long int argument; that
- a following n conversion specifier applies to a pointer to a long
- int argument; that a following c conversion specifier applies to a
- wint_t argument; that a following s conversion specifier applies to
- a pointer to a wchar_t argument; or has no effect on a following e,
- E, f, F, g, or G conversion specifier.
- ll (ell-ell) Specifies that a following d, i, o, u, x, or X conversion
- specifier applies to a long long int or unsigned long long int
- argument; or that a following n conversion specifier applies to a
- pointer to a long long int argument.
- j Specifies that a following d, i, o, u, x, or X conversion specifier
- applies to an intmax_t or uintmax_t argument; or that a following n
- conversion specifier applies to a pointer to an intmax_t argument.
- z Specifies that a following d, i, o, u, x, or X conversion specifier
- applies to a size_t or the corresponding signed integer type
- argument; or that a following n conversion specifier applies to a
- pointer to a signed integer type corresponding to size_t argument.
- t Specifies that a following d, i, o, u, x, or X conversion specifier
- applies to a ptrdiff_t or the corresponding unsigned integer type
- argument; or that a following n conversion specifier applies to a
- pointer to a ptrdiff_t argument.
- L Specifies that a following e, E, f, F, g, or G conversion specifier
- applies to a long double argument.
-
- If a length modifier appears with any conversion specifier other than as
- specified above, it is ignored.
-
- The conversion specifiers and their meanings are:
- d,i The int argument is converted to signed decimal in the style
- [-]dddd. The precision specifies the minimum number of digits to
- appear; if the value being converted can be represented in fewer
- digits, it is expanded with leading zeros. The default precision
- is 1. The result of converting a zero value with a precision of
- zero is no characters.
- o,u,x,X The unsigned int argument is converted to unsigned octal (o),
- unsigned decimal (u), or unsigned hexadecimal notation (x or X) in
- the style dddd; the letters abcdef are used for x conversion and
- the letters ABCDEF for X conversion. The precision specifies the
- minimum number of digits to appear; if the value being converted
- can be represented in fewer digits, it is expanded with leading
- zeros. The default precision is 1. The result of converting a zero
- value with a precision of zero is no characters.
- f,F A double argument representing a floating-point number is
- converted to decimal notation in the style [-]ddd.ddd, where the
- number of digits after the decimal-point character is equal to the
- precision specification. If the precision is missing, it is taken
- as 6; if the precision is zero and the # flag is not specified, no
- decimal-point character appears. If a decimal-point character
- appears, at least one digit appears before it. The value is rounded
- to the appropriate number of digits.
- A double argument representing an infinity is converted in
- the style [-]inf. A double argument representing a NaN is
- converted in the style [-]nan. The F conversion specifier produces INF,
- INFINITY, or NAN instead of inf, infinity, or nan, respectively.
- e,E A double argument representing a floating-point number is
- converted in the style [-]d.ddd e[+-]dd, where there is one digit
- (which is nonzero if the argument is nonzero) before the
- decimal-point character and the number of digits after it is equal
- to the precision; if the precision is missing, it is taken as 6; if
- the precision is zero and the # flag is not specified, no
- decimal-point character appears. The value is rounded to the
- appropriate number of digits. The E conversion specifier produces a
- number with E instead of e introducing the exponent. The exponent
- always contains at least two digits, and only as many more digits
- as necessary to represent the exponent. If the value is zero, the
- exponent is zero.
- A double argument representing an infinity or NaN is converted
- in the style of an f or F conversion specifier.
- g,G A double argument representing a floating-point number is
- converted in style f or e (or in style F or E in the case of a G
- conversion specifier), depending on the value converted and the
- precision. Let P equal the precision if nonzero, 6 if the precision
- is omitted, or 1 if the precision is zero. Then, if a conversion
- with style E would have an exponent of X:
- - if P > X = -4, the conversion is with style f (or F) and
- precision P - (X + 1).
- - otherwise, the conversion is with style e (or E) and
- precision P - 1.
-
- Finally, unless the # flag is used, any trailing zeros are removed
- from the fractional portion of the result and the decimal-point
- character is removed if there is no fractional portion remaining.
- A double argument representing an infinity or NaN is converted in
- the style of an f or F conversion specifier.
- c If no l length modifier is present, the int argument is
- converted to an unsigned char, and the resulting character is
- written. If an l length modifier is present, the wint_t argument is
- converted as if by an ls conversion specification with no precision
- and an argument that points to the initial element of a two-element
- array of wchar_t, the first element containing the wint_t argument
- to the lc conversion specification and the second a null wide
- character.
- s If no l length modifier is present, the argument is a pointer
- to the initial element of an array of character type. Characters
- from the array are written up to (but not including) the
- terminating null character. If the precision is specified, no more
- than that many bytes are written. If the precision is not specified
- or is greater than the size of the array, the array shall contain a
- null character.
- If an l length modifier is present, the argument shall be a
- pointer to the initial element of an array of wchar_t type. Wide
- characters from the array are converted to multibyte characters
- (each as if by a call to the wcrtomb function, with the conversion
- state described by an mbstate_t object initialized to zero before
- the first wide character is converted) up to and including a
- terminating null wide character. The resulting multibyte characters
- are written up to (but not including) the terminating null
- character (byte). If no precision is specified, the array shall
- contain a null wide character. If a precision is specified, no more
- than that many bytes are written (including shift sequences, if
- any), and the array shall contain a null wide character if, to
- equal the multibyte character sequence length given by the
- precision, the function would need to access a wide character one
- past the end of the array. In no case is a partial multibyte
- character written.
- p The argument shall be a pointer to void. The value of the
- pointer is converted to a sequence of printing characters.
- n The argument shall be a pointer to signed integer into which is
- written the number of characters written to the output stream so
- far by this call to fprintf. No argument is converted, but one is
- consumed. If the conversion specification includes any flags, a
- field width, or a precision, they will be ignored.
- % A % character is written. No argument is converted. The
- complete conversion specification shall be %%.
-
- In no case does a nonexistent or small field width cause truncation of a
- field; if the result of a conversion is wider than the field width, the
- field is expanded to contain the conversion result.
-
- @param[in] stream An open File specifier to which the output is sent.
- @param[in] format A multi-byte character sequence containing characters
- to be copied unchanged, and conversion specifiers
- which convert their associated arguments.
- @param ... Variable number of parameters as required by format.
-
- @return The fprintf function returns the number of characters
- transmitted, or a negative value if an output or encoding
- error occurred.
-**/
-int fprintf (FILE * __restrict stream, const char * __restrict format, ...);
-
-/** Reads characters from stream, under control of format, storing the converted values
- in variables pointed to by the variable-length parameter list.
-
- The format is interpreted as a multibyte character sequence, beginning and ending
- in its initial shift state. The format is composed of zero or more directives:
- one or more white-space characters, an ordinary multibyte character
- (neither % nor a white-space character), or a conversion specification.
-
- Each conversion specification is introduced by the character %. After
- the %, the following appear in sequence:
- - An optional assignment-suppressing character, *.
- - An optional decimal integer, greater than zero, that specifies the
- maximum field width (in characters).
- - An optional length modifier that specifies the size of the receiving object.
- - A conversion specifier character that specifies the type of conversion
- to be applied.
-
- The fscanf function executes each directive of the format in turn. If a directive fails, as
- detailed below, the function returns. Failures are described as input failures (due to the
- occurrence of an encoding error or the unavailability of input characters), or matching
- failures (due to inappropriate input).
-
- A directive composed of white-space character(s) is executed by reading input up to the
- first non-white-space character (which remains unread), or until no more characters can
- be read.
-
- A directive that is an ordinary multibyte character is executed by reading the next
- characters of the stream. If any of those characters differ from the ones composing the
- directive, the directive fails and the differing and subsequent characters remain unread.
- Similarly, if end-of-file, an encoding error, or a read error prevents a character from being
- read, the directive fails.
-
- The length modifiers and their meanings are:
- - hh Specifies that a following d, i, o, u, x, X, or n conversion
- specifier applies to an argument with type pointer to signed
- char or unsigned char.
- - h Specifies that a following d, i, o, u, x, X, or n conversion
- specifier applies to an argument with type pointer to short
- int or unsigned short int.
- - l (ell) Specifies that a following d, i, o, u, x, X, or n conversion
- specifier applies to an argument with type pointer to
- long int or unsigned long int; that a following a, A, e,
- E, f, F, g, or G conversion specifier applies to an
- argument with type pointer to double; or that a following
- c, s, or [ conversion specifier applies to an argument
- with type pointer to wchar_t.
- - ll (ell-ell) Specifies that a following d, i, o, u, x, X, or n conversion
- specifier applies to an argument with type pointer to
- long long int or unsigned long long int.
- - j Specifies that a following d, i, o, u, x, X, or n conversion
- specifier applies to an argument with type pointer to
- intmax_t or uintmax_t.
- - z Specifies that a following d, i, o, u, x, X, or n conversion
- specifier applies to an argument with type pointer to
- size_t or the corresponding signed integer type.
- - t Specifies that a following d, i, o, u, x, X, or n conversion
- specifier applies to an argument with type pointer to
- ptrdiff_t or the corresponding unsigned integer type.
- - L Specifies that a following e, E, f, F, g, or G
- conversion specifier applies to an argument with type
- pointer to long double.
-
- If a length modifier appears with any conversion specifier other than as specified above,
- it will be ignored.
-
- The conversion specifiers and their meanings are:
- - d Matches an optionally signed decimal integer, whose format is
- the same as expected for the subject sequence of the strtol
- function with the value 10 for the base argument. The
- corresponding argument shall be a pointer to signed integer.
- - i Matches an optionally signed integer, whose format is the same
- as expected for the subject sequence of the strtol function
- with the value 0 for the base argument. The corresponding
- argument shall be a pointer to signed integer.
- - o Matches an optionally signed octal integer, whose format is the
- same as expected for the subject sequence of the strtoul
- function with the value 8 for the base argument. The
- corresponding argument shall be a pointer to unsigned integer.
- - u Matches an optionally signed decimal integer, whose format is
- the same as expected for the subject sequence of the strtoul
- function with the value 10 for the base argument. The
- corresponding argument shall be a pointer to unsigned integer.
- - x Matches an optionally signed hexadecimal integer, whose format
- is the same as expected for the subject sequence of the strtoul
- function with the value 16 for the base argument. The
- corresponding argument shall be a pointer to unsigned integer.
- - e,f,g Matches an optionally signed floating-point number, infinity,
- or NaN, whose format is the same as expected for the subject
- sequence of the strtod function. The corresponding argument
- shall be a pointer to floating.
- - c Matches a sequence of characters of exactly the number
- specified by the field width (1 if no field width is present
- in the directive). If no l length modifier is present, the
- corresponding argument shall be a pointer to the initial
- element of a character array large enough to accept the
- sequence. No null character is added.<BR><BR>
- If an l length modifier is present, the input shall be a
- sequence of multibyte characters that begins in the initial
- shift state. Each multibyte character in the sequence is
- converted to a wide character as if by a call to the mbrtowc
- function, with the conversion state described by an mbstate_t
- object initialized to zero before the first multibyte character
- is converted. The corresponding argument shall be a pointer to
- the initial element of an array of wchar_t large enough to
- accept the resulting sequence of wide characters. No null wide
- character is added.
- - s Matches a sequence of non-white-space characters.
- If no l length modifier is present, the corresponding argument
- shall be a pointer to the initial element of a character array
- large enough to accept the sequence and a terminating null
- character, which will be added automatically. If an l length
- modifier is present, the input shall be a sequence of multibyte
- characters that begins in the initial shift state. Each
- multibyte character is converted to a wide character as if by a
- call to the mbrtowc function, with the conversion state
- described by an mbstate_t object initialized to zero before the
- first multibyte character is converted. The corresponding
- argument shall be a pointer to the initial element of an array
- of wchar_t large enough to accept the sequence and the
- terminating null wide character, which will be added automatically.
- - [ Matches a nonempty sequence of characters from a set of
- expected characters (the scanset).<BR><BR>
- If no l length modifier is present, the corresponding argument
- shall be a pointer to the initial element of a character array
- large enough to accept the sequence and a terminating null
- character, which will be added automatically. If an l length
- modifier is present, the input shall be a sequence of multibyte
- characters that begins in the initial shift state. Each
- multibyte character is converted to a wide character as if by a
- call to the mbrtowc function, with the conversion state
- described by an mbstate_t object initialized to zero before the
- first multibyte character is converted. The corresponding
- argument shall be a pointer to the initial element of an array
- of wchar_t large enough to accept the sequence and the
- terminating null wide character, which will be added
- automatically.<BR><BR>
- The conversion specifier includes all subsequent characters in
- the format string, up to and including the matching right
- bracket (]). The characters between the brackets (the scanlist)
- compose the scanset, unless the character after the left
- bracket is a circumflex (^), in which case the scanset contains
- all characters that do not appear in the scanlist between the
- circumflex and the right bracket. If the conversion specifier
- begins with [] or [^], the right bracket character is in the
- scanlist and the next following right bracket character is the
- matching right bracket that ends the specification; otherwise
- the first following right bracket character is the one that
- ends the specification. If a - character is in the scanlist and
- is not the first, nor the second where the first character is
- a ^, nor the last character, it will be treated as a regular character.
- - p Matches a set of sequences, which are the same as the set of
- sequences that are produced by the %p conversion of the fprintf
- function. The corresponding argument must be a pointer to a
- pointer to void. The input item is converted to a pointer value.
- If the input item is a value converted earlier during the same
- program execution, the pointer that results will compare equal
- to that value; otherwise the behavior of the %p conversion is
- indeterminate.
- - n No input is consumed. The corresponding argument shall be a
- pointer to signed integer into which is to be written the
- number of characters read from the input stream so far by this
- call to the fscanf function. Execution of a %n directive does
- not increment the assignment count returned at the completion
- of execution of the fscanf function. No argument is converted,
- but one is consumed. If the conversion specification includes
- an assignment suppressing character the conversion specification
- is ignored. If the conversion specification contains a
- field width, the field width will be ignored.
- - % Matches a single % character; no conversion or assignment occurs.
-
- @param[in] stream An open File specifier from which the input is read.
- @param[in] format A multi-byte character sequence containing characters
- to be matched against, and conversion specifiers
- which convert their associated arguments. Converted
- items are stored according to their associated arguments.
- @param ... Variable number of parameters, as required by format,
- specifying the objects to receive the converted input.
-
- @return The fscanf function returns EOF if an input failure occurs before
- any conversion. Otherwise the number of input items assigned
- is returned; which can be fewer than provided for, or even zero
- in the event of an early matching failure.
-**/
-int fscanf (FILE * __restrict stream, const char * __restrict format, ...);
-
-/** Formatted print to stdout.
-
- The printf function is equivalent to fprintf with stdout used as the output stream.
-
- @param[in] format A multi-byte character sequence containing characters
- to be copied unchanged, and conversion specifiers
- which convert their associated arguments. Copied and
- converted characters are sent to the output stream.
- @param ... Variable number of parameters as required by format.
-
- @return The printf function returns the number of characters
- transmitted, or a negative value if an output or encoding
- error occurred.
-**/
-int printf (const char * __restrict format, ...);
-
-/** Formatted input from stdin.
-
- The scanf function is equivalent to fscanf with stdin used as the input stream.
-
- @param[in] format A multi-byte character sequence containing characters
- to be matched against, and conversion specifiers
- which convert their associated arguments. Converted
- items are stored according to their associated arguments.
- @param[out] ... Variable number of parameters, as required by format,
- specifying the objects to receive the converted input.
-
- @return The scanf function returns EOF if an input failure occurs before
- any conversion. Otherwise the number of input items assigned
- is returned; which can be fewer than provided for, or even zero
- in the event of an early matching failure.
-**/
-int scanf (const char * __restrict format, ...);
-
-/** Formatted output to a buffer.
-
- The sprintf function is equivalent to fprintf, except that the output is
- written into array Buff instead of to a stream. A null character is written
- at the end of the characters written; it is not counted as part of the
- returned value.
-
- @param[out] Buff A pointer to the array to receive the formatted output.
- @param[in] Format A multi-byte character sequence containing characters
- to be copied unchanged, and conversion specifiers
- which convert their associated arguments. Copied and
- converted characters are written to the array pointed
- to by Buff.
- @param ... Variable number of parameters as required by format.
-
- @return The sprintf function returns the number of characters written in
- the array, not counting the terminating null character, or a
- negative value if an encoding error occurred.
-**/
-int sprintf (char * __restrict Buff, const char * __restrict Format, ...);
-
-/** Formatted input from a string.
-
- The sscanf function is equivalent to fscanf, except that input is obtained
- from a string rather than from a stream. Reaching the end of the string
- is equivalent to encountering end-of-file for the fscanf function.
-
- @param[in] Buff Pointer to the string from which to obtain input.
- @param[in] Format A multi-byte character sequence containing characters
- to be matched against, and conversion specifiers
- which convert their associated arguments. Converted
- items are stored according to their associated arguments.
- @param[out] ... Variable number of parameters, as required by format,
- specifying the objects to receive the converted input.
-
- @return The scanf function returns EOF if an input failure occurs before
- any conversion. Otherwise the number of input items assigned
- is returned; which can be fewer than provided for, or even zero
- in the event of an early matching failure.
-**/
-int sscanf (const char * __restrict Buff, const char * __restrict Format, ...);
-
-/** Print formatted values from an argument list.
-
- The vfprintf function is equivalent to fprintf, with the variable argument
- list replaced by Args, which must have been initialized by the va_start macro.
- The vfprintf function does not invoke the va_end macro.
-
- @param[in] Stream The output stream to receive the formatted output.
- @param[in] Format A multi-byte character sequence containing characters
- to be matched against, and conversion specifiers
- which convert their associated arguments. Converted
- items are stored according to their associated arguments.
- @param[in] Args A list of arguments, initialized by the va_start macro
- and accessed using the va_arg macro, used to satisfy
- the directives in the Format string.
-
- @return The vfprintf function returns the number of characters transmitted,
- or a negative value if an output or encoding error occurred.
-**/
-int vfprintf(FILE * __restrict Stream, const char * __restrict Format, va_list Args);
-
-/** Formatted print, to stdout, from an argument list.
-
- The vprintf function is equivalent to printf, with the variable argument
- list replaced by Args, which must have been initialized by the va_start
- macro (and possibly subsequent va_arg calls). The vprintf function does
- not invoke the va_end macro.
-
- @param[in] Format A multi-byte character sequence containing characters
- to be matched against, and conversion specifiers
- which convert their associated arguments. Converted
- items are stored according to their associated arguments.
- @param[in] Args A list of arguments, initialized by the va_start macro
- and accessed using the va_arg macro, used to satisfy
- the directives in the Format string.
-
- @return The vprintf function returns the number of characters transmitted,
- or a negative value if an output or encoding error occurred.
-**/
-int vprintf (const char * __restrict Format, va_list Args);
-
-/** Formatted print, to a buffer, from an argument list.
-
- The vsprintf function is equivalent to sprintf, with the variable argument
- list replaced by Args, which must have been initialized by the va_start
- macro. The vsprintf function does not invoke the va_end macro.
-
- @param[out] Buff A pointer to the array to receive the formatted output.
- @param[in] Format A multi-byte character sequence containing characters
- to be copied unchanged, and conversion specifiers
- which convert their associated arguments. Copied and
- converted characters are written to the array pointed
- to by Buff.
- @param[in] Args A list of arguments, initialized by the va_start macro
- and accessed using the va_arg macro, used to satisfy
- the directives in the Format string.
-
- @return The vsprintf function returns the number of characters written in
- the array, not counting the terminating null character, or a
- negative value if an encoding error occurred.
-**/
-int vsprintf(char * __restrict Buff, const char * __restrict Format, va_list Args);
-
-/* ################ Character Input/Output Functions. */
-
-/** Get a character from an input Stream.
-
- If the end-of-file indicator for the input stream pointed to by Stream is
- not set, and a next character is present, the fgetc function obtains that
- character as an unsigned char converted to an int and advances the
- associated file position indicator for the stream.
-
- @param[in] Stream An input stream from which to obtain a character.
-
- @return If the end-of-file indicator for the stream is set, or if the
- stream is at end-of-file, the end-of-file indicator for the
- stream is set and the fgetc function returns EOF. Otherwise,
- the fgetc function returns the next character from the input
- stream pointed to by Stream. If a read error occurs, the
- error indicator for the stream is set and the fgetc function
- returns EOF.
-**/
-int fgetc (FILE *Stream);
-
-/** Read a string from an input stream into a buffer.
-
- The fgets function reads at most one less than the number of characters
- specified by Limit from the stream pointed to by Stream into the array
- pointed to by Buff. No additional characters are read after a
- new-line character (which is retained) or after end-of-file. A null
- character is written immediately after the last character read into the array.
-
- @param[out] Buff A pointer to the array to receive the input string.
- @param[in] Limit The maximum number of characters to put into Buff,
- including the terminating null character.
- @param[in] Stream An input stream from which to obtain a character.
-
- @return The fgets function returns Buff if successful. If end-of-file is
- encountered and no characters have been read into the array, the
- contents of the array remain unchanged and a null pointer is
- returned. If a read error occurs during the operation, the array
- contents are indeterminate and a null pointer is returned.
-**/
-char *fgets (char * __restrict Buff, int Limit, FILE * __restrict Stream);
-
-/** Write a character to an output stream.
-
- The fputc function writes the character specified by C (converted to an
- unsigned char) to the output stream pointed to by Stream, at the position
- indicated by the associated file position indicator for the stream
- (if defined), and advances the indicator appropriately. If the file cannot
- support positioning requests, or if the stream was opened with append mode,
- the character is appended to the output stream.
-
- @param[in] C The character to be written to Stream.
- @param[in] Stream The output stream that C is to be written to.
-
- @return The fputc function returns the character written. If a write
- error occurs, the error indicator for the stream is set and
- fputc returns EOF.
-**/
-int fputc (int C, FILE *Stream);
-
-/** Write a string to an output stream.
-
- The fputs function writes String to the stream pointed to by Stream. The
- terminating null character is not written.
-
- @param[in] String The character string to be written to Stream.
- @param[in] Stream The output stream that String is to be written to.
-
- @return The fputs function returns EOF if a write error occurs; otherwise
- it returns a non-negative value.
-**/
-int fputs (const char * __restrict String, FILE * __restrict Stream);
-
-/** Get a character from an input stream.
-
- The getc function is equivalent to fgetc, except that if it is implemented
- as a macro, it may evaluate stream more than once, so the argument should
- never be an expression with side effects.
-
- @param[in] Stream An input stream from which to obtain a character.
-
- @return If the end-of-file indicator for the stream is set, or if the
- stream is at end-of-file, the end-of-file indicator for the
- stream is set and getc returns EOF. Otherwise, getc returns
- the next character from the input stream pointed to by Stream.
- If a read error occurs, the error indicator for the stream is set
- and getc returns EOF.
-**/
-int getc (FILE *);
-
-/** Get a character from stdin.
-
- The getchar function is equivalent to getc with the argument stdin.
-
- @return If the end-of-file indicator for stdin is set, or if stdin
- is at end-of-file, the end-of-file indicator is set and getchar
- returns EOF. Otherwise, getchar returns the next character from
- stdin. If a read error occurs, the error indicator for stdin is
- set and getchar returns EOF.
-**/
-int getchar (void);
-
-/** Read a string from stdin into a buffer.
-
- The gets function reads characters from the input stream pointed to by
- stdin, into the array pointed to by Buff, until end-of-file is encountered
- or a new-line character is read. Any new-line character is discarded, and
- a null character is written immediately after the last character read into
- the array.
-
- @param[out] Buff A pointer to the array to receive the input string.
-
- @return The gets function returns Buff if successful. If end-of-file is
- encountered and no characters have been read into the array, the
- contents of the array remain unchanged and a null pointer is
- returned. If a read error occurs during the operation, the array
- contents are indeterminate and a null pointer is returned.
-**/
-char *gets (char *Buff);
-
-/** Write a character to an output stream.
-
- The putc function is equivalent to fputc, except that if it is implemented
- as a macro, it may evaluate Stream more than once, so that argument should
- never be an expression with side effects.
-
- @param[in] C The character to be written to Stream.
- @param[in] Stream The output stream that C is to be written to.
-
- @return The putc function returns the character written. If a write
- error occurs, the error indicator for the stream is set and
- putc returns EOF.
-**/
-int putc (int C, FILE *Stream);
-
-/** Write a character to stdout.
-
- The putchar function is equivalent to putc with stdout as the Stream argument.
-
- @param[in] C The character to be written to stdout.
-
- @return The putchar function returns the character written. If a write
- error occurs, the error indicator for stdout is set and putchar
- returns EOF.
-**/
-int putchar (int C);
-
-/** Write String to stdout.
-
- The puts function writes the string pointed to by String to the stream
- pointed to by stdout, and appends a new-line character to the output. The
- terminating null character is not written.
-
- @param[in] String A pointer to the character string to write to stdout.
-
- @return The puts function returns EOF if a write error occurs; otherwise
- it returns a non-negative value.
-**/
-int puts (const char *String);
-
-/** Return a character to the input Stream as if it had not been read.
-
- The ungetc function pushes the character specified by C (converted to an
- unsigned char) back onto the input stream pointed to by Stream. Pushed-back
- characters will be returned by subsequent reads on that stream in the
- reverse order of their being pushed. A successful intervening call
- (with the stream pointed to by Stream) to a file positioning function
- (fseek, fsetpos, or rewind) discards any pushed-back characters for the
- stream. The external storage corresponding to the stream is unchanged.
-
- One character of pushback is guaranteed. If the ungetc function is called
- too many times on the same stream without an intervening read or file
- positioning operation on that stream, the operation will fail.
-
- If the value of C equals that of the macro EOF, the operation fails and the
- input stream is unchanged.
-
- A successful call to the ungetc function clears the end-of-file indicator
- for the stream. The value of the file position indicator for the stream
- after reading or discarding all pushed-back characters is the same as it
- was before the characters were pushed back. For a binary stream, its
- file position indicator is decremented by each successful call to the
- ungetc function; if its value was zero before a call, it will remain zero
- after the call.
-
- @param[in] C The character to push back onto the Stream.
- @param[in] Stream The output stream that C is to be pushed back onto.
-
- @return The ungetc function returns the character pushed back,
- or EOF if the operation fails.
-**/
-int ungetc (int C, FILE *Stream);
-
-/* ################ Direct Input/Output Functions. */
-
-/** Read Num elements of size Size from a Stream into a Buffer.
-
- The fread function reads, into the array pointed to by Buffer, up to Num
- elements, whose size is specified by Size, from the stream pointed to by
- Stream. For each object, Size calls are made to the fgetc function and the
- results stored, in the order read, in an array of unsigned char exactly
- overlaying the Buffer object. The file position indicator for the stream
- (if defined) is advanced by the number of characters successfully read. If
- an error occurs, the resulting value of the file position indicator for the
- stream is indeterminate.
-
- @param[out] Buffer Pointer to an object to receive the read data.
- @param[in] Size Size of each element to be read.
- @param[in] Num Number of elements to read.
- @param[in] Stream Input stream to read the data from.
-
- @return The fread function returns the number of elements successfully
- read, which may be less than Num if a read error or end-of-file
- is encountered. If Size or Num is zero, fread returns zero and
- the contents of the array and the state of the stream remain
- unchanged.
-**/
-size_t fread (void * __restrict Buffer,
- size_t Size,
- size_t Num,
- FILE * __restrict Stream
- );
-
-/** Write Num elements of size Size from Buffer to Stream.
-
- The fwrite function writes, from the array pointed to by Buffer, up to Num
- elements whose size is specified by Size, to the stream pointed to by
- Stream. For each object, Size calls are made to the fputc function, taking
- the values (in order) from an array of unsigned char exactly overlaying the
- Buffer object. The file position indicator for the stream (if defined) is
- advanced by the number of characters successfully written. If an error
- occurs, the resulting value of the file position indicator for the stream is
- indeterminate.
-
- @param[out] Buffer Pointer to an object containing the data to be written.
- @param[in] Size Size of each element to be written.
- @param[in] Num Number of elements to write.
- @param[in] Stream Output stream to write the data to.
-
- @return The fwrite function returns the number of elements successfully
- written, which will be less than Num only if a write error is
- encountered. If Size or Num is zero, fwrite returns zero and
- the state of the stream remains unchanged.
-**/
-size_t fwrite (const void * __restrict Buffer,
- size_t Size,
- size_t Num,
- FILE * __restrict Stream
- );
-
-/* ################ File Positioning Functions. */
-
-/** Get a stream's position and parse state.
-
- The fgetpos function stores the current values of the parse state (if any)
- and file position indicator for the stream pointed to by Stream in the
- object pointed to by Pos. The values stored contain unspecified
- information usable by the fsetpos function for repositioning the stream
- to its position at the time of the call to the fgetpos function.
-
- @param[in] Stream Stream to get current position of.
- @param[out] Pos Object to receive the stream's state and position information.
-
- @return If successful, the fgetpos function returns zero; if either
- parameter is NULL, the fgetpos function returns nonzero and
- stores EINVAL in errno.
-**/
-int fgetpos (FILE * __restrict Stream, fpos_t * __restrict Pos);
-
-/** Set the file position for a stream.
-
- The fseek function sets the file position indicator for the stream pointed
- to by Stream. If a read or write error occurs, the error indicator for the
- stream is set and fseek fails.
-
- For a binary stream, the new position, measured in characters from the
- beginning of the file, is obtained by adding Offset to the position
- specified by Whence. The specified position is the beginning of the file if
- Whence is SEEK_SET, the current value of the file position indicator if
- SEEK_CUR, or end-of-file if SEEK_END.
-
- For a text stream, Offset must either be zero or a value returned by an
- earlier successful call to the ftell function, on a stream associated with
- the same file, and Whence must be SEEK_SET.
-
- After determining the new position, a successful call to the fseek function
- undoes any effects of the ungetc function on the stream, clears the
- end-of-file indicator for the stream, and then establishes the new position.
- After a successful fseek call, the next operation on an update stream may
- be either input or output.
-
- @param[in] Stream The I/O stream to set the position of.
- @param[in] Offset The position, interpreted depending upon the value of
- Whence, that the stream is to be positioned to.
- @param[in] Whence A value indicating how Offset is to be interpreted:
- - SEEK_SET indicates Offset is an absolute position.
- - SEEK_END indicates Offset is relative to the end of the file.
- - SEEK_CUR indicates Offset is relative to the current position.
-
-@return The fseek function returns nonzero only for a request that cannot be satisfied.
-**/
-int fseek (FILE *Stream, long Offset, int Whence);
-
-/** Set a stream's position and parse state.
-
- The fsetpos function sets the mbstate_t object (if any) and file position
- indicator for the stream pointed to by Stream according to the value of the
- object pointed to by Pos, which is a value that was obtained from an
- earlier successful call to the fgetpos function on a stream associated with
- the same file. If a read or write error occurs, the error indicator for the
- stream is set and fsetpos fails.
-
- A successful call to the fsetpos function undoes any effects of the ungetc
- function on the stream, clears the end-of-file indicator for the stream,
- and then establishes the new parse state and position. After a successful
- fsetpos call, the next operation on an update stream may be either input or output.
-
- @param[in] Stream Stream to set current position of.
- @param[in] Pos Object containing the state and position information.
-
- @return If successful, the fsetpos function returns zero; on failure, the
- fsetpos function returns nonzero and stores EINVAL, or ESPIPE,
- in errno; depending upon whether the error was because of an invalid
- parameter, or because Stream is not seekable.
-**/
-int fsetpos (FILE *Stream, const fpos_t *Pos);
-
-/** Get Stream's current position.
-
- The ftell function obtains the current value of the file position indicator
- for the stream pointed to by Stream. For a binary stream, the value is the
- number of characters from the beginning of the file. For a text stream, its
- file position indicator contains unspecified information, usable by the
- fseek function for returning the file position indicator for the stream to
- its position at the time of the ftell call; the difference between two such
- return values is not necessarily a meaningful measure of the number of
- characters written or read.
-
- @param[in] Stream Pointer to the FILE object to get the current position of.
-
- @return If successful, the ftell function returns the current value of
- the file position indicator for the stream. On failure, the
- ftell function returns -1L and stores ESPIPE in errno indicating
- that the stream is not seekable.
-**/
-long ftell (FILE *Stream);
-
-/** Restore a Stream's file position to the beginning of the file.
-
- The rewind function sets the file position indicator for the stream pointed
- to by Stream to the beginning of the file and clears the stream's error indicator.
-
- @param[in] Stream Pointer to the stream to be positioned to its beginning.
-**/
-void rewind (FILE *Stream);
-
-/* ################ Error-handling Functions. */
-
-/** Clear a Stream's error and end-of-file indicators.
-
- @param[in] Stream Pointer to the stream to be cleared of errors.
-**/
-void clearerr(FILE *Stream);
-
-/** Test the end-of-file indicator for Stream.
-
- @param[in] Stream Pointer to the FILE object to be tested for EOF.
-
- @return The feof function returns non-zero if, and only if, the end-of-file
- indicator is set for Stream.
-**/
-int feof (FILE *Stream);
-
-/** Test the error indicator for Stream.
-
- @param[in] Stream Pointer to the stream to be tested for error.
-
- @return The ferror function returns non-zero if, and only if, the error
- indicator is set for Stream.
-**/
-int ferror (FILE *Stream);
-
-/** Print an error message to stderr based upon the value of errno and String.
-
- The perror function maps the error number in the integer expression errno
- to an error message. It writes a sequence of characters to the standard
- error stream thus: first (if String is not a null pointer and the character
- pointed to by String is not the null character), the string pointed to by
- String followed by a colon (:) and a space; then an appropriate error
- message string followed by a new-line character. The contents of the error
- message strings are the same as those returned by the strerror function
- with argument errno.
-
- @param[in] String A text string to prefix the output error message with.
-
- @sa strerror in <string.h>
-**/
-void perror (const char *String);
-
-__END_DECLS
-
-/*
- * IEEE Std 1003.1-90
- */
-__BEGIN_DECLS
-FILE *fdopen(int, const char *);
-__END_DECLS
-
-/*
- * IEEE Std 1003.1c-95, also adopted by X/Open CAE Spec Issue 5 Version 2
- */
-__BEGIN_DECLS
-void flockfile (FILE *);
-int ftrylockfile (FILE *);
-void funlockfile (FILE *);
-int getc_unlocked (FILE *);
-int getchar_unlocked(void);
-int putc_unlocked (int, FILE *);
-int putchar_unlocked(int);
-__END_DECLS
-
-/*
- * Functions defined in POSIX 1003.2 and XPG2 or later.
- */
-__BEGIN_DECLS
- int pclose (FILE *);
- FILE *popen (const char *, const char *);
-__END_DECLS
-
-/*
- * Functions defined in ISO XPG4.2, ISO C99, POSIX 1003.1-2001 or later.
- */
-__BEGIN_DECLS
- int snprintf (char * __restrict, size_t, const char * __restrict, ...)
- __attribute__((__format__(__printf__, 3, 4)));
- int vsnprintf(char * __restrict, size_t, const char * __restrict, va_list)
- __attribute__((__format__(__printf__, 3, 0)));
-__END_DECLS
-
-/*
- * Functions defined in XPG4.2.
- */
-__BEGIN_DECLS
- //int getw(FILE *);
- //int putw(int, FILE *);
- char *mkdtemp(char *);
- int mkstemp(char *);
- char *mktemp(char *);
-
- char *tempnam(const char *, const char *);
-__END_DECLS
-
-/*
- * X/Open CAE Specification Issue 5 Version 2
- */
-#ifndef off_t
- typedef __off_t off_t;
- #define off_t __off_t
-#endif /* off_t */
-
-__BEGIN_DECLS
-int fseeko(FILE *, off_t, int);
-off_t ftello(FILE *);
-__END_DECLS
-
-/*
- * Routines that are purely local.
- */
-#define FPARSELN_UNESCESC 0x01
-#define FPARSELN_UNESCCONT 0x02
-#define FPARSELN_UNESCCOMM 0x04
-#define FPARSELN_UNESCREST 0x08
-#define FPARSELN_UNESCALL 0x0f
-
-__BEGIN_DECLS
- //int asprintf(char ** __restrict, const char * __restrict, ...)
- // __attribute__((__format__(__printf__, 2, 3)));
- char *fgetln(FILE * __restrict, size_t * __restrict);
- char *fparseln(FILE *, size_t *, size_t *, const char[3], int);
- int fpurge(FILE *);
- void setbuffer(FILE *, char *, int);
- int setlinebuf(FILE *);
- int vasprintf(char ** __restrict, const char * __restrict,
- va_list)
- __attribute__((__format__(__printf__, 2, 0)));
- int vscanf(const char * __restrict, va_list)
- __attribute__((__format__(__scanf__, 1, 0)));
- //int vfscanf(FILE * __restrict, const char * __restrict,
- // va_list)
- // __attribute__((__format__(__scanf__, 2, 0)));
- int vsscanf(const char * __restrict, const char * __restrict,
- va_list)
- __attribute__((__format__(__scanf__, 2, 0)));
- //const char *fmtcheck(const char *, const char *)
- // __attribute__((__format_arg__(2)));
-__END_DECLS
-
- /*
- * Stdio function-access interface.
- */
-__BEGIN_DECLS
- FILE *funopen(const void *,
- int (*)(void *, char *, int),
- int (*)(void *, const char *, int),
- fpos_t (*)(void *, fpos_t, int),
- int (*)(void *));
-__END_DECLS
- //#define fropen(cookie, fn) funopen(cookie, fn, 0, 0, 0)
- //#define fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0)
-
-/*
- * Functions internal to the implementation.
- */
-__BEGIN_DECLS
-int __srget(FILE *);
-int __swbuf(int, FILE *);
-__END_DECLS
-
-/*
- * The __sfoo macros are here so that we can
- * define function versions in the C library.
- */
-#define __sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++))
-
-#if defined(__GNUC__) && defined(__STDC__)
- static __inline int __sputc(int _c, FILE *_p) {
- if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
- return (*_p->_p++ = _c);
- else
- return (__swbuf(_c, _p));
- }
-#else
- /*
- * This has been tuned to generate reasonable code on the vax using pcc.
- */
- #define __sputc(c, p) \
- (--(p)->_w < 0 ? \
- (p)->_w >= (p)->_lbfsize ? \
- (*(p)->_p = (unsigned char)(c)), *(p)->_p != '\n' ? \
- (int)*(p)->_p++ : \
- __swbuf('\n', p) : \
- __swbuf((int)(c), p) : \
- (*(p)->_p = (unsigned char)(c), (int)*(p)->_p++))
-#endif
-
-#define __sfeof(p) (((p)->_flags & __SEOF) != 0)
-#define __sferror(p) (((p)->_flags & __SERR) != 0)
-#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))
-#define __sfileno(p) ((p)->_file)
-
-#ifndef __lint__
- #define feof(p) __sfeof(p)
- #define ferror(p) __sferror(p)
- #define clearerr(p) __sclearerr(p)
-
- #define getc(fp) __sgetc(fp)
- #define putc(x, fp) __sputc(x, fp)
-#endif /* __lint__ */
-
-#define getchar() getc(stdin)
-#define putchar(x) putc(x, stdout)
-
-#define fileno(p) __sfileno(p)
-
-#define getc_unlocked(fp) __sgetc(fp)
-#define putc_unlocked(x, fp) __sputc(x, fp)
-
-#define getchar_unlocked() getc_unlocked(stdin)
-#define putchar_unlocked(x) putc_unlocked(x, stdout)
-
-#endif /* _STDIO_H_ */
diff --git a/StdLib/Include/stdlib.h b/StdLib/Include/stdlib.h
deleted file mode 100644
index 0b9dfd34b0..0000000000
--- a/StdLib/Include/stdlib.h
+++ /dev/null
@@ -1,951 +0,0 @@
-/** @file
- The header <stdlib.h> declares five types and several functions of general
- utility, and defines several macros.
-
- The files stddef.h and stdlib.h are "catch all" headers for definitions and declarations
- that don't fit well in the other headers. There are two separate header files because
- the contents of <stddef.h> are valid in both freestanding and hosted environment, while the
- header <stdlib.h> contains elements that are only valid in a hosted environment.
-
- The following macros are defined in this file:<BR>
- @verbatim
- EXIT_FAILURE An expression indicating application failure, used as an argument to exit().
- EXIT_SUCCESS An expression indicating application success, used as an argument to exit().
- RAND_MAX The maximum value returned by the rand function.
- MB_CUR_MAX Maximum number of bytes in a multibyte character for the current locale.
- ATEXIT_MAX Maximum number of routines that may be registered by the atexit function.
- @endverbatim
-
- The following types are defined in this file:<BR>
- @verbatim
- size_t Unsigned integer type of the result of the sizeof operator.
- wchar_t The type of a wide character.
- div_t Type of the value returned by the div function.
- ldiv_t Type of the value returned by the ldiv function.
- lldiv_t Type of the value returned by the lldiv function.
- @endverbatim
-
- The following functions are declared in this file:<BR>
- @verbatim
- ################ Communication with the environment
- void abort (void) __noreturn;
- int atexit (void (*)(void));
- void exit (int status) __noreturn;
- void _Exit (int status) __noreturn;
- char *getenv (const char *name);
- int setenv (register const char * name,
- register const char * value, int rewrite);
- int system (const char *string);
-
- ################ Integer arithmetic functions
- int abs (int j);
- long labs (long j);
- long long llabs (long long j);
- div_t div (int numer, int denom);
- ldiv_t ldiv (long numer, long denom);
- lldiv_t lldiv (long long numer, long long denom);
-
- ################ Pseudo-random sequence generation functions
- int rand (void);
- void srand (unsigned seed);
-
- ################ Memory management functions
- void *calloc (size_t Num, size_t Size);
- void free (void *);
- void *malloc (size_t);
- void *realloc (void *Ptr, size_t NewSize);
-
- ################ Searching and Sorting utilities
- void *bsearch (const void *key, const void *base0,
- size_t nmemb, size_t size,
- int (*compar)(const void *, const void *));
- void qsort (void *base, size_t nmemb, size_t size,
- int (*compar)(const void *, const void *));
-
- ################ Multibyte/wide character conversion functions
- int mblen (const char *, size_t);
- int mbtowc (wchar_t * __restrict, const char * __restrict, size_t);
- int wctomb (char *, wchar_t);
-
- ################ Multibyte/wide string conversion functions
- size_t mbstowcs (wchar_t * __restrict dest,
- const char * __restrict src, size_t limit);
- size_t wcstombs (char * __restrict dest,
- const wchar_t * __restrict src, size_t limit);
-
- ################ Miscelaneous functions for *nix compatibility
- char *realpath (char *file_name, char *resolved_name);
- const char *getprogname (void);
- void setprogname (const char *progname);
-
- ############ Integer Numeric conversion functions
- int atoi (const char *nptr);
- long atol (const char *nptr);
- long long atoll (const char *nptr);
- long strtol (const char * __restrict nptr,
- char ** __restrict endptr, int base);
- unsigned long strtoul (const char * __restrict nptr,
- char ** __restrict endptr, int base);
- long long strtoll (const char * __restrict nptr,
- char ** __restrict endptr, int base);
- unsigned long long strtoull (const char * __restrict nptr,
- char ** __restrict endptr, int base);
-
- ######### Floating-point Numeric conversion functions
- double atof (const char *);
- double strtod (const char * __restrict nptr,
- char ** __restrict endptr);
- float strtof (const char * __restrict nptr,
- char ** __restrict endptr);
- long double strtold (const char * __restrict nptr,
- char ** __restrict endptr);
- @endverbatim
-
- Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _STDLIB_H
-#define _STDLIB_H
-#include <sys/EfiCdefs.h>
-
-#ifdef _EFI_SIZE_T_
- /** Unsigned integer type of the result of the sizeof operator. **/
- typedef _EFI_SIZE_T_ size_t;
- #undef _EFI_SIZE_T_
- #undef _BSD_SIZE_T_
-#endif
-
-#ifndef __cplusplus
- #ifdef _EFI_WCHAR_T
- /** Type of a wide (Unicode) character. **/
- typedef _EFI_WCHAR_T wchar_t;
- #undef _EFI_WCHAR_T
- #undef _BSD_WCHAR_T_
- #endif
-#endif
-
-/// A structure type that is the type of the value returned by the div function.
-typedef struct {
- int quot; /**< quotient */
- int rem; /**< remainder */
-} div_t;
-
-/// A structure type that is the type of the value returned by the ldiv function.
-typedef struct {
- long quot;
- long rem;
-} ldiv_t;
-
-/// A structure type that is the type of the value returned by the lldiv function.
-typedef struct {
- long long quot;
- long long rem;
-} lldiv_t;
-
-/** @{
- Expand to integer constant expressions that can be used as the argument to
- the exit function to return unsuccessful or successful termination status,
- respectively, to the host environment.
-**/
-#define EXIT_FAILURE 1
-#define EXIT_SUCCESS 0
-/*@}*/
-
-/** Expands to an integer constant expression that is the maximum value
- returned by the rand function.
-**/
-#define RAND_MAX 0x7fffffff
-
-/** Expands to a positive integer expression with type size_t that is the
- maximum number of bytes in a multibyte character for the extended character
- set specified by the current locale (category LC_CTYPE), which is never
- greater than MB_LEN_MAX.
-
- Since UEFI only supports the Unicode Base Multilingual Plane (BMP),
- correctly formed characters will only produce 1, 2, or 3-byte UTF-8 characters.
-**/
-#define MB_CUR_MAX 3
-
-/** Maximum number of functions that can be registered by atexit.
-
- The C standard states that the implementation shall support the
- registration of at least 32 functions.
-**/
-#define ATEXIT_MAX 32
-
-__BEGIN_DECLS
-
-/* ################ Communication with the environment ################## */
-
-/** The abort function causes abnormal program termination to occur, unless
- the signal SIGABRT is being caught and the signal handler does not return.
-
- Open streams with unwritten buffered data are not flushed, open
- streams are not closed, and temporary files are not removed by abort.
-
- Unsuccessful termination is returned to the host environment by means of
- the function call, raise(SIGABRT).
-
- @sa signal.h
-**/
-void abort(void) __noreturn;
-
-/** The atexit function registers the function pointed to by func, to be
- called without arguments at normal program termination.
-
- The implementation supports the registration of up to 32 functions.
-
- @param[in] Handler Pointer to the function to register as one of the
- routines to call at application exit time.
-
- @return The atexit function returns zero if the registration succeeds,
- nonzero if it fails.
-**/
-int atexit(void (*Handler)(void));
-
-/** The exit function causes normal program termination to occur. If more than
- one call to the exit function is executed by a program,
- the behavior is undefined.
-
- First, all functions registered by the atexit function are called, in the
- reverse order of their registration, except that a function is called
- after any previously registered functions that had already been called at
- the time it was registered. If, during the call to any such function, a
- call to the longjmp function is made that would terminate the call to the
- registered function, the behavior is undefined.
-
- Next, all open streams with unwritten buffered data are flushed, all open
- streams are closed, and all files created by the tmpfile function
- are removed.
-
- Finally, control is returned to the host environment.
-
- @param[in] status A value to be returned when the application exits.
-
- @return If the value of status is zero, or EXIT_SUCCESS, status is
- returned unchanged. If the value of status is EXIT_FAILURE,
- RETURN_ABORTED is returned. Otherwise, status is returned unchanged.
-**/
-void exit(int status) __noreturn;
-
-/** The _Exit function causes normal program termination to occur and control
- to be returned to the host environment.
-
- No functions registered by the atexit function or signal handlers
- registered by the signal function are called. Open streams with unwritten
- buffered data are not flushed, open streams are not closed, and temporary
- files are not removed by abort.
-
- The status returned to the host environment is determined in the same way
- as for the exit function.
-
- @param[in] status A value to be returned when the application exits.
-
- @return If the value of status is zero, or EXIT_SUCCESS, status is
- returned unchanged. If the value of status is EXIT_FAILURE,
- RETURN_ABORTED is returned. Otherwise, status is returned unchanged.
-**/
-void _Exit(int status) __noreturn;
-
-/** The getenv function searches an environment list, provided by the host
- environment, for a string that matches the string pointed to by name. The
- set of environment names and the method for altering the environment list
- are determined by the underlying UEFI Shell implementation.
-
- @param[in] name Pointer to a string naming the environment variable to retrieve.
-
- @return The getenv function returns a pointer to a string associated with
- the matched list member. The string pointed to shall not be
- modified by the program, but may be overwritten by a subsequent
- call to the getenv function. If the specified name cannot be
- found, a null pointer is returned.
-**/
-char *getenv(const char *name);
-
-/** Add or update a variable in the environment list.
-
- @param[in] name Address of a zero terminated name string.
- @param[in] value Address of a zero terminated value string.
- @param[in] rewrite TRUE allows overwriting existing values.
-
- @retval 0 Returns 0 upon success.
- @retval -1 Returns -1 upon failure, sets errno with more information.
-**/
-int
-setenv (
- register const char * name,
- register const char * value,
- int rewrite
- );
-
-/** If string is a null pointer, the system function determines whether the
- host environment has a command processor. If string is not a null pointer,
- the system function passes the string pointed to by string to that command
- processor to be executed in a manner which the implementation shall
- document; this might then cause the program calling system to behave in a
- non-conforming manner or to terminate.
-
- @param[in] string Pointer to the command string to be executed.
-
- @return If the argument is a null pointer, the system function returns
- nonzero only if a command processor is available. If the argument
- is not a null pointer, and the system function does return, it
- returns an implementation-defined value.
-**/
-int system(const char *string);
-
-
-/* ################ Integer arithmetic functions ######################## */
-
-/** Computes the absolute value of an integer j.
-
- @param[in] j The value to find the absolute value of.
-
- @return The absolute value of j.
-**/
-int abs(int j);
-
-/** Computes the absolute value of a long integer j.
-
- @param[in] j The value to find the absolute value of.
-
- @return The absolute value of j.
-**/
-long labs(long j);
-
-/** Computes the absolute value of a long long integer j.
-
- @param[in] j The value to find the absolute value of.
-
- @return The absolute value of j.
-**/
-long long
- llabs(long long j);
-
-/** Computes numer / denom and numer % denom in a single operation.
-
- @param[in] numer The numerator for the division.
- @param[in] denom The denominator for the division.
-
- @return Returns a structure of type div_t, comprising both the
- quotient and the remainder.
-**/
-div_t div(int numer, int denom);
-
-/** Computes numer / denom and numer % denom in a single operation.
-
- @param[in] numer The numerator for the division.
- @param[in] denom The denominator for the division.
-
- @return Returns a structure of type ldiv_t, comprising both the
- quotient and the remainder.
-**/
-ldiv_t ldiv(long numer, long denom);
-
-/** Computes numer / denom and numer % denom in a single operation.
-
- @param[in] numer The numerator for the division.
- @param[in] denom The denominator for the division.
-
- @return Returns a structure of type lldiv_t, comprising both the
- quotient and the remainder.
-**/
-lldiv_t lldiv(long long numer, long long denom);
-
-/* ############ Integer Numeric conversion functions #################### */
-
-/** The atoi function converts the initial portion of the string pointed to by
- nptr to int representation. Except for the behavior on error, it is
- equivalent to:
- - atoi: (int)strtol(nptr, (char **)NULL, 10)
-
- @param[in] nptr Pointer to the string to be converted.
-
- @return The atoi function returns the converted value.
-**/
-int atoi(const char *nptr);
-
-/** The atol function converts the initial portion of the string pointed to by
- nptr to long int representation. Except for the behavior on error, it is
- equivalent to:
- - atol: strtol(nptr, (char **)NULL, 10)
-
- @param[in] nptr Pointer to the string to be converted.
-
- @return The atol function returns the converted value.
-**/
-long atol(const char *nptr);
-
-/** The atoll function converts the initial portion of the string pointed to by
- nptr to long long int representation. Except for the behavior on error, it
- is equivalent to:
- - atoll: strtoll(nptr, (char **)NULL, 10)
-
- @param[in] nptr Pointer to the string to be converted.
-
- @return The atoll function returns the converted value.
-**/
-long long
- atoll(const char *nptr);
-
-/** The strtol, strtoll, strtoul, and strtoull functions convert the initial
- portion of the string pointed to by nptr to long int, long long int,
- unsigned long int, and unsigned long long int representation, respectively.
- First, they decompose the input string into three parts: an initial,
- possibly empty, sequence of white-space characters (as specified by the
- isspace function), a subject sequence resembling an integer represented in
- some radix determined by the value of base, and a final string of one or
- more unrecognized characters, including the terminating null character of
- the input string. Then, they attempt to convert the subject sequence to an
- integer, and return the result.
-
- If the value of base is zero, the expected form of the subject sequence is
- that of an integer constant, optionally preceded
- by a plus or minus sign, but not including an integer suffix. If the value
- of base is between 2 and 36 (inclusive), the expected form of the subject
- sequence is a sequence of letters and digits representing an integer with
- the radix specified by base, optionally preceded by a plus or minus sign,
- but not including an integer suffix. The letters from a (or A) through z
- (or Z) are ascribed the values 10 through 35; only letters and digits whose
- ascribed values are less than that of base are permitted. If the value of
- base is 16, the characters 0x or 0X may optionally precede the sequence of
- letters and digits, following the sign if present.
-
- The subject sequence is defined as the longest initial subsequence of the
- input string, starting with the first non-white-space character, that is of
- the expected form. The subject sequence contains no characters if the input
- string is empty or consists entirely of white space, or if the first
- non-white-space character is other than a sign or a permissible letter or digit.
-
- If the subject sequence has the expected form and the value of base is
- zero, the sequence of characters starting with the first digit is
- interpreted as an integer constant. If the subject sequence has the
- expected form and the value of base is between 2 and 36, it is used as the
- base for conversion, ascribing to each letter its value as given above. If
- the subject sequence begins with a minus sign, the value resulting from the
- conversion is negated (in the return type). A pointer to the final string
- is stored in the object pointed to by endptr, provided that endptr is
- not a null pointer.
-
- In other than the "C" locale, additional locale-specific subject sequence
- forms may be accepted.
-
- If the subject sequence is empty or does not have the expected form, no
- conversion is performed; the value of nptr is stored in the object pointed
- to by endptr, provided that endptr is not a null pointer.
-
- @param[in] nptr Pointer to the string to be converted.
- @param[out] endptr If not NULL, points to an object to receive a pointer to the final string.
- @param[in] base The base, 0 to 36, of the number represented by the input string.
-
- @return The strtol, strtoll, strtoul, and strtoull functions return the
- converted value, if any. If no conversion could be performed, zero
- is returned. If the correct value is outside the range of
- representable values, LONG_MIN, LONG_MAX, LLONG_MIN, LLONG_MAX,
- ULONG_MAX, or ULLONG_MAX is returned (according to the return type
- and sign of the value, if any), and the value of the macro ERANGE
- is stored in errno.
-**/
-long strtol(const char * __restrict nptr, char ** __restrict endptr, int base);
-
-/** The strtoul function converts the initial portion of the string pointed to
- by nptr to unsigned long int representation.
-
- See the description for strtol for more information.
-
- @param[in] nptr Pointer to the string to be converted.
- @param[out] endptr If not NULL, points to an object to receive a pointer to the final string.
- @param[in] base The base, 0 to 36, of the number represented by the input string.
-
- @return The strtoul function returns the converted value, if any. If no
- conversion could be performed, zero is returned. If the correct
- value is outside the range of representable values, ULONG_MAX is
- returned and the value of the macro ERANGE is stored in errno.
-**/
-unsigned long
- strtoul(const char * __restrict nptr, char ** __restrict endptr, int base);
-
-/** The strtoll function converts the initial portion of the string pointed to
- by nptr to long long int representation.
-
- See the description for strtol for more information.
-
- @param[in] nptr Pointer to the string to be converted.
- @param[out] endptr If not NULL, points to an object to receive a pointer to the final string.
- @param[in] base The base, 0 to 36, of the number represented by the input string.
-
- @return The strtoll function returns the converted value, if any. If no
- conversion could be performed, zero is returned. If the correct
- value is outside the range of representable values, LLONG_MIN or
- LLONG_MAX is returned (according to the sign of the value, if any),
- and the value of the macro ERANGE is stored in errno.
-**/
-long long
- strtoll(const char * __restrict nptr, char ** __restrict endptr, int base);
-
-/** The strtoull function converts the initial portion of the string pointed to
- by nptr to unsigned long long int representation.
-
- See the description for strtol for more information.
-
- @param[in] nptr Pointer to the string to be converted.
- @param[out] endptr If not NULL, points to an object to receive a pointer to the final string.
- @param[in] base The base, 0 to 36, of the number represented by the input string.
-
- @return The strtoull function returns the converted value, if any. If no
- conversion could be performed, zero is returned. If the correct
- value is outside the range of representable values, ULLONG_MAX is
- returned and the value of the macro ERANGE is stored in errno.
-**/
-unsigned long long
- strtoull(const char * __restrict nptr, char ** __restrict endptr, int base);
-
-/* ######### Floating-point Numeric conversion functions ################ */
-
-/** Convert the initial part of a string to double representation.
-
- @param[in] nptr Pointer to the string to be converted.
-
- @return The floating-point value representing the string nptr.
-**/
-double atof(const char *nptr);
-
-/** @{
- The strtod, strtof, and strtold functions convert the initial portion of
- the string pointed to by nptr to double, float, and long double
- representation, respectively. First, they decompose the input string into
- three parts: an initial, possibly empty, sequence of white-space characters
- (as specified by the isspace function), a subject sequence resembling a
- floating-point constant or representing an infinity or NaN; and a final
- string of one or more unrecognized characters, including the terminating
- null character of the input string. Then, they attempt to convert the
- subject sequence to a floating-point number, and return the result.
-*/
-
-/** Convert a string to a double and point to the character after the last converted.
-
- @param[in] nptr Pointer to the string to be converted.
- @param[out] endptr If not NULL, points to an object to receive a pointer to the final string.
-
- @return A floating-point value representing the string nptr.
- A pointer to the final string is stored in the object pointed to
- by endptr, provided that endptr is not a null pointer.
- If the subject sequence is empty or does not have the expected
- form, no conversion is performed; the value of nptr is stored in
- the object pointed to by endptr, provided that endptr is not a null pointer.
-**/
-double strtod(const char * __restrict nptr, char ** __restrict endptr);
-
-/** Convert a string to a float and point to the character after the last converted.
-
- @param[in] nptr Pointer to the string to be converted.
- @param[out] endptr If not NULL, points to an object to receive a pointer to the final string.
-
- @return A floating-point value representing the string nptr.
- A pointer to the final string is stored in the object pointed to
- by endptr, provided that endptr is not a null pointer.
- If the subject sequence is empty or does not have the expected
- form, no conversion is performed; the value of nptr is stored in
- the object pointed to by endptr, provided that endptr is not a null pointer.
-**/
-float strtof(const char * __restrict nptr, char ** __restrict endptr);
-
-/** Convert a string to a long double and point to the character after the last converted.
-
- @param[in] nptr Pointer to the string to be converted.
- @param[out] endptr If not NULL, points to an object to receive a pointer to the final string.
-
- @return A floating-point value representing the string nptr.
- A pointer to the final string is stored in the object pointed to
- by endptr, provided that endptr is not a null pointer.
- If the subject sequence is empty or does not have the expected
- form, no conversion is performed; the value of nptr is stored in
- the object pointed to by endptr, provided that endptr is not a null pointer.
-**/
-long double
- strtold(const char * __restrict nptr, char ** __restrict endptr);
-/*@}*/
-
-/* ################ Pseudo-random sequence generation functions ######### */
-
-/** The rand function computes a sequence of pseudo-random integers in the
- range 0 to RAND_MAX.
-
- @return The rand function returns a pseudo-random integer.
-**/
-int rand(void);
-
-/** The srand function uses the argument as a seed for a new sequence of
- pseudo-random numbers to be returned by subsequent calls to rand.
-
- If srand is then called with the same seed value, the sequence of
- pseudo-random numbers shall be repeated. If rand is called before any calls
- to srand have been made, the same sequence shall be generated as when srand
- is first called with a seed value of 1.
-
- @param[in] seed The value used to "seed" the random number generator with.
-**/
-void srand(unsigned seed);
-
-/* ################ Memory management functions ######################### */
-
-/** The calloc function allocates space for an array of Num objects, each of
- whose size is Size. The space is initialized to all bits zero.
-
- @param[in] Num The number of objects to allocate space for.
- @param[in] Size The size, in bytes, of each object.
-
- @return NULL is returned if the space could not be allocated and errno
- contains the cause. Otherwise, a pointer to an 8-byte aligned
- region of the requested size is returned.
-**/
-void *calloc(size_t Num, size_t Size);
-
-/** The free function causes the space pointed to by Ptr to be deallocated,
- that is, made available for further allocation.
-
- If Ptr is a null pointer, no action occurs. Otherwise, if the argument
- does not match a pointer earlier returned by the calloc, malloc, or realloc
- function, or if the space has been deallocated by a call to free or
- realloc, the behavior is undefined.
-
- @param Ptr Pointer to a previously allocated region of memory to be freed.
-**/
-void free(void *Ptr);
-
-/** The malloc function allocates space for an object whose size is specified
- by size and whose value is indeterminate.
-
- This implementation uses the UEFI memory allocation boot services to get a
- region of memory that is 8-byte aligned and of the specified size. The
- region is allocated with type EfiLoaderData.
-
- @param Size Size, in bytes, of the region to allocate.
-
- @return NULL is returned if the space could not be allocated and errno
- contains the cause. Otherwise, a pointer to an 8-byte aligned
- region of the requested size is returned.<BR>
- If NULL is returned, errno may contain:
- - EINVAL: Requested Size is zero.
- - ENOMEM: Memory could not be allocated.
-**/
-void *malloc(size_t Size);
-
-/** The realloc function changes the size of the object pointed to by Ptr to
- the size specified by NewSize.
-
- The contents of the object are unchanged up to the lesser of the new and
- old sizes. If the new size is larger, the value of the newly allocated
- portion of the object is indeterminate.
-
- If Ptr is a null pointer, the realloc function behaves like the malloc
- function for the specified size.
-
- If Ptr does not match a pointer earlier returned by the calloc, malloc, or
- realloc function, or if the space has been deallocated by a call to the free
- or realloc function, the behavior is undefined.
-
- If the space cannot be allocated, the object pointed to by Ptr is unchanged.
-
- If NewSize is zero and Ptr is not a null pointer, the object it points to
- is freed.
-
- This implementation uses the UEFI memory allocation boot services to get a
- region of memory that is 8-byte aligned and of the specified size. The
- region is allocated with type EfiLoaderData.
-
- @param Ptr Pointer to a previously allocated region of memory to be resized.
- @param NewSize Size, in bytes, of the new object to allocate space for.
-
- @return NULL is returned if the space could not be allocated and errno
- contains the cause. Otherwise, a pointer to an 8-byte aligned
- region of the requested size is returned. If NewSize is zero,
- NULL is returned and errno will be unchanged.
-**/
-void *realloc(void *Ptr, size_t NewSize);
-
-/* ################ Searching and Sorting utilities ##################### */
-
-/** The bsearch function searches an array of Nmemb objects, the initial
- element of which is pointed to by Base, for an element that matches the
- object pointed to by Key. The size of each element of the array is
- specified by Size.
-
- The comparison function pointed to by Compar is called with two arguments
- that point to the Key object and to an array element, in that order. The
- function returns an integer less than, equal to, or greater than zero if
- the Key object is considered, respectively, to be less than, to match, or
- to be greater than the array element. The array consists of: all the
- elements that compare less than, all the elements that compare equal to,
- and all the elements that compare greater than the key object,
- in that order.
-
- @param[in] Key Pointer to the object to search for.
- @param[in] Base Pointer to the first element of an array to search.
- @param[in] Nmemb Number of objects in the search array.
- @param[in] Size The size of each object in the search array.
- @param[in] Compar Pointer to the function used to compare two objects.
-
- @return The bsearch function returns a pointer to a matching element of the
- array, or a null pointer if no match is found. If two elements
- compare as equal, which element is matched is unspecified.
-**/
-void *bsearch( const void *Key, const void *Base,
- size_t Nmemb, size_t Size,
- int (*Compar)(const void *, const void *)
- );
-
-/** The qsort function sorts an array of Nmemb objects, the initial element of
- which is pointed to by Base. The size of each object is specified by Size.
-
- The contents of the array are sorted into ascending order according to a
- comparison function pointed to by Compar, which is called with two
- arguments that point to the objects being compared. The function shall
- return an integer less than, equal to, or greater than zero if the first
- argument is considered to be respectively less than, equal to, or greater
- than the second.
-
- If two elements compare as equal, their order in the resulting sorted array
- is unspecified.
-
- @param[in,out] Base Pointer to the first element of an array to sort.
- @param[in] Nmemb Number of objects in the array.
- @param[in] Size The size of each object in the array.
- @param[in] Compar Pointer to the function used to compare two objects.
-**/
-void qsort( void *base, size_t nmemb, size_t size,
- int (*compar)(const void *, const void *));
-
-/* ################ Multibyte/wide character conversion functions ####### */
-
-/** Determine the number of bytes comprising a multibyte character.
-
- If S is not a null pointer, the mblen function determines the number of bytes
- contained in the multibyte character pointed to by S. Except that the
- conversion state of the mbtowc function is not affected, it is equivalent to
- mbtowc((wchar_t *)0, S, N);
-
- @param[in] S NULL to query whether multibyte characters have
- state-dependent encodings. Otherwise, points to a
- multibyte character.
- @param[in] N The maximum number of bytes in a multibyte character.
-
- @return If S is a null pointer, the mblen function returns a nonzero or
- zero value, if multibyte character encodings, respectively, do
- or do not have state-dependent encodings. If S is not a null
- pointer, the mblen function either returns 0 (if S points to the
- null character), or returns the number of bytes that are contained
- in the multibyte character (if the next N or fewer bytes form a
- valid multibyte character), or returns -1 (if they do not form a
- valid multibyte character).
-**/
-int mblen(const char *S, size_t N);
-
-/** Convert a multibyte character into a wide character.
-
- If S is not a null pointer, the mbtowc function inspects at most N bytes
- beginning with the byte pointed to by S to determine the number of bytes
- needed to complete the next multibyte character (including any shift
- sequences). If the function determines that the next multibyte character
- is complete and valid, it determines the value of the corresponding wide
- character and then, if Pwc is not a null pointer, stores that value in
- the object pointed to by Pwc. If the corresponding wide character is the
- null wide character, the function is left in the initial conversion state.
-
- @param[out] Pwc Pointer to a wide-character object to receive the converted character.
- @param[in] S Pointer to a multibyte character to convert.
- @param[in] N Maximum number of bytes in a multibyte character.
-
- @return If S is a null pointer, the mbtowc function returns a nonzero or
- zero value, if multibyte character encodings, respectively, do
- or do not have state-dependent encodings. If S is not a null
- pointer, the mbtowc function either returns 0 (if S points to
- the null character), or returns the number of bytes that are
- contained in the converted multibyte character (if the next N or
- fewer bytes form a valid multibyte character), or returns -1
- (if they do not form a valid multibyte character).
-
- In no case will the value returned be greater than N or the value
- of the MB_CUR_MAX macro.
-**/
-int mbtowc(wchar_t * __restrict Pwc, const char * __restrict S, size_t N);
-
-/** Convert a wide character into a multibyte character.
-
- The wctomb function determines the number of bytes needed to represent the
- multibyte character corresponding to the wide character given by WC
- (including any shift sequences), and stores the multibyte character
- representation in the array whose first element is pointed to by S (if S is
- not a null pointer). At most MB_CUR_MAX characters are stored. If WC is a
- null wide character, a null byte is stored, preceded by any shift sequence
- needed to restore the initial shift state, and the function is left in the
- initial conversion state.
-
- @param[out] S Pointer to the object to receive the converted multibyte character.
- @param[in] WC Wide character to be converted.
-
- @return If S is a null pointer, the wctomb function returns a nonzero or
- zero value, if multibyte character encodings, respectively, do or
- do not have state-dependent encodings. If S is not a null pointer,
- the wctomb function returns -1 if the value of WC does not
- correspond to a valid multibyte character, or returns the number
- of bytes that are contained in the multibyte character
- corresponding to the value of WC.
-
- In no case will the value returned be greater than the value of
- the MB_CUR_MAX macro.
-**/
-int wctomb(char *S, wchar_t WC);
-
-/* ################ Multibyte/wide string conversion functions ########## */
-
-/** Convert a multibyte character string into a wide-character string.
-
- The mbstowcs function converts a sequence of multibyte characters that
- begins in the initial shift state from the array pointed to by Src into
- a sequence of corresponding wide characters and stores not more than limit
- wide characters into the array pointed to by Dest. No multibyte
- characters that follow a null character (which is converted into a null
- wide character) will be examined or converted. Each multibyte character
- is converted as if by a call to the mbtowc function, except that the
- conversion state of the mbtowc function is not affected.
-
- No more than Limit elements will be modified in the array pointed to by Dest.
- If copying takes place between objects that overlap,
- the behavior is undefined.
-
- @param[out] Dest Pointer to the array to receive the converted string.
- @param[in] Src Pointer to the string to be converted.
- @param[in] Limit Maximum number of elements to be written to Dest.
-
- @return If an invalid multibyte character is encountered, the mbstowcs
- function returns (size_t)(-1). Otherwise, the mbstowcs function
- returns the number of array elements modified, not including a
- terminating null wide character, if any.
-**/
-size_t mbstowcs(wchar_t * __restrict Dest, const char * __restrict Src, size_t Limit);
-
-/** Convert a wide-character string into a multibyte character string.
-
- The wcstombs function converts a sequence of wide characters from the
- array pointed to by Src into a sequence of corresponding multibyte
- characters that begins in the initial shift state, and stores these
- multibyte characters into the array pointed to by Dest, stopping if a
- multibyte character would exceed the limit of Limit total bytes or if a
- null character is stored. Each wide character is converted as if by
- a call to the wctomb function, except that the conversion state of
- the wctomb function is not affected.
-
- No more than Limit bytes will be modified in the array pointed to by Dest.
- If copying takes place between objects that overlap,
- the behavior is undefined.
-
- @param[out] Dest Pointer to the array to receive the converted string.
- @param[in] Src Pointer to the string to be converted.
- @param[in] Limit Maximum number of bytes to be written to Dest.
-
- @return If a wide character is encountered that does not correspond to a
- valid multibyte character, the wcstombs function returns
- (size_t)(-1). Otherwise, the wcstombs function returns the number
- of bytes modified, not including a terminating null character,
- if any.
-**/
-size_t wcstombs(char * __restrict Dest, const wchar_t * __restrict Src, size_t Limit);
-
-/* ############## Miscelaneous functions for *nix compatibility ########## */
-
-/** The realpath() function shall derive, from the pathname pointed to by
- file_name, an absolute pathname that names the same file, whose resolution
- does not involve '.', '..', or symbolic links. The generated pathname shall
- be stored as a null-terminated string, up to a maximum of {PATH_MAX} bytes,
- in the buffer pointed to by resolved_name.
-
- If resolved_name is a null pointer, the behavior of realpath() is
- implementation-defined.
-
- @param[in] file_name The filename to convert.
- @param[in,out] resolved_name The resultant name.
-
- @retval NULL An error occured.
- @retval resolved_name.
-**/
-char * realpath(char *file_name, char *resolved_name);
-
-/** The getprogname() function returns the name of the program. If the name
- has not been set yet, it will return NULL.
-
- @return The getprogname function returns NULL if the program's name has not
- been set, otherwise it returns the name of the program.
-**/
-const char * getprogname(void);
-
-/** The setprogname() function sets the name of the program.
-
- @param[in] progname The name of the program. This memory must be retained
- by the caller until no calls to "getprogname" will be
- called.
-**/
-void setprogname(const char *progname);
-
-/* ############### Functions specific to this implementation ############# */
-
-/* Determine the number of bytes needed to represent a Wide character
- as a MBCS character.
-
- A single wide character may convert into a one, two, three, or four byte
- narrow (MBCS or UTF-8) character. The number of MBCS bytes can be determined
- as follows.
-
- If WCS char < 0x00000080 One Byte
- Else if WCS char < 0x0000D800 Two Bytes
- Else Three Bytes
-
- Since UEFI only supports the Unicode Base Multilingual Plane (BMP),
- Four-byte characters are not supported.
-
- @param[in] InCh Wide character to test.
-
- @retval -1 Improperly formed character
- @retval 0 InCh is 0x0000
- @retval >0 Number of bytes needed for the MBCS character
-*/
-int
-EFIAPI
-OneWcToMcLen(const wchar_t InCh);
-
-/* Determine the number of bytes needed to represent a Wide character string
- as a MBCS string of given maximum length. Will optionally return the number
- of wide characters that would be consumed.
-
- @param[in] Src Pointer to a wide character string.
- @param[in] Limit Maximum number of bytes the converted string may occupy.
- @param[out] NumChar Pointer to where to store the number of wide characters, or NULL.
-
- @return The number of bytes required to convert Src to MBCS,
- not including the terminating NUL. If NumChar is not NULL, the number
- of characters represented by the return value will be written to
- where it points.
-**/
-size_t
-EFIAPI
-EstimateWtoM(const wchar_t * Src, size_t Limit, size_t *NumChar);
-
-/** Determine the number of characters in a MBCS string.
-
- @param[in] Src The string to examine
-
- @return The number of characters represented by the MBCS string.
-**/
-size_t
-EFIAPI
-CountMbcsChars(const char *Src);
-
-__END_DECLS
-
-#endif /* _STDLIB_H */
diff --git a/StdLib/Include/string.h b/StdLib/Include/string.h
deleted file mode 100644
index 0c809441e8..0000000000
--- a/StdLib/Include/string.h
+++ /dev/null
@@ -1,493 +0,0 @@
-/** @file
- The header <string.h> declares one type and several functions, and defines
- one macro useful for manipulating arrays of character type and other objects
- treated as arrays of character type. Various methods are used for
- determining the lengths of the arrays, but in all cases a char * or void *
- argument points to the initial (lowest addressed) character of the array. If
- an array is accessed beyond the end of an object, the behavior is undefined.
-
- Where an argument declared as size_t n specifies the length of the array for
- a function, n can have the value zero on a call to that function. Unless
- explicitly stated otherwise in the description of those functions, pointer
- arguments on such a call must still have valid values.
-
- For all functions declared in this header, each character shall be
- interpreted as if it had the type unsigned char (and therefore every possible
- object representation is valid and has a different value).
-
- The following macros are defined in this file:<BR>
- @verbatim
- NULL
- bcopy(a,b,c) ( memcpy((void *)b, (const void *)a, (size_t)c))
- bcmp(a,b,c) ( memcmp((void *)a, (void *)b, (size_t)c))
- @endverbatim
-
- The following types are defined in this file:<BR>
- @verbatim
- size_t Unsigned integer type of the result of the sizeof operator.
- @endverbatim
-
- The following functions are declared in this file:<BR>
- @verbatim
- ################ Copying Functions
- void *memcpy (void * __restrict s1, const void * __restrict s2, size_t n);
- void *memmove (void *s1, const void *s2, size_t n);
- char *strcpy (char * __restrict s1, const char * __restrict s2);
- char *strncpy (char * __restrict s1, const char * __restrict s2, size_t n);
- int strncpyX (char * __restrict s1, const char * __restrict s2, size_t n);
-
- ################ Concatenation Functions
- char *strcat (char * __restrict s1, const char * __restrict s2);
- char *strncat (char * __restrict s1, const char * __restrict s2, size_t n);
- int strncatX (char * __restrict s1, const char * __restrict s2, size_t n);
-
- ################ Comparison Functions
- int memcmp (const void *s1, const void *s2, size_t n);
- int strcmp (const char *s1, const char *s2);
- int strcoll (const char *s1, const char *s2);
- int strncmp (const char *s1, const char *s2, size_t n);
- size_t strxfrm (char * __restrict s1, const char * __restrict s2, size_t n);
-
- ################ Search Functions
- void *memchr (const void *s, int c, size_t n);
- char *strchr (const char *s, int c);
- size_t strcspn (const char *s1, const char *s2);
- char *strpbrk (const char *s1, const char *s2);
- char *strrchr (const char *s, int c);
- size_t strspn (const char *s1 , const char *s2);
- char *strstr (const char *s1 , const char *s2);
- char *strtok (char * __restrict s1, const char * __restrict s2);
-
- ################ Miscellaneous Functions
- void *memset (void *s, int c, size_t n);
- char *strerror (int num);
- size_t strlen (const char *);
-
- ################ BSD Compatibility Functions
- char *strdup (const char *);
- int strerror_r (int, char *, size_t);
- int strcasecmp (const char *s1, const char *s2);
- void *memccpy (void *, const void *, int, size_t);
- int strncasecmp (const char *s1, const char *s2, size_t n);
- size_t strlcpy (char *destination, const char *source, size_t size);
- size_t strlcat (char *destination, const char *source, size_t size);
- char *strsep (register char **stringp, register const char *delim);
- @endverbatim
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _STRING_H
-#define _STRING_H
-#include <sys/EfiCdefs.h>
-
-#ifdef _EFI_SIZE_T_
- typedef _EFI_SIZE_T_ size_t;
- #undef _EFI_SIZE_T_
- #undef _BSD_SIZE_T_
-#endif
-
-__BEGIN_DECLS
-
-/* ################ Copying Functions ################################# */
-
-/** The memcpy function copies N characters from the object pointed to by Src
- into the object pointed to by Dest. If copying takes place between objects
- that overlap, the behavior is undefined.
-
- @param[out] Dest Pointer to the destination of the copy operation.
- @param[in] Src Pointer to the Source data to be copied.
- @param[in] N Number of characters (bytes) to be copied.
-
- @return The memcpy function returns the value of Dest.
-**/
-void *memcpy(void * __restrict Dest, const void * __restrict Src, size_t N);
-
-/** The memmove function copies N characters from the object pointed to by Src
- into the object pointed to by Dest. Copying takes place as if the N
- characters from the object pointed to by Src are first copied into a
- temporary array of N characters that does not overlap the objects pointed
- to by Dest and Src, and then the N characters from the temporary array are
- copied into the object pointed to by Dest.
-
- @param[out] Dest Pointer to the destination of the copy operation.
- @param[in] Src Pointer to the Source data to be copied.
- @param[in] N Number of characters (bytes) to be copied.
-
- @return The memmove function returns the value of Dest.
-**/
-void *memmove(void *Dest, const void *Src, size_t N);
-
-/** The strcpy function copies the string pointed to by Src (including the
- terminating null character) into the array pointed to by Dest. If copying
- takes place between objects that overlap, the behavior is undefined.
-
- @param[out] Dest Pointer to the destination of the copy operation.
- @param[in] Src Pointer to the Source data to be copied.
-
- @return The strcpy function returns the value of Dest.
-**/
-char *strcpy(char * __restrict Dest, const char * __restrict Src);
-
-/** The strncpy function copies not more than N characters (characters that
- follow a null character are not copied) from the array pointed to by Src to
- the array pointed to by Dest. If copying takes place between objects that
- overlap, the behavior is undefined.
-
- If the array pointed to by Src is a string that is shorter than N
- characters, null characters are appended to the copy in the array pointed
- to by Dest, until N characters in all have been written.
-
- @param[out] Dest Pointer to the destination of the copy operation.
- @param[in] Src Pointer to the Source data to be copied.
- @param[in] N Number of characters (bytes) to be copied.
-
- @return The strncpy function returns the value of Dest.
-**/
-char *strncpy(char * __restrict Dest, const char * __restrict Src, size_t N);
-
-/** The strncpyX function copies not more than N-1 characters (characters that
- follow a null character are not copied) from the array pointed to by Src to
- the array pointed to by Dest. Array Dest is guaranteed to be NULL terminated.
- If copying takes place between objects that overlap,
- the behavior is undefined.
-
- strncpyX exists because normal strncpy does not indicate if the copy was
- terminated because of exhausting the buffer or reaching the end of Src.
-
- @param[out] Dest Pointer to the destination of the copy operation.
- @param[in] Src Pointer to the Source data to be copied.
- @param[in] N Number of characters (bytes) to be copied.
-
- @return The strncpyX function returns 0 if the copy operation was
- terminated because it reached the end of Dest. Otherwise,
- a non-zero value is returned indicating how many characters
- remain in Dest.
-**/
-int strncpyX(char * __restrict Dest, const char * __restrict Src, size_t N);
-
-/* ################ Concatenation Functions ########################### */
-
-/** The strcat function appends a copy of the string pointed to by Src
- (including the terminating null character) to the end of the string pointed
- to by Dest. The initial character of Src overwrites the null character at the
- end of Dest. If copying takes place between objects that overlap, the
- behavior is undefined.
-
- @param[out] Dest Pointer to the destination of the concatenation operation.
- @param[in] Src Pointer to the Source data to be concatenated.
-
- @return The strcat function returns the value of Dest.
-**/
-char *strcat(char * __restrict Dest, const char * __restrict Src);
-
-/** The strncat function appends not more than N characters (a null character
- and characters that follow it are not appended) from the array pointed to
- by Src to the end of the string pointed to by Dest. The initial character of
- Src overwrites the null character at the end of Dest. A terminating null
- character is always appended to the result. If copying takes place
- between objects that overlap, the behavior is undefined.
-
- @param[out] Dest Pointer to the destination of the concatenation operation.
- @param[in] Src Pointer to the Source data to be concatenated.
- @param[in] N Max Number of characters (bytes) to be concatenated.
-
- @return The strncat function returns the value of Dest.
-**/
-char *strncat(char * __restrict Dest, const char * __restrict Src, size_t N);
-
-/** The strncatX function appends not more than N characters (a null character
- and characters that follow it are not appended) from the array pointed to
- by Src to the end of the string pointed to by Dest. The initial character of
- Src overwrites the null character at the end of Dest. The result is always
- terminated with a null character. If copying takes place between objects
- that overlap, the behavior is undefined.
-
- strncatX exists because normal strncat does not indicate if the operation
- was terminated because of exhausting N or reaching the end of Src.
-
- @param[out] Dest Pointer to the destination of the concatenation operation.
- @param[in] Src Pointer to the Source data to be concatenated.
- @param[in] N Max Number of characters (bytes) to be concatenated.
-
- @return The strncatX function returns 0 if the operation was terminated
- because it reached the end of Dest. Otherwise, a non-zero value is
- returned indicating how many characters remain in Dest.
-**/
-int strncatX(char * __restrict s1, const char * __restrict s2, size_t n);
-
-/* ################ Comparison Functions ############################## */
-
-/** The memcmp function compares the first N characters of the object pointed
- to by S1 to the first N characters of the object pointed to by S2.
-
- @param[out] S1 Pointer to the first object to be compared.
- @param[in] S2 Pointer to the object to be compared to S1.
- @param[in] N Max Number of characters (bytes) to be compared.
-
- @return The memcmp function returns an integer greater than, equal to, or
- less than zero, accordingly as the object pointed to by S1 is
- greater than, equal to, or less than the object pointed to by S2.
-**/
-int memcmp(const void *S1, const void *S2, size_t N);
-
-/** The strcmp function compares the string pointed to by S1 to the string
- pointed to by S2.
-
- @param[out] S1 Pointer to the first string to be compared.
- @param[in] S2 Pointer to the string to be compared to S1.
-
- @return The strcmp function returns an integer greater than, equal to, or
- less than zero, accordingly as the string pointed to by S1 is
- greater than, equal to, or less than the string pointed to by S2.
-**/
-int strcmp(const char *S1, const char *S2);
-
-/** The strcoll function compares the string pointed to by S1 to the string
- pointed to by S2, both interpreted as appropriate to the LC_COLLATE
- category of the current locale.
-
- @param[out] S1 Pointer to the first string to be compared.
- @param[in] S2 Pointer to the string to be compared to S1.
-
- @return The strcoll function returns an integer greater than, equal to,
- or less than zero, accordingly as the string pointed to by S1 is
- greater than, equal to, or less than the string pointed to by S2
- when both are interpreted as appropriate to the current locale.
-**/
-int strcoll(const char *S1, const char *S2);
-
-/** The strncmp function compares not more than N characters (characters that
- follow a null character are not compared) from the array pointed to by S1
- to the array pointed to by S2.
-
- @param[out] S1 Pointer to the first object to be compared.
- @param[in] S2 Pointer to the object to be compared to S1.
- @param[in] N Max Number of characters (bytes) to be compared.
-
- @return The strncmp function returns an integer greater than, equal to,
- or less than zero, accordingly as the possibly null-terminated
- array pointed to by S1 is greater than, equal to, or less than
- the possibly null-terminated array pointed to by S2.
-**/
-int strncmp(const char *S1, const char *S2, size_t N);
-
-/** The strxfrm function transforms the string pointed to by Src and places the
- resulting string into the array pointed to by Dest. The transformation is
- such that if the strcmp function is applied to two transformed strings, it
- returns a value greater than, equal to, or less than zero, corresponding to
- the result of the strcoll function applied to the same two original
- strings. No more than N characters are placed into the resulting array
- pointed to by Dest, including the terminating null character. If N is zero,
- Dest is permitted to be a null pointer. If copying takes place between
- objects that overlap, the behavior is undefined.
-
- @param[out] Dest Pointer to the object to receive the transformed string.
- @param[in] Src Pointer to the string to be transformed.
- @param[in] N Max Number of characters (bytes) to be transformed.
-
- @return The strxfrm function returns the length of the transformed string
- (not including the terminating null character). If the value
- returned is N or more, the contents of the array pointed to by Dest
- are indeterminate.
-**/
-size_t strxfrm(char * __restrict Dest, const char * __restrict Src, size_t N);
-
-/* ################ Search Functions ################################## */
-
-/** The memchr function locates the first occurrence of C (converted to an
- unsigned char) in the initial N characters (each interpreted as
- unsigned char) of the object pointed to by S.
-
- @param[in] S Pointer to the object to be searched.
- @param[in] C The character value to search for.
- @param[in] N Max Number of characters (bytes) to be searched.
-
- @return The memchr function returns a pointer to the located character,
- or a null pointer if the character does not occur in the object.
-**/
-void *memchr(const void *S, int C, size_t N);
-
-/** The strchr function locates the first occurrence of C (converted to a char)
- in the string pointed to by S. The terminating null character is considered
- to be part of the string.
-
- @param[in] S Pointer to the object to be searched.
- @param[in] C The character value to search for.
-
- @return The strchr function returns a pointer to the located character,
- or a null pointer if the character does not occur in the string.
-**/
-char *strchr(const char *S, int C);
-
-/** The strcspn function computes the length of the maximum initial segment of
- the string pointed to by S1 which consists entirely of characters NOT from
- the string pointed to by S2.
-
- @param[in] S1 Pointer to the object to be searched.
- @param[in] S2 Pointer to the list of characters to search for.
-
- @return The strcspn function returns the length of the segment.
-**/
-size_t strcspn(const char *S1, const char *S2);
-
-/** The strpbrk function locates the first occurrence in the string pointed to
- by S1 of any character from the string pointed to by S2.
-
- @param[in] S1 Pointer to the object to be searched.
- @param[in] S2 Pointer to the list of characters to search for.
-
- @return The strpbrk function returns a pointer to the character, or a
- null pointer if no character from S2 occurs in S1.
-**/
-char *strpbrk(const char *S1, const char *S2);
-
-/** The strrchr function locates the last occurrence of C (converted to a char)
- in the string pointed to by S. The terminating null character is considered
- to be part of the string.
-
- @param[in] S Pointer to the object to be searched.
- @param[in] C The character value to search for.
-
- @return The strrchr function returns a pointer to the character, or a
- null pointer if C does not occur in the string.
-**/
-char *strrchr(const char *S, int C);
-
-/** The strspn function computes the length of the maximum initial segment of
- the string pointed to by S1 which consists entirely of characters from the
- string pointed to by S2.
-
- @param[in] S1 Pointer to the object to be searched.
- @param[in] S2 Pointer to the list of characters to search for.
-
- @return The strspn function returns the length of the segment.
-**/
-size_t strspn(const char *S1 , const char *S2);
-
-/** The strstr function locates the first occurrence in the string pointed to
- by S1 of the sequence of characters (excluding the terminating null
- character) in the string pointed to by S2.
-
- @param[in] S1 Pointer to the object to be searched.
- @param[in] S2 Pointer to the sequence of characters to search for.
-
- @return The strstr function returns a pointer to the located string, or a
- null pointer if the string is not found. If S2 points to a string
- with zero length, the function returns S1.
-**/
-char *strstr(const char *S1 , const char *S2);
-
-/** Break a string into a sequence of tokens.
-
- A sequence of calls to the strtok function breaks the string pointed to by
- S1 into a sequence of tokens, each of which is delimited by a character
- from the string pointed to by S2. The first call in the sequence has a
- non-null first argument; subsequent calls in the sequence have a null first
- argument. The separator string pointed to by S2 may be different from call
- to call.
-
- The first call in the sequence searches the string pointed to by S1 for the
- first character that is not contained in the current separator string
- pointed to by S2. If no such character is found, then there are no tokens
- in the string pointed to by S1 and the strtok function returns a null
- pointer. If such a character is found, it is the start of the first token.
-
- The strtok function then searches from there for a character that is
- contained in the current separator string. If no such character is found,
- the current token extends to the end of the string pointed to by S1, and
- subsequent searches for a token will return a null pointer. If such a
- character is found, it is overwritten by a null character, which terminates
- the current token. The strtok function saves a pointer to the following
- character, from which the next search for a token will start.
-
- Each subsequent call, with a null pointer as the value of the first
- argument, starts searching from the saved pointer and behaves as
- described above.
-
- @param[in] S1 Pointer to the string to be tokenized.
- @param[in] S2 Pointer to a list of separator characters.
-
- @return The strtok function returns a pointer to the first character of a
- token, or a null pointer if there is no token.
-**/
-char *strtok(char * __restrict S1, const char * __restrict S2);
-
-/* ################ Miscellaneous Functions ########################### */
-
-/** The memset function copies the value of C (converted to an unsigned char)
- into each of the first N characters of the object pointed to by S.
-
- @param[out] S Pointer to the first element of the object to be set.
- @param[in] C Value to store in each element of S.
- @param[in] N Number of elements in S to be set.
-
- @return The memset function returns the value of S.
-**/
-void *memset(void *S, int C, size_t N);
-
-/** The strerror function maps the number in Num to a message string.
- Typically, the values for Num come from errno, but strerror shall map
- any value of type int to a message.
-
- @param[in] Num A value to be converted to a message.
-
- @return The strerror function returns a pointer to the string, the
- contents of which are locale specific. The array pointed to
- must not be modified by the program, but may be overwritten by
- a subsequent call to the strerror function.
-**/
-char *strerror(int Num);
-
-/** The strlen function computes the length of the string pointed to by S.
-
- @param[in] S Pointer to the string to determine the length of.
-
- @return The strlen function returns the number of characters that
- precede the terminating null character.
-**/
-size_t strlen(const char *S);
-
-
-/* ################ BSD Compatibility Functions ####################### */
-
-char *strdup (const char *);
-int strerror_r(int, char *, size_t);
-int strcasecmp(const char *s1, const char *s2);
-void *memccpy (void *, const void *, int, size_t);
-int strncasecmp(const char *s1, const char *s2, size_t n);
-size_t strlcpy(char *destination, const char *source, size_t size);
-size_t strlcat(char *destination, const char *source, size_t size);
-
-// bcopy is is a void function with the src/dest arguments reversed, being used in socket lib
-#define bcopy(a,b,c) ( memcpy((void *)b, (const void *)a, (size_t)c))
-
-// bcmp is same as memcmp, returns 0 for successful compare, non-zero otherwise
-#define bcmp(a,b,c) ( memcmp((void *)a, (void *)b, (size_t)c))
-
-/*
- * Get next token from string *stringp, where tokens are possibly-empty
- * strings separated by characters from delim.
- *
- * Writes NULs into the string at *stringp to end tokens.
- * delim need not remain constant from call to call.
- * On return, *stringp points past the last NUL written (if there might
- * be further tokens), or is NULL (if there are definitely no more tokens).
- *
- * If *stringp is NULL, strsep returns NULL.
- */
-char *
-strsep(
- register char **stringp,
- register const char *delim
- );
-
-__END_DECLS
-
-#endif /* _STRING_H */
diff --git a/StdLib/Include/stringlist.h b/StdLib/Include/stringlist.h
deleted file mode 100644
index d0d9239355..0000000000
--- a/StdLib/Include/stringlist.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/** @file contains all the stringlist types and functions.
-
-Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
-This program and the accompanying materials are licensed and made available under
-the terms and conditions of the BSD License that accompanies this distribution.
-The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php.
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-
-
- * Copyright (c) 1994 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Christos Zoulas.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- $NetBSD: stringlist.h,v 1.7 2008/04/28 20:22:54 martin Exp $
-**/
-
-#ifndef _STRINGLIST_H
-#define _STRINGLIST_H
-#include <sys/cdefs.h>
-#include <sys/types.h>
-
-/*
- * Simple string list
- */
-typedef struct _stringlist {
- char **sl_str;
- size_t sl_max;
- size_t sl_cur;
-} StringList;
-
-__BEGIN_DECLS
-StringList *sl_init(void);
-int sl_add(StringList *, char *);
-void sl_free(StringList *, int);
-char *sl_find(StringList *, const char *);
-int sl_delete(StringList *, const char *, int);
-__END_DECLS
-
-#endif /* _STRINGLIST_H */
diff --git a/StdLib/Include/strings.h b/StdLib/Include/strings.h
deleted file mode 100644
index 139bd4a1dc..0000000000
--- a/StdLib/Include/strings.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/** @file
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1998 The NetBSD Foundation, Inc.
- All rights reserved.
-
- This code is derived from software contributed to The NetBSD Foundation
- by Klaus Klein.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: strings.h,v 1.13 2008/04/28 20:22:54 martin Exp
- */
-#ifndef _STRINGS_H_
-#define _STRINGS_H_
-
-#include <machine/ansi.h>
-#include <sys/featuretest.h>
-
-__BEGIN_DECLS
-void bzero(void *, size_t);
-int ffs(int);
-__END_DECLS
-
-#define index(x,y) strchr((x), (y))
-#define rindex(x,y) strrchr((x), (y))
-
-#include <string.h>
-
-#endif /* !defined(_STRINGS_H_) */
diff --git a/StdLib/Include/sys/EfiCdefs.h b/StdLib/Include/sys/EfiCdefs.h
deleted file mode 100644
index 2fa7ba6ae5..0000000000
--- a/StdLib/Include/sys/EfiCdefs.h
+++ /dev/null
@@ -1,376 +0,0 @@
-/** @file
- Common declarations and definitions for Standard C Library headers.
-
- This header consolidates definitions and declarations for compiler specific
- features in one place in order to assist in making the remainder of the
- library as compiler independent as possible.
-
- Certain macro and type definitions are required to be provided by several
- different headers. In order to avoid having multiple definitions, and the
- attendant risk of having the definitions get out of sync, they are defined in
- this header.
-
- Note that MdePkg/Include/Base.h is automatically included and will bring
- processor architecture specific definitions along with it.
-
- Throughout the library, the following macros are used instead of keywords so
- that the library can be easily tuned for different compilers.
- __inline Defined to the appropriate keyword or not defined.
- __func__ Defined to __FUNC__, __FUNCTION__, or NULL as appropriate.
- __restrict Defined to nothing for VC++ or to restrict for GCC and C99 compliant compilers.
-
- This file and its contents are inspired by the <sys/cdefs.h> files in Berkeley
- Unix. They have been re-implemented to be specific to the EFI environment.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Portions Copyright (c) 1991, 1993
- The Regents of the University of California. All rights reserved.
-
- Portions of this code are derived from software contributed to Berkeley by
- Berkeley Software Design, Inc.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-**/
-#ifndef _EFI_CDEFS_H
-#define _EFI_CDEFS_H
-
-/*
-* Macro to test if we're using a GNU C compiler of a specific vintage
-* or later, for e.g. features that appeared in a particular version
-* of GNU C. Usage:
-*
-* #if __GNUC_PREREQ__(major, minor)
-* ...cool feature...
-* #else
-* ...delete feature...
-* #endif
-*/
-#ifdef __GNUC__
-#define __GNUC_PREREQ__(x, y) \
-((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) || \
- (__GNUC__ > (x)))
-
-#define DONT_USE_STRONG_WEAK_ALIAS 1
-
-#else
-#define __GNUC_PREREQ__(x, y) 0
-#endif
-
-#include <sys/featuretest.h>
-//#include <machine/_EfiCdefs.h>
-#ifdef __PE32__
-#include <sys/_EfiCdefs_PE32.h>
-#else
-#include <sys/cdefs_aout.h>
-#endif
-
-/* NULL is defined by the automatic inclusion of Base.h by the build tools. */
-
-#ifdef __GNUC__
- #define _EFI_SIZE_T_ __SIZE_TYPE__ /* sizeof() */
- #define _EFI_WCHAR_T __WCHAR_TYPE__
- #define _EFI_WINT_T __WINT_TYPE__
- //#define _EFI_WINT_MIN (0)
- //#define _EFI_WINT_MAX (0xFFFF)
- #define _EFI_PTRDIFF_T_ __PTRDIFF_TYPE__ /* ptr1 - ptr2 --- Must be same size as size_t */
-
-#else
-#define _EFI_SIZE_T_ UINTN /* sizeof() */
-#define _EFI_WCHAR_T UINT16
-#define _EFI_WINT_T INT32
- //#define _EFI_WINT_MIN (-2147483647) /* wint_t */
- //#define _EFI_WINT_MAX ( 2147483647) /* wint_t */
- #define _EFI_PTRDIFF_T_ INTN /* ptr1 - ptr2 --- Must be same size as size_t */
-#endif /* __GNUC__ */
-
-#define _EFI_CLOCK_T UINT64
-#define _EFI_TIME_T INT32
-
-#if defined(__cplusplus)
-#define __BEGIN_DECLS extern "C" {
-#define __END_DECLS }
-#define __static_cast(x,y) static_cast<x>(y)
-#else
-#define __BEGIN_DECLS
-#define __END_DECLS
-#define __static_cast(x,y) (x)y
-#endif
-
- /*
- * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
- * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
- * The __CONCAT macro is a bit tricky -- make sure you don't put spaces
- * in between its arguments. __CONCAT can also concatenate double-quoted
- * strings produced by the __STRING macro, but this only works with ANSI C.
- */
-
-#define ___STRING(x) __STRING(x)
-#define ___CONCAT(x,y) __CONCAT(x,y)
-#define __CONCAT(x,y) x ## y
-#define __STRING(x) #x
-
-#define __const CONST
-#define __signed signed
-#define __volatile volatile
-
-#if __STDC__ || defined(__cplusplus)
- #if defined(__cplusplus)
- #define __inline inline /* convert to C++ keyword */
- #else
- #if defined(_MSC_VER) || (!defined(__GNUC__) && !defined(__lint__))
- #define __inline /* delete C99 keyword */
- #endif /* !__GNUC__ && !__lint__ */
- #endif /* !__cplusplus */
-#endif /* !(__STDC__ || __cplusplus) */
-
-/* Used in NetBSD for internal auditing of the source tree. */
-#define __aconst
-
- /*
- * The following macro is used to remove const cast-away warnings
- * from gcc -Wcast-qual; it should be used with caution because it
- * can hide valid errors; in particular most valid uses are in
- * situations where the API requires it, not to cast away string
- * constants. We don't use *intptr_t on purpose here and we are
- * explicit about unsigned long so that we don't have additional
- * dependencies.
- */
-#define __UNCONST(a) ((void *)(a))
-//#define __UNCONST(a) ((void *)(PHYSICAL_ADDRESS)(const void *)(a))
-
- /*
- * The following macro is used to remove the volatile cast-away warnings
- * from gcc -Wcast-qual; as above it should be used with caution
- * because it can hide valid errors or warnings. Valid uses include
- * making it possible to pass a volatile pointer to memset().
- * For the same reasons as above, we use unsigned long and not intptr_t.
- */
-#define __UNVOLATILE(a) ((void *)(PHYSICAL_ADDRESS)(volatile void *)(a))
-
- /*
- * GCC2 provides __extension__ to suppress warnings for various GNU C
- * language extensions under "-ansi -pedantic".
- */
-#if !__GNUC_PREREQ__(2, 0)
-#define __extension__ /* delete __extension__ if non-gcc or gcc1 */
-#endif
-
- /*
- * GCC1 and some versions of GCC2 declare dead (non-returning) and
- * pure (no side effects) functions using "volatile" and "const";
- * unfortunately, these then cause warnings under "-ansi -pedantic".
- * GCC2 uses a new, peculiar __attribute__((attrs)) style. All of
- * these work for GNU C++ (modulo a slight glitch in the C++ grammar
- * in the distribution version of 2.5.5).
- */
-#if !__GNUC_PREREQ__(2, 5)
-#define __attribute__(x) /* delete __attribute__ if non-gcc or gcc1 */
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-#define __dead __volatile
-#define __pure __const
-#endif
-#endif
-
- /* Delete pseudo-keywords wherever they are not available or needed. */
-#ifndef __dead
-#define __dead
-#define __pure
-#endif
-
-#if __GNUC_PREREQ__(2, 7)
-#define __unused __attribute__((__unused__))
-#define __noreturn __attribute__((__noreturn__))
-#else
-#define __unused /* delete */
-#define __noreturn /* delete */
-#endif
-
-#if __GNUC_PREREQ__(3, 1)
-#define __used __attribute__((__used__))
-#else
-#define __used __unused
-#endif
-
-#if __GNUC_PREREQ__(2, 7)
-#define __packed __attribute__((__packed__))
-#define __aligned(x) __attribute__((__aligned__(x)))
-#define __section(x) __attribute__((__section__(x)))
-#elif defined(__lint__)
-#define __packed /* delete */
-#define __aligned(x) /* delete */
-#define __section(x) /* delete */
-#else
-#define __packed error: no __packed for this compiler
-#define __aligned(x) error: no __aligned for this compiler
-#define __section(x) error: no __section for this compiler
-#endif
-
-/*
-* C99 defines the restrict type qualifier keyword, which was made available
-* in GCC 2.92.
-*/
-#if __STDC_VERSION__ >= 199901L
- #define __restrict restrict
-#else
- #if defined(_MSC_VER) || !__GNUC_PREREQ__(2, 92)
- #define __restrict /* delete __restrict when not supported */
- #endif
-#endif
-
-/*
-* C99 defines __func__ predefined identifier, which was made available
-* in GCC 2.95.
-*/
-#if !(__STDC_VERSION__ >= 199901L)
- #if defined(_MSC_VER)
- #define __func__ __FUNCTION__ /* Use the MS-specific predefined macro */
- #elif __GNUC_PREREQ__(2, 6)
- #define __func__ __PRETTY_FUNCTION__
- #elif __GNUC_PREREQ__(2, 4)
- #define __func__ __FUNCTION__
- #else
- #define __func__ ""
- #endif
-#endif /* !(__STDC_VERSION__ >= 199901L) */
-
-#define __RENAME(x)
-
- /*
- * A barrier to stop the optimizer from moving code or assume live
- * register values. This is gcc specific, the version is more or less
- * arbitrary, might work with older compilers.
- */
-#if __GNUC_PREREQ__(2, 95)
-#define __insn_barrier() __asm __volatile("":::"memory")
-#else
-#define __insn_barrier() /* */
-#endif
-
- /*
- * GNU C version 2.96 adds explicit branch prediction so that
- * the CPU back-end can hint the processor and also so that
- * code blocks can be reordered such that the predicted path
- * sees a more linear flow, thus improving cache behavior, etc.
- *
- * The following two macros provide us with a way to use this
- * compiler feature. Use __predict_true() if you expect the expression
- * to evaluate to true, and __predict_false() if you expect the
- * expression to evaluate to false.
- *
- * A few notes about usage:
- *
- * * Generally, __predict_false() error condition checks (unless
- * you have some _strong_ reason to do otherwise, in which case
- * document it), and/or __predict_true() `no-error' condition
- * checks, assuming you want to optimize for the no-error case.
- *
- * * Other than that, if you don't know the likelihood of a test
- * succeeding from empirical or other `hard' evidence, don't
- * make predictions.
- *
- * * These are meant to be used in places that are run `a lot'.
- * It is wasteful to make predictions in code that is run
- * seldomly (e.g. at subsystem initialization time) as the
- * basic block reordering that this affects can often generate
- * larger code.
- */
-#if __GNUC_PREREQ__(2, 96)
-#define __predict_true(exp) __builtin_expect((exp) != 0, 1)
-#define __predict_false(exp) __builtin_expect((exp) != 0, 0)
-#else
-#define __predict_true(exp) (exp)
-#define __predict_false(exp) (exp)
-#endif
-
-/* find least significant bit that is set */
-#define __LOWEST_SET_BIT(__mask) ((((__mask) - 1) & (__mask)) ^ (__mask))
-
-#define __SHIFTOUT(__x, __mask) (((__x) & (__mask)) / __LOWEST_SET_BIT(__mask))
-#define __SHIFTIN(__x, __mask) ((__x) * __LOWEST_SET_BIT(__mask))
-#define __SHIFTOUT_MASK(__mask) __SHIFTOUT((__mask), (__mask))
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
-
- /* VC++, by default, defines wchar_t as an intrinsic type, equivalent to
- unsigned short. This conflicts which Standard C Library
- implementations which try to define wchar_t.
- Make sure that this behavior has been turned off by using
- /Zc:wchar_t- on the command line.
- */
- #ifdef _NATIVE_WCHAR_T_DEFINED
- #error You must specify /Zc:wchar_t- to the compiler to turn off intrinsic wchar_t.
- #endif
-
- /* Get rid of pre-defined macros that are misleading in this environment. */
- #undef _WIN32
- #undef _WIN64
-
- // Keep compiler quiet about casting from smaller to larger types
- #pragma warning ( disable : 4306 )
-
- #define __STDC__ 1
- #define __STDC_VERSION__ 199409L
- #define __STDC_HOSTED__ 1
-
-#endif /* defined(_MSC_VER) */
-extern int _fltused; // VC++ requires this if you use floating point. KEEP for all compilers.
-
-#define _Bool BOOLEAN
-#define _DIAGASSERT(e)
-
-// Types used to replace long so that it will have constant length regardless of compiler.
-typedef INT32 LONG32;
-typedef UINT32 ULONG32;
-typedef INT64 LONG64;
-typedef UINT64 ULONG64;
-
-typedef INTN EFI_LONG_T;
-typedef UINTN EFI_ULONG_T;
-
-/* These types reflect the compiler's size for long */
-#if defined(__GNUC__)
- #if __GNUC_PREREQ__(4,4)
- /* GCC 4.4 or later */
- typedef INTN LONGN;
- typedef UINTN ULONGN;
- #else
- /* minGW gcc variant */
- typedef INT32 LONGN;
- typedef UINT32 ULONGN;
- #endif /* __GNUC_PREREQ__(4,4) */
-#else /* NOT GCC */
- /* Microsoft or Intel compilers */
- typedef INT32 LONGN;
- typedef UINT32 ULONGN;
-#endif /* defined(__GNUC__) */
-
-#endif /* _EFI_CDEFS_H */
diff --git a/StdLib/Include/sys/EfiSysCall.h b/StdLib/Include/sys/EfiSysCall.h
deleted file mode 100644
index 6f4742875e..0000000000
--- a/StdLib/Include/sys/EfiSysCall.h
+++ /dev/null
@@ -1,350 +0,0 @@
-/** @file
- Function declarations for UEFI "system calls".
-
- The following macros are defined in this file:<BR>
-@verbatim
- STDIN_FILENO 0 standard input file descriptor
- STDOUT_FILENO 1 standard output file descriptor
- STDERR_FILENO 2 standard error file descriptor
- SEEK_SET 0 set file offset to offset
- SEEK_CUR 1 set file offset to current plus offset
- SEEK_END 2 set file offset to EOF plus offset
- VALID_OPEN 1
- VALID_CLOSED 0
- VALID_DONT_CARE -1
-@endverbatim
-
- The following types are defined in this file:<BR>
-@verbatim
- struct stat; Structure declared in <sys/stat.h>
-@endverbatim
-
- The following functions are declared in this file:<BR>
-@verbatim
- ############### System Calls used in stdio.
- int close (int fd);
- ssize_t read (int fd, void *buf, size_t n);
- ssize_t write (int fd, const void *buf, size_t n);
- int unlink (const char *name);
- int dup2 (int, int);
- int rmdir (const char *);
- int isatty (int);
-
- ############### System Calls which are also declared in sys/fcntl.h.
- int open (const char *name, int oflags, int mode);
- int creat (const char *, mode_t);
- int fcntl (int, int, ...);
-
- ############### System Calls which are also declared in stat.h.
- int mkdir (const char *, mode_t);
- int fstat (int, struct stat *);
- int lstat (const char *, struct stat *);
- int stat (const char *, void *);
- int chmod (const char *, mode_t);
-
- ############### System Calls which are also declared in sys/types.h.
- off_t lseek (int, off_t, int);
- int truncate (const char *, off_t);
- int ftruncate (int, off_t); // IEEE Std 1003.1b-93
-
- ############### EFI-specific Functions.
- int DeleteOnClose (int fd); Mark an open file to be deleted when closed.
- int FindFreeFD (int MinFd);
- BOOLEAN ValidateFD (int fd, int IsOpen);
-@endverbatim
-
- Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _EFI_SYS_CALL_H
-#define _EFI_SYS_CALL_H
-
-#include <sys/EfiCdefs.h>
-#include <sys/types.h>
-
-struct stat; /* Structure declared in <sys/stat.h> */
-
-#define STDIN_FILENO 0 /**< standard input file descriptor */
-#define STDOUT_FILENO 1 /**< standard output file descriptor */
-#define STDERR_FILENO 2 /**< standard error file descriptor */
-
-/* whence values for lseek(2)
- Always ensure that these are consistent with <stdio.h> and <unistd.h>!
-*/
-#ifndef SEEK_SET
- #define SEEK_SET 0 /**< set file offset to offset */
-#endif
-#ifndef SEEK_CUR
- #define SEEK_CUR 1 /**< set file offset to current plus offset */
-#endif
-#ifndef SEEK_END
- #define SEEK_END 2 /**< set file offset to EOF plus offset */
-#endif
-
-// Parameters for the ValidateFD function.
-#define VALID_OPEN 1
-#define VALID_CLOSED 0
-#define VALID_DONT_CARE -1
-
-__BEGIN_DECLS
-/* EFI versions of BSD system calls used in stdio */
-
- /** Close a file or device.
-
- @param[in] fd File Descriptor for the file or device to close.
-
- @retval 0 Successful completion.
- @retval -1 An error occurred, identified by errno.
- - EBADF fd is not a valid File Descriptor.
- - EINTR The function was interrupted by a signal.
- - EIO An I/O error occurred.
- **/
- int close (int fd);
-
- /** Read from a file or device.
-
- @param[in] fd File Descriptor for the file or device to read.
- @param[in] buf Buffer to read data into.
- @param[in] N Maximum number of bytes to read.
-
- @return On successful completion, read returns a non-negative integer
- indicating the number of bytes actually read. Otherwise, it
- returns -1 and sets errno as follows:
- - EAGAIN
- - EWOULDBLOCK
- - EBADF
- - EBADMSG
- - EINTR
- - EINVAL
- - EIO
- - EISDIR
- - EOVERFLOW
- - ECONNRESET
- - ENOTCONN
- - ETIMEDOUT
- - ENOBUFS
- - ENOMEM
- - ENXIO
- **/
- ssize_t read (int fd, void *buf, size_t n);
-
- /** Write to a file or device.
-
- @param[in] fd File Descriptor for the file or device to write.
- @param[in] buf Buffer to write data from.
- @param[in] N Maximum number of bytes to write.
-
- @return On successful completion, write returns a non-negative integer
- indicating the number of bytes actually written. Otherwise, it
- returns -1 and sets errno as follows:
- - EAGAIN
- - EWOULDBLOCK
- - EBADF
- - EFBIG
- - EINTR
- - EINVAL
- - EIO
- - ENOSPC
- - EPIPE
- - ERANGE
- - ECONNRESET
- - ENOBUFS
- - ENXIO
- - ENETDOWN
- - ENETUNREACH
- **/
- ssize_t write (int fd, const void *buf, size_t n);
-
- /** Unlink (delete) a file.
-
- @param[in] name The name of the file to be deleted.
-
- @retval 0 Successful completion.
- @retval -1 Unable to perform operation, errno contains further
- information. The file name is unchanged.
- **/
- int unlink (const char *name);
-
- /** Make file descriptor Fd2 a duplicate of file descriptor Fd1.
-
- @param[in] Fd1 File descriptor to be duplicated
- @param[in] Fd2 File descriptor to become a duplicate of Fd1.
-
- @retval 0 Successful completion.
- @retval -1 Unable to perform operation, errno contains further
- information.
- **/
- int dup2 (int Fd1, int Fd2);
-
- /** Remove a directory.
-
- @param[in] Path Path to the directory to be deleted.
-
- @retval 0 Successful completion.
- @retval -1 Unable to perform operation, errno contains further
- information. The named directory remains unchanged.
- **/
- int rmdir (const char *Path);
-
- /** Determine if fd refers to an interactive terminal device.
-
- @param[in] fd The file descriptor to be tested.
-
- @retval 0 The file descriptor, fd, is not for a terminal. errno is set
- indicating the cause for failure.
- - EBADF fd is not a valid open file descriptor.
- - ENOTTY fd does not refer to a terminal.
- @retval 1 The file descriptor, fd, is for a terminal.
- **/
- int isatty (int fd);
-
-/* These system calls are also declared in sys/fcntl.h */
-#ifndef __FCNTL_SYSCALLS_DECLARED
- #define __FCNTL_SYSCALLS_DECLARED
-
- /** Open or create a file named by name.
-
- The file name may be one of:
- - An absolute path beginning with '/'.
- - A relative path beginning with "." or ".." or a directory name
- - A file name
- - A mapped path which begins with a name followed by a colon, ':'.
-
- Mapped paths are use to refer to specific mass storage volumes or devices.
- In a Shell-hosted environment, the map command will list valid map names
- for both file system and block devices. Mapped paths can also refer to
- devices such as the UEFI console. Supported UEFI console mapped paths are:
- - stdin: Standard Input (from the System Table)
- - stdout: Standard Output (from the System Table)
- - stderr: Standard Error Output (from the System Table)
-
- @param[in] name Name of file to open.
- @param[in] oflags Flags as defined in fcntl.h.
- @param[in] mode Access mode to use if creating the file.
-
- @return Returns -1 on failure, otherwise the file descriptor for the open file.
- **/
- int open (const char *name, int oflags, int mode);
-
- /** Create a new file or rewrite an existing one.
-
- The creat() function behaves as if it is implemented as follows:
-
- int creat(const char *path, mode_t mode)
- {
- return open(path, O_WRONLY|O_CREAT|O_TRUNC, mode);
- }
-
- @param[in] Path The name of the file to create.
- @param[in] Mode Access mode (permissions) for the new file.
-
- @return Returns -1 on failure, otherwise the file descriptor for the open file.
- **/
- int creat (const char *Path, mode_t Mode);
-
- /** File control
-
- This function performs the operations described below and defined in <fcntl.h>.
-
- - F_DUPFD: Return the lowest numbered file descriptor available that is >= the third argument.
- The new file descriptor refers to the same open file as Fd.
-
- - F_SETFD: Set the file descriptor flags to the value specified by the third argument.
- - F_GETFD: Get the file descriptor flags associated with Fd.
- - F_SETFL: Set the file status flags based upon the value of the third argument.
- - F_GETFL: Get the file status flags and access modes for file Fd.
-
- @param[in] Fd File descriptor associated with the file to be controlled.
- @param[in] Cmd Command to execute.
- @param[in] ... Additional arguments, as needed by Cmd.
-
- @return A -1 is returned to indicate failure, otherwise the value
- returned is positive and depends upon Cmd as follows:
- - F_DUPFD: A new file descriptor.
- - F_SETFD: files previous file descriptor flags.
- - F_GETFD: The files file descriptor flags.
- - F_SETFL: The old status flags and access mode of the file.
- - F_GETFL: The status flags and access mode of the file.
- **/
- int fcntl (int Fd, int Cmd, ...);
-#endif // __FCNTL_SYSCALLS_DECLARED
-
-/* These system calls are also declared in stat.h */
-#ifndef __STAT_SYSCALLS_DECLARED
- #define __STAT_SYSCALLS_DECLARED
-
- int mkdir (const char *, mode_t);
- int fstat (int, struct stat *);
- int lstat (const char *, struct stat *);
- int stat (const char *, struct stat *);
- int chmod (const char *, mode_t);
- mode_t umask (mode_t cmask);
-
-#endif // __STAT_SYSCALLS_DECLARED
-
-// These are also declared in sys/types.h
-#ifndef __OFF_T_SYSCALLS_DECLARED
- #define __OFF_T_SYSCALLS_DECLARED
- off_t lseek (int, off_t, int);
- int truncate (const char *, off_t);
- int ftruncate (int, off_t); // IEEE Std 1003.1b-93
-#endif /* __OFF_T_SYSCALLS_DECLARED */
-
-/* EFI-specific Functions. */
-
- /** Mark an open file to be deleted when it is closed.
-
- @param[in] fd File descriptor for the open file.
-
- @retval 0 The flag was set successfully.
- @retval -1 An invalid fd was specified.
- **/
- int DeleteOnClose(int fd);
-
- /** Find and reserve a free File Descriptor.
-
- Returns the first free File Descriptor greater than or equal to the,
- already validated, fd specified by Minfd.
-
- @return Returns -1 if there are no free FDs. Otherwise returns the
- found fd.
- */
- int FindFreeFD (int MinFd);
-
- /** Validate that fd refers to a valid file descriptor.
- IsOpen is interpreted as follows:
- - Positive fd must be OPEN
- - Zero fd must be CLOSED
- - Negative fd may be OPEN or CLOSED
-
- @retval TRUE fd is VALID
- @retval FALSE fd is INVALID
- */
- BOOLEAN ValidateFD (int fd, int IsOpen);
-
-
-/* These system calls don't YET have EFI implementations. */
- int reboot (int, char *);
-__END_DECLS
-
-/* The console output stream, stdout, supports cursor positioning via the
- lseek() function call. The following entities facilitate packing the
- X and Y coordinates into the offset parameter of the lseek call.
-*/
-typedef struct {
- UINT32 Column;
- UINT32 Row;
-} CURSOR_XY;
-
-typedef union {
- UINT64 Offset;
- CURSOR_XY XYpos;
-} XY_OFFSET;
-
-#endif /* _EFI_SYS_CALL_H */
diff --git a/StdLib/Include/sys/_ctype.h b/StdLib/Include/sys/_ctype.h
deleted file mode 100644
index cb06ec09dd..0000000000
--- a/StdLib/Include/sys/_ctype.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/** @file
- Implementation specific support for Single-byte character classification and
- case conversion macros and function declarations.
-
- This file is intended to only be included by <ctype.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _CTYPE_H
-#error This file, <sys/_ctype.h>, may only be included by <ctype.h>.
-#endif
-
-__BEGIN_DECLS
-extern const UINT16 *_cClass; ///< Locale independent pointer to Character Classification Table.
-extern const UINT8 *_uConvT; ///< Locale independent pointer to Lowercase to Uppercase Conversion Table.
-extern const UINT8 *_lConvT; ///< Locale independent pointer to Uppercase to Lowercase Conversion Table.
-
-extern int __isCClass( int _c, unsigned int mask); ///< Internal character classification function.
-__END_DECLS
-
-
-/** @{
-Character Class bit masks.
-**/
-#define _CC 0x0001U ///< Control Characters
-#define _CW 0x0002U ///< White Space
-#define _CP 0x0004U ///< Punctuation
-#define _CD 0x0008U ///< Digits [0-9]
-#define _CU 0x0010U ///< Uppercase Letter [A-Z]
-#define _CL 0x0020U ///< Lowercase Letter [a-z]
-#define _CX 0x0040U ///< Hexadecimal Digits [A-Fa-f]
-#define _C0 0x0080U ///< Path Separator Characters, '/' and '\\'
-#define _CS 0x0100U ///< Space Characters, ' ' in C locale
-#define _CG 0x0200U ///< Graphic Characters
-#define _CB 0x0400U ///< Blank Characters, ' ' and '\t' in C locale
-#define _C4 0x0800U
-#define _XA 0x1000U ///< eXtra Alpha characters not in _CU or _CL
-#define _C6 0x2000U
-#define _C7 0x4000U
-#define _C8 0x8000U
-/// @}
-
-#ifndef NO_CTYPE_MACROS
- #define __isCClass( _c, mask) (((_c) < 0 || (_c) > 127) ? 0 : (_cClass[(_c)] & (mask)))
- #define __toLower( _c) ((__isCClass( ((int)_c), (_CU))) ? _lConvT[(_c)] : (_c))
- #define __toUpper( _c) ((__isCClass( ((int)_c), (_CL))) ? _uConvT[(_c)] : (_c))
-#endif /* NO_CTYPE_MACROS */
-
-/* Macros used by implementation functions */
-#define __isHexLetter(_c) (__isCClass( (int)c, (_CX)))
-
-#ifdef _CTYPE_PRIVATE
- #define _CTYPE_NUM_CHARS (256)
-
- #define _CTYPE_ID "BSDCTYPE"
- #define _CTYPE_REV 2
-
- extern const UINT16 _C_CharClassTable[];
- extern const UINT8 _C_ToUpperTable[];
- extern const UINT8 _C_ToLowerTable[];
-#endif
diff --git a/StdLib/Include/sys/_posix.h b/StdLib/Include/sys/_posix.h
deleted file mode 100644
index 706cf7edb4..0000000000
--- a/StdLib/Include/sys/_posix.h
+++ /dev/null
@@ -1,97 +0,0 @@
-#ifndef _SYS__POSIX_H_
-#define _SYS__POSIX_H_
-
-/*-
- * Copyright (c) 1998 HD Associates, Inc.
- * All rights reserved.
- * contact: dufault@hda.com
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Id: _posix.h,v 1.1.1.1 2006/05/30 06:13:04 hhzhou Exp $
- */
-
-/*
- * This is a stand alone header file to set up for feature specification
- * defined to take place before the inclusion of any standard header.
- * It should only handle pre-processor defines.
- *
- * See section B.2.7 of 1003.1b-1993
- *
- */
-
-#ifdef KERNEL
-
-#if !defined(ACTUALLY_LKM_NOT_KERNEL) && !defined(KLD_MODULE)
-#include "opt_posix.h"
-#endif
-
-/* Only kern_mib.c uses _POSIX_VERSION. Introduce a kernel
- * one to avoid other pieces of the kernel getting dependant
- * on that.
- * XXX Complain if you think this dumb.
- */
-
-/* Make P1003 structures visible for the kernel if
- * the P1003_1B option is in effect.
- */
-#ifdef P1003_1B
-#define _P1003_1B_VISIBLE
-#ifndef _KPOSIX_VERSION
-#define _KPOSIX_VERSION 199309L
-#endif
-#endif
-
-#ifndef _KPOSIX_VERSION
-#define _KPOSIX_VERSION 199009L
-#endif
-
-#define _P1003_1B_VISIBLE_HISTORICALLY
-
-#else
-
-/* Default to existing user space version.
- */
-#ifndef _POSIX_VERSION
-#define _POSIX_VERSION 199009L
-#endif
-
-/* Test for visibility of P1003.1B features:
- * If _POSIX_SOURCE and POSIX_C_SOURCE are completely undefined
- * they show up.
- *
- * If they specify a version including P1003.1B then they show up.
- *
- * (Two macros are added to permit hiding new extensions while
- * keeping historic BSD features - that is not done now)
- *
- */
-
-#if (!defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE)) || \
- (_POSIX_VERSION >= 199309L && defined(_POSIX_C_SOURCE) && \
- _POSIX_C_SOURCE >= 199309L)
-#define _P1003_1B_VISIBLE
-#define _P1003_1B_VISIBLE_HISTORICALLY
-#endif
-
-#endif /* not KERNEL */
-#endif /* _SYS__POSIX_H_ */
diff --git a/StdLib/Include/sys/ansi.h b/StdLib/Include/sys/ansi.h
deleted file mode 100644
index f8489fa2e5..0000000000
--- a/StdLib/Include/sys/ansi.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/** @file
- ANSI type definitions.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to The NetBSD Foundation
- by Jun-ichiro itojun Hagino and by Klaus Klein.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: ansi.h,v 1.11 2005/12/11 12:25:20 christos Exp
-**/
-#ifndef _SYS_ANSI_H_
-#define _SYS_ANSI_H_
-
-#include <machine/int_types.h>
-
-typedef INT8 * __caddr_t; ///< core address
-typedef __uint32_t __gid_t; ///< group id
-typedef __uint32_t __in_addr_t; ///< IP(v4) address
-typedef __uint16_t __in_port_t; ///< "Internet" port number
-typedef __uint32_t __mode_t; ///< file permissions
-typedef __int64_t __off_t; ///< file offset
-typedef __int32_t __pid_t; ///< process id
-typedef __uint8_t __sa_family_t; ///< socket address family
-typedef UINT32 __socklen_t; ///< socket-related datum length
-typedef __uint32_t __uid_t; ///< user id
-typedef __uint64_t __fsblkcnt_t; ///< fs block count (statvfs)
-typedef __uint64_t __fsfilcnt_t; ///< fs file count
-
-#endif /* !_SYS_ANSI_H_ */
diff --git a/StdLib/Include/sys/bswap.h b/StdLib/Include/sys/bswap.h
deleted file mode 100644
index a9284eb81d..0000000000
--- a/StdLib/Include/sys/bswap.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* $NetBSD: bswap.h,v 1.12 2006/05/22 16:28:27 drochner Exp $ */
-
-/* Written by Manuel Bouyer. Public domain */
-
-#ifndef _SYS_BSWAP_H_
-#define _SYS_BSWAP_H_
-
-#ifndef _LOCORE
-#include <sys/EfiCdefs.h>
-#include <sys/types.h>
-
-#include <machine/bswap.h>
-
-__BEGIN_DECLS
-/* Always declare the functions in case their address is taken (etc) */
-#if !defined(__BSWAP_RENAME)
-uint16_t bswap16(uint16_t) __attribute__((__const__));
-uint32_t bswap32(uint32_t) __attribute__((__const__));
-#else
-uint16_t bswap16(uint16_t) __RENAME(__bswap16) __attribute__((__const__));
-uint32_t bswap32(uint32_t) __RENAME(__bswap32) __attribute__((__const__));
-#endif
-uint64_t bswap64(uint64_t) __attribute__((__const__));
-__END_DECLS
-
-#if defined(__GNUC__) && defined(__OPTIMIZE__)
-
-/* machine/byte_swap.h might have defined inline versions */
-#ifndef __BYTE_SWAP_U64_VARIABLE
-#define __BYTE_SWAP_U64_VARIABLE bswap64
-#endif
-
-#ifndef __BYTE_SWAP_U32_VARIABLE
-#define __BYTE_SWAP_U32_VARIABLE bswap32
-#endif
-
-#ifndef __BYTE_SWAP_U16_VARIABLE
-#define __BYTE_SWAP_U16_VARIABLE bswap16
-#endif
-
-#define __byte_swap_u64_constant(x) \
- ((uint64_t) \
- ((((x) & 0xff00000000000000ull) >> 56) | \
- (((x) & 0x00ff000000000000ull) >> 40) | \
- (((x) & 0x0000ff0000000000ull) >> 24) | \
- (((x) & 0x000000ff00000000ull) >> 8) | \
- (((x) & 0x00000000ff000000ull) << 8) | \
- (((x) & 0x0000000000ff0000ull) << 24) | \
- (((x) & 0x000000000000ff00ull) << 40) | \
- (((x) & 0x00000000000000ffull) << 56)))
-
-#define __byte_swap_u32_constant(x) \
- ((((x) & 0xff000000) >> 24) | \
- (((x) & 0x00ff0000) >> 8) | \
- (((x) & 0x0000ff00) << 8) | \
- (((x) & 0x000000ff) << 24))
-
-#define __byte_swap_u16_constant(x) \
- ((((x) & 0xff00) >> 8) | \
- (((x) & 0x00ff) << 8))
-
-#define bswap64(x) \
- (__builtin_constant_p((x)) ? \
- __byte_swap_u64_constant(x) : __BYTE_SWAP_U64_VARIABLE(x))
-
-#define bswap32(x) \
- (__builtin_constant_p((x)) ? \
- __byte_swap_u32_constant(x) : __BYTE_SWAP_U32_VARIABLE(x))
-
-#define bswap16(x) \
- (__builtin_constant_p((x)) ? \
- __byte_swap_u16_constant(x) : __BYTE_SWAP_U16_VARIABLE(x))
-
-#endif /* __GNUC__ && __OPTIMIZE__ */
-#endif /* !_LOCORE */
-
-#endif /* !_SYS_BSWAP_H_ */
diff --git a/StdLib/Include/sys/callout.h b/StdLib/Include/sys/callout.h
deleted file mode 100644
index b3768199fa..0000000000
--- a/StdLib/Include/sys/callout.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/* $NetBSD: callout.h,v 1.22 2005/12/11 12:25:20 christos Exp $ */
-
-/*-
- * Copyright (c) 2000, 2003 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
- * NASA Ames Research Center.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * Copyright (c) 2000-2001 Artur Grabowski <art@openbsd.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _SYS_CALLOUT_H_
-#define _SYS_CALLOUT_H_
-
-/*
- * The following funkyness is to appease gcc3's strict aliasing.
- */
-struct callout;
-struct callout_circq {
- /* next element */
- union {
- struct callout *elem;
- struct callout_circq *list;
- } cq_next;
- /* previous element */
- union {
- struct callout *elem;
- struct callout_circq *list;
- } cq_prev;
-};
-#define cq_next_e cq_next.elem
-#define cq_prev_e cq_prev.elem
-#define cq_next_l cq_next.list
-#define cq_prev_l cq_prev.list
-
-struct callout {
- struct callout_circq c_list; /* linkage on queue */
- void (*c_func)(void *); /* function to call */
- void *c_arg; /* function argument */
- int c_time; /* when callout fires */
- int c_flags; /* state of this entry */
-};
-
-#define CALLOUT_PENDING 0x0002 /* callout is on the queue */
-#define CALLOUT_FIRED 0x0004 /* callout has fired */
-#define CALLOUT_INVOKING 0x0008 /* callout function is being invoked */
-
-#define CALLOUT_INITIALIZER_SETFUNC(func, arg) \
- { {{NULL}, {NULL}}, func, arg, 0, 0 }
-
-#define CALLOUT_INITIALIZER CALLOUT_INITIALIZER_SETFUNC(NULL, NULL)
-
-#ifdef _KERNEL
-void callout_startup(void);
-void callout_init(struct callout *);
-void callout_setfunc(struct callout *, void (*)(void *), void *);
-void callout_reset(struct callout *, int, void (*)(void *), void *);
-void callout_schedule(struct callout *, int);
-void callout_stop(struct callout *);
-int callout_hardclock(void);
-
-#define callout_setfunc(c, f, a) \
-do { \
- (c)->c_func = (f); \
- (c)->c_arg = (a); \
-} while (/*CONSTCOND*/0)
-
-#define callout_pending(c) ((c)->c_flags & CALLOUT_PENDING)
-#define callout_expired(c) ((c)->c_flags & CALLOUT_FIRED)
-#define callout_active(c) ((c)->c_flags & (CALLOUT_PENDING|CALLOUT_FIRED))
-#define callout_invoking(c) ((c)->c_flags & CALLOUT_INVOKING)
-#define callout_ack(c) ((c)->c_flags &= ~CALLOUT_INVOKING)
-#endif /* _KERNEL */
-
-#endif /* !_SYS_CALLOUT_H_ */
diff --git a/StdLib/Include/sys/cdefs.h b/StdLib/Include/sys/cdefs.h
deleted file mode 100644
index c6e3d7b120..0000000000
--- a/StdLib/Include/sys/cdefs.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @file
- Wrapper to allow existing references to <sys/cdefs.h>,
- in code being ported, to work.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-
-#include <sys/EfiCdefs.h>
diff --git a/StdLib/Include/sys/cdefs_aout.h b/StdLib/Include/sys/cdefs_aout.h
deleted file mode 100644
index 2eb0a90266..0000000000
--- a/StdLib/Include/sys/cdefs_aout.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/* $NetBSD: cdefs_aout.h,v 1.20 2006/05/18 17:55:38 christos Exp $ */
-
-/*
- * Written by J.T. Conklin <jtc@wimsey.com> 01/17/95.
- * Public domain.
- */
-
-#ifndef _SYS_CDEFS_AOUT_H_
-#define _SYS_CDEFS_AOUT_H_
-
-#define _C_LABEL(x) __CONCAT(_,x)
-#define _C_LABEL_STRING(x) "_"x
-
-#define ___RENAME(x)
-
-#define __indr_reference(sym,alias) /* nada, since we do weak refs */
-
-#ifdef __GNUC__
-#if __STDC__
- #ifndef DONT_USE_STRONG_WEAK_ALIAS
- #define __strong_alias(alias,sym) \
- __asm(".global " _C_LABEL_STRING(#alias) "\n" \
- _C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym));
- #define __weak_alias(alias,sym) \
- __asm(".weak " _C_LABEL_STRING(#alias) "\n" \
- _C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym));
-
- /* Do not use __weak_extern, use __weak_reference instead */
- #define __weak_extern(sym) \
- __asm(".weak " _C_LABEL_STRING(#sym));
-
- #if __GNUC_PREREQ__(4, 0)
- #define __weak_reference(sym) __attribute__((__weakref__))
- #else
- #define __weak_reference(sym) ; __asm(".weak " _C_LABEL_STRING(#sym))
- #endif
-
- #define __warn_references(sym,msg) \
- __asm(".stabs \"" msg "\",30,0,0,0"); \
- __asm(".stabs \"_" #sym "\",1,0,0,0");
- #else
- #define __strong_alias(alias,sym) /* NOTHING */
- #define __weak_alias(alias,sym) /* NOTHING */
- #define __weak_extern(sym) /* NOTHING */
- #define __weak_reference(sym) /* NOTHING */
-
- #if defined(__CC_ARM) || defined(__APPLE__)
- #define __warn_references(sym,msg)
- #else
- #define __warn_references(sym,msg) \
- __asm(".stabs \"" msg "\",30,0,0,0"); \
- __asm(".stabs \"_" #sym "\",1,0,0,0");
- #endif
- #endif
-#else /* __STDC__ */
- #define __weak_alias(alias,sym) ___weak_alias(_/**/alias,_/**/sym)
- #define ___weak_alias(alias,sym) \
- __asm(".weak alias\nalias = sym");
- /* Do not use __weak_extern, use __weak_reference instead */
- #define __weak_extern(sym) ___weak_extern(_/**/sym)
- #define ___weak_extern(sym) \
- __asm(".weak sym");
-
- #if __GNUC_PREREQ__(4, 0)
- #define __weak_reference(sym) __attribute__((__weakref__))
- #else
- #define ___weak_reference(sym) ; __asm(".weak sym");
- #define __weak_reference(sym) ___weak_reference(_/**/sym)
- #endif
-
- #define __warn_references(sym,msg) \
- __asm(".stabs msg,30,0,0,0"); \
- __asm(".stabs \"_/**/sym\",1,0,0,0");
-#endif /* __STDC__ */
-#else /* __GNUC__ */
- #define __warn_references(sym,msg)
-#endif /* __GNUC__ */
-
-#if defined(__sh__) /* XXX SH COFF */
-#undef __indr_reference(sym,alias)
-#undef __warn_references(sym,msg)
-#define __warn_references(sym,msg)
-#endif
-
-#define __IDSTRING(_n,_s) \
- __asm(".data ; .asciz \"" _s "\" ; .text")
-
-#undef __KERNEL_RCSID
-
-//#define __RCSID(_s) __IDSTRING(rcsid,_s)
-#define __RCSID(_s)
-#define __SCCSID(_s)
-#define __SCCSID2(_s)
-#if 0 /* XXX userland __COPYRIGHTs have \ns in them */
-#define __COPYRIGHT(_s) __IDSTRING(copyright,_s)
-#else
-#define __COPYRIGHT(_s) \
- static const char copyright[] __attribute__((__unused__)) = _s
-#endif
-
-#if defined(USE_KERNEL_RCSIDS) || !defined(_KERNEL)
-#define __KERNEL_RCSID(_n,_s) __IDSTRING(__CONCAT(rcsid,_n),_s)
-#else
-#define __KERNEL_RCSID(_n,_s)
-#endif
-#define __KERNEL_SCCSID(_n,_s)
-#define __KERNEL_COPYRIGHT(_n, _s) __IDSTRING(__CONCAT(copyright,_n),_s)
-
-#ifndef __lint__
-#define __link_set_make_entry(set, sym, type) \
- static void const * const \
- __link_set_##set##_sym_##sym __used = &sym; \
- __asm(".stabs \"___link_set_" #set "\", " #type ", 0, 0, _" #sym)
-#else
-#define __link_set_make_entry(set, sym, type) \
- extern void const * const __link_set_##set##_sym_##sym
-#endif /* __lint__ */
-
-#define __link_set_add_text(set, sym) __link_set_make_entry(set, sym, 23)
-#define __link_set_add_rodata(set, sym) __link_set_make_entry(set, sym, 23)
-#define __link_set_add_data(set, sym) __link_set_make_entry(set, sym, 25)
-#define __link_set_add_bss(set, sym) __link_set_make_entry(set, sym, 27)
-
-#define __link_set_decl(set, ptype) \
-extern struct { \
- int __ls_length; \
- ptype *__ls_items[1]; \
-} __link_set_##set
-
-#define __link_set_start(set) (&(__link_set_##set).__ls_items[0])
-#define __link_set_end(set) \
- (&(__link_set_##set).__ls_items[(__link_set_##set).__ls_length])
-
-#define __link_set_count(set) ((__link_set_##set).__ls_length)
-
-#endif /* !_SYS_CDEFS_AOUT_H_ */
diff --git a/StdLib/Include/sys/dirent.h b/StdLib/Include/sys/dirent.h
deleted file mode 100644
index 2c171de5b7..0000000000
--- a/StdLib/Include/sys/dirent.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/** @file
- Declarations pertaining to directory entries under the UEFI environment.
-
- The information is based upon the EFI_FILE_INFO structure
- in MdePkg/Include/Guid/FileInfo.h.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1989, 1993
- The Regents of the University of California. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- @(#)dirent.h 8.3 (Berkeley) 8/10/94
- NetBSD: dirent.h,v 1.23 2005/12/26 18:41:36 perry Exp
-**/
-#ifndef _SYS_DIRENT_H_
-#define _SYS_DIRENT_H_
-
-#include <Uefi.h>
-
-#include <sys/featuretest.h>
-#include <time.h>
-#include <sys/time.h>
-
-#define MAXNAMLEN 511
-
-/*
- * The dirent structure defines the format of directory entries returned by
- * read(fd, ...) when fd refers to a directory.
- *
- * All names are wide characters and are guaranteed to be null terminated.
- * The maximum length of a name in a directory is MAXNAMLEN.
- *
- * This structure is identical to the EFI_FILE_INFO structure. A new
- * structure is declared because one must be able to refer to it
- * as struct dirent.
- */
-struct dirent {
- UINT64 Size; // (d_reclen) Size of this dirent structure instance,
- // including the Null-terminated FileName string.
- UINT64 FileSize; // The size of the file in bytes.
- UINT64 PhysicalSize; // The amount of physical space the file consumes
- // on the file system volume.
- EFI_TIME CreateTime; // The time the file was created.
- EFI_TIME LastAccessTime; // The time when the file was last accessed.
- EFI_TIME ModificationTime; // The time when the file's contents were last modified.
- UINT64 Attribute; // (d_type) The attribute bits for the file. See below.
- CHAR16 FileName[1]; // (d_name) The Null-terminated name of the file.
-};
-
-/* For compatibility */
-#define d_name FileName
-#define d_type Attribute
-#define d_reclen Size
-
-
-/*
- * File Attributes
- */
-#define DT_UNKNOWN 0
-#define DT_READ_ONLY 0x0000000000000001
-#define DT_HIDDEN 0x0000000000000002
-#define DT_SYSTEM 0x0000000000000004
-#define DT_RESERVED 0x0000000000000008
-#define DT_DIRECTORY 0x0000000000000010
-#define DT_ARCHIVE 0x0000000000000020
-#define DT_CHR 0x0000000000010000 // File attaches to a character device
-#define DT_BLK 0x0000000000020000 // File attaches to a block device
-#define DT_SOCKET 0x0000000000030000 // File attaches to a socket
-#define DT_VALID_ATTR 0x0000000000030037 // Mask for valid attribute bits
-
-/*
- * The _DIRENT_ALIGN macro returns the alignment of struct dirent.
- * struct dirent uses 8.
- */
-#define _DIRENT_ALIGN(dp) (sizeof((dp)->Size) - 1)
-
-/*
- * The _DIRENT_NAMEOFF macro returns the offset of the d_name field in
- * struct dirent
- */
-#define _DIRENT_NAMEOFF(dp) \
- ((char *)(void *)&(dp)->FileName - (char *)(void *)dp)
-
-/*
- * The _DIRENT_RECLEN macro gives the minimum record length which will hold
- * a name of size "namlen". This requires the amount of space in struct dirent
- * without the d_name field, plus enough space for the name with a terminating
- * null byte (namlen+1), rounded up to a the appropriate byte boundary.
- */
-#define _DIRENT_RECLEN(dp, namlen) \
- ((_DIRENT_NAMEOFF(dp) + (namlen) + 1 + _DIRENT_ALIGN(dp)) & \
- ~_DIRENT_ALIGN(dp))
-
-#define _DIRENT_NAMELEN(dp) \
- ((dp)->Size - _DIRENT_NAMEOFF(dp) - 1)
-
-/*
- * The _DIRENT_SIZE macro returns the minimum record length required for
- * name name stored in the current record.
- */
-#define _DIRENT_SIZE(dp) _DIRENT_RECLEN(dp, _DIRENT_NAMELEN(dp))
-
-/*
- * The _DIRENT_NEXT macro advances to the next dirent record.
- */
-#define _DIRENT_NEXT(dp) ((void *)((char *)(void *)(dp) + (dp)->Size))
-
-/*
- * The _DIRENT_MINSIZE returns the size of an empty (invalid) record.
- */
-#define _DIRENT_MINSIZE(dp) _DIRENT_RECLEN(dp, 0)
-
-#endif /* !_SYS_DIRENT_H_ */
diff --git a/StdLib/Include/sys/endian.h b/StdLib/Include/sys/endian.h
deleted file mode 100644
index dfe013fa40..0000000000
--- a/StdLib/Include/sys/endian.h
+++ /dev/null
@@ -1,309 +0,0 @@
-/** @file
- Byte order related definitions and declarations.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: endian.h,v 1.24 2006/05/05 15:08:11 christos Exp
- endian.h 8.1 (Berkeley) 6/11/93
-**/
-#ifndef _SYS_ENDIAN_H_
-#define _SYS_ENDIAN_H_
-
-#include <sys/EfiCdefs.h>
-
-/*
- * Definitions for byte order, according to byte significance from low
- * address to high.
- */
-#define _LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
-#define _BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
-#define _PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */
-
-
-#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
-#ifndef _LOCORE
-
-/* C-family endian-ness definitions */
-
-#include <sys/ansi.h>
-#include <sys/types.h>
-
-#ifndef in_addr_t
-typedef __in_addr_t in_addr_t;
-#define in_addr_t __in_addr_t
-#endif
-
-#ifndef in_port_t
-typedef __in_port_t in_port_t;
-#define in_port_t __in_port_t
-#endif
-
-__BEGIN_DECLS
-uint32_t htonl(uint32_t) __attribute__((__const__));
-uint16_t htons(uint16_t) __attribute__((__const__));
-uint32_t ntohl(uint32_t) __attribute__((__const__));
-uint16_t ntohs(uint16_t) __attribute__((__const__));
-__END_DECLS
-
-#endif /* !_LOCORE */
-#endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */
-
-
-#include <machine/endian_machdep.h>
-
-/*
- * Define the order of 32-bit words in 64-bit words.
- */
-#if _BYTE_ORDER == _LITTLE_ENDIAN
-#define _QUAD_HIGHWORD 1
-#define _QUAD_LOWWORD 0
-#endif
-
-#if _BYTE_ORDER == _BIG_ENDIAN
-#define _QUAD_HIGHWORD 0
-#define _QUAD_LOWWORD 1
-#endif
-
-
-#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
-/*
- * Traditional names for byteorder. These are defined as the numeric
- * sequences so that third party code can "#define XXX_ENDIAN" and not
- * cause errors.
- */
-#define LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
-#define BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
-#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */
-#define BYTE_ORDER _BYTE_ORDER
-
-#ifndef _LOCORE
-
-#include <machine/bswap.h>
-
-/*
- * Macros for network/external number representation conversion.
- */
-#if BYTE_ORDER == BIG_ENDIAN && !defined(__lint__)
-#define ntohl(x) (x)
-#define ntohs(x) (x)
-#define htonl(x) (x)
-#define htons(x) (x)
-
-#define NTOHL(x) (void) (x)
-#define NTOHS(x) (void) (x)
-#define HTONL(x) (void) (x)
-#define HTONS(x) (void) (x)
-
-#else /* LITTLE_ENDIAN || !defined(__lint__) */
-
-#define ntohl(x) bswap32((uint32_t)(x))
-#define ntohs(x) bswap16((uint16_t)(x))
-#define htonl(x) bswap32((uint32_t)(x))
-#define htons(x) bswap16((uint16_t)(x))
-
-#define NTOHL(x) (x) = ntohl((uint32_t)(x))
-#define NTOHS(x) (x) = ntohs((uint16_t)(x))
-#define HTONL(x) (x) = htonl((uint32_t)(x))
-#define HTONS(x) (x) = htons((uint16_t)(x))
-#endif /* LITTLE_ENDIAN || !defined(__lint__) */
-
-/*
- * Macros to convert to a specific endianness.
- */
-
-#if BYTE_ORDER == BIG_ENDIAN
-
-#define htobe16(x) (x)
-#define htobe32(x) (x)
-#define htobe64(x) (x)
-#define htole16(x) bswap16((uint16_t)(x))
-#define htole32(x) bswap32((uint32_t)(x))
-#define htole64(x) bswap64((uint64_t)(x))
-
-#define HTOBE16(x) (void) (x)
-#define HTOBE32(x) (void) (x)
-#define HTOBE64(x) (void) (x)
-#define HTOLE16(x) (x) = bswap16((uint16_t)(x))
-#define HTOLE32(x) (x) = bswap32((uint32_t)(x))
-#define HTOLE64(x) (x) = bswap64((uint64_t)(x))
-
-#else /* LITTLE_ENDIAN */
-
-#define htobe16(x) bswap16((uint16_t)(x))
-#define htobe32(x) bswap32((uint32_t)(x))
-#define htobe64(x) bswap64((uint64_t)(x))
-#define htole16(x) (x)
-#define htole32(x) (x)
-#define htole64(x) (x)
-
-#define HTOBE16(x) (x) = bswap16((uint16_t)(x))
-#define HTOBE32(x) (x) = bswap32((uint32_t)(x))
-#define HTOBE64(x) (x) = bswap64((uint64_t)(x))
-#define HTOLE16(x) (void) (x)
-#define HTOLE32(x) (void) (x)
-#define HTOLE64(x) (void) (x)
-
-#endif /* LITTLE_ENDIAN */
-
-#define be16toh(x) htobe16(x)
-#define be32toh(x) htobe32(x)
-#define be64toh(x) htobe64(x)
-#define le16toh(x) htole16(x)
-#define le32toh(x) htole32(x)
-#define le64toh(x) htole64(x)
-
-#define BE16TOH(x) HTOBE16(x)
-#define BE32TOH(x) HTOBE32(x)
-#define BE64TOH(x) HTOBE64(x)
-#define LE16TOH(x) HTOLE16(x)
-#define LE32TOH(x) HTOLE32(x)
-#define LE64TOH(x) HTOLE64(x)
-
-/*
- * Routines to encode/decode big- and little-endian multi-octet values
- * to/from an octet stream.
- */
-
-static __inline void __unused
-be16enc(void *buf, uint16_t u)
-{
- uint8_t *p = (uint8_t *)buf;
-
- p[0] = (uint8_t)(((unsigned)u >> 8) & 0xff);
- p[1] = (uint8_t)(u & 0xff);
-}
-
-static __inline void __unused
-le16enc(void *buf, uint16_t u)
-{
- uint8_t *p = (uint8_t *)buf;
-
- p[0] = (uint8_t)(u & 0xff);
- p[1] = (uint8_t)(((unsigned)u >> 8) & 0xff);
-}
-
-static __inline uint16_t __unused
-be16dec(const void *buf)
-{
- const uint8_t *p = (const uint8_t *)buf;
-
- return ((p[0] << 8) | p[1]);
-}
-
-static __inline uint16_t __unused
-le16dec(const void *buf)
-{
- const uint8_t *p = (const uint8_t *)buf;
-
- return ((p[1] << 8) | p[0]);
-}
-
-static __inline void __unused
-be32enc(void *buf, uint32_t u)
-{
- uint8_t *p = (uint8_t *)buf;
-
- p[0] = (uint8_t)((u >> 24) & 0xff);
- p[1] = (uint8_t)((u >> 16) & 0xff);
- p[2] = (uint8_t)((u >> 8) & 0xff);
- p[3] = (uint8_t)(u & 0xff);
-}
-
-static __inline void __unused
-le32enc(void *buf, uint32_t u)
-{
- uint8_t *p = (uint8_t *)buf;
-
- p[0] = (uint8_t)(u & 0xff);
- p[1] = (uint8_t)((u >> 8) & 0xff);
- p[2] = (uint8_t)((u >> 16) & 0xff);
- p[3] = (uint8_t)((u >> 24) & 0xff);
-}
-
-static __inline uint32_t __unused
-be32dec(const void *buf)
-{
- const uint8_t *p = (const uint8_t *)buf;
-
- return ((p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]);
-}
-
-static __inline uint32_t __unused
-le32dec(const void *buf)
-{
- const uint8_t *p = (const uint8_t *)buf;
-
- return ((p[3] << 24) | (p[2] << 16) | (p[1] << 8) | p[0]);
-}
-
-static __inline void __unused
-be64enc(void *buf, uint64_t u)
-{
- uint8_t *p = (uint8_t *)buf;
-
- be32enc(p, (uint32_t)(u >> 32));
- be32enc(p + 4, (uint32_t)(u & 0xffffffffULL));
-}
-
-static __inline void __unused
-le64enc(void *buf, uint64_t u)
-{
- uint8_t *p = (uint8_t *)buf;
-
- le32enc(p, (uint32_t)(u & 0xffffffffULL));
- le32enc(p + 4, (uint32_t)(u >> 32));
-}
-
-static __inline uint64_t __unused
-be64dec(const void *buf)
-{
- const uint8_t *p = (const uint8_t *)buf;
-
- return (((uint64_t)be32dec(p) << 32) | be32dec(p + 4));
-}
-
-static __inline uint64_t __unused
-le64dec(const void *buf)
-{
- const uint8_t *p = (const uint8_t *)buf;
-
- return (le32dec(p) | ((uint64_t)le32dec(p + 4) << 32));
-}
-
-#endif /* !_LOCORE */
-#endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */
-#endif /* !_SYS_ENDIAN_H_ */
diff --git a/StdLib/Include/sys/errno.h b/StdLib/Include/sys/errno.h
deleted file mode 100644
index 50c5af6630..0000000000
--- a/StdLib/Include/sys/errno.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/** @file
- The header <sys/errno.h> defines several values, all relating to the reporting of
- error conditions.
-
- The enum members expand to integral constant expressions
- with distinct nonzero values, suitable for use in #if preprocessing
- directives. These default values are specified as an enum in order to ease
- the maintenance of the values.
-
- Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifdef _ERRNO_H // May only be included from <errno.h>
-#ifndef _SYS_ERRNO_H
-#define _SYS_ERRNO_H
-
-/* Define the error numbers, sequentially, beginning at 1. */
-enum {
- __ESUCCESS = 0, /* 0 For those rare times one needs to say all is OK */
- __EMINERRORVAL = 1, /* The lowest valid error value */
- __EPERM = __EMINERRORVAL, /* 1 Operation not permitted */
- __ENOENT, /* 2 No such file or directory */
- __ESRCH, /* 3 No such process */
- __EINTR, /* 4 Interrupted system call */
- __EIO, /* 5 Input/output error */
- __ENXIO, /* 6 Device not configured */
- __E2BIG, /* 7 Argument list too long */
- __ENOEXEC, /* 8 Exec format error */
- __EBADF, /* 9 Bad file descriptor */
- __ECHILD, /* 10 No child processes */
- __EDEADLK, /* 11 Resource deadlock avoided */
- __ENOMEM, /* 12 Cannot allocate memory */
- __EACCES, /* 13 Permission denied */
- __EFAULT, /* 14 Bad address */
- __ENOTBLK, /* 15 Block device required */
- __EBUSY, /* 16 Device busy */
- __EEXIST, /* 17 File exists */
- __EXDEV, /* 18 Cross-device link */
- __ENODEV, /* 19 Operation not supported by device */
- __ENOTDIR, /* 20 Not a directory */
- __EISDIR, /* 21 Is a directory */
- __EINVAL, /* 22 Invalid argument */
- __ENFILE, /* 23 Too many open files in system */
- __EMFILE, /* 24 Too many open file descriptors */
- __ENOTTY, /* 25 Inappropriate ioctl for device */
- __ETXTBSY, /* 26 Text file busy */
- __EFBIG, /* 27 File too large */
- __ENOSPC, /* 28 No space left on device */
- __ESPIPE, /* 29 Illegal seek */
- __EROFS, /* 30 Read-only filesystem */
- __EMLINK, /* 31 Too many links */
- __EPIPE, /* 32 Broken pipe */
-
- /* math software -- these are the only two values required by the C Standard */
- __EDOM, /* 33 Numerical argument out of domain */
- __ERANGE, /* 34 Result too large */
-
- /* non-blocking and interrupt i/o */
- __EAGAIN, /* 35 Resource temporarily unavailable */
- __EWOULDBLOCK = __EAGAIN, /* 35 Operation would block */
- __EINPROGRESS, /* 36 Operation now in progress */
- __EALREADY, /* 37 Operation already in progress */
-
- /* ipc/network software -- argument errors */
- __ENOTSOCK, /* 38 Socket operation on non-socket */
- __EDESTADDRREQ, /* 39 Destination address required */
- __EMSGSIZE, /* 40 Message too long */
- __EPROTOTYPE, /* 41 Protocol wrong type for socket */
- __ENOPROTOOPT, /* 42 Protocol not available */
- __EPROTONOSUPPORT, /* 43 Protocol not supported */
- __ESOCKTNOSUPPORT, /* 44 Socket type not supported */
- __EOPNOTSUPP, /* 45 Operation not supported */
- __ENOTSUP = __EOPNOTSUPP, /* 45 Operation not supported */
- __EPFNOSUPPORT, /* 46 Protocol family not supported */
- __EAFNOSUPPORT, /* 47 Address family not supported by protocol family */
- __EADDRINUSE, /* 48 Address already in use */
- __EADDRNOTAVAIL, /* 49 Can't assign requested address */
-
- /* ipc/network software -- operational errors */
- __ENETDOWN, /* 50 Network is down */
- __ENETUNREACH, /* 51 Network is unreachable */
- __ENETRESET, /* 52 Network dropped connection on reset */
- __ECONNABORTED, /* 53 Software caused connection abort */
- __ECONNRESET, /* 54 Connection reset by peer */
- __ENOBUFS, /* 55 No buffer space available */
- __EISCONN, /* 56 Socket is already connected */
- __ENOTCONN, /* 57 Socket is not connected */
- __ESHUTDOWN, /* 58 Can't send after socket shutdown */
- __ETOOMANYREFS, /* 59 Too many references: can't splice */
- __ETIMEDOUT, /* 60 Operation timed out */
- __ECONNREFUSED, /* 61 Connection refused */
- __ELOOP, /* 62 Too many levels of symbolic links */
- __ENAMETOOLONG, /* 63 File name too long */
- __EHOSTDOWN, /* 64 Host is down */
- __EHOSTUNREACH, /* 65 No route to host */
-
- __ENOTEMPTY, /* 66 Directory not empty */
-
- /* quotas, etc. */
- __EPROCLIM, /* 67 Too many processes */
- __EUSERS, /* 68 Too many users */
- __EDQUOT, /* 69 Disc quota exceeded */
-
- /* Network File System */
- __ESTALE, /* 70 Stale NFS file handle */
- __EREMOTE, /* 71 Too many levels of remote in path */
- __EBADRPC, /* 72 RPC struct is bad */
- __ERPCMISMATCH, /* 73 RPC version wrong */
- __EPROGUNAVAIL, /* 74 RPC prog. not avail */
- __EPROGMISMATCH, /* 75 Program version wrong */
- __EPROCUNAVAIL, /* 76 Bad procedure for program */
- __ENOLCK, /* 77 No locks available */
- __ENOSYS, /* 78 Function not implemented */
- __EFTYPE, /* 79 Inappropriate file type or format */
- __EAUTH, /* 80 Authentication error */
- __ENEEDAUTH, /* 81 Need authenticator */
- __EIDRM, /* 82 Identifier removed */
- __ENOMSG, /* 83 No message of desired type */
- __EOVERFLOW, /* 84 Value too large to be stored in data type */
- __EILSEQ, /* 85 Illegal byte sequence */
- __ENOTHING_1, /* 86 Place Holder */
- __ECANCELED, /* 87 Operation canceled */
-
- __EBADMSG, /* 88 Bad message */
- __ENODATA, /* 89 No message available */
- __ENOSR, /* 90 No STREAM resources */
- __ENOSTR, /* 91 Not a STREAM */
- __ETIME, /* 92 STREAM ioctl timeout */
-
- __ENOATTR, /* 93 Attribute not found */
-
- __EDOOFUS, /* 94 Programming error */
-
- __EMULTIHOP, /* 95 Multihop attempted */
- __ENOLINK, /* 96 Link has been severed */
- __EPROTO, /* 97 Protocol error */
-
- __EBUFSIZE, /* 98 Buffer too small to hold result */
-
- __EMAXERRORVAL /* One more than the highest defined error value. */
-};
-
-#endif /* _SYS_ERRNO_H */
-#else /* not defined _ERRNO_H */
-#error <sys/errno.h> must only be included by <errno.h>.
-#endif /* _ERRNO_H */
diff --git a/StdLib/Include/sys/fcntl.h b/StdLib/Include/sys/fcntl.h
deleted file mode 100644
index dba4d2471e..0000000000
--- a/StdLib/Include/sys/fcntl.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/** @file
- This file includes the definitions for open and fcntl described by POSIX
- for <fcntl.h>; it also includes related kernel definitions.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made
- available under the terms and conditions of the BSD License which
- accompanies this distribution. The full text of the license may be found
- at http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1983, 1990, 1993
- The Regents of the University of California. All rights reserved.
- (c) UNIX System Laboratories, Inc.
- All or some portions of this file are derived from material licensed
- to the University of California by American Telephone and Telegraph
- Co. or Unix System Laboratories, Inc. and are reproduced herein with
- the permission of UNIX System Laboratories, Inc.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- fcntl.h 8.3 (Berkeley) 1/21/94
- NetBSD: fcntl.h,v 1.34 2006/10/05 14:48:33 chs Exp
- */
-#ifndef _SYS_FCNTL_H_
-#define _SYS_FCNTL_H_
-
-#include <sys/featuretest.h>
-#include <sys/types.h>
-
-#include <sys/stat.h>
-
-/** @{
- File status flags used by open(2), fcntl(2).
- They are also used (indirectly) in the kernel file structure f_flags,
- which is a superset of the open/fcntl flags.
- Open/fcntl flags begin with O_; kernel-internal flags begin with F.
-**/
-/* open-only flags */
-#define O_RDONLY 0x00000000 ///< open for reading only
-#define O_WRONLY 0x00000001 ///< open for writing only
-#define O_RDWR 0x00000002 ///< open for reading and writing
-#define O_ACCMODE 0x00000003 ///< mask for above modes
-
-#define O_NONBLOCK 0x00000004 ///< no delay
-#define O_APPEND 0x00000008 ///< set append mode
-#define O_CREAT 0x00000200 ///< create if nonexistent
-#define O_TRUNC 0x00000400 ///< truncate to zero length
-#define O_EXCL 0x00000800 ///< Grant EXCLusive access, or error if already exists and O_CREAT
-
-#define O_DIRECTORY 0x00001000 ///< error if path is not a directory
-#define O_NOCTTY 0x00002000 ///< Don't make this the controlling TTY
-#define O_TTY_INIT 0x00004000 ///< Initialize TTY to "sane" values on open
-
-/* UEFI-specific open-only flags. */
-#define O_HIDDEN 0x00010000 ///< Hidden file attribute
-#define O_SYSTEM 0x00020000 ///< System file attribute
-#define O_ARCHIVE 0x00040000 ///< Archive file attribute
-/// @}
-
-#define O_SETMASK 0x0000000F ///< Flags modifiable by F_SETFD (fcntl)
-
-/*
- * Constants used for fcntl(2)
- */
-
-/** @{ command values used for fcntl(2). **/
-#define F_DUPFD 0 ///< duplicate file descriptor
-#define F_GETFD 1 ///< get file descriptor flags
-#define F_SETFD 2 ///< set file descriptor flags
-#define F_GETFL 3 ///< get file status flags
-#define F_SETFL 4 ///< set file status flags
-#define F_GETOWN 5 ///< get SIGIO/SIGURG proc/pgrp
-#define F_SETOWN 6 ///< set SIGIO/SIGURG proc/pgrp
-#define F_GETLK 7 ///< get record locking information
-#define F_SETLK 8 ///< set record locking information
-#define F_SETLKW 9 ///< F_SETLK; wait if blocked
-#define F_CLOSEM 10 ///< close all fds >= to the one given
-#define F_MAXFD 11 ///< return the max open fd
-/// @}
-
-/** file descriptor flags (F_GETFD, F_SETFD). **/
-#define FD_CLOEXEC 1 ///< close-on-exec flag
-
-/** @{ record locking flags (F_GETLK, F_SETLK, F_SETLKW). **/
-#define F_RDLCK 1 ///< shared or read lock
-#define F_UNLCK 2 ///< unlock
-#define F_WRLCK 3 ///< exclusive or write lock
-/// @}
-
-/** @{ Constants for fcntl's passed to the underlying fs - like ioctl's. **/
-#define F_PARAM_MASK 0xfff
-#define F_PARAM_LEN(x) (((x) >> 16) & F_PARAM_MASK)
-#define F_PARAM_MAX 4095
-#define F_FSCTL (int)0x80000000 ///< This fcntl goes to the fs
-#define F_FSVOID (int)0x40000000 ///< no parameters
-#define F_FSOUT (int)0x20000000 ///< copy out parameter
-#define F_FSIN (int)0x10000000 ///< copy in parameter
-#define F_FSINOUT (F_FSIN | F_FSOUT)
-#define F_FSDIRMASK (int)0x70000000 ///< mask for IN/OUT/VOID
-#define F_FSPRIV (int)0x00008000 ///< command is fs-specific
-/// @}
-
-/* Always ensure that these are consistent with <stdio.h> and <unistd.h>! */
-#ifndef SEEK_SET
- #define SEEK_SET 0 /* set file offset to offset */
-#endif
-#ifndef SEEK_CUR
- #define SEEK_CUR 1 /* set file offset to current plus offset */
-#endif
-#ifndef SEEK_END
- #define SEEK_END 2 /* set file offset to EOF plus offset */
-#endif
-
-#include <sys/EfiCdefs.h>
-
-__BEGIN_DECLS
-#ifndef __FCNTL_SYSCALLS_DECLARED
- #define __FCNTL_SYSCALLS_DECLARED
-
- /** The open() function establishes the connection between a file and a file
- descriptor. It creates an open file description that refers to a file
- and a file descriptor that refers to that open file description. The file
- descriptor is used by other I/O functions to refer to that file.
-
- The open() function returns a file descriptor for the named file that is
- the lowest file descriptor not currently open for that process. The open
- file description is new, and therefore the file descriptor shall not
- share it with any other process in the system.
-
- The file offset used to mark the current position within the file is set
- to the beginning of the file.
-
- The file status flags and file access modes of the open file description
- are set according to the value of oflags.
-
- Values for oflags are constructed by a bitwise-inclusive OR of flags from
- the following list, defined in <fcntl.h>. Applications shall specify
- exactly one of { O_RDONLY, O_RDWR, O_WRONLY } in the value of oflags.
- Any combination of { O_NONBLOCK, O_APPEND, O_CREAT, O_TRUNC, O_EXCL } may
- also be specified in oflags.
-
- Values for mode specify the access permissions for newly created files.
-
- @param[in] Path The path argument points to a pathname naming the
- object to be opened.
- @param[in] oflags File status flags and file access modes of the
- open file description.
- @param[in] mode File access permission bits as defined in
- <sys/stat.h>.
-
- @return Upon successful completion, open() opens the file and returns
- a non-negative integer representing the lowest numbered
- unused file descriptor. Otherwise, open returns -1 and sets
- errno to indicate the error. If a negative value is
- returned, no files are created or modified.
-
- @retval EMFILE No file descriptors available -- Max number already open.
- @retval EINVAL Bad value specified for oflags or mode.
- @retval ENOMEM Failure allocating memory for internal buffers.
- @retval EEXIST File exists and open attempted with (O_EXCL | O_CREAT) set.
- @retval EIO UEFI failure. Check value in EFIerrno.
- **/
- int open(const char *Path, int oflags, int mode);
-
- /**
- **/
- int creat(const char *, mode_t);
-
- /**
- **/
- int fcntl(int, int, ...);
-#endif // __FCNTL_SYSCALLS_DECLARED
-__END_DECLS
-
-#endif /* !_SYS_FCNTL_H_ */
diff --git a/StdLib/Include/sys/fd_set.h b/StdLib/Include/sys/fd_set.h
deleted file mode 100644
index acbfbf0c9a..0000000000
--- a/StdLib/Include/sys/fd_set.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* $NetBSD: fd_set.h,v 1.2 2005/12/11 12:25:20 christos Exp $ */
-
-/*-
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: @(#)types.h 8.4 (Berkeley) 1/21/94
- */
-
-#ifndef _SYS_FD_SET_H_
-#define _SYS_FD_SET_H_
-
-#include <sys/EfiCdefs.h>
-#include <machine/int_types.h>
-
-/*
- * Implementation dependent defines, hidden from user space. X/Open does not
- * specify them.
- */
-#define __NBBY 8 /* number of bits in a byte */
-typedef __int32_t __fd_mask;
-
-/* bits per mask */
-#define __NFDBITS ((unsigned int)sizeof(__fd_mask) * __NBBY)
-
-#define __howmany(x, y) (((x) + ((y) - 1)) / (y))
-
-/*
- * Select uses bit masks of file descriptors in longs. These macros
- * manipulate such bit fields (the filesystem macros use chars).
- * FD_SETSIZE may be defined by the user, but the default here should
- * be enough for most uses.
- */
-#ifndef FD_SETSIZE
-#define FD_SETSIZE 256
-#endif
-
-typedef struct fd_set {
- __fd_mask fds_bits[__howmany(FD_SETSIZE, __NFDBITS)];
-} fd_set;
-
-#define FD_SET(n, p) \
- ((p)->fds_bits[(n)/__NFDBITS] |= (1 << ((n) % __NFDBITS)))
-#define FD_CLR(n, p) \
- ((p)->fds_bits[(n)/__NFDBITS] &= ~(1 << ((n) % __NFDBITS)))
-#define FD_ISSET(n, p) \
- ((p)->fds_bits[(n)/__NFDBITS] & (1 << ((n) % __NFDBITS)))
-#if __GNUC_PREREQ__(2, 95)
-#define FD_ZERO(p) (void)__builtin_memset((p), 0, sizeof(*(p)))
-#else
-#define FD_ZERO(p) do { \
- fd_set *__fds = (p); \
- unsigned int __i; \
- for (__i = 0; __i < __howmany(FD_SETSIZE, __NFDBITS); __i++) \
- __fds->fds_bits[__i] = 0; \
- } while (/* CONSTCOND */ 0)
-#endif /* GCC 2.95 */
-
-/*
- * Expose our internals if we are not required to hide them.
- */
-#if defined(_NETBSD_SOURCE)
-
-#define fd_mask __fd_mask
-#define NFDBITS __NFDBITS
-#ifndef howmany
-#define howmany(a, b) __howmany(a, b)
-#endif
-
-#if __GNUC_PREREQ__(2, 95)
-#define FD_COPY(f, t) (void)__builtin_memcpy((t), (f), sizeof(*(f)))
-#else
-#define FD_COPY(f, t) do { \
- fd_set *__f = (f), *__t = (t); \
- unsigned int __i; \
- for (__i = 0; __i < __howmany(FD_SETSIZE, __NFDBITS); __i++) \
- __t->fds_bits[__i] = __f->fds_bits[__i]; \
- } while (/* CONSTCOND */ 0)
-#endif /* GCC 2.95 */
-
-#endif /* _NETBSD_SOURCE */
-
-#endif /* _SYS_FD_SET_H_ */
diff --git a/StdLib/Include/sys/featuretest.h b/StdLib/Include/sys/featuretest.h
deleted file mode 100644
index f36396af17..0000000000
--- a/StdLib/Include/sys/featuretest.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* $NetBSD: featuretest.h,v 1.8 2005/12/11 12:25:20 christos Exp $ */
-
-/*
- * Written by Klaus Klein <kleink@NetBSD.org>, February 2, 1998.
- * Public domain.
- *
- * NOTE: Do not protect this header against multiple inclusion. Doing
- * so can have subtle side-effects due to header file inclusion order
- * and testing of e.g. _POSIX_SOURCE vs. _POSIX_C_SOURCE. Instead,
- * protect each CPP macro that we want to supply.
- */
-
-/*
- * Feature-test macros are defined by several standards, and allow an
- * application to specify what symbols they want the system headers to
- * expose, and hence what standard they want them to conform to.
- * There are two classes of feature-test macros. The first class
- * specify complete standards, and if one of these is defined, header
- * files will try to conform to the relevant standard. They are:
- *
- * ANSI macros:
- * _ANSI_SOURCE ANSI C89
- *
- * POSIX macros:
- * _POSIX_SOURCE == 1 IEEE Std 1003.1 (version?)
- * _POSIX_C_SOURCE == 1 IEEE Std 1003.1-1990
- * _POSIX_C_SOURCE == 2 IEEE Std 1003.2-1992
- * _POSIX_C_SOURCE == 199309L IEEE Std 1003.1b-1993
- * _POSIX_C_SOURCE == 199506L ISO/IEC 9945-1:1996
- * _POSIX_C_SOURCE == 200112L IEEE Std 1003.1-2001
- *
- * X/Open macros:
- * _XOPEN_SOURCE System Interfaces and Headers, Issue 4, Ver 2
- * _XOPEN_SOURCE_EXTENDED == 1 XSH4.2 UNIX extensions
- * _XOPEN_SOURCE == 500 System Interfaces and Headers, Issue 5
- * _XOPEN_SOURCE == 520 Networking Services (XNS), Issue 5.2
- * _XOPEN_SOURCE == 600 IEEE Std 1003.1-2001, XSI option
- *
- * NetBSD macros:
- * _NETBSD_SOURCE == 1 Make all NetBSD features available.
- *
- * If more than one of these "major" feature-test macros is defined,
- * then the set of facilities provided (and namespace used) is the
- * union of that specified by the relevant standards, and in case of
- * conflict, the earlier standard in the above list has precedence (so
- * if both _POSIX_C_SOURCE and _NETBSD_SOURCE are defined, the version
- * of rename() that's used is the POSIX one). If none of the "major"
- * feature-test macros is defined, _NETBSD_SOURCE is assumed.
- *
- * There are also "minor" feature-test macros, which enable extra
- * functionality in addition to some base standard. They should be
- * defined along with one of the "major" macros. The "minor" macros
- * are:
- *
- * _REENTRANT
- * _ISOC99_SOURCE
- * _LARGEFILE_SOURCE Large File Support
- * <http://ftp.sas.com/standards/large.file/x_open.20Mar96.html>
- */
-
-#if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE)
-#define _POSIX_C_SOURCE 1L
-#endif
-
-#if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) && \
- !defined(_XOPEN_SOURCE) && !defined(_NETBSD_SOURCE)
-#define _NETBSD_SOURCE 1
-#endif
-
-#if ((_POSIX_C_SOURCE - 0) >= 199506L || (_XOPEN_SOURCE - 0) >= 500) && \
- !defined(_REENTRANT)
-#define _REENTRANT
-#endif
diff --git a/StdLib/Include/sys/file.h b/StdLib/Include/sys/file.h
deleted file mode 100644
index cce35f1637..0000000000
--- a/StdLib/Include/sys/file.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 1982, 1986, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)file.h 8.3 (Berkeley) 1/9/95
- * $Id: file.h,v 1.1.1.1 2006/05/30 06:12:53 hhzhou Exp $
- */
-
-#ifndef _SYS_FILE_H_
-#define _SYS_FILE_H_
-
-#ifndef KERNEL
-#include <sys/fcntl.h>
-#include <sys/unistd.h>
-#endif
-
-#ifdef KERNEL
-#include <sys/queue.h>
-
-struct proc;
-struct uio;
-
-/*
- * Kernel descriptor table.
- * One entry for each open kernel vnode and socket.
- */
-struct file {
- LIST_ENTRY(file) f_list;/* list of active files */
- short f_flag; /* see fcntl.h */
-#define DTYPE_VNODE 1 /* file */
-#define DTYPE_SOCKET 2 /* communications endpoint */
-#define DTYPE_PIPE 3 /* pipe */
-#define DTYPE_FIFO 4 /* fifo (named pipe) */
- short f_type; /* descriptor type */
- short f_count; /* reference count */
- short f_msgcount; /* references from message queue */
- struct ucred *f_cred; /* credentials associated with descriptor */
- struct fileops {
- int (*fo_read) __P((struct file *fp, struct uio *uio,
- struct ucred *cred, int flags));
- int (*fo_write) __P((struct file *fp, struct uio *uio,
- struct ucred *cred, int flags));
-#define FOF_OFFSET 1
- int (*fo_ioctl) __P((struct file *fp, u_long com,
- caddr_t data, struct proc *p));
- int (*fo_poll) __P((struct file *fp, int events,
- struct ucred *cred, struct proc *p));
- int (*fo_close) __P((struct file *fp, struct proc *p));
- } *f_ops;
- int f_seqcount; /*
- * count of sequential accesses -- cleared
- * by most seek operations.
- */
- off_t f_nextread; /*
- * offset of next expected read
- */
- off_t f_offset;
- caddr_t f_data; /* vnode or socket */
-};
-
-#ifdef MALLOC_DECLARE
-MALLOC_DECLARE(M_FILE);
-#endif
-
-LIST_HEAD(filelist, file);
-extern struct filelist filehead; /* head of list of open files */
-extern struct fileops vnops;
-extern int maxfiles; /* kernel limit on number of open files */
-extern int maxfilesperproc; /* per process limit on number of open files */
-extern int nfiles; /* actual number of open files */
-
-#endif /* KERNEL */
-
-#endif /* !SYS_FILE_H */
diff --git a/StdLib/Include/sys/filio.h b/StdLib/Include/sys/filio.h
deleted file mode 100644
index e514c267a7..0000000000
--- a/StdLib/Include/sys/filio.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/** @file
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1982, 1986, 1990, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)filio.h 8.1 (Berkeley) 3/28/94
- NetBSD: filio.h,v 1.10 2005/12/11 12:25:20 christos Exp
- */
-
-#ifndef _SYS_FILIO_H_
-#define _SYS_FILIO_H_
-
-#include <sys/ioccom.h>
-
-typedef const struct timeval* ptimeval_t;
-
-/* File-descriptor ioctl's. */
-
-#define FIODLEX _IO ('f', 1) /* set Delete-on-Close */
-#define FIONDLEX _IO ('f', 2) /* clear Delete-on-Close */
-#define FIOSETIME _IOW ('f', 127, ptimeval_t) /* Set access and modification times */
-
-#endif /* !_SYS_FILIO_H_ */
diff --git a/StdLib/Include/sys/float_ieee754.h b/StdLib/Include/sys/float_ieee754.h
deleted file mode 100644
index ab2f54c615..0000000000
--- a/StdLib/Include/sys/float_ieee754.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/** @file
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)float.h 8.1 (Berkeley) 6/10/93
- NetBSD: float_ieee754.h,v 1.8 2005/12/11 12:25:20 christos Exp
-
- * NOTICE: This is not a standalone file. To use it, #include it in
- * your port's float.h header.
-**/
-
-#ifndef _SYS_FLOAT_IEEE754_H_
-#define _SYS_FLOAT_IEEE754_H_
-
-#include <sys/EfiCdefs.h>
-#include <sys/featuretest.h>
-
-#ifndef FLT_ROUNDS
-__BEGIN_DECLS
-extern int __flt_rounds(void);
-__END_DECLS
-#define FLT_ROUNDS __flt_rounds()
-#endif
-
-#ifndef FLT_EVAL_METHOD
-#if __GNUC_PREREQ__(3, 3)
-#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
-#endif /* GCC >= 3.3 */
-#endif /* defined(FLT_EVAL_METHOD) */
-
-#define FLT_RADIX 2 /* b */
-
-#define FLT_MANT_DIG 24 /* p */
-#define FLT_EPSILON 1.19209290E-7F /* b**(1-p) */
-#define FLT_DIG 6 /* floor((p-1)*log10(b))+(b == 10) */
-#define FLT_MIN_EXP (-125) /* emin */
-#define FLT_MIN 1.17549435E-38F /* b**(emin-1) */
-#define FLT_MIN_10_EXP (-37) /* ceil(log10(b**(emin-1))) */
-#define FLT_MAX_EXP 128 /* emax */
-//#define FLT_MAX 3.40282347e+38F /* (1-b**(-p))*b**emax */
-#define FLT_MAX 3.402823e+38F /* (1-b**(-p))*b**emax */
-#define FLT_MAX_10_EXP 38 /* floor(log10((1-b**(-p))*b**emax)) */
-
-#define DBL_MANT_DIG 53
-#define DBL_EPSILON 2.2204460492503131E-16
-#define DBL_DIG 15
-#define DBL_MIN_EXP (-1021)
-#define DBL_MIN 2.2250738585072014E-308
-#define DBL_MIN_10_EXP (-307)
-#define DBL_MAX_EXP 1024
-#define DBL_MAX 1.7976931348623157E+308
-#define DBL_MAX_10_EXP 308
-
-/*
- * If no extended-precision type is defined by the machine-dependent
- * header including this, default to `long double' being double-precision.
- */
-#ifndef LDBL_MANT_DIG
- #define LDBL_MANT_DIG DBL_MANT_DIG
- #define LDBL_EPSILON DBL_EPSILON
- #define LDBL_DIG DBL_DIG
- #define LDBL_MIN_EXP DBL_MIN_EXP
- #define LDBL_MIN DBL_MIN
- #define LDBL_MIN_10_EXP DBL_MIN_10_EXP
- #define LDBL_MAX_EXP DBL_MAX_EXP
- #define LDBL_MAX DBL_MAX
- #define LDBL_MAX_10_EXP DBL_MAX_10_EXP
-
- #define DECIMAL_DIG 17 /* ceil((1+p*log10(b))-(b==10) */
-#endif /* LDBL_MANT_DIG */
-
-#endif /* _SYS_FLOAT_IEEE754_H_ */
diff --git a/StdLib/Include/sys/ieee754.h b/StdLib/Include/sys/ieee754.h
deleted file mode 100644
index 740b58eb55..0000000000
--- a/StdLib/Include/sys/ieee754.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/* $NetBSD: ieee754.h,v 1.6.24.1 2007/05/07 19:49:10 pavel Exp $ */
-
-/*
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This software was developed by the Computer Systems Engineering group
- * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
- * contributed to Berkeley.
- *
- * All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Lawrence Berkeley Laboratory.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)ieee.h 8.1 (Berkeley) 6/11/93
- */
-#ifndef _SYS_IEEE754_H_
-#define _SYS_IEEE754_H_
-
-/*
- * NOTICE: This is not a standalone file. To use it, #include it in
- * your port's ieee.h header.
- */
-
-#include <machine/endian.h>
-
-/*
- * <sys/ieee754.h> defines the layout of IEEE 754 floating point types.
- * Only single-precision and double-precision types are defined here;
- * extended types, if available, are defined in the machine-dependent
- * header.
- */
-
-/*
- * Define the number of bits in each fraction and exponent.
- *
- * k k+1
- * Note that 1.0 x 2 == 0.1 x 2 and that denorms are represented
- *
- * (-exp_bias+1)
- * as fractions that look like 0.fffff x 2 . This means that
- *
- * -126
- * the number 0.10000 x 2 , for instance, is the same as the normalized
- *
- * -127 -128
- * float 1.0 x 2 . Thus, to represent 2 , we need one leading zero
- *
- * -129
- * in the fraction; to represent 2 , we need two, and so on. This
- *
- * (-exp_bias-fracbits+1)
- * implies that the smallest denormalized number is 2
- *
- * for whichever format we are talking about: for single precision, for
- *
- * -126 -149
- * instance, we get .00000000000000000000001 x 2 , or 1.0 x 2 , and
- *
- * -149 == -127 - 23 + 1.
- */
-#define SNG_EXPBITS 8
-#define SNG_FRACBITS 23
-
-struct ieee_single {
-#if _BYTE_ORDER == _BIG_ENDIAN
- u_int sng_sign:1;
- u_int sng_exp:SNG_EXPBITS;
- u_int sng_frac:SNG_FRACBITS;
-#else
- u_int sng_frac:SNG_FRACBITS;
- u_int sng_exp:SNG_EXPBITS;
- u_int sng_sign:1;
-#endif
-};
-
-#define DBL_EXPBITS 11
-#define DBL_FRACHBITS 20
-#define DBL_FRACLBITS 32
-#define DBL_FRACBITS (DBL_FRACHBITS + DBL_FRACLBITS)
-
-struct ieee_double {
-#if _BYTE_ORDER == _BIG_ENDIAN
- u_int dbl_sign:1;
- u_int dbl_exp:DBL_EXPBITS;
- u_int dbl_frach:DBL_FRACHBITS;
- u_int dbl_fracl:DBL_FRACLBITS;
-#else
- u_int dbl_fracl:DBL_FRACLBITS;
- u_int dbl_frach:DBL_FRACHBITS;
- u_int dbl_exp:DBL_EXPBITS;
- u_int dbl_sign:1;
-#endif
-};
-
-/*
- * Floats whose exponent is in [1..INFNAN) (of whatever type) are
- * `normal'. Floats whose exponent is INFNAN are either Inf or NaN.
- * Floats whose exponent is zero are either zero (iff all fraction
- * bits are zero) or subnormal values.
- *
- * At least one `signalling NaN' and one `quiet NaN' value must be
- * implemented. It is left to the architecture to specify how to
- * distinguish between these.
- */
-#define SNG_EXP_INFNAN 255
-#define DBL_EXP_INFNAN 2047
-
-/*
- * Exponent biases.
- */
-#define SNG_EXP_BIAS 127
-#define DBL_EXP_BIAS 1023
-
-/*
- * Convenience data structures.
- */
-union ieee_single_u {
- float sngu_f;
- struct ieee_single sngu_sng;
-};
-
-union ieee_double_u {
- double dblu_d;
- struct ieee_double dblu_dbl;
-};
-#endif /* _SYS_IEEE754_H_ */
diff --git a/StdLib/Include/sys/inttypes.h b/StdLib/Include/sys/inttypes.h
deleted file mode 100644
index 5dc3565f3d..0000000000
--- a/StdLib/Include/sys/inttypes.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* $NetBSD: inttypes.h,v 1.4 2001/04/28 15:41:30 kleink Exp $ */
-
-/*-
- * Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus J. Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _SYS_INTTYPES_H_
-#define _SYS_INTTYPES_H_
-
-/*
- * 7.8 Format conversion of integer types
- */
-
-#include <sys/stdint.h>
-
-#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)
-#include <machine/int_fmtio.h>
-#endif
-
-#endif /* !_SYS_INTTYPES_H_ */
diff --git a/StdLib/Include/sys/ioccom.h b/StdLib/Include/sys/ioccom.h
deleted file mode 100644
index 852a082b28..0000000000
--- a/StdLib/Include/sys/ioccom.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* $NetBSD: ioccom.h,v 1.8 2005/12/11 12:25:20 christos Exp $ */
-
-/*-
- * Copyright (c) 1982, 1986, 1990, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)ioccom.h 8.3 (Berkeley) 1/9/95
- */
-#ifndef _SYS_IOCCOM_H_
-#define _SYS_IOCCOM_H_
-
-/*
- * Ioctl's have the command encoded in the lower word, and the size of
- * any in or out parameters in the upper word. The high 3 bits of the
- * upper word are used to encode the in/out status of the parameter.
- */
-#define IOCPARM_MASK 0x1fff /* parameter length, at most 13 bits */
-
-#define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK)
-#define IOCBASECMD(x) ((x) & ~(IOCPARM_MASK << 16))
-#define IOCGROUP(x) (((x) >> 8) & 0xff)
-
-#define IOCPARM_MAX NBPG /* max size of ioctl args, mult. of NBPG */
- /* no parameters */
-#define IOC_VOID (unsigned long)0x20000000
- /* copy parameters out */
-#define IOC_OUT (unsigned long)0x40000000
- /* copy parameters in */
-#define IOC_IN (unsigned long)0x80000000
- /* copy parameters in and out */
-#define IOC_INOUT (IOC_IN|IOC_OUT)
- /* mask for IN/OUT/VOID */
-#define IOC_DIRMASK (unsigned long)0xe0000000
-
-#define _IOC(inout,group,num,len) (inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num))
-
-#define _IO(g,n) _IOC(IOC_VOID, (g), (n), 0)
-#define _IOR(g,n,t) _IOC(IOC_OUT, (g), (n), sizeof(t))
-#define _IOW(g,n,t) _IOC(IOC_IN, (g), (n), sizeof(t))
-
-/* this should be _IORW, but stdio got there first */
-#define _IOWR(g,n,t) _IOC(IOC_INOUT, (g), (n), sizeof(t))
-
-#endif /* !_SYS_IOCCOM_H_ */
diff --git a/StdLib/Include/sys/ioctl.h b/StdLib/Include/sys/ioctl.h
deleted file mode 100644
index 2378fd2c84..0000000000
--- a/StdLib/Include/sys/ioctl.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/** @file
- Device Control, ioctl, definitions and declarations.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1982, 1986, 1990, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: ioctl.h,v 1.34 2005/12/11 12:25:20 christos Exp
- ioctl.h 8.6 (Berkeley) 3/28/94
-**/
-#ifndef _SYS_IOCTL_H_
-#define _SYS_IOCTL_H_
-
-
-//#include <sys/ttycom.h>
-
-/*
- * Pun for SunOS prior to 3.2. SunOS 3.2 and later support TIOCGWINSZ
- * and TIOCSWINSZ (yes, even 3.2-3.5, the fact that it wasn't documented
- * nonwithstanding).
- */
-struct ttysize {
- unsigned short ts_lines;
- unsigned short ts_cols;
- unsigned short ts_xxx;
- unsigned short ts_yyy;
-};
-//#define TIOCGSIZE TIOCGWINSZ
-//#define TIOCSSIZE TIOCSWINSZ
-
-//#include <sys/ioccom.h>
-
-//#include <sys/dkio.h>
-//#include <sys/filio.h>
-//#include <sys/sockio.h>
-
-/*
- * Passthrough ioctl commands. These are passed through to devices
- * as they are, it is expected that the device (an LKM, for example),
- * will know how to deal with them. One for each emulation, so that
- * no namespace clashes will occur between them, for devices that
- * may be dealing with specific ioctls for multiple emulations.
- */
-
-struct ioctl_pt {
- unsigned long com;
- void *data;
-};
-
-#define PTIOCNETBSD _IOW('Z', 0, struct ioctl_pt)
-#define PTIOCSUNOS _IOW('Z', 1, struct ioctl_pt)
-#define PTIOCSVR4 _IOW('Z', 2, struct ioctl_pt)
-#define PTIOCLINUX _IOW('Z', 3, struct ioctl_pt)
-#define PTIOCFREEBSD _IOW('Z', 4, struct ioctl_pt)
-#define PTIOCOSF1 _IOW('Z', 5, struct ioctl_pt)
-#define PTIOCULTRIX _IOW('Z', 6, struct ioctl_pt)
-#define PTIOCWIN32 _IOW('Z', 7, struct ioctl_pt)
-
-#include <sys/EfiCdefs.h>
-
-__BEGIN_DECLS
-int ioctl(int, unsigned long, ...);
-__END_DECLS
-#endif /* !_SYS_IOCTL_H_ */
diff --git a/StdLib/Include/sys/localedef.h b/StdLib/Include/sys/localedef.h
deleted file mode 100644
index 63ea8a2307..0000000000
--- a/StdLib/Include/sys/localedef.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* $NetBSD: localedef.h,v 1.7 2005/11/29 03:12:16 christos Exp $ */
-
-/*
- * Copyright (c) 1994 Winning Strategies, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Winning Strategies, Inc.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _SYS_LOCALEDEF_H_
-#define _SYS_LOCALEDEF_H_
-
-typedef struct {
- const char *yesexpr;
- const char *noexpr;
- const char *yesstr;
- const char *nostr;
-} _MessagesLocale;
-
-extern const _MessagesLocale *_CurrentMessagesLocale;
-extern const _MessagesLocale _DefaultMessagesLocale;
-
-
-typedef struct {
- const char *int_curr_symbol;
- const char *currency_symbol;
- const char *mon_decimal_point;
- const char *mon_thousands_sep;
- const char *mon_grouping;
- const char *positive_sign;
- const char *negative_sign;
- char int_frac_digits;
- char frac_digits;
- char p_cs_precedes;
- char p_sep_by_space;
- char n_cs_precedes;
- char n_sep_by_space;
- char p_sign_posn;
- char n_sign_posn;
- char int_p_cs_precedes;
- char int_n_cs_precedes;
- char int_p_sep_by_space;
- char int_n_sep_by_space;
- char int_p_sign_posn;
- char int_n_sign_posn;
-} _MonetaryLocale;
-
-extern const _MonetaryLocale *_CurrentMonetaryLocale;
-extern const _MonetaryLocale _DefaultMonetaryLocale;
-
-
-typedef struct {
- const char *decimal_point;
- const char *thousands_sep;
- const char *grouping;
-} _NumericLocale;
-
-extern const _NumericLocale *_CurrentNumericLocale;
-extern const _NumericLocale _DefaultNumericLocale;
-
-
-typedef struct {
- const char *abday[7];
- const char *day[7];
- const char *abmon[12];
- const char *mon[12];
- const char *am_pm[2];
- const char *d_t_fmt;
- const char *d_fmt;
- const char *t_fmt;
- const char *t_fmt_ampm;
-} _TimeLocale;
-
-extern const _TimeLocale *_CurrentTimeLocale;
-extern const _TimeLocale _DefaultTimeLocale;
-
-#endif /* !_SYS_LOCALEDEF_H_ */
diff --git a/StdLib/Include/sys/param.h b/StdLib/Include/sys/param.h
deleted file mode 100644
index 19de391a9f..0000000000
--- a/StdLib/Include/sys/param.h
+++ /dev/null
@@ -1,321 +0,0 @@
-/* $NetBSD: param.h,v 1.244.2.9.2.2 2008/10/05 08:44:03 bouyer Exp $ */
-
-/*-
- * Copyright (c) 1982, 1986, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)param.h 8.3 (Berkeley) 4/4/95
- */
-
-#ifndef _SYS_PARAM_H_
-#define _SYS_PARAM_H_
-
-/*
- * Historic BSD #defines -- probably will remain untouched for all time.
- */
-#define BSD 199506 /* System version (year & month). */
-#define BSD4_3 1
-#define BSD4_4 1
-
-/*
- * #define __NetBSD_Version__ MMmmrrpp00
- *
- * M = major version
- * m = minor version; a minor number of 99 indicates current.
- * r = 0 (*)
- * p = patchlevel
- *
- * When new releases are made, src/gnu/usr.bin/groff/tmac/mdoc.local
- * needs to be updated and the changes sent back to the groff maintainers.
- *
- * (*) Up to 2.0I "release" used to be "",A-Z,Z[A-Z] but numeric
- * e.g. NetBSD-1.2D = 102040000 ('D' == 4)
- * NetBSD-2.0H (200080000) was changed on 20041001 to:
- * 2.99.9 (299000900)
- */
-
-#define __NetBSD_Version__ 400000003 /* NetBSD 4.0.1 */
-
-#define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \
- (m) * 1000000) + (p) * 100) <= __NetBSD_Version__)
-
-/*
- * Historical NetBSD #define
- *
- * NetBSD 1.4 was the last release for which this value was incremented.
- * The value is now permanently fixed at 199905. It will never be
- * changed again.
- *
- * New code must use __NetBSD_Version__ instead, and should not even
- * count on NetBSD being defined.
- *
- */
-
-#define NetBSD 199905 /* NetBSD version (year & month). */
-
-#ifndef _LOCORE
-//#include <sys/inttypes.h>
-#include <sys/types.h>
-#endif
-
-/*
- * Machine-independent constants (some used in following include files).
- * Redefined constants are from POSIX 1003.1 limits file.
- *
- * MAXCOMLEN should be >= sizeof(ac_comm) (see <acct.h>)
- * MAXLOGNAME should be >= UT_NAMESIZE (see <utmp.h>)
- */
-#include <sys/syslimits.h>
-
-#define MAXCOMLEN 16 /* max command name remembered */
-#define MAXINTERP PATH_MAX /* max interpreter file name length */
-/* DEPRECATED: use LOGIN_NAME_MAX instead. */
-#define MAXLOGNAME (LOGIN_NAME_MAX - 1) /* max login name length */
-#define NCARGS ARG_MAX /* max bytes for an exec function */
-#define NGROUPS NGROUPS_MAX /* max number groups */
-#define NOGROUP 65535 /* marker for empty group set member */
-#define MAXHOSTNAMELEN 256 /* max hostname size */
-
-#ifndef NOFILE
-#define NOFILE OPEN_MAX /* max open files per process */
-#endif
-#ifndef MAXUPRC /* max simultaneous processes */
-#define MAXUPRC CHILD_MAX /* POSIX 1003.1-compliant default */
-#else
-#if (MAXUPRC - 0) < CHILD_MAX
-#error MAXUPRC less than CHILD_MAX. See options(4) for details.
-#endif /* (MAXUPRC - 0) < CHILD_MAX */
-#endif /* !defined(MAXUPRC) */
-
-/* Signals. */
-#include <sys/signal.h>
-
-/* Machine type dependent parameters. */
-#include <machine/param.h>
-#include <machine/limits.h>
-
-/* pages ("clicks") to disk blocks */
-#define ctod(x) ((x) << (PGSHIFT - DEV_BSHIFT))
-#define dtoc(x) ((x) >> (PGSHIFT - DEV_BSHIFT))
-
-/* bytes to pages */
-#define ctob(x) ((x) << PGSHIFT)
-#define btoc(x) (((x) + PGOFSET) >> PGSHIFT)
-
-/* bytes to disk blocks */
-#define dbtob(x) ((x) << DEV_BSHIFT)
-#define btodb(x) ((x) >> DEV_BSHIFT)
-
-/*
- * Stack macros. On most architectures, the stack grows down,
- * towards lower addresses; it is the rare architecture where
- * it grows up, towards higher addresses.
- *
- * STACK_GROW and STACK_SHRINK adjust a stack pointer by some
- * size, no questions asked. STACK_ALIGN aligns a stack pointer.
- *
- * STACK_ALLOC returns a pointer to allocated stack space of
- * some size; given such a pointer and a size, STACK_MAX gives
- * the maximum (in the "maxsaddr" sense) stack address of the
- * allocated memory.
- */
-#if defined(_KERNEL) || defined(__EXPOSE_STACK)
-#ifdef __MACHINE_STACK_GROWS_UP
-#define STACK_GROW(sp, _size) (((caddr_t)(sp)) + (_size))
-#define STACK_SHRINK(sp, _size) (((caddr_t)(sp)) - (_size))
-#define STACK_ALIGN(sp, bytes) \
- ((caddr_t)((((unsigned long)(sp)) + (bytes)) & ~(bytes)))
-#define STACK_ALLOC(sp, _size) ((caddr_t)(sp))
-#define STACK_MAX(p, _size) (((caddr_t)(p)) + (_size))
-#else
-#define STACK_GROW(sp, _size) (((caddr_t)(sp)) - (_size))
-#define STACK_SHRINK(sp, _size) (((caddr_t)(sp)) + (_size))
-#define STACK_ALIGN(sp, bytes) \
- ((caddr_t)(((unsigned long)(sp)) & ~(bytes)))
-#define STACK_ALLOC(sp, _size) (((caddr_t)(sp)) - (_size))
-#define STACK_MAX(p, _size) ((caddr_t)(p))
-#endif
-#endif /* defined(_KERNEL) || defined(__EXPOSE_STACK) */
-
-/*
- * Priorities. Note that with 32 run queues, differences less than 4 are
- * insignificant.
- */
-#define PSWP 0
-#define PVM 4
-#define PINOD 8
-#define PRIBIO 16
-#define PVFS 20
-#define PZERO 22 /* No longer magic, shouldn't be here. XXX */
-#define PSOCK 24
-#define PWAIT 32
-#define PLOCK 36
-#define PPAUSE 40
-#define PUSER 50
-#define MAXPRI 127 /* Priorities range from 0 through MAXPRI. */
-
-#define PRIMASK 0x0ff
-#define PCATCH 0x100 /* OR'd with pri for tsleep to check signals */
-#define PNORELOCK 0x200 /* OR'd with pri for cond_wait() to not relock
- the interlock */
-#define PNOEXITERR 0x400 /* OR'd with pri for tsleep to not exit
- with an error code when LWPs are exiting */
-#define NBPW sizeof(int) /* number of bytes per word (integer) */
-
-#define CMASK 022 /* default file mask: S_IWGRP|S_IWOTH */
-#define NODEV (dev_t)(-1) /* non-existent device */
-
-#define CBLOCK 64 /* Clist block size, must be a power of 2. */
-#define CBQSIZE (CBLOCK/NBBY) /* Quote bytes/cblock - can do better. */
- /* Data chars/clist. */
-#define CBSIZE (CBLOCK - (int)sizeof(struct cblock *) - CBQSIZE)
-#define CROUND (CBLOCK - 1) /* Clist rounding. */
-
-/*
- * File system parameters and macros.
- *
- * The file system is made out of blocks of at most MAXBSIZE units, with
- * smaller units (fragments) only in the last direct block. MAXBSIZE
- * primarily determines the size of buffers in the buffer pool. It may be
- * made larger without any effect on existing file systems; however making
- * it smaller may make some file systems unmountable.
- */
-#ifndef MAXBSIZE /* XXX */
-#define MAXBSIZE MAXPHYS
-#endif
-#define MAXFRAG 8
-
-/*
- * MAXPATHLEN defines the longest permissible path length after expanding
- * symbolic links. It is used to allocate a temporary buffer from the buffer
- * pool in which to do the name expansion, hence should be a power of two,
- * and must be less than or equal to MAXBSIZE. MAXSYMLINKS defines the
- * maximum number of symbolic links that may be expanded in a path name.
- * It should be set high enough to allow all legitimate uses, but halt
- * infinite loops reasonably quickly.
- */
-#define MAXPATHLEN PATH_MAX
-#define MAXSYMLINKS 32
-
-/* Bit map related macros. */
-#define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
-#define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
-#define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
-#define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
-
-/* Macros for counting and rounding. */
-#ifndef howmany
-#define howmany(x, y) (((x)+((y)-1))/(y))
-#endif
-#define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
-#define rounddown(x,y) (((x)/(y))*(y))
-#define powerof2(x) ((((x)-1)&(x))==0)
-
-///* Macros for min/max. */
-//#define MIN(a,b) (((a)<(b))?(a):(b))
-//#define MAX(a,b) (((a)>(b))?(a):(b))
-
-/*
- * Constants for setting the parameters of the kernel memory allocator.
- *
- * 2 ** MINBUCKET is the smallest unit of memory that will be
- * allocated. It must be at least large enough to hold a pointer.
- *
- * Units of memory less or equal to MAXALLOCSAVE will permanently
- * allocate physical memory; requests for these size pieces of
- * memory are quite fast. Allocations greater than MAXALLOCSAVE must
- * always allocate and free physical memory; requests for these
- * size allocations should be done infrequently as they will be slow.
- *
- * Constraints: NBPG <= MAXALLOCSAVE <= 2 ** (MINBUCKET + 14), and
- * MAXALLOCSAVE must be a power of two.
- */
-#ifdef _LP64
-#define MINBUCKET 5 /* 5 => min allocation of 32 bytes */
-#else
-#define MINBUCKET 4 /* 4 => min allocation of 16 bytes */
-#endif
-#define MAXALLOCSAVE (2 * NBPG)
-
-/*
- * Scale factor for scaled integers used to count %cpu time and load avgs.
- *
- * The number of CPU `tick's that map to a unique `%age' can be expressed
- * by the formula (1 / (2 ^ (FSHIFT - 11))). The maximum load average that
- * can be calculated (assuming 32 bits) can be closely approximated using
- * the formula (2 ^ (2 * (16 - FSHIFT))) for (FSHIFT < 15).
- *
- * For the scheduler to maintain a 1:1 mapping of CPU `tick' to `%age',
- * FSHIFT must be at least 11; this gives us a maximum load avg of ~1024.
- */
-#define FSHIFT 11 /* bits to right of fixed binary point */
-#define FSCALE (1<<FSHIFT)
-
-/*
- * The time for a process to be blocked before being very swappable.
- * This is a number of seconds which the system takes as being a non-trivial
- * amount of real time. You probably shouldn't change this;
- * it is used in subtle ways (fractions and multiples of it are, that is, like
- * half of a ``long time'', almost a long time, etc.)
- * It is related to human patience and other factors which don't really
- * change over time.
- */
-#define MAXSLP 20
-
-/*
- * Defaults for Unified Buffer Cache parameters.
- * These may be overridden in <machine/param.h>.
- */
-
-#ifndef UBC_WINSHIFT
-#define UBC_WINSHIFT 13
-#endif
-#ifndef UBC_NWINS
-#define UBC_NWINS 1024
-#endif
-
-#ifdef _KERNEL
-/*
- * macro to convert from milliseconds to hz without integer overflow
- * Default version using only 32bits arithmetics.
- * 64bit port can define 64bit version in their <machine/param.h>
- * 0x20000 is safe for hz < 20000
- */
-#ifndef mstohz
-#define mstohz(ms) \
- (__predict_false((ms) >= 0x20000) ? \
- ((ms +0u) / 1000u) * hz : \
- ((ms +0u) * hz) / 1000u)
-#endif
-#endif /* _KERNEL */
-
-#endif /* !_SYS_PARAM_H_ */
diff --git a/StdLib/Include/sys/poll.h b/StdLib/Include/sys/poll.h
deleted file mode 100644
index ead648d490..0000000000
--- a/StdLib/Include/sys/poll.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/** @file
- Definitions in support of the poll() function.
-
- * Copyright (c) 1998 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Charles M. Hannum.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- NetBSD: poll.h,v 1.11 2005/12/11 12:25:20 christos Exp
-**/
-#ifndef _SYS_POLL_H_
-#define _SYS_POLL_H_
-
-#include <sys/featuretest.h>
-#include <sys/EfiCdefs.h>
-
-typedef unsigned int nfds_t;
-
-struct pollfd {
- int fd; /* file descriptor */
- short events; /* events to look for */
- short revents; /* events returned */
-};
-
-/*
- * Testable events (may be specified in events field).
- */
-#define POLLIN 0x0001
-#define POLLPRI 0x0002
-#define POLLOUT 0x0004
-#define POLLRDNORM 0x0040
-#define POLLWRNORM POLLOUT
-#define POLLRDBAND 0x0080
-#define POLLWRBAND 0x0100
-
-/*
- * Non-testable events (ignored in events field, valid in return only).
- */
-#define POLLERR 0x0008
-#define POLLHUP 0x0010
-#define POLLNVAL 0x0020 // Invalid parameter in POLL call
-#define POLL_RETONLY (POLLERR | POLLHUP | POLLNVAL)
-
-/*
- * Infinite timeout value.
- */
-#define INFTIM -1
-
-__BEGIN_DECLS
-int poll(struct pollfd *, nfds_t, int);
-__END_DECLS
-
-#endif /* !_SYS_POLL_H_ */
diff --git a/StdLib/Include/sys/pool.h b/StdLib/Include/sys/pool.h
deleted file mode 100644
index 43c080a227..0000000000
--- a/StdLib/Include/sys/pool.h
+++ /dev/null
@@ -1,311 +0,0 @@
-/* $NetBSD: pool.h,v 1.54 2006/08/20 09:35:25 yamt Exp $ */
-
-/*-
- * Copyright (c) 1997, 1998, 1999, 2000 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Paul Kranenburg; by Jason R. Thorpe of the Numerical Aerospace
- * Simulation Facility, NASA Ames Research Center.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _SYS_POOL_H_
-#define _SYS_POOL_H_
-
-#ifdef _KERNEL
-#define __POOL_EXPOSE
-#endif
-
-#if defined(_KERNEL_OPT)
-#include "opt_pool.h"
-#endif
-
-#ifdef __POOL_EXPOSE
-#include <sys/lock.h>
-#include <sys/queue.h>
-#include <sys/time.h>
-#include <sys/tree.h>
-#if defined(_KERNEL)
-#include <sys/callback.h>
-#endif /* defined(_KERNEL) */
-#endif
-
-#define PCG_NOBJECTS 16
-
-#define POOL_PADDR_INVALID ((paddr_t) -1)
-
-#ifdef __POOL_EXPOSE
-/* The pool cache group. */
-struct pool_cache_group {
- LIST_ENTRY(pool_cache_group)
- pcg_list; /* link in the pool cache's group list */
- u_int pcg_avail; /* # available objects */
- /* pointers to the objects */
- struct {
- void *pcgo_va; /* cache object virtual address */
- paddr_t pcgo_pa;/* cache object physical address */
- } pcg_objects[PCG_NOBJECTS];
-};
-
-LIST_HEAD(pool_cache_grouplist,pool_cache_group);
-struct pool_cache {
- LIST_ENTRY(pool_cache)
- pc_poollist; /* entry on pool's group list */
- struct pool_cache_grouplist
- pc_emptygroups; /* list of empty cache groups */
- struct pool_cache_grouplist
- pc_fullgroups; /* list of full cache groups */
- struct pool_cache_grouplist
- pc_partgroups; /* list of partial cache groups */
- struct pool *pc_pool; /* parent pool */
- struct simplelock pc_slock; /* mutex */
-
- int (*pc_ctor)(void *, void *, int);
- void (*pc_dtor)(void *, void *);
- void *pc_arg;
-
- /* Statistics. */
- unsigned long pc_hits; /* cache hits */
- unsigned long pc_misses; /* cache misses */
-
- unsigned long pc_ngroups; /* # cache groups */
-
- unsigned long pc_nitems; /* # objects currently in cache */
-};
-
-struct pool_allocator {
- void *(*pa_alloc)(struct pool *, int);
- void (*pa_free)(struct pool *, void *);
- unsigned int pa_pagesz;
-
- /* The following fields are for internal use only. */
- struct simplelock pa_slock;
- TAILQ_HEAD(, pool) pa_list; /* list of pools using this allocator */
- int pa_flags;
-#define PA_INITIALIZED 0x01
- int pa_pagemask;
- int pa_pageshift;
- struct vm_map *pa_backingmap;
-#if defined(_KERNEL)
- struct vm_map **pa_backingmapptr;
- SLIST_ENTRY(pool_allocator) pa_q;
-#endif /* defined(_KERNEL) */
-};
-
-LIST_HEAD(pool_pagelist,pool_item_header);
-
-struct pool {
- LIST_ENTRY(pool)
- pr_poollist;
- struct pool_pagelist
- pr_emptypages; /* Empty pages */
- struct pool_pagelist
- pr_fullpages; /* Full pages */
- struct pool_pagelist
- pr_partpages; /* Partially-allocated pages */
- struct pool_item_header *pr_curpage;
- struct pool *pr_phpool; /* Pool item header pool */
- LIST_HEAD(,pool_cache)
- pr_cachelist; /* Caches for this pool */
- unsigned int pr_size; /* Size of item */
- unsigned int pr_align; /* Requested alignment, must be 2^n */
- unsigned int pr_itemoffset; /* Align this offset in item */
- unsigned int pr_minitems; /* minimum # of items to keep */
- unsigned int pr_minpages; /* same in page units */
- unsigned int pr_maxpages; /* maximum # of pages to keep */
- unsigned int pr_npages; /* # of pages allocated */
- unsigned int pr_itemsperpage;/* # items that fit in a page */
- unsigned int pr_slack; /* unused space in a page */
- unsigned int pr_nitems; /* number of available items in pool */
- unsigned int pr_nout; /* # items currently allocated */
- unsigned int pr_hardlimit; /* hard limit to number of allocated
- items */
- struct pool_allocator *pr_alloc;/* back-end allocator */
- TAILQ_ENTRY(pool) pr_alloc_list;/* link on allocator's pool list */
-
- /* Drain hook. */
- void (*pr_drain_hook)(void *, int);
- void *pr_drain_hook_arg;
-
- const char *pr_wchan; /* tsleep(9) identifier */
- unsigned int pr_flags; /* r/w flags */
- unsigned int pr_roflags; /* r/o flags */
-#define PR_NOWAIT 0x00 /* for symmetry */
-#define PR_WAITOK 0x02
-#define PR_WANTED 0x04
-#define PR_PHINPAGE 0x40
-#define PR_LOGGING 0x80
-#define PR_LIMITFAIL 0x100 /* even if waiting, fail if we hit limit */
-#define PR_RECURSIVE 0x200 /* pool contains pools, for vmstat(8) */
-#define PR_NOTOUCH 0x400 /* don't use free items to keep internal state*/
-#define PR_NOALIGN 0x800 /* don't assume backend alignment */
-
- /*
- * `pr_slock' protects the pool's data structures when removing
- * items from or returning items to the pool, or when reading
- * or updating read/write fields in the pool descriptor.
- *
- * We assume back-end page allocators provide their own locking
- * scheme. They will be called with the pool descriptor _unlocked_,
- * since the page allocators may block.
- */
- struct simplelock pr_slock;
-
- SPLAY_HEAD(phtree, pool_item_header) pr_phtree;
-
- int pr_maxcolor; /* Cache colouring */
- int pr_curcolor;
- int pr_phoffset; /* Offset in page of page header */
-
- /*
- * Warning message to be issued, and a per-time-delta rate cap,
- * if the hard limit is reached.
- */
- const char *pr_hardlimit_warning;
- struct timeval pr_hardlimit_ratecap;
- struct timeval pr_hardlimit_warning_last;
-
- /*
- * Instrumentation
- */
- unsigned long pr_nget; /* # of successful requests */
- unsigned long pr_nfail; /* # of unsuccessful requests */
- unsigned long pr_nput; /* # of releases */
- unsigned long pr_npagealloc; /* # of pages allocated */
- unsigned long pr_npagefree; /* # of pages released */
- unsigned int pr_hiwat; /* max # of pages in pool */
- unsigned long pr_nidle; /* # of idle pages */
-
- /*
- * Diagnostic aides.
- */
- struct pool_log *pr_log;
- int pr_curlogentry;
- int pr_logsize;
-
- const char *pr_entered_file; /* reentrancy check */
- long pr_entered_line;
-
-#if defined(_KERNEL)
- struct callback_entry pr_reclaimerentry;
-#endif
-};
-#endif /* __POOL_EXPOSE */
-
-#ifdef _KERNEL
-/*
- * pool_allocator_kmem is the default that all pools get unless
- * otherwise specified. pool_allocator_nointr is provided for
- * pools that know they will never be accessed in interrupt
- * context.
- */
-extern struct pool_allocator pool_allocator_kmem;
-extern struct pool_allocator pool_allocator_nointr;
-#ifdef POOL_SUBPAGE
-/* The above are subpage allocators in this case. */
-extern struct pool_allocator pool_allocator_kmem_fullpage;
-extern struct pool_allocator pool_allocator_nointr_fullpage;
-#endif
-
-struct link_pool_init { /* same as args to pool_init() */
- struct pool *pp;
- size_t size;
- u_int align;
- u_int align_offset;
- int flags;
- const char *wchan;
- struct pool_allocator *palloc;
-};
-#define POOL_INIT(pp, size, align, align_offset, flags, wchan, palloc) \
-struct pool pp; \
-static const struct link_pool_init _link_ ## pp[1] = { \
- { &pp, size, align, align_offset, flags, wchan, palloc } \
-}; \
-__link_set_add_rodata(pools, _link_ ## pp)
-
-void pool_subsystem_init(void);
-
-void pool_init(struct pool *, size_t, u_int, u_int,
- int, const char *, struct pool_allocator *);
-void pool_destroy(struct pool *);
-
-void pool_set_drain_hook(struct pool *,
- void (*)(void *, int), void *);
-
-void *pool_get(struct pool *, int);
-void pool_put(struct pool *, void *);
-int pool_reclaim(struct pool *);
-
-#ifdef POOL_DIAGNOSTIC
-/*
- * These versions do reentrancy checking.
- */
-void *_pool_get(struct pool *, int, const char *, long);
-void _pool_put(struct pool *, void *, const char *, long);
-int _pool_reclaim(struct pool *, const char *, long);
-#define pool_get(h, f) _pool_get((h), (f), __FILE__, __LINE__)
-#define pool_put(h, v) _pool_put((h), (v), __FILE__, __LINE__)
-#define pool_reclaim(h) _pool_reclaim((h), __FILE__, __LINE__)
-#endif /* POOL_DIAGNOSTIC */
-
-int pool_prime(struct pool *, int);
-void pool_setlowat(struct pool *, int);
-void pool_sethiwat(struct pool *, int);
-void pool_sethardlimit(struct pool *, int, const char *, int);
-void pool_drain(void *);
-
-/*
- * Debugging and diagnostic aides.
- */
-void pool_print(struct pool *, const char *);
-void pool_printit(struct pool *, const char *,
- void (*)(const char *, ...));
-void pool_printall(const char *, void (*)(const char *, ...));
-int pool_chk(struct pool *, const char *);
-
-/*
- * Pool cache routines.
- */
-void pool_cache_init(struct pool_cache *, struct pool *,
- int (*)(void *, void *, int),
- void (*)(void *, void *),
- void *);
-void pool_cache_destroy(struct pool_cache *);
-void *pool_cache_get_paddr(struct pool_cache *, int, paddr_t *);
-#define pool_cache_get(pc, f) pool_cache_get_paddr((pc), (f), NULL)
-void pool_cache_put_paddr(struct pool_cache *, void *, paddr_t);
-#define pool_cache_put(pc, o) pool_cache_put_paddr((pc), (o), \
- POOL_PADDR_INVALID)
-void pool_cache_destruct_object(struct pool_cache *, void *);
-void pool_cache_invalidate(struct pool_cache *);
-#endif /* _KERNEL */
-
-#endif /* _SYS_POOL_H_ */
diff --git a/StdLib/Include/sys/resource.h b/StdLib/Include/sys/resource.h
deleted file mode 100644
index c54c816cd6..0000000000
--- a/StdLib/Include/sys/resource.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/* $NetBSD: resource.h,v 1.29 2006/07/23 22:06:14 ad Exp $ */
-
-/*
- * Copyright (c) 1982, 1986, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)resource.h 8.4 (Berkeley) 1/9/95
- */
-
-#ifndef _SYS_RESOURCE_H_
-#define _SYS_RESOURCE_H_
-
-#include <sys/featuretest.h>
-#include <sys/time.h>
-
-/*
- * Process priority specifications to get/setpriority.
- */
-#define PRIO_MIN -20
-#define PRIO_MAX 20
-
-#define PRIO_PROCESS 0
-#define PRIO_PGRP 1
-#define PRIO_USER 2
-
-/*
- * Resource utilization information.
- */
-
-#define RUSAGE_SELF 0
-#define RUSAGE_CHILDREN -1
-
-struct rusage {
- struct timeval ru_utime; /* user time used */
- struct timeval ru_stime; /* system time used */
- long ru_maxrss; /* max resident set size */
-#ifdef _KERNEL
-#define ru_first ru_ixrss
-#endif
- long ru_ixrss; /* integral shared memory size */
- long ru_idrss; /* integral unshared data " */
- long ru_isrss; /* integral unshared stack " */
- long ru_minflt; /* page reclaims */
- long ru_majflt; /* page faults */
- long ru_nswap; /* swaps */
- long ru_inblock; /* block input operations */
- long ru_oublock; /* block output operations */
- long ru_msgsnd; /* messages sent */
- long ru_msgrcv; /* messages received */
- long ru_nsignals; /* signals received */
- long ru_nvcsw; /* voluntary context switches */
- long ru_nivcsw; /* involuntary " */
-#ifdef _KERNEL
-#define ru_last ru_nivcsw
-#endif
-};
-
-/*
- * Resource limits
- */
-#define RLIMIT_CPU 0 /* cpu time in milliseconds */
-#define RLIMIT_FSIZE 1 /* maximum file size */
-#define RLIMIT_DATA 2 /* data size */
-#define RLIMIT_STACK 3 /* stack size */
-#define RLIMIT_CORE 4 /* core file size */
-#define RLIMIT_RSS 5 /* resident set size */
-#define RLIMIT_MEMLOCK 6 /* locked-in-memory address space */
-#define RLIMIT_NPROC 7 /* number of processes */
-#define RLIMIT_NOFILE 8 /* number of open files */
-#define RLIMIT_SBSIZE 9 /* maximum size of all socket buffers */
-
-#if defined(_NETBSD_SOURCE)
-#define RLIM_NLIMITS 10 /* number of resource limits */
-#endif
-
-#define RLIM_INFINITY (~((u_quad_t)1 << 63)) /* no limit */
-#define RLIM_SAVED_MAX RLIM_INFINITY /* unrepresentable hard limit */
-#define RLIM_SAVED_CUR RLIM_INFINITY /* unrepresentable soft limit */
-
-#if defined(_KERNEL)
-/* 4.3BSD compatibility rlimit argument structure. */
-struct orlimit {
- int32_t rlim_cur; /* current (soft) limit */
- int32_t rlim_max; /* maximum value for rlim_cur */
-};
-#endif
-
-struct rlimit {
- rlim_t rlim_cur; /* current (soft) limit */
- rlim_t rlim_max; /* maximum value for rlim_cur */
-};
-
-#if defined(_NETBSD_SOURCE)
-/* Load average structure. */
-struct loadavg {
- fixpt_t ldavg[3];
- long fscale;
-};
-#endif
-
-#ifdef _KERNEL
-extern struct loadavg averunnable;
-struct pcred;
-int dosetrlimit(struct lwp *, struct proc *, int, struct rlimit *);
-int donice(struct lwp *, struct proc *, int);
-
-#else
-#include <sys/EfiCdefs.h>
-
-__BEGIN_DECLS
-int getpriority(int, id_t);
-int getrlimit(int, struct rlimit *);
-int getrusage(int, struct rusage *);
-int setpriority(int, id_t, int);
-int setrlimit(int, const struct rlimit *);
-__END_DECLS
-
-#endif /* _KERNEL */
-#endif /* !_SYS_RESOURCE_H_ */
diff --git a/StdLib/Include/sys/select.h b/StdLib/Include/sys/select.h
deleted file mode 100644
index 5166a0552f..0000000000
--- a/StdLib/Include/sys/select.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* $NetBSD: select.h,v 1.27 2006/02/16 20:17:20 perry Exp $ */
-
-/*-
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)select.h 8.2 (Berkeley) 1/4/94
- */
-
-#ifndef _SYS_SELECT_H_
-#define _SYS_SELECT_H_
-
-#include <sys/EfiCdefs.h>
-#include <sys/fd_set.h>
-
-#include <sys/sigtypes.h>
-#include <sys/time.h>
-#include <time.h>
-
-__BEGIN_DECLS
-int pselect(int, fd_set * __restrict, fd_set * __restrict,
- fd_set * __restrict, const struct timespec * __restrict,
- const sigset_t * __restrict);
-int select(int, fd_set * __restrict, fd_set * __restrict,
- fd_set * __restrict, struct timeval * __restrict);
-__END_DECLS
-
-#endif /* !_SYS_SELECT_H_ */
diff --git a/StdLib/Include/sys/signal.h b/StdLib/Include/sys/signal.h
deleted file mode 100644
index e93b2aba37..0000000000
--- a/StdLib/Include/sys/signal.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/** @file
-
- Implementation and Platform specific portion of <signal.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _SYS_SIGNAL_H
-#define _SYS_SIGNAL_H
-#include <sys/EfiCdefs.h>
-#include <machine/signal.h>
-
-/** The actual (default) signal numbers are assigned using an anonymous enum
- so that the compiler can do the work of assigning values. This helps
- ensure that the developer should never have to renumber the signals or
- figure out what number to assign to a new signal.
-
- Properly constructed programs will NEVER depend upon signal numbers being
- in a particular order or having a particular value. All that is guaranteed
- is that each signal number is distinct, positive, and non-zero.
-**/
-enum {
- __SigInt = 1,
- __SigIll,
- __SigAbrt,
- __SigFpe,
- __SigSegv,
- __SigTerm,
- __SigBreak,
- __SigAlrm,
- __SigVtAlrm,
- __SigProf,
- __SigUsr1,
- __SigUsr2,
- __SigWinch,
- __SigPipe,
- __SigQuit,
- __Sig_Last
-};
-
-/** The type of a signal handler function. **/
-typedef void __sighandler_t(int);
-
-__BEGIN_DECLS
-/** The signal function associates a "signal handler" with a signal number.
-
- For historical reasons; programs expect signal to be declared
- in <sys/signal.h>.
-
- @param[in] sig Signal number that function is to be associated with.
- @param[in] function The "handler" function to be associated with signal sig.
-
- @return If the request can be honored, the signal function returns the
- value of func for the most recent successful call to signal for
- the specified signal sig. Otherwise, a value of SIG_ERR is
- returned and a positive value is stored in errno.
- */
-__sighandler_t *signal(int sig, __sighandler_t *func);
-
-__END_DECLS
-
-#endif /* _SYS_SIGNAL_H */
diff --git a/StdLib/Include/sys/sigtypes.h b/StdLib/Include/sys/sigtypes.h
deleted file mode 100644
index c640296f49..0000000000
--- a/StdLib/Include/sys/sigtypes.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* $NetBSD: sigtypes.h,v 1.8 2005/12/11 12:25:21 christos Exp $ */
-
-/*
- * Copyright (c) 1982, 1986, 1989, 1991, 1993
- * The Regents of the University of California. All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)signal.h 8.4 (Berkeley) 5/4/95
- */
-
-#ifndef _SYS_SIGTYPES_H_
-#define _SYS_SIGTYPES_H_
-
-/*
- * This header file defines various signal-related types. We also keep
- * the macros to manipulate sigset_t here, to encapsulate knowledge of
- * its internals.
- */
-
-#include <sys/featuretest.h>
-#include <machine/int_types.h>
-#include <machine/ansi.h>
-
-#ifdef _EFI_SIZE_T_
- typedef _EFI_SIZE_T_ size_t;
- #undef _EFI_SIZE_T_
- #undef _BSD_SIZE_T_
-#endif
-
-#if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
- defined(_NETBSD_SOURCE)
-
-typedef struct {
- __uint32_t __bits[4];
-} sigset_t;
-
-/*
- * Macro for manipulating signal masks.
- */
-#define __sigmask(n) (1 << (((unsigned int)(n) - 1) & 31))
-#define __sigword(n) (((unsigned int)(n) - 1) >> 5)
-#define __sigaddset(s, n) ((s)->__bits[__sigword(n)] |= __sigmask(n))
-#define __sigdelset(s, n) ((s)->__bits[__sigword(n)] &= ~__sigmask(n))
-#define __sigismember(s, n) (((s)->__bits[__sigword(n)] & __sigmask(n)) != 0)
-#define __sigemptyset(s) ((s)->__bits[0] = 0x00000000, \
- (s)->__bits[1] = 0x00000000, \
- (s)->__bits[2] = 0x00000000, \
- (s)->__bits[3] = 0x00000000)
-#define __sigsetequal(s1,s2) ((s1)->__bits[0] == (s2)->__bits[0] && \
- (s1)->__bits[1] == (s2)->__bits[1] && \
- (s1)->__bits[2] == (s2)->__bits[2] && \
- (s1)->__bits[3] == (s2)->__bits[3])
-#define __sigfillset(s) ((s)->__bits[0] = 0xffffffff, \
- (s)->__bits[1] = 0xffffffff, \
- (s)->__bits[2] = 0xffffffff, \
- (s)->__bits[3] = 0xffffffff)
-#define __sigplusset(s, t) \
- do { \
- (t)->__bits[0] |= (s)->__bits[0]; \
- (t)->__bits[1] |= (s)->__bits[1]; \
- (t)->__bits[2] |= (s)->__bits[2]; \
- (t)->__bits[3] |= (s)->__bits[3]; \
- } while (/* CONSTCOND */ 0)
-#define __sigminusset(s, t) \
- do { \
- (t)->__bits[0] &= ~(s)->__bits[0]; \
- (t)->__bits[1] &= ~(s)->__bits[1]; \
- (t)->__bits[2] &= ~(s)->__bits[2]; \
- (t)->__bits[3] &= ~(s)->__bits[3]; \
- } while (/* CONSTCOND */ 0)
-#define __sigandset(s, t) \
- do { \
- (t)->__bits[0] &= (s)->__bits[0]; \
- (t)->__bits[1] &= (s)->__bits[1]; \
- (t)->__bits[2] &= (s)->__bits[2]; \
- (t)->__bits[3] &= (s)->__bits[3]; \
- } while (/* CONSTCOND */ 0)
-
-#if (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
- (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
-typedef struct
-#if defined(_NETBSD_SOURCE)
- sigaltstack
-#endif /* _NETBSD_SOURCE */
- {
- void *ss_sp; /* signal stack base */
- size_t ss_size; /* signal stack length */
- int ss_flags; /* SS_DISABLE and/or SS_ONSTACK */
-} stack_t;
-
-#endif /* _XOPEN_SOURCE_EXTENDED || XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
-
-#endif /* _POSIX_C_SOURCE || _XOPEN_SOURCE || ... */
-
-#endif /* !_SYS_SIGTYPES_H_ */
diff --git a/StdLib/Include/sys/socket.h b/StdLib/Include/sys/socket.h
deleted file mode 100644
index 11434ed641..0000000000
--- a/StdLib/Include/sys/socket.h
+++ /dev/null
@@ -1,571 +0,0 @@
-/* $NetBSD: socket.h,v 1.82 2006/06/27 03:49:08 mrg Exp $ */
-
-/*
- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Copyright (c) 1982, 1985, 1986, 1988, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)socket.h 8.6 (Berkeley) 5/3/95
- */
-
-#ifndef _SYS_SOCKET_H_
-#define _SYS_SOCKET_H_
-
-#include <sys/featuretest.h>
-
-/*
- * Definitions related to sockets: types, address families, options.
- */
-
-/*
- * Data types.
- */
-#include <sys/ansi.h>
-
-#ifndef sa_family_t
-typedef __sa_family_t sa_family_t;
-#define sa_family_t __sa_family_t
-#endif
-
-#ifndef socklen_t
-typedef __socklen_t socklen_t;
-#define socklen_t __socklen_t
-#endif
-
-#include <machine/ansi.h>
-
-#ifdef _EFI_SIZE_T_
-typedef _EFI_SIZE_T_ size_t;
-#undef _EFI_SIZE_T_
-#undef _BSD_SIZE_T_
-#endif
-
-#ifdef _BSD_SSIZE_T_
-typedef _BSD_SSIZE_T_ ssize_t;
-#undef _BSD_SSIZE_T_
-#endif
-
-#include <sys/uio.h>
-
-/*
- * Socket types.
- */
-#define SOCK_STREAM 1 /* stream socket */
-#define SOCK_DGRAM 2 /* datagram socket */
-#define SOCK_RAW 3 /* raw-protocol interface */
-#define SOCK_RDM 4 /* reliably-delivered message */
-#define SOCK_SEQPACKET 5 /* sequenced packet stream */
-
-/*
- * Option flags per-socket.
- */
-#define SO_DEBUG 0x0001 /* turn on debugging info recording */
-#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */
-#define SO_REUSEADDR 0x0004 /* allow local address reuse */
-#define SO_KEEPALIVE 0x0008 /* keep connections alive */
-#define SO_DONTROUTE 0x0010 /* just use interface addresses */
-#define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */
-#define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */
-#define SO_LINGER 0x0080 /* linger on close if data present */
-#define SO_OOBINLINE 0x0100 /* leave received OOB data in line */
-#define SO_REUSEPORT 0x0200 /* allow local address & port reuse */
-#define SO_TIMESTAMP 0x0400 /* timestamp received dgram traffic */
-
-
-/*
- * Additional options, not kept in so_options.
- */
-#define SO_SNDBUF 0x1001 /* send buffer size */
-#define SO_RCVBUF 0x1002 /* receive buffer size */
-#define SO_SNDLOWAT 0x1003 /* send low-water mark */
-#define SO_RCVLOWAT 0x1004 /* receive low-water mark */
-#define SO_SNDTIMEO 0x1005 /* send timeout */
-#define SO_RCVTIMEO 0x1006 /* receive timeout */
-#define SO_ERROR 0x1007 /* get error status and clear */
-#define SO_TYPE 0x1008 /* get socket type */
-#define SO_OVERFLOWED 0x1009 /* datagrams: return packets dropped */
-
-/*
- * Structure used for manipulating linger option.
- */
-struct linger {
- int l_onoff; /* option on/off */
- int l_linger; /* linger time in seconds */
-};
-
-/*
- * Level number for (get/set)sockopt() to apply to socket itself.
- */
-#define SOL_SOCKET 0xffff /* options for socket level */
-
-/*
- * Address families.
- */
-#define AF_UNSPEC 0 /* unspecified */
-#define AF_LOCAL 1 /* local to host (pipes, portals) */
-#define AF_UNIX AF_LOCAL /* backward compatibility */
-#define AF_INET 2 /* internetwork: UDP, TCP, etc. */
-#define AF_IMPLINK 3 /* arpanet imp addresses */
-#define AF_PUP 4 /* pup protocols: e.g. BSP */
-#define AF_CHAOS 5 /* mit CHAOS protocols */
-#define AF_NS 6 /* XEROX NS protocols */
-#define AF_ISO 7 /* ISO protocols */
-#define AF_OSI AF_ISO
-#define AF_ECMA 8 /* european computer manufacturers */
-#define AF_DATAKIT 9 /* datakit protocols */
-#define AF_CCITT 10 /* CCITT protocols, X.25 etc */
-#define AF_SNA 11 /* IBM SNA */
-#define AF_DECnet 12 /* DECnet */
-#define AF_DLI 13 /* DEC Direct data link interface */
-#define AF_LAT 14 /* LAT */
-#define AF_HYLINK 15 /* NSC Hyperchannel */
-#define AF_APPLETALK 16 /* Apple Talk */
-#define AF_ROUTE 17 /* Internal Routing Protocol */
-#define AF_LINK 18 /* Link layer interface */
-#if defined(_NETBSD_SOURCE)
-#define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */
-#endif
-#define AF_COIP 20 /* connection-oriented IP, aka ST II */
-#define AF_CNT 21 /* Computer Network Technology */
-#if defined(_NETBSD_SOURCE)
-#define pseudo_AF_RTIP 22 /* Help Identify RTIP packets */
-#endif
-#define AF_IPX 23 /* Novell Internet Protocol */
-#define AF_INET6 24 /* IP version 6 */
-#if defined(_NETBSD_SOURCE)
-#define pseudo_AF_PIP 25 /* Help Identify PIP packets */
-#endif
-#define AF_ISDN 26 /* Integrated Services Digital Network*/
-#define AF_E164 AF_ISDN /* CCITT E.164 recommendation */
-#define AF_NATM 27 /* native ATM access */
-#define AF_ARP 28 /* (rev.) addr. res. prot. (RFC 826) */
-#if defined(_NETBSD_SOURCE)
-#define pseudo_AF_KEY 29 /* Internal key management protocol */
-#define pseudo_AF_HDRCMPLT 30 /* Used by BPF to not rewrite hdrs
- in interface output routine */
-#endif
-#define AF_BLUETOOTH 31
-
-#define AF_MAX 32
-
-/*
- * Structure used by kernel to store most
- * addresses.
- */
-struct sockaddr {
- __uint8_t sa_len; /* total length */
- sa_family_t sa_family; /* address family */
- char sa_data[14]; /* actually longer; address value */
-};
-
-#if defined(_KERNEL)
-/*
- * Structure used by kernel to pass protocol
- * information in raw sockets.
- */
-struct sockproto {
- u_short sp_family; /* address family */
- u_short sp_protocol; /* protocol */
-};
-#endif /* _KERNEL */
-
-#if 1
-/*
- * RFC 2553: protocol-independent placeholder for socket addresses
- */
-#define _SS_MAXSIZE 128
-#define _SS_ALIGNSIZE (sizeof(__int64_t))
-#define _SS_PAD1SIZE (_SS_ALIGNSIZE - 2)
-#define _SS_PAD2SIZE (_SS_MAXSIZE - 2 - \
- _SS_PAD1SIZE - _SS_ALIGNSIZE)
-
-#if (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
-struct sockaddr_storage {
- __uint8_t ss_len; /* address length */
- sa_family_t ss_family; /* address family */
- char __ss_pad1[_SS_PAD1SIZE];
- __int64_t __ss_align;/* force desired structure storage alignment */
- char __ss_pad2[_SS_PAD2SIZE];
-};
-#endif /* _XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
-#endif /* 1 */
-
-/*
- * Protocol families, same as address families for now.
- */
-#define PF_UNSPEC AF_UNSPEC
-#define PF_LOCAL AF_LOCAL
-#define PF_UNIX PF_LOCAL /* backward compatibility */
-#define PF_INET AF_INET
-#define PF_IMPLINK AF_IMPLINK
-#define PF_PUP AF_PUP
-#define PF_CHAOS AF_CHAOS
-#define PF_NS AF_NS
-#define PF_ISO AF_ISO
-#define PF_OSI AF_ISO
-#define PF_ECMA AF_ECMA
-#define PF_DATAKIT AF_DATAKIT
-#define PF_CCITT AF_CCITT
-#define PF_SNA AF_SNA
-#define PF_DECnet AF_DECnet
-#define PF_DLI AF_DLI
-#define PF_LAT AF_LAT
-#define PF_HYLINK AF_HYLINK
-#define PF_APPLETALK AF_APPLETALK
-#define PF_ROUTE AF_ROUTE
-#define PF_LINK AF_LINK
-#if defined(_NETBSD_SOURCE)
-#define PF_XTP pseudo_AF_XTP /* really just proto family, no AF */
-#endif
-#define PF_COIP AF_COIP
-#define PF_CNT AF_CNT
-#define PF_INET6 AF_INET6
-#define PF_IPX AF_IPX /* same format as AF_NS */
-#if defined(_NETBSD_SOURCE)
-#define PF_RTIP pseudo_AF_RTIP /* same format as AF_INET */
-#define PF_PIP pseudo_AF_PIP
-#endif
-#define PF_ISDN AF_ISDN /* same as E164 */
-#define PF_E164 AF_E164
-#define PF_NATM AF_NATM
-#define PF_ARP AF_ARP
-#if defined(_NETBSD_SOURCE)
-#define PF_KEY pseudo_AF_KEY /* like PF_ROUTE, only for key mgmt */
-#endif
-#define PF_BLUETOOTH AF_BLUETOOTH
-
-#define PF_MAX AF_MAX
-
-#if defined(_NETBSD_SOURCE)
-
-#ifndef gid_t
-typedef __gid_t gid_t; /* group id */
-#define gid_t __gid_t
-#endif
-
-#ifndef uid_t
-typedef __uid_t uid_t; /* user id */
-#define uid_t __uid_t
-#endif
-
-/*
- * Socket credentials.
- */
-struct sockcred {
- uid_t sc_uid; /* real user id */
- uid_t sc_euid; /* effective user id */
- gid_t sc_gid; /* real group id */
- gid_t sc_egid; /* effective group id */
- int sc_ngroups; /* number of supplemental groups */
- gid_t sc_groups[1]; /* variable length */
-};
-
-/*
- * Compute size of a sockcred structure with groups.
- */
-#define SOCKCREDSIZE(ngrps) \
- (sizeof(struct sockcred) + (sizeof(gid_t) * ((ngrps) - 1)))
-#endif /* _NETBSD_SOURCE */
-
-
-#if defined(_NETBSD_SOURCE)
-/*
- * Definitions for network related sysctl, CTL_NET.
- *
- * Second level is protocol family.
- * Third level is protocol number.
- *
- * Further levels are defined by the individual families below.
- */
-#define NET_MAXID AF_MAX
-
-#define CTL_NET_NAMES { \
- { 0, 0 }, \
- { "local", CTLTYPE_NODE }, \
- { "inet", CTLTYPE_NODE }, \
- { "implink", CTLTYPE_NODE }, \
- { "pup", CTLTYPE_NODE }, \
- { "chaos", CTLTYPE_NODE }, \
- { "xerox_ns", CTLTYPE_NODE }, \
- { "iso", CTLTYPE_NODE }, \
- { "emca", CTLTYPE_NODE }, \
- { "datakit", CTLTYPE_NODE }, \
- { "ccitt", CTLTYPE_NODE }, \
- { "ibm_sna", CTLTYPE_NODE }, \
- { "decnet", CTLTYPE_NODE }, \
- { "dec_dli", CTLTYPE_NODE }, \
- { "lat", CTLTYPE_NODE }, \
- { "hylink", CTLTYPE_NODE }, \
- { "appletalk", CTLTYPE_NODE }, \
- { "route", CTLTYPE_NODE }, \
- { "link_layer", CTLTYPE_NODE }, \
- { "xtp", CTLTYPE_NODE }, \
- { "coip", CTLTYPE_NODE }, \
- { "cnt", CTLTYPE_NODE }, \
- { "rtip", CTLTYPE_NODE }, \
- { "ipx", CTLTYPE_NODE }, \
- { "inet6", CTLTYPE_NODE }, \
- { "pip", CTLTYPE_NODE }, \
- { "isdn", CTLTYPE_NODE }, \
- { "natm", CTLTYPE_NODE }, \
- { "arp", CTLTYPE_NODE }, \
- { "key", CTLTYPE_NODE }, \
-}
-
-struct kinfo_pcb {
- __uint64_t ki_pcbaddr; /* PTR: pcb addr */
- __uint64_t ki_ppcbaddr; /* PTR: ppcb addr */
- __uint64_t ki_sockaddr; /* PTR: socket addr */
-
- __uint32_t ki_family; /* INT: protocol family */
- __uint32_t ki_type; /* INT: socket type */
- __uint32_t ki_protocol; /* INT: protocol */
- __uint32_t ki_pflags; /* INT: generic protocol flags */
-
- __uint32_t ki_sostate; /* INT: socket state */
- __uint32_t ki_prstate; /* INT: protocol state */
- __int32_t ki_tstate; /* INT: tcp state */
- __uint32_t ki_tflags; /* INT: tcp flags */
-
- __uint64_t ki_rcvq; /* U_LONG: receive queue len */
- __uint64_t ki_sndq; /* U_LONG: send queue len */
-
- union {
- struct sockaddr _kis_src; /* STRUCT: local address */
- char _kis_pad[256 + 8]; /* pad to max addr length */
- } ki_s;
- union {
- struct sockaddr _kid_dst; /* STRUCT: remote address */
- char _kid_pad[256 + 8]; /* pad to max addr length */
- } ki_d;
-
- __uint64_t ki_inode; /* INO_T: fake inode number */
- __uint64_t ki_vnode; /* PTR: if associated with file */
- __uint64_t ki_conn; /* PTR: control block of peer */
- __uint64_t ki_refs; /* PTR: referencing socket */
- __uint64_t ki_nextref; /* PTR: link in refs list */
-};
-
-#define ki_src ki_s._kis_src
-#define ki_dst ki_d._kid_dst
-
-#define PCB_SLOP 20
-#define PCB_ALL 0
-
-#endif /* _NETBSD_SOURCE */
-
-#if defined(_NETBSD_SOURCE)
-/*
- * PF_ROUTE - Routing table
- *
- * Three additional levels are defined:
- * Fourth: address family, 0 is wildcard
- * Fifth: type of info, defined below
- * Sixth: flag(s) to mask with for NET_RT_FLAGS
- */
-#define NET_RT_DUMP 1 /* dump; may limit to a.f. */
-#define NET_RT_FLAGS 2 /* by flags, e.g. RESOLVING */
-#define NET_RT_OIFLIST 3 /* old NET_RT_IFLIST (pre 1.5) */
-#define NET_RT_IFLIST 4 /* survey interface list */
-#define NET_RT_MAXID 5
-
-#define CTL_NET_RT_NAMES { \
- { 0, 0 }, \
- { "dump", CTLTYPE_STRUCT }, \
- { "flags", CTLTYPE_STRUCT }, \
- { 0, 0 }, \
- { "iflist", CTLTYPE_STRUCT }, \
-}
-#endif /* _NETBSD_SOURCE */
-
-/*
- * Maximum queue length specifiable by listen(2).
- */
-#ifndef SOMAXCONN
-#define SOMAXCONN 128
-#endif
-
-/*
- * Message header for recvmsg and sendmsg calls.
- * Used value-result for recvmsg, value only for sendmsg.
- */
-struct msghdr {
- void *msg_name; /* optional address */
- socklen_t msg_namelen; /* size of address */
- struct iovec *msg_iov; /* scatter/gather array */
- int msg_iovlen; /* # elements in msg_iov */
- void *msg_control; /* ancillary data, see below */
- socklen_t msg_controllen; /* ancillary data buffer len */
- int msg_flags; /* flags on received message */
-};
-
-#define MSG_OOB 0x0001 /* process out-of-band data */
-#define MSG_PEEK 0x0002 /* peek at incoming message */
-#define MSG_DONTROUTE 0x0004 /* send without using routing tables */
-#define MSG_EOR 0x0008 /* data completes record */
-#define MSG_TRUNC 0x0010 /* data discarded before delivery */
-#define MSG_CTRUNC 0x0020 /* control data lost before delivery */
-#define MSG_WAITALL 0x0040 /* wait for full request or error */
-#define MSG_DONTWAIT 0x0080 /* this message should be nonblocking */
-#define MSG_BCAST 0x0100 /* this message was rcvd using link-level brdcst */
-#define MSG_MCAST 0x0200 /* this message was rcvd using link-level mcast */
-#define MSG_NOSIGNAL 0x0400 /* do not generate SIGPIPE on EOF */
-
-/*
- * Header for ancillary data objects in msg_control buffer.
- * Used for additional information with/about a datagram
- * not expressible by flags. The format is a sequence
- * of message elements headed by cmsghdr structures.
- */
-struct cmsghdr {
- socklen_t cmsg_len; /* data byte count, including hdr */
- int cmsg_level; /* originating protocol */
- int cmsg_type; /* protocol-specific type */
-/* followed by u_char cmsg_data[]; */
-};
-
-/* given pointer to struct cmsghdr, return pointer to data */
-#define CMSG_DATA(cmsg) \
- ((u_char *)(void *)(cmsg) + __CMSG_ALIGN(sizeof(struct cmsghdr)))
-#define CCMSG_DATA(cmsg) \
- ((const u_char *)(const void *)(cmsg) + \
- __CMSG_ALIGN(sizeof(struct cmsghdr)))
-
-/*
- * Alignment requirement for CMSG struct manipulation.
- * This basically behaves the same as ALIGN() ARCH/include/param.h.
- * We declare it separately for two reasons:
- * (1) avoid dependency between machine/param.h, and (2) to sync with kernel's
- * idea of ALIGNBYTES at runtime.
- * without (2), we can't guarantee binary compatibility in case of future
- * changes in ALIGNBYTES.
- */
-#define __CMSG_ALIGN(n) (((n) + __cmsg_alignbytes()) & ~__cmsg_alignbytes())
-#ifdef _KERNEL
-#define CMSG_ALIGN(n) __CMSG_ALIGN(n)
-#endif
-
-/* given pointer to struct cmsghdr, return pointer to next cmsghdr */
-#define CMSG_NXTHDR(mhdr, cmsg) \
- (((__caddr_t)(cmsg) + __CMSG_ALIGN((cmsg)->cmsg_len) + \
- __CMSG_ALIGN(sizeof(struct cmsghdr)) > \
- (((__caddr_t)(mhdr)->msg_control) + (mhdr)->msg_controllen)) ? \
- (struct cmsghdr *)0 : \
- (struct cmsghdr *)((__caddr_t)(cmsg) + \
- __CMSG_ALIGN((cmsg)->cmsg_len)))
-
-/*
- * RFC 2292 requires to check msg_controllen, in case that the kernel returns
- * an empty list for some reasons.
- */
-#define CMSG_FIRSTHDR(mhdr) \
- ((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \
- (struct cmsghdr *)(mhdr)->msg_control : \
- (struct cmsghdr *)0)
-
-#define CMSG_SPACE(l) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + __CMSG_ALIGN(l))
-#define CMSG_LEN(l) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + (l))
-
-/* "Socket"-level control message types: */
-#define SCM_RIGHTS 0x01 /* access rights (array of int) */
-#if defined(_NETBSD_SOURCE)
-#define SCM_TIMESTAMP 0x02 /* timestamp (struct timeval) */
-#define SCM_CREDS 0x04 /* credentials (struct sockcred) */
-#endif
-
-/*
- * Types of socket shutdown(2).
- */
-#define SHUT_RD 0 /* Disallow further receives. */
-#define SHUT_WR 1 /* Disallow further sends. */
-#define SHUT_RDWR 2 /* Disallow further sends/receives. */
-
-#include <sys/EfiCdefs.h>
-
-__BEGIN_DECLS
-int __cmsg_alignbytes(void);
-__END_DECLS
-
-#ifndef _KERNEL
-
-__BEGIN_DECLS
-int accept(int, struct sockaddr * __restrict, socklen_t * __restrict);
-int bind(int, const struct sockaddr *, socklen_t);
-int connect(int, const struct sockaddr *, socklen_t);
-int getpeername(int, struct sockaddr * __restrict, socklen_t * __restrict);
-int getsockname(int, struct sockaddr * __restrict, socklen_t * __restrict);
-int getsockopt(int, int, int, void * __restrict, socklen_t * __restrict);
-int listen(int, int);
-ssize_t recv(int, void *, size_t, int);
-ssize_t recvfrom(int, void * __restrict, size_t, int,
- struct sockaddr * __restrict, socklen_t * __restrict);
-ssize_t recvmsg(int, struct msghdr *, int);
-ssize_t send(int, const void *, size_t, int);
-ssize_t sendto(int, const void *,
- size_t, int, const struct sockaddr *, socklen_t);
-ssize_t sendmsg(int, const struct msghdr *, int);
-int setsockopt(int, int, int, const void *, socklen_t);
-int shutdown(int, int);
-int sockatmark(int);
-int socket(int, int, int)
-#if !defined(__LIBC12_SOURCE__) && !defined(_STANDALONE)
-__RENAME(__socket30)
-#endif
- ;
-int socketpair(int, int, int, int *);
-__END_DECLS
-#endif /* !_KERNEL */
-
-#endif /* !_SYS_SOCKET_H_ */
diff --git a/StdLib/Include/sys/sockio.h b/StdLib/Include/sys/sockio.h
deleted file mode 100644
index 5711ed2014..0000000000
--- a/StdLib/Include/sys/sockio.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*-
- * Copyright (c) 1982, 1986, 1990, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by the University of
- * California, Berkeley, Intel Corporation, and its contributors.
- *
- * 4. Neither the name of University, Intel Corporation, or their respective
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
- * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * @(#)sockio.h 8.1 (Berkeley) 3/28/94
- * $Id: sockio.h,v 1.1.1.1 2006/05/30 06:12:59 hhzhou Exp $
- */
-
-#ifndef _SYS_SOCKIO_H_
-#define _SYS_SOCKIO_H_
-
-#include <sys/ioccom.h>
-
-/* Socket ioctl's. */
-#define SIOCSHIWAT _IOW('s', 0, int) /* set high watermark */
-#define SIOCGHIWAT _IOR('s', 1, int) /* get high watermark */
-#define SIOCSLOWAT _IOW('s', 2, int) /* set low watermark */
-#define SIOCGLOWAT _IOR('s', 3, int) /* get low watermark */
-#define SIOCATMARK _IOR('s', 7, int) /* at oob mark? */
-#define SIOCSPGRP _IOW('s', 8, int) /* set process group */
-#define SIOCGPGRP _IOR('s', 9, int) /* get process group */
-#ifndef _ORG_FREEBSD_
-#define SIOCUPCALL _IOW('s', 10, struct upcall_req)/* register upcall req */
-#endif
-
-#define SIOCADDRT _IOW('r', 10, struct ortentry) /* add route */
-#define SIOCDELRT _IOW('r', 11, struct ortentry) /* delete route */
-#define SIOCGETVIFCNT _IOWR('r', 15, struct sioc_vif_req)/* get vif pkt cnt */
-#define SIOCGETSGCNT _IOWR('r', 16, struct sioc_sg_req) /* get s,g pkt cnt */
-
-#define SIOCSIFADDR _IOW('i', 12, struct ifreq) /* set ifnet address */
-#define OSIOCGIFADDR _IOWR('i', 13, struct ifreq) /* get ifnet address */
-#define SIOCGIFADDR _IOWR('i', 33, struct ifreq) /* get ifnet address */
-#define SIOCSIFDSTADDR _IOW('i', 14, struct ifreq) /* set p-p address */
-#define OSIOCGIFDSTADDR _IOWR('i', 15, struct ifreq) /* get p-p address */
-#define SIOCGIFDSTADDR _IOWR('i', 34, struct ifreq) /* get p-p address */
-#define SIOCSIFFLAGS _IOW('i', 16, struct ifreq) /* set ifnet flags */
-#define SIOCGIFFLAGS _IOWR('i', 17, struct ifreq) /* get ifnet flags */
-#define OSIOCGIFBRDADDR _IOWR('i', 18, struct ifreq) /* get broadcast addr */
-#define SIOCGIFBRDADDR _IOWR('i', 35, struct ifreq) /* get broadcast addr */
-#define SIOCSIFBRDADDR _IOW('i', 19, struct ifreq) /* set broadcast addr */
-#define OSIOCGIFCONF _IOWR('i', 20, struct ifconf) /* get ifnet list */
-#define SIOCGIFCONF _IOWR('i', 36, struct ifconf) /* get ifnet list */
-#define OSIOCGIFNETMASK _IOWR('i', 21, struct ifreq) /* get net addr mask */
-#define SIOCGIFNETMASK _IOWR('i', 37, struct ifreq) /* get net addr mask */
-#define SIOCSIFNETMASK _IOW('i', 22, struct ifreq) /* set net addr mask */
-#define SIOCGIFMETRIC _IOWR('i', 23, struct ifreq) /* get IF metric */
-#define SIOCSIFMETRIC _IOW('i', 24, struct ifreq) /* set IF metric */
-#define SIOCDIFADDR _IOW('i', 25, struct ifreq) /* delete IF addr */
-#define SIOCAIFADDR _IOW('i', 26, struct ifaliasreq)/* add/chg IF alias */
-
-#define SIOCADDMULTI _IOW('i', 49, struct ifreq) /* add m'cast addr */
-#define SIOCDELMULTI _IOW('i', 50, struct ifreq) /* del m'cast addr */
-#define SIOCGIFMTU _IOWR('i', 51, struct ifreq) /* get IF mtu */
-#define SIOCSIFMTU _IOW('i', 52, struct ifreq) /* set IF mtu */
-#define SIOCGIFPHYS _IOWR('i', 53, struct ifreq) /* get IF wire */
-#define SIOCSIFPHYS _IOW('i', 54, struct ifreq) /* set IF wire */
-#define SIOCSIFMEDIA _IOWR('i', 55, struct ifreq) /* set net media */
-#define SIOCGIFMEDIA _IOWR('i', 56, struct ifmediareq) /* get net media */
-#define SIOCSIFGENERIC _IOW('i', 57, struct ifreq) /* generic IF set op */
-#define SIOCGIFGENERIC _IOWR('i', 58, struct ifreq) /* generic IF get op */
-
-#endif /* !_SYS_SOCKIO_H_ */
diff --git a/StdLib/Include/sys/stat.h b/StdLib/Include/sys/stat.h
deleted file mode 100644
index 83fc58025a..0000000000
--- a/StdLib/Include/sys/stat.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/** @file
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made
- available under the terms and conditions of the BSD License that
- accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1982, 1986, 1989, 1993
- The Regents of the University of California. All rights reserved.
- (c) UNIX System Laboratories, Inc.
- All or some portions of this file are derived from material licensed
- to the University of California by American Telephone and Telegraph
- Co. or Unix System Laboratories, Inc. and are reproduced herein with
- the permission of UNIX System Laboratories, Inc.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- stat.h 8.12 (Berkeley) 8/17/94
- NetBSD: stat.h,v 1.54 2006/02/24 22:01:30 thorpej Exp
- */
-#ifndef _SYS_STAT_H_
-#define _SYS_STAT_H_
-
-#include <sys/featuretest.h>
-#include <sys/types.h>
-#include <sys/time.h>
-
-struct stat {
- off_t st_size; ///< file size, in bytes
- off_t st_physsize; ///< physical space the file consumes
- off_t st_curpos; ///< current position within the file, or XY coord. for Console
- dtime_t st_birthtime; ///< time of creation
- dtime_t st_atime; ///< time of last access
- dtime_t st_mtime; ///< time of last data modification
- mode_t st_mode; ///< file attributes
-
- blksize_t st_blksize; ///< optimal blocksize for I/O
- uint32_t st_spare[1];
-};
-
-#define S_ISUID 0004000 ///< set user id on execution
-#define S_ISGID 0002000 ///< set group id on execution
-#define S_ISTXT 0001000 ///< sticky bit
-
-#define S_IRWXU 0000700 ///< RWX mask for owner
-#define S_IRUSR 0000400 ///< R for owner
-#define S_IWUSR 0000200 ///< W for owner
-#define S_IXUSR 0000100 ///< X for owner
-
-#define S_IREAD S_IRUSR
-#define S_IWRITE S_IWUSR
-#define S_IEXEC S_IXUSR
-
-#define S_IRWXG 0000070 ///< RWX mask for group
-#define S_IRGRP 0000040 ///< R for group
-#define S_IWGRP 0000020 ///< W for group
-#define S_IXGRP 0000010 ///< X for group
-
-#define S_IRWXO 0000007 ///< RWX mask for other
-#define S_IROTH 0000004 ///< R for other
-#define S_IWOTH 0000002 ///< W for other
-#define S_IXOTH 0000001 ///< X for other
-
-/* The Octal access modes, above, fall into the Hex mask 0x00000FFF.
- Traditionally, the remainder of the flags are specified in Octal
- but they are expressed in Hex here for modern clarity.
-
- The basic file types, specified within 0x0000F000, are mutually exclusive.
-*/
-#define _S_IFMT 0x000FF000 ///< type-of-file mask
-#define _S_IFIFO 0x00001000 ///< named pipe (fifo)
-#define _S_IFCHR 0x00002000 ///< character special device
-#define _S_IFDIR 0x00004000 ///< directory
-#define _S_IFBLK 0x00006000 ///< block special device
-#define _S_IFREG 0x00008000 ///< regular
-#define _S_IFSOCK 0x0000C000 ///< socket
-#define _S_ITTY 0x00010000 ///< File connects to a TTY device
-#define _S_IWTTY 0x00020000 ///< TTY sends and receives Wide characters
-#define _S_ICONSOLE 0x00030000 ///< UEFI Console Device
-
-/* UEFI specific (FAT file system) File attributes.
- Specified in Hexadecimal instead of Octal.
- These bits correspond to the xx portion of _S_IFMT
-*/
-#define S_IREADONLY 0x00100000 // Read Only File
-#define S_IHIDDEN 0x00200000 // Hidden File
-#define S_ISYSTEM 0x00400000 // System File
-#define S_IDIRECTORY 0x01000000 // Directory
-#define S_IARCHIVE 0x02000000 // Archive Bit
-#define S_IROFS 0x08000000 ///< Read Only File System
-
-#define S_EFIONLY 0xFFF00000 ///< Flags only used by the EFI system calls.
-
-#define S_EFISHIFT 20 // LS bit of the UEFI attributes
-
-#define S_IFMT _S_IFMT
-#define S_IFIFO _S_IFIFO
-#define S_IFCHR _S_IFCHR
-#define S_IFDIR _S_IFDIR
-#define S_IFBLK _S_IFBLK
-#define S_IFREG _S_IFREG
-#define S_IFSOCK _S_IFSOCK
-#define S_ITTY _S_ITTY
-#define S_IWTTY _S_IWTTY
-#define S_ICONSOLE _S_ICONSOLE
-
-#define S_ISFIFO(m) ((m & _S_IFMT) == _S_IFIFO) ///< fifo
-#define S_ISCHR(m) ((m & _S_IFMT) == _S_IFCHR) ///< char special
-#define S_ISDIR(m) ((m & _S_IFMT) == _S_IFDIR) ///< directory
-#define S_ISBLK(m) ((m & _S_IFMT) == _S_IFBLK) ///< block special
-#define S_ISREG(m) ((m & _S_IFMT) == _S_IFREG) ///< regular file
-#define S_ISSOCK(m) ((m & _S_IFMT) == _S_IFSOCK) ///< socket
-
-
-/* The following three macros have been changed to reflect
- access permissions that better reflect the UEFI FAT file system.
- UEFI only supports Read or Read+Write instead of the *nix
- rwx paradigm. Thus, using 0777 is the closest analog.
-*/
-#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) ///< 0777
-#define ALLPERMS (S_IRWXU|S_IRWXG|S_IRWXO) ///< 0777
-#define DEFFILEMODE (S_IRWXU|S_IRWXG|S_IRWXO) ///< 0777
-
-#define READ_PERMS (S_IRUSR | S_IRGRP | S_IROTH) ///< 0444
-#define WRITE_PERMS (S_IWUSR | S_IWGRP | S_IWOTH) ///< 0222
-#define EXEC_PERMS (S_IXUSR | S_IXGRP | S_IXOTH) ///< 0111
-
-#define S_BLKSIZE 512 ///< block size used in the stat struct
-
-/*
- * Definitions of flags stored in file flags word.
- *
- * Super-user and owner changeable flags.
- */
-#define UF_SETTABLE 0x0000ffff ///< mask of owner changeable flags
-#define UF_NODUMP 0x00000001 ///< do not dump file
-#define UF_IMMUTABLE 0x00000002 ///< file may not be changed
-#define UF_APPEND 0x00000004 ///< writes to file may only append
-/* UF_NOUNLINK 0x00000010 [NOT IMPLEMENTED] */
-/*
- * Super-user changeable flags.
- */
-#define SF_SETTABLE 0xffff0000 ///< mask of superuser changeable flags
-#define SF_ARCHIVED 0x00010000 ///< file is archived
-#define SF_IMMUTABLE 0x00020000 ///< file may not be changed
-#define SF_APPEND 0x00040000 ///< writes to file may only append
-/* SF_NOUNLINK 0x00100000 [NOT IMPLEMENTED] */
-
-#include <sys/EfiCdefs.h>
-
-__BEGIN_DECLS
-#ifndef __STAT_SYSCALLS_DECLARED
- #define __STAT_SYSCALLS_DECLARED
-
- /**
- **/
- mode_t umask (mode_t);
-
- /**
- **/
- int mkdir (const char *, mode_t);
-
- /**
- **/
- int fstat (int, struct stat *);
-
- /**
- **/
- int lstat (const char *, struct stat *);
-
-/** Obtains information about the file pointed to by path.
-
- Opens the file pointed to by path, calls _EFI_FileInfo with the file's handle,
- then closes the file.
-
- @param[in] path Path to the file to obtain information about.
- @param[out] statbuf Buffer in which the file status is put.
-
- @retval 0 Successful Completion.
- @retval -1 An error has occurred and errno has been set to
- identify the error.
-**/
- int stat (const char *, struct stat *);
-
- /**
- **/
- int chmod (const char *, mode_t);
-#endif // __STAT_SYSCALLS_DECLARED
-__END_DECLS
-
-#endif /* !_SYS_STAT_H_ */
diff --git a/StdLib/Include/sys/stdint.h b/StdLib/Include/sys/stdint.h
deleted file mode 100644
index 7989fe0156..0000000000
--- a/StdLib/Include/sys/stdint.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* $NetBSD: stdint.h,v 1.5 2005/12/11 12:25:21 christos Exp $ */
-
-/*-
- * Copyright (c) 2001, 2004 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _SYS_STDINT_H_
-#define _SYS_STDINT_H_
-
-#include <sys/EfiCdefs.h>
-#include <machine/int_types.h>
-
-#ifndef int8_t
-typedef __int8_t int8_t;
-#define int8_t __int8_t
-#endif
-
-#ifndef uint8_t
-typedef __uint8_t uint8_t;
-#define uint8_t __uint8_t
-#endif
-
-#ifndef int16_t
-typedef __int16_t int16_t;
-#define int16_t __int16_t
-#endif
-
-#ifndef uint16_t
-typedef __uint16_t uint16_t;
-#define uint16_t __uint16_t
-#endif
-
-#ifndef int32_t
-typedef __int32_t int32_t;
-#define int32_t __int32_t
-#endif
-
-#ifndef uint32_t
-typedef __uint32_t uint32_t;
-#define uint32_t __uint32_t
-#endif
-
-#ifndef int64_t
-typedef __int64_t int64_t;
-#define int64_t __int64_t
-#endif
-
-#ifndef uint64_t
-typedef __uint64_t uint64_t;
-#define uint64_t __uint64_t
-#endif
-
-#ifndef intptr_t
-typedef __intptr_t intptr_t;
-#define intptr_t __intptr_t
-#endif
-
-#ifndef uintptr_t
-typedef __uintptr_t uintptr_t;
-#define uintptr_t __uintptr_t
-#endif
-
-#include <machine/int_mwgwtypes.h>
-
-#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
-#include <machine/int_limits.h>
-#endif
-
-#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
-#include <machine/int_const.h>
-#endif
-
-//#include <machine/wchar_limits.h>
-
-#endif /* !_SYS_STDINT_H_ */
diff --git a/StdLib/Include/sys/sysctl.h b/StdLib/Include/sys/sysctl.h
deleted file mode 100644
index 2382900bae..0000000000
--- a/StdLib/Include/sys/sysctl.h
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Mike Karels at Berkeley Software Design, Inc.
- *
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by the University of
- * California, Berkeley, Intel Corporation, and its contributors.
- *
- * 4. Neither the name of University, Intel Corporation, or their respective
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
- * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * @(#)sysctl.h 8.1 (Berkeley) 6/2/93
- * $Id: sysctl.h,v 1.1.1.1 2006/05/30 06:13:00 hhzhou Exp $
- */
-
-#ifndef _SYS_SYSCTL_H_
-#define _SYS_SYSCTL_H_
-
-#include <sys/_posix.h>
-
-/*
- * Definitions for sysctl call. The sysctl call uses a hierarchical name
- * for objects that can be examined or modified. The name is expressed as
- * a sequence of integers. Like a file path name, the meaning of each
- * component depends on its place in the hierarchy. The top-level and kern
- * identifiers are defined here, and other identifiers are defined in the
- * respective subsystem header files.
- */
-
-#define CTL_MAXNAME 12 /* largest number of components supported */
-
-/*
- * Each subsystem defined by sysctl defines a list of variables
- * for that subsystem. Each name is either a node with further
- * levels defined below it, or it is a leaf of some particular
- * type given below. Each sysctl level defines a set of name/type
- * pairs to be used by sysctl(1) in manipulating the subsystem.
- */
-struct ctlname {
- char *ctl_name; /* subsystem name */
- int ctl_type; /* type of name */
-};
-
-#define CTLTYPE 0xf /* Mask for the type */
-#define CTLTYPE_NODE 1 /* name is a node */
-#define CTLTYPE_INT 2 /* name describes an integer */
-#define CTLTYPE_STRING 3 /* name describes a string */
-#define CTLTYPE_QUAD 4 /* name describes a 64-bit number */
-#define CTLTYPE_OPAQUE 5 /* name describes a structure */
-#define CTLTYPE_STRUCT CTLTYPE_OPAQUE /* name describes a structure */
-
-#define CTLFLAG_RD 0x80000000 /* Allow reads of variable */
-#define CTLFLAG_WR 0x40000000 /* Allow writes to the variable */
-#define CTLFLAG_RW (CTLFLAG_RD|CTLFLAG_WR)
-#define CTLFLAG_NOLOCK 0x20000000 /* XXX Don't Lock */
-#define CTLFLAG_ANYBODY 0x10000000 /* All users can set this var */
-#define CTLFLAG_SECURE 0x08000000 /* Permit set only if securelevel<=0 */
-
-/*
- * USE THIS instead of a hardwired number from the categories below
- * to get dynamically assigned sysctl entries using the linker-set
- * technology. This is the way nearly all new sysctl variables should
- * be implemented.
- * e.g. SYSCTL_INT(_parent, OID_AUTO, name, CTLFLAG_RW, &variable, 0, "");
- */
-#define OID_AUTO (-1)
-
-#ifdef KERNEL
-#define SYSCTL_HANDLER_ARGS (struct sysctl_oid *oidp, void *arg1, int arg2, \
- struct sysctl_req *req)
-
-/*
- * This describes the access space for a sysctl request. This is needed
- * so that we can use the interface from the kernel or from user-space.
- */
-struct sysctl_req {
- struct proc *p;
- int lock;
- void *oldptr;
- size_t oldlen;
- size_t oldidx;
- int (*oldfunc)(struct sysctl_req *, const void *, size_t);
- void *newptr;
- size_t newlen;
- size_t newidx;
- int (*newfunc)(struct sysctl_req *, void *, size_t);
-};
-
-#ifndef _ORG_FREEBSD_
-#include <sys/ioccom.h>
-/*
- * Pseudo sysctl call through ioctl(2) interface
- */
-#define IOCSYSCTL _IOWR('X', 0, struct sysctl_req)
-
-struct pseudo_sysctl {
- int *name;
- u_int namelen;
- struct sysctl_req req;
-};
-
-#endif
-
-/*
- * This describes one "oid" in the MIB tree. Potentially more nodes can
- * be hidden behind it, expanded by the handler.
- */
-struct sysctl_oid {
- int oid_number;
- int oid_kind;
- void *oid_arg1;
- int oid_arg2;
- const char *oid_name;
- int (*oid_handler) SYSCTL_HANDLER_ARGS;
- const char *oid_fmt;
-};
-
-#define SYSCTL_IN(r, p, l) (r->newfunc)(r, p, l)
-#define SYSCTL_OUT(r, p, l) (r->oldfunc)(r, p, l)
-
-int sysctl_handle_int SYSCTL_HANDLER_ARGS;
-int sysctl_handle_long SYSCTL_HANDLER_ARGS;
-int sysctl_handle_intptr SYSCTL_HANDLER_ARGS;
-int sysctl_handle_string SYSCTL_HANDLER_ARGS;
-int sysctl_handle_opaque SYSCTL_HANDLER_ARGS;
-
-#ifdef _ORG_FREEBSD_
-/* This constructs a "raw" MIB oid. */
-#define SYSCTL_OID(parent, nbr, name, kind, a1, a2, handler, fmt, descr) \
- static struct sysctl_oid sysctl__##parent##_##name = { \
- nbr, kind, a1, a2, #name, handler, fmt }; \
- DATA_SET(sysctl_##parent, sysctl__##parent##_##name)
-
-/* This constructs a node from which other oids can hang. */
-#define SYSCTL_NODE(parent, nbr, name, access, handler, descr) \
- extern struct linker_set sysctl_##parent##_##name; \
- SYSCTL_OID(parent, nbr, name, CTLTYPE_NODE|access, \
- (void*)&sysctl_##parent##_##name, 0, handler, "N", descr); \
- DATA_SET(sysctl_##parent##_##name, sysctl__##parent##_##name)
-#else
-#define SYSCTL_OID(parent, nbr, name, kind, a1, a2, handler, fmt, descr)
-#define SYSCTL_NODE(parent, nbr, name, access, handler, descr)
-#endif
-
-/* Oid for a string. len can be 0 to indicate '\0' termination. */
-#define SYSCTL_STRING(parent, nbr, name, access, arg, len, descr) \
- SYSCTL_OID(parent, nbr, name, CTLTYPE_STRING|access, \
- arg, len, sysctl_handle_string, "A", descr)
-
-/* Oid for an int. If ptr is NULL, val is returned. */
-#define SYSCTL_INT(parent, nbr, name, access, ptr, val, descr) \
- SYSCTL_OID(parent, nbr, name, CTLTYPE_INT|access, \
- ptr, val, sysctl_handle_int, "I", descr)
-
-/* Oid for a long. The pointer must be non NULL. */
-#define SYSCTL_LONG(parent, nbr, name, access, ptr, descr) \
- SYSCTL_OID(parent, nbr, name, CTLTYPE_INT|access, \
- ptr, 0, sysctl_handle_long, "L", descr)
-
-/* Oid for an opaque object. Specified by a pointer and a length. */
-#define SYSCTL_OPAQUE(parent, nbr, name, access, ptr, len, fmt, descr) \
- SYSCTL_OID(parent, nbr, name, CTLTYPE_OPAQUE|access, \
- ptr, len, sysctl_handle_opaque, fmt, descr)
-
-/* Oid for a struct. Specified by a pointer and a type. */
-#define SYSCTL_STRUCT(parent, nbr, name, access, ptr, type, descr) \
- SYSCTL_OID(parent, nbr, name, CTLTYPE_OPAQUE|access, \
- ptr, sizeof(struct type), sysctl_handle_opaque, \
- "S," #type, descr)
-
-/* Oid for a procedure. Specified by a pointer and an arg. */
-#define SYSCTL_PROC(parent, nbr, name, access, ptr, arg, handler, fmt, descr) \
- SYSCTL_OID(parent, nbr, name, access, \
- ptr, arg, handler, fmt, descr)
-#endif /* KERNEL */
-
-/*
- * Top-level identifiers
- */
-#define CTL_UNSPEC 0 /* unused */
-#define CTL_KERN 1 /* "high kernel": proc, limits */
-#define CTL_VM 2 /* virtual memory */
-#define CTL_VFS 3 /* file system, mount type is next */
-#define CTL_NET 4 /* network, see socket.h */
-#define CTL_DEBUG 5 /* debugging parameters */
-#define CTL_HW 6 /* generic cpu/io */
-#define CTL_MACHDEP 7 /* machine dependent */
-#define CTL_USER 8 /* user-level */
-#define CTL_P1003_1B 9 /* POSIX 1003.1B */
-#define CTL_MAXID 10 /* number of valid top-level ids */
-
-#define CTL_NAMES { \
- { 0, 0 }, \
- { "kern", CTLTYPE_NODE }, \
- { "vm", CTLTYPE_NODE }, \
- { "vfs", CTLTYPE_NODE }, \
- { "net", CTLTYPE_NODE }, \
- { "debug", CTLTYPE_NODE }, \
- { "hw", CTLTYPE_NODE }, \
- { "machdep", CTLTYPE_NODE }, \
- { "user", CTLTYPE_NODE }, \
- { "p1003_1b", CTLTYPE_NODE }, \
-}
-
-/*
- * CTL_KERN identifiers
- */
-#define KERN_OSTYPE 1 /* string: system version */
-#define KERN_OSRELEASE 2 /* string: system release */
-#define KERN_OSREV 3 /* int: system revision */
-#define KERN_VERSION 4 /* string: compile time info */
-#define KERN_MAXVNODES 5 /* int: max vnodes */
-#define KERN_MAXPROC 6 /* int: max processes */
-#define KERN_MAXFILES 7 /* int: max open files */
-#define KERN_ARGMAX 8 /* int: max arguments to exec */
-#define KERN_SECURELVL 9 /* int: system security level */
-#define KERN_HOSTNAME 10 /* string: hostname */
-#define KERN_HOSTID 11 /* int: host identifier */
-#define KERN_CLOCKRATE 12 /* struct: struct clockrate */
-#define KERN_VNODE 13 /* struct: vnode structures */
-#define KERN_PROC 14 /* struct: process entries */
-#define KERN_FILE 15 /* struct: file entries */
-#define KERN_PROF 16 /* node: kernel profiling info */
-#define KERN_POSIX1 17 /* int: POSIX.1 version */
-#define KERN_NGROUPS 18 /* int: # of supplemental group ids */
-#define KERN_JOB_CONTROL 19 /* int: is job control available */
-#define KERN_SAVED_IDS 20 /* int: saved set-user/group-ID */
-#define KERN_BOOTTIME 21 /* struct: time kernel was booted */
-#define KERN_NISDOMAINNAME 22 /* string: YP domain name */
-#define KERN_UPDATEINTERVAL 23 /* int: update process sleep time */
-#define KERN_OSRELDATE 24 /* int: OS release date */
-#define KERN_NTP_PLL 25 /* node: NTP PLL control */
-#define KERN_BOOTFILE 26 /* string: name of booted kernel */
-#define KERN_MAXFILESPERPROC 27 /* int: max open files per proc */
-#define KERN_MAXPROCPERUID 28 /* int: max processes per uid */
-#define KERN_DUMPDEV 29 /* dev_t: device to dump on */
-#define KERN_IPC 30 /* node: anything related to IPC */
-#define KERN_DUMMY 31 /* unused */
-#define KERN_PS_STRINGS 32 /* int: address of PS_STRINGS */
-#define KERN_USRSTACK 33 /* int: address of USRSTACK */
-#define KERN_LOGSIGEXIT 34 /* int: do we log sigexit procs? */
-#define KERN_MAXID 35 /* number of valid kern ids */
-
-#define CTL_KERN_NAMES { \
- { 0, 0 }, \
- { "ostype", CTLTYPE_STRING }, \
- { "osrelease", CTLTYPE_STRING }, \
- { "osrevision", CTLTYPE_INT }, \
- { "version", CTLTYPE_STRING }, \
- { "maxvnodes", CTLTYPE_INT }, \
- { "maxproc", CTLTYPE_INT }, \
- { "maxfiles", CTLTYPE_INT }, \
- { "argmax", CTLTYPE_INT }, \
- { "securelevel", CTLTYPE_INT }, \
- { "hostname", CTLTYPE_STRING }, \
- { "hostid", CTLTYPE_INT }, \
- { "clockrate", CTLTYPE_STRUCT }, \
- { "vnode", CTLTYPE_STRUCT }, \
- { "proc", CTLTYPE_STRUCT }, \
- { "file", CTLTYPE_STRUCT }, \
- { "profiling", CTLTYPE_NODE }, \
- { "posix1version", CTLTYPE_INT }, \
- { "ngroups", CTLTYPE_INT }, \
- { "job_control", CTLTYPE_INT }, \
- { "saved_ids", CTLTYPE_INT }, \
- { "boottime", CTLTYPE_STRUCT }, \
- { "nisdomainname", CTLTYPE_STRING }, \
- { "update", CTLTYPE_INT }, \
- { "osreldate", CTLTYPE_INT }, \
- { "ntp_pll", CTLTYPE_NODE }, \
- { "bootfile", CTLTYPE_STRING }, \
- { "maxfilesperproc", CTLTYPE_INT }, \
- { "maxprocperuid", CTLTYPE_INT }, \
- { "dumpdev", CTLTYPE_STRUCT }, /* we lie; don't print as int */ \
- { "ipc", CTLTYPE_NODE }, \
- { "dummy", CTLTYPE_INT }, \
- { "ps_strings", CTLTYPE_INT }, \
- { "usrstack", CTLTYPE_INT }, \
- { "logsigexit", CTLTYPE_INT }, \
-}
-
-/*
- * CTL_VFS identifiers
- */
-#define CTL_VFS_NAMES { \
- { "vfsconf", CTLTYPE_STRUCT }, \
-}
-
-/*
- * KERN_PROC subtypes
- */
-#define KERN_PROC_ALL 0 /* everything */
-#define KERN_PROC_PID 1 /* by process id */
-#define KERN_PROC_PGRP 2 /* by process group id */
-#define KERN_PROC_SESSION 3 /* by session of pid */
-#define KERN_PROC_TTY 4 /* by controlling tty */
-#define KERN_PROC_UID 5 /* by effective uid */
-#define KERN_PROC_RUID 6 /* by real uid */
-
-/*
- * KERN_IPC identifiers
- */
-#define KIPC_MAXSOCKBUF 1 /* int: max size of a socket buffer */
-#define KIPC_SOCKBUF_WASTE 2 /* int: wastage factor in sockbuf */
-#define KIPC_SOMAXCONN 3 /* int: max length of connection q */
-#define KIPC_MAX_LINKHDR 4 /* int: max length of link header */
-#define KIPC_MAX_PROTOHDR 5 /* int: max length of network header */
-#define KIPC_MAX_HDR 6 /* int: max total length of headers */
-#define KIPC_MAX_DATALEN 7 /* int: max length of data? */
-#define KIPC_MBSTAT 8 /* struct: mbuf usage statistics */
-#define KIPC_NMBCLUSTERS 9 /* int: maximum mbuf clusters */
-
-/*
- * CTL_HW identifiers
- */
-#define HW_MACHINE 1 /* string: machine class */
-#define HW_MODEL 2 /* string: specific machine model */
-#define HW_NCPU 3 /* int: number of cpus */
-#define HW_BYTEORDER 4 /* int: machine byte order */
-#define HW_PHYSMEM 5 /* int: total memory */
-#define HW_USERMEM 6 /* int: non-kernel memory */
-#define HW_PAGESIZE 7 /* int: software page size */
-#define HW_DISKNAMES 8 /* strings: disk drive names */
-#define HW_DISKSTATS 9 /* struct: diskstats[] */
-#define HW_FLOATINGPT 10 /* int: has HW floating point? */
-#define HW_MACHINE_ARCH 11 /* string: machine architecture */
-#define HW_MAXID 12 /* number of valid hw ids */
-
-#define CTL_HW_NAMES { \
- { 0, 0 }, \
- { "machine", CTLTYPE_STRING }, \
- { "model", CTLTYPE_STRING }, \
- { "ncpu", CTLTYPE_INT }, \
- { "byteorder", CTLTYPE_INT }, \
- { "physmem", CTLTYPE_INT }, \
- { "usermem", CTLTYPE_INT }, \
- { "pagesize", CTLTYPE_INT }, \
- { "disknames", CTLTYPE_STRUCT }, \
- { "diskstats", CTLTYPE_STRUCT }, \
- { "floatingpoint", CTLTYPE_INT }, \
-}
-
-/*
- * CTL_USER definitions
- */
-#define USER_CS_PATH 1 /* string: _CS_PATH */
-#define USER_BC_BASE_MAX 2 /* int: BC_BASE_MAX */
-#define USER_BC_DIM_MAX 3 /* int: BC_DIM_MAX */
-#define USER_BC_SCALE_MAX 4 /* int: BC_SCALE_MAX */
-#define USER_BC_STRING_MAX 5 /* int: BC_STRING_MAX */
-#define USER_COLL_WEIGHTS_MAX 6 /* int: COLL_WEIGHTS_MAX */
-#define USER_EXPR_NEST_MAX 7 /* int: EXPR_NEST_MAX */
-#define USER_LINE_MAX 8 /* int: LINE_MAX */
-#define USER_RE_DUP_MAX 9 /* int: RE_DUP_MAX */
-#define USER_POSIX2_VERSION 10 /* int: POSIX2_VERSION */
-#define USER_POSIX2_C_BIND 11 /* int: POSIX2_C_BIND */
-#define USER_POSIX2_C_DEV 12 /* int: POSIX2_C_DEV */
-#define USER_POSIX2_CHAR_TERM 13 /* int: POSIX2_CHAR_TERM */
-#define USER_POSIX2_FORT_DEV 14 /* int: POSIX2_FORT_DEV */
-#define USER_POSIX2_FORT_RUN 15 /* int: POSIX2_FORT_RUN */
-#define USER_POSIX2_LOCALEDEF 16 /* int: POSIX2_LOCALEDEF */
-#define USER_POSIX2_SW_DEV 17 /* int: POSIX2_SW_DEV */
-#define USER_POSIX2_UPE 18 /* int: POSIX2_UPE */
-#define USER_STREAM_MAX 19 /* int: POSIX2_STREAM_MAX */
-#define USER_TZNAME_MAX 20 /* int: POSIX2_TZNAME_MAX */
-#define USER_MAXID 21 /* number of valid user ids */
-
-#define CTL_USER_NAMES { \
- { 0, 0 }, \
- { "cs_path", CTLTYPE_STRING }, \
- { "bc_base_max", CTLTYPE_INT }, \
- { "bc_dim_max", CTLTYPE_INT }, \
- { "bc_scale_max", CTLTYPE_INT }, \
- { "bc_string_max", CTLTYPE_INT }, \
- { "coll_weights_max", CTLTYPE_INT }, \
- { "expr_nest_max", CTLTYPE_INT }, \
- { "line_max", CTLTYPE_INT }, \
- { "re_dup_max", CTLTYPE_INT }, \
- { "posix2_version", CTLTYPE_INT }, \
- { "posix2_c_bind", CTLTYPE_INT }, \
- { "posix2_c_dev", CTLTYPE_INT }, \
- { "posix2_char_term", CTLTYPE_INT }, \
- { "posix2_fort_dev", CTLTYPE_INT }, \
- { "posix2_fort_run", CTLTYPE_INT }, \
- { "posix2_localedef", CTLTYPE_INT }, \
- { "posix2_sw_dev", CTLTYPE_INT }, \
- { "posix2_upe", CTLTYPE_INT }, \
- { "stream_max", CTLTYPE_INT }, \
- { "tzname_max", CTLTYPE_INT }, \
-}
-
-#define CTL_P1003_1B_ASYNCHRONOUS_IO 1 /* boolean */
-#define CTL_P1003_1B_MAPPED_FILES 2 /* boolean */
-#define CTL_P1003_1B_MEMLOCK 3 /* boolean */
-#define CTL_P1003_1B_MEMLOCK_RANGE 4 /* boolean */
-#define CTL_P1003_1B_MEMORY_PROTECTION 5 /* boolean */
-#define CTL_P1003_1B_MESSAGE_PASSING 6 /* boolean */
-#define CTL_P1003_1B_PRIORITIZED_IO 7 /* boolean */
-#define CTL_P1003_1B_PRIORITY_SCHEDULING 8 /* boolean */
-#define CTL_P1003_1B_REALTIME_SIGNALS 9 /* boolean */
-#define CTL_P1003_1B_SEMAPHORES 10 /* boolean */
-#define CTL_P1003_1B_FSYNC 11 /* boolean */
-#define CTL_P1003_1B_SHARED_MEMORY_OBJECTS 12 /* boolean */
-#define CTL_P1003_1B_SYNCHRONIZED_IO 13 /* boolean */
-#define CTL_P1003_1B_TIMERS 14 /* boolean */
-#define CTL_P1003_1B_AIO_LISTIO_MAX 15 /* int */
-#define CTL_P1003_1B_AIO_MAX 16 /* int */
-#define CTL_P1003_1B_AIO_PRIO_DELTA_MAX 17 /* int */
-#define CTL_P1003_1B_DELAYTIMER_MAX 18 /* int */
-#define CTL_P1003_1B_MQ_OPEN_MAX 19 /* int */
-#define CTL_P1003_1B_PAGESIZE 20 /* int */
-#define CTL_P1003_1B_RTSIG_MAX 21 /* int */
-#define CTL_P1003_1B_SEM_NSEMS_MAX 22 /* int */
-#define CTL_P1003_1B_SEM_VALUE_MAX 23 /* int */
-#define CTL_P1003_1B_SIGQUEUE_MAX 24 /* int */
-#define CTL_P1003_1B_TIMER_MAX 25 /* int */
-
-#define CTL_P1003_1B_MAXID 26
-
-#define CTL_P1003_1B_NAMES { \
- { 0, 0 }, \
- { "asynchronous_io", CTLTYPE_INT }, \
- { "mapped_files", CTLTYPE_INT }, \
- { "memlock", CTLTYPE_INT }, \
- { "memlock_range", CTLTYPE_INT }, \
- { "memory_protection", CTLTYPE_INT }, \
- { "message_passing", CTLTYPE_INT }, \
- { "prioritized_io", CTLTYPE_INT }, \
- { "priority_scheduling", CTLTYPE_INT }, \
- { "realtime_signals", CTLTYPE_INT }, \
- { "semaphores", CTLTYPE_INT }, \
- { "fsync", CTLTYPE_INT }, \
- { "shared_memory_objects", CTLTYPE_INT }, \
- { "synchronized_io", CTLTYPE_INT }, \
- { "timers", CTLTYPE_INT }, \
- { "aio_listio_max", CTLTYPE_INT }, \
- { "aio_max", CTLTYPE_INT }, \
- { "aio_prio_delta_max", CTLTYPE_INT }, \
- { "delaytimer_max", CTLTYPE_INT }, \
- { "mq_open_max", CTLTYPE_INT }, \
- { "pagesize", CTLTYPE_INT }, \
- { "rtsig_max", CTLTYPE_INT }, \
- { "nsems_max", CTLTYPE_INT }, \
- { "sem_value_max", CTLTYPE_INT }, \
- { "sigqueue_max", CTLTYPE_INT }, \
- { "timer_max", CTLTYPE_INT }, \
-}
-
-#ifdef KERNEL
-
-extern char machine[];
-extern char osrelease[];
-extern char ostype[];
-
-int kernel_sysctl(struct proc *p, int *name, u_int namelen, void *old,
- size_t *oldlenp, void *new, size_t newlen,
- size_t *retval);
-void sysctl_order_all(void);
-int userland_sysctl(struct proc *p, int *name, u_int namelen, void *old,
- size_t *oldlenp, int inkernel, void *new, size_t newlen,
- size_t *retval);
-
-#else /* !KERNEL */
-#include <sys/EfiCdefs.h>
-
-__BEGIN_DECLS
-int sysctl __P((int *, u_int, void *, size_t *, void *, size_t));
-int sysctlbyname __P((const char *, void *, size_t *, void *, size_t));
-__END_DECLS
-#endif /* KERNEL */
-
-#endif /* !_SYS_SYSCTL_H_ */
diff --git a/StdLib/Include/sys/syslimits.h b/StdLib/Include/sys/syslimits.h
deleted file mode 100644
index 9515e8f570..0000000000
--- a/StdLib/Include/sys/syslimits.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/** @file
- Platform specific values for <limits.h>.
-
- Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1988, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * syslimits.h 8.1 (Berkeley) 6/2/93
- * NetBSD: syslimits.h,v 1.23 2005/12/11 12:25:21 christos Exp
-**/
-
-#ifndef _SYS_SYSLIMITS_H_
-#define _SYS_SYSLIMITS_H_
-
-#include <sys/featuretest.h>
-
-#define ARG_MAX (2 * 1024) ///< Maximum bytes for an exec function.
-#define ARGC_MAX (64) ///< Maximum value for argc.
-
-#define MAX_INPUT 255 ///< Maximum bytes in terminal input.
-#define MAX_OUTPUT 255 ///< Maximum bytes in terminal output.
-#define NAME_MAX 255 ///< Maximum bytes in a file name.
-#ifndef OPEN_MAX
- #define OPEN_MAX 20 ///< Maximum open files per process.
-#endif
-#define PATH_MAX 1024 ///< Maximum bytes in pathname.
-#define PIPE_BUF 512 ///< Maximum bytes for atomic pipe writes.
-
-#ifndef CHILD_MAX
- #define CHILD_MAX 128 ///< Maximum simultaneous processes.
-#endif
-
-#define LOGIN_NAME_MAX 17 ///< Maximum login name length including the NUL.
-
-#endif /* !_SYS_SYSLIMITS_H_ */
diff --git a/StdLib/Include/sys/termios.h b/StdLib/Include/sys/termios.h
deleted file mode 100644
index 671a5c06c0..0000000000
--- a/StdLib/Include/sys/termios.h
+++ /dev/null
@@ -1,428 +0,0 @@
-/** @file
- Macros and declarations for terminal oriented ioctls and
- I/O discipline.
-
- Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1988, 1989, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)termios.h 8.3 (Berkeley) 3/28/94
- NetBSD: termios.h,v 1.29 2005/12/11 12:25:21 christos Exp
-**/
-#ifndef _SYS_TERMIOS_H_
-#define _SYS_TERMIOS_H_
-
-#include <sys/ansi.h>
-#include <sys/featuretest.h>
-
-/* Special Control Characters
- *
- * Index into c_cc[] character array.
- */
-typedef enum {
-/* Name Enabled by */
- VTABLEN, /* OXTABS - Length between TAB stops. */
- VEOF, /* ICANON */
- VEOL, /* ICANON */
- VERASE, /* ICANON */
- VKILL, /* ICANON */
- VINTR, /* ISIG */
- VQUIT, /* ISIG */
- VMIN, /* !ICANON */
- VTIME, /* !ICANON */
-
- /* Extensions from BSD and POSIX -- Not yet implemented for UEFI */
- VWERASE, /* IEXTEN, ICANON -- Erase the WORD to the left of the cursor */
- VREPRINT, /* IEXTEN, ICANON -- Re-draw the current line (input buffer) */
- VLNEXT, /* IEXTEN, ICANON -- Input the next character literally */
- VDISCARD, /* IEXTEN -- Toggle. Discards output display until toggled. */
-
- /* NCCS must always be the last member of this enum. */
- NCCS /* Number of control characters in c_cc[] */
-} CCC_INDEX;
-
-#define _POSIX_VDISABLE ((unsigned char)'\377')
-
-#define CCEQ(val, c) (c == val ? val != _POSIX_VDISABLE : 0)
-
-/*
- * Input flags - software input processing
- c_iflag
-*/
-#define INLCR 0x0001 /* map NL into CR */
-#define IGNCR 0x0002 /* ignore CR */
-#define ICRNL 0x0004 /* map CR to NL (ala CRMOD) */
-#define IGNSPEC 0x0008 /* Ignore function, control, and other non-printing special keys. */
-#ifdef HAVE_DA_SERIAL
- #define ISTRIP 0x0010 /* strip 8th bit off chars */
- #define IGNBRK 0x0020 /* ignore BREAK condition */
- #define BRKINT 0x0040 /* map BREAK to SIGINTR */
- #define IRESRV1 0x0080
- #define IGNPAR 0x0100 /* ignore (discard) parity errors */
- #define PARMRK 0x0200 /* mark parity and framing errors */
- #define INPCK 0x0400 /* enable checking of parity errors */
- #define IXON 0x0800 /* enable output flow control */
- #define IXOFF 0x1000 /* enable input flow control */
- #define IXANY 0x2000 /* any char will restart after stop */
-#endif /* HAVE_DA_SERIAL */
-
-/*
- * Output flags - software output processing
- c_oflag
- */
-#define OPOST 0x0001 /* enable following output processing */
-#define ONLCR 0x0002 /* map NL to CR-NL (ala CRMOD) */
-#define OXTABS 0x0004 /* expand tabs to spaces */
-#define ONOEOT 0x0008 /* discard EOT's (^D) on output */
-#define OCRNL 0x0010 /* map CR to NL */
-#define ONOCR 0x0020 /* discard CR's when on column 0 */
-#define ONLRET 0x0040 /* move to column 0 on CR */
-#define OCTRL 0x0080 /* Map control characters to the sequence ^C */
-
-/*
- * Control flags - hardware control of terminal
- c_cflag
- */
-#ifdef HAVE_DA_SERIAL
- #define CIGNORE 0x0001 /* ignore control flags */
- #define CSIZE 0x0300 /* character size mask */
- #define CS5 0x0000 /* 5 bits (pseudo) */
- #define CS6 0x0100 /* 6 bits */
- #define CS7 0x0200 /* 7 bits */
- #define CS8 0x0300 /* 8 bits */
- #define CSTOPB 0x0400 /* send 2 stop bits, else 1 */
- #define CREAD 0x0800 /* enable receiver */
- #define PARENB 0x1000 /* parity enable */
- #define PARODD 0x2000 /* odd parity, else even */
- #define HUPCL 0x4000 /* hang up on last close */
- #define CLOCAL 0x8000 /* ignore modem status lines */
-#endif
-
-
-/*
- * "Local" flags - dumping ground for other state
- *
- * Warning: some flags in this structure begin with
- * the letter "I" and look like they belong in the
- * input flag.
- */
-#define ECHO 0x0001 /* enable echoing */
-#define ECHOE 0x0002 /* visually erase chars */
-#define ECHOK 0x0004 /* echo NL after line kill */
-#define ECHONL 0x0008 /* echo NL even if ECHO is off */
-#define ISIG 0x0010 /* enable signals INTR, QUIT, [D]SUSP */
-#define ICANON 0x0020 /* canonicalize input lines */
-#define IEXTEN 0x0040 /* enable Extensions */
-#define SKIP_1 0x0100 /* Currently unused */
-#define TOSTOP 0x0200 /* stop background jobs on output */
-#define PENDIN 0x0400 /* re-echo input buffer at next read */
-#define NOFLSH 0x0800 /* don't flush output on signal */
-#define FLUSHO 0x1000 /* output being flushed (state) */
-
-typedef INT8 cc_t;
-typedef UINT16 tcflag_t;
-typedef UINT32 speed_t;
-
-struct termios {
- INT32 c_ispeed; /* input speed - Use a signed type instead of speed_t */
- INT32 c_ospeed; /* output speed - to ease integer promotion when used. */
- tcflag_t c_iflag; /* input flags */
- tcflag_t c_oflag; /* output flags */
- tcflag_t c_cflag; /* control flags */
- tcflag_t c_lflag; /* local flags */
- cc_t c_cc[NCCS]; /* control chars */
-};
-
-/*
- * Commands passed to tcsetattr() for setting the termios structure.
- */
-#define TCSANOW 0 /* make change immediate */
-#define TCSADRAIN 1 /* drain output, then change */
-#define TCSAFLUSH 2 /* drain output, flush input */
-#define TCSASOFT 0x10 /* flag - don't alter h.w. state */
-
-/*
- * Standard speeds
- */
-#define B0 0
-#define B50 50
-#define B75 75
-#define B110 110
-#define B134 134
-#define B150 150
-#define B200 200
-#define B300 300
-#define B600 600
-#define B1200 1200
-#define B1800 1800
-#define B2400 2400
-#define B4800 4800
-#define B9600 9600
-#define B19200 19200
-#define B38400 38400
-
-// Extended speed definitions
-#define B7200 7200
-#define B14400 14400
-#define B28800 28800
-#define B57600 57600
-#define B76800 76800
-#define B115200 115200
-#define B230400 230400
-#define B460800 460800
-#define B921600 921600
-
-#define TCIFLUSH 1
-#define TCOFLUSH 2
-#define TCIOFLUSH 3
-#define TCOOFF 1
-#define TCOON 2
-#define TCIOFF 3
-#define TCION 4
-
-#include <sys/EfiCdefs.h>
-
-__BEGIN_DECLS
-
-/** Get input baud rate.
-
- Extracts the input baud rate from the termios structure pointed to by the
- pTermios argument.
-
- @param[in] pTermios A pointer to the termios structure from which to extract
- the input baud rate.
-
- @return The value of the input speed is returned exactly as it is contained
- in the termios structure, without interpretation.
-**/
-speed_t cfgetispeed (const struct termios *);
-
-/** Get output baud rate.
-
- Extracts the output baud rate from the termios structure pointed to by the
- pTermios argument.
-
- @param[in] pTermios A pointer to the termios structure from which to extract
- the output baud rate.
-
- @return The value of the output speed is returned exactly as it is contained
- in the termios structure, without interpretation.
-**/
-speed_t cfgetospeed (const struct termios *);
-
-/** Set input baud rate.
-
- Replaces the input baud rate, in the termios structure pointed to by the
- pTermios argument, with the value of NewSpeed.
-
- @param[out] pTermios A pointer to the termios structure into which to set
- the input baud rate.
- @param[in] NewSpeed The new input baud rate.
-
- @retval 0 The operation completed successfully.
- @retval -1 An error occured and errno is set to indicate the error.
- * EINVAL - The value of NewSpeed is outside the range of
- possible speed values as specified in <sys/termios.h>.
-**/
-int cfsetispeed (struct termios *, speed_t);
-
-/** Set output baud rate.
-
- Replaces the output baud rate, in the termios structure pointed to by the
- pTermios argument, with the value of NewSpeed.
-
- @param[out] pTermios A pointer to the termios structure into which to set
- the output baud rate.
- @param[in] NewSpeed The new output baud rate.
-
- @retval 0 The operation completed successfully.
- @retval -1 An error occured and errno is set to indicate the error.
- * EINVAL - The value of NewSpeed is outside the range of
- possible speed values as specified in <sys/termios.h>.
-**/
-int cfsetospeed (struct termios *, speed_t);
-
-/** Get the parameters associated with an interactive IO device.
-
- Get the parameters associated with the device referred to by
- fd and store them into the termios structure referenced by pTermios.
-
- @param[in] fd The file descriptor for an open interactive IO device.
- @param[out] pTermios A pointer to a termios structure into which to store
- attributes of the interactive IO device.
-
- @retval 0 The operation completed successfully.
- @retval -1 An error occured and errno is set to indicate the error.
- * EBADF - The fd argument is not a valid file descriptor.
- * ENOTTY - The file associated with fd is not an interactive IO device.
-**/
-int tcgetattr (int, struct termios *);
-
-/** Set the parameters associated with an interactive IO device.
-
- Set the parameters associated with the device referred to by
- fd to the values in the termios structure referenced by pTermios.
-
- Behavior is modified by the value of the OptAct parameter:
- * TCSANOW: The change shall occur immediately.
- * TCSADRAIN: The change shall occur after all output written to fd is
- transmitted. This action should be used when changing parameters which
- affect output.
- * TCSAFLUSH: The change shall occur after all output written to fd is
- transmitted, and all input so far received but not read shall be
- discarded before the change is made.
-
- @param[in] fd The file descriptor for an open interactive IO device.
- @param[in] OptAct Currently has no effect.
- @param[in] pTermios A pointer to a termios structure into which to retrieve
- attributes to set in the interactive IO device.
-
- @retval 0 The operation completed successfully.
- @retval -1 An error occured and errno is set to indicate the error.
- * EBADF - The fd argument is not a valid file descriptor.
- * ENOTTY - The file associated with fd is not an interactive IO device.
-**/
-int tcsetattr (int, int, const struct termios *);
-
-/** Transmit pending output.
-
-
- @param[in] fd The file descriptor for an open interactive IO device.
-
- @retval 0 The operation completed successfully.
- @retval -1 An error occured and errno is set to indicate the error.
- * EBADF - The fd argument is not a valid file descriptor.
- * ENOTTY - The file associated with fd is not an interactive IO device.
- * EINTR - A signal interrupted tcdrain().
- * ENOTSUP - This function is not supported.
-**/
-int tcdrain (int);
-
-/** Suspend or restart the transmission or reception of data.
-
- This function will suspend or resume transmission or reception of data on
- the file referred to by fd, depending on the value of Action.
-
- @param[in] fd The file descriptor of an open interactive IO device (terminal).
- @param[in] Action The action to be performed:
- * TCOOFF - Suspend output.
- * TCOON - Resume suspended output.
- * TCIOFF - If fd refers to an IIO device, transmit a
- STOP character, which is intended to cause the
- terminal device to stop transmitting data.
- * TCION - If fd refers to an IIO device, transmit a
- START character, which is intended to cause the
- terminal device to start transmitting data.
-
- @retval 0 The operation completed successfully.
- @retval -1 An error occured and errno is set to indicate the error.
- * EBADF - The fd argument is not a valid file descriptor.
- * ENOTTY - The file associated with fd is not an interactive IO device.
- * EINVAL - The Action argument is not a supported value.
- * ENOTSUP - This function is not supported.
-**/
-int tcflow (int, int);
-
-/** Discard non-transmitted output data, non-read input data, or both.
-
-
- @param[in] fd The file descriptor for an open interactive IO device.
- @param[in] QueueSelector The IO queue to be affected:
- * TCIFLUSH - If fd refers to a device open for input, flush
- pending input. Otherwise error EINVAL.
- * TCOFLUSH - If fd refers to a device open for output,
- flush pending output. Otherwise error EINVAL.
- * TCIOFLUSH - If fd refers to a device open for both
- input and output, flush pending input and output.
- Otherwise error EINVAL.
-
- @retval 0 The operation completed successfully.
- @retval -1 An error occured and errno is set to indicate the error.
- * EBADF - The fd argument is not a valid file descriptor.
- * ENOTTY - The file associated with fd is not an interactive IO device.
- * EINVAL - The QueueSelector argument is not a supported value.
- * ENOTSUP - This function is not supported.
-**/
-int tcflush (int, int);
-
-//int tcsendbreak (int, int);
-//pid_t tcgetsid (int);
-
-//void cfmakeraw (struct termios *);
-//int cfsetspeed (struct termios *, speed_t);
-__END_DECLS
-
-/* Input values for UEFI Keyboard Scan Codes.
-
- The UEFI Keyboard Scan Codes are mapped into the upper range of the Unicode
- Private Use Area so that the characters can be inserted into the input stream
- and treated the same as any other character.
-
- These values are only used for input. If these codes are output to the
- console, or another interactive I/O device, the behavior will depend upon
- the current locale and UEFI character set loaded.
-*/
-typedef enum {
- TtySpecKeyMin = 0xF7F0,
- /* This area is reserved for use by internal I/O software.
- At least 4 values must exist between TtySpecKeyMin and TtyFunKeyMin.
- */
- TtyFunKeyMin = 0xF7FA,
- TtyKeyEject = 0xF7FA,
- TtyRecovery, TtyToggleDisplay, TtyHibernate,
- TtySuspend, TtyBrightnessDown, TtyBrightnessUp,
- TtyVolumeDown = 0xF87F,
- TtyVolumeUp, TtyMute,
- TtyF24 = 0xF88D,
- TtyF23, TtyF22, TtyF21, TtyF20,
- TtyF19, TtyF18, TtyF17, TtyF16,
- TtyF15, TtyF14, TtyF13,
- TtyEscape = 0xF8E9,
- TtyF12, TtyF11, TtyF10, TtyF9,
- TtyF8, TtyF7, TtyF6, TtyF5,
- TtyF4, TtyF3, TtyF2, TtyF1,
- TtyPageDown, TtyPageUp, TtyDelete, TtyInsert,
- TtyEnd, TtyHome, TtyLeftArrow, TtyRightArrow,
- TtyDownArrow,
- TtyUpArrow = 0xF8FF,
- TtyFunKeyMax = 0xF900
-} TtyFunKey;
-
-// Non-UEFI character definitions
-#define CHAR_EOT 0x0004 /* End of Text (EOT) character -- Unix End-of-File character */
-#define CHAR_SUB 0x001a /* MSDOS End-of-File character */
-#define CHAR_ESC 0x001b /* Escape (ESC) character */
-
-#endif /* !_SYS_TERMIOS_H_ */
diff --git a/StdLib/Include/sys/time.h b/StdLib/Include/sys/time.h
deleted file mode 100644
index 2b05b116b7..0000000000
--- a/StdLib/Include/sys/time.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/** @file
- System-specific declarations and macros related to time.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1982, 1986, 1993
- The Regents of the University of California. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- time.h 8.5 (Berkeley) 5/4/95
- NetBSD: time.h,v 1.56 2006/06/18 21:09:24 uwe Exp
- */
-#ifndef _SYS_TIME_H_
-#define _SYS_TIME_H_
-
-#include <Uefi.h>
-#include <sys/featuretest.h>
-#include <sys/types.h>
-
-/*
- * Traditional *nix structure returned by gettimeofday(2) system call,
- * and used in other calls.
- */
-struct timeval {
- LONG32 tv_sec; /* seconds */
- LONG32 tv_usec; /* and microseconds */
-};
-
-/*
- * Structure defined by POSIX.1b to be like a timeval.
- * This works within EFI since the times really are time_t.
- */
-struct timespec {
- time_t tv_sec; /* seconds */
- LONG32 tv_nsec; /* and nanoseconds */
-};
-
-#define TIMEVAL_TO_TIMESPEC(tv, ts) do { \
- (ts)->tv_sec = (tv)->tv_sec; \
- (ts)->tv_nsec = (tv)->tv_usec * 1000; \
-} while (/*CONSTCOND*/0)
-
-#define TIMESPEC_TO_TIMEVAL(tv, ts) do { \
- (tv)->tv_sec = (ts)->tv_sec; \
- (tv)->tv_usec = (ts)->tv_nsec / 1000; \
-} while (/*CONSTCOND*/0)
-
-/* Operations on timevals. */
-#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0
-#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
-
-#define timercmp(tvp, uvp, cmp) \
- (((tvp)->tv_sec == (uvp)->tv_sec) ? \
- ((tvp)->tv_usec cmp (uvp)->tv_usec) : \
- ((tvp)->tv_sec cmp (uvp)->tv_sec))
-
-#define timeradd(tvp, uvp, vvp) \
- do { \
- (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \
- (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \
- if ((vvp)->tv_usec >= 1000000) { \
- (vvp)->tv_sec++; \
- (vvp)->tv_usec -= 1000000; \
- } \
- } while (/* CONSTCOND */ 0)
-
-#define timersub(tvp, uvp, vvp) \
- do { \
- (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
- (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
- if ((vvp)->tv_usec < 0) { \
- (vvp)->tv_sec--; \
- (vvp)->tv_usec += 1000000; \
- } \
- } while (/* CONSTCOND */ 0)
-
-/* Operations on timespecs. */
-#define timespecclear(tsp) (tsp)->tv_sec = (tsp)->tv_nsec = 0
-#define timespecisset(tsp) ((tsp)->tv_sec || (tsp)->tv_nsec)
-
-#define timespeccmp(tsp, usp, cmp) \
- (((tsp)->tv_sec == (usp)->tv_sec) ? \
- ((tsp)->tv_nsec cmp (usp)->tv_nsec) : \
- ((tsp)->tv_sec cmp (usp)->tv_sec))
-
-#define timespecadd(tsp, usp, vsp) \
- do { \
- (vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec; \
- (vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec; \
- if ((vsp)->tv_nsec >= 1000000000L) { \
- (vsp)->tv_sec++; \
- (vsp)->tv_nsec -= 1000000000L; \
- } \
- } while (/* CONSTCOND */ 0)
-
-#define timespecsub(tsp, usp, vsp) \
- do { \
- (vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; \
- (vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; \
- if ((vsp)->tv_nsec < 0) { \
- (vsp)->tv_sec--; \
- (vsp)->tv_nsec += 1000000000L; \
- } \
- } while (/* CONSTCOND */ 0)
-
-/*
- * Names of the interval timers, and structure
- * defining a timer setting.
- */
-#define ITIMER_REAL 0
-#define ITIMER_VIRTUAL 1
-#define ITIMER_PROF 2
-
-struct itimerval {
- struct timeval it_interval; /* timer interval */
- struct timeval it_value; /* current value */
-};
-
-/*
- * Structure defined by POSIX.1b to be like a itimerval, but with
- * timespecs. Used in the timer_*() system calls.
- */
-struct itimerspec {
- struct timespec it_interval;
- struct timespec it_value;
-};
-
-#define CLOCK_REALTIME 0
-#define CLOCK_VIRTUAL 1
-#define CLOCK_PROF 2
-#define CLOCK_MONOTONIC 3
-
-#define TIMER_RELTIME 0x0 /* relative timer */
-#define TIMER_ABSTIME 0x1 /* absolute timer */
-
-#if 0
- #if (_POSIX_C_SOURCE - 0) >= 200112L || \
- (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
- (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
- #include <sys/select.h>
- #endif
-#endif /* if 0 */
-
-#include <sys/EfiCdefs.h>
-#include <time.h>
-
-/* Functions useful for dealing with EFI */
-__BEGIN_DECLS
-
-/* Convert an EFI_TIME structure into a time_t value. */
-time_t Efi2Time( EFI_TIME *EfiBDtime);
-
-/* Convert a time_t value into an EFI_TIME structure.
- It is the caller's responsibility to free the returned structure.
-*/
-EFI_TIME * Time2Efi(time_t OTime);
-
-/* Convert an EFI_TIME structure into a C Standard tm structure. */
-void Efi2Tm( EFI_TIME *EfiBDtime, struct tm *NewTime);
-void Tm2Efi( struct tm *BdTime, EFI_TIME *ETime);
-
-/* BSD compatibility functions */
-int gettimeofday (struct timeval *tp, void *ignore);
-/* POSIX compatibility functions */
-int getitimer (int which, struct itimerval *value);
-int setitimer (int which, const struct itimerval *value, struct itimerval *ovalue);
-
-__END_DECLS
-
-#endif /* !_SYS_TIME_H_ */
diff --git a/StdLib/Include/sys/types.h b/StdLib/Include/sys/types.h
deleted file mode 100644
index 54ae00836f..0000000000
--- a/StdLib/Include/sys/types.h
+++ /dev/null
@@ -1,301 +0,0 @@
-/** @file
- System type declarations.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: types.h,v 1.71.12.1 2007/09/27 13:40:47 xtraeme Exp
- types.h 8.4 (Berkeley) 1/21/94
-**/
-#ifndef _SYS_TYPES_H_
-#define _SYS_TYPES_H_
-
-#include <sys/EfiCdefs.h>
-
-/* Machine type dependent parameters. */
-#include <machine/types.h>
-
-#include <machine/ansi.h>
-#include <machine/int_types.h>
-
-
-#include <sys/ansi.h>
-
-#ifndef int8_t
- typedef __int8_t int8_t;
- #define int8_t __int8_t
-#endif
-
-#ifndef uint8_t
- typedef __uint8_t uint8_t;
- #define uint8_t __uint8_t
-#endif
-
-#ifndef int16_t
- typedef __int16_t int16_t;
- #define int16_t __int16_t
-#endif
-
-#ifndef uint16_t
- typedef __uint16_t uint16_t;
- #define uint16_t __uint16_t
-#endif
-
-#ifndef int32_t
- typedef __int32_t int32_t;
- #define int32_t __int32_t
-#endif
-
-#ifndef uint32_t
- typedef __uint32_t uint32_t;
- #define uint32_t __uint32_t
-#endif
-
-#ifndef int64_t
- typedef __int64_t int64_t;
- #define int64_t __int64_t
-#endif
-
-#ifndef uint64_t
- typedef __uint64_t uint64_t;
- #define uint64_t __uint64_t
-#endif
-
-typedef uint8_t u_int8_t;
-typedef uint16_t u_int16_t;
-typedef uint32_t u_int32_t;
-typedef uint64_t u_int64_t;
-
-#include <machine/endian.h>
-
-#if defined(_NETBSD_SOURCE)
- typedef UINT8 u_char;
- typedef UINT16 u_short;
- typedef UINTN u_int;
- typedef ULONGN u_long;
-
- typedef UINT8 unchar; /* Sys V compatibility */
- typedef UINT16 ushort; /* Sys V compatibility */
- typedef UINTN uint; /* Sys V compatibility */
- typedef ULONGN ulong; /* Sys V compatibility */
-
- typedef u_long cpuid_t;
-#endif
-
-typedef uint64_t u_quad_t; /* quads */
-typedef int64_t quad_t;
-typedef quad_t * qaddr_t;
-
-/*
- * The types longlong_t and u_longlong_t exist for use with the
- * Sun-derived XDR routines involving these types, and their usage
- * in other contexts is discouraged. Further note that these types
- * may not be equivalent to "long long" and "unsigned long long",
- * they are only guaranteed to be signed and unsigned 64-bit types
- * respectively. Portable programs that need 64-bit types should use
- * the C99 types int64_t and uint64_t instead.
- */
-
-typedef int64_t longlong_t; /* for XDR */
-typedef uint64_t u_longlong_t; /* for XDR */
-
-typedef int64_t blkcnt_t; /* fs block count */
-typedef uint32_t blksize_t; /* fs optimal block size */
-
-#ifndef fsblkcnt_t
- typedef __fsblkcnt_t fsblkcnt_t; /* fs block count (statvfs) */
- #define fsblkcnt_t __fsblkcnt_t
-#endif
-
-#ifndef fsfilcnt_t
- typedef __fsfilcnt_t fsfilcnt_t; /* fs file count */
- #define fsfilcnt_t __fsfilcnt_t
-#endif
-
-#ifndef caddr_t
- typedef __caddr_t caddr_t; /* core address */
- #define caddr_t __caddr_t
-#endif
-
-#ifdef __daddr_t
- typedef __daddr_t daddr_t; /* disk address */
- #undef __daddr_t
-#else
- typedef int64_t daddr_t; /* disk address */
-#endif
-
-typedef uint32_t dev_t; /* device number */
-typedef uint32_t fixpt_t; /* fixed point number */
-
-#ifndef gid_t
- typedef __gid_t gid_t; /* group id */
- #define gid_t __gid_t
-#endif
-
-typedef uint32_t id_t; /* group id, process id or user id */
-typedef uint64_t ino_t; /* inode number */
-typedef EFI_LONG_T key_t; /* IPC key (for Sys V IPC) */
-
-#ifndef mode_t
- typedef __mode_t mode_t; /* permissions */
- #define mode_t __mode_t
-#endif
-
-typedef uint32_t nlink_t; /* link count */
-
-#ifndef off_t
- typedef __off_t off_t; /* file offset */
- #define off_t __off_t
-#endif
-
-#ifndef pid_t
- typedef __pid_t pid_t; /* process id */
- #define pid_t __pid_t
-#endif
-typedef int32_t lwpid_t; /* LWP id */
-typedef quad_t rlim_t; /* resource limit */
-typedef int32_t segsz_t; /* segment size */
-typedef int32_t swblk_t; /* swap offset */
-
-#ifndef uid_t
- typedef __uid_t uid_t; /* user id */
- #define uid_t __uid_t
-#endif
-
-typedef int64_t dtime_t; /* on-disk time_t */
-
-#if defined(_LIBC)
- /*
- * semctl(2)'s argument structure. This is here for the benefit of
- * <sys/syscallargs.h>. It is not in the user's namespace in SUSv2.
- * The SUSv2 semctl(2) takes variable arguments.
- */
- union __semun {
- int val; /* value for SETVAL */
- struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */
- unsigned short *array; /* array for GETALL & SETALL */
- };
- /* For the same reason as above */
- #include <sys/stdint.h>
- typedef intptr_t semid_t;
-#endif /* _LIBC */
-
-/*
- * These belong in EfiSysCall.h, but are also placed here to ensure that
- * long arguments will be promoted to off_t if the program fails to
- * include that header or explicitly cast them to off_t.
- */
-#ifndef __OFF_T_SYSCALLS_DECLARED
- #define __OFF_T_SYSCALLS_DECLARED
- __BEGIN_DECLS
- extern off_t lseek (int, off_t, int);
- extern int truncate (const char *, off_t);
- extern int ftruncate (int, off_t);
- __END_DECLS
-#endif /* __OFF_T_SYSCALLS_DECLARED */
-
-#if defined(_NETBSD_SOURCE)
- /* Major, minor numbers, dev_t's. */
- #define major(x) ((int32_t)((((x) & 0x000fff00) >> 8)))
- #define minor(x) ((int32_t)((((x) & 0xfff00000) >> 12) | \
- (((x) & 0x000000ff) >> 0)))
- #define makedev(x,y) ((dev_t)((((x) << 8) & 0x000fff00) | \
- (((y) << 12) & 0xfff00000) | \
- (((y) << 0) & 0x000000ff)))
-#endif
-
-#if defined(_BSD_CLOCK_T_) && defined(_EFI_CLOCK_T)
- typedef _EFI_CLOCK_T clock_t;
- #undef _BSD_CLOCK_T_
- #undef _EFI_CLOCK_T
-#endif
-
-#ifdef _EFI_SIZE_T_
- typedef _EFI_SIZE_T_ size_t;
- #define _SIZE_T
- #undef _BSD_SIZE_T_
- #undef _EFI_SIZE_T_
-#endif
-
-#ifdef _BSD_SSIZE_T_
- typedef _BSD_SSIZE_T_ ssize_t;
- #undef _BSD_SSIZE_T_
-#endif
-
-#if defined(_BSD_TIME_T_) && defined(_EFI_TIME_T)
- typedef _EFI_TIME_T time_t;
- #undef _BSD_TIME_T_
- #undef _EFI_TIME_T
-#endif
-
-#ifdef _BSD_CLOCKID_T_
- typedef _BSD_CLOCKID_T_ clockid_t;
- #undef _BSD_CLOCKID_T_
-#endif
-
-#ifdef _BSD_TIMER_T_
- typedef _BSD_TIMER_T_ timer_t;
- #undef _BSD_TIMER_T_
-#endif
-
-#ifdef _BSD_SUSECONDS_T_
- typedef _BSD_SUSECONDS_T_ suseconds_t;
- #undef _BSD_SUSECONDS_T_
-#endif
-
-#ifdef _BSD_USECONDS_T_
- typedef _BSD_USECONDS_T_ useconds_t;
- #undef _BSD_USECONDS_T_
-#endif
-
-#ifdef _NETBSD_SOURCE
- #include <sys/fd_set.h>
- #define NBBY __NBBY
-
- typedef struct kauth_cred *kauth_cred_t;
-
-#endif
-
-#if 0
- #if !defined(_KERNEL) && !defined(_STANDALONE)
- #if (_POSIX_C_SOURCE - 0L) >= 199506L || (_XOPEN_SOURCE - 0) >= 500 || \
- defined(_NETBSD_SOURCE)
- #include <pthread_types.h>
- #endif
- #endif
-#endif /* if 0 */
-
-#endif /* !_SYS_TYPES_H_ */
diff --git a/StdLib/Include/sys/uio.h b/StdLib/Include/sys/uio.h
deleted file mode 100644
index e6d667ba30..0000000000
--- a/StdLib/Include/sys/uio.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/* $NetBSD: uio.h,v 1.34 2006/03/01 12:38:32 yamt Exp $ */
-
-/*
- * Copyright (c) 1982, 1986, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)uio.h 8.5 (Berkeley) 2/22/94
- */
-
-#ifndef _SYS_UIO_H_
-#define _SYS_UIO_H_
-
-#ifdef _KERNEL
-#ifndef __UIO_EXPOSE
-#define __UIO_EXPOSE
-#endif
-#endif
-
-#include <machine/ansi.h>
-#include <sys/featuretest.h>
-
-#ifdef _EFI_SIZE_T_
-typedef _EFI_SIZE_T_ size_t;
-#undef _EFI_SIZE_T_
-#undef _BSD_SIZE_T_
-#endif
-
-#ifdef _BSD_SSIZE_T_
-typedef _BSD_SSIZE_T_ ssize_t;
-#undef _BSD_SSIZE_T_
-#endif
-
-struct iovec {
- void *iov_base; /* Base address. */
- size_t iov_len; /* Length. */
-};
-
-#if defined(_NETBSD_SOURCE)
-#include <sys/ansi.h>
-
-#ifndef off_t
-typedef __off_t off_t; /* file offset */
-#define off_t __off_t
-#endif
-
-enum uio_rw { UIO_READ, UIO_WRITE };
-
-/* Segment flag values. */
-enum uio_seg {
- UIO_USERSPACE, /* from user data space */
- UIO_SYSSPACE /* from system space */
-};
-
-#ifdef __UIO_EXPOSE
-
-struct uio {
- struct iovec *uio_iov; /* pointer to array of iovecs */
- int uio_iovcnt; /* number of iovecs in array */
- off_t uio_offset; /* offset into file this uio corresponds to */
- size_t uio_resid; /* residual i/o count */
- enum uio_rw uio_rw; /* see above */
- struct vmspace *uio_vmspace;
-};
-#define UIO_SETUP_SYSSPACE(uio) uio_setup_sysspace(uio)
-
-#endif /* __UIO_EXPOSE */
-
-/*
- * Limits
- */
-/* Deprecated: use IOV_MAX from <limits.h> instead. */
-#define UIO_MAXIOV 1024 /* max 1K of iov's */
-#endif /* _NETBSD_SOURCE */
-
-#ifdef _KERNEL
-#include <sys/mallocvar.h>
-
-MALLOC_DECLARE(M_IOV);
-
-#define UIO_SMALLIOV 8 /* 8 on stack, else malloc */
-
-void uio_setup_sysspace(struct uio *);
-#endif
-
-#ifndef _KERNEL
-#include <sys/EfiCdefs.h>
-
-__BEGIN_DECLS
-#if defined(_NETBSD_SOURCE)
-ssize_t preadv(int, const struct iovec *, int, off_t);
-ssize_t pwritev(int, const struct iovec *, int, off_t);
-#endif /* _NETBSD_SOURCE */
-ssize_t readv(int, const struct iovec *, int);
-ssize_t writev(int, const struct iovec *, int);
-__END_DECLS
-#else
-int ureadc(int, struct uio *);
-#endif /* !_KERNEL */
-
-#endif /* !_SYS_UIO_H_ */
diff --git a/StdLib/Include/sys/unistd.h b/StdLib/Include/sys/unistd.h
deleted file mode 100644
index 274e29f096..0000000000
--- a/StdLib/Include/sys/unistd.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/** @file
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)unistd.h 8.2 (Berkeley) 1/7/94
- NetBSD: unistd.h,v 1.35 2006/08/14 18:17:48 rpaulo Exp
-**/
-#ifndef _SYS_UNISTD_H_
-#define _SYS_UNISTD_H_
-
-#include <sys/featuretest.h>
-
-/* compile-time symbolic constants */
-
-/*
- * According to POSIX 1003.1:
- * "The saved set-user-ID capability allows a program to regain the
- * effective user ID established at the last exec call."
- * However, the setuid/setgid function as specified by POSIX 1003.1 does
- * not allow changing the effective ID from the super-user without also
- * changed the saved ID, so it is impossible to get super-user privileges
- * back later. Instead we provide this feature independent of the current
- * effective ID through the seteuid/setegid function. In addition, we do
- * not use the saved ID as specified by POSIX 1003.1 in setuid/setgid,
- * because this would make it impossible for a set-user-ID executable
- * owned by a user other than the super-user to permanently revoke its
- * extra privileges.
- */
-#ifdef _NOT_AVAILABLE
-#define _POSIX_SAVED_IDS /* saved set-user-ID and set-group-ID */
-#endif
-
-#define _POSIX_VERSION 199009L
-#define _POSIX2_VERSION 199212L
-
-/* execution-time symbolic constants */
- /* timers */
-#define _POSIX_TIMERS 200112L
-
-/* Always ensure that these are consistent with <fcntl.h>!
- whence values for lseek(2).
-*/
-#ifndef SEEK_SET
-#define SEEK_SET 0 /**< set file offset to offset */
-#endif
-#ifndef SEEK_CUR
-#define SEEK_CUR 1 /**< set file offset to current plus offset */
-#endif
-#ifndef SEEK_END
-#define SEEK_END 2 /**< set file offset to EOF plus offset */
-#endif
-
-/* whence values for lseek(2); renamed by POSIX 1003.1 */
-#define L_SET SEEK_SET
-#define L_INCR SEEK_CUR
-#define L_XTND SEEK_END
-
-/* configurable system strings */
-#define _CS_PATH 1
-
-#endif /* !_SYS_UNISTD_H_ */
diff --git a/StdLib/Include/sys/wait.h b/StdLib/Include/sys/wait.h
deleted file mode 100644
index 64200aa999..0000000000
--- a/StdLib/Include/sys/wait.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/* $NetBSD: wait.h,v 1.24 2005/12/11 12:25:21 christos Exp $ */
-
-/*
- * Copyright (c) 1982, 1986, 1989, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)wait.h 8.2 (Berkeley) 7/10/94
- */
-#ifndef _SYS_WAIT_H_
-#define _SYS_WAIT_H_
-
-#include <sys/featuretest.h>
-#include <sys/types.h>
-
-/*
- * This file holds definitions relevent to the wait4 system call
- * and the alternate interfaces that use it (wait, wait3, waitpid).
- */
-
-/*
- * Macros to test the exit status returned by wait
- * and extract the relevant values.
- */
-#define _W_INT(w) (*(int *)(void *)&(w)) /* convert union wait to int */
-
-#define _WSTATUS(x) (_W_INT(x) & 0177)
-#define _WSTOPPED 0177 /* _WSTATUS if process is stopped */
-#define WIFSTOPPED(x) (_WSTATUS(x) == _WSTOPPED)
-#define WSTOPSIG(x) ((int)(((unsigned int)_W_INT(x)) >> 8) & 0xff)
-#define WIFSIGNALED(x) (_WSTATUS(x) != _WSTOPPED && _WSTATUS(x) != 0)
-#define WTERMSIG(x) (_WSTATUS(x))
-#define WIFEXITED(x) (_WSTATUS(x) == 0)
-#define WEXITSTATUS(x) ((int)(((unsigned int)_W_INT(x)) >> 8) & 0xff)
-#define WCOREFLAG 0200
-#define WCOREDUMP(x) (_W_INT(x) & WCOREFLAG)
-
-#define W_EXITCODE(ret, sig) ((ret) << 8 | (sig))
-#define W_STOPCODE(sig) ((sig) << 8 | _WSTOPPED)
-
-/*
- * Option bits for the third argument of wait4. WNOHANG causes the
- * wait to not hang if there are no stopped or terminated processes, rather
- * returning an error indication in this case (pid==0). WUNTRACED
- * indicates that the caller should receive status about untraced children
- * which stop due to signals. If children are stopped and a wait without
- * this option is done, it is as though they were still running... nothing
- * about them is returned.
- */
-#define WNOHANG 0x00000001 /* don't hang in wait */
-#define WUNTRACED 0x00000002 /* tell about stopped,
- untraced children */
-#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
-#define WALTSIG 0x00000004 /* wait for processes that exit
- with an alternate signal (i.e.
- not SIGCHLD) */
-#define WALLSIG 0x00000008 /* wait for processes that exit
- with any signal, i.e. SIGCHLD
- and alternates */
-
-/*
- * These are the Linux names of some of the above flags, for compatibility
- * with Linux's clone(2) API.
- */
-#define __WCLONE WALTSIG
-#define __WALL WALLSIG
-
-/*
- * These bits are used in order to support SVR4 (etc) functionality
- * without replicating sys_wait4 5 times.
- */
-#define WNOWAIT 0x00010000 /* Don't mark child 'P_WAITED' */
-#define WNOZOMBIE 0x00020000 /* Ignore zombies */
-#endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */
-
-/* POSIX extensions and 4.2/4.3 compatibility: */
-
-/*
- * Tokens for special values of the "pid" parameter to wait4.
- */
-#define WAIT_ANY (-1) /* any process */
-#define WAIT_MYPGRP 0 /* any process in my process group */
-
-/*
- * Deprecated:
- * Structure of the information in the status word returned by wait4.
- * If w_stopval==WSTOPPED, then the second structure describes
- * the information returned, else the first.
- */
-union wait {
- int w_status; /* used in syscall */
- /*
- * Terminated process status.
- */
- struct {
-#if BYTE_ORDER == LITTLE_ENDIAN
- unsigned int w_Termsig:7, /* termination signal */
- w_Coredump:1, /* core dump indicator */
- w_Retcode:8, /* exit code if w_termsig==0 */
- w_Filler:16; /* upper bits filler */
-#endif
-#if BYTE_ORDER == BIG_ENDIAN
- unsigned int w_Filler:16, /* upper bits filler */
- w_Retcode:8, /* exit code if w_termsig==0 */
- w_Coredump:1, /* core dump indicator */
- w_Termsig:7; /* termination signal */
-#endif
- } w_T;
- /*
- * Stopped process status. Returned
- * only for traced children unless requested
- * with the WUNTRACED option bit.
- */
- struct {
-#if BYTE_ORDER == LITTLE_ENDIAN
- unsigned int w_Stopval:8, /* == W_STOPPED if stopped */
- w_Stopsig:8, /* signal that stopped us */
- w_Filler:16; /* upper bits filler */
-#endif
-#if BYTE_ORDER == BIG_ENDIAN
- unsigned int w_Filler:16, /* upper bits filler */
- w_Stopsig:8, /* signal that stopped us */
- w_Stopval:8; /* == W_STOPPED if stopped */
-#endif
- } w_S;
-};
-#define w_termsig w_T.w_Termsig
-#define w_coredump w_T.w_Coredump
-#define w_retcode w_T.w_Retcode
-#define w_stopval w_S.w_Stopval
-#define w_stopsig w_S.w_Stopsig
-
-#define WSTOPPED _WSTOPPED
-
-__BEGIN_DECLS
-pid_t wait(int *);
-
-#if 0 /* Normally declared here but not implemented for UEFI. */
-struct rusage; /* forward declaration */
-
-pid_t waitpid(pid_t, int *, int);
-pid_t wait3(int *, int, struct rusage *);
-pid_t wait4(pid_t, int *, int, struct rusage *);
-#endif
-__END_DECLS
-
-#endif /* !_SYS_WAIT_H_ */
diff --git a/StdLib/Include/sysexits.h b/StdLib/Include/sysexits.h
deleted file mode 100644
index e18348d39a..0000000000
--- a/StdLib/Include/sysexits.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/** @file contains exit code definitions for exiting systems applications.
-
- These exit codes are an extension beyond the two values specified by
- ISO/IEC 9899:199409 and defined in <stdlib.h>.
-
- * Copyright (c) 1987, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)sysexits.h 8.1 (Berkeley) 6/2/93
- */
-
-#ifndef _SYSEXITS_H_
-#define _SYSEXITS_H_
-
-/*
- * SYSEXITS.H -- Exit status codes for system programs.
- *
- * This include file attempts to categorize possible error
- * exit statuses for system programs, notably delivermail
- * and the Berkeley network.
- *
- * Error numbers begin at EX__BASE to reduce the possibility of
- * clashing with other exit statuses that random programs may
- * already return. The meaning of the codes is approximately
- * as follows:
- *
- * EX_USAGE -- The command was used incorrectly, e.g., with
- * the wrong number of arguments, a bad flag, a bad
- * syntax in a parameter, or whatever.
- * EX_DATAERR -- The input data was incorrect in some way.
- * This should only be used for user's data & not
- * system files.
- * EX_NOINPUT -- An input file (not a system file) did not
- * exist or was not readable. This could also include
- * errors like "No message" to a mailer (if it cared
- * to catch it).
- * EX_NOUSER -- The user specified did not exist. This might
- * be used for mail addresses or remote logins.
- * EX_NOHOST -- The host specified did not exist. This is used
- * in mail addresses or network requests.
- * EX_UNAVAILABLE -- A service is unavailable. This can occur
- * if a support program or file does not exist. This
- * can also be used as a catchall message when something
- * you wanted to do doesn't work, but you don't know
- * why.
- * EX_SOFTWARE -- An internal software error has been detected.
- * This should be limited to non-operating system related
- * errors as possible.
- * EX_OSERR -- An operating system error has been detected.
- * This is intended to be used for such things as "cannot
- * fork", "cannot create pipe", or the like. It includes
- * things like getuid returning a user that does not
- * exist in the passwd file.
- * EX_OSFILE -- Some system file (e.g., /etc/passwd, /etc/utmp,
- * etc.) does not exist, cannot be opened, or has some
- * sort of error (e.g., syntax error).
- * EX_CANTCREAT -- A (user specified) output file cannot be
- * created.
- * EX_IOERR -- An error occurred while doing I/O on some file.
- * EX_TEMPFAIL -- temporary failure, indicating something that
- * is not really an error. In sendmail, this means
- * that a mailer (e.g.) could not create a connection,
- * and the request should be reattempted later.
- * EX_PROTOCOL -- the remote system returned something that
- * was "not possible" during a protocol exchange.
- * EX_NOPERM -- You did not have sufficient permission to
- * perform the operation. This is not intended for
- * file system problems, which should use NOINPUT or
- * CANTCREAT, but rather for higher level permissions.
- */
-
-#define EX_OK 0 /* successful termination */
-
-#define EX__BASE 64 /* base value for error messages */
-
-#define EX_USAGE 64 /* command line usage error */
-#define EX_DATAERR 65 /* data format error */
-#define EX_NOINPUT 66 /* cannot open input */
-#define EX_NOUSER 67 /* addressee unknown */
-#define EX_NOHOST 68 /* host name unknown */
-#define EX_UNAVAILABLE 69 /* service unavailable */
-#define EX_SOFTWARE 70 /* internal software error */
-#define EX_OSERR 71 /* system error (e.g., can't fork) */
-#define EX_OSFILE 72 /* critical OS file missing */
-#define EX_CANTCREAT 73 /* can't create (user) output file */
-#define EX_IOERR 74 /* input/output error */
-#define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */
-#define EX_PROTOCOL 76 /* remote error in protocol */
-#define EX_NOPERM 77 /* permission denied */
-#define EX_CONFIG 78 /* configuration error */
-
-#define EX__MAX 78 /* maximum listed value */
-
-#endif /* !_SYSEXITS_H_ */
diff --git a/StdLib/Include/time.h b/StdLib/Include/time.h
deleted file mode 100644
index ecef1e2f61..0000000000
--- a/StdLib/Include/time.h
+++ /dev/null
@@ -1,434 +0,0 @@
-/** @file
- The header <time.h> defines two macros, and declares several types and
- functions for manipulating time. Many functions deal with a calendar time
- that represents the current date (according to the Gregorian calendar) and
- time. Some functions deal with local time, which is the calendar time
- expressed for some specific time zone, and with Daylight Saving Time, which
- is a temporary change in the algorithm for determining local time. The local
- time zone and Daylight Saving Time are implementation-defined.
-
- The macros defined are NULL; and CLOCKS_PER_SEC which expands to an
- expression with type clock_t (described below) that is the number per second
- of the value returned by the clock function.
-
- The types declared are size_t along with clock_t and time_t which are
- arithmetic types capable of representing times; and struct tm which holds
- the components of a calendar time, called the broken-down time.
-
- The range and precision of times representable in clock_t and time_t are
- implementation-defined. The tm structure shall contain at least the following
- members, in any order. The semantics of the members and their normal ranges
- are expressed in the comments.
- - int tm_sec; // seconds after the minute - [0, 60]
- - int tm_min; // minutes after the hour - [0, 59]
- - int tm_hour; // hours since midnight - [0, 23]
- - int tm_mday; // day of the month - [1, 31]
- - int tm_mon; // months since January - [0, 11]
- - int tm_year; // years since 1900
- - int tm_wday; // days since Sunday - [0, 6]
- - int tm_yday; // days since January 1 - [0, 365]
- - int tm_isdst; // Daylight Saving Time flag
-
- The value of tm_isdst is positive if Daylight Saving Time is in effect, zero
- if Daylight Saving Time is not in effect, and negative if the information
- is not available.
-
- The following macros are defined in this file:<BR>
- @verbatim
- NULL
- CLOCKS_PER_SEC The number of values per second returned by the clock function.
- @endverbatim
-
- The following types are defined in this file:<BR>
- @verbatim
- size_t Unsigned integer type of the result of the sizeof operator.
- clock_t Arithmetic type capable of representing a time from the clock function.
- time_t Arithmetic type capable of representing a time.
- struct tm Holds the components of a calendar time; or broken-down time.
- @endverbatim
-
- The following functions are declared in this file:<BR>
- @verbatim
- ############### Time Manipulation Functions
- clock_t clock (void);
- double difftime (time_t time1, time_t time0);
- time_t mktime (struct tm *timeptr);
- time_t time (time_t *timer);
-
- ################# Time Conversion Functions
- char * asctime (const struct tm *timeptr);
- char * ctime (const time_t *timer);
- struct tm * gmtime (const time_t *timer);
- time_t timegm (struct tm*);
- struct tm * localtime (const time_t *timer);
- size_t strftime (char * __restrict s, size_t maxsize,
- const char * __restrict format,
- const struct tm * __restrict timeptr);
- char * strptime (const char *, const char * format, struct tm*);
- @endverbatim
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _TIME_H
-#define _TIME_H
-#include <sys/EfiCdefs.h>
-
-#define CLOCKS_PER_SEC __getCPS()
-
-#ifdef _EFI_SIZE_T_
- typedef _EFI_SIZE_T_ size_t;
- #undef _EFI_SIZE_T_
- #undef _BSD_SIZE_T_
-#endif
-
-#ifdef _EFI_CLOCK_T
- /** An arithmetic type capable of representing values returned by clock(); **/
- typedef _EFI_CLOCK_T clock_t;
- #undef _EFI_CLOCK_T
-#endif
-
-#ifdef _EFI_TIME_T
- /** An arithmetic type capable of representing values returned as calendar time
- values, such as that returned by mktime();
- **/
- typedef _EFI_TIME_T time_t;
- #undef _EFI_TIME_T
-#endif
-
-/** Value added to tm_year to get the full year value. TM_YEAR_BASE + 110 --> 2010 **/
-#define TM_YEAR_BASE 1900
-
-/** @{
- Values for the tm_wday member of struct tm.
-**/
-#define TM_SUNDAY 0
-#define TM_MONDAY 1
-#define TM_TUESDAY 2
-#define TM_WEDNESDAY 3
-#define TM_THURSDAY 4
-#define TM_FRIDAY 5
-#define TM_SATURDAY 6
-/*@}*/
-
-/** @{
- Values for the tm_mon member of struct tm.
-**/
-#define TM_JANUARY 0
-#define TM_FEBRUARY 1
-#define TM_MARCH 2
-#define TM_APRIL 3
-#define TM_MAY 4
-#define TM_JUNE 5
-#define TM_JULY 6
-#define TM_AUGUST 7
-#define TM_SEPTEMBER 8
-#define TM_OCTOBER 9
-#define TM_NOVEMBER 10
-#define TM_DECEMBER 11
-/*@}*/
-
-/** A structure holding the components of a calendar time, called the
- broken-down time. The first nine (9) members are as mandated by the
- C95 standard. Additional fields have been added for EFI support.
-**/
-struct tm {
- int tm_year; // years since 1900
- int tm_mon; // months since January [0, 11]
- int tm_mday; // day of the month [1, 31]
- int tm_hour; // hours since midnight [0, 23]
- int tm_min; // minutes after the hour [0, 59]
- int tm_sec; // seconds after the minute [0, 60]
- int tm_wday; // days since Sunday [0, 6]
- int tm_yday; // days since January 1 [0, 365]
- int tm_isdst; // Daylight Saving Time flag
- int tm_zoneoff; // EFI TimeZone offset, -1440 to 1440 or 2047
- int tm_daylight; // EFI Daylight flags
- UINT32 tm_Nano; // EFI Nanosecond value
-};
-
-/* ############### Time Manipulation Functions ########################## */
-
-/** The clock function determines the processor time used.
-
- @return The clock function returns the implementation's best
- approximation to the processor time used by the program since the
- beginning of an implementation-defined era related only to the
- program invocation. To determine the time in seconds, the value
- returned by the clock function should be divided by the value of
- the macro CLOCKS_PER_SEC. If the processor time used is not
- available or its value cannot be represented, the function
- returns the value (clock_t)(-1).
-**/
-clock_t clock(void);
-
-/** Compute the difference between two calendar times: time1 - time0.
-
- @param[in] time1 An arithmetic calendar time.
- @param[in] time2 Another arithmetic calendar time.
-
- @return The difference between the two times expressed in seconds.
-**/
-double difftime(time_t time1, time_t time0);
-
-/** Convert a broken-down time into an arithmetic calendar time.
-
- The mktime function converts the broken-down time, expressed as local time,
- in the structure pointed to by timeptr into a calendar time value with the
- same encoding as that of the values returned by the time function. The
- original values of the tm_wday and tm_yday components of the structure are
- ignored, and the original values of the other components are not
- restricted to the ranges indicated above. On successful completion,
- the values of the tm_wday and tm_yday components of the structure are set
- appropriately, and the other components are set to represent the specified
- calendar time, but with their values forced to the ranges indicated above;
- the final value of tm_mday is not set until tm_mon and tm_year
- are determined.
-
- @param[in] timeptr Pointer to a broken-down time to be converted.
-
- @return The mktime function returns the specified calendar time encoded
- as a value of type time_t. If the calendar time cannot be
- represented, the function returns the value (time_t)(-1).
-**/
-time_t mktime(struct tm *timeptr);
-
-/** The time function determines the current calendar time.
-
- The encoding of the value is unspecified and undocumented.
-
- @param[out] timer An optional pointer to an object in which to
- store the calendar time.
-
- @return The time function returns the implementation's best approximation
- of the current calendar time. The value (time_t)(-1) is returned
- if the calendar time is not available. If timer is not a null
- pointer, the return value is also assigned to the object it
- points to.
-**/
-time_t time(time_t *timer);
-
-/* ################# Time Conversion Functions ########################## */
-
-/** The asctime function converts the broken-down time in the structure pointed
- to by timeptr into a string in the form<BR>
- @verbatim
- Sun Sep 16 01:03:52 1973\n\0
- @endverbatim
-
- @param[in] timeptr A pointer to a broken-down time to convert.
-
- @return The asctime function returns a pointer to the string.
-**/
-char * asctime(const struct tm *timeptr);
-
-/** The ctime function converts the calendar time pointed to by timer to a local
- time in the form of a string. It is equivalent to asctime(localtime(timer))
-
- @param[in] timer Pointer to a calendar time value to convert into a
- string representation.
-
- @return The ctime function returns the pointer returned by the asctime
- function with that broken-down time as argument.
-**/
-char * ctime(const time_t *timer);
-
-/** The gmtime function converts the calendar time pointed to by timer into a
- broken-down time, expressed as UTC.
-
- @param[in] timer Pointer to a calendar time value to convert into a
- broken-down time.
-
- @return The gmtime function returns a pointer to the broken-down time,
- or a null pointer if the specified time cannot be converted to UTC.
-**/
-struct tm * gmtime(const time_t *timer);
-
-/** The timegm function is the opposite of gmtime.
-
- @param[in] tm Pointer to a broken-down time to convert into a
- calendar time.
-
- @return The calendar time expressed as UTC.
-**/
-time_t timegm(struct tm*);
-
-/** The localtime function converts the calendar time pointed to by timer into
- a broken-down time, expressed as local time.
-
- @param[in] timer Pointer to a calendar time value to be converted.
-
- @return The localtime function returns a pointer to the broken-down time,
- or a null pointer if the specified time cannot be converted to
- local time.
-**/
-struct tm * localtime(const time_t *timer);
-
-/** The strftime function places characters into the array pointed to by s as
- controlled by the string pointed to by format. The format shall be a
- multibyte character sequence, beginning and ending in its initial shift
- state. The format string consists of zero or more conversion specifiers
- and ordinary multibyte characters. A conversion specifier consists of
- a % character, possibly followed by an E or O modifier character
- (described below), followed by a character that determines the behavior of
- the conversion specifier.
-
- All ordinary multibyte characters (including the terminating null
- character) are copied unchanged into the array. If copying takes place
- between objects that overlap, the behavior is undefined. No more than
- maxsize characters are placed into the array. 3 Each conversion specifier
- is replaced by appropriate characters as described in the following list.
- The appropriate characters are determined using the LC_TIME category of
- the current locale and by the values of zero or more members of the
- broken-down time structure pointed to by timeptr, as specified in brackets
- in the description. If any of the specified values is outside the normal
- range, the characters stored are unspecified.
-
- %a is replaced by the locale's abbreviated weekday name. [tm_wday]
- %A is replaced by the locale's full weekday name. [tm_wday]
- %b is replaced by the locale's abbreviated month name. [tm_mon]
- %B is replaced by the locale's full month name. [tm_mon]
- %c is replaced by the locale's appropriate date and time representation.
- %C is replaced by the year divided by 100 and truncated to an integer,
- as a decimal number (00-99). [tm_year]
- %d is replaced by the day of the month as a decimal number (01-31). [tm_mday]
- %D is equivalent to "%m/%d/%y". [tm_mon, tm_mday, tm_year]
- %e is replaced by the day of the month as a decimal number (1-31);
- a single digit is preceded by a space. [tm_mday]
- %F is equivalent to "%Y-%m-%d" (the ISO 8601 date format).
- [tm_year, tm_mon, tm_mday]
- %g is replaced by the last 2 digits of the week-based year (see below) as
- a decimal number (00-99). [tm_year, tm_wday, tm_yday]
- %G is replaced by the week-based year (see below) as a decimal number
- (e.g., 1997). [tm_year, tm_wday, tm_yday]
- %h is equivalent to "%b". [tm_mon]
- %H is replaced by the hour (24-hour clock) as a decimal number (00-23). [tm_hour]
- %I is replaced by the hour (12-hour clock) as a decimal number (01-12). [tm_hour]
- %j is replaced by the day of the year as a decimal number (001-366). [tm_yday]
- %m is replaced by the month as a decimal number (01-12). [tm_mon]
- %M is replaced by the minute as a decimal number (00-59). [tm_min]
- %n is replaced by a new-line character.
- %p is replaced by the locale's equivalent of the AM/PM designations
- associated with a 12-hour clock. [tm_hour]
- %r is replaced by the locale's 12-hour clock time. [tm_hour, tm_min, tm_sec]
- %R is equivalent to "%H:%M". [tm_hour, tm_min]
- %S is replaced by the second as a decimal number (00-60). [tm_sec]
- %t is replaced by a horizontal-tab character.
- %T is equivalent to "%H:%M:%S" (the ISO 8601 time format).
- [tm_hour, tm_min, tm_sec]
- %u is replaced by the ISO 8601 weekday as a decimal number (1-7),
- where Monday is 1. [tm_wday]
- %U is replaced by the week number of the year (the first Sunday as the
- first day of week 1) as a decimal number (00-53). [tm_year, tm_wday, tm_yday]
- %V is replaced by the ISO 8601 week number (see below) as a decimal number
- (01-53). [tm_year, tm_wday, tm_yday]
- %w is replaced by the weekday as a decimal number (0-6), where Sunday is 0.
- [tm_wday]
- %W is replaced by the week number of the year (the first Monday as the
- first day of week 1) as a decimal number (00-53). [tm_year, tm_wday, tm_yday]
- %x is replaced by the locale's appropriate date representation.
- %X is replaced by the locale's appropriate time representation.
- %y is replaced by the last 2 digits of the year as a decimal
- number (00-99). [tm_year]
- %Y is replaced by the year as a decimal number (e.g., 1997). [tm_year]
- %z is replaced by the offset from UTC in the ISO 8601 format "-0430"
- (meaning 4 hours 30 minutes behind UTC, west of Greenwich), or by no
- characters if no time zone is determinable. [tm_isdst]
- %Z is replaced by the locale's time zone name or abbreviation, or by no
- characters if no time zone is determinable. [tm_isdst]
- %% is replaced by %.
-
- Some conversion specifiers can be modified by the inclusion of an E or O
- modifier character to indicate an alternative format or specification.
- If the alternative format or specification does not exist for the current
- locale, the modifier is ignored. %Ec is replaced by the locale's
- alternative date and time representation.
-
- %EC is replaced by the name of the base year (period) in the locale's
- alternative representation.
- %Ex is replaced by the locale's alternative date representation.
- %EX is replaced by the locale's alternative time representation.
- %Ey is replaced by the offset from %EC (year only) in the locale's
- alternative representation.
- %EY is replaced by the locale's full alternative year representation.
- %Od is replaced by the day of the month, using the locale's alternative
- numeric symbols (filled as needed with leading zeros, or with leading
- spaces if there is no alternative symbol for zero).
- %Oe is replaced by the day of the month, using the locale's alternative
- numeric symbols (filled as needed with leading spaces).
- %OH is replaced by the hour (24-hour clock), using the locale's
- alternative numeric symbols.
- %OI is replaced by the hour (12-hour clock), using the locale's
- alternative numeric symbols.
- %Om is replaced by the month, using the locale's alternative numeric symbols.
- %OM is replaced by the minutes, using the locale's alternative numeric symbols.
- %OS is replaced by the seconds, using the locale's alternative numeric symbols.
- %Ou is replaced by the ISO 8601 weekday as a number in the locale's
- alternative representation, where Monday is 1.
- %OU is replaced by the week number, using the locale's alternative numeric symbols.
- %OV is replaced by the ISO 8601 week number, using the locale's alternative
- numeric symbols.
- %Ow is replaced by the weekday as a number, using the locale's alternative
- numeric symbols.
- %OW is replaced by the week number of the year, using the locale's
- alternative numeric symbols.
- %Oy is replaced by the last 2 digits of the year, using the locale's
- alternative numeric symbols.
-
- %g, %G, and %V give values according to the ISO 8601 week-based year. In
- this system, weeks begin on a Monday and week 1 of the year is the week
- that includes January 4th, which is also the week that includes the first
- Thursday of the year, and is also the first week that contains at least
- four days in the year. If the first Monday of January is the 2nd, 3rd, or
- 4th, the preceding days are part of the last week of the preceding year;
- thus, for Saturday 2nd January 1999, %G is replaced by 1998 and %V is
- replaced by 53. If December 29th, 30th, or 31st is a Monday, it and any
- following days are part of week 1 of the following year. Thus, for Tuesday
- 30th December 1997, %G is replaced by 1998 and %V is replaced by 01.
-
- If a conversion specifier is not one of the above, the behavior is undefined.
-
- In the "C" locale, the E and O modifiers are ignored and the replacement
- strings for the following specifiers are:
- %a the first three characters of %A.
- %A one of "Sunday", "Monday", ... , "Saturday".
- %b the first three characters of %B.
- %B one of "January", "February", ... , "December".
- %c equivalent to "%a %b %e %T %Y".
- %p one of "AM" or "PM".
- %r equivalent to "%I:%M:%S %p".
- %x equivalent to "%m/%d/%y".
- %X equivalent to %T.
- %Z implementation-defined.
-
- @param s Pointer to the buffer in which to store the result.
- @param maxsize Maximum number of characters to put into buffer s.
- @param format Format string, as described above.
- @param timeptr Pointer to a broken-down time structure containing the
- time to format.
-
- @return If the total number of resulting characters including the
- terminating null character is not more than maxsize, the
- strftime function returns the number of characters placed into
- the array pointed to by s not including the terminating null
- character. Otherwise, zero is returned and the contents of the
- array are indeterminate.
-**/
-size_t strftime( char * __restrict s, size_t maxsize,
- const char * __restrict format,
- const struct tm * __restrict timeptr);
-
-char *strptime(const char *, const char * format, struct tm*);
-
-
-/* ################# Implementation Functions ########################### */
-
-clock_t __getCPS(void);
-
-#endif /* _TIME_H */
diff --git a/StdLib/Include/unistd.h b/StdLib/Include/unistd.h
deleted file mode 100644
index b2fd92358a..0000000000
--- a/StdLib/Include/unistd.h
+++ /dev/null
@@ -1,242 +0,0 @@
-/** @file
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#ifndef _UNISTD_H_
-#define _UNISTD_H_
-
-//#include <machine/ansi.h>
-//#include <machine/int_types.h>
-//#include <sys/featuretest.h>
-//#include <sys/types.h>
-#include <sys/unistd.h>
-#include <sys/EfiSysCall.h>
-
-#define F_ULOCK 0
-#define F_LOCK 1
-#define F_TLOCK 2
-#define F_TEST 3
-
-/* access function */
-#define F_OK 0 /* test for existence of file */
-#define X_OK 0x01 /* test for execute or search permission */
-#define W_OK 0x02 /* test for write permission */
-#define R_OK 0x04 /* test for read permission */
-
-
-__BEGIN_DECLS
-int dup(int);
-int rename(const char *, const char *);
-
-/* Functions implemented for compatibility. */
-int getopt(int, char * const [], const char *);
-extern char *optarg; /* getopt(3) external variables */
-extern int optind;
-pid_t getpgrp(void);
-pid_t tcgetpgrp(int);
-char *getpass(const char *);
-int usleep(useconds_t);
-unsigned int sleep(unsigned int);
-char *basename(char *path);
-
-#ifndef GETCWD_DECLARED
- /** Gets the current working directory.
-
- The getcwd() function shall place an absolute pathname of the current
- working directory in the array pointed to by buf, and return buf. The
- pathname copied to the array shall contain no components that are
- symbolic links. The size argument is the size in bytes of the character
- array pointed to by the buf argument.
-
- @param[in,out] Buf The buffer to fill.
- @param[in] BufSize The number of bytes in buffer.
-
- @retval NULL The function failed.
- @retval NULL Buf was NULL.
- @retval NULL Size was 0.
- @return buf The function completed successfully. See errno for info.
- **/
- char *getcwd(char *Buf, size_t BufSize);
- #define GETCWD_DECLARED
-#endif
-
-#ifndef CHDIR_DECLARED
- /** Change the current working directory.
-
- The chdir() function shall cause the directory named by the pathname
- pointed to by the path argument to become the current working directory;
- that is, the starting point for path searches for pathnames not beginning
- with '/'.
-
- @param[in] Path The new path to set.
-
- @todo Add non-shell CWD changing.
- **/
- int chdir(const char *Path);
-#define CHDIR_DECLARED
-#endif
-
-/** Determine accessibility of a file.
- The access() function checks the file, named by the pathname pointed to by
- the Path argument, for accessibility according to the bit pattern contained
- in Mode.
-
- The value of Mode is either the bitwise-inclusive OR of the access
- permissions to be checked (R_OK, W_OK, X_OK) or the existence test (F_OK).
-
- If Path ends in '/' or '\\', the target must be a directory, otherwise it doesn't matter.
- A file is executable if it is NOT a directory and it ends in ".efi".
-
- @param[in] Path Path or name of the file to be checked.
- @param[in] Mode Access permissions to check for.
-
- @retval 0 Successful completion.
- @retval -1 File is not accessible with the given Mode. The error condition
- is indicated by errno. Values of errno specific to the access
- function include: EACCES, ENOENT, ENOTDIR, ENAMETOOLONG
-**/
-int access(const char *Path, int Mode);
-pid_t getpid(void);
-
-// Networking
-long gethostid(void);
-int gethostname(char *, size_t);
-int getdomainname(char *, size_t);
-int setdomainname(const char *, size_t);
-int sethostid(long);
-int sethostname(const char *, size_t);
-
-/* Stub functions implemented for porting ease.
- These functions always fail or return NULL.
-*/
-__aconst char *getlogin(void);
-pid_t fork(void);
-uid_t getuid(void);
-
-// For Future implementation
-ssize_t pread(int, void *, size_t, off_t);
-ssize_t pwrite(int, const void *, size_t, off_t);
-int syscall(int, ...);
-
-#if 0 // The following functions are not implemented
-__dead void _exit(int) __attribute__((__noreturn__));
-unsigned int alarm(unsigned int);
-int chown(const char *, uid_t, gid_t);
-size_t confstr(int, char *, size_t);
-int execl(const char *, const char *, ...);
-int execle(const char *, const char *, ...);
-int execlp(const char *, const char *, ...);
-int execv(const char *, char * const *);
-int execve(const char *, char * const *, char * const *);
-int execvp(const char *, char * const *);
-long fpathconf(int, int);
-gid_t getegid(void);
-uid_t geteuid(void);
-gid_t getgid(void);
-int getgroups(int, gid_t []);
-pid_t getppid(void);
-int link(const char *, const char *);
-long pathconf(const char *, int);
-int pause(void);
-int pipe(int *);
-int setgid(gid_t);
-int setpgid(pid_t, pid_t);
-pid_t setsid(void);
-int setuid(uid_t);
-long sysconf(int);
-
-int tcsetpgrp(int, pid_t);
-__aconst char *ttyname(int);
-
-extern int opterr;
-extern int optopt;
-extern int optreset;
-extern char *suboptarg;
-
-int setegid(gid_t);
-int seteuid(uid_t);
-int fdatasync(int);
-int fsync(int);
-int ttyname_r(int, char *, size_t);
-int chroot(const char *);
-int nice(int);
-__aconst char *crypt(const char *, const char *);
-int encrypt(char *, int);
-pid_t getsid(pid_t);
-
-#ifndef intptr_t
-typedef __intptr_t intptr_t;
-#define intptr_t __intptr_t
-#endif
-
-int brk(void *);
-int fchdir(int);
-int fchown(int, uid_t, gid_t);
-int getdtablesize(void);
-__pure int getpagesize(void); /* legacy */
-pid_t getpgid(pid_t);
-int lchown(const char *, uid_t, gid_t);
-int lockf(int, int, off_t);
-ssize_t readlink(const char * __restrict, char * __restrict, size_t);
-void *sbrk(intptr_t);
-int setregid(gid_t, gid_t);
-int setreuid(uid_t, uid_t);
-void swab(const void *, void *, size_t);
-int symlink(const char *, const char *);
-void sync(void);
-useconds_t ualarm(useconds_t, useconds_t);
-pid_t vfork(void) __RENAME(__vfork14);
-
-/*
- * Implementation-defined extensions
- */
-int acct(const char *);
-int closefrom(int);
-int des_cipher(const char *, char *, long, int);
-int des_setkey(const char *);
-void endusershell(void);
-int exect(const char *, char * const *, char * const *);
-int fchroot(int);
-int fsync_range(int, int, off_t, off_t);
-int getgrouplist(const char *, gid_t, gid_t *, int *);
-int getgroupmembership(const char *, gid_t, gid_t *, int, int *);
-mode_t getmode(const void *, mode_t);
-int getsubopt(char **, char * const *, char **);
-__aconst char *getusershell(void);
-int initgroups(const char *, gid_t);
-int iruserok(uint32_t, int, const char *, const char *);
-int issetugid(void);
-int nfssvc(int, void *);
-int profil(char *, size_t, u_long, u_int);
-void psignal(unsigned int, const char *);
-int rcmd(char **, int, const char *, const char *, const char *, int *);
-int revoke(const char *);
-int rresvport(int *);
-int ruserok(const char *, int, const char *, const char *);
-int setgroups(int, const gid_t *);
-int setlogin(const char *);
-void *setmode(const char *);
-int setrgid(gid_t);
-int setruid(uid_t);
-void setusershell(void);
-void strmode(mode_t, char *);
-__aconst char *strsignal(int);
-int swapctl(int, void *, int);
-quad_t __syscall(quad_t, ...);
-int undelete(const char *);
-int rcmd_af(char **, int, const char *, const char *, const char *, int *, int);
-int rresvport_af(int *, int);
-int iruserok_sa(const void *, int, int, const char *, const char *);
-#endif /* Unimplemented functions. */
-
-__END_DECLS
-
-#endif /* !_UNISTD_H_ */
diff --git a/StdLib/Include/utime.h b/StdLib/Include/utime.h
deleted file mode 100644
index 744881c15a..0000000000
--- a/StdLib/Include/utime.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/** @file
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)utime.h 8.1 (Berkeley) 6/2/93
- NetBSD: utime.h,v 1.8 2005/02/03 04:39:32 perry Exp
- */
-
-#ifndef _UTIME_H_
-#define _UTIME_H_
-
-#include <sys/cdefs.h>
-#include <machine/ansi.h>
-#include <sys/time.h>
-
-#if defined(_BSD_TIME_T_) && defined(_EFI_TIME_T)
-typedef _EFI_TIME_T time_t;
-#undef _BSD_TIME_T_
-#undef _EFI_TIME_T
-#endif
-
-struct utimbuf {
- time_t actime; /* Access time */
- time_t modtime; /* Modification time */
-};
-
-__BEGIN_DECLS
- int utime (const char *path, const struct utimbuf *times);
- int utimes (const char *path, const struct timeval *times);
-__END_DECLS
-
-#endif /* !_UTIME_H_ */
diff --git a/StdLib/Include/wchar.h b/StdLib/Include/wchar.h
deleted file mode 100644
index 3acc2a4b8d..0000000000
--- a/StdLib/Include/wchar.h
+++ /dev/null
@@ -1,1552 +0,0 @@
-/** @file
- Extended multibyte and wide character utilities.
-
- Within this implementation, multibyte characters are represented using the
- Unicode UTF-8 encoding and wide characters are represented using the
- 16-bit UCS-2 encoding.
-
- Unless explicitly stated otherwise, if the execution of a function declared
- in this file causes copying to take place between objects that overlap, the
- behavior is undefined.
-
- The following macros are defined in this file:<BR>
- @verbatim
- NULL Actually defined in <sys/EfiCdefs.h>
- WCHAR_MIN Minimum value of a wide char.
- WCHAR_MAX Maximum value of a wide char.
- WEOF Wide char version of end-of-file.
- @endverbatim
-
- The following types are defined in this file:<BR>
- @verbatim
- size_t Unsigned integer type of the result of the sizeof operator.
- wchar_t Type of wide characters.
- wint_t Type capable of holding all wchar_t values and WEOF.
- mbstate_t Type of object holding multibyte conversion state.
- struct tm Incomplete declaration of the broken-down time structure.
- @endverbatim
-
- The following functions are declared in this file:<BR>
-@verbatim
- ############### Formatted Input/Output Functions
- int fwprintf (FILE * __restrict stream,
- const wchar_t * __restrict format, ...);
- int fwscanf (FILE * __restrict stream,
- const wchar_t * __restrict format, ...);
- int swprintf (wchar_t * __restrict s, size_t n,
- const wchar_t * __restrict format, ...);
- int swscanf (const wchar_t * __restrict s,
- const wchar_t * __restrict format, ...);
- int vfwprintf (FILE * __restrict stream,
- const wchar_t * __restrict format, va_list arg);
- int vfwscanf (FILE * __restrict stream,
- const wchar_t * __restrict format, va_list arg);
- int vswprintf (wchar_t * __restrict s, size_t n,
- const wchar_t * __restrict format, va_list arg);
- int vswscanf (const wchar_t * __restrict s,
- const wchar_t * __restrict format, va_list arg);
- int vwprintf (const wchar_t * __restrict format, va_list arg);
- int vwscanf (const wchar_t * __restrict format, va_list arg);
- int wprintf (const wchar_t * __restrict format, ...);
- int wscanf (const wchar_t * __restrict format, ...);
-
- ################### Input/Output Functions
- wint_t fgetwc (FILE *stream);
- wchar_t *fgetws (wchar_t * __restrict S, int n,
- FILE * __restrict stream);
- wint_t fputwc (wchar_t c, FILE *stream);
- int fputws (const wchar_t * __restrict S,
- FILE * __restrict stream);
- int fwide (FILE *stream, int mode);
- wint_t getwc (FILE *stream);
- wint_t getwchar (void);
- wint_t putwc (wchar_t c, FILE *stream);
- wint_t putwchar (wchar_t c);
- wint_t ungetwc (wint_t c, FILE *stream);
-
- ################### Numeric Conversions
- double wcstod (const wchar_t * __restrict nptr,
- wchar_t ** __restrict endptr);
- float wcstof (const wchar_t * __restrict nptr,
- wchar_t ** __restrict endptr);
- long double wcstold (const wchar_t * __restrict nptr,
- wchar_t ** __restrict endptr);
- long int wcstol (const wchar_t * __restrict nptr,
- wchar_t ** __restrict endptr, int base);
- long long int wcstoll (const wchar_t * __restrict nptr,
- wchar_t ** __restrict endptr, int base);
- unsigned long int wcstoul (const wchar_t * __restrict nptr,
- wchar_t ** __restrict endptr, int base);
- unsigned long long int wcstoull (const wchar_t * __restrict nptr,
- wchar_t ** __restrict endptr, int base);
-
- ####################### String Copying
- wchar_t *wcscpy (wchar_t * __restrict s1,
- const wchar_t * __restrict s2);
- wchar_t *wcsncpy (wchar_t * __restrict s1,
- const wchar_t * __restrict s2, size_t n);
- wchar_t *wmemcpy (wchar_t * __restrict s1,
- const wchar_t * __restrict s2, size_t n);
- wchar_t *wmemmove (wchar_t *s1, const wchar_t *s2, size_t n);
-
- ################### String Concatenation
- wchar_t *wcscat (wchar_t * __restrict s1,
- const wchar_t * __restrict s2);
- wchar_t *wcsncat (wchar_t * __restrict s1,
- const wchar_t * __restrict s2, size_t n);
-
- ##################### String Comparison
- int wcscmp (const wchar_t *s1, const wchar_t *s2);
- int wcscoll (const wchar_t *s1, const wchar_t *s2);
- int wcsncmp (const wchar_t *s1, const wchar_t *s2, size_t n);
- size_t wcsxfrm (wchar_t * __restrict s1,
- const wchar_t * __restrict s2, size_t n);
- int wmemcmp (const wchar_t *s1, const wchar_t *s2, size_t n);
-
- ##################### String Searching
- wchar_t *wcschr (const wchar_t *S, wchar_t c);
- size_t wcscspn (const wchar_t *s1, const wchar_t *s2);
- wchar_t *wcspbrk (const wchar_t *s1, const wchar_t *s2);
- wchar_t *wcsrchr (const wchar_t *S, wchar_t c);
- size_t wcsspn (const wchar_t *s1, const wchar_t *s2);
- wchar_t *wcsstr (const wchar_t *s1, const wchar_t *s2);
- wchar_t *wcstok (wchar_t * __restrict s1,
- const wchar_t * __restrict s2,
- wchar_t ** __restrict ptr);
- wchar_t *wmemchr (const wchar_t *S, wchar_t c, size_t n);
-
- ################### String Manipulation
- size_t wcslen (const wchar_t *S);
- wchar_t *wmemset (wchar_t *S, wchar_t c, size_t n);
-
- ################# Date and Time Conversion
- size_t wcsftime (wchar_t * __restrict S, size_t maxsize,
- const wchar_t * __restrict format,
- const struct tm * __restrict timeptr);
-
- ############# Multibyte <--> Wide Character Conversion
- wint_t btowc (int c);
- int wctob (wint_t c);
- int mbsinit (const mbstate_t *ps);
-
- ####### Restartable Multibyte <--> Wide Character Conversion
- size_t mbrlen (const char * __restrict S, size_t n,
- mbstate_t * __restrict ps);
- size_t mbrtowc (wchar_t * __restrict pwc, const char * __restrict S,
- size_t n, mbstate_t * __restrict ps);
- size_t wcrtomb (char * __restrict S, wchar_t wc,
- mbstate_t * __restrict ps);
- size_t mbsrtowcs (wchar_t * __restrict dst,
- const char ** __restrict src, size_t len,
- mbstate_t * __restrict ps);
- size_t wcsrtombs (char * __restrict dst,
- const wchar_t ** __restrict src,
- size_t len, mbstate_t * __restrict ps);
-@endverbatim
-
- @note Properly constructed programs will take the following into consideration:
- - wchar_t and wint_t may be the same integer type.
- - WEOF might be a different value than that of EOF.
- - WEOF might not be negative.
- - mbstate_t objects are not intended to be inspected by programs.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _WCHAR_H
-#define _WCHAR_H
-#include <sys/EfiCdefs.h>
-#include <machine/ansi.h>
-#include <machine/limits.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-#if defined(_MSC_VER)
- #pragma warning ( disable : 4142 )
-#endif
-
-#ifdef _EFI_SIZE_T_
- typedef _EFI_SIZE_T_ size_t; /**< Unsigned integer type of the result of the sizeof operator. */
- #undef _BSD_SIZE_T_
- #undef _EFI_SIZE_T_
-#endif
-
-#ifndef __cplusplus
- #ifdef _EFI_WCHAR_T
- /** An integer type capable of representing all distinct codes in the
- UCS-2 encoding supported by UEFI.
- **/
- typedef _EFI_WCHAR_T wchar_t;
- #undef _BSD_WCHAR_T_
- #undef _EFI_WCHAR_T
- #endif
-#endif
-
-#ifdef _BSD_MBSTATE_T_
- /** mbstate_t is an opaque object, that is not an array type, used to keep
- conversion state during multibyte stream conversions.
- */
- typedef _BSD_MBSTATE_T_ mbstate_t;
- #undef _BSD_MBSTATE_T_
-#endif
-
-#ifdef _EFI_WINT_T
- /** wint_t is an integer type unchanged by default argument promotions that can
- hold any value corresponding to members of the extended character set, as
- well as at least one value that does not correspond to any member of the
- extended character set: WEOF.
- */
- typedef _EFI_WINT_T wint_t;
- #undef _BSD_WINT_T_
- #undef _EFI_WINT_T
-#endif
-
-#ifndef WCHAR_MIN
- /** @{
- Since wchar_t is an unsigned 16-bit value, it has a minimum value of 0, and
- a maximum value defined by __USHRT_MAX (65535 on IA processors).
- */
- #define WCHAR_MIN 0
- #define WCHAR_MAX __USHRT_MAX
- /*@}*/
-#endif
-
-#ifndef WEOF
- /** WEOF expands to a constant expression of type wint_t whose value does not
- correspond to any member of the extended character set. It is accepted
- (and returned) by several functions, declared in this file, to indicate
- end-of-file, that is, no more input from a stream. It is also used as a
- wide character value that does not correspond to any member of the
- extended character set.
- */
- #define WEOF ((wint_t)-1)
-#endif
-
-/* limits of wint_t -- These are NOT specified by ISO/IEC 9899 */
-#ifndef WINT_MIN
- #define WINT_MIN _EFI_WINT_MIN /* wint_t */
- #define WINT_MAX _EFI_WINT_MAX /* wint_t */
-#endif
-
-/** Type struct tm is declared here as an incomplete structure type for use as an argument
- type by the wcsftime function. The full structure declaration is in <time.h>.
-*/
-struct tm;
-
-/* ############### Formatted Input/Output Functions ##################### */
-
-/** The fwprintf function writes output to the stream pointed to by stream,
- under control of the wide string pointed to by format that specifies how
- subsequent arguments are converted for output. If there are insufficient
- arguments for the format, the behavior is undefined. If the format is
- exhausted while arguments remain, the excess arguments are evaluated
- (as always) but are otherwise ignored. The fwprintf function returns
- when the end of the format string is encountered.
-
- The format is composed of zero or more directives: ordinary wide characters
- (not %), which are copied unchanged to the output stream; and conversion
- specifications, each of which results in fetching zero or more subsequent
- arguments, converting them, if applicable, according to the corresponding
- conversion specifier, and then writing the result to the output stream.
-
- Each conversion specification is introduced by the wide character %. After
- the %, the following appear in sequence:
- * Zero or more flags (in any order) that modify the meaning of the
- conversion specification.
- * An optional minimum field width. If the converted value has fewer wide
- characters than the field width, it is padded with spaces (by default)
- on the left (or right, if the left adjustment flag, described later,
- has been given) to the field width. The field width takes the form of
- an asterisk * (described later) or a nonnegative decimal integer.
- * An optional precision that gives the minimum number of digits to appear
- for the d, i, o, u, x, and X conversions, the number of digits to
- appear after the decimal-point wide character for e, E, f, and F
- conversions, the maximum number of significant digits for the g and G
- conversions, or the maximum number of wide characters to be written
- for s conversions. The precision takes the form of a period (.)
- followed either by an asterisk * (described later) or by an optional
- decimal integer; if only the period is specified, the precision is
- taken as zero. If a precision appears with any other conversion
- specifier, the behavior is undefined.
- * An optional length modifier that specifies the size of the argument.
- * A conversion specifier wide character that specifies the type of
- conversion to be applied.
-
- As noted above, a field width, or precision, or both, may be indicated by
- an asterisk. In this case, an int argument supplies the field width or
- precision. The arguments specifying field width, or precision, or both,
- must appear (in that order) before the argument (if any) to be converted.
- A negative field width argument is taken as a - flag followed by a positive
- field width. A negative precision argument is taken as if the precision
- were omitted.
-
- The flag wide characters and their meanings are:<BR>
- - The result of the conversion is left-justified within the field.
- (It is right-justified if this flag is not specified.)
- + The result of a signed conversion always begins with a plus or minus
- sign. (It begins with a sign only when a negative value is converted
- if this flag is not specified.)
- space If the first wide character of a signed conversion is not a sign, or
- if a signed conversion results in no wide characters, a space is
- prefixed to the result. If the space and + flags both appear, the
- space flag is ignored.
- # The result is converted to an "alternative form". For o conversion,
- it increases the precision, if and only if necessary, to force the
- first digit of the result to be a zero (if the value and precision
- are both 0, a single 0 is printed). For x (or X) conversion, a
- nonzero result has 0x (or 0X) prefixed to it. For e, E, f, F, g,
- and G conversions, the result of converting a floating-point number
- always contains a decimal-point wide character, even if no digits
- follow it. (Normally, a decimal-point wide character appears in the
- result of these conversions only if a digit follows it.) For g and G
- conversions, trailing zeros are not removed from the result. For
- other conversions, the behavior is undefined.
- 0 For d, i, o, u, x, X, e, E, f, F, g, and G conversions, leading zeros
- (following any indication of sign or base) are used to pad to the
- field width rather than performing space padding, except when
- converting an infinity or NaN. If the 0 and - flags both appear,
- the 0 flag is ignored. For d, i, o, u, x, and X conversions, if a
- precision is specified, the 0 flag is ignored. For other conversions,
- the behavior is undefined.
-
- The length modifiers and their meanings are:<BR>
- hh Specifies that a following d, i, o, u, x, or X conversion specifier
- applies to a signed char or unsigned char argument (the argument
- will have been promoted according to the integer promotions, but its
- value shall be converted to signed char or unsigned char before
- printing); or that a following n conversion specifier applies to a
- pointer to a signed char argument.
- h Specifies that a following d, i, o, u, x, or X conversion specifier
- applies to a short int or unsigned short int argument (the argument
- will have been promoted according to the integer promotions, but its
- value shall be converted to short int or unsigned short int before
- printing); or that a following n conversion specifier applies to a
- pointer to a short int argument.
- l (ell) Specifies that a following d, i, o, u, x, or X conversion
- specifier applies to a long int or unsigned long int argument;
- that a following n conversion specifier applies to a pointer to a
- long int argument; that a following c conversion specifier
- applies to a wint_t argument; that a following s conversion
- specifier applies to a pointer to a wchar_t argument; or has no
- effect on a following e, E, f, F, g, or G conversion specifier.
- ll (ell-ell) Specifies that a following d, i, o, u, x, or X conversion
- specifier applies to a long long int or unsigned long long int
- argument; or that a following n conversion specifier applies
- to a pointer to a long long int argument.
- j Specifies that a following d, i, o, u, x, or X conversion specifier
- applies to an intmax_t or uintmax_t argument; or that a following
- n conversion specifier applies to a pointer to an intmax_t argument.
- z Specifies that a following d, i, o, u, x, or X conversion specifier
- applies to a size_t or the corresponding signed integer type
- argument; or that a following n conversion specifier applies to a
- pointer to a signed integer type corresponding to size_t argument.
- t Specifies that a following d, i, o, u, x, or X conversion specifier
- applies to a ptrdiff_t or the corresponding unsigned integer type
- argument; or that a following n conversion specifier applies to a
- pointer to a ptrdiff_t argument.
- L Specifies that a following a, A, e, E, f, F, g, or G conversion
- specifier applies to a long double argument.
-
- If a length modifier appears with any conversion specifier other than as
- specified above, the behavior is undefined.
-
- The conversion specifiers and their meanings are:<BR>
- d,i The int argument is converted to signed decimal in the
- style [-]dddd. The precision specifies the minimum number of digits
- to appear; if the value being converted can be represented in fewer
- digits, it is expanded with leading zeros. The default precision
- is 1. The result of converting a zero value with a precision of
- zero is no wide characters.
- o,u,x,X The unsigned int argument is converted to unsigned octal (o),
- unsigned decimal (u), or unsigned hexadecimal notation (x or X) in
- the style dddd; the letters abcdef are used for x conversion and
- the letters ABCDEF for X conversion. The precision specifies the
- minimum number of digits to appear; if the value being converted
- can be represented in fewer digits, it is expanded with leading
- zeros. The default precision is 1. The result of converting a zero
- value with a precision of zero is no wide characters.
- f,F A double argument representing a floating-point number is converted
- to decimal notation in the style [-]ddd.ddd, where the number of
- digits after the decimal-point wide character is equal to the
- precision specification. If the precision is missing, it is taken
- as 6; if the precision is zero and the # flag is not specified, no
- decimal-point wide character appears. If a decimal-point wide
- character appears, at least one digit appears before it. The value
- is rounded to the appropriate number of digits.<BR>
- A double argument representing an infinity is converted to [-]inf.
- A double argument representing a NaN is converted to [-]nan.
- The F conversion specifier produces INF or NAN instead
- of inf or nan, respectively.
- e,E A double argument representing a floating-point number is converted
- in the style [-]d.ddd e +/- dd, where there is one digit (which is
- nonzero if the argument is nonzero) before the decimal-point wide
- character and the number of digits after it is equal to the
- precision; if the precision is missing, it is taken as 6; if the
- precision is zero and the # flag is not specified, no decimal-point
- wide character appears. The value is rounded to the appropriate
- number of digits. The E conversion specifier produces a number with
- E instead of e introducing the exponent. The exponent always
- contains at least two digits, and only as many more digits as
- necessary to represent the exponent. If the value is zero, the
- exponent is zero. A double argument representing an infinity or NaN
- is converted in the style of an f or F conversion specifier.
- g,G A double argument representing a floating-point number is converted
- in style f or e (or in style F or E in the case of a G conversion
- specifier), depending on the value converted and the precision.
- Let P equal the precision if nonzero, 6 if the precision is
- omitted, or 1 if the precision is zero. Then, if a conversion with
- style E would have an exponent of X:
- - if P > X = -4, the conversion is with style f (or F) and
- precision P - (X + 1).
- - otherwise, the conversion is with style e (or E) and
- precision P - 1.
- Finally, unless the # flag is used, any trailing zeros are removed
- from the fractional portion of the result and the decimal-point
- wide character is removed if there is no fractional portion
- remaining. A double argument representing an infinity or NaN is
- converted in the style of an f or F conversion specifier.
- c If no l length modifier is present, the int argument is converted
- to a wide character as if by calling btowc and the resulting wide
- character is written. If an l length modifier is present, the
- wint_t argument is converted to wchar_t and written.
- s If no l length modifier is present, the argument shall be a pointer
- to the initial element of a character array containing a multibyte
- character sequence beginning in the initial shift state. Characters
- from the array are converted as if by repeated calls to the mbrtowc
- function, with the conversion state described by an mbstate_t
- object initialized to zero before the first multibyte character is
- converted, and written up to (but not including) the terminating
- null wide character. If the precision is specified, no more than
- that many wide characters are written. If the precision is not
- specified or is greater than the size of the converted array, the
- converted array shall contain a null wide character.<BR>
- If an l length modifier is present, the argument shall be a pointer
- to the initial element of an array of wchar_t type. Wide characters
- from the array are written up to (but not including) a terminating
- null wide character. If the precision is specified, no more than
- that many wide characters are written. If the precision is not
- specified or is greater than the size of the array, the array
- shall contain a null wide character.
- p The argument shall be a pointer to void. The value of the pointer
- is converted to a sequence of printing wide characters, in an
- implementation-defined manner.
- n The argument shall be a pointer to signed integer into which is
- written the number of wide characters written to the output stream
- so far by this call to fwprintf. No argument is converted, but one
- is consumed. If the conversion specification includes any flags, a
- field width, or a precision, the behavior is undefined.
- % A % wide character is written. No argument is converted. The
- complete conversion specification is %%.
-
-
- @param[in] stream An open File specifier to which the output is sent.
- @param[in] format A wide character sequence containing characters
- to be copied unchanged, and conversion specifiers
- which convert their associated arguments.
- @param ... Variable number of parameters as required by format.
-
- @return The fwprintf function returns the number of wide characters
- transmitted, or a negative value if an output or encoding error
- occurred.
-**/
-int fwprintf(FILE * __restrict stream, const wchar_t * __restrict format, ...);
-
-/** The fwscanf function reads input from the stream pointed to by stream,
- under control of the wide string pointed to by format that specifies
- the admissible input sequences and how they are to be converted for
- assignment, using subsequent arguments as pointers to the objects to
- receive the converted input. If there are insufficient arguments for
- the format, the behavior is undefined. If the format is exhausted while
- arguments remain, the excess arguments are evaluated (as always) but are
- otherwise ignored.
-
- The format is composed of zero or more directives: one or more white-space
- wide characters, an ordinary wide character (neither % nor a white-space
- wide character), or a conversion specification. Each conversion
- specification is introduced by the wide character %. After the %, the
- following appear in sequence:
- - An optional assignment-suppressing wide character *.
- - An optional decimal integer greater than zero that specifies the
- maximum field width (in wide characters).
- - An optional length modifier that specifies the size of the receiving object.
- - A conversion specifier wide character that specifies the type of
- conversion to be applied.
-
- The fwscanf function executes each directive of the format in turn. If a
- directive fails, as detailed below, the function returns. Failures are
- described as input failures (due to the occurrence of an encoding error
- or the unavailability of input characters), or matching failures
- (due to inappropriate input).
-
- A directive composed of white-space wide character(s) is executed by
- reading input up to the first non-white-space wide character (which remains
- unread), or until no more wide characters can be read.
-
- A directive that is an ordinary wide character is executed by reading the
- next wide character of the stream. If that wide character differs from the
- directive, the directive fails and the differing and subsequent wide
- characters remain unread. Similarly, if end-of-file, an encoding error, or
- a read error prevents a wide character from being read, the directive fails.
-
- A directive that is a conversion specification defines a set of matching
- input sequences, as described below for each specifier. A conversion
- specification is executed in the following steps:
- - Input white-space wide characters (as specified by the iswspace
- function) are skipped, unless the specification includes
- a [, c, or n specifier.
- - An input item is read from the stream, unless the specification
- includes an n specifier. An input item is defined as the longest
- sequence of input wide characters which does not exceed any specified
- field width and which is, or is a prefix of, a matching input sequence.
- The first wide character, if any, after the input item remains unread.
- If the length of the input item is zero, the execution of the directive
- fails; this condition is a matching failure unless end-of-file, an
- encoding error, or a read error prevented input from the stream, in
- which case it is an input failure.
- - Except in the case of a % specifier, the input item (or, in the case of
- a %n directive, the count of input wide characters) is converted to a
- type appropriate to the conversion specifier. If the input item is not
- a matching sequence, the execution of the directive fails: this
- condition is a matching failure. Unless assignment suppression was
- indicated by a *, the result of the conversion is placed in the object
- pointed to by the first argument following the format argument that has
- not already received a conversion result. If this object does not have
- an appropriate type, or if the result of the conversion cannot be
- represented in the object, the behavior is undefined.
-
- The length modifiers and their meanings are:<BR>
- hh Specifies that a following d, i, o, u, x, X, or n conversion
- specifier applies to an argument with type pointer to signed char
- or unsigned char.
- h Specifies that a following d, i, o, u, x, X, or n conversion
- specifier applies to an argument with type pointer to short int
- or unsigned short int.
- l (ell) Specifies that a following d, i, o, u, x, X, or n conversion
- specifier applies to an argument with type pointer to long int or
- unsigned long int; that a following e, E, f, F, g, or G conversion
- specifier applies to an argument with type pointer to double; or
- that a following c, s, or [ conversion specifier applies to an
- argument with type pointer to wchar_t.
- ll (ell-ell) Specifies that a following d, i, o, u, x, X, or n conversion
- specifier applies to an argument with type
- pointer to long long int or unsigned long long int.
- j Specifies that a following d, i, o, u, x, X, or n conversion
- specifier applies to an argument with type pointer to intmax_t
- or uintmax_t.
- z Specifies that a following d, i, o, u, x, X, or n conversion
- specifier applies to an argument with type pointer to size_t or the
- corresponding signed integer type.
- t Specifies that a following d, i, o, u, x, X, or n conversion
- specifier applies to an argument with type pointer to ptrdiff_t or
- the corresponding unsigned integer type.
- L Specifies that a following e, E, f, F, g, or G conversion specifier
- applies to an argument with type pointer to long double.
-
- If a length modifier appears with any conversion specifier other than as
- specified above, the behavior is undefined.
-
- The conversion specifiers and their meanings are:<BR>
- d Matches an optionally signed decimal integer, whose format is the
- same as expected for the subject sequence of the wcstol function
- with the value 10 for the base argument. The corresponding argument
- shall be a pointer to signed integer.
- i Matches an optionally signed integer, whose format is the same as
- expected for the subject sequence of the wcstol function with the
- value 0 for the base argument. The corresponding argument shall be
- a pointer to signed integer.
- o Matches an optionally signed octal integer, whose format is the
- same as expected for the subject sequence of the wcstoul function
- with the value 8 for the base argument. The corresponding argument
- shall be a pointer to unsigned integer.
- u Matches an optionally signed decimal integer, whose format is the
- same as expected for the subject sequence of the wcstoul function
- with the value 10 for the base argument. The corresponding argument
- shall be a pointer to unsigned integer.
- x Matches an optionally signed hexadecimal integer, whose format is
- the same as expected for the subject sequence of the wcstoul
- function with the value 16 for the base argument. The corresponding
- argument shall be a pointer to unsigned integer.
- e,f,g Matches an optionally signed floating-point number, infinity, or
- NaN, whose format is the same as expected for the subject sequence
- of the wcstod function. The corresponding argument shall be a
- pointer to float.
- c Matches a sequence of wide characters of exactly the number
- specified by the field width (1 if no field width is present in the
- directive).<BR>
- If no l length modifier is present, characters from the input field
- are converted as if by repeated calls to the wcrtomb function, with
- the conversion state described by an mbstate_t object initialized
- to zero before the first wide character is converted. The
- corresponding argument shall be a pointer to the initial element of
- a character array large enough to accept the sequence. No null
- character is added.<BR>
- If an l length modifier is present, the corresponding argument
- shall be a pointer to the initial element of an array of
- wchar_t large enough to accept the sequence.
- No null wide character is added.
- s Matches a sequence of non-white-space wide characters.
- If no l length modifier is present, characters from the input field
- are converted as if by repeated calls to the wcrtomb function, with
- the conversion state described by an mbstate_t object initialized
- to zero before the first wide character is converted. The
- corresponding argument shall be a pointer to the initial element of
- a character array large enough to accept the sequence and a
- terminating null character, which will be added automatically.<BR>
- If an l length modifier is present, the corresponding argument
- shall be a pointer to the initial element of an array of wchar_t
- large enough to accept the sequence and the terminating null wide
- character, which will be added automatically.
- [ Matches a nonempty sequence of wide characters from a set of
- expected characters (the scanset).<BR>
- If no l length modifier is present, characters from the input field
- are converted as if by repeated calls to the wcrtomb function, with
- the conversion state described by an mbstate_t object initialized
- to zero before the first wide character is converted. The
- corresponding argument shall be a pointer to the initial element of
- a character array large enough to accept the sequence and a
- terminating null character, which will be added automatically.<BR>
- If an l length modifier is present, the corresponding argument
- shall be a pointer to the initial element of an array of wchar_t
- large enough to accept the sequence and the terminating null wide
- character, which will be added automatically.<BR>
- The conversion specifier includes all subsequent wide characters
- in the format string, up to and including the matching right
- bracket (]). The wide characters between the brackets
- (the scanlist) compose the scanset, unless the wide character after
- the left bracket is a circumflex (^), in which case the scanset
- contains all wide characters that do not appear in the scanlist
- between the circumflex and the right bracket. If the conversion
- specifier begins with [] or [^], the right bracket wide character
- is in the scanlist and the next following right bracket wide
- character is the matching right bracket that ends the specification;
- otherwise the first following right bracket wide character is the
- one that ends the specification. If a - wide character is in the
- scanlist and is not the first, nor the second where the first wide
- character is a ^, nor the last character,
- the - is added to the scanset.
- p Matches the set of sequences produced by the %p conversion of the
- fwprintf function. The corresponding argument is a pointer to a
- pointer to void. The input item is converted to a pointer value. If
- the input item is a value converted earlier during the same program
- execution, the pointer that results will compare equal to that
- value.
- n No input is consumed. The corresponding argument is a pointer to
- signed integer into which is to be written the number of wide
- characters read from the input stream so far by this call to the
- fwscanf function. Execution of a %n directive does not increment
- the assignment count returned at the completion of execution of the
- fwscanf function. No argument is converted, but one is consumed.
- % Matches a single % wide character; no conversion or assignment
- occurs. The complete conversion specification shall be %%.
-
- The conversion specifiers E, F, G, and X are also valid and behave the same
- as, respectively, e, f, g, and x.
-
- Trailing white space (including new-line wide characters) is left unread
- unless matched by a directive. The success of literal matches and
- suppressed assignments is not directly determinable other than via
- the %n directive.
-
- @param[in] stream An open File specifier from which the input is read.
- @param[in] format A wide character sequence containing characters
- to be matched against, and conversion specifiers
- which convert their associated arguments. Converted
- items are stored according to their associated arguments.
- @param ... Variable number of parameters, as required by format,
- specifying the objects to receive the converted input.
-
- @return The fwscanf function returns the value of the macro EOF if an
- input failure occurs before any conversion. Otherwise, the
- function returns the number of input items assigned, which can be
- fewer than provided for, or even zero, in the event of an early
- matching failure.
-**/
-int fwscanf(FILE * __restrict stream, const wchar_t * __restrict format, ...);
-
-/** Formatted wide-character output to a buffer.
-
- The swprintf function is equivalent to fwprintf, except that the argument s
- specifies an array of wide characters into which the generated output is to
- be written, rather than written to a stream. No more than n wide characters
- are written, including a terminating null wide character, which is always
- added (unless n is zero).
-
- @param[out] s A pointer to the array to receive the formatted output.
- @param[in] n Maximum number of characters to write into buffer s.
- @param[in] format A wide character sequence containing characters
- to be copied unchanged, and conversion specifiers
- which convert their associated arguments. Copied and
- converted characters are written to the array pointed
- to by s.
- @param ... Variable number of parameters as required by format.
-
- @return The swprintf function returns the number of wide characters
- written in the array, not counting the terminating null wide
- character, or a negative value if an encoding error occurred or
- if n or more wide characters were requested to be written.
-**/
-int swprintf(wchar_t * __restrict s, size_t n, const wchar_t * __restrict format, ...);
-
-/** Formatted wide input from a string.
-
- The swscanf function is equivalent to fwscanf, except that the argument
- Buff specifies a wide string from which the input is to be obtained, rather
- than from a stream. Reaching the end of the wide string is equivalent to
- encountering end-of-file for the fwscanf function.
-
- @param[in] Buff Pointer to the string from which to obtain input.
- @param[in] Format A wide character sequence containing characters
- to be matched against, and conversion specifiers
- which convert their associated arguments.
- @param[out] ... Variable number of parameters, as required by format,
- specifying the objects to receive the converted input.
-
- @return The swscanf function returns the value of the macro EOF if an
- input failure occurs before any conversion. Otherwise, the
- swscanf function returns the number of input items assigned,
- which can be fewer than provided for, or even zero, in the event
- of an early matching failure.
-**/
-int swscanf(const wchar_t * __restrict Buff, const wchar_t * __restrict Format, ...);
-
-/** Print formatted values from an argument list.
-
-The vfwprintf function is equivalent to fwprintf, with the variable argument list
-replaced by Args, which shall have been initialized by the va_start macro (and
-possibly subsequent va_arg calls). The vfwprintf function does not invoke the
-va_end macro.
-
- @param[in] Stream The output stream to receive the formatted output.
- @param[in] Format A wide character sequence containing characters
- to be matched against, and conversion specifiers
- which convert their associated arguments.
- @param[in] Args A list of arguments, initialized by the va_start macro
- and accessed using the va_arg macro, used to satisfy
- the directives in the Format string.
-
- @return The vfwprintf function returns the number of wide characters
- transmitted, or a negative value if an output or encoding
- error occurred.
-**/
-int vfwprintf(FILE * __restrict Stream, const wchar_t * __restrict Format, va_list Args);
-
-/** Formatted input from a stream.
-
- The vfwscanf function is equivalent to fwscanf, with the variable argument
- list replaced by Args, which must have been initialized by the va_start
- macro (and possibly subsequent va_arg calls). The vfwscanf function does
- not invoke the va_end macro.
-
- @param[in] Stream The input stream.
- @param[in] Format A wide character sequence containing characters
- to be matched against, and conversion specifiers
- which convert their associated arguments.
- @param[in] Args A list of arguments, initialized by the va_start macro
- and accessed using the va_arg macro, used to satisfy
- the directives in the Format string.
-
- @return The vfwscanf function returns the value of the macro EOF if an
- input failure occurs before any conversion. Otherwise, the
- vfwscanf function returns the number of input items assigned,
- which can be fewer than provided for, or even zero, in the event
- of an early matching failure.
-**/
-int vfwscanf(FILE * __restrict Stream, const wchar_t * __restrict Format, va_list Args);
-
-/** Formatted print, to a buffer, from an argument list.
-
- The vswprintf function is equivalent to swprintf, with the variable
- argument list replaced by Args, which must have been initialized by the
- va_start macro (and possibly subsequent va_arg calls). The vswprintf
- function does not invoke the va_end macro.
-
- @param[in] S A pointer to the array to receive the formatted output.
- @param[in] N Maximum number of characters to write into array S.
- @param[in] Format A wide character sequence containing characters
- to be matched against, and conversion specifiers
- which convert their associated arguments.
- @param[in] Args A list of arguments, initialized by the va_start macro
- and accessed using the va_arg macro, used to satisfy
- the directives in the Format string.
-
- @return The vswprintf function returns the number of wide characters
- written in the array, not counting the terminating null wide
- character, or a neg ative value if an encoding error occurred or
- if n or more wide characters were requested to be generated.
-**/
-int vswprintf(wchar_t * __restrict S, size_t N, const wchar_t * __restrict Format, va_list Args);
-
-/** Formatted input from a string, using an argument list.
-
- The vswscanf function is equivalent to swscanf, with the variable argument
- list replaced by Args, which must have been initialized by the va_start
- macro. The vswscanf function does not invoke the va_end macro.
-
- @param[in] S Pointer to the string from which to obtain input.
- @param[in] Format A wide character sequence containing characters
- to be matched against, and conversion specifiers
- which convert their associated arguments.
- @param[out] Args A list of arguments, initialized by the va_start macro
- and accessed using the va_arg macro, used to satisfy
- the directives in the Format string.
-
- @return The vswscanf function returns the value of the macro EOF if an
- input failure occurs before any conversion. Otherwise, the
- vswscanf function returns the number of input items assigned,
- which can be fewer than provided for, or even zero, in the event
- of an early matching failure.
-**/
-int vswscanf(const wchar_t * __restrict S, const wchar_t * __restrict Format, va_list Args);
-
-/** Formatted print, to stdout, from an argument list.
-
- The vwprintf function is equivalent to wprintf, with the variable argument
- list replaced by Args, which must have been initialized by the va_start
- macro. The vwprintf function does not invoke the va_end macro.
-
- @param[in] Format A wide character sequence containing characters
- to be matched against, and conversion specifiers
- which convert their associated arguments.
- @param[out] Args A list of arguments, initialized by the va_start macro
- and accessed using the va_arg macro, used to satisfy
- the directives in the Format string.
-
- @return The vwprintf function returns the number of wide characters
- transmitted, or a negative value if an output or encoding error
- occurred.
-**/
-int vwprintf(const wchar_t * __restrict Format, va_list Args);
-
-/** Formatted input, from stdin, to an argument list.
-
- The vwscanf function is equivalent to wscanf, with the variable argument
- list replaced by arg, which shall have been initialized by the va_start
- macro. The vwscanf function does not invoke the va_end macro.
-
- @param[in] Format A wide character sequence containing characters
- to be matched against, and conversion specifiers
- which convert their associated arguments.
- @param[out] Args A list of arguments, initialized by the va_start macro
- and accessed using the va_arg macro, used to satisfy
- the directives in the Format string.
-
- @return The vwscanf function returns the value of the macro EOF if an
- input failure occurs before any conversion. Otherwise, the
- vwscanf function returns the number of input items assigned,
- which can be fewer than provided for, or even zero, in the event
- of an early matching failure.
-**/
-int vwscanf(const wchar_t * __restrict Format, va_list Args);
-
-/** Formatted print to stdout.
-
- The wprintf function is equivalent to fwprintf with the argument stdout
- specifying the output stream.
-
- @param[in] format A wide character sequence containing characters
- to be copied unchanged, and conversion specifiers
- which convert their associated arguments.
- @param ... Variable number of parameters as required by format.
-
- @return The wprintf function returns the number of wide characters
- transmitted, or a negative value if an output or encoding error
- occurred.
-**/
-int wprintf(const wchar_t * __restrict Format, ...);
-
-/** Formatted input from stdin.
-
- The wscanf function is equivalent to fwscanf with the argument stdin
- specifying the input stream.
-
- @param[in] format A wide character sequence containing characters
- to be matched against, and conversion specifiers
- which convert their associated arguments. Converted
- items are stored according to their associated arguments.
- @param ... Variable number of parameters, as required by format,
- specifying the objects to receive the converted input.
-
- @return The wscanf function returns the value of the macro EOF if an
- input failure occurs before any conversion. Otherwise, the
- wscanf function returns the number of input items assigned,
- which can be fewer than provided for, or even zero, in the event
- of an early matching failure.
-**/
-int wscanf(const wchar_t * __restrict format, ...);
-
-/* ################### Input/Output Functions ########################### */
-
-
-/** Get a character from an input Stream.
-
-If the end-of-file indicator for the input stream pointed to by stream is not set and a
-next wide character is present, the fgetwc function obtains that wide character as a
-wchar_t converted to a wint_t and advances the associated file position indicator for
-the stream (if defined).
-
- @param[in] Stream An input stream from which to obtain a character.
-
- @return If the end-of-file indicator for the stream is set, or if the stream is at end-of-file, the endof-
-file indicator for the stream is set and the fgetwc function returns WEOF. Otherwise,
-the fgetwc function returns the next wide character from the input stream pointed to by
-stream. If a read error occurs, the error indicator for the stream is set and the fgetwc
-function returns WEOF. If an encoding error occurs (including too few bytes), the value of
-the macro EILSEQ is stored in errno and the fgetwc function returns WEOF.
-**/
-wint_t fgetwc(FILE *Stream);
-
-/** Read a string from an input stream into a buffer.
-
- The fgetws function reads at most one less than the number of
- wide characters specified by n from the stream pointed to by
- stream into the array pointed to by s. No additional wide
- characters are read after a new-line wide character (which is
- retained) or after end-of-file. A null wide character is written
- immediately after the last wide character read into the array.
-
- @param[out] S A pointer to the array to receive the input string.
- @param[in] Limit The maximum number of characters to put into Buff,
- including the terminating null character.
- @param[in] Stream An input stream from which to obtain the string.
-
- @return The fgetws function returns S if successful. If end-of-file is
- encountered and no characters have been read into the array, the
- contents of the array remain unchanged and a null pointer is
- returned. If a read or encoding error occurs during the
- operation, the array contents are indeterminate and a
- null pointer is returned.
-**/
-wchar_t *fgetws(wchar_t * __restrict S, int Limit, FILE * __restrict Stream);
-
-/** Write a character to an output stream.
-
-The fputwc function writes the wide character specified by c to the output stream
-pointed to by stream, at the position indicated by the associated file position indicator
-for the stream (if defined), and advances the indicator appropriately. If the file cannot
-support positioning requests, or if the stream was opened with append mode, the
-character is appended to the output stream.
-
- @param[in] C The character to be written to Stream.
- @param[in] Stream The output stream that C is to be written to.
-
- @return The fputwc function returns the wide character written. If a write error occurs, the
-error indicator for the stream is set and fputwc returns WEOF. If an encoding error
-occurs, the value of the macro EILSEQ is stored in errno and fputwc returns WEOF.
-**/
-wint_t fputwc(wchar_t C, FILE *Stream);
-
-/** Write a string to an output stream.
-
-The fputws function writes the wide string pointed to by S to the stream pointed to by
-Stream. The terminating null wide character is not written.
-
- @param[in] String The character string to be written to Stream.
- @param[in] Stream The output stream that String is to be written to.
-
- @return The fputws function returns EOF if a write or encoding error occurs; otherwise, it
-returns a nonnegative value.
-**/
-int fputws(const wchar_t * __restrict S, FILE * __restrict Stream);
-
-/** Query or set a stream's orientation.
-
-The fwide function determines the orientation of the stream pointed to by stream. If
-Mode is greater than zero, the function first attempts to make the stream wide oriented. If
-Mode is less than zero, the function first attempts to make the stream byte oriented.
-Otherwise, Mode is zero and the function does not alter the orientation of the stream.
-
- @param[in] Stream The stream to be queried.
- @param[in] Mode Control value selecting between quering or setting
- the Stream's orientation.
- @return The fwide function returns a value greater than zero if, after the call, the stream has
-wide orientation, a value less than zero if the stream has byte orientation, or zero if the
-stream has no orientation.
-**/
-int fwide(FILE *Stream, int Mode);
-
-/** Get a character from an input stream.
-
-The getwc function is equivalent to fgetwc, except that if it is implemented as a
-macro, it may evaluate Stream more than once, so the argument should never be an
-expression with side effects.
-
- @param[in] Stream The stream to be read.
-
- @return The getwc function returns the next wide character from the input stream pointed to by
-stream, or WEOF.
-**/
-wint_t getwc(FILE *Stream);
-
-/** Get a character from stdin.
-
- The getwchar function is equivalent to getwc with the argument stdin.
-
- @return The getwchar function returns the next wide character from the
- input stream pointed to by stdin, or WEOF.
-**/
-wint_t getwchar(void);
-
-/** Write a character to an output stream.
-
-The putwc function is equivalent to fputwc, except that if it is implemented as a
-macro, it may evaluate Stream more than once, so the Stream argument should never be an
-expression with side effects.
-
- @param[in] C The wide character to be written to Stream.
- @param[in] Stream The output stream that C is to be written to.
-
- @return The putwc function returns the wide character written, or WEOF.
-**/
-wint_t putwc(wchar_t C, FILE *Stream);
-
-/** Write a character to stdout.
-
-The putwchar function is equivalent to putwc with the second argument stdout.
-
- @param[in] C The wide character to be written to stdout.
-
- @return The putwchar function returns the character written, or WEOF.
-**/
-wint_t putwchar(wchar_t C);
-
-/** Return a character to the input Stream as if it had not been read.
-
-The ungetwc function pushes the wide character specified by C back onto the input
-stream pointed to by Stream. Pushed-back wide characters will be returned by
-subsequent reads on that stream in the reverse order of their pushing. A successful
-intervening call (with the stream pointed to by Stream) to a file positioning function
-(fseek, fsetpos, or rewind) discards any pushed-back wide characters for the
-stream. The external storage corresponding to the stream is unchanged.
-
-One wide character of pushback is guaranteed, even if the call to the ungetwc function
-follows just after a call to a formatted wide character input function fwscanf,
-vfwscanf, vwscanf, or wscanf. If the ungetwc function is called too many times
-on the same stream without an intervening read or file positioning operation on that
-stream, the operation may fail.
-
-If the value of C equals that of the macro WEOF, the operation fails and the input stream is
-unchanged.
-
-A successful call to the ungetwc function clears the end-of-file indicator for the stream.
-The value of the file position indicator for the stream after reading or discarding all
-pushed-back wide characters is the same as it was before the wide characters were pushed
-back. For a text or binary stream, the value of its file position indicator after a successful
-call to the ungetwc function is unspecified until all pushed-back wide characters are
-read or discarded.
-
- @param[in] C The wide character to push back onto the Stream.
- @param[in] Stream The output stream that C is to be pushed back onto.
-
- @return The ungetwc function returns the character pushed back,
- or WEOF if the operation fails.
-**/
-wint_t ungetwc(wint_t C, FILE *Stream);
-
-/* ################### Numeric Conversions ########################### */
-
-/** @{
-The wcstod, wcstof, and wcstold functions convert the initial portion of the wide
-string pointed to by nptr to double, float, and long double representation,
-respectively. First, they decompose the input string into three parts: an initial, possibly
-empty, sequence of white-space wide characters (as specified by the iswspace
-function), a subject sequence resembling a floating-point constant or representing an
-infinity or NaN; and a final wide string of one or more unrecognized wide characters,
-including the terminating null wide character of the input wide string. Then, they attempt
-to convert the subject sequence to a floating-point number, and return the result.
-
- @param[in] Nptr Pointer to the string to convert to a floating-point value.
- @param[in] EndPtr Optional pointer to an object in which to store a pointer
- to the final wide string.
-
-The functions return the converted value, if any. If no conversion could be performed,
-zero is returned. If the correct value is outside the range of representable values, plus or
-minus HUGE_VAL, HUGE_VALF, or HUGE_VALL is returned (according to the return
-type and sign of the value), and the value of the macro ERANGE is stored in errno. If
-the result underflows (7.12.1), the functions return a value whose magnitude is no greater
-than the smallest normalized positive number in the return type. A pointer to the
-final wide string is stored in the object pointed to by endptr, provided that endptr is
-not a null pointer.
-**/
-double wcstod (const wchar_t * __restrict Nptr, wchar_t ** __restrict EndPtr);
-float wcstof (const wchar_t * __restrict Nptr, wchar_t ** __restrict EndPtr);
-long double wcstold (const wchar_t * __restrict Nptr, wchar_t ** __restrict EndPtr);
-/*@}*/
-
-/** @{
-The wcstol, wcstoll, wcstoul, and wcstoull functions convert the initial
-portion of the wide string pointed to by nptr to long int, long long int,
-unsigned long int, and unsigned long long int representation,
-respectively. First, they decompose the input string into three parts: an initial, possibly
-empty, sequence of white-space wide characters (as specified by the iswspace
-function), a subject sequence resembling an integer represented in some radix determined
-by the value of base, and a final wide string of one or more unrecognized wide
-characters, including the terminating null wide character of the input wide string. Then,
-they attempt to convert the subject sequence to an integer, and return the result.
-
- @param[in] Nptr Pointer to the string to convert.
- @param[in] EndPtr Optional pointer to an object in which to store a pointer
- to the final wide string.
- @param[in] Base Base, 0 to 36, of the value represented by the string
- pointed to by Nptr.
-
- @return The wcstol, wcstoll, wcstoul, and wcstoull functions return the converted
-value, if any. If no conversion could be performed, zero is returned. If the correct value
-is outside the range of representable values, LONG_MIN, LONG_MAX, LLONG_MIN,
-LLONG_MAX, ULONG_MAX, or ULLONG_MAX is returned (according to the return type
-sign of the value, if any), and the value of the macro ERANGE is stored in errno.
-**/
-long int wcstol ( const wchar_t * __restrict Nptr, wchar_t ** __restrict EndPtr, int Base);
-long long int wcstoll ( const wchar_t * __restrict Nptr, wchar_t ** __restrict EndPtr, int Base);
-unsigned long int wcstoul ( const wchar_t * __restrict Nptr, wchar_t ** __restrict EndPtr, int Base);
-unsigned long long int wcstoull( const wchar_t * __restrict Nptr, wchar_t ** __restrict EndPtr, int Base);
-/*@}*/
-
-/* ####################### String Copying ############################### */
-
-/** The wcscpy function copies the wide string pointed to by Src (including the
- terminating null wide character) into the array pointed to by Dest.
-
- @return The wcscpy function returns the value of Dest.
-**/
-wchar_t *wcscpy(wchar_t * __restrict Dest, const wchar_t * __restrict Src);
-
-/** The wcsncpy function copies not more than n wide characters (those that
- follow a null wide character are not copied) from the array pointed to by
- Src to the array pointed to by Dest.
-
- If the array pointed to by Src is a wide string that is shorter than n wide
- characters, null wide characters are appended to the copy in the array
- pointed to by Dest, until n wide characters in all have been written.
-
- @return The wcsncpy function returns the value of Dest.
-**/
-wchar_t *wcsncpy(wchar_t * __restrict Dest, const wchar_t * __restrict Src, size_t n);
-
-/** The wmemcpy function copies n wide characters from the object pointed to by
- Src to the object pointed to by Dest.
-
- Use this function if you know that Dest and Src DO NOT Overlap. Otherwise,
- use wmemmove.
-
- @return The wmemcpy function returns the value of Dest.
-**/
-wchar_t *wmemcpy(wchar_t * __restrict Dest, const wchar_t * __restrict Src, size_t n);
-
-/** The wmemmove function copies n wide characters from the object pointed to by
- Src to the object pointed to by Dest. The objects pointed to by Dest and Src are
- allowed to overlap.
-
- Because the UEFI BaseMemoryLib function CopyMem explicitly handles
- overlapping source and destination objects, this function and wmemcpy are
- implemented identically.
-
- For programming clarity, it is recommended that you use wmemcpy if you know
- that Dest and Src DO NOT Overlap. If Dest and Src might possibly overlap, then
- use wmemmove.
-
- @return The wmemmove function returns the value of Dest.
-**/
-wchar_t *wmemmove(wchar_t *Dest, const wchar_t *Src, size_t n);
-
-/* ################### String Concatenation ########################## */
-
-/** The wcscat function appends a copy of the wide string pointed to by Src
- (including the terminating null wide character) to the end of the wide
- string pointed to by Dest. The initial wide character of Src overwrites the
- null wide character at the end of Dest.
-
- @return The wcscat function returns the value of Dest.
-**/
-wchar_t *wcscat(wchar_t * __restrict Dest, const wchar_t * __restrict Src);
-
-/** The wcsncat function appends not more than n wide characters (a null wide
- character and those that follow it are not appended) from the array pointed
- to by Src to the end of the wide string pointed to by Dest. The initial wide
- character of Src overwrites the null wide character at the end of Dest.
- A terminating null wide character is always appended to the result.
-
- @return The wcsncat function returns the value of Dest.
-**/
-wchar_t *wcsncat(wchar_t * __restrict Dest, const wchar_t * __restrict Src, size_t n);
-
-/* ##################### String Comparison ############################# */
-
-/** The wcscmp function compares the wide string pointed to by s1 to the wide
- string pointed to by s2.
-
- @return The wcscmp function returns an integer greater than, equal to, or
- less than zero, accordingly as the wide string pointed to by s1
- is greater than, equal to, or less than the wide string
- pointed to by s2.
-**/
-int wcscmp(const wchar_t *s1, const wchar_t *s2);
-
-/** The wcscoll function compares the wide string pointed to by s1 to the wide
- string pointed to by s2, both interpreted as appropriate to the LC_COLLATE
- category of the current locale.
-
- @return The wcscoll function returns an integer greater than, equal to,
- or less than zero, accordingly as the wide string pointed to by
- s1 is greater than, equal to, or less than the wide string
- pointed to by s2 when both are interpreted as appropriate to
- the current locale.
-**/
-int wcscoll(const wchar_t *s1, const wchar_t *s2);
-
-/** The wcsncmp function compares not more than n wide characters (those that
- follow a null wide character are not compared) from the array pointed to by
- s1 to the array pointed to by s2.
-
- @return The wcsncmp function returns an integer greater than, equal to,
- or less than zero, accordingly as the possibly null-terminated
- array pointed to by s1 is greater than, equal to, or less than
- the possibly null-terminated array pointed to by s2.
-**/
-int wcsncmp(const wchar_t *s1, const wchar_t *s2, size_t n);
-
-/** The wcsxfrm function transforms the wide string pointed to by s2 and places
- the resulting wide string into the array pointed to by s1. The
- transformation is such that if the wcscmp function is applied to two
- transformed wide strings, it returns a value greater than, equal to, or
- less than zero, corresponding to the result of the wcscoll function applied
- to the same two original wide strings. No more than n wide characters are
- placed into the resulting array pointed to by s1, including the terminating
- null wide character. If n is zero, s1 is permitted to be a null pointer.
-
- @return The wcsxfrm function returns the length of the transformed wide
- string (not including the terminating null wide character). If
- the value returned is n or greater, the contents of the array
- pointed to by s1 are indeterminate.
-**/
-size_t wcsxfrm(wchar_t * __restrict s1, const wchar_t * __restrict s2, size_t n);
-
-/** The wmemcmp function compares the first n wide characters of the object
- pointed to by s1 to the first n wide characters of the object pointed to
- by s2.
-
- @return The wmemcmp function returns an integer greater than, equal to,
- or less than zero, accordingly as the object pointed to by s1 is
- greater than, equal to, or less than the object pointed to by s2.
-**/
-int wmemcmp(const wchar_t *s1, const wchar_t *s2, size_t n);
-
-/* ##################### String Searching ############################## */
-
-/** The wcschr function locates the first occurrence of C in the wide string
- pointed to by S. The terminating null wide character is considered to be
- part of the wide string.
-
- @return The wcschr function returns a pointer to the located wide
- character, or a null pointer if the wide character does not occur
- in the wide string.
-**/
-wchar_t *wcschr(const wchar_t *S, wchar_t C);
-
-/** The wcscspn function computes the length of the maximum initial segment of
- the wide string pointed to by s1 which consists entirely of wide characters
- not from the wide string pointed to by s2.
-
- @return The wcscspn function returns the length of the segment.
-**/
-size_t wcscspn(const wchar_t *s1, const wchar_t *s2);
-
-/** The wcspbrk function locates the first occurrence in the wide string
- pointed to by s1 of any wide character from the wide string
- pointed to by s2.
-
- @return The wcspbrk function returns a pointer to the wide character
- in s1, or a null pointer if no wide character from s2 occurs
- in s1.
-**/
-wchar_t *wcspbrk(const wchar_t *s1, const wchar_t *s2);
-
-/** The wcsrchr function locates the last occurrence of C in the wide string
- pointed to by S. The terminating null wide character is considered to be
- part of the wide string.
-
- @return The wcsrchr function returns a pointer to the wide character,
- or a null pointer if C does not occur in the wide string.
-**/
-wchar_t *wcsrchr(const wchar_t *S, wchar_t C);
-
-/** The wcsspn function computes the length of the maximum initial segment of
- the wide string pointed to by s1 which consists entirely of wide characters
- from the wide string pointed to by s2.
-
- @return The wcsspn function returns the length of the segment.
-**/
-size_t wcsspn(const wchar_t *s1, const wchar_t *s2);
-
-/** The wcsstr function locates the first occurrence in the wide string pointed
- to by s1 of the sequence of wide characters (excluding the terminating null
- wide character) in the wide string pointed to by s2.
-
- @return The wcsstr function returns a pointer to the located wide string,
- or a null pointer if the wide string is not found. If s2 points
- to a wide string with zero length, the function returns s1.
-**/
-wchar_t *wcsstr(const wchar_t *s1, const wchar_t *s2);
-
-/** A sequence of calls to the wcstok function breaks the wide string pointed
- to by s1 into a sequence of tokens, each of which is delimited by a wide
- character from the wide string pointed to by s2. The third argument points
- to a caller-provided wchar_t pointer into which the wcstok function stores
- information necessary for it to continue scanning the same wide string.
-
- The first call in a sequence has a non-null first argument and stores an
- initial value in the object pointed to by ptr. Subsequent calls in the
- sequence have a null first argument and the object pointed to by ptr is
- required to have the value stored by the previous call in the sequence,
- which is then updated. The separator wide string pointed to by s2 may be
- different from call to call.
-
- The first call in the sequence searches the wide string pointed to by s1
- for the first wide character that is not contained in the current separator
- wide string pointed to by s2. If no such wide character is found, then
- there are no tokens in the wide string pointed to by s1 and the wcstok
- function returns a null pointer. If such a wide character is found, it is
- the start of the first token.
-
- The wcstok function then searches from there for a wide character that is
- contained in the current separator wide string. If no such wide character
- is found, the current token extends to the end of the wide string pointed
- to by s1, and subsequent searches in the same wide string for a token
- return a null pointer. If such a wide character is found, it is overwritten
- by a null wide character, which terminates the current token.
-
- In all cases, the wcstok function stores sufficient information in the
- pointer pointed to by ptr so that subsequent calls, with a null pointer for
- s1 and the unmodified pointer value for ptr, shall start searching just
- past the element overwritten by a null wide character (if any).
-
- @return The wcstok function returns a pointer to the first wide character
- of a token, or a null pointer if there is no token.
-**/
-wchar_t *wcstok(wchar_t * __restrict s1, const wchar_t * __restrict s2, wchar_t ** __restrict ptr);
-
-/** The wmemchr function locates the first occurrence of C in the initial n
- wide characters of the object pointed to by S.
-
- @return The wmemchr function returns a pointer to the located wide
- character, or a null pointer if the wide character does not occur
- in the object.
-**/
-wchar_t *wmemchr(const wchar_t *S, wchar_t C, size_t n);
-
-/* ################### String Manipulation ############################# */
-
-/** The wcslen function computes the length of the wide string pointed to by S.
-
- @return The wcslen function returns the number of wide characters that
- precede the terminating null wide character.
-**/
-size_t wcslen(const wchar_t *S);
-
-/** The wmemset function copies the value of C into each of the first n wide
- characters of the object pointed to by S.
-
- @return The wmemset function returns the value of S.
-**/
-wchar_t *wmemset(wchar_t *S, wchar_t C, size_t n);
-
-/* ################# Date and Time Conversion ########################### */
-
-/**
-The wcsftime function is equivalent to the strftime function, except that:
- - The argument s points to the initial element of an array of wide characters into which
-the generated output is to be placed.
- - The argument maxsize indicates the limiting number of wide characters.
- - The argument format is a wide string and the conversion specifiers are replaced by
-corresponding sequences of wide characters.
- - The return value indicates the number of wide characters.
-
-If the total number of resulting wide characters including the terminating null wide
-character is not more than maxsize, the wcsftime function returns the number of
-wide characters placed into the array pointed to by s not including the terminating null
-wide character. Otherwise, zero is returned and the contents of the array are
-indeterminate.
-**/
-size_t wcsftime(wchar_t * __restrict S, size_t maxsize, const wchar_t * __restrict format, const struct tm * __restrict timeptr);
-
-/* ############# Multibyte <--> Wide Character Conversion ############### */
-
-/** The btowc function determines whether C constitutes a valid single-byte
- character in the initial shift state.
-
- @return The btowc function returns WEOF if c has the value EOF or if
- (unsigned char)C does not constitute a valid single-byte
- character in the initial shift state. Otherwise, it returns the
- wide character representation of that character.
-**/
-wint_t btowc(int C);
-
-/** The wctob function determines whether C corresponds to a member of the extended
- character set whose multibyte character representation is a single byte when in the initial
- shift state.
-
- @return The wctob function returns EOF if C does not correspond to a multibyte
- character with length one in the initial shift state. Otherwise, it
- returns the single-byte representation of that character as an
- unsigned char converted to an int.
-**/
-int wctob(wint_t C);
-
-/** If ps is not a null pointer, the mbsinit function determines whether the
- pointed-to mbstate_t object describes an initial conversion state.
-
- @return The mbsinit function returns nonzero if ps is a null pointer
- or if the pointed-to object describes an initial conversion
- state; otherwise, it returns zero.
-**/
-int mbsinit(const mbstate_t *ps);
-
-/* ####### Restartable Multibyte <--> Wide Character Conversion ######### */
-
-/** The mbrlen function is equivalent to the call:<BR>
-@verbatim
- mbrtowc(NULL, s, n, ps != NULL ? ps : &internal)
-@endverbatim
- where internal is the mbstate_t object for the mbrlen function, except that
- the expression designated by ps is evaluated only once.
-
- @param[in] s Pointer to a multibyte character sequence.
- @param[in] n Maximum number of bytes to examine.
- @param[in] pS Pointer to the conversion state object.
-
- @retval 0 The next n or fewer characters complete a NUL.
- @retval 1..n The number of bytes that complete the multibyte character.
- @retval -2 The next n bytes contribute to an incomplete (but potentially valid) multibyte character.
- @retval -1 An encoding error occurred.
-**/
-size_t mbrlen(const char * __restrict S, size_t n, mbstate_t * __restrict pS);
-
-/** Restartable Multibyte to Wide character conversion.
-If S is a null pointer, the mbrtowc function is equivalent to the call:<BR>
-@verbatim
- mbrtowc(NULL, "", 1, ps)
-@endverbatim
-
-In this case, the values of the parameters pwc and n are ignored.
-
-If S is not a null pointer, the mbrtowc function inspects at most n bytes beginning with
-the byte pointed to by S to determine the number of bytes needed to complete the next
-multibyte character (including any shift sequences). If the function determines that the
-next multibyte character is complete and valid, it determines the value of the
-corresponding wide character and then, if pwc is not a null pointer, stores that value in
-the object pointed to by pwc. If the corresponding wide character is the null wide
-character, the resulting state described is the initial conversion state.
-
- @retval 0 if the next n or fewer bytes complete the multibyte
- character that corresponds to the null wide
- character (which is the value stored).
- @retval between_1_and_n_inclusive if the next n or fewer bytes complete
- a valid multibyte character (which is the value
- stored); the value returned is the number of bytes
- that complete the multibyte character.
- @retval (size_t)(-2) if the next n bytes contribute to an incomplete
- (but potentially valid) multibyte character, and
- all n bytes have been processed (no value is stored).
- @retval (size_t)(-1) if an encoding error occurs, in which case the next
- n or fewer bytes do not contribute to a complete and
- valid multibyte character (no value is stored); the
- value of the macro EILSEQ is stored in errno, and
- the conversion state is unspecified.
-**/
-size_t mbrtowc(wchar_t * __restrict pwc, const char * __restrict S, size_t n, mbstate_t * __restrict ps);
-
-/**
-If S is a null pointer, the wcrtomb function is equivalent to the call:<BR>
-@verbatim
- wcrtomb(buf, L'\0', ps)
-@endverbatim
-where buf is an internal buffer.
-
-If S is not a null pointer, the wcrtomb function determines the number of bytes needed
-to represent the multibyte character that corresponds to the wide character given by wc
-(including any shift sequences), and stores the multibyte character representation in the
-array whose first element is pointed to by S. At most MB_CUR_MAX bytes are stored. If
-wc is a null wide character, a null byte is stored, preceded by any shift sequence needed
-to restore the initial shift state; the resulting state described is the initial conversion state.
-
- @return The wcrtomb function returns the number of bytes stored in the
- array object (including any shift sequences). When wc is not a
- valid wide character, an encoding error occurs: the function
- stores the value of the macro EILSEQ in errno and
- returns (size_t)(-1); the conversion state is unspecified.
-**/
-size_t wcrtomb(char * __restrict S, wchar_t wc, mbstate_t * __restrict ps);
-
-/** Convert a sequence of multibyte characters into a sequence of wide characters.
- The mbsrtowcs function converts a sequence of multibyte characters that begins in the
- conversion state described by the object pointed to by ps, from the array indirectly
- pointed to by src into a sequence of corresponding wide characters. If dst is not a null
- pointer, the converted characters are stored into the array pointed to by dst. Conversion
- continues up to and including a terminating null character, which is also stored.
- Conversion stops earlier in two cases: when a sequence of bytes is encountered that does
- not form a valid multibyte character, or (if dst is not a null pointer) when len wide
- characters have been stored into the array pointed to by dst. Each conversion takes
- place as if by a call to the mbrtowc function.
-
- If dst is not a null pointer, the pointer object pointed to by src is assigned either a null
- pointer (if conversion stopped due to reaching a terminating null character) or the address
- just past the last multibyte character converted (if any). If conversion stopped due to
- reaching a terminating null character and if dst is not a null pointer, the resulting state
- described is the initial conversion state.
-
- @param[in] dst Destination for the Wide character sequence.
- @param[in] src Pointer to Pointer to MBCS char. sequence to convert.
- @param[in] len Length of dest, in WIDE characters.
- @param[in] ps Pointer to the conversion state object to be used for this conversion.
-
- @return If the input conversion encounters a sequence of bytes that do
- not form a valid multibyte character, an encoding error occurs:
- the mbsrtowcs function stores the value of the macro EILSEQ in
- errno and returns (size_t)(-1); the conversion state is
- unspecified. Otherwise, it returns the number of multibyte
- characters successfully converted, not including the terminating
- null character (if any).
-**/
-size_t mbsrtowcs(wchar_t * __restrict dst, const char ** __restrict src, size_t len, mbstate_t * __restrict ps);
-
-/** The wcsrtombs function converts a sequence of wide characters from the array
- indirectly pointed to by src into a sequence of corresponding multibyte
- characters that begins in the conversion state described by the object
- pointed to by ps. If dst is not a null pointer, the converted characters
- are then stored into the array pointed to by dst. Conversion continues
- up to and including a terminating null wide character, which is also
- stored. Conversion stops earlier in two cases: when a wide character is
- reached that does not correspond to a valid multibyte character, or
- (if dst is not a null pointer) when the next multibyte character would
- exceed the limit of len total bytes to be stored into the array pointed
- to by dst. Each conversion takes place as if by a call to the wcrtomb
- function.)
-
- If dst is not a null pointer, the pointer object pointed to by src is
- assigned either a null pointer (if conversion stopped due to reaching
- a terminating null wide character) or the address just past the last wide
- character converted (if any). If conversion stopped due to reaching a
- terminating null wide character, the resulting state described is the
- initial conversion state.
-
- @param[in] dst Destination for the MBCS sequence.
- @param[in] src Pointer to Pointer to wide char. sequence to convert.
- @param[in] len Length of dest, in bytes.
- @param[in] ps Pointer to the conversion state object to be used for this conversion.
-
- @return If conversion stops because a wide character is reached that
- does not correspond to a valid multibyte character, an
- encoding error occurs: the wcsrtombs function stores the
- value of the macro EILSEQ in errno and returns (size_t)(-1);
- the conversion state is unspecified. Otherwise, it returns
- the number of bytes in the resulting multibyte character
- sequence, not including the terminating null character (if any).
-**/
-size_t wcsrtombs(char * __restrict dst, const wchar_t ** __restrict src, size_t len, mbstate_t * __restrict ps);
-
-#endif /* _WCHAR_H */
diff --git a/StdLib/Include/wctype.h b/StdLib/Include/wctype.h
deleted file mode 100644
index eac084cbc3..0000000000
--- a/StdLib/Include/wctype.h
+++ /dev/null
@@ -1,343 +0,0 @@
-/** @file
- Wide character classification and mapping utilities.
-
- The following macros are defined in this file:<BR>
-@verbatim
- WEOF Wide char version of end-of-file.
-@endverbatim
-
- The following types are defined in this file:<BR>
-@verbatim
- wint_t Type capable of holding all wchar_t values and WEOF.
- wctrans_t A type for holding locale-specific character mappings.
- wctype_t Type for holding locale-specific character classifications.
-@endverbatim
-
- The following functions are declared in this file:<BR>
-@verbatim
- ############### Wide Character Classification Functions
- int iswalnum (wint_t);
- int iswalpha (wint_t);
- int iswcntrl (wint_t);
- int iswdigit (wint_t);
- int iswgraph (wint_t);
- int iswlower (wint_t);
- int iswprint (wint_t);
- int iswpunct (wint_t);
- int iswblank (wint_t);
- int iswspace (wint_t);
- int iswupper (wint_t);
- int iswxdigit (wint_t);
-
- ############### Extensible Wide Character Classification Functions
- wctype_t wctype (const char *);
- int iswctype (wint_t, wctype_t);
-
- ############### Wide Character Case Mapping Utilities
- wint_t towlower (wint_t);
- wint_t towupper (wint_t);
-
- ############### Extensible Wide Character Case Mapping Utilities
- wctrans_t wctrans (const char *);
- wint_t towctrans (wint_t, wctrans_t);
-@endverbatim
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c)1999 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * citrus Id: wctype.h,v 1.4 2000/12/21 01:50:21 itojun Exp
-
- NetBSD: wctype.h,v 1.6 2005/02/03 04:39:32 perry Exp
-**/
-#ifndef _WCTYPE_H_
-#define _WCTYPE_H_
-
-#include <sys/EfiCdefs.h>
-#include <machine/ansi.h>
-
-#ifdef _EFI_WINT_T
- /** wint_t is an integer type unchanged by default argument promotions that can
- hold any value corresponding to members of the extended character set, as
- well as at least one value that does not correspond to any member of the
- extended character set: WEOF.
- */
- typedef _EFI_WINT_T wint_t;
- #undef _BSD_WINT_T_
- #undef _EFI_WINT_T
-#endif
-
-#ifdef _BSD_WCTRANS_T_
- /** A scalar type for holding locale-specific character mappings. */
- typedef wint_t (*wctrans_t)(wint_t);
- #undef _BSD_WCTRANS_T_
-#endif
-
-#ifdef _BSD_WCTYPE_T_
- /** A scalar type capable of holding values representing locale-specific
- character classifications. */
- typedef _BSD_WCTYPE_T_ wctype_t;
- #undef _BSD_WCTYPE_T_
-#endif
-
-#ifndef WEOF
- /** WEOF expands to a constant expression of type wint_t whose value does not
- correspond to any member of the extended character set. It is accepted
- (and returned) by several functions, declared in this file, to indicate
- end-of-file, that is, no more input from a stream. It is also used as a
- wide character value that does not correspond to any member of the
- extended character set.
- */
- #define WEOF ((wint_t)-1)
-#endif
-
-__BEGIN_DECLS
- /** Test for any wide character for which iswalpha or iswdigit is TRUE.
-
- @param[in] WC The wide character to be classified.
-
- @return Returns non-zero (TRUE) if and only if the value of WC conforms
- to the classification described for this function.
- */
- int iswalnum (wint_t WC);
-
- /** Test for any wide character for which iswupper or iswlower is TRUE,
- OR, a locale-specific character where none of iswcntrl, iswdigit,
- iswpunct, or iswspace is TRUE.
-
- @param[in] WC The wide character to be classified.
-
- @return Returns non-zero (TRUE) if and only if the value of WC conforms
- to the classification described for this function.
- */
- int iswalpha (wint_t WC);
-
- /** Test for any wide control character.
-
- @param[in] WC The wide character to be classified.
-
- @return Returns non-zero (TRUE) if and only if the value of WC conforms
- to the classification described for this function.
- */
- int iswcntrl (wint_t WC);
-
- /** Test if the value of WC is a wide character that corresponds to a decimal digit.
-
- @param[in] WC The wide character to be classified.
-
- @return Returns non-zero (TRUE) if and only if the value of WC conforms
- to the classification described for this function.
- */
- int iswdigit (wint_t WC);
-
- /** Test for wide characters for which iswprint is TRUE and iswspace is FALSE.
-
- @param[in] WC The wide character to be classified.
-
- @return Returns non-zero (TRUE) if and only if the value of WC conforms
- to the classification described for this function.
- */
- int iswgraph (wint_t WC);
-
- /** The iswlower function tests for any wide character that corresponds to a
- lowercase letter or is one of a locale-specific set of wide characters
- for which none of iswcntrl, iswdigit, iswpunct, or iswspace is TRUE.
-
- @param[in] WC The wide character to be classified.
-
- @return Returns non-zero (TRUE) if and only if the value of WC conforms
- to the classification described for this function.
- */
- int iswlower (wint_t WC);
-
- /** Test for any printing wide character.
-
- @param[in] WC The wide character to be classified.
-
- @return Returns non-zero (TRUE) if and only if the value of WC conforms
- to the classification described for this function.
- */
- int iswprint (wint_t WC);
-
- /** The iswpunct function tests for any printing wide character that is one
- of a locale-specific set of punctuation wide characters for which
- neither iswspace nor iswalnum is TRUE.
-
- @param[in] WC The wide character to be classified.
-
- @return Returns non-zero (TRUE) if and only if the value of WC conforms
- to the classification described for this function.
- */
- int iswpunct (wint_t WC);
-
- /** Test for standard blank characters or locale-specific characters
- for which iswspace is TRUE and are used to separate words within a line
- of text. In the "C" locale, iswblank only returns TRUE for the standard
- blank characters space (L' ') and horizontal tab (L'\t').
-
- @param[in] WC The wide character to be classified.
-
- @return Returns non-zero (TRUE) if and only if the value of WC conforms
- to the classification described for this function.
- */
- int iswblank (wint_t WC);
-
- /** The iswspace function tests for any wide character that corresponds to a
- locale-specific set of white-space wide characters for which none of
- iswalnum, iswgraph, or iswpunct is TRUE.
-
- @param[in] WC The wide character to be classified.
-
- @return Returns non-zero (TRUE) if and only if the value of WC conforms
- to the classification described for this function.
- */
- int iswspace (wint_t WC);
-
- /** Tests for any wide character that corresponds to an uppercase letter or
- is one of a locale-specific set of wide characters for which none of
- iswcntrl, iswdigit, iswpunct, or iswspace is TRUE.
-
- @param[in] WC The wide character to be classified.
-
- @return Returns non-zero (TRUE) if and only if the value of WC conforms
- to the classification described for this function.
- */
- int iswupper (wint_t WC);
-
- /** The iswxdigit function tests for any wide character that corresponds to a
- hexadecimal-digit character.
-
- @param[in] WC The wide character to be classified.
-
- @return Returns non-zero (TRUE) if and only if the value of WC conforms
- to the classification described for this function.
- */
- int iswxdigit (wint_t WC);
-
- /** Construct a value that describes a class of wide characters, identified
- by the string pointed to by Desc. The constructed value is suitable for
- use as the second argument to the iswctype function.
-
- The following strings name classes of wide characters that the iswctype
- function is able to test against. These strings are valid in all locales
- as Desc arguments to wctype().
- - "alnum"
- - "alpha"
- - "blank"
- - "cntrl"
- - "digit"
- - "graph"
- - "lower"
- - "print"
- - "punct"
- - "space"
- - "upper"
- - "xdigit
-
- @param[in] Desc A pointer to a multibyte character string naming a
- class of wide characters.
-
- @return If Desc identifies a valid class of wide characters in the
- current locale, the wctype function returns a nonzero value that
- is valid as the second argument to the iswctype function;
- otherwise, it returns zero.
- */
- wctype_t wctype (const char *Desc);
-
- /** Determine whether the wide character WC has the property described by Wct.
-
- @param[in] WC The wide character to be classified.
- @param[in] Wct A value describing a class of wide characters.
-
- @return The iswctype function returns nonzero (TRUE) if and only if the
- value of the wide character WC has the property described by Wct.
- */
- int iswctype (wint_t WC, wctype_t Wct);
-
- /** Convert an uppercase letter to a corresponding lowercase letter.
-
- @param[in] WC The wide character to be converted.
-
- @return If the argument is a wide character for which iswupper is TRUE
- and there are one or more corresponding wide characters, as
- specified by the current locale, for which iswlower is TRUE, the
- towlower function returns one of the corresponding wide
- characters (always the same one for any given locale); otherwise,
- the argument is returned unchanged.
- */
- wint_t towlower (wint_t WC);
-
- /** Convert a lowercase letter to a corresponding uppercase letter.
-
- @param[in] WC The wide character to be converted.
-
- @return If the argument is a wide character for which iswlower is TRUE
- and there are one or more corresponding wide characters, as
- specified by the current locale, for which iswupper is TRUE, the
- towupper function returns one of the corresponding wide
- characters (always the same one for any given locale); otherwise,
- the argument is returned unchanged.
- */
- wint_t towupper (wint_t WC);
-
- /** Construct a value that describes a mapping between wide characters
- identified by the string argument, S.
-
- The strings listed below are valid in all locales as the S argument to
- the wctrans function.
- - "tolower"
- - "toupper"
-
- @param[in] S A pointer to a multibyte character string naming a
- mapping between wide characters.
-
- @return If S identifies a valid mapping of wide characters in the current
- locale, the wctrans function returns a nonzero value that is
- valid as the second argument to the towctrans function;
- otherwise, it returns zero.
- */
- wctrans_t wctrans (const char *S);
-
- /** Map the wide character WC using the mapping described by WTr. The current
- locale will be the same as during the call to wctrans that returned
- the value WTr.
-
- @param[in] WC The wide character to be converted.
- @param[in] WTr A value describing a mapping of wide characters in the
- current locale.
-
- @return Returns the mapped value of WC using the mapping selected by WTr.
- */
- wint_t towctrans (wint_t WC, wctrans_t WTr);
-__END_DECLS
-
-#endif /* _WCTYPE_H_ */
diff --git a/StdLib/Include/x86/float.h b/StdLib/Include/x86/float.h
deleted file mode 100644
index 5086dfadcb..0000000000
--- a/StdLib/Include/x86/float.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/** @file
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- NetBSD: float.h,v 1.5 2003/10/23 23:26:06 kleink Exp
-**/
-#ifndef _X86_FLOAT_H_
-#define _X86_FLOAT_H_
-
-/* long double and double are the same in Microsoft compilers.
- In GCC long double is fully supported.
-*/
-#if !defined(_MSC_VER) /* Non-Microsoft compiler specifics. */
- #define LDBL_MANT_DIG 64
- #define LDBL_EPSILON 1.0842021724855044340E-19L
- #define LDBL_DIG 18
- #define LDBL_MIN_EXP (-16381)
- #define LDBL_MIN 3.3621031431120935063E-4932L
- #define LDBL_MIN_10_EXP (-4931)
- #define LDBL_MAX_EXP 16384
- #define LDBL_MAX 1.1897314953572317650E+4932L
- #define LDBL_MAX_10_EXP 4932
-
- #define DECIMAL_DIG 21
-#endif // !defined(_MSC_VER)
-
-#include <sys/float_ieee754.h>
-
-#endif /* _X86_FLOAT_H_ */
diff --git a/StdLib/Include/x86/ieee.h b/StdLib/Include/x86/ieee.h
deleted file mode 100644
index f4326b0bc1..0000000000
--- a/StdLib/Include/x86/ieee.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* $NetBSD: ieee.h,v 1.9.32.1 2007/05/07 19:49:10 pavel Exp $ */
-
-/*
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This software was developed by the Computer Systems Engineering group
- * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
- * contributed to Berkeley.
- *
- * All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Lawrence Berkeley Laboratory.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)ieee.h 8.1 (Berkeley) 6/11/93
- */
-
-/*
- * ieee.h defines the machine-dependent layout of the machine's IEEE
- * floating point. It does *not* define (yet?) any of the rounding
- * mode bits, exceptions, and so forth.
- */
-
-#include <sys/ieee754.h>
-
-#define EXT_EXPBITS 15
-#define EXT_FRACHBITS 32
-#define EXT_FRACLBITS 32
-#define EXT_FRACBITS (EXT_FRACLBITS + EXT_FRACHBITS)
-
-#define EXT_TO_ARRAY32(u, a) do { \
- (a)[0] = (uint32_t)(u).extu_ext.ext_fracl; \
- (a)[1] = (uint32_t)(u).extu_ext.ext_frach; \
-} while(/*CONSTCOND*/0)
-
-/*
- * struct ieee_ext is the raw storage layout of the 80-bit
- * extended-precision type as implemented by the FPU. Per the
- * respective ABI specifications, it is followed by a tail padding of
- *
- * amd64: 48 bits,
- * i386: 16 bits.
- */
-struct ieee_ext {
- u_int ext_fracl:EXT_FRACLBITS;
- u_int ext_frach:EXT_FRACHBITS;
-#if 0
- u_int ext_int:1;
-#endif
- u_int ext_exp:EXT_EXPBITS;
- u_int ext_sign:1;
-};
-
-/*
- * Floats whose exponent is in [1..INFNAN) (of whatever type) are
- * `normal'. Floats whose exponent is INFNAN are either Inf or NaN.
- * Floats whose exponent is zero are either zero (iff all fraction
- * bits are zero) or subnormal values.
- *
- * A NaN is a `signalling NaN' if its QUIETNAN bit is clear in its
- * high fraction; if the bit is set, it is a `quiet NaN'.
- */
-#define EXT_EXP_INFNAN 32767
-
-#if 0
-#define SNG_QUIETNAN (1 << 22)
-#define DBL_QUIETNAN (1 << 19)
-#define EXT_QUIETNAN (1 << 30)
-#endif
-
-/*
- * Exponent biases.
- */
-#define EXT_EXP_BIAS 16383
-
-/*
- * Convenience data structures.
- */
-union ieee_ext_u {
- long double extu_ld;
- struct ieee_ext extu_ext;
-};
diff --git a/StdLib/Include/x86/limits.h b/StdLib/Include/x86/limits.h
deleted file mode 100644
index b5339c2fdc..0000000000
--- a/StdLib/Include/x86/limits.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/** @file
- Intel x86 architecture (both Ia32 and X64) specific values for <limits.h>.
-
- Within this file, the ^ character is used in comments to represent exponentiation.
- Thus, 2^7 means "2 to the 7th power", NOT "2 XOR 7".
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _MACHINE_LIMITS_H
-#define _MACHINE_LIMITS_H
-
-/** Number of bits for smallest object that is not a bit-field (byte). **/
-#define __CHAR_BIT 8
-
-/** Minimum value for an object of type signed char. **/
-#define __SCHAR_MIN -128 // -(2^7 - 1)
-
-/** Maximum value for an object of type signed char. **/
-#define __SCHAR_MAX +127 // 2^7 - 1
-
-/** Maximum value for an object of type unsigned char. **/
-#define __UCHAR_MAX 255 // 2^8 - 1
-
-/** Minimum value for an object of type short int. **/
-#define __SHRT_MIN -32768 // -(2^15 - 1)
-
-/** Maximum value for an object of type short int. **/
-#define __SHRT_MAX +32767 // 2^15 - 1
-
-/** Maximum value for an object of type unsigned short int. **/
-#define __USHRT_MAX 65535 // 2^16 - 1
-
-/** Maximum value for an object of type int. **/
-#define __INT_MAX +2147483647 // 2^31 - 1
-
-/** Minimum value for an object of type int. **/
-#define __INT_MIN (-2147483647 - 1) // -(2^31 - 1)
-
-/** Maximum value for an object of type unsigned int. **/
-#define __UINT_MAX 0xffffffff // 2^32 - 1
-
-/** Minimum value for an object of type long long int. **/
-#define __LLONG_MIN (-9223372036854775807LL - 1LL) // -(2^63 - 1)
-
-/** Maximum value for an object of type long long int. **/
-#define __LLONG_MAX 9223372036854775807LL // 2^63 - 1
-
-/** Maximum value for an object of type unsigned long long int. **/
-#define __ULLONG_MAX 0xFFFFFFFFFFFFFFFFULL // 2^64 - 1
-
-/** Intel extensions to <limits.h> for UEFI
-@{
-**/
-#define __SHORT_BIT 16 ///< Number of bits comprising a short int.
-#define __WCHAR_BIT 16 ///< Number of bits comprising a wide character.
-#define __INT_BIT 32 ///< Number of bits comprising an int.
-#define __LONG_LONG_BIT 64 ///< Number of bits comprising a long long int.
-/// @}
-
-#endif /* _MACHINE_LIMITS_H */
diff --git a/StdLib/Include/x86/math.h b/StdLib/Include/x86/math.h
deleted file mode 100644
index 7c308bfc84..0000000000
--- a/StdLib/Include/x86/math.h
+++ /dev/null
@@ -1,4 +0,0 @@
-/* $NetBSD: math.h,v 1.2 2003/10/28 00:55:28 kleink Exp $ */
-
-#define __HAVE_LONG_DOUBLE
-#define __HAVE_NANF
diff --git a/StdLib/LibC/CRT/Gcc.c b/StdLib/LibC/CRT/Gcc.c
deleted file mode 100644
index cbf4ec273f..0000000000
--- a/StdLib/LibC/CRT/Gcc.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/** @file
- Integer Arithmetic Run-time support functions for GCC.
- The integer arithmetic routines are used on platforms that don't provide
- hardware support for arithmetic operations on some modes..
-
- Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#include <Uefi.h>
-#include <Library/DebugLib.h>
-#include <sys/EfiCdefs.h>
-
-#include <Library/BaseLib.h>
-
-// Shift Datum left by Count bits.
-// ===========================================================================
-int __ashlsi3(int Datum, int Count)
-{
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- return (int) LShiftU64 ((UINT64)Datum, (UINTN)Count);
-}
-
-long __ashldi3(long Datum, int Count)
-{
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- return (long) LShiftU64 ((UINT64)Datum, (UINTN)Count);
-}
-
-long long __ashlti3(long long Datum, int Count)
-{
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- return (long long) LShiftU64 ((UINT64)Datum, (UINTN)Count);
-}
-
-// Arithmetically shift Datum right by Count bits.
-// ===========================================================================
-int __ashrsi3(int Datum, int Count)
-{
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- return (int) ARShiftU64 ((UINT64) Datum, (UINTN)Count);
-}
-
-long __ashrdi3(long Datum, int Count)
-{
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- return (long) ARShiftU64 ((UINT64) Datum, (UINTN)Count);
-}
-
-long long __ashrti3(long long Datum, int Count)
-{
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- return (long long) ARShiftU64 ((UINT64) Datum, (UINTN)Count);
-}
-
-// Return the quotient of the signed division of Dividend and Divisor
-// ===========================================================================
-int __divsi3(int Dividend, int Divisor)
-{
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- return (int) DivS64x64Remainder ((INT64) Dividend, (INT64) Divisor, NULL);
-}
-
-INT64 __divdi3(INT64 Dividend, INT64 Divisor)
-{
- INT64 Quotient;
-
- Quotient = DivS64x64Remainder ((INT64) Dividend, (INT64) Divisor, NULL);
- DEBUG((DEBUG_INFO, "%a: %Ld / %Ld = %Ld\n", __func__, Dividend, Divisor, Quotient));
-
- return Quotient;
-}
-
-long long __divti3(long long Dividend, long long Divisor)
-{
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- return (long long) DivS64x64Remainder ((INT64) Dividend, (INT64) Divisor, NULL);
-}
-
-// Logically shift Datum right by Count bits
-// ===========================================================================
-int __lshrsi3(int Datum, int Count)
-{
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- return (int) RShiftU64 ((UINT64) Datum, (UINTN)Count);
-}
-
-long __lshrdi3(int Datum, int Count)
-{
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- return (long) RShiftU64 ((UINT64) Datum, (UINTN)Count);
-}
-
-long long __lshrti3(int Datum, int Count)
-{
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- return (long long) RShiftU64 ((UINT64) Datum, (UINTN)Count);
-}
-
-// Return the remainder of the signed division of Dividend and Divisor
-// ===========================================================================
-int __modsi3(int Dividend, int Divisor)
-{
- INT64 Remainder;
-
- (void) DivS64x64Remainder ((INT64) Dividend, (INT64) Divisor, &Remainder);
- DEBUG((DEBUG_INFO, "modsi3: %d %% %d = %d\n", Dividend, Divisor, (int)Remainder));
-
- return (int) Remainder;
-}
-
-INT64 __moddi3(INT64 Dividend, INT64 Divisor)
-{
- INT64 Remainder;
-
- (void) DivS64x64Remainder ((INT64) Dividend, (INT64) Divisor, &Remainder);
- DEBUG((DEBUG_INFO, "moddi3: %Ld %% %Ld = %Ld\n", (INT64)Dividend, (INT64)Divisor, Remainder));
-
- return Remainder;
-}
-
-long long __modti3(long long Dividend, long long Divisor)
-{
- INT64 Remainder;
-
- (void) DivS64x64Remainder ((INT64) Dividend, (INT64) Divisor, &Remainder);
- DEBUG((DEBUG_INFO, "modti3: %Ld %% %Ld = %Ld\n", (INT64)Dividend, (INT64)Divisor, Remainder));
-
- return (long long) Remainder;
-}
-
-// These functions return the product of the Multiplicand and Multiplier.
-// ===========================================================================
-long long __multi3(long long Multiplicand, long long Multiplier)
-{
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- return (long long) MultS64x64 ((INT64)Multiplicand, (INT64)Multiplier);
-}
-
-// Return the quotient of the unsigned division of a and b.
-// ===========================================================================
-unsigned int __udivsi3(unsigned int Dividend, unsigned int Divisor)
-{
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- return (int) DivU64x64Remainder ((UINT64) Dividend, (UINT64) Divisor, NULL);
-}
-
-unsigned long __udivdi3(unsigned long Dividend, unsigned long Divisor)
-{
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- return (long) DivU64x64Remainder ((UINT64) Dividend, (UINT64) Divisor, NULL);
-}
-
-unsigned long long __udivti3(unsigned long long Dividend, unsigned long long Divisor)
-{
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- return (long long) DivU64x64Remainder ((UINT64) Dividend, (UINT64) Divisor, NULL);
-}
-
-// ===========================================================================
-unsigned int __umodsi3(unsigned int Dividend, unsigned int Divisor)
-{
- UINT64 Remainder;
-
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- (void) DivU64x64Remainder ((UINT64) Dividend, (UINT64) Divisor, &Remainder);
-
- return (unsigned int) Remainder;
-}
-
-unsigned long __umoddi3(unsigned long Dividend, unsigned long Divisor)
-{
- UINT64 Remainder;
-
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- (void) DivU64x64Remainder ((UINT64) Dividend, (UINT64) Divisor, &Remainder);
-
- return (unsigned long) Remainder;
-}
-
-unsigned long long __umodti3(unsigned long long Dividend, unsigned long long Divisor)
-{
- UINT64 Remainder;
-
- DEBUG((DEBUG_INFO, "%a:\n", __func__));
- (void) DivU64x64Remainder ((UINT64) Dividend, (UINT64) Divisor, &Remainder);
-
- return (unsigned long long) Remainder;
-}
diff --git a/StdLib/LibC/CRT/Ia32/ashrdi3.S b/StdLib/LibC/CRT/Ia32/ashrdi3.S
deleted file mode 100644
index 1c629dc23b..0000000000
--- a/StdLib/LibC/CRT/Ia32/ashrdi3.S
+++ /dev/null
@@ -1,66 +0,0 @@
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
-# This program and the accompanying materials are licensed and made available
-# under the terms and conditions of the BSD License which accompanies this
-# distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# MathRShiftU64.S
-#
-# Abstract:
-#
-# 64-bit Math Worker Function.
-# Shifts a 64-bit unsigned value right by a certain number of bits.
-#
-#------------------------------------------------------------------------------
-
-
- .686:
- .code:
-
-ASM_GLOBAL ASM_PFX(__ashrdi3)
-
-#------------------------------------------------------------------------------
-#
-# void __cdecl __ashrdi3 (void)
-#
-#------------------------------------------------------------------------------
-ASM_PFX(__ashrdi3):
- #
- # Checking: Only handle 64bit shifting or more
- #
- cmpb $64, %cl
- jae _Exit
-
- #
- # Handle shifting between 0 and 31 bits
- #
- cmpb $32, %cl
- jae More32
- shrd %cl, %edx, %eax
- shr %cl, %edx
- ret
-
- #
- # Handle shifting of 32-63 bits
- #
-More32:
- movl %edx, %eax
- xor %edx, %edx
- and $32, %cl
- shr %cl, %eax
- ret
-
- #
- # Invalid number (less then 32bits), return 0
- #
-_Exit:
- xor %eax, %eax
- xor %edx, %edx
- ret
diff --git a/StdLib/LibC/CRT/Ia32/lldiv.c b/StdLib/LibC/CRT/Ia32/lldiv.c
deleted file mode 100644
index cae2342243..0000000000
--- a/StdLib/LibC/CRT/Ia32/lldiv.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/** @file
- 64-bit Math Worker Function.
- The 32-bit versions of C compiler generate calls to library routines
- to handle 64-bit math. These functions use non-standard calling conventions.
-
- Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <Library/BaseLib.h>
-
-
-/*
- * Divides a 64-bit signed value with a 64-bit signed value and returns
- * a 64-bit signed result.
- */
-__declspec(naked) void __cdecl _alldiv (void)
-{
- //
- // Wrapper Implementation over EDKII DivS64x64Remainder() routine
- // INT64
- // EFIAPI
- // DivS64x64Remainder (
- // IN UINT64 Dividend,
- // IN UINT64 Divisor,
- // OUT UINT64 *Remainder OPTIONAL
- // )
- //
- _asm {
-
- ;Entry:
- ; Arguments are passed on the stack:
- ; 1st pushed: divisor (QWORD)
- ; 2nd pushed: dividend (QWORD)
- ;
- ;Exit:
- ; EDX:EAX contains the quotient (dividend/divisor)
- ; NOTE: this routine removes the parameters from the stack.
- ;
- ; Original local stack when calling _alldiv
- ; -----------------
- ; | |
- ; |---------------|
- ; | |
- ; |-- Divisor --|
- ; | |
- ; |---------------|
- ; | |
- ; |-- Dividend --|
- ; | |
- ; |---------------|
- ; | ReturnAddr** |
- ; ESP---->|---------------|
- ;
-
- ;
- ; Set up the local stack for NULL Reminder pointer
- ;
- xor eax, eax
- push eax
-
- ;
- ; Set up the local stack for Divisor parameter
- ;
- mov eax, [esp + 20]
- push eax
- mov eax, [esp + 20]
- push eax
-
- ;
- ; Set up the local stack for Dividend parameter
- ;
- mov eax, [esp + 20]
- push eax
- mov eax, [esp + 20]
- push eax
-
- ;
- ; Call native DivS64x64Remainder of BaseLib
- ;
- call DivS64x64Remainder
-
- ;
- ; Adjust stack
- ;
- add esp, 20
-
- ret 16
- }
-}
diff --git a/StdLib/LibC/CRT/Ia32/lldvrm.c b/StdLib/LibC/CRT/Ia32/lldvrm.c
deleted file mode 100644
index 26e4ef8d53..0000000000
--- a/StdLib/LibC/CRT/Ia32/lldvrm.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/** @file
- 64-bit Math Worker Function.
- The 32-bit versions of C compiler generate calls to library routines
- to handle 64-bit math. These functions use non-standard calling conventions.
-
- Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <Library/BaseLib.h>
-
-
-/*
- * Divides a 64-bit signed value by another 64-bit signed value and returns
- * the 64-bit signed result and the 64-bit signed remainder.
- */
-__declspec(naked) void __cdecl _alldvrm(void)
-{
- //
- // Wrapper Implementation over EDKII DivS64x64Remainder() routine
- // INT64
- // EFIAPI
- // DivS64x64Remainder (
- // IN INT64 Dividend,
- // IN INT64 Divisor,
- // OUT INT64 *Remainder
- // )
- //
- _asm {
- ; Original local stack when calling _alldvrm
- ; -----------------
- ; | |
- ; |---------------|
- ; | |
- ; |-- Divisor --|
- ; | |
- ; |---------------|
- ; | |
- ; |-- Dividend --|
- ; | |
- ; |---------------|
- ; | ReturnAddr** |
- ; ESP---->|---------------|
- ;
- ;
- ; On Exit:
- ; EDX:EAX contains the quotient (dividend/divisor)
- ; EBX:ECX contains the remainder (divided % divisor)
- ; NOTE: this routine removes the parameters from the stack.
- ;
-
- ;
- ; Set up the local stack for Reminder pointer
- ;
- sub esp, 8
- push esp
-
- ;
- ; Set up the local stack for Divisor parameter
- ;
- mov eax, [esp + 28]
- push eax
- mov eax, [esp + 28]
- push eax
-
- ;
- ; Set up the local stack for Dividend parameter
- ;
- mov eax, [esp + 28]
- push eax
- mov eax, [esp + 28]
- push eax
-
- ;
- ; Call native DivS64x64Remainder of BaseLib
- ;
- call DivS64x64Remainder
-
- ;
- ; EDX:EAX contains the quotient (dividend/divisor)
- ; Put the Remainder in EBX:ECX
- ;
- mov ecx, [esp + 20]
- mov ebx, [esp + 24]
-
- ;
- ; Adjust stack
- ;
- add esp, 28
-
- ret 16
- }
-}
diff --git a/StdLib/LibC/CRT/Ia32/llmul.c b/StdLib/LibC/CRT/Ia32/llmul.c
deleted file mode 100644
index 214134cc03..0000000000
--- a/StdLib/LibC/CRT/Ia32/llmul.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/** @file
- 64-bit Math Worker Function.
- The 32-bit versions of C compiler generate calls to library routines
- to handle 64-bit math. These functions use non-standard calling conventions.
-
- Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <Library/BaseLib.h>
-
-/*
- * Multiplies a 64-bit signed or unsigned value by a 64-bit signed or unsigned value
- * and returns a 64-bit result.
- */
-__declspec(naked) void __cdecl _allmul (void)
-{
- //
- // Wrapper Implementation over EDKII MultS64x64() routine
- // INT64
- // EFIAPI
- // MultS64x64 (
- // IN INT64 Multiplicand,
- // IN INT64 Multiplier
- // )
- //
- _asm {
- ; Original local stack when calling _allmul
- ; -----------------
- ; | |
- ; |---------------|
- ; | |
- ; |--Multiplier --|
- ; | |
- ; |---------------|
- ; | |
- ; |--Multiplicand-|
- ; | |
- ; |---------------|
- ; | ReturnAddr** |
- ; ESP---->|---------------|
- ;
-
- ;
- ; Set up the local stack for Multiplicand parameter
- ;
- mov eax, [esp + 16]
- push eax
- mov eax, [esp + 16]
- push eax
-
- ;
- ; Set up the local stack for Multiplier parameter
- ;
- mov eax, [esp + 16]
- push eax
- mov eax, [esp + 16]
- push eax
-
- ;
- ; Call native MulS64x64 of BaseLib
- ;
- call MultS64x64
-
- ;
- ; Adjust stack
- ;
- add esp, 16
-
- ret 16
- }
-}
diff --git a/StdLib/LibC/CRT/Ia32/llrem.c b/StdLib/LibC/CRT/Ia32/llrem.c
deleted file mode 100644
index a92c300a40..0000000000
--- a/StdLib/LibC/CRT/Ia32/llrem.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/** @file
- 64-bit Math Worker Function.
- The 32-bit versions of C compiler generate calls to library routines
- to handle 64-bit math. These functions use non-standard calling conventions.
-
- Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <Library/BaseLib.h>
-
-
-/*
- * Divides a 64-bit signed value by another 64-bit signed value and returns
- * the 64-bit signed remainder.
- */
-__declspec(naked) void __cdecl _allrem(void)
-{
- //
- // Wrapper Implementation over EDKII DivS64x64Remainder() routine
- // UINT64
- // EFIAPI
- // DivS64x64Remainder (
- // IN UINT64 Dividend,
- // IN UINT64 Divisor,
- // OUT UINT64 *Remainder
- // )
- //
- _asm {
- ; Original local stack when calling _allrem
- ; -----------------
- ; | |
- ; |---------------|
- ; | |
- ; |-- Divisor --|
- ; | |
- ; |---------------|
- ; | |
- ; |-- Dividend --|
- ; | |
- ; |---------------|
- ; | ReturnAddr** |
- ; ESP---->|---------------|
- ;
-
- ;
- ; Set up the local stack for Reminder pointer
- ;
- sub esp, 8
- push esp
-
- ;
- ; Set up the local stack for Divisor parameter
- ;
- mov eax, [esp + 28]
- push eax
- mov eax, [esp + 28]
- push eax
-
- ;
- ; Set up the local stack for Dividend parameter
- ;
- mov eax, [esp + 28]
- push eax
- mov eax, [esp + 28]
- push eax
-
- ;
- ; Call native DivS64x64Remainder of BaseLib
- ;
- call DivS64x64Remainder
-
- ;
- ; Put the Reminder in EDX:EAX as return value
- ;
- mov eax, [esp + 20]
- mov edx, [esp + 24]
-
- ;
- ; Adjust stack
- ;
- add esp, 28
-
- ret 16
- }
-}
diff --git a/StdLib/LibC/CRT/Ia32/llshl.c b/StdLib/LibC/CRT/Ia32/llshl.c
deleted file mode 100644
index 835fd042e7..0000000000
--- a/StdLib/LibC/CRT/Ia32/llshl.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/** @file
- 64-bit Math Worker Function.
- The 32-bit versions of C compiler generate calls to library routines
- to handle 64-bit math. These functions use non-standard calling conventions.
-
- Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-
-/*
- * Shifts a 64-bit signed value left by a particular number of bits.
- */
-__declspec(naked) void __cdecl _allshl (void)
-{
- _asm {
- ;
- ; Handle shifting of 64 or more bits (return 0)
- ;
- cmp cl, 64
- jae short ReturnZero
-
- ;
- ; Handle shifting of between 0 and 31 bits
- ;
- cmp cl, 32
- jae short More32
- shld edx, eax, cl
- shl eax, cl
- ret
-
- ;
- ; Handle shifting of between 32 and 63 bits
- ;
-More32:
- mov edx, eax
- xor eax, eax
- and cl, 31
- shl edx, cl
- ret
-
-ReturnZero:
- xor eax,eax
- xor edx,edx
- ret
- }
-}
diff --git a/StdLib/LibC/CRT/Ia32/llshr.c b/StdLib/LibC/CRT/Ia32/llshr.c
deleted file mode 100644
index 38770ac43f..0000000000
--- a/StdLib/LibC/CRT/Ia32/llshr.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/** @file
- 64-bit Math Worker Function.
- The 32-bit versions of C compiler generate calls to library routines
- to handle 64-bit math. These functions use non-standard calling conventions.
-
- Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-
-/*
- * Shifts a 64-bit signed value right by a particular number of bits.
- */
-__declspec(naked) void __cdecl _allshr (void)
-{
- _asm {
- ;
- ; Handle shifts of 64 bits or more (if shifting 64 bits or more, the result
- ; depends only on the high order bit of edx).
- ;
- cmp cl,64
- jae short SIGNRETURN
-
- ;
- ; Handle shifts of between 0 and 31 bits
- ;
- cmp cl, 32
- jae short MORE32
- shrd eax,edx,cl
- sar edx,cl
- ret
-
- ;
- ; Handle shifts of between 32 and 63 bits
- ;
-MORE32:
- mov eax,edx
- sar edx,31
- and cl,31
- sar eax,cl
- ret
-
- ;
- ; Return double precision 0 or -1, depending on the sign of edx
- ;
-SIGNRETURN:
- sar edx,31
- mov eax,edx
- ret
- }
-}
diff --git a/StdLib/LibC/CRT/Ia32/mulll.S b/StdLib/LibC/CRT/Ia32/mulll.S
deleted file mode 100644
index 333fdfbb9f..0000000000
--- a/StdLib/LibC/CRT/Ia32/mulll.S
+++ /dev/null
@@ -1,77 +0,0 @@
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
-# This program and the accompanying materials are licensed and made available
-# under the terms and conditions of the BSD License which accompanies this
-# distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# MathMultS64x64.S
-#
-# Abstract:
-#
-# 64-bit Math Worker Function.
-# Multiplies a 64-bit signed or unsigned value by a 64-bit signed or unsigned value
-# and returns a 64-bit result
-#
-#------------------------------------------------------------------------------
-
- .686:
- .code:
-
-ASM_GLOBAL ASM_PFX(_mulll), ASM_PFX(MultS64x64)
-
-#------------------------------------------------------------------------------
-#
-# void __cdecl __mulll (void)
-#
-#------------------------------------------------------------------------------
-ASM_PFX(__mulll):
- # Original local stack when calling __mulll
- # -----------------
- # | |
- # |---------------|
- # | |
- # |--Multiplier --|
- # | |
- # |---------------|
- # | |
- # |--Multiplicand-|
- # | |
- # |---------------|
- # | ReturnAddr** |
- # ESP---->|---------------|
- #
-
- #
- # Set up the local stack for Multiplicand parameter
- #
- movl 16(%esp), %eax
- push %eax
- movl 16(%esp), %eax
- push %eax
-
- #
- # Set up the local stack for Multiplier parameter
- #
- movl 16(%esp), %eax
- push %eax
- movl 16(%esp), %eax
- push %eax
-
- #
- # Call native MulS64x64 of BaseLib
- #
- jmp ASM_PFX(MultS64x64)
-
- #
- # Adjust stack
- #
- add $16, %esp
-
- ret $16
diff --git a/StdLib/LibC/CRT/Ia32/shldi3.S b/StdLib/LibC/CRT/Ia32/shldi3.S
deleted file mode 100644
index b2a03d9833..0000000000
--- a/StdLib/LibC/CRT/Ia32/shldi3.S
+++ /dev/null
@@ -1,62 +0,0 @@
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
-# This program and the accompanying materials are licensed and made available
-# under the terms and conditions of the BSD License which accompanies this
-# distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# MathLShiftS64.S
-#
-# Abstract:
-#
-# 64-bit Math Worker Function.
-# Shifts a 64-bit signed value left by a certain number of bits.
-#
-#------------------------------------------------------------------------------
-
- .686:
- .code:
-
-ASM_GLOBAL ASM_PFX(__ashldi3)
-
-#------------------------------------------------------------------------------
-#
-# void __cdecl __ashldi3 (void)
-#
-#------------------------------------------------------------------------------
-ASM_PFX(__ashldi3):
- #
- # Handle shifting of 64 or more bits (return 0)
- #
- cmpb $64, %cl
- jae ReturnZero
-
- #
- # Handle shifting of between 0 and 31 bits
- #
- cmpb $32, %cl
- jae More32
- shld %cl, %eax, %edx
- shl %cl, %eax
- ret
-
- #
- # Handle shifting of between 32 and 63 bits
- #
-More32:
- movl %eax, %edx
- xor %eax, %eax
- and $31, %cl
- shl %cl, %edx
- ret
-
-ReturnZero:
- xor %eax, %eax
- xor %edx, %edx
- ret
diff --git a/StdLib/LibC/CRT/Ia32/udivdi3.S b/StdLib/LibC/CRT/Ia32/udivdi3.S
deleted file mode 100644
index 336d75ee7c..0000000000
--- a/StdLib/LibC/CRT/Ia32/udivdi3.S
+++ /dev/null
@@ -1,83 +0,0 @@
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
-# This program and the accompanying materials are licensed and made available
-# under the terms and conditions of the BSD License which accompanies this
-# distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# MathDivU64x64.S
-#
-# Abstract:
-#
-# 64-bit Math Worker Function.
-# Divides a 64-bit unsigned value with a 64-bit unsigned value and returns
-# a 64-bit unsigned result.
-#
-#------------------------------------------------------------------------------
-
- .686:
- .code:
-
-ASM_GLOBAL ASM_PFX(__udivdi3), ASM_PFX(DivU64x64Remainder)
-
-#------------------------------------------------------------------------------
-#
-# void __cdecl __udivdi3 (void)
-#
-#------------------------------------------------------------------------------
-ASM_PFX(__udivdi3):
- # Original local stack when calling __udivdi3
- # -----------------
- # | |
- # |---------------|
- # | |
- # |-- Divisor --|
- # | |
- # |---------------|
- # | |
- # |-- Dividend --|
- # | |
- # |---------------|
- # | ReturnAddr** |
- # ESP---->|---------------|
- #
-
- #
- # Set up the local stack for NULL Reminder pointer
- #
- xorl %eax, %eax
- push %eax
-
- #
- # Set up the local stack for Divisor parameter
- #
- movl 20(%esp), %eax
- push %eax
- movl 20(%esp), %eax
- push %eax
-
- #
- # Set up the local stack for Dividend parameter
- #
- movl 20(%esp), %eax
- push %eax
- movl 20(%esp), %eax
- push %eax
-
- #
- # Call native DivU64x64Remainder of BaseLib
- #
- jmp ASM_PFX(DivU64x64Remainder)
-
- #
- # Adjust stack
- #
- addl $20, %esp
-
- ret $16
diff --git a/StdLib/LibC/CRT/Ia32/ulldiv.c b/StdLib/LibC/CRT/Ia32/ulldiv.c
deleted file mode 100644
index e8d6efb6d8..0000000000
--- a/StdLib/LibC/CRT/Ia32/ulldiv.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/** @file
- 64-bit Math Worker Function.
- The 32-bit versions of C compiler generate calls to library routines
- to handle 64-bit math. These functions use non-standard calling conventions.
-
- Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <Library/BaseLib.h>
-
-
-/*
- * Divides a 64-bit unsigned value with a 64-bit unsigned value and returns
- * a 64-bit unsigned result.
- */
-__declspec(naked) void __cdecl _aulldiv (void)
-{
- //
- // Wrapper Implementation over EDKII DivU64x64Reminder() routine
- // UINT64
- // EFIAPI
- // DivU64x64Remainder (
- // IN UINT64 Dividend,
- // IN UINT64 Divisor,
- // OUT UINT64 *Remainder OPTIONAL
- // )
- //
- _asm {
-
- ; Original local stack when calling _aulldiv
- ; -----------------
- ; | |
- ; |---------------|
- ; | |
- ; |-- Divisor --|
- ; | |
- ; |---------------|
- ; | |
- ; |-- Dividend --|
- ; | |
- ; |---------------|
- ; | ReturnAddr** |
- ; ESP---->|---------------|
- ;
-
- ;
- ; Set up the local stack for NULL Reminder pointer
- ;
- xor eax, eax
- push eax
-
- ;
- ; Set up the local stack for Divisor parameter
- ;
- mov eax, [esp + 20]
- push eax
- mov eax, [esp + 20]
- push eax
-
- ;
- ; Set up the local stack for Dividend parameter
- ;
- mov eax, [esp + 20]
- push eax
- mov eax, [esp + 20]
- push eax
-
- ;
- ; Call native DivU64x64Remainder of BaseLib
- ;
- call DivU64x64Remainder
-
- ;
- ; Adjust stack
- ;
- add esp, 20
-
- ret 16
- }
-}
diff --git a/StdLib/LibC/CRT/Ia32/ulldvrm.c b/StdLib/LibC/CRT/Ia32/ulldvrm.c
deleted file mode 100644
index 2df587e1a4..0000000000
--- a/StdLib/LibC/CRT/Ia32/ulldvrm.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/** @file
- 64-bit Math Worker Function.
- The 32-bit versions of C compiler generate calls to library routines
- to handle 64-bit math. These functions use non-standard calling conventions.
-
- Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <Library/BaseLib.h>
-
-
-/*
- * Divides a 64-bit signed value by another 64-bit signed value and returns
- * the 64-bit signed result and the 64-bit signed remainder.
- */
-__declspec(naked) void __cdecl _aulldvrm(void)
-{
- //
- // Wrapper Implementation over EDKII DivU64x64Remainder() routine
- // UINT64
- // EFIAPI
- // DivU64x64Remainder (
- // IN UINT64 Dividend,
- // IN UINT64 Divisor,
- // OUT UINT64 *Remainder
- // )
- //
- _asm {
- ; Original local stack when calling _aulldvrm
- ; -----------------
- ; | |
- ; |---------------|
- ; | |
- ; |-- Divisor --|
- ; | |
- ; |---------------|
- ; | |
- ; |-- Dividend --|
- ; | |
- ; |---------------|
- ; | ReturnAddr** |
- ; ESP---->|---------------|
- ;
- ;
- ; On Exit:
- ; EDX:EAX contains the quotient (dividend/divisor)
- ; EBX:ECX contains the remainder (divided % divisor)
- ; NOTE: this routine removes the parameters from the stack.
- ;
-
- ;
- ; Set up the local stack for Remainder pointer
- ;
- sub esp, 8
- push esp
-
- ;
- ; Set up the local stack for Divisor parameter
- ;
- mov eax, [esp + 28]
- push eax
- mov eax, [esp + 28]
- push eax
-
- ;
- ; Set up the local stack for Dividend parameter
- ;
- mov eax, [esp + 28]
- push eax
- mov eax, [esp + 28]
- push eax
-
- ;
- ; Call native DivU64x64Remainder of BaseLib
- ;
- call DivU64x64Remainder
-
- ;
- ; EDX:EAX contains the quotient (dividend/divisor)
- ; Put the Remainder in EBX:ECX
- ;
- mov ecx, [esp + 20]
- mov ebx, [esp + 24]
-
- ;
- ; Adjust stack
- ;
- add esp, 28
-
- ret 16
- }
-}
diff --git a/StdLib/LibC/CRT/Ia32/ullrem.c b/StdLib/LibC/CRT/Ia32/ullrem.c
deleted file mode 100644
index 2e25c6c4e3..0000000000
--- a/StdLib/LibC/CRT/Ia32/ullrem.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/** @file
- 64-bit Math Worker Function.
- The 32-bit versions of C compiler generate calls to library routines
- to handle 64-bit math. These functions use non-standard calling conventions.
-
- Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <Library/BaseLib.h>
-
-
-/*
- * Divides a 64-bit unsigned value by another 64-bit unsigned value and returns
- * the 64-bit unsigned remainder.
- */
-__declspec(naked) void __cdecl _aullrem(void)
-{
- //
- // Wrapper Implementation over EDKII DivU64x64Remainder() routine
- // UINT64
- // EFIAPI
- // DivU64x64Remainder (
- // IN UINT64 Dividend,
- // IN UINT64 Divisor,
- // OUT UINT64 *Remainder OPTIONAL
- // )
- //
- _asm {
- ; Original local stack when calling _aullrem
- ; -----------------
- ; | |
- ; |---------------|
- ; | |
- ; |-- Divisor --|
- ; | |
- ; |---------------|
- ; | |
- ; |-- Dividend --|
- ; | |
- ; |---------------|
- ; | ReturnAddr** |
- ; ESP---->|---------------|
- ;
-
- ;
- ; Set up the local stack for Reminder pointer
- ;
- sub esp, 8
- push esp
-
- ;
- ; Set up the local stack for Divisor parameter
- ;
- mov eax, [esp + 28]
- push eax
- mov eax, [esp + 28]
- push eax
-
- ;
- ; Set up the local stack for Dividend parameter
- ;
- mov eax, [esp + 28]
- push eax
- mov eax, [esp + 28]
- push eax
-
- ;
- ; Call native DivU64x64Remainder of BaseLib
- ;
- call DivU64x64Remainder
-
- ;
- ; Put the Reminder in EDX:EAX as return value
- ;
- mov eax, [esp + 20]
- mov edx, [esp + 24]
-
- ;
- ; Adjust stack
- ;
- add esp, 28
-
- ret 16
- }
-}
diff --git a/StdLib/LibC/CRT/Ia32/ullshr.c b/StdLib/LibC/CRT/Ia32/ullshr.c
deleted file mode 100644
index f08adcb03e..0000000000
--- a/StdLib/LibC/CRT/Ia32/ullshr.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/** @file
- 64-bit Math Worker Function.
- The 32-bit versions of C compiler generate calls to library routines
- to handle 64-bit math. These functions use non-standard calling conventions.
-
- Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-
-/*
- * Shifts a 64-bit unsigned value right by a certain number of bits.
- */
-__declspec(naked) void __cdecl _aullshr (void)
-{
- _asm {
- ;
- ; Checking: Only handle 64bit shifting or more
- ;
- cmp cl, 64
- jae _Exit
-
- ;
- ; Handle shifting between 0 and 31 bits
- ;
- cmp cl, 32
- jae More32
- shrd eax, edx, cl
- shr edx, cl
- ret
-
- ;
- ; Handle shifting of 32-63 bits
- ;
-More32:
- mov eax, edx
- xor edx, edx
- and cl, 31
- shr eax, cl
- ret
-
- ;
- ; Invalid number (less then 32bits), return 0
- ;
-_Exit:
- xor eax, eax
- xor edx, edx
- ret
- }
-}
diff --git a/StdLib/LibC/CRT/Ia32/umoddi3.S b/StdLib/LibC/CRT/Ia32/umoddi3.S
deleted file mode 100644
index 9b72e918a4..0000000000
--- a/StdLib/LibC/CRT/Ia32/umoddi3.S
+++ /dev/null
@@ -1,89 +0,0 @@
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
-# This program and the accompanying materials are licensed and made available
-# under the terms and conditions of the BSD License which accompanies this
-# distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# MathReminderU64x64.S
-#
-# Abstract:
-#
-# 64-bit Math Worker Function.
-# Divides a 64-bit unsigned value by another 64-bit unsigned value and returns
-# the 64-bit unsigned remainder
-#
-#------------------------------------------------------------------------------
-
- .686:
- .code:
-
-ASM_GLOBAL ASM_PFX(__umoddi3), ASM_PFX(DivU64x64Remainder)
-
-#------------------------------------------------------------------------------
-#
-# void __cdecl __umoddi3 (void)
-#
-#------------------------------------------------------------------------------
-ASM_PFX(__umoddi3):
- # Original local stack when calling __umoddi3
- # -----------------
- # | |
- # |---------------|
- # | |
- # |-- Divisor --|
- # | |
- # |---------------|
- # | |
- # |-- Dividend --|
- # | |
- # |---------------|
- # | ReturnAddr** |
- # ESP---->|---------------|
- #
-
- #
- # Set up the local stack for Reminder pointer
- #
- sub $8, %esp
- push %esp
-
- #
- # Set up the local stack for Divisor parameter
- #
- movl 28(%esp), %eax
- push %eax
- movl 28(%esp), %eax
- push %eax
-
- #
- # Set up the local stack for Dividend parameter
- #
- movl 28(%esp), %eax
- push %eax
- movl 28(%esp), %eax
- push %eax
-
- #
- # Call native DivU64x64Remainder of BaseLib
- #
- jmp ASM_PFX(DivU64x64Remainder)
-
- #
- # Put the Reminder in EDX:EAX as return value
- #
- movl 20(%esp), %eax
- movl 24(%esp), %edx
-
- #
- # Adjust stack
- #
- add $28, %esp
-
- ret $16
diff --git a/StdLib/LibC/Containers/Common/ModuloUtil.c b/StdLib/LibC/Containers/Common/ModuloUtil.c
deleted file mode 100644
index 5f75698bd6..0000000000
--- a/StdLib/LibC/Containers/Common/ModuloUtil.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/** @file
- Utility functions for performing basic math operations constrained within a
- modulus.
-
- These functions are intended to simplify small changes to a value which much
- remain within a specified modulus.
-
- NOTE: Changes must be less than or equal to the modulus specified by MaxVal.
-
- Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <LibConfig.h>
-#include <assert.h>
-
-/** Counter = (Counter + 1) % MaxVal;
-
- Counter is always expected to be LESS THAN MaxVal.
- 0 <= Counter < MaxVal
-
- @param[in] Counter The value to be incremented.
- @param[in] MaxVal Modulus of the operation.
-
- @return Returns the result of incrementing Counter, modulus MaxVal.
- If Counter >= MaxVal, returns -1.
-**/
-INT32
-EFIAPI
-ModuloIncrement(
- UINT32 Counter,
- UINT32 MaxVal
- )
-{
- INT32 Temp;
-
- if(Counter < MaxVal) {
- Temp = (INT32)(Counter + 1);
- if(Temp >= (INT32)MaxVal) {
- Temp = 0;
- }
- }
- else {
- Temp = -1;
- }
- return Temp;
-}
-
-/** Counter = (Counter - 1) % MaxVal;
-
- Counter is always expected to be LESS THAN MaxVal.
- 0 <= Counter < MaxVal
-
- @param[in] Counter The value to be decremented.
- @param[in] MaxVal Modulus of the operation.
-
- @return Returns the result of decrementing Counter, modulus MaxVal.
- If Counter >= MaxVal, returns -1.
-**/
-INT32
-EFIAPI
-ModuloDecrement(
- UINT32 Counter,
- UINT32 MaxVal
- )
-{
- INT32 Temp;
-
- if(Counter < MaxVal) {
- Temp = (INT32)Counter - 1;
- // If Counter is zero, Temp will become -1.
- if(Temp < 0) {
- Temp = (INT32)MaxVal - 1;
- }
- }
- else {
- Temp = -1;
- }
-
- return Temp;
-}
-
-/** Decrement Counter but don't decrement past zero.
-
- @param[in] Counter The value to be decremented.
-
- @return Returns the result of decrementing Counter.
-**/
-UINT32
-EFIAPI
-BoundDecrement(
- UINT32 Counter
- )
-{
- return ((Counter > 0) ? (Counter - 1) : 0);
-}
-
-/** Increment Counter but don't increment past MaxVal.
- Counter should be maintained in the range (0 <= Counter < MaxVal).
-
- @param[in] Counter The value to be decremented.
- @param[in] MaxVal The upper bound for Counter.
-
- @return Returns the result of incrementing Counter.
-**/
-UINT32
-EFIAPI
-BoundIncrement(
- UINT32 Counter,
- UINT32 MaxVal
- )
-{
- return ((Counter < (MaxVal - 1)) ? (Counter + 1) : (MaxVal - 1));
-}
-
-/** Counter = (Counter + Increment) % MaxVal;
-
- @param[in] Counter The value to be incremented.
- @param[in] Increment The value to add to Counter.
- @param[in] MaxVal Modulus of the operation.
-
- @return Returns the result of adding Increment to Counter, modulus MaxVal,
- or -1 if Increment is larger than MaxVal.
-**/
-INT32
-EFIAPI
-ModuloAdd (
- UINT32 Counter,
- UINT32 Increment,
- UINT32 MaxVal
- )
-{
- UINT32 Temp;
-
- if(Increment > MaxVal) {
- return -1;
- }
- Temp = (Counter + Increment);
- while(Temp >= MaxVal) {
- Temp -= MaxVal;
- }
- return Temp;
-}
diff --git a/StdLib/LibC/Containers/ContainerLib.inf b/StdLib/LibC/Containers/ContainerLib.inf
deleted file mode 100644
index 4ca6690c4d..0000000000
--- a/StdLib/LibC/Containers/ContainerLib.inf
+++ /dev/null
@@ -1,46 +0,0 @@
-## @file
-# INF file for building the Container library.
-#
-# Various types of containers are implemented within this library.
-# Types of containers may be Queues (FIFO, LIFO, etc.), hash tables, etc.
-#
-# Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
-# This program and the accompanying materials are licensed and made available
-# under the terms and conditions of the BSD License which accompanies this
-# distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THIS PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LibContainer
- FILE_GUID = 92f7436e-7395-4da1-a7be-f352f0bcd79c
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibContainer
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64
-#
-
-[Sources]
- Queues/Fifo.c
- Common/ModuloUtil.c
-
-[LibraryClasses]
- BaseLib
- BaseMemoryLib
- MemoryAllocationLib
- LibC
- LibWchar
-
-[Packages]
- MdePkg/MdePkg.dec
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
diff --git a/StdLib/LibC/Containers/Queues/Fifo.c b/StdLib/LibC/Containers/Queues/Fifo.c
deleted file mode 100644
index 60def644e9..0000000000
--- a/StdLib/LibC/Containers/Queues/Fifo.c
+++ /dev/null
@@ -1,525 +0,0 @@
-/** @file
- Class for arbitrary sized FIFO queues.
-
- The FIFO is empty if both the Read and Write indexes are equal.
- The FIFO is full if the next write would make the Read and Write indexes equal.
-
- Member variable NumElements is the maximum number of elements that can be
- contained in the FIFO.
- If NumElements is ZERO, there is an error.
- NumElements should be in the range 1:N.
-
- Members WriteIndex and ReadIndex are indexes into the array implementing the
- FIFO. They should be in the range 0:(NumElements - 1).
-
- One element of the FIFO is always reserved as the "terminator" element. Thus,
- the capacity of a FIFO is actually NumElements-1.
-
- Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/MemoryAllocationLib.h>
-
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <wchar.h>
-#include <Containers/Fifo.h>
-
-/** Determine number of items available to read from the FIFO.
-
- The number of items are either the number of bytes, or the number of elements
- depending upon the value of the As enumerator.
-
- @param[in] Self Pointer to the FIFO instance.
- @param[in] As An enumeration variable whose value determines whether the
- returned value is the number of bytes or the number of elements
- currently contained by the FIFO.
-
- @retval 0 The FIFO is empty.
- @retval >=0 The number of items contained by the FIFO.
-**/
-static
-size_t
-EFIAPI
-FIFO_NumInQueue (
- cFIFO *Self,
- FIFO_ElemBytes As
-)
-{
- size_t Count;
-
- if(Self->ReadIndex <= Self->WriteIndex) {
- Count = Self->WriteIndex - Self->ReadIndex;
- }
- else {
- Count = Self->NumElements - (Self->ReadIndex - Self->WriteIndex);
- }
- if(As == AsBytes) {
- Count *= Self->ElementSize;
- }
- return Count;
-}
-
-/** Determine amount of free space in the FIFO that can be written into.
-
- The number of items are either the number of bytes, or the number of elements
- depending upon the value of the As enumerator.
-
- @param[in] Self Pointer to the FIFO instance.
- @param[in] As An enumeration variable whose value determines whether the
- returned value is the number of bytes or the number of elements
- currently available in the FIFO.
-
- @retval 0 The FIFO is full.
- @retval >=0 The number of items which can be accepted by the FIFO.
-**/
-static
-size_t
-EFIAPI
-FIFO_FreeSpace (
- cFIFO *Self,
- FIFO_ElemBytes As
-)
-{
- size_t Count;
- UINT32 RDex;
- UINT32 WDex;
-
- RDex = Self->ReadIndex;
- WDex = Self->WriteIndex;
-
- if(RDex <= WDex) {
- Count = (Self->NumElements - (WDex - RDex)) - 1;
- }
- else {
- Count = (RDex - WDex)-1;
- }
- if(As == AsBytes) {
- Count *= Self->ElementSize;
- }
- return Count;
-}
-
-/** Reduce the FIFO contents by NumElem elements.
-
- @param[in] Self Pointer to the FIFO instance.
- @param[in] NumElem Number of elements to delete from the FIFO.
-
- @retval 0 FIFO is now empty.
- @retval N>0 There are still N elements in the FIFO.
- @retval -1 There are fewer than NumElem elements in the FIFO.
-**/
-static
-ssize_t
-FIFO_Reduce (
- cFIFO *Self,
- size_t NumElem
- )
-{
- size_t QCount;
- ssize_t RetVal;
-
- assert(Self != NULL);
-
- QCount = FIFO_NumInQueue(Self, AsElements);
- if(NumElem > QCount) {
- RetVal = -1;
- errno = EINVAL;
- }
- else {
- RetVal = (ssize_t)ModuloAdd(Self->ReadIndex, (UINT32)NumElem, Self->NumElements);
- Self->ReadIndex = (UINT32)RetVal;
-
- RetVal = (ssize_t)(QCount - NumElem);
- }
- return RetVal;
-}
-
-/** Test whether the FIFO is empty.
-
- @param[in] Self Pointer to the FIFO instance.
-
- @retval TRUE The FIFO is empty.
- @retval FALSE There is data in the FIFO.
-**/
-static
-BOOLEAN
-EFIAPI
-FIFO_IsEmpty (
- cFIFO *Self
- )
-{
- assert(Self != NULL);
-
- return (BOOLEAN)(Self->WriteIndex == Self->ReadIndex);
-}
-
-/** Test whether the FIFO is full.
-
- @param[in] Self Pointer to the FIFO instance.
-
- @retval TRUE The FIFO is full.
- @retval FALSE There is free space in the FIFO.
-**/
-static
-BOOLEAN
-EFIAPI
-FIFO_IsFull (
- cFIFO *Self
- )
-{
- assert(Self != NULL);
-
- return (BOOLEAN)(ModuloIncrement(Self->WriteIndex, Self->NumElements) == (INT32)Self->ReadIndex);
-}
-
-/** Add one or more elements to the FIFO.
-
- This function allows one to add one or more elements, as specified by Count,
- to the FIFO. Each element is of the size specified when the FIFO object
- was instantiated (FIFO.ElementSize).
-
- pElement points to the first byte of the first element to be added.
- If multiple elements are to be added, the elements are expected to be
- organized as a packed array.
-
- @param[in] Self Pointer to the FIFO instance.
- @param[in] pElement Pointer to the element(s) to enqueue (add).
- @param[in] Count Number of elements to add.
-
- @retval 0 The FIFO is full.
- @retval >=0 The number of elements added to the FIFO.
-**/
-static
-size_t
-EFIAPI
-FIFO_Enqueue (
- cFIFO *Self,
- const void *pElement,
- size_t Count
- )
-{
- uintptr_t ElemPtr;
- uintptr_t QPtr;
- size_t i;
- UINT32 SizeOfElement;
- UINT32 Windex;
-
- assert(Self != NULL);
- assert(pElement != NULL);
-
- if(FIFO_IsFull(Self)) { // FIFO is full so can't add to it
- Count = 0; // Zero characters added
- }
- else { // Otherwise, FIFO is not full...
- Count = MIN(Count, Self->FreeSpace(Self, AsElements)); // Smaller of requested or available space
- SizeOfElement = Self->ElementSize; // Size of Elements, in bytes
- Windex = Self->WriteIndex; // Index of first writable slot in FIFO
-
- ElemPtr = (uintptr_t)pElement; // Addr. of element to add, as an integer
- QPtr = (uintptr_t)Self->Queue + (SizeOfElement * Windex); // Addr. in FIFO to write, as an integer
-
- for(i = 0; i < Count; ++i) { // For Count elements...
- (void)CopyMem((void *)QPtr, (const void *)ElemPtr, SizeOfElement); // Copy an element into the FIFO
- Windex = (UINT32)ModuloIncrement(Windex, Self->NumElements); // Increment the Write index, wrap if necessary
- if(Windex == 0) { // If the index wrapped
- QPtr = (uintptr_t)Self->Queue; // Go to the beginning
- }
- else {
- QPtr += SizeOfElement; // Otherwise, point to next in FIFO
- }
- ElemPtr += SizeOfElement; // And also point to next Element to add
- }
- Self->WriteIndex = Windex; // Finally, save the new Write Index
- }
- return Count; // Number of elements added to FIFO
-}
-
-/** Read or copy elements from the FIFO.
-
- This function allows one to read one or more elements, as specified by Count,
- from the FIFO. Each element is of the size specified when the FIFO object
- was instantiated (FIFO.ElementSize).
-
- pElement points to the destination of the first byte of the first element
- to be read. If multiple elements are to be read, the elements are expected
- to be organized as a packed array.
-
- @param[in] Self Pointer to the FIFO instance.
- @param[out] pElement Pointer to where to store the element(s) read from the FIFO.
- @param[in] Count Number of elements to dequeue.
- @param[in] Consume If TRUE, consume read elements. Otherwise, preserve.
-
- @retval 0 The FIFO is empty.
- @retval >=0 The number of elements read from the FIFO.
-**/
-static
-size_t
-EFIAPI
-FIFO_Dequeue (
- cFIFO *Self,
- void *pElement,
- size_t Count,
- BOOLEAN Consume
- )
-{
- UINTN QPtr;
- UINT32 RDex;
- UINT32 SizeOfElement;
- UINT32 i;
-
- assert(Self != NULL);
- assert(pElement != NULL);
-
- if(FIFO_IsEmpty(Self)) {
- Count = 0;
- }
- else {
- RDex = Self->ReadIndex; // Get this FIFO's Read Index
- SizeOfElement = Self->ElementSize; // Get size of this FIFO's elements
- Count = MIN(Count, Self->Count(Self, AsElements)); // Lesser of requested or actual
-
- QPtr = (UINTN)Self->Queue + (RDex * SizeOfElement); // Point to Read location in FIFO
- for(i = 0; i < Count; ++i) { // Iterate Count times...
- (void)CopyMem(pElement, (const void *)QPtr, SizeOfElement); // Copy element from FIFO to caller's buffer
- RDex = (UINT32)ModuloIncrement(RDex, Self->NumElements); // Increment Read Index
- if(RDex == 0) { // If the index wrapped
- QPtr = (UINTN)Self->Queue; // Point back to beginning of data
- }
- else { // Otherwise
- QPtr += SizeOfElement; // Point to the next element in FIFO
- }
- pElement = (char*)pElement + SizeOfElement; // Point to next element in caller's buffer
- } // Iterate: for loop
- if(Consume) { // If caller requests data consumption
- Self->ReadIndex = RDex; // Set FIFO's Read Index to new Index
- }
- }
- return Count; // Return number of elements actually read
-}
-
-/** Read elements from the FIFO.
-
- Read the specified number of elements from the FIFO, removing each element read.
- The number of elements actually read from the FIFO is returned. This number can differ
- from the Count requested if more elements are requested than are in the FIFO.
-
- @param[in] Self Pointer to the FIFO instance.
- @param[out] pElement Pointer to where to store the element read from the FIFO.
- @param[in] Count Number of elements to dequeue.
-
- @retval 0 The FIFO is empty.
- @retval >=0 The number of elements read from the FIFO.
-**/
-static
-size_t
-EFIAPI
-FIFO_Read (
- cFIFO *Self,
- void *pElement,
- size_t Count
- )
-{
- return FIFO_Dequeue(Self, pElement, Count, TRUE);
-}
-
-/** Make a copy of the FIFO's data.
- The contents of the FIFO is copied out and linearized without affecting the
- FIFO contents. This function is idempotent.
-
- @param[in] Self Pointer to the FIFO instance.
- @param[out] pElement Pointer to where to store the elements copied from the FIFO.
- @param[in] Count Number of elements to copy.
-
- @retval 0 The FIFO is empty.
- @retval >=0 The number of elements copied from the FIFO.
-**/
-static
-size_t
-EFIAPI
-FIFO_Copy (
- cFIFO *Self,
- void *pElement,
- size_t Count
- )
-{
- return FIFO_Dequeue(Self, pElement, Count, FALSE);
-}
-
-/** Get the FIFO's current Read Index.
-
- @param[in] Self Pointer to the FIFO instance.
-**/
-static
-UINT32
-EFIAPI
-FIFO_GetRDex (
- cFIFO *Self
-)
-{
- assert(Self != NULL);
-
- return Self->ReadIndex;
-}
-
-/** Get the FIFO's current Write Index.
-
- @param[in] Self Pointer to the FIFO instance.
-
- @return The current value of the FIFO's WriteIndex member is returned.
-**/
-static
-UINT32
-EFIAPI
-FIFO_GetWDex (
- cFIFO *Self
-)
-{
- assert(Self != NULL);
-
- return Self->WriteIndex;
-}
-
-/** Cleanly delete a FIFO instance.
-
- @param[in] Self Pointer to the FIFO instance.
-**/
-static
-void
-EFIAPI
-FIFO_Delete (
- cFIFO *Self
- )
-{
- assert(Self != NULL);
-
- if(Self->Queue != NULL) {
- FreePool(Self->Queue);
- Self->Queue = NULL; // Zombie catcher
- }
- FreePool(Self);
-}
-
-/** Empty the FIFO, discarding up to NumToFlush elements.
-
- @param[in] Self Pointer to the FIFO instance.
- @param[in] NumToFlush Number of elements to flush from the FIFO.
- If larger than the number of elements in the
- FIFO, the FIFO is emptied.
-
- @return Returns the number of elements remaining in the FIFO after the flush.
-**/
-static
-size_t
-EFIAPI
-FIFO_Flush (
- cFIFO *Self,
- size_t NumToFlush
- )
-{
- size_t NumInQ;
- size_t Remainder;
-
- assert(Self != NULL);
-
- NumInQ = FIFO_NumInQueue(Self, AsElements);
- if(NumToFlush >= NumInQ) {
- Self->ReadIndex = 0;
- Self->WriteIndex = 0;
- Remainder = 0;
- }
- else {
- Remainder = FIFO_Reduce(Self, NumToFlush);
- }
- return Remainder;
-}
-
-/** Remove the most recently added element from the FIFO.
-
- @param[in] Self Pointer to the FIFO instance.
-
- @return Returns the number of elements remaining in the FIFO.
-**/
-static
-size_t
-EFIAPI
-FIFO_Truncate (
- cFIFO *Self
- )
-{
- size_t Remainder;
-
- assert(Self != NULL);
-
- Remainder = FIFO_NumInQueue(Self, AsElements);
- if(Remainder > 0) {
- Self->WriteIndex = (UINT32)ModuloDecrement(Self->WriteIndex, Self->NumElements);
- --Remainder;
- }
- return Remainder;
-}
-
-/** Construct a new instance of a FIFO Queue.
-
- @param[in] NumElements Number of elements to be contained in the new FIFO.
- @param[in] ElementSize Size, in bytes, of an element.
-
- @retval NULL Unable to create the instance.
- @retval NonNULL Pointer to the new FIFO instance.
-**/
-cFIFO *
-EFIAPI
-New_cFIFO(
- UINT32 NumElements,
- size_t ElementSize
- )
-{
- cFIFO *FIFO;
- UINT8 *Queue;
-
- FIFO = NULL;
- if((NumElements > 2) && (ElementSize > 0)) {
- FIFO = (cFIFO *)AllocatePool(sizeof(cFIFO));
- if(FIFO != NULL) {
- Queue = (UINT8 *)AllocateZeroPool(NumElements * ElementSize);
- if(Queue != NULL) {
- FIFO->Write = FIFO_Enqueue;
- FIFO->Read = FIFO_Read;
- FIFO->Copy = FIFO_Copy;
- FIFO->IsEmpty = FIFO_IsEmpty;
- FIFO->IsFull = FIFO_IsFull;
- FIFO->Count = FIFO_NumInQueue;
- FIFO->FreeSpace = FIFO_FreeSpace;
- FIFO->Flush = FIFO_Flush;
- FIFO->Truncate = FIFO_Truncate;
- FIFO->Delete = FIFO_Delete;
- FIFO->GetRDex = FIFO_GetRDex;
- FIFO->GetWDex = FIFO_GetWDex;
-
- FIFO->Queue = Queue;
- FIFO->ElementSize = (UINT32)ElementSize;
- FIFO->NumElements = (UINT32)NumElements;
- FIFO->ReadIndex = 0;
- FIFO->WriteIndex = 0;
- }
- else {
- FreePool(FIFO);
- FIFO = NULL;
- }
- }
- }
- return FIFO;
-}
diff --git a/StdLib/LibC/Ctype/CClass.c b/StdLib/LibC/Ctype/CClass.c
deleted file mode 100644
index b9658441ae..0000000000
--- a/StdLib/LibC/Ctype/CClass.c
+++ /dev/null
@@ -1,271 +0,0 @@
-/** @file
- Character classification function implementations for <ctype.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <LibConfig.h>
-
-#define NO_CTYPE_MACROS // So that we don't define the classification macros
-#include <ctype.h>
-
-/** Internal worker function for character classification.
-
- Determines if a character is a member of a set of character classes.
-
- @param[in] _c The character to be tested.
- @param[in] mask A bitmapped specification of the character classes to
- test the character against. These bits are defined
- in _ctype.h.
-
- @retval 0 The character, _c, is NOT a member of the character classes specified by mask.
- @retval nonZero The character, _c, IS a member of a specified character class.
-**/
-int
-__isCClass(
- IN int _c,
- unsigned int mask
- )
-{
- return ((_c < 0 || _c > 127) ? 0 : (_cClass[_c] & mask));
-}
-
-/** The isalnum function tests for any character for which isalpha or isdigit
- is true.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int
-isalnum(
- IN int c
- )
-{
- return (__isCClass( c, (_CD | _CU | _CL | _XA)));
-}
-
-/** The isalpha function tests for any character for which isupper or islower
- is true, or any character that is one of a locale-specific set of
- alphabetic characters for which none of iscntrl, isdigit, ispunct, or
- isspace is true. In the "C" locale, isalpha returns true only for the
- characters for which isupper or islower is true.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int
-isalpha(
- IN int c
- )
-{
- return (__isCClass( c, (_CU | _CL | _XA)));
-}
-
-/** The iscntrl function tests for any control character.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int
-iscntrl(
- IN int c
- )
-{
- return (__isCClass( c, (_CC)));
-}
-
-/** The isdigit function tests for any decimal-digit character.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int
-isdigit(
- IN int c
- )
-{
- return (__isCClass( c, (_CD)));
-}
-
-/** The isgraph function tests for any printing character except space (' ').
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int
-isgraph(
- IN int c
- )
-{
- return (__isCClass( c, (_CG)));
-}
-
-/** The islower function tests for any character that is a lowercase letter or
- is one of a locale-specific set of characters for which none of iscntrl,
- isdigit, ispunct, or isspace is true. In the "C" locale, islower returns
- true only for the lowercase letters.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int
-islower(
- IN int c
- )
-{
- return (__isCClass( c, (_CL)));
-}
-
-/** The isprint function tests for any printing character including space (' ').
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int
-isprint(
- IN int c
- )
-{
- return (__isCClass( c, (_CS | _CG)));
-}
-
-/** The ispunct function tests for any printing character that is one of a
- locale-specific set of punctuation characters for which neither isspace nor
- isalnum is true. In the "C" locale, ispunct returns true for every printing
- character for which neither isspace nor isalnum is true.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int
-ispunct(
- IN int c
- )
-{
- return (__isCClass( c, (_CP)));
-}
-
-/** The isspace function tests for any character that is a standard white-space
- character or is one of a locale-specific set of characters for which
- isalnum is false. The standard white-space characters are the following:
- space (' '), form feed ('\f'), new-line ('\n'), carriage return ('\r'),
- horizontal tab ('\t'), and vertical tab ('\v'). In the "C" locale, isspace
- returns true only for the standard white-space characters.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int
-isspace(
- IN int c
- )
-{
- return (__isCClass( c, (_CW)));
-}
-
-/** The isupper function tests for any character that is an uppercase letter or
- is one of a locale-specific set of characters for which none of iscntrl,
- isdigit, ispunct, or isspace is true. In the "C" locale, isupper returns
- true only for the uppercase letters.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int
-isupper(
- IN int c
- )
-{
- return (__isCClass( c, (_CU)));
-}
-
-/** The isxdigit function tests for any hexadecimal-digit character.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int
-isxdigit(
- IN int c
- )
-{
- return (__isCClass( c, (_CD | _CX)));
-}
-
-/** The isblank function tests that a character is a white-space character that results
- in a number of space (' ') characters being sent to the output device. In the C locale
- this is either ' ' or '\t'.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int
-isblank(
- IN int c
- )
-{
- return (__isCClass( c, (_CB)));
-}
-
-/** The isascii function tests that a character is one of the 128 7-bit ASCII characters.
-
- @param[in] c The character to test.
-
- @return Returns nonzero (true) if c is a valid ASCII character. Otherwize,
- zero (false) is returned.
-**/
-int
-isascii(
- IN int c
- )
-{
- return ((c >= 0) && (c < 128));
-}
-
-/** Test whether a character is one of the characters used as a separator
- between directory elements in a path.
-
- Characters are '/', '\\'
-
- This non-standard function is unique to this implementation.
-
- @param[in] c The character to be tested.
-
- @return Returns nonzero (true) if and only if the value of the parameter c
- can be classified as specified in the description of the function.
-**/
-int
-isDirSep(int c)
-{
- return (__isCClass( c, (_C0)));
-}
diff --git a/StdLib/LibC/Ctype/CConv.c b/StdLib/LibC/Ctype/CConv.c
deleted file mode 100644
index f551c43325..0000000000
--- a/StdLib/LibC/Ctype/CConv.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/** @file
- Case conversion function implementations for <ctype.h>
-
- The tolower function converts an uppercase letter to a corresponding
- lowercase letter. If the argument is a character for which isupper
- is true and there are one or more corresponding characters, as
- specified by the current locale, for which islower is true, the tolower
- function returns one of the corresponding characters (always the same one
- for any given locale); otherwise, the argument is returned unchanged.
-
- The toupper function converts a lowercase letter to a corresponding
- uppercase letter. If the argument is a character for which islower is true
- and there are one or more corresponding characters, as specified by the
- current locale, for which isupper is true, the toupper function returns one
- of the corresponding characters (always the same one for any given locale);
- otherwise, the argument is returned unchanged.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <LibConfig.h>
-
-#define NO_CTYPE_MACROS // So that we don't define the classification macros
-#include <ctype.h>
-
-/** The tolower function converts an uppercase letter to a corresponding
- lowercase letter.
-
- @param[in] c The character to be converted.
-
- @return If the argument is a character for which isupper is true and
- there are one or more corresponding characters, as specified by
- the current locale, for which islower is true, the tolower
- function returns one of the corresponding characters (always the
- same one for any given locale); otherwise, the argument is
- returned unchanged.
-**/
-int
-tolower(
- IN int _c
- )
-{
- return (isupper(_c) ? _lConvT[_c] : _c);
-}
-
-/** The toupper function converts a lowercase letter to a corresponding
- uppercase letter.
-
- @param[in] c The character to be converted.
-
- @return If the argument is a character for which islower is true and
- there are one or more corresponding characters, as specified by
- the current locale, for which isupper is true, the toupper
- function returns one of the corresponding characters (always the
- same one for any given locale); otherwise, the argument is
- returned unchanged.
-**/
-int
-toupper(
- IN int _c
- )
-{
- return (islower(_c) ? _uConvT[_c] : _c);
-}
diff --git a/StdLib/LibC/Ctype/Ctype.inf b/StdLib/LibC/Ctype/Ctype.inf
deleted file mode 100644
index e767885326..0000000000
--- a/StdLib/LibC/Ctype/Ctype.inf
+++ /dev/null
@@ -1,50 +0,0 @@
-## @file
-#
-# Character Classification library implementing the functionality described
-# by the <ctype.h> header of the C Standard Library, ISO/IEC 9899:1990 with
-# Amendment 1 (C95).
-#
-# Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-# This program and the accompanying materials are licensed and made available
-# under the terms and conditions of the BSD License which accompanies this
-# distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THIS PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LibCtype
- FILE_GUID = dcc64575-fa7d-4b7b-b1ad-48427c97c74d
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibCtype
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- iCtype.c
- CClass.c
- CConv.c
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
-
-################################################################
-#
-# The Build Options, below, are only used when building the C library.
-# DO NOT use them when building your application!
-# Nasty things could happen if you do.
-#
-[BuildOptions]
- MSFT:*_*_*_CC_FLAGS = /GL-
diff --git a/StdLib/LibC/Ctype/iCtype.c b/StdLib/LibC/Ctype/iCtype.c
deleted file mode 100644
index b40a65d1ff..0000000000
--- a/StdLib/LibC/Ctype/iCtype.c
+++ /dev/null
@@ -1,308 +0,0 @@
-/** @file
- Character classification and case conversion tables, and functions,
- for the C Standard Library as required to implement ctype.h.
-
- These are the default, C locale, tables.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <LibConfig.h>
-#include <ctype.h>
-
-/// ASCII-7 Character Classification Table
-const UINT16 _C_CharClassTable[128] = {
- /* 00 NUL */ ( _CC ),
- /* 01 SOH */ ( _CC ),
- /* 02 STX */ ( _CC ),
- /* 03 ETX */ ( _CC ),
- /* 04 EOT */ ( _CC ),
- /* 05 ENQ */ ( _CC ),
- /* 06 ACK */ ( _CC ),
- /* 07 BEL */ ( _CC ),
- /* 08 BS */ ( _CC ),
- /* 09 TAB */ ( _CC | _CW | _CB ),
- /* 0A LF */ ( _CC | _CW ),
- /* 0B VT */ ( _CC | _CW ),
- /* 0C FF */ ( _CC | _CW ),
- /* 0D CR */ ( _CC | _CW ),
- /* 0E SO */ ( _CC ),
- /* 0F SI */ ( _CC ),
- /* 10 DLE */ ( _CC ),
- /* 11 DC1 */ ( _CC ),
- /* 12 DC2 */ ( _CC ),
- /* 13 DC3 */ ( _CC ),
- /* 14 DC4 */ ( _CC ),
- /* 15 NAK */ ( _CC ),
- /* 16 SYN */ ( _CC ),
- /* 17 ETB */ ( _CC ),
- /* 18 CAN */ ( _CC ),
- /* 19 EM */ ( _CC ),
- /* 1A SUB */ ( _CC ),
- /* 1B ESC */ ( _CC ),
- /* 1C FS */ ( _CC ),
- /* 1D GS */ ( _CC ),
- /* 1E RS */ ( _CC ),
- /* 1F US */ ( _CC ),
- /* 20 ' ' */ ( _CW | _CS | _CB ),
- /* 21 '!' */ ( _CP | _CG ),
- /* 22 '"' */ ( _CP | _CG ),
- /* 23 '#' */ ( _CP | _CG ),
- /* 24 '$' */ ( _CP | _CG ),
- /* 25 '%' */ ( _CP | _CG ),
- /* 26 '&' */ ( _CP | _CG ),
- /* 27 '\''*/ ( _CP | _CG | _C0 ),
- /* 28 '(' */ ( _CP | _CG ),
- /* 29 ')' */ ( _CP | _CG ),
- /* 2A '*' */ ( _CP | _CG ),
- /* 2B '+' */ ( _CP | _CG ),
- /* 2C ',' */ ( _CP | _CG ),
- /* 2D '-' */ ( _CP | _CG ),
- /* 2E '.' */ ( _CP | _CG ),
- /* 2F '/' */ ( _CP | _CG | _C0 ),
- /* 30 '0' */ ( _CD | _CG ),
- /* 31 '1' */ ( _CD | _CG ),
- /* 32 '2' */ ( _CD | _CG ),
- /* 33 '3' */ ( _CD | _CG ),
- /* 34 '4' */ ( _CD | _CG ),
- /* 35 '5' */ ( _CD | _CG ),
- /* 36 '6' */ ( _CD | _CG ),
- /* 37 '7' */ ( _CD | _CG ),
- /* 38 '8' */ ( _CD | _CG ),
- /* 39 '9' */ ( _CD | _CG ),
- /* 3A ':' */ ( _CP | _CG ),
- /* 3B ';' */ ( _CP | _CG ),
- /* 3C '<' */ ( _CP | _CG ),
- /* 3D '=' */ ( _CP | _CG ),
- /* 3E '>' */ ( _CP | _CG ),
- /* 3F '?' */ ( _CP | _CG ),
- /* 40 '@' */ ( _CP | _CG ),
- /* 41 'A' */ ( _CU | _CX | _CG ),
- /* 42 'B' */ ( _CU | _CX | _CG ),
- /* 43 'C' */ ( _CU | _CX | _CG ),
- /* 44 'D' */ ( _CU | _CX | _CG ),
- /* 45 'E' */ ( _CU | _CX | _CG ),
- /* 46 'F' */ ( _CU | _CX | _CG ),
- /* 47 'G' */ ( _CU | _CG ),
- /* 48 'H' */ ( _CU | _CG ),
- /* 49 'I' */ ( _CU | _CG ),
- /* 4A 'J' */ ( _CU | _CG ),
- /* 4B 'K' */ ( _CU | _CG ),
- /* 4C 'L' */ ( _CU | _CG ),
- /* 4D 'M' */ ( _CU | _CG ),
- /* 4E 'N' */ ( _CU | _CG ),
- /* 4F 'O' */ ( _CU | _CG ),
- /* 50 'P' */ ( _CU | _CG ),
- /* 51 'Q' */ ( _CU | _CG ),
- /* 52 'R' */ ( _CU | _CG ),
- /* 53 'S' */ ( _CU | _CG ),
- /* 54 'T' */ ( _CU | _CG ),
- /* 55 'U' */ ( _CU | _CG ),
- /* 56 'V' */ ( _CU | _CG ),
- /* 57 'W' */ ( _CU | _CG ),
- /* 58 'X' */ ( _CU | _CG ),
- /* 59 'Y' */ ( _CU | _CG ),
- /* 5A 'Z' */ ( _CU | _CG ),
- /* 5B '[' */ ( _CP | _CG ),
- /* 5C '\' */ ( _CP | _CG ),
- /* 5D ']' */ ( _CP | _CG ),
- /* 5E '^' */ ( _CP | _CG ),
- /* 5F '_' */ ( _CP | _CG ),
- /* 60 '`' */ ( _CP | _CG ),
- /* 61 'a' */ ( _CL | _CX | _CG ),
- /* 62 'b' */ ( _CL | _CX | _CG ),
- /* 63 'c' */ ( _CL | _CX | _CG ),
- /* 64 'd' */ ( _CL | _CX | _CG ),
- /* 65 'e' */ ( _CL | _CX | _CG ),
- /* 66 'f' */ ( _CL | _CX | _CG ),
- /* 67 'g' */ ( _CL | _CG ),
- /* 68 'h' */ ( _CL | _CG ),
- /* 69 'i' */ ( _CL | _CG ),
- /* 6A 'j' */ ( _CL | _CG ),
- /* 6B 'k' */ ( _CL | _CG ),
- /* 6C 'l' */ ( _CL | _CG ),
- /* 6D 'm' */ ( _CL | _CG ),
- /* 6E 'n' */ ( _CL | _CG ),
- /* 6F 'o' */ ( _CL | _CG ),
- /* 70 'p' */ ( _CL | _CG ),
- /* 71 'q' */ ( _CL | _CG ),
- /* 72 'r' */ ( _CL | _CG ),
- /* 73 's' */ ( _CL | _CG ),
- /* 74 't' */ ( _CL | _CG ),
- /* 75 'u' */ ( _CL | _CG ),
- /* 76 'v' */ ( _CL | _CG ),
- /* 77 'w' */ ( _CL | _CG ),
- /* 78 'x' */ ( _CL | _CG ),
- /* 79 'y' */ ( _CL | _CG ),
- /* 7A 'z' */ ( _CL | _CG ),
- /* 7B '{' */ ( _CP | _CG ),
- /* 7C '|' */ ( _CP | _CG ),
- /* 7D '}' */ ( _CP | _CG ),
- /* 7E '~' */ ( _CP | _CG ),
- /* 7F DEL */ ( _CC )
-};
-
-/// ASCII-7 Upper case to Lower case character conversion table
-const UINT8 _C_ToLowerTable[128] = {
- /* 00 NUL */ 0x00, /* 01 SOH */ 0x01,
- /* 02 STX */ 0x02, /* 03 ETX */ 0x03,
- /* 04 EOT */ 0x04, /* 05 ENQ */ 0x05,
- /* 06 ACK */ 0x06, /* 07 BEL */ 0x07,
- /* 08 BS */ 0x08, /* 09 TAB */ 0x09,
- /* 0A LF */ 0x0A, /* 0B VT */ 0x0B,
- /* 0C FF */ 0x0C, /* 0D CR */ 0x0D,
- /* 0E SO */ 0x0E, /* 0F SI */ 0x0F,
- /* 10 DLE */ 0x10, /* 11 DC1 */ 0x11,
- /* 12 DC2 */ 0x12, /* 13 DC3 */ 0x13,
- /* 14 DC4 */ 0x14, /* 15 NAK */ 0x15,
- /* 16 SYN */ 0x16, /* 17 ETB */ 0x17,
- /* 18 CAN */ 0x18, /* 19 EM */ 0x19,
- /* 1A SUB */ 0x1A, /* 1B ESC */ 0x1B,
- /* 1C FS */ 0x1C, /* 1D GS */ 0x1D,
- /* 1E RS */ 0x1E, /* 1F US */ 0x1F,
- /* 20 ' ' */ 0x20, /* 21 '!' */ 0x21,
- /* 22 '"' */ 0x22, /* 23 '#' */ 0x23,
- /* 24 '$' */ 0x24, /* 25 '%' */ 0x25,
- /* 26 '&' */ 0x26, /* 27 '\''*/ 0x27,
- /* 28 '(' */ 0x28, /* 29 ')' */ 0x29,
- /* 2A '*' */ 0x2A, /* 2B '+' */ 0x2B,
- /* 2C ',' */ 0x2C, /* 2D '-' */ 0x2D,
- /* 2E '.' */ 0x2E, /* 2F '/' */ 0x2F,
- /* 30 '0' */ 0x30, /* 31 '1' */ 0x31,
- /* 32 '2' */ 0x32, /* 33 '3' */ 0x33,
- /* 34 '4' */ 0x34, /* 35 '5' */ 0x35,
- /* 36 '6' */ 0x36, /* 37 '7' */ 0x37,
- /* 38 '8' */ 0x38, /* 39 '9' */ 0x39,
- /* 3A ':' */ 0x3A, /* 3B ';' */ 0x3B,
- /* 3C '<' */ 0x3C, /* 3D '=' */ 0x3D,
- /* 3E '>' */ 0x3E, /* 3F '?' */ 0x3F,
- /* 40 '@' */ 0x40, /* 41 'A' */ 0x61,
- /* 42 'B' */ 0x62, /* 43 'C' */ 0x63,
- /* 44 'D' */ 0x64, /* 45 'E' */ 0x65,
- /* 46 'F' */ 0x66, /* 47 'G' */ 0x67,
- /* 48 'H' */ 0x68, /* 49 'I' */ 0x69,
- /* 4A 'J' */ 0x6A, /* 4B 'K' */ 0x6B,
- /* 4C 'L' */ 0x6C, /* 4D 'M' */ 0x6D,
- /* 4E 'N' */ 0x6E, /* 4F 'O' */ 0x6F,
- /* 50 'P' */ 0x70, /* 51 'Q' */ 0x71,
- /* 52 'R' */ 0x72, /* 53 'S' */ 0x73,
- /* 54 'T' */ 0x74, /* 55 'U' */ 0x75,
- /* 56 'V' */ 0x76, /* 57 'W' */ 0x77,
- /* 58 'X' */ 0x78, /* 59 'Y' */ 0x79,
- /* 5A 'Z' */ 0x7A, /* 5B '[' */ 0x5B,
- /* 5C '\' */ 0x5C, /* 5D ']' */ 0x5D,
- /* 5E '^' */ 0x5E, /* 5F '_' */ 0x5F,
- /* 60 '`' */ 0x60, /* 61 'a' */ 0x61,
- /* 62 'b' */ 0x62, /* 63 'c' */ 0x63,
- /* 64 'd' */ 0x64, /* 65 'e' */ 0x65,
- /* 66 'f' */ 0x66, /* 67 'g' */ 0x67,
- /* 68 'h' */ 0x68, /* 69 'i' */ 0x69,
- /* 6A 'j' */ 0x6A, /* 6B 'k' */ 0x6B,
- /* 6C 'l' */ 0x6C, /* 6D 'm' */ 0x6D,
- /* 6E 'n' */ 0x6E, /* 6F 'o' */ 0x6F,
- /* 70 'p' */ 0x70, /* 71 'q' */ 0x71,
- /* 72 'r' */ 0x72, /* 73 's' */ 0x73,
- /* 74 't' */ 0x74, /* 75 'u' */ 0x75,
- /* 76 'v' */ 0x76, /* 77 'w' */ 0x77,
- /* 78 'x' */ 0x78, /* 79 'y' */ 0x79,
- /* 7A 'z' */ 0x7A, /* 7B '{' */ 0x7B,
- /* 7C '|' */ 0x7C, /* 7D '}' */ 0x7D,
- /* 7E '~' */ 0x7E, /* 7F DEL */ 0x7F
-};
-
-/// ASCII-7 Lower case to Upper case character conversion table
-const UINT8 _C_ToUpperTable[128] = {
- /* 00 NUL */ 0x00, /* 01 SOH */ 0x01,
- /* 02 STX */ 0x02, /* 03 ETX */ 0x03,
- /* 04 EOT */ 0x04, /* 05 ENQ */ 0x05,
- /* 06 ACK */ 0x06, /* 07 BEL */ 0x07,
- /* 08 BS */ 0x08, /* 09 TAB */ 0x09,
- /* 0A LF */ 0x0A, /* 0B VT */ 0x0B,
- /* 0C FF */ 0x0C, /* 0D CR */ 0x0D,
- /* 0E SO */ 0x0E, /* 0F SI */ 0x0F,
- /* 10 DLE */ 0x10, /* 11 DC1 */ 0x11,
- /* 12 DC2 */ 0x12, /* 13 DC3 */ 0x13,
- /* 14 DC4 */ 0x14, /* 15 NAK */ 0x15,
- /* 16 SYN */ 0x16, /* 17 ETB */ 0x17,
- /* 18 CAN */ 0x18, /* 19 EM */ 0x19,
- /* 1A SUB */ 0x1A, /* 1B ESC */ 0x1B,
- /* 1C FS */ 0x1C, /* 1D GS */ 0x1D,
- /* 1E RS */ 0x1E, /* 1F US */ 0x1F,
- /* 20 ' ' */ 0x20, /* 21 '!' */ 0x21,
- /* 22 '"' */ 0x22, /* 23 '#' */ 0x23,
- /* 24 '$' */ 0x24, /* 25 '%' */ 0x25,
- /* 26 '&' */ 0x26, /* 27 '\''*/ 0x27,
- /* 28 '(' */ 0x28, /* 29 ')' */ 0x29,
- /* 2A '*' */ 0x2A, /* 2B '+' */ 0x2B,
- /* 2C ',' */ 0x2C, /* 2D '-' */ 0x2D,
- /* 2E '.' */ 0x2E, /* 2F '/' */ 0x2F,
- /* 30 '0' */ 0x30, /* 31 '1' */ 0x31,
- /* 32 '2' */ 0x32, /* 33 '3' */ 0x33,
- /* 34 '4' */ 0x34, /* 35 '5' */ 0x35,
- /* 36 '6' */ 0x36, /* 37 '7' */ 0x37,
- /* 38 '8' */ 0x38, /* 39 '9' */ 0x39,
- /* 3A ':' */ 0x3A, /* 3B ';' */ 0x3B,
- /* 3C '<' */ 0x3C, /* 3D '=' */ 0x3D,
- /* 3E '>' */ 0x3E, /* 3F '?' */ 0x3F,
- /* 40 '@' */ 0x40, /* 41 'A' */ 0x41,
- /* 42 'B' */ 0x42, /* 43 'C' */ 0x43,
- /* 44 'D' */ 0x44, /* 45 'E' */ 0x45,
- /* 46 'F' */ 0x46, /* 47 'G' */ 0x47,
- /* 48 'H' */ 0x48, /* 49 'I' */ 0x49,
- /* 4A 'J' */ 0x4A, /* 4B 'K' */ 0x4B,
- /* 4C 'L' */ 0x4C, /* 4D 'M' */ 0x4D,
- /* 4E 'N' */ 0x4E, /* 4F 'O' */ 0x4F,
- /* 50 'P' */ 0x50, /* 51 'Q' */ 0x51,
- /* 52 'R' */ 0x52, /* 53 'S' */ 0x53,
- /* 54 'T' */ 0x54, /* 55 'U' */ 0x55,
- /* 56 'V' */ 0x56, /* 57 'W' */ 0x57,
- /* 58 'X' */ 0x58, /* 59 'Y' */ 0x59,
- /* 5A 'Z' */ 0x5A, /* 5B '[' */ 0x5B,
- /* 5C '\' */ 0x5C, /* 5D ']' */ 0x5D,
- /* 5E '^' */ 0x5E, /* 5F '_' */ 0x5F,
- /* 60 '`' */ 0x60, /* 61 'a' */ 0x41,
- /* 62 'b' */ 0x42, /* 63 'c' */ 0x43,
- /* 64 'd' */ 0x44, /* 65 'e' */ 0x45,
- /* 66 'f' */ 0x46, /* 67 'g' */ 0x47,
- /* 68 'h' */ 0x48, /* 69 'i' */ 0x49,
- /* 6A 'j' */ 0x4A, /* 6B 'k' */ 0x4B,
- /* 6C 'l' */ 0x4C, /* 6D 'm' */ 0x4D,
- /* 6E 'n' */ 0x4E, /* 6F 'o' */ 0x4F,
- /* 70 'p' */ 0x50, /* 71 'q' */ 0x51,
- /* 72 'r' */ 0x52, /* 73 's' */ 0x53,
- /* 74 't' */ 0x54, /* 75 'u' */ 0x55,
- /* 76 'v' */ 0x56, /* 77 'w' */ 0x57,
- /* 78 'x' */ 0x58, /* 79 'y' */ 0x59,
- /* 7A 'z' */ 0x5A, /* 7B '{' */ 0x7B,
- /* 7C '|' */ 0x7C, /* 7D '}' */ 0x7D,
- /* 7E '~' */ 0x7E, /* 7F DEL */ 0x7F
-};
-
-/// Default character classification table is 7-bit ASCII
-const UINT16 *_cClass = _C_CharClassTable;
-
-/// Default upper to lower conversion table is 7-bit ASCII
-const UINT8 *_lConvT = _C_ToLowerTable;
-
-/// Default lower to upper conversion table is 7-bit ASCII
-const UINT8 *_uConvT = _C_ToUpperTable;
-
-/** Sets the character classification and case conversion tables for the 'C' locale.
-
- A set of locale-independent pointers are used to point to the classification and
- conversion tables for the currently specified locale. This function is used to
- establish the tables for the 'C' locale.
-**/
-void
-__set_C_locale( void )
-{
- _cClass = _C_CharClassTable;
- _lConvT = _C_ToLowerTable;
- _uConvT = _C_ToUpperTable;
-}
diff --git a/StdLib/LibC/LibC.inf b/StdLib/LibC/LibC.inf
deleted file mode 100644
index f136306485..0000000000
--- a/StdLib/LibC/LibC.inf
+++ /dev/null
@@ -1,122 +0,0 @@
-## @file
-# Standard C library: Miscelaneous implementations.
-#
-# Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LibC
- FILE_GUID = 695bec93-82ae-4c17-bdad-7f184f4e651d
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibC
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- Main/errno.c
- Main/assert.c
- Main/isinfd_ieee754.c
- Main/isinff_ieee754.c
- Main/isnand_ieee754.c
- Main/isnanf_ieee754.c
- Main/infinityf_ieee754.c
- Main/Main.c
- Main/HtoNtoH.c
- Main/ByteSwap.c
- Main/longjmp.c
-
-[Sources.IA32]
- Main/x86flt_rounds.c
- Main/Ia32/fpu_rmode.asm | MSFT
- Main/Ia32/fpu_rmode.asm | INTEL
- Main/Ia32/fpu_rmode.S | GCC
- Main/Ia32/isinfl.c
- Main/Ia32/isnanl.c
-
- # Compiler helper (C RunTime) functions
- CRT/Ia32/llmul.c | MSFT # __allmul
- CRT/Ia32/llshl.c | MSFT # __allshl
- CRT/Ia32/llshr.c | MSFT # __allshr
- CRT/Ia32/ulldiv.c | MSFT # __aulldiv
- CRT/Ia32/ullrem.c | MSFT # __aullrem
- CRT/Ia32/ullshr.c | MSFT # __aullshr
- CRT/Ia32/lldiv.c | MSFT # __alldiv
- CRT/Ia32/llrem.c | MSFT # __allrem
- CRT/Ia32/lldvrm.c | MSFT # __alldvrm
- CRT/Ia32/ulldvrm.c | MSFT # __aulldvrm
-
- CRT/Ia32/llmul.c | INTEL
- CRT/Ia32/llshl.c | INTEL
- CRT/Ia32/llshr.c | INTEL
- CRT/Ia32/ulldiv.c | INTEL
- CRT/Ia32/ullrem.c | INTEL
- CRT/Ia32/ullshr.c | INTEL
- CRT/Ia32/lldiv.c | INTEL
- CRT/Ia32/llrem.c | INTEL
- CRT/Ia32/lldvrm.c | INTEL
- CRT/Ia32/ulldvrm.c | INTEL
-
- CRT/Gcc.c | GCC
-
-[Sources.X64]
- Main/x86flt_rounds.c
- Main/X64/fpu_rmode.asm | MSFT
- Main/X64/fpu_rmode.asm | INTEL
- Main/X64/fpu_rmode.S | GCC
- Main/X64/isinfl.c
- Main/X64/isnanl.c
-
-[Sources.IPF]
- Main/x86flt_rounds.c
- Main/Ipf/FpuRmode.s
-
-[Sources.ARM]
- Main/Arm/fixunsdfsi.c
- Main/Arm/floatunsidf.c
- Main/Arm/flt_rounds.c
-
-[Sources.AARCH64]
- Main/Arm/flt_rounds.c
-
-[Binaries.IA32]
- LIB|Main/Ia32/ftol2.obj|*|MSFT
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
- ShellPkg/ShellPkg.dec
-
-[LibraryClasses]
- ShellCEntryLib
- UefiLib
- BaseLib
- BaseMemoryLib
- MemoryAllocationLib
- LibStdLib
- LibStdio
- LibString
- DevConsole
-
-################################################################
-#
-# The Build Options, below, are only used when building the C library.
-# DO NOT use them when building your application!
-# Nasty things could happen if you do.
-#
-[BuildOptions]
- MSFT:*_*_IA32_CC_FLAGS = /GL-
diff --git a/StdLib/LibC/Locale/Locale.inf b/StdLib/LibC/Locale/Locale.inf
deleted file mode 100644
index e0f163cb13..0000000000
--- a/StdLib/LibC/Locale/Locale.inf
+++ /dev/null
@@ -1,64 +0,0 @@
-## @file
-# Standard C library: Locale implementation.
-#
-# Copyright (c) 2010-2012, Intel Corporation. All rights reserved.<BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LibLocale
- FILE_GUID = 9205cde5-5ae5-4a4b-bfbf-f6211967eef9
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibLocale
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- __mb_cur_max.c #
- _def_messages.c #
- _def_monetary.c #
- _def_numeric.c #
- _def_time.c #
- aliasname.c #
- ctypeio.c #
- localeconv.c #
- nl_langinfo.c #
- setlocale1.c #
- setlocale32.c #
- setlocale.c #
- wcscoll.c #
- wcsftime.c #
- wcstoimax.c #
- wcstol.c #
- wcstoll.c #
- wcstoul.c #
- wcstoull.c #
- wcstoumax.c #
- wcstod.c #
- wcstof.c #
- wcstold.c #
- wcsxfrm.c #
- multibyte_Utf8.c #
-
- # Single-byte locale to avoid bringing in citrus
- iswctype_sb.c #
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
-
-[LibraryClasses]
- LibC
- LibCType
diff --git a/StdLib/LibC/Locale/__mb_cur_max.c b/StdLib/LibC/Locale/__mb_cur_max.c
deleted file mode 100644
index 394c6c2eed..0000000000
--- a/StdLib/LibC/Locale/__mb_cur_max.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* $NetBSD: __mb_cur_max.c,v 1.2 2001/01/25 01:25:06 itojun Exp $ */
-
-/*-
- * Copyright (c)1999 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: __mb_cur_max.c,v 1.2 2001/01/25 01:25:06 itojun Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-#include <limits.h>
-
-size_t __mb_cur_max = 1;
-size_t __mb_len_max_runtime = MB_LEN_MAX;
-
diff --git a/StdLib/LibC/Locale/__wctoint.h b/StdLib/LibC/Locale/__wctoint.h
deleted file mode 100644
index 47d1e74686..0000000000
--- a/StdLib/LibC/Locale/__wctoint.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* $NetBSD: __wctoint.h,v 1.1 2001/09/28 11:25:37 yamt Exp $ */
-
-/*-
- * Copyright (c)2001 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Citrus: xpg4dl/FreeBSD/lib/libc/locale/__wctoint.h,v 1.1 2001/09/21 13:52:32 yamt Exp $
- */
-
-
-__inline static int
-__wctoint(wchar_t wc)
-{
- int n;
-
- /* XXX I expect compiler to optimize this. :D */
- switch (wc) {
- case L'0': n = 0; break;
- case L'1': n = 1; break;
- case L'2': n = 2; break;
- case L'3': n = 3; break;
- case L'4': n = 4; break;
- case L'5': n = 5; break;
- case L'6': n = 6; break;
- case L'7': n = 7; break;
- case L'8': n = 8; break;
- case L'9': n = 9; break;
- case L'A': case L'a': n = 10; break;
- case L'B': case L'b': n = 11; break;
- case L'C': case L'c': n = 12; break;
- case L'D': case L'd': n = 13; break;
- case L'E': case L'e': n = 14; break;
- case L'F': case L'f': n = 15; break;
- case L'G': case L'g': n = 16; break;
- case L'H': case L'h': n = 17; break;
- case L'I': case L'i': n = 18; break;
- case L'J': case L'j': n = 19; break;
- case L'K': case L'k': n = 20; break;
- case L'L': case L'l': n = 21; break;
- case L'M': case L'm': n = 22; break;
- case L'N': case L'n': n = 23; break;
- case L'O': case L'o': n = 24; break;
- case L'P': case L'p': n = 25; break;
- case L'Q': case L'q': n = 26; break;
- case L'R': case L'r': n = 27; break;
- case L'S': case L's': n = 28; break;
- case L'T': case L't': n = 29; break;
- case L'U': case L'u': n = 30; break;
- case L'V': case L'v': n = 31; break;
- case L'W': case L'w': n = 32; break;
- case L'X': case L'x': n = 33; break;
- case L'Y': case L'y': n = 34; break;
- case L'Z': case L'z': n = 35; break;
- default: n = -1; break; /* error */
- }
-
- return n;
-}
diff --git a/StdLib/LibC/Locale/_def_messages.c b/StdLib/LibC/Locale/_def_messages.c
deleted file mode 100644
index 2481febf53..0000000000
--- a/StdLib/LibC/Locale/_def_messages.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/* $NetBSD: _def_messages.c,v 1.6 2005/06/12 05:21:27 lukem Exp $ */
-
-/*
- * Written by J.T. Conklin <jtc@NetBSD.org>.
- * Public domain.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: _def_messages.c,v 1.6 2005/06/12 05:21:27 lukem Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/localedef.h>
-#include <locale.h>
-
-const _MessagesLocale _DefaultMessagesLocale =
-{
- "^[Yy]",
- "^[Nn]",
- "yes",
- "no"
-} ;
-
-const _MessagesLocale *_CurrentMessagesLocale = &_DefaultMessagesLocale;
diff --git a/StdLib/LibC/Locale/_def_monetary.c b/StdLib/LibC/Locale/_def_monetary.c
deleted file mode 100644
index af11866859..0000000000
--- a/StdLib/LibC/Locale/_def_monetary.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* $NetBSD: _def_monetary.c,v 1.8 2005/06/12 05:21:27 lukem Exp $ */
-
-/*
- * Written by J.T. Conklin <jtc@NetBSD.org>.
- * Public domain.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: _def_monetary.c,v 1.8 2005/06/12 05:21:27 lukem Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/localedef.h>
-#include <limits.h>
-#include <locale.h>
-
-const _MonetaryLocale _DefaultMonetaryLocale =
-{
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- (char)CHAR_MAX,
- (char)CHAR_MAX,
- (char)CHAR_MAX,
- (char)CHAR_MAX,
- (char)CHAR_MAX,
- (char)CHAR_MAX,
- (char)CHAR_MAX,
- (char)CHAR_MAX,
- (char)CHAR_MAX,
- (char)CHAR_MAX,
- (char)CHAR_MAX,
- (char)CHAR_MAX,
- (char)CHAR_MAX,
- (char)CHAR_MAX
-};
-
-const _MonetaryLocale *_CurrentMonetaryLocale = &_DefaultMonetaryLocale;
diff --git a/StdLib/LibC/Locale/_def_numeric.c b/StdLib/LibC/Locale/_def_numeric.c
deleted file mode 100644
index 10a6cec004..0000000000
--- a/StdLib/LibC/Locale/_def_numeric.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* $NetBSD: _def_numeric.c,v 1.6 2005/06/12 05:21:27 lukem Exp $ */
-
-/*
- * Written by J.T. Conklin <jtc@NetBSD.org>.
- * Public domain.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: _def_numeric.c,v 1.6 2005/06/12 05:21:27 lukem Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/localedef.h>
-#include <locale.h>
-
-const _NumericLocale _DefaultNumericLocale =
-{
- ".",
- "",
- ""
-};
-
-const _NumericLocale *_CurrentNumericLocale = &_DefaultNumericLocale;
diff --git a/StdLib/LibC/Locale/_def_time.c b/StdLib/LibC/Locale/_def_time.c
deleted file mode 100644
index 102fff554d..0000000000
--- a/StdLib/LibC/Locale/_def_time.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* $NetBSD: _def_time.c,v 1.8 2005/06/12 05:21:27 lukem Exp $ */
-
-/*
- * Written by J.T. Conklin <jtc@NetBSD.org>.
- * Public domain.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: _def_time.c,v 1.8 2005/06/12 05:21:27 lukem Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/localedef.h>
-#include <locale.h>
-
-const _TimeLocale _DefaultTimeLocale =
-{
- {
- "Sun","Mon","Tue","Wed","Thu","Fri","Sat",
- },
- {
- "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
- "Friday", "Saturday"
- },
- {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
- },
- {
- "January", "February", "March", "April", "May", "June", "July",
- "August", "September", "October", "November", "December"
- },
- {
- "AM", "PM"
- },
- "%a %b %e %H:%M:%S %Y",
- "%m/%d/%y",
- "%H:%M:%S",
- "%I:%M:%S %p"
-};
-
-const _TimeLocale *_CurrentTimeLocale = &_DefaultTimeLocale;
diff --git a/StdLib/LibC/Locale/_wcstod.h b/StdLib/LibC/Locale/_wcstod.h
deleted file mode 100644
index 4b0a833728..0000000000
--- a/StdLib/LibC/Locale/_wcstod.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/* $NetBSD: _wcstod.h,v 1.1 2006/04/15 12:17:23 tnozaki Exp $ */
-
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * Original version ID:
- * FreeBSD: /repoman/r/ncvs/src/lib/libc/locale/wcstod.c,v 1.4 2004/04/07 09:47:56 tjr Exp
- * NetBSD: wcstod.c,v 1.8 2006/04/13 01:25:13 tnozaki Exp
- */
-
-/*
- * function template for wcstof, wcstod, wcstold.
- *
- * parameters:
- * _FUNCNAME : function name
- * _RETURN_TYPE : return type
- * _STRTOD_FUNC : real conversion function
- */
-#ifndef __WCSTOD_H_
-#define __WCSTOD_H_
-
-/*
- * Convert a string to a double-precision number.
- *
- * This is the wide-character counterpart of strto{f,d,ld}(). So that
- * we do not have to duplicate the code of strto{f,d,ld}() here,
- * we convert the supplied wide character string to multibyte and
- * call strto{f,d,ld}() on the result.
- * This assumes that the multibyte encoding is compatible with ASCII
- * for at least the digits, radix character and letters.
- */
-_RETURN_TYPE
-_FUNCNAME(const wchar_t * __restrict nptr, wchar_t ** __restrict endptr)
-{
- const wchar_t *src, *start;
- _RETURN_TYPE val;
- char *buf, *end;
- size_t bufsiz, len;
-
- _DIAGASSERT(nptr != NULL);
- /* endptr may be null */
-
- src = nptr;
- while (iswspace((wint_t)*src) != 0)
- ++src;
- if (*src == L'\0')
- goto no_convert;
-
- /*
- * Convert the supplied numeric wide char. string to multibyte.
- *
- * We could attempt to find the end of the numeric portion of the
- * wide char. string to avoid converting unneeded characters but
- * choose not to bother; optimising the uncommon case where
- * the input string contains a lot of text after the number
- * duplicates a lot of strto{f,d,ld}()'s functionality and
- * slows down the most common cases.
- */
- start = src;
- len = wcstombs(NULL, src, 0);
- if (len == (size_t)-1)
- /* errno = EILSEQ */
- goto no_convert;
-
- _DIAGASSERT(len > 0);
-
- bufsiz = len;
- buf = (void *)malloc(bufsiz + 1);
- if (buf == NULL)
- /* errno = ENOMEM */
- goto no_convert;
-
- len = wcstombs(buf, src, bufsiz + 1);
-
- _DIAGASSERT(len == bufsiz);
- _DIAGASSERT(buf[len] == '\0');
-
- /* Let strto{f,d,ld}() do most of the work for us. */
- val = _STRTOD_FUNC(buf, &end);
- if (buf == end) {
- free(buf);
- goto no_convert;
- }
-
- /*
- * We only know where the number ended in the _multibyte_
- * representation of the string. If the caller wants to know
- * where it ended, count multibyte characters to find the
- * corresponding position in the wide char string.
- */
- if (endptr != NULL)
- /* XXX Assume each wide char is one byte. */
- *endptr = __UNCONST(start + (size_t)(end - buf));
-
- free(buf);
-
- return val;
-
-no_convert:
- if (endptr != NULL)
- *endptr = __UNCONST(nptr);
- return 0.0;
-}
-#endif /*__WCSTOD_H_*/
diff --git a/StdLib/LibC/Locale/_wcstol.h b/StdLib/LibC/Locale/_wcstol.h
deleted file mode 100644
index 97d0dc9a95..0000000000
--- a/StdLib/LibC/Locale/_wcstol.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/** @file
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- Original version ID:
- @(#)strtol.c 8.1 (Berkeley) 6/4/93
- NetBSD: wcstol.c,v 1.1 2001/09/27 16:30:36 yamt Exp
- Citrus: xpg4dl/FreeBSD/lib/libc/locale/wcstol.c,v 1.2 2001/09/21 16:11:41 yamt Exp
- NetBSD: _wcstol.h,v 1.3 2005/11/29 03:11:59 christos Exp
- */
-
-/*
- * function template for wcstol, wcstoll and wcstoimax.
- *
- * parameters:
- * _FUNCNAME : function name
- * __wINT : return type
- * __wINT_MIN : lower limit of the return type
- * __wINT_MAX : upper limit of the return type
- */
-
-__wINT
-_FUNCNAME(
- const wchar_t *nptr,
- wchar_t **endptr,
- int base
- )
-{
- const wchar_t *s;
- __wINT acc, cutoff;
- wint_t wc;
- int i;
- int neg, any, cutlim;
-
- _DIAGASSERT(nptr != NULL);
- /* endptr may be NULL */
-
-#ifdef __GNUC__
- (void)&acc; (void)&cutoff;
-#endif
-
- /* check base value */
- if (base && (base < 2 || base > 36)) {
- errno = EINVAL;
- return 0;
- }
-
- /*
- * Skip white space and pick up leading +/- sign if any.
- * If base is 0, allow 0x for hex and 0 for octal, else
- * assume decimal; if base is already 16, allow 0x.
- */
- s = nptr;
- do {
- wc = (wchar_t) *s++;
- } while (iswspace(wc));
- if (wc == L'-') {
- neg = 1;
- wc = *s++;
- } else {
- neg = 0;
- if (wc == L'+')
- wc = *s++;
- }
- if ((base == 0 || base == 16) &&
- wc == L'0' && (*s == L'x' || *s == L'X')) {
- wc = s[1];
- s += 2;
- base = 16;
- }
- if (base == 0)
- base = ((wc == L'0') ? 8 : 10);
-
- /*
- * See strtol for comments as to the logic used.
- */
- cutoff = neg ? __wINT_MIN : __wINT_MAX;
- cutlim = (int)(cutoff % base);
- cutoff /= base;
- if (neg) {
- if (cutlim > 0) {
- cutlim -= base;
- cutoff += 1;
- }
- cutlim = -cutlim;
- }
- for (acc = 0, any = 0;; wc = (wchar_t) *s++) {
- i = __wctoint((wchar_t)wc);
- if (i == -1)
- break;
- if (i >= base)
- break;
- if (any < 0)
- continue;
- if (neg) {
- if (acc < cutoff || (acc == cutoff && i > cutlim)) {
- any = -1;
- acc = __wINT_MIN;
- errno = ERANGE;
- } else {
- any = 1;
- acc *= base;
- acc -= i;
- }
- } else {
- if (acc > cutoff || (acc == cutoff && i > cutlim)) {
- any = -1;
- acc = __wINT_MAX;
- errno = ERANGE;
- } else {
- any = 1;
- acc *= base;
- acc += i;
- }
- }
- }
- if (endptr != 0)
- *endptr = __UNCONST(any ? s - 1 : nptr);
- return (acc);
-}
diff --git a/StdLib/LibC/Locale/_wcstoul.h b/StdLib/LibC/Locale/_wcstoul.h
deleted file mode 100644
index 2131d4b5c1..0000000000
--- a/StdLib/LibC/Locale/_wcstoul.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/** @file
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- Original version ID:
- @(#)strtoul.c 8.1 (Berkeley) 6/4/93
- Citrus: xpg4dl/FreeBSD/lib/libc/locale/wcstoul.c,v 1.2 2001/09/21 16:11:41 yamt Exp
- NetBSD: wcstoul.c,v 1.1 2001/09/27 16:30:37 yamt Exp
- NetBSD: _wcstoul.h,v 1.3 2005/11/29 03:11:59 christos Exp
- */
-
-#include <Library/BaseLib.h>
-
-/*
- * function template for wcstoul, wcstoull and wcstoumax.
- *
- * parameters:
- * _FUNCNAME : function name
- * __wUINT : return type
- * __wINT : signed version of __wUINT
- * __wUINT_MAX : upper limit of the return type
- */
-
-__wUINT
-_FUNCNAME(
- const wchar_t *nptr,
- wchar_t **endptr,
- int base
- )
-{
- const wchar_t *s;
- __wUINT acc, cutoff;
- wint_t wc;
- int i;
- int neg, any, cutlim;
-
- _DIAGASSERT(nptr != NULL);
- /* endptr may be NULL */
-
- if (base && (base < 2 || base > 36)) {
- errno = EINVAL;
- return 0;
- }
-
- /*
- * Skip white space and pick up leading +/- sign if any.
- * If base is 0, allow 0x for hex and 0 for octal, else
- * assume decimal; if base is already 16, allow 0x.
- */
- s = nptr;
- do {
- wc = (wchar_t) *s++;
- } while (iswspace(wc));
- if (wc == L'-') {
- neg = 1;
- wc = *s++;
- } else {
- neg = 0;
- if (wc == L'+')
- wc = *s++;
- }
- if ((base == 0 || base == 16) &&
- wc == L'0' && (*s == L'x' || *s == L'X')) {
- wc = s[1];
- s += 2;
- base = 16;
- }
- if (base == 0)
- base = wc == L'0' ? 8 : 10;
-
- /*
- * See strtoul for comments as to the logic used.
- */
- cutoff = (__wUINT)DivU64x32 ((UINT64) __wUINT_MAX, (UINT32) base);
- cutlim = (int) ModU64x32 ((UINT64) __wUINT_MAX, (UINT32) base);
- for (acc = 0, any = 0;; wc = (wint_t) *s++) {
- i = __wctoint((wchar_t)wc);
- if (i == -1) {
- break;
- }
- if (i >= base)
- break;
- if (any < 0)
- continue;
- if (acc > cutoff || (acc == cutoff && i > cutlim)) {
- any = -1;
- acc = __wUINT_MAX;
- errno = ERANGE;
- } else {
- any = 1;
- acc *= (__wUINT)base;
- acc += i;
- }
- }
- if (neg && any > 0)
- acc = (__wUINT)(-((__wINT)acc));
- if (endptr != 0)
- *endptr = __UNCONST(any ? s - 1 : nptr);
- return (acc);
-}
diff --git a/StdLib/LibC/Locale/aliasname.c b/StdLib/LibC/Locale/aliasname.c
deleted file mode 100644
index 56303e97fe..0000000000
--- a/StdLib/LibC/Locale/aliasname.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* $NetBSD: aliasname.c,v 1.2 2005/02/09 21:35:46 kleink Exp $ */
-
-/*-
- * Copyright (c)2002 YAMAMOTO Takashi,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: aliasname.c,v 1.2 2005/02/09 21:35:46 kleink Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-#include <assert.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "aliasname_local.h"
-
-__inline int __is_ws(char);
-
-__inline int __is_ws(char ch)
-{
-
- return (ch == ' ' || ch == '\t');
-}
-
-const char *
-__unaliasname(const char *dbname, const char *alias, void *buf, size_t bufsize)
-{
- FILE *fp = NULL;
- const char *result = alias;
- size_t resultlen;
- size_t aliaslen;
- const char *p;
- size_t len;
-
- _DIAGASSERT(dbname != NULL);
- _DIAGASSERT(alias != NULL);
- _DIAGASSERT(buf != NULL);
-
- fp = fopen(dbname, "r");
- if (fp == NULL)
- goto quit;
-
- aliaslen = strlen(alias);
-
- while (/*CONSTCOND*/ 1) {
- p = fgetln(fp, &len);
- if (p == NULL)
- goto quit; /* eof or error */
-
- _DIAGASSERT(len != 0);
-
- /* ignore terminating NL */
- if (p[len - 1] == '\n')
- len--;
-
- /* ignore null line and comment */
- if (len == 0 || p[0] == '#')
- continue;
-
- if (aliaslen > len)
- continue;
-
- if (memcmp(alias, p, aliaslen))
- continue;
-
- p += aliaslen;
- len -= aliaslen;
-
- if (len == 0 || !__is_ws(*p))
- continue;
-
- /* entry was found here */
- break;
-
- /* NOTREACHED */
- }
-
- /* skip white spaces */
- do {
- p++;
- len--;
- } while (len != 0 && __is_ws(*p));
-
- if (len == 0)
- goto quit;
-
- /* count length of result */
- resultlen = 0;
- while (resultlen < len && !__is_ws(*p))
- resultlen++;
-
- /* check if space is enough */
- if (bufsize < resultlen + 1)
- goto quit;
-
- memcpy(buf, p, resultlen);
- ((char *)buf)[resultlen] = 0;
- result = buf;
-
-quit:
- if (fp)
- fclose(fp);
-
- return result;
-}
diff --git a/StdLib/LibC/Locale/aliasname_local.h b/StdLib/LibC/Locale/aliasname_local.h
deleted file mode 100644
index 9daec022b2..0000000000
--- a/StdLib/LibC/Locale/aliasname_local.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* $NetBSD: aliasname_local.h,v 1.1 2002/02/13 07:45:52 yamt Exp $ */
-
-/*-
- * Copyright (c)2002 YAMAMOTO Takashi,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-const char *__unaliasname(const char *, const char *, void *, size_t);
diff --git a/StdLib/LibC/Locale/ctypeio.c b/StdLib/LibC/Locale/ctypeio.c
deleted file mode 100644
index 8679dcd884..0000000000
--- a/StdLib/LibC/Locale/ctypeio.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/** @file
- Internal C-type locale functions.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1997 Christos Zoulas. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. All advertising materials mentioning features or use of this software
- must display the following acknowledgement:
- This product includes software developed by Christos Zoulas.
- 4. The name of the author may not be used to endorse or promote products
- derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: ctypeio.c,v 1.7 2005/11/29 03:11:59 christos Exp
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: ctypeio.c,v 1.7 2005/11/29 03:11:59 christos Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#define _CTYPE_PRIVATE
-#include <ctype.h>
-#include "ctypeio.h"
-
-int
-__loadctype(const char *name)
-{
- FILE *fp;
- char id[sizeof(_CTYPE_ID) - 1];
- u_int32_t i, len;
- unsigned short *new_ctype = NULL;
- unsigned char *new_toupper = NULL, *new_tolower = NULL;
-
- _DIAGASSERT(name != NULL);
-
- if ((fp = fopen(name, "r")) == NULL)
- return 0;
-
- if (fread(id, sizeof(id), 1, fp) != 1)
- goto bad;
-
- if (memcmp(id, _CTYPE_ID, sizeof(id)) != 0)
- goto bad;
-
- if (fread(&i, sizeof(u_int32_t), 1, fp) != 1)
- goto bad;
-
- if ((i = ntohl(i)) != _CTYPE_REV)
- goto bad;
-
- if (fread(&len, sizeof(u_int32_t), 1, fp) != 1)
- goto bad;
-
- if ((len = ntohl(len)) != _CTYPE_NUM_CHARS)
- goto bad;
-
- if ((new_ctype = malloc(sizeof(UINT16) * (1 + len))) == NULL)
- goto bad;
-
- new_ctype[0] = 0;
- if (fread(&new_ctype[1], sizeof(UINT16), len, fp) != len)
- goto bad;
-
- if ((new_toupper = malloc(sizeof(UINT8) * (1 + len))) == NULL)
- goto bad;
-
- new_toupper[0] = (UINT8)EOF;
- if (fread(&new_toupper[1], sizeof(UINT8), len, fp) != len)
- goto bad;
-
- if ((new_tolower = malloc(sizeof(UINT8) * (1 + len))) == NULL)
- goto bad;
-
- new_tolower[0] = (UINT8)EOF;
- if (fread(&new_tolower[1], sizeof(UINT8), len, fp) != len)
- goto bad;
-
-#if BYTE_ORDER == LITTLE_ENDIAN
- for (i = 1; i <= len; i++) {
- new_ctype[i] = ntohs(new_ctype[i]);
- }
-#endif
-
- (void) fclose(fp);
- if (_cClass != _C_CharClassTable)
- free(__UNCONST(_cClass));
- _cClass = new_ctype;
- if (_uConvT != _C_ToUpperTable)
- free(__UNCONST(_uConvT));
- _uConvT = new_toupper;
- if (_lConvT != _C_ToLowerTable)
- free(__UNCONST(_lConvT));
- _lConvT = new_tolower;
-
- return 1;
-bad:
- free(new_tolower);
- free(new_toupper);
- free(new_ctype);
- (void) fclose(fp);
- return 0;
-}
-
-int
-__savectype(
- const char *name,
- unsigned short *new_ctype,
- unsigned char *new_toupper,
- unsigned char *new_tolower
- )
-{
- FILE *fp;
- u_int32_t i, len = _CTYPE_NUM_CHARS;
-
- _DIAGASSERT(name != NULL);
- _DIAGASSERT(new_ctype != NULL);
- _DIAGASSERT(new_toupper != NULL);
- _DIAGASSERT(new_tolower != NULL);
-
- if ((fp = fopen(name, "w")) == NULL)
- return 0;
-
- if (fwrite(_CTYPE_ID, sizeof(_CTYPE_ID) - 1, 1, fp) != 1)
- goto bad;
-
- i = htonl(_CTYPE_REV);
- if (fwrite(&i, sizeof(u_int32_t), 1, fp) != 1)
- goto bad;
-
- i = htonl(len);
- if (fwrite(&i, sizeof(u_int32_t), 1, fp) != 1)
- goto bad;
-
-#if BYTE_ORDER == LITTLE_ENDIAN
- for (i = 1; i <= len; i++) {
- new_ctype[i] = htons(new_ctype[i]);
- }
-#endif
- if (fwrite(&new_ctype[1], sizeof(UINT16), len, fp) != len)
- goto bad;
-
- if (fwrite(&new_toupper[1], sizeof(UINT8), len, fp) != len)
- goto bad;
-
- if (fwrite(&new_tolower[1], sizeof(UINT8), len, fp) != len)
- goto bad;
-
- (void) fclose(fp);
- return 1;
-bad:
- (void) fclose(fp);
- return 0;
-}
diff --git a/StdLib/LibC/Locale/ctypeio.h b/StdLib/LibC/Locale/ctypeio.h
deleted file mode 100644
index 919889fa84..0000000000
--- a/StdLib/LibC/Locale/ctypeio.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* $NetBSD: ctypeio.h,v 1.1 1997/06/02 09:52:48 kleink Exp $ */
-
-/*
- * Copyright (c) 1997 Christos Zoulas. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Christos Zoulas.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-__BEGIN_DECLS
-int __loadctype (const char *);
-int __savectype (const char *, unsigned short *, unsigned char *, unsigned char *);
-__END_DECLS
diff --git a/StdLib/LibC/Locale/iswctype_sb.c b/StdLib/LibC/Locale/iswctype_sb.c
deleted file mode 100644
index 454201543f..0000000000
--- a/StdLib/LibC/Locale/iswctype_sb.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/** @file
- Wide character classification and conversion functions.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1989 The Regents of the University of California.
- All rights reserved.
- (c) UNIX System Laboratories, Inc.
- All or some portions of this file are derived from material licensed
- to the University of California by American Telephone and Telegraph
- Co. or Unix System Laboratories, Inc. and are reproduced herein with
- the permission of UNIX System Laboratories, Inc.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- NetBSD: iswctype_sb.c,v 1.4 2004/07/21 20:27:46 tshiozak Exp
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: iswctype_sb.c,v 1.4 2004/07/21 20:27:46 tshiozak Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <ctype.h>
-#include <string.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#undef iswalnum
-int
-iswalnum(wint_t c)
-{
- return isalnum((int)c);
-}
-
-#undef iswalpha
-int
-iswalpha(wint_t c)
-{
- return isalpha((int)c);
-}
-
-#undef iswblank
-int
-iswblank(wint_t c)
-{
- return isblank((int)c);
-}
-
-#undef iswcntrl
-int
-iswcntrl(wint_t c)
-{
- return iscntrl((int)c);
-}
-
-#undef iswdigit
-int
-iswdigit(wint_t c)
-{
- return isdigit((int)c);
-}
-
-#undef iswgraph
-int
-iswgraph(wint_t c)
-{
- return isgraph((int)c);
-}
-
-#undef iswlower
-int
-iswlower(wint_t c)
-{
- return islower((int)c);
-}
-
-#undef iswprint
-int
-iswprint(wint_t c)
-{
- return isprint((int)c);
-}
-
-#undef iswpunct
-int
-iswpunct(wint_t c)
-{
- return ispunct((int)c);
-}
-
-#undef iswspace
-int
-iswspace(wint_t c)
-{
- return isspace((int)c);
-}
-
-#undef iswupper
-int
-iswupper(wint_t c)
-{
- return isupper((int)c);
-}
-
-#undef iswxdigit
-int
-iswxdigit(wint_t c)
-{
- return isxdigit((int)c);
-}
-
-#undef towupper
-wint_t
-towupper(wint_t c)
-{
- return toupper((int)c);
-}
-
-#undef towlower
-wint_t
-towlower(wint_t c)
-{
- return tolower((int)c);
-}
-
-#undef wcwidth
-int
-/*ARGSUSED*/
-wcwidth(wchar_t c)
-{
- return 1;
-}
-
-#undef iswctype
-int
-iswctype(wint_t c, wctype_t charclass)
-{
- /*
- * SUSv3: If charclass is 0, iswctype() shall return 0.
- */
- return (__isCClass((int)c, (unsigned int)charclass));
-}
-
-// Additional functions in <wctype.h> but not in NetBSD _sb code.
-static
-struct _typestrval {
- char *name;
- wctype_t value;
-} typestrval[] = {
- { "alnum", (_CD | _CU | _CL | _XA) },
- { "alpha", (_CU | _CL | _XA) },
- { "blank", (_CB) },
- { "cntrl", (_CC) },
- { "digit", (_CD) },
- { "graph", (_CG) },
- { "lower", (_CL) },
- { "print", (_CS | _CG) },
- { "punct", (_CP) },
- { "space", (_CW) },
- { "upper", (_CU) },
- { "xdigit", (_CD | _CX) }
-};
-
-#define NUM_PROPVAL (sizeof(typestrval) / sizeof(struct _typestrval))
-
-static
-struct _transtrval {
- char *name;
- wctrans_t function;
-} transtrval[] = {
- { "tolower", towlower },
- { "toupper", towupper }
-};
-
-#define NUM_TRANSVAL (sizeof(transtrval) / sizeof(struct _transtrval))
-
-wctype_t wctype(const char *property)
-{
- int i;
-
- for(i = 0; i < NUM_PROPVAL; ++i) {
- if( strcmp(typestrval[i].name, property) == 0) {
- return typestrval[i].value;
- }
- }
- return 0;
-}
-
-wint_t towctrans(wint_t p1, wctrans_t tranfunc)
-{
- return tranfunc(p1);
-}
-
-wctrans_t wctrans(const char *property)
-{
- int i;
-
- for(i = 0; i < NUM_TRANSVAL; ++i) {
- if( strcmp(transtrval[i].name, property) == 0) {
- return transtrval[i].function;
- }
- }
- return NULL;
-}
diff --git a/StdLib/LibC/Locale/localeconv.c b/StdLib/LibC/Locale/localeconv.c
deleted file mode 100644
index 46430f9c48..0000000000
--- a/StdLib/LibC/Locale/localeconv.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* $NetBSD: localeconv.c,v 1.13 2005/11/29 03:11:59 christos Exp $ */
-
-/*
- * Written by J.T. Conklin <jtc@NetBSD.org>.
- * Public domain.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: localeconv.c,v 1.13 2005/11/29 03:11:59 christos Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/localedef.h>
-#include <locale.h>
-
-/*
- * The localeconv() function constructs a struct lconv from the current
- * monetary and numeric locales.
- *
- * Because localeconv() may be called many times (especially by library
- * routines like printf() & strtod()), the approprate members of the
- * lconv structure are computed only when the monetary or numeric
- * locale has been changed.
- */
-int __mlocale_changed = 1;
-int __nlocale_changed = 1;
-
-/*
- * Return the current locale conversion.
- */
-struct lconv *
-localeconv()
-{
- static struct lconv ret;
-
- if (__mlocale_changed) {
- /* LC_MONETARY */
- ret.int_curr_symbol =
- __UNCONST(_CurrentMonetaryLocale->int_curr_symbol);
- ret.currency_symbol =
- __UNCONST(_CurrentMonetaryLocale->currency_symbol);
- ret.mon_decimal_point =
- __UNCONST(_CurrentMonetaryLocale->mon_decimal_point);
- ret.mon_thousands_sep =
- __UNCONST(_CurrentMonetaryLocale->mon_thousands_sep);
- ret.mon_grouping =
- __UNCONST(_CurrentMonetaryLocale->mon_grouping);
- ret.positive_sign =
- __UNCONST(_CurrentMonetaryLocale->positive_sign);
- ret.negative_sign =
- __UNCONST(_CurrentMonetaryLocale->negative_sign);
- ret.int_frac_digits = _CurrentMonetaryLocale->int_frac_digits;
- ret.frac_digits = _CurrentMonetaryLocale->frac_digits;
- ret.p_cs_precedes = _CurrentMonetaryLocale->p_cs_precedes;
- ret.p_sep_by_space = _CurrentMonetaryLocale->p_sep_by_space;
- ret.n_cs_precedes = _CurrentMonetaryLocale->n_cs_precedes;
- ret.n_sep_by_space = _CurrentMonetaryLocale->n_sep_by_space;
- ret.p_sign_posn = _CurrentMonetaryLocale->p_sign_posn;
- ret.n_sign_posn = _CurrentMonetaryLocale->n_sign_posn;
- ret.int_p_cs_precedes =
- _CurrentMonetaryLocale->int_p_cs_precedes;
- ret.int_n_cs_precedes =
- _CurrentMonetaryLocale->int_n_cs_precedes;
- ret.int_p_sep_by_space =
- _CurrentMonetaryLocale->int_p_sep_by_space;
- ret.int_n_sep_by_space =
- _CurrentMonetaryLocale->int_n_sep_by_space;
- ret.int_p_sign_posn = _CurrentMonetaryLocale->int_p_sign_posn;
- ret.int_n_sign_posn = _CurrentMonetaryLocale->int_n_sign_posn;
- __mlocale_changed = 0;
- }
-
- if (__nlocale_changed) {
- /* LC_NUMERIC */
- ret.decimal_point =
- __UNCONST(_CurrentNumericLocale->decimal_point);
- ret.thousands_sep =
- __UNCONST(_CurrentNumericLocale->thousands_sep);
- ret.grouping =
- __UNCONST(_CurrentNumericLocale->grouping);
- __nlocale_changed = 0;
- }
-
- return (&ret);
-}
diff --git a/StdLib/LibC/Locale/multibyte_Utf8.c b/StdLib/LibC/Locale/multibyte_Utf8.c
deleted file mode 100644
index ffe3dee231..0000000000
--- a/StdLib/LibC/Locale/multibyte_Utf8.c
+++ /dev/null
@@ -1,1008 +0,0 @@
-/** @file
- Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <assert.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <sys/types.h>
-#include <limits.h>
-
-typedef int ch_UCS4;
-
-static mbstate_t LocalConvState = {0};
-
-/** Map a UTF-8 encoded prefix byte to a sequence length.
- Zero means illegal prefix, but valid surrogate if < 0xC0.
- One indicates an ASCII-7 equivalent character.
- Two, three, and four are the first byte for 2, 3, and 4 byte sequences, respectively.
- See RFC 3629 for details.
-
- TABLE ENCODING:
- Low Nibble decodes the first byte into the number of bytes in the sequence.
- A value of zero indicates an invalid byte.
- The High Nibble encodes a bit mask to be used to match against the high nibble of the second byte.
-
- example:
- SequenceLength = code[c0] & 0x0F;
- Mask = 0x80 | code[c0];
-
- Surrogate bytes are valid if: code[cX] & Mask > 0x80;
-
-*/
-static
-UINT8 utf8_code_length[256] = {
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, /* 00-0F */
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, /* 70-7F */
- 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, /* 80-8F */
- 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, /* 90-9F */
- 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, /* A0-AF */
- 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, /* B0-BF */
- 0x00, 0x00, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, /* C0-C1 + C2-CF */
- 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, /* D0-DF */
- 0x43, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x33, 0x73, 0x73, /* E0-EF */
- 0x64, 0x74, 0x74, 0x74, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* F0-F4 + F5-FF */
-};
-
-/** Process one byte of a multibyte character.
-
- @param[in] ch One byte of a multibyte character.
- @param[in,out] ps Pointer to a conversion state object.
-
- @retval -2 ch is an incomplete but potentially valid character.
- @retval -1 ch is not valid in this context.
- @retval 1:4 The length, in bytes, of the character ch just completed.
-**/
-static
-int
-ProcessOneByte(unsigned char ch, mbstate_t *ps)
-{
- UINT32 Mask;
- UINT32 Length;
- int RetVal = 0;
-
- if(ps->A > 3) {
- // We are in an invalid state
- ps->A = 0; // Initial State
- }
- ps->C[ps->A] = ch; // Save the current character
- Mask = utf8_code_length[ch];
-
- if(ps->A == 0) { // Initial State. First byte of sequence.
- ps->E = Mask | 0x80;
- Length = Mask & 0xF;
- switch(Length) {
- case 0: // State 0, Code 0
- errno = EILSEQ;
- RetVal = -1;
- ps->E = 1; // Consume this character
- break;
- case 1: // State 0, Code 1
- // ASCII-7 Character
- ps->B = ps->D[0] = ch;
- RetVal = 1;
- break;
- default: // State 0, Code 2, 3, 4
- ps->A = 1; // Next state is State-1
- RetVal = -2; // Incomplete but potentially valid character
- break;
- }
- }
- else {
- // We are in state 1, 2, or 3 and processing a surrogate byte
- Length = ps->E & 0xF;
- if((Mask & ps->E) > 0x80) {
- // This byte is valid
- switch(ps->A) { // Process based upon our current state
- case 1: // Second byte of the sequence.
- if(Length == 2) { // State 1, Code 2
- Length = ((ps->C[0] & 0x1f) << 6) + (ps->C[1] & 0x3f);
- assert ((Length > 0x007F) && (Length <= 0x07FF));
- ps->B = ps->D[0] = (UINT16)Length;
- ps->A = 0; // Next state is State-0
- RetVal = 2;
- }
- else { // This isn't the last character, get more. State 1, Code 3 or 4
- ps->A = 2;
- RetVal = -2;
- }
- break;
- case 2: // Third byte of the sequence
- if(Length == 3) {
- Length = ((ps->C[0] & 0x0f) << 12) + ((ps->C[1] & 0x3f) << 6) + (ps->C[2] & 0x3f);
- assert ((Length > 0x07FF) && (Length <= 0xFFFF));
- ps->B = ps->D[0] = (UINT16)Length;
- ps->A = 0; // Next state is State-0
- RetVal = 3;
- }
- else {
- ps->A = 3;
- RetVal = -2;
- }
- break;
- case 3: // Fourth byte of the sequence
- if(Length == 4) {
- Length = ((ps->C[0] & 0x7) << 18) + ((ps->C[1] & 0x3f) << 12) +
- ((ps->C[2] & 0x3f) << 6) + (ps->C[3] & 0x3f);
- ps->B = Length;
- assert ((Length > 0xFFFF) && (Length <= 0x10ffff));
-
- /* compute and append the two surrogates: */
-
- /* translate from 10000..10FFFF to 0..FFFF */
- Length -= 0x10000;
-
- /* high surrogate = top 10 bits added to D800 */
- ps->D[0] = (UINT16)(0xD800 + (Length >> 10));
-
- /* low surrogate = bottom 10 bits added to DC00 */
- ps->D[1] = (UINT16)(0xDC00 + (Length & 0x03FF));
- ps->A = 0; // Next state is State-0
- RetVal = 4;
- }
- else {
- errno = EILSEQ;
- ps->A = 0;
- RetVal = -1;
- ps->E = 4; // Can't happen, but consume this character anyway
- }
- break;
- }
- }
- else { // Invalid surrogate character
- errno = EILSEQ;
- ps->A = 0; // Next is State-0
- RetVal = -1;
- ps->E = 0; // Don't Consume, it may be an initial byte
- }
- }
- return RetVal;
-}
-
-/** Convert one Multibyte sequence.
-
- @param[out] Dest Pointer to output location, or NULL
- @param[in] Src Multibyte Source (UTF8)
- @param[in] Len Max Number of bytes to convert
- @param[in] pS Pointer to State struct., or NULL
-
- @retval -2 Bytes processed comprise an incomplete, but potentially valid, character.
- @retval -1 An encoding error was encountered. ps->E indicates the number of bytes consumed.
- @retval 0 Either Src is NULL or it points to a NUL character.
- @retval 1:N N bytes were consumed producing a valid wide character.
-**/
-int
-DecodeOneStateful(
- wchar_t *Dest, // Pointer to output location, or NULL
- const char *Src, // Multibyte Source (UTF8)
- ssize_t Len, // Max Number of bytes to convert
- mbstate_t *pS // Pointer to State struct., or NULL
- )
-{
- const char *SrcEnd;
- int NumConv;
- unsigned char ch;
-
- if(pS == NULL) {
- pS = &LocalConvState;
- }
- NumConv = 0;
- if(Src != NULL) {
- if(*Src != 0) {
- SrcEnd = Src + Len;
- while(Src < SrcEnd) {
- ch = (unsigned char)*Src++;
- NumConv = ProcessOneByte(ch, pS);
- if(NumConv != -2) {
- break;
- }
- }
- }
- else if(Dest != NULL) {
- *Dest = 0;
- }
- }
- if((NumConv > 0) && (Dest != NULL)) {
- Dest[0] = pS->D[0];
- if(NumConv == 4) {
- Dest[1] = pS->D[1];
- }
- }
- return NumConv;
-}
-
-/* Determine the number of bytes needed to represent a Wide character
- as a MBCS character.
-
- A single wide character may convert into a one, two, three, or four byte
- narrow (MBCS or UTF-8) character. The number of MBCS bytes can be determined
- as follows.
-
- If WCS char < 0x00000080 One Byte
- Else if WCS char < 0x0000D800 Two Bytes
- Else Three Bytes
-
- Since UEFI only supports the Unicode Base Multilingual Plane (BMP),
- Four-byte characters are not supported.
-
- @param[in] InCh Wide character to test.
-
- @retval -1 Improperly formed character
- @retval 0 InCh is 0x0000
- @retval >0 Number of bytes needed for the MBCS character
-*/
-int
-EFIAPI
-OneWcToMcLen(const wchar_t InCh)
-{
- ssize_t NumBytes;
-
- if(InCh == 0) { // Is this a NUL, 0x0000 ?
- NumBytes = 0;
- }
- else if(InCh < 0x0080) { // Is this a 1-byte character?
- NumBytes = 1;
- }
- else if(InCh < 0x0800) { // Is this a 2-byte character?
- NumBytes = 2;
- }
- else if((InCh >= 0xD800) && (InCh < 0xE000)) { // Is this a surrogate?
- NumBytes = -1;
- }
- else {
- NumBytes = 3; // Otherwise, it must be a 3-byte character.
- }
- return (int)NumBytes; // Return extimate of required bytes.
-}
-
-/* Determine the number of bytes needed to represent a Wide character string
- as a MBCS string of given maximum length. Will optionally return the number
- of wide characters that would be consumed.
-
- A single wide character may convert into a one, two, three, or four byte
- narrow (MBCS or UTF-8) character. The number of MBCS bytes can be determined
- as follows.
-
- If WCS char < 0x00000080 One Byte
- Else if WCS char < 0x00000800 Two Bytes
- Else if WCS char < 0x00010000 Three Bytes
- Else Four Bytes
-
- Since UEFI only supports the Unicode Base Multilingual Plane (BMP),
- Four-byte characters should not be encountered.
-
- @param[in] Src Pointer to a wide character string.
- @param[in] Limit Maximum number of bytes the converted string may occupy.
- @param[out] NumChar Pointer to where to store the number of wide characters, or NULL.
-
- @return The number of bytes required to convert Src to MBCS,
- not including the terminating NUL. If NumChar is not NULL, the number
- of characters represented by the return value will be written to
- where it points.
-*/
-size_t
-EFIAPI
-EstimateWtoM(const wchar_t * Src, size_t Limit, size_t *NumChar)
-{
- ssize_t Estimate;
- size_t CharCount;
- ssize_t NumBytes;
- wchar_t EChar;
-
- Estimate = 0;
- CharCount = 0;
- EChar = *Src++; // Get the initial character and point to next
- while(((NumBytes = OneWcToMcLen(EChar)) > 0) &&
- ((size_t)(Estimate + NumBytes) < Limit))
- { // Until one of the source characters is NUL
- ++CharCount; // Count this character.
- Estimate += NumBytes; // Count the Bytes for this character
- EChar = *Src++; // Get the next source character and point to the next.
- }
- if(NumChar != NULL) {
- *NumChar = CharCount;
- }
- return (size_t)Estimate; // Return esimate of required bytes.
-}
-
-/* Determine the number of characters in a MBCS string.
- MBCS characters are one to four bytes long. By examining the first byte
- of a MBCS character, one can determine the number of bytes comprising the
- character.
-
- 0x00 - 0x7F One
- 0xC0 - 0xDF Two
- 0xE0 - 0xEF Three
- 0xF0 - 0xF7 Four
-
- Since UEFI only supports the Unicode Base Multilingual Plane (BMP),
- Four-byte characters should not be encountered.
-
- @param[in] Src The string to examine
-
- @return The number of characters represented by the MBCS string.
-**/
-size_t
-EFIAPI
-CountMbcsChars(const char *Src)
-{
- size_t Count;
- char EChar;
-
- Count = 0;
- EChar = *Src++;
- while(EChar != 0) {
- if(EChar < 0x80) {
- ++Count;
- }
- else if(EChar < 0xE0) {
- Count += 2;
- ++Src;
- }
- else if(EChar < 0xF0) {
- Count += 3;
- Src += 2;
- }
- else {
- // Ill-formed character
- break;
- }
- }
- return Count;
-}
-
-/** Convert a wide character (UTF16) into a multibyte character (UTF8)
-
- Converts a wide character into a corresponding multibyte character that
- begins in the conversion state described by the object pointed to by ps.
- If dst is not a null pointer, the converted character is then stored into
- the array pointed to by dst.
-
- It is the caller's responsibility to ensure that Dest is large enough to
- hold the resulting MBCS sequence.
-
- @param s Pointer to the wide-character string to convert
- @param Dest Pointer to the buffer in which to place the converted sequence, or NULL.
-
- @retval -1 An error occurred. The error reason is in errno.
- @retval >=0 The number of bytes stored into Dest.
-**/
-ssize_t
-EncodeUtf8(char *Dest, wchar_t ch)
-{
- char *p; /* next free byte in build buffer */
- int NumInBuff; // number of bytes in Buff
- char Buff[4]; // Buffer into which each character is built
-
- p = Buff;
-
- NumInBuff = 0;
- if (ch < 0x80) {
- /* Encode ASCII -- One Byte */
- *p++ = (char) ch;
- NumInBuff = 1;
- }
- else if (ch < 0x0800) {
- /* Encode Latin-1 -- Two Byte */
- *p++ = (char)(0xc0 | (ch >> 6));
- *p++ = (char)(0x80 | (ch & 0x3f));
- NumInBuff = 2;
- }
- else {
- /* Encode UCS2 Unicode ordinals -- Three Byte */
- /* Special case: check for surrogate -- Shouldn't happen in UEFI */
- if (0xD800 <= ch && ch < 0xE000) {
- errno = EILSEQ;
- return -1;
- }
- else {
- *p++ = (char)(0xe0 | (ch >> 12));
- *p++ = (char)(0x80 | ((ch >> 6) & 0x3f));
- *p++ = (char)(0x80 | (ch & 0x3f));
- NumInBuff = 3;
- }
- }
- /* At this point, Buff holds the converted character which is NumInBuff bytes long.
- NumInBuff is the value 1, 2, 3, or 4
- */
- if(Dest != NULL) { // Save character if Dest is not NULL
- memcpy(Dest, Buff, NumInBuff);
- }
- return NumInBuff; // Tell the caller
-}
-
-// ######################## Narrow to Wide Conversions #######################
-
-/** If ps is not a null pointer, the mbsinit function determines whether the
- pointed-to mbstate_t object describes an initial conversion state.
-
- @param[in] ps Pointer to the conversion state object to test.
-
- @return The mbsinit function returns nonzero if ps is a null pointer
- or if the pointed-to object describes an initial conversion
- state; otherwise, it returns zero.
-
- Declared in: wchar.h
-**/
-int
-mbsinit(const mbstate_t *ps)
-{
- if((ps == NULL) || (ps->A == 0)) {
- return 1;
- }
- return 0;
-}
-
-/** The mbrlen function is equivalent to the call:<BR>
-@verbatim
- mbrtowc(NULL, s, n, ps != NULL ? ps : &internal)
-@endverbatim
- where internal is the mbstate_t object for the mbrlen function, except that
- the expression designated by ps is evaluated only once.
-
- @param[in] s Pointer to a multibyte character sequence.
- @param[in] n Maximum number of bytes to examine.
- @param[in] pS Pointer to the conversion state object.
-
- @retval 0 The next n or fewer characters complete a NUL.
- @retval 1..n The number of bytes that complete the multibyte character.
- @retval -2 The next n bytes contribute to an incomplete (but potentially valid) multibyte character.
- @retval -1 An encoding error occurred.
-
- Declared in: wchar.h
-**/
-size_t
-mbrlen(
- const char *s,
- size_t n,
- mbstate_t *pS
- )
-{
- return mbrtowc(NULL, s, n, pS);
-}
-
-/** Determine the number of bytes comprising a multibyte character.
-
- If S is not a null pointer, the mblen function determines the number of bytes
- contained in the multibyte character pointed to by S. Except that the
- conversion state of the mbtowc function is not affected, it is equivalent to
- mbtowc((wchar_t *)0, S, N);
-
- @param[in] S NULL to query whether multibyte characters have
- state-dependent encodings. Otherwise, points to a
- multibyte character.
- @param[in] N The maximum number of bytes in a multibyte character.
-
- @return If S is a null pointer, the mblen function returns a nonzero or
- zero value, if multibyte character encodings, respectively, do
- or do not have state-dependent encodings. If S is not a null
- pointer, the mblen function either returns 0 (if S points to the
- null character), or returns the number of bytes that are contained
- in the multibyte character (if the next N or fewer bytes form a
- valid multibyte character), or returns -1 (if they do not form a
- valid multibyte character).
-
- Declared in: stdlib.h
-**/
-int
-mblen(
- const char *s,
- size_t n
- )
-{
- return (int)mbrlen(s, n, NULL);
-}
-
-/**
-If S is a null pointer, the mbrtowc function is equivalent to the call:<BR>
-@verbatim
- mbrtowc(NULL, "", 1, ps)
-@endverbatim
-
-In this case, the values of the parameters pwc and n are ignored.
-
-If S is not a null pointer, the mbrtowc function inspects at most n bytes beginning with
-the byte pointed to by S to determine the number of bytes needed to complete the next
-multibyte character (including any shift sequences). If the function determines that the
-next multibyte character is complete and valid, it determines the value of the
-corresponding wide character and then, if pwc is not a null pointer, stores that value in
-the object pointed to by pwc. If the corresponding wide character is the null wide
-character, the resulting state described is the initial conversion state.
-
- @param[out] pwc Pointer to where the resulting wide character is to be stored.
- @param[in] s Pointer to a multibyte character "string".
- @param[in] n The maximum number of bytes to inspect.
- @param[in] ps Pointer to a conversion state object.
-
- @retval 0 if the next n or fewer bytes complete the multibyte
- character that corresponds to the null wide
- character (which is the value stored).
- @retval between_1_and_n_inclusive if the next n or fewer bytes complete
- a valid multibyte character (which is the value
- stored); the value returned is the number of bytes
- that complete the multibyte character.
- @retval (size_t)(-2) if the next n bytes contribute to an incomplete
- (but potentially valid) multibyte character, and
- all n bytes have been processed (no value is stored).
- @retval (size_t)(-1) if an encoding error occurs, in which case the next
- n or fewer bytes do not contribute to a complete and
- valid multibyte character (no value is stored); the
- value of the macro EILSEQ is stored in errno, and
- the conversion state is unspecified.
-
- Declared in: wchar.h
-**/
-size_t
-mbrtowc(
- wchar_t *pwc,
- const char *s,
- size_t n,
- mbstate_t *ps
- )
-{
- int RetVal;
-
- RetVal = DecodeOneStateful(pwc, s, (ssize_t)n, ps);
- return (size_t)RetVal;
-}
-
-/** Convert a multibyte character into a wide character.
-
- If S is not a null pointer, the mbtowc function inspects at most N bytes
- beginning with the byte pointed to by S to determine the number of bytes
- needed to complete the next multibyte character (including any shift
- sequences). If the function determines that the next multibyte character
- is complete and valid, it determines the value of the corresponding wide
- character and then, if Pwc is not a null pointer, stores that value in
- the object pointed to by Pwc. If the corresponding wide character is the
- null wide character, the function is left in the initial conversion state.
-
- @param[out] Pwc Pointer to a wide-character object to receive the converted character.
- @param[in] S Pointer to a multibyte character to convert.
- @param[in] N Maximum number of bytes in a multibyte character.
-
- @return If S is a null pointer, the mbtowc function returns a nonzero or
- zero value, if multibyte character encodings, respectively, do
- or do not have state-dependent encodings. If S is not a null
- pointer, the mbtowc function either returns 0 (if S points to
- the null character), or returns the number of bytes that are
- contained in the converted multibyte character (if the next N or
- fewer bytes form a valid multibyte character), or returns -1
- (if they do not form a valid multibyte character).
-
- In no case will the value returned be greater than N or the value
- of the MB_CUR_MAX macro.
-
- Declared in: stdlib.h
-**/
-int
-mbtowc(
- wchar_t *pwc,
- const char *s,
- size_t n
- )
-{
- return (int)mbrtowc(pwc, s, n, NULL);
-}
-
-/**
-The mbsrtowcs function converts a sequence of multibyte characters that begins in the
-conversion state described by the object pointed to by ps, from the array indirectly
-pointed to by src into a sequence of corresponding wide characters. If dst is not a null
-pointer, the converted characters are stored into the array pointed to by dst. Conversion
-continues up to and including a terminating null character, which is also stored.
-Conversion stops earlier in two cases: when a sequence of bytes is encountered that does
-not form a valid multibyte character, or (if dst is not a null pointer) when len wide
-characters have been stored into the array pointed to by dst. Each conversion takes
-place as if by a call to the mbrtowc function.
-
-If dst is not a null pointer, the pointer object pointed to by src is assigned either a null
-pointer (if conversion stopped due to reaching a terminating null character) or the address
-just past the last multibyte character converted (if any). If conversion stopped due to
-reaching a terminating null character and if dst is not a null pointer, the resulting state
-described is the initial conversion state.
-
- @param[out] dst Pointer to where the resulting wide character sequence is stored.
- @param[in] src Pointer to a pointer to the multibyte character sequence to convert.
- @param[in] len Maximum number of wide characters to be stored into dst.
- @param[in] ps Pointer to a conversion state object.
-
- @return If the input conversion encounters a sequence of bytes that do
- not form a valid multibyte character, an encoding error occurs:
- the mbsrtowcs function stores the value of the macro EILSEQ in
- errno and returns (size_t)(-1); the conversion state is
- unspecified. Otherwise, it returns the number of multibyte
- characters successfully converted, not including the terminating
- null character (if any).
-
- Declared in: wchar.h
-**/
-size_t
-mbsrtowcs(
- wchar_t *dst,
- const char **src,
- size_t len,
- mbstate_t *ps
- )
-{
- int x;
- size_t RetVal = 0;
- const char *MySrc;
-
- if((src == NULL) || (*src == NULL)) {
- return 0;
- }
-
- MySrc = *src;
- for(x = 1 ; (len != 0) && (x > 0); --len) {
- x = DecodeOneStateful(dst, MySrc, MB_LEN_MAX, ps);
- switch(x) {
- case -2: // Incomplete character
- case -1: // Encoding error
- RetVal = (size_t)x;
- break;
- case 0: // Encountered NUL character: done.
- if(dst != NULL) {
- *dst = 0;
- *src = NULL;
- }
- break;
- default: // Successfully decoded a character, continue with next
- MySrc += x;
- if(dst != NULL) {
- ++dst;
- if(x == 4) {
- ++dst;
- }
- *src = MySrc;
- }
- ++RetVal;
- break;
- }
- }
- return RetVal;
-}
-
-/** Convert a multibyte character string into a wide-character string.
-
- The mbstowcs function converts a sequence of multibyte characters that
- begins in the initial shift state from the array pointed to by Src into
- a sequence of corresponding wide characters and stores not more than limit
- wide characters into the array pointed to by Dest. No multibyte
- characters that follow a null character (which is converted into a null
- wide character) will be examined or converted. Each multibyte character
- is converted as if by a call to the mbtowc function, except that the
- conversion state of the mbtowc function is not affected.
-
- No more than Limit elements will be modified in the array pointed to by Dest.
- If copying takes place between objects that overlap,
- the behavior is undefined.
-
- @param[out] Dest Pointer to the array to receive the converted string.
- @param[in] Src Pointer to the string to be converted.
- @param[in] Limit Maximum number of elements to be written to Dest.
-
- @return If an invalid multibyte character is encountered, the mbstowcs
- function returns (size_t)(-1). Otherwise, the mbstowcs function
- returns the number of array elements modified, not including a
- terminating null wide character, if any.
-
- Declared in: stdlib.h
-**/
-size_t
-mbstowcs(
- wchar_t *Dest,
- const char *Src,
- size_t Limit
- )
-{
-
- /* Dest may be NULL */
- /* Src may be NULL */
-
- return mbsrtowcs(Dest, &Src, Limit, NULL);
-}
-
-/** The btowc function determines whether C constitutes a valid single-byte
- character in the initial shift state.
-
- @param[in] C A narrow character to test or convert to wide.
-
- @return The btowc function returns WEOF if c has the value EOF or if
- (unsigned char)C does not constitute a valid single-byte
- character in the initial shift state. Otherwise, it returns the
- wide character representation of that character.
-
- Declared in: wchar.h
-**/
-wint_t
-btowc(int c)
-{
- int x;
- wchar_t Dest;
- wint_t RetVal = WEOF;
-
- if (c == EOF)
- return WEOF;
- x = DecodeOneStateful(&Dest, (const char *)&c, 1, NULL);
- if(x == 0) {
- RetVal = 0;
- }
- else if(x == 1) {
- RetVal = (wint_t)Dest;
- }
- return RetVal;
-}
-
-// ######################## Wide to Narrow Conversions #######################
-
-/**
-If S is a null pointer, the wcrtomb function is equivalent to the call:<BR>
-@verbatim
- wcrtomb(buf, L'\0', ps)
-@endverbatim
-where buf is an internal buffer.
-
-If S is not a null pointer, the wcrtomb function determines the number of bytes needed
-to represent the multibyte character that corresponds to the wide character given by wc
-(including any shift sequences), and stores the multibyte character representation in the
-array whose first element is pointed to by S. At most MB_CUR_MAX bytes are stored. If
-wc is a null wide character, a null byte is stored, preceded by any shift sequence needed
-to restore the initial shift state; the resulting state described is the initial conversion state.
-
- @param[out] Dest Pointer to the location in which to store the resulting
- multibyte character. Otherwise, NULL to reset the
- conversion state.
- @param[in] wchar The wide character to convert.
- @param[in,out] pS Pointer to a conversion state object, or NULL.
-
- @return The wcrtomb function returns the number of bytes stored in the
- array object (including any shift sequences). When wc is not a
- valid wide character, an encoding error occurs: the function
- stores the value of the macro EILSEQ in errno and
- returns (size_t)(-1); the conversion state is unspecified.
-
- Declared in: wchar.h
-**/
-size_t
-wcrtomb(
- char *Dest,
- wchar_t wchar,
- mbstate_t *pS
- )
-{
- size_t RetVal;
-
- /* Dest may be NULL */
- if (Dest == NULL) {
- RetVal = 1;
- }
- else {
- if (wchar == L'\0') {
- *Dest = '\0';
- RetVal = 1;
- }
- else {
- RetVal = EncodeUtf8(Dest, wchar);
- }
- }
- if(pS == NULL) {
- pS = &LocalConvState;
- }
- pS->A = 0; // Set ps to the initial conversion state
-
- return RetVal;
-}
-
-/** Convert a wide character into a multibyte character.
-
- The wctomb function determines the number of bytes needed to represent the
- multibyte character corresponding to the wide character given by WC
- (including any shift sequences), and stores the multibyte character
- representation in the array whose first element is pointed to by S (if S is
- not a null pointer). At most MB_CUR_MAX characters are stored. If WC is a
- null wide character, a null byte is stored, preceded by any shift sequence
- needed to restore the initial shift state, and the function is left in the
- initial conversion state.
-
- @param[out] S Pointer to the object to receive the converted multibyte character.
- @param[in] WC Wide character to be converted.
-
- @return If S is a null pointer, the wctomb function returns a nonzero or
- zero value, if multibyte character encodings, respectively, do or
- do not have state-dependent encodings. If S is not a null pointer,
- the wctomb function returns -1 if the value of WC does not
- correspond to a valid multibyte character, or returns the number
- of bytes that are contained in the multibyte character
- corresponding to the value of WC.
-
- In no case will the value returned be greater than the value of
- the MB_CUR_MAX macro.
-
- Declared in: stdlib.h
-**/
-int
-wctomb(
- char *s,
- wchar_t wchar
- )
-{
- /*
- If s is NULL just return whether MB Characters have state
- dependent encodings -- they don't.
- */
- if (s == NULL)
- return 0;
-
- return (int)wcrtomb(s, wchar, NULL);
-}
-
-/** The wcsrtombs function converts a sequence of wide characters from the array
- indirectly pointed to by Src into a sequence of corresponding multibyte
- characters that begins in the conversion state described by the object
- pointed to by ps.
-
- If Dest is not a null pointer, the converted characters are stored into the
- array pointed to by Dest. Conversion continues up to and including a
- terminating null wide character, which is also stored. Conversion stops
- earlier in two cases: when a wide character is reached that does not
- correspond to a valid multibyte character, or (if Dest is not a null
- pointer) when the next multibyte character would exceed the limit of Limit
- total bytes to be stored into the array pointed to by Dest. Each conversion
- takes place as if by a call to the wcrtomb function.)
-
- If Dest is not a null pointer, the pointer object pointed to by Src is
- assigned either a null pointer (if conversion stopped due to reaching
- a terminating null wide character) or the address just past the last wide
- character converted (if any). If conversion stopped due to reaching a
- terminating null wide character, the resulting state described is the
- initial conversion state.
-
- @param[in] Dest
- @param[in,out] Src
- @param[in] Limit Max number of bytes to store in Dest.
- @param[in,out] ps
-
- @return If conversion stops because a wide character is reached that
- does not correspond to a valid multibyte character, an
- encoding error occurs: the wcsrtombs function stores the
- value of the macro EILSEQ in errno and returns (size_t)(-1);
- the conversion state is unspecified. Otherwise, it returns
- the number of bytes in the resulting multibyte character
- sequence, not including the terminating null character (if any).
-
- Declared in: wchar.h
-**/
-size_t
-wcsrtombs(
- char *Dest,
- const wchar_t **Src,
- size_t Limit,
- mbstate_t *ps
-)
-{
- size_t NumStored;
- ssize_t MaxBytes;
- int count;
- wchar_t InCh;
-
- NumStored = 0;
- MaxBytes = (ssize_t)Limit;
-
- /* Dest may be NULL */
- /* Src may be NULL */
- /* ps appears to be unused */
-
- if (Src == NULL || *Src == NULL)
- return (0);
-
- if (Dest == NULL) {
- NumStored = EstimateWtoM(*Src, ASCII_STRING_MAX, NULL);
- }
- else {
- if((MaxBytes < 0) || (MaxBytes > ASCII_STRING_MAX)) {
- MaxBytes = ASCII_STRING_MAX;
- }
- while ((MaxBytes > 0) && (OneWcToMcLen(InCh = *(*Src)++) <= MaxBytes)) {
- if(InCh == 0) {
- *Src = NULL;
- *Dest = 0; // NUL terminate Dest string, but don't count the NUL
- break;
- }
- count = (int)wcrtomb(Dest, InCh, NULL);
- if(count >= 0) {
- Dest += count;
- MaxBytes -= count;
- NumStored += count;
- }
- else {
- NumStored = (size_t)(-1);
- }
- }
- }
-
-
- return NumStored;
-}
-
-/** Convert a wide-character string into a multibyte character string.
-
- The wcstombs function converts a sequence of wide characters from the
- array pointed to by Src into a sequence of corresponding multibyte
- characters that begins in the initial shift state, and stores these
- multibyte characters into the array pointed to by Dest, stopping if a
- multibyte character would exceed the limit of Limit total bytes or if a
- null character is stored. Each wide character is converted as if by
- a call to the wctomb function, except that the conversion state of
- the wctomb function is not affected.
-
- No more than Limit bytes will be modified in the array pointed to by Dest.
- If copying takes place between objects that overlap,
- the behavior is undefined.
-
- @param[out] Dest Pointer to the array to receive the converted string.
- @param[in] Src Pointer to the string to be converted.
- @param[in] Limit Maximum number of elements to be written to Dest.
-
- @return If a wide character is encountered that does not correspond to a
- valid multibyte character, the wcstombs function returns
- (size_t)(-1). Otherwise, the wcstombs function returns the number
- of bytes modified, not including a terminating null character,
- if any.
-
- Declared in: stdlib.h
-**/
-size_t
-wcstombs(
- char *Dest,
- const wchar_t *Src,
- size_t Limit
-)
-{
- /* Dest may be NULL */
- return wcsrtombs(Dest, &Src, Limit, NULL);
-}
-
-/** The wctob function determines whether C corresponds to a member of the extended
- character set whose multibyte character representation is a single byte when in the initial
- shift state.
-
- wctob needs to be consistent with wcrtomb.
- If wcrtomb says that a character is representable in 1 byte,
- then wctob needs to also represent the character as 1 byte.
-
- @return The wctob function returns EOF if C does not correspond to a multibyte
- character with length one in the initial shift state. Otherwise, it
- returns the single-byte representation of that character as an
- unsigned char converted to an int.
-
- Declared in: wchar.h
-**/
-int
-wctob(wint_t c)
-{
- int RetVal;
-
- RetVal = EOF;
- if(c == 0) {
- RetVal = 0;
- }
- else if (OneWcToMcLen((const wchar_t)c) == 1) {
- RetVal = (int)(c & 0xFF);
- }
- return RetVal;
-}
diff --git a/StdLib/LibC/Locale/multibyte_sb.c b/StdLib/LibC/Locale/multibyte_sb.c
deleted file mode 100644
index 0a73898e61..0000000000
--- a/StdLib/LibC/Locale/multibyte_sb.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/* $NetBSD: multibyte_sb.c,v 1.5 2004/07/21 20:27:46 tshiozak Exp $ */
-
-/*
- * Copyright (c) 1991 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char *sccsid = "from: @(#)multibyte.c 5.1 (Berkeley) 2/18/91";
-#else
-__RCSID("$NetBSD: multibyte_sb.c,v 1.5 2004/07/21 20:27:46 tshiozak Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <assert.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <wchar.h>
-
-/*
- * Stub multibyte character functions.
- * This cheezy implementation is fixed to the native single-byte
- * character set.
- */
-
-/*ARGSUSED*/
-int
-mbsinit(const mbstate_t *ps)
-{
-
- return 1;
-}
-
-/*ARGSUSED*/
-size_t
-mbrlen(
- const char *s,
- size_t n,
- mbstate_t *ps
- )
-{
-
- /* ps appears to be unused */
-
- if (s == NULL || *s == '\0')
- return 0;
- if (n == 0)
- return (size_t)-1;
- return 1;
-}
-
-int
-mblen(
- const char *s,
- size_t n
- )
-{
-
- /* s may be NULL */
-
- return (int)mbrlen(s, n, NULL);
-}
-
-/*ARGSUSED*/
-size_t
-mbrtowc(
- wchar_t *pwc,
- const char *s,
- size_t n,
- mbstate_t *ps
- )
-{
-
- /* pwc may be NULL */
- /* s may be NULL */
- /* ps appears to be unused */
-
- if (s == NULL)
- return 0;
- if (n == 0)
- return (size_t)-1;
- if (pwc)
- *pwc = (wchar_t) *s;
- return (*s != '\0');
-}
-
-int
-mbtowc(
- wchar_t *pwc,
- const char *s,
- size_t n
- )
-{
-
- /* pwc may be NULL */
- /* s may be NULL */
-
- return (int)mbrtowc(pwc, s, n, NULL);
-}
-
-/*ARGSUSED*/
-size_t
-wcrtomb(
- char *s,
- wchar_t wchar,
- mbstate_t *ps
- )
-{
-
- /* s may be NULL */
- /* ps appears to be unused */
-
- if (s == NULL)
- return 1; /* Spec. says this should be 1. */
-
- *s = (char) wchar;
- return 1;
-}
-
-int
-wctomb(
- char *s,
- wchar_t wchar
- )
-{
-
- /*
- If s is NULL just return if MB Characters have state
- dependent encodings.
- */
- if (s == NULL)
- return 0;
-
- return (int)wcrtomb(s, wchar, NULL);
-}
-
-/*ARGSUSED*/
-size_t
-mbsrtowcs(
- wchar_t *pwcs,
- const char **s,
- size_t n,
- mbstate_t *ps
- )
-{
- int count = 0;
-
- /* pwcs may be NULL */
- /* s may be NULL */
- /* ps appears to be unused */
-
- if (!s || !*s)
- return 0;
-
- if (n != 0) {
- if (pwcs != NULL) {
- do {
- if ((*pwcs++ = (wchar_t) *(*s)++) == 0) {
- *s = NULL;
- break;
- }
- count++;
- } while (--n != 0);
- } else {
- do {
- if (((wchar_t)*(*s)++) == 0)
- break;
- count++;
- } while (--n != 0);
- }
- }
-
- return count;
-}
-
-size_t
-mbstowcs(
- wchar_t *pwcs,
- const char *s,
- size_t n
- )
-{
-
- /* pwcs may be NULL */
- /* s may be NULL */
-
- return mbsrtowcs(pwcs, &s, n, NULL);
-}
-
-/*ARGSUSED*/
-size_t
-wcsrtombs(
- char *s,
- const wchar_t **pwcs,
- size_t n,
- mbstate_t *ps
- )
-{
- int count = 0;
-
- /* s may be NULL */
- /* pwcs may be NULL */
- /* ps appears to be unused */
-
- if (pwcs == NULL || *pwcs == NULL)
- return (0);
-
- if (s == NULL) {
- while (*(*pwcs)++ != 0)
- count++;
- return(count);
- }
-
- if (n != 0) {
- do {
- if ((*s++ = (char) *(*pwcs)++) == 0) {
- *pwcs = NULL;
- break;
- }
- count++;
- } while (--n != 0);
- }
-
- return count;
-}
-
-size_t
-wcstombs(
- char *s,
- const wchar_t *pwcs,
- size_t n
- )
-{
-
- /* s may be NULL */
- /* pwcs may be NULL */
-
- return wcsrtombs(s, &pwcs, n, NULL);
-}
-
-wint_t
-btowc(int c)
-{
- if (c == EOF || c & ~0xFF)
- return WEOF;
- return (wint_t)c;
-}
-
-int
-wctob(wint_t c)
-{
- /* wctob needs to be consistent with wcrtomb.
- if wcrtomb says that a character is representable in 1 byte,
- which this implementation always says, then wctob needs to
- also represent the character as 1 byte.
- */
- if (c == WEOF) {
- return EOF;
- }
- return (int)(c & 0xFF);
-}
diff --git a/StdLib/LibC/Locale/nl_langinfo.c b/StdLib/LibC/Locale/nl_langinfo.c
deleted file mode 100644
index cd283df380..0000000000
--- a/StdLib/LibC/Locale/nl_langinfo.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/* $NetBSD: nl_langinfo.c,v 1.11 2005/11/29 03:11:59 christos Exp $ */
-
-/*
- * Written by J.T. Conklin <jtc@NetBSD.org>.
- * Public domain.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: nl_langinfo.c,v 1.11 2005/11/29 03:11:59 christos Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/localedef.h>
-#include <locale.h>
-#include <nl_types.h>
-#include <langinfo.h>
-#include "rune.h"
-#include "runetype.h"
-
-char *
-nl_langinfo(nl_item item)
-{
- const char *s;
-
- switch (item) {
- case D_T_FMT:
- s = _CurrentTimeLocale->d_t_fmt;
- break;
- case D_FMT:
- s = _CurrentTimeLocale->d_fmt;
- break;
- case T_FMT:
- s = _CurrentTimeLocale->t_fmt;
- break;
- case T_FMT_AMPM:
- s = _CurrentTimeLocale->t_fmt_ampm;
- break;
- case AM_STR:
- case PM_STR:
- s = _CurrentTimeLocale->am_pm[(size_t)(item - AM_STR)];
- break;
- case DAY_1:
- case DAY_2:
- case DAY_3:
- case DAY_4:
- case DAY_5:
- case DAY_6:
- case DAY_7:
- s = _CurrentTimeLocale->day[(size_t)(item - DAY_1)];
- break;
- case ABDAY_1:
- case ABDAY_2:
- case ABDAY_3:
- case ABDAY_4:
- case ABDAY_5:
- case ABDAY_6:
- case ABDAY_7:
- s = _CurrentTimeLocale->abday[(size_t)(item - ABDAY_1)];
- break;
- case MON_1:
- case MON_2:
- case MON_3:
- case MON_4:
- case MON_5:
- case MON_6:
- case MON_7:
- case MON_8:
- case MON_9:
- case MON_10:
- case MON_11:
- case MON_12:
- s = _CurrentTimeLocale->mon[(size_t)(item - MON_1)];
- break;
- case ABMON_1:
- case ABMON_2:
- case ABMON_3:
- case ABMON_4:
- case ABMON_5:
- case ABMON_6:
- case ABMON_7:
- case ABMON_8:
- case ABMON_9:
- case ABMON_10:
- case ABMON_11:
- case ABMON_12:
- s = _CurrentTimeLocale->abmon[(size_t)(item - ABMON_1)];
- break;
- case RADIXCHAR:
- s = _CurrentNumericLocale->decimal_point;
- break;
- case THOUSEP:
- s = _CurrentNumericLocale->thousands_sep;
- break;
- case YESSTR:
- s = _CurrentMessagesLocale->yesstr;
- break;
- case YESEXPR:
- s = _CurrentMessagesLocale->yesexpr;
- break;
- case NOSTR:
- s = _CurrentMessagesLocale->nostr;
- break;
- case NOEXPR:
- s = _CurrentMessagesLocale->noexpr;
- break;
- case CRNCYSTR: /* XXX */
- s = "";
- break;
- case CODESET:
-#ifdef WITH_RUNE
- s = _CurrentRuneLocale->rl_codeset;
-#else
- s = NULL;
-#endif
- if (!s)
- s = "";
- break;
- default:
- s = "";
- break;
- }
-
- /* The return value should be really const, but the interface says OW */
- return __UNCONST(s);
-}
diff --git a/StdLib/LibC/Locale/rune.h b/StdLib/LibC/Locale/rune.h
deleted file mode 100644
index 93829e56ea..0000000000
--- a/StdLib/LibC/Locale/rune.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* $NetBSD: rune.h,v 1.11 2006/02/16 19:19:49 tnozaki Exp $ */
-
-/*-
- * Copyright (c) 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)rune.h 8.1 (Berkeley) 6/27/93
- */
-#ifndef _RUNE_H_
-#define _RUNE_H_
-
-#include <LibConfig.h>
-
-#include <stdio.h>
-#include <wchar.h>
-#include "runetype.h"
-
-/*
- * map _RTYPE_x to _CTYPE_x
- *
- * XXX: these should be defined in ctype.h and used in isxxx macros.
- * (note: current isxxx macros use "old" NetBSD masks and
- * _CTYPE_x are not public.)
- */
-#define _CTYPE_A _RUNETYPE_A
-#define _CTYPE_C _RUNETYPE_C
-#define _CTYPE_D _RUNETYPE_D
-#define _CTYPE_G _RUNETYPE_G
-#define _CTYPE_L _RUNETYPE_L
-#define _CTYPE_P _RUNETYPE_P
-#define _CTYPE_S _RUNETYPE_S
-#define _CTYPE_U _RUNETYPE_U
-#define _CTYPE_X _RUNETYPE_X
-#define _CTYPE_B _RUNETYPE_B
-#define _CTYPE_R _RUNETYPE_R
-#define _CTYPE_I _RUNETYPE_I
-#define _CTYPE_T _RUNETYPE_T
-#define _CTYPE_Q _RUNETYPE_Q
-#define _CTYPE_SWM _RUNETYPE_SWM
-#define _CTYPE_SWS _RUNETYPE_SWS
-#define _CTYPE_SW0 _RUNETYPE_SW0
-#define _CTYPE_SW1 _RUNETYPE_SW1
-#define _CTYPE_SW2 _RUNETYPE_SW2
-#define _CTYPE_SW3 _RUNETYPE_SW3
-
-/*
- * Other namespace conversion.
- */
-
-#define rune_t __nbrune_t
-#define _RUNE_ISCACHED _NB_RUNE_ISCACHED
-#define _CACHED_RUNES _NB_CACHED_RUNES
-#define _DEFAULT_INVALID_RUNE _NB_DEFAULT_INVALID_RUNE
-#define _RuneEntry _NBRuneEntry
-#define _RuneRange _NBRuneRange
-#define _RuneLocale _NBRuneLocale
-#define _RUNE_MAGIC_1 _NB_RUNE_MAGIC_1
-#define _RUNE_MODULE_1 _NB_RUNE_MODULE_1
-#define _RUNE_CODESET _NB_RUNE_CODESET
-
-/*
- * global variables
- */
-extern size_t __mb_len_max_runtime;
-#define __MB_LEN_MAX_RUNTIME __mb_len_max_runtime
-
-extern _RuneLocale _DefaultRuneLocale;
-extern _RuneLocale *_CurrentRuneLocale;
-extern const char *_PathLocale;
-
-#define _LOCALE_ALIAS_NAME "locale.alias"
-
-#endif /*! _RUNE_H_ */
diff --git a/StdLib/LibC/Locale/runetype.h b/StdLib/LibC/Locale/runetype.h
deleted file mode 100644
index 2cd563e103..0000000000
--- a/StdLib/LibC/Locale/runetype.h
+++ /dev/null
@@ -1,221 +0,0 @@
-/* $NetBSD: runetype.h,v 1.19 2005/11/29 03:11:59 christos Exp $ */
-
-/*-
- * Copyright (c) 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)runetype.h 8.1 (Berkeley) 6/2/93
- */
-#ifndef _NB_RUNETYPE_H_
-#define _NB_RUNETYPE_H_
-
-#include <sys/EfiCdefs.h>
-#include <sys/types.h>
-
-/* for cross host tools on older systems */
-#ifndef UINT32_C
-/* assumes sizeof(unsigned int)>=4 */
-#define UINT32_C(c) ((uint32_t)(c##U))
-#endif
-
-typedef uint32_t __nbrune_t;
-typedef uint64_t __runepad_t;
-
-#define _NB_CACHED_RUNES (1 << 8) /* Must be a power of 2 */
-#define _NB_RUNE_ISCACHED(c) ((c)>=0 && (c)<_CACHED_RUNES)
-
-#define _NB_DEFAULT_INVALID_RUNE ((__nbrune_t)-3)
-
-/*
- * The lower 8 bits of runetype[] contain the digit value of the rune.
- */
-typedef uint32_t _RuneType;
-#define _RUNETYPE_A UINT32_C(0x00000100) /* Alpha */
-#define _RUNETYPE_C UINT32_C(0x00000200) /* Control */
-#define _RUNETYPE_D UINT32_C(0x00000400) /* Digit */
-#define _RUNETYPE_G UINT32_C(0x00000800) /* Graph */
-#define _RUNETYPE_L UINT32_C(0x00001000) /* Lower */
-#define _RUNETYPE_P UINT32_C(0x00002000) /* Punct */
-#define _RUNETYPE_S UINT32_C(0x00004000) /* Space */
-#define _RUNETYPE_U UINT32_C(0x00008000) /* Upper */
-#define _RUNETYPE_X UINT32_C(0x00010000) /* X digit */
-#define _RUNETYPE_B UINT32_C(0x00020000) /* Blank */
-#define _RUNETYPE_R UINT32_C(0x00040000) /* Print */
-#define _RUNETYPE_I UINT32_C(0x00080000) /* Ideogram */
-#define _RUNETYPE_T UINT32_C(0x00100000) /* Special */
-#define _RUNETYPE_Q UINT32_C(0x00200000) /* Phonogram */
-#define _RUNETYPE_SWM UINT32_C(0xc0000000)/* Mask to get screen width data */
-#define _RUNETYPE_SWS 30 /* Bits to shift to get width */
-#define _RUNETYPE_SW0 UINT32_C(0x00000000) /* 0 width character */
-#define _RUNETYPE_SW1 UINT32_C(0x40000000) /* 1 width character */
-#define _RUNETYPE_SW2 UINT32_C(0x80000000) /* 2 width character */
-#define _RUNETYPE_SW3 UINT32_C(0xc0000000) /* 3 width character */
-
-
-/*
- * rune file format. network endian.
- */
-typedef struct {
- int32_t fre_min; /* First rune of the range */
- int32_t fre_max; /* Last rune (inclusive) of the range */
- int32_t fre_map; /* What first maps to in maps */
- uint32_t fre_pad1; /* backward compatibility */
- __runepad_t fre_pad2; /* backward compatibility */
-} __attribute__((__packed__)) _FileRuneEntry;
-
-
-typedef struct {
- uint32_t frr_nranges; /* Number of ranges stored */
- uint32_t frr_pad1; /* backward compatibility */
- __runepad_t frr_pad2; /* backward compatibility */
-} __attribute__((__packed__)) _FileRuneRange;
-
-
-typedef struct {
- char frl_magic[8]; /* Magic saying what version we are */
- char frl_encoding[32];/* ASCII name of this encoding */
-
- __runepad_t frl_pad1; /* backward compatibility */
- __runepad_t frl_pad2; /* backward compatibility */
- int32_t frl_invalid_rune;
- uint32_t frl_pad3; /* backward compatibility */
-
- _RuneType frl_runetype[_NB_CACHED_RUNES];
- int32_t frl_maplower[_NB_CACHED_RUNES];
- int32_t frl_mapupper[_NB_CACHED_RUNES];
-
- /*
- * The following are to deal with Runes larger than _CACHED_RUNES - 1.
- * Their data is actually contiguous with this structure so as to make
- * it easier to read/write from/to disk.
- */
- _FileRuneRange frl_runetype_ext;
- _FileRuneRange frl_maplower_ext;
- _FileRuneRange frl_mapupper_ext;
-
- __runepad_t frl_pad4; /* backward compatibility */
- int32_t frl_variable_len;/* how long that data is */
- uint32_t frl_pad5; /* backward compatibility */
-
- /* variable size data follows */
-} __attribute__((__packed__)) _FileRuneLocale;
-
-
-/*
- * expanded rune locale declaration. local to the host. host endian.
- */
-typedef struct {
- __nbrune_t re_min; /* First rune of the range */
- __nbrune_t re_max; /* Last rune (inclusive) of the range */
- __nbrune_t re_map; /* What first maps to in maps */
- _RuneType *re_rune_types; /* Array of types in range */
-} _NBRuneEntry;
-
-
-typedef struct {
- uint32_t rr_nranges; /* Number of ranges stored */
- _NBRuneEntry *rr_rune_ranges;
-} _NBRuneRange;
-
-
-/*
- * wctrans stuffs.
- */
-typedef struct _WCTransEntry {
- const char *te_name;
- __nbrune_t *te_cached;
- _NBRuneRange *te_extmap;
-} _WCTransEntry;
-#define _WCTRANS_INDEX_LOWER 0
-#define _WCTRANS_INDEX_UPPER 1
-#define _WCTRANS_NINDEXES 2
-
-/*
- * wctype stuffs.
- */
-typedef struct _WCTypeEntry {
- const char *te_name;
- _RuneType te_mask;
-} _WCTypeEntry;
-#define _WCTYPE_INDEX_ALNUM 0
-#define _WCTYPE_INDEX_ALPHA 1
-#define _WCTYPE_INDEX_BLANK 2
-#define _WCTYPE_INDEX_CNTRL 3
-#define _WCTYPE_INDEX_DIGIT 4
-#define _WCTYPE_INDEX_GRAPH 5
-#define _WCTYPE_INDEX_LOWER 6
-#define _WCTYPE_INDEX_PRINT 7
-#define _WCTYPE_INDEX_PUNCT 8
-#define _WCTYPE_INDEX_SPACE 9
-#define _WCTYPE_INDEX_UPPER 10
-#define _WCTYPE_INDEX_XDIGIT 11
-#define _WCTYPE_NINDEXES 12
-
-/*
- * ctype stuffs
- */
-
-typedef struct _NBRuneLocale {
- /*
- * copied from _FileRuneLocale
- */
- char rl_magic[8]; /* Magic saying what version we are */
- char rl_encoding[32];/* ASCII name of this encoding */
- __nbrune_t rl_invalid_rune;
- _RuneType rl_runetype[_NB_CACHED_RUNES];
- __nbrune_t rl_maplower[_NB_CACHED_RUNES];
- __nbrune_t rl_mapupper[_NB_CACHED_RUNES];
- _NBRuneRange rl_runetype_ext;
- _NBRuneRange rl_maplower_ext;
- _NBRuneRange rl_mapupper_ext;
-
- void *rl_variable;
- size_t rl_variable_len;
-
- /*
- * the following portion is generated on the fly
- */
- const char *rl_codeset;
- struct _citrus_ctype_rec *rl_citrus_ctype;
- _WCTransEntry rl_wctrans[_WCTRANS_NINDEXES];
- _WCTypeEntry rl_wctype[_WCTYPE_NINDEXES];
-} _NBRuneLocale;
-
-
-/* magic number for LC_CTYPE (rune)locale declaration */
-#define _NB_RUNE_MAGIC_1 "RuneCT10" /* Indicates version 0 of RuneLocale */
-
-/* magic string for dynamic link module - type should be like "LC_CTYPE" */
-#define _NB_RUNE_MODULE_1(type) "RuneModule10." type
-
-/* codeset tag */
-#define _NB_RUNE_CODESET "CODESET="
-
-#endif /* !_NB_RUNETYPE_H_ */
diff --git a/StdLib/LibC/Locale/setlocale.c b/StdLib/LibC/Locale/setlocale.c
deleted file mode 100644
index 2012f3c564..0000000000
--- a/StdLib/LibC/Locale/setlocale.c
+++ /dev/null
@@ -1,424 +0,0 @@
-/** @file
- Worker functions for the setlocale function.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1991, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Borman at Krystal Technologies.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- setlocale.c 8.1 (Berkeley) 7/4/93
- * NetBSD: setlocale.c,v 1.50 2006/02/16 19:19:49 tnozaki Exp
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#if defined(_MSC_VER)
- // Disable warnings about assignment within conditional expressions.
- #pragma warning ( disable : 4706 )
-#endif
-
-#define _CTYPE_PRIVATE
-
-#include "namespace.h"
-#include <sys/localedef.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <assert.h>
-#include <limits.h>
-#include <ctype.h>
-#define __SETLOCALE_SOURCE__
-#include <locale.h>
-#include <paths.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include "rune.h"
-#ifdef WITH_RUNE
- #include "rune_local.h"
-#else
- #include "ctypeio.h"
-#endif
-
-#ifdef CITRUS
- #include <citrus/citrus_namespace.h>
- #include <citrus/citrus_region.h>
- #include <citrus/citrus_lookup.h>
- #include <citrus/citrus_bcs.h>
-#else
- #include "aliasname_local.h"
- #define _lookup_alias(p, a, b, s, c) __unaliasname((p), (a), (b), (s))
- #define _bcs_strcasecmp(a, b) strcasecmp((a), (b))
-#endif
-
-#define _LOCALE_SYM_FORCE "/force"
-
-#ifndef WITH_RUNE
- const char *_PathLocale = NULL;
-#endif
-
-/** Category names for getenv(). **/
-static const char *const categories[_LC_LAST] = {
- "LC_ALL",
- "LC_COLLATE",
- "LC_CTYPE",
- "LC_MONETARY",
- "LC_NUMERIC",
- "LC_TIME",
- "LC_MESSAGES"
-};
-
-/** Current locales for each category. **/
-static char current_categories[_LC_LAST][32] = {
- "C",
- "C",
- "C",
- "C",
- "C",
- "C",
- "C"
-};
-
-/*
- * The locales we are going to try and load
- */
-static char new_categories[_LC_LAST][32];
-
-static char current_locale_string[_LC_LAST * 33];
-
-static char *currentlocale(void);
-static void revert_to_default(int);
-static int force_locale_enable(int);
-static int load_locale_sub(int, const char *, int);
-static char *loadlocale(int);
-static const char *__get_locale_env(int);
-
-char *
-__setlocale(int category, const char *locale)
-{
- int i, loadlocale_success;
- size_t len;
- const char *env, *r;
-
- //if (issetugid() ||
- // (!_PathLocale && !(_PathLocale = getenv("PATH_LOCALE"))))
- // _PathLocale = _PATH_LOCALE;
-
- if (category < 0 || category >= _LC_LAST)
- return (NULL);
-
- if (!locale)
- return (category ?
- current_categories[category] : currentlocale());
-
- /*
- * Default to the current locale for everything.
- */
- for (i = 1; i < _LC_LAST; ++i)
- (void)strncpyX(new_categories[i], current_categories[i],
- sizeof(new_categories[i]));
-
- /*
- * Now go fill up new_categories from the locale argument
- */
- if (!*locale) {
- if (category == LC_ALL) {
- for (i = 1; i < _LC_LAST; ++i) {
- env = __get_locale_env(i);
- (void)strncpyX(new_categories[i], env,
- sizeof(new_categories[i]));
- }
- }
- else {
- env = __get_locale_env(category);
- (void)strncpyX(new_categories[category], env,
- sizeof(new_categories[category]));
- }
- } else if (category) {
- (void)strncpyX(new_categories[category], locale,
- sizeof(new_categories[category]));
- } else {
- if ((r = strchr(locale, '/')) == 0) {
- for (i = 1; i < _LC_LAST; ++i) {
- (void)strncpyX(new_categories[i], locale,
- sizeof(new_categories[i]));
- }
- } else {
- for (i = 1;;) {
- _DIAGASSERT(*r == '/' || *r == 0);
- _DIAGASSERT(*locale != 0);
- if (*locale == '/')
- return (NULL); /* invalid format. */
- len = r - locale;
- if (len + 1 > sizeof(new_categories[i]))
- return (NULL); /* too long */
- (void)memcpy(new_categories[i], locale, len);
- new_categories[i][len] = '\0';
- if (*r == 0)
- break;
- _DIAGASSERT(*r == '/');
- if (*(locale = ++r) == 0)
- /* slash followed by NUL */
- return (NULL);
- /* skip until NUL or '/' */
- while (*r && *r != '/')
- r++;
- if (++i == _LC_LAST)
- return (NULL); /* too many slashes. */
- }
- if (i + 1 != _LC_LAST)
- return (NULL); /* too few slashes. */
- }
- }
-
- if (category)
- return (loadlocale(category));
-
- loadlocale_success = 0;
- for (i = 1; i < _LC_LAST; ++i) {
- if (loadlocale(i) != NULL)
- loadlocale_success = 1;
- }
-
- /*
- * If all categories failed, return NULL; we don't need to back
- * changes off, since none happened.
- */
- if (!loadlocale_success)
- return NULL;
-
- return (currentlocale());
-}
-
-static char *
-currentlocale()
-{
- int i;
-
- (void)strncpyX(current_locale_string, current_categories[1],
- sizeof(current_locale_string));
-
- for (i = 2; i < _LC_LAST; ++i)
- if (strcmp(current_categories[1], current_categories[i])) {
- (void)snprintf(current_locale_string,
- sizeof(current_locale_string), "%s/%s/%s/%s/%s/%s",
- current_categories[1], current_categories[2],
- current_categories[3], current_categories[4],
- current_categories[5], current_categories[6]);
- break;
- }
- return (current_locale_string);
-}
-
-static void
-revert_to_default(int category)
-{
- switch (category) {
- case LC_CTYPE:
-#ifdef WITH_RUNE
- (void)_xpg4_setrunelocale("C");
- (void)__runetable_to_netbsd_ctype("C");
-#else
- if (_cClass != _C_CharClassTable) {
- /* LINTED const castaway */
- free((void *)_cClass);
- _cClass = _C_CharClassTable;
- }
- if (_uConvT != _C_ToUpperTable) {
- /* LINTED const castaway */
- free((void *)_uConvT);
- _uConvT = _C_ToUpperTable;
- }
- if (_lConvT != _C_ToLowerTable) {
- /* LINTED const castaway */
- free((void *)_lConvT);
- _lConvT = _C_ToLowerTable;
- }
-#endif
- break;
- case LC_MESSAGES:
- case LC_COLLATE:
- case LC_MONETARY:
- case LC_NUMERIC:
- case LC_TIME:
- break;
- }
-}
-
-static int
-force_locale_enable(int category)
-{
- revert_to_default(category);
-
- return 0;
-}
-
-static int
-load_locale_sub(
- int category,
- const char *locname,
- int isspecial
- )
-{
- char name[PATH_MAX];
-
- /* check for the default locales */
- if (!strcmp(new_categories[category], "C") ||
- !strcmp(new_categories[category], "POSIX")) {
- revert_to_default(category);
- return 0;
- }
-
- /* check whether special symbol */
- if (isspecial && _bcs_strcasecmp(locname, _LOCALE_SYM_FORCE) == 0)
- return force_locale_enable(category);
-
- /* sanity check */
- if (strchr(locname, '/') != NULL)
- return -1;
-
- (void)snprintf(name, sizeof(name), "%s/%s/%s",
- _PathLocale, locname, categories[category]);
-
- switch (category) {
- case LC_CTYPE:
-#ifdef WITH_RUNE
- if (_xpg4_setrunelocale(__UNCONST(locname)))
- return -1;
- if (__runetable_to_netbsd_ctype(locname)) {
- /* very unfortunate, but need to go to "C" locale */
- revert_to_default(category);
- return -1;
- }
-#else
- if (!__loadctype(name))
- return -1;
-#endif
- break;
-
- case LC_MESSAGES:
- /*
- * XXX we don't have LC_MESSAGES support yet,
- * but catopen may use the value of LC_MESSAGES category.
- * so return successfully if locale directory is present.
- */
- (void)snprintf(name, sizeof(name), "%s/%s",
- _PathLocale, locname);
- /* local */
- {
- struct stat st;
- if (stat(name, &st) < 0)
- return -1;
- if (!S_ISDIR(st.st_mode))
- return -1;
- }
- break;
-
- case LC_COLLATE:
- case LC_MONETARY:
- case LC_NUMERIC:
- case LC_TIME:
- return -1;
- }
-
- return 0;
-}
-
-static char *
-loadlocale(int category)
-{
- //char aliaspath[PATH_MAX], loccat[PATH_MAX], buf[PATH_MAX];
- //const char *alias;
-
- _DIAGASSERT(0 < category && category < _LC_LAST);
-
- if (strcmp(new_categories[category], current_categories[category]) == 0)
- return (current_categories[category]);
-
- /* (1) non-aliased file */
- if (!load_locale_sub(category, new_categories[category], 0))
- goto success;
-
- ///* (2) lookup locname/catname type alias */
- //(void)snprintf(aliaspath, sizeof(aliaspath),
- // "%s/" _LOCALE_ALIAS_NAME, _PathLocale);
- //(void)snprintf(loccat, sizeof(loccat), "%s/%s",
- // new_categories[category], categories[category]);
- //alias = _lookup_alias(aliaspath, loccat, buf, sizeof(buf),
- // _LOOKUP_CASE_SENSITIVE);
- //if (!load_locale_sub(category, alias, 1))
- // goto success;
-
- ///* (3) lookup locname type alias */
- //alias = _lookup_alias(aliaspath, new_categories[category],
- // buf, sizeof(buf), _LOOKUP_CASE_SENSITIVE);
- //if (!load_locale_sub(category, alias, 1))
- // goto success;
-
- return NULL;
-
-success:
- (void)strncpyX(current_categories[category],
- new_categories[category],
- sizeof(current_categories[category]));
- return current_categories[category];
-}
-
-static const char *
-__get_locale_env(int category)
-{
- const char *env;
-
- //_DIAGASSERT(category != LC_ALL);
-
- ///* 1. check LC_ALL. */
- //env = getenv(categories[0]);
-
- ///* 2. check LC_* */
- //if (!env || !*env)
- // env = getenv(categories[category]);
-
- ///* 3. check LANG */
- //if (!env || !*env)
- // env = getenv("LANG");
-
- ///* 4. if none is set, fall to "C" */
- //if (!env || !*env || strchr(env, '/'))
- env = "C";
-
- return env;
-}
diff --git a/StdLib/LibC/Locale/setlocale1.c b/StdLib/LibC/Locale/setlocale1.c
deleted file mode 100644
index e315ec8ab0..0000000000
--- a/StdLib/LibC/Locale/setlocale1.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/** @file
- Single-byte character version of the setlocale function.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c)1999 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- * NetBSD: setlocale1.c,v 1.2 2003/03/11 17:23:07 tshiozak Exp
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include "namespace.h"
-#define __SETLOCALE_SOURCE__
-#include <locale.h>
-#include "rune.h"
-
-__warn_references(setlocale,
- "warning: reference to compatibility setlocale(); include <locale.h> for correct reference")
-
-/*
- * Preparation for the future import of multibyte locale.
- * This function will ensure binary compatibility for old executables.
- */
-char *
-setlocale(int category, const char *locale)
-{
- /* locale may be NULL */
-
- __mb_len_max_runtime = 1;
- return __setlocale(category, locale);
-}
diff --git a/StdLib/LibC/Locale/setlocale32.c b/StdLib/LibC/Locale/setlocale32.c
deleted file mode 100644
index 68c43bba0d..0000000000
--- a/StdLib/LibC/Locale/setlocale32.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* $NetBSD: setlocale32.c,v 1.2 2003/03/11 17:23:07 tshiozak Exp $ */
-
-/*-
- * Copyright (c)1999 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: setlocale32.c,v 1.2 2003/03/11 17:23:07 tshiozak Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-#define __SETLOCALE_SOURCE__
-#include <locale.h>
-#include "rune.h"
-
-char *
-__setlocale_mb_len_max_32(int category, const char *locale)
-{
- /* locale may be NULL */
-
- __mb_len_max_runtime = 32;
- return __setlocale(category, locale);
-}
diff --git a/StdLib/LibC/Locale/wcscoll.c b/StdLib/LibC/Locale/wcscoll.c
deleted file mode 100644
index 5bc72fae1d..0000000000
--- a/StdLib/LibC/Locale/wcscoll.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* $NetBSD: wcscoll.c,v 1.1 2003/03/02 22:18:16 tshiozak Exp $ */
-
-/*-
- * Copyright (c)2003 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: wcscoll.c,v 1.1 2003/03/02 22:18:16 tshiozak Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <assert.h>
-#include <wchar.h>
-
-/*
- * Compare strings with using collating information.
- */
-int
-wcscoll(const wchar_t *s1, const wchar_t *s2)
-{
- /* XXX: LC_COLLATE should be implemented. */
- return (wcscmp(s1, s2));
-}
diff --git a/StdLib/LibC/Locale/wcsftime.c b/StdLib/LibC/Locale/wcsftime.c
deleted file mode 100644
index 2eb19ca5ad..0000000000
--- a/StdLib/LibC/Locale/wcsftime.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* $NetBSD: wcsftime.c,v 1.2 2006/10/04 14:19:16 tnozaki Exp $ */
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-__FBSDID("$FreeBSD: src/lib/libc/locale/wcsftime.c,v 1.4 2004/04/07 09:47:56 tjr Exp $");
-#else
-__RCSID("$NetBSD: wcsftime.c,v 1.2 2006/10/04 14:19:16 tnozaki Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <errno.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <time.h>
-#include <wchar.h>
-#include <machine/int_limits.h>
-
-/*
- * Convert date and time to a wide-character string.
- *
- * This is the wide-character counterpart of strftime(). So that we do not
- * have to duplicate the code of strftime(), we convert the format string to
- * multibyte, call strftime(), then convert the result back into wide
- * characters.
- *
- * This technique loses in the presence of stateful multibyte encoding if any
- * of the conversions in the format string change conversion state. When
- * stateful encoding is implemented, we will need to reset the state between
- * format specifications in the format string.
- */
-size_t
-wcsftime(wchar_t *wcs, size_t maxsize,
- const wchar_t *format, const struct tm *timeptr)
-{
- char *dst, *dstp, *sformat;
- size_t n, sflen;
- int sverrno;
-
- sformat = dst = NULL;
-
- /*
- * Convert the supplied format string to a multibyte representation
- * for strftime(), which only handles single-byte characters.
- */
- sflen = wcstombs(NULL, format, 0);
- if (sflen == (size_t)-1)
- goto error;
- if ((sformat = malloc(sflen + 1)) == NULL)
- goto error;
- wcstombs(sformat, format, sflen + 1);
-
- /*
- * Allocate memory for longest multibyte sequence that will fit
- * into the caller's buffer and call strftime() to fill it.
- * Then, copy and convert the result back into wide characters in
- * the caller's buffer.
- */
- if (SIZE_T_MAX / MB_CUR_MAX <= maxsize) {
- /* maxsize is preposturously large - avoid int. overflow. */
- errno = EINVAL;
- goto error;
- }
- dst = malloc(maxsize * MB_CUR_MAX);
- if (dst == NULL)
- goto error;
- if (strftime(dst, maxsize, sformat, timeptr) == 0)
- goto error;
- dstp = dst;
- n = mbstowcs(wcs, dstp, maxsize);
- if (n == (size_t)-2 || n == (size_t)-1)
- goto error;
-
- free(sformat);
- free(dst);
- return n;
-
-error:
- sverrno = errno;
- free(sformat);
- free(dst);
- errno = sverrno;
- return 0;
-}
diff --git a/StdLib/LibC/Locale/wcstod.c b/StdLib/LibC/Locale/wcstod.c
deleted file mode 100644
index 0ee06bd86f..0000000000
--- a/StdLib/LibC/Locale/wcstod.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* $NetBSD: wcstod.c,v 1.12 2006/04/16 17:03:32 christos Exp $ */
-
-/*-
- * Copyright (c)2006 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: wcstod.c,v 1.12 2006/04/16 17:03:32 christos Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <assert.h>
-#include <errno.h>
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-#include <wctype.h>
-
-//#ifdef __weak_alias
-//__strong_alias(_wcstod,wcstod)
-//__weak_alias(wcstod,_wcstod)
-//#endif
-
-#define _FUNCNAME wcstod
-#define _RETURN_TYPE double
-#define _STRTOD_FUNC strtod
-
-#include "_wcstod.h"
diff --git a/StdLib/LibC/Locale/wcstof.c b/StdLib/LibC/Locale/wcstof.c
deleted file mode 100644
index 36b06a566d..0000000000
--- a/StdLib/LibC/Locale/wcstof.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* $NetBSD: wcstof.c,v 1.2 2006/04/16 17:03:32 christos Exp $ */
-
-/*-
- * Copyright (c)2006 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: wcstof.c,v 1.2 2006/04/16 17:03:32 christos Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <assert.h>
-#include <errno.h>
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#ifdef __weak_alias
-__strong_alias(_wcstof,wcstof)
-__weak_alias(wcstof,_wcstof)
-#endif
-
-#define _FUNCNAME wcstof
-#define _RETURN_TYPE float
-#define _STRTOD_FUNC strtof
-
-#include "_wcstod.h"
diff --git a/StdLib/LibC/Locale/wcstoimax.c b/StdLib/LibC/Locale/wcstoimax.c
deleted file mode 100644
index 078b10b764..0000000000
--- a/StdLib/LibC/Locale/wcstoimax.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/** @file
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c)2003 Citrus Project,
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- NetBSD: wcstoimax.c,v 1.2 2004/06/21 21:20:43 itojun Exp
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: wcstoimax.c,v 1.2 2004/06/21 21:20:43 itojun Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <inttypes.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include "__wctoint.h"
-
-#define _FUNCNAME wcstoimax
-#define __wINT intmax_t
-#define __wINT_MIN INTMAX_MIN
-#define __wINT_MAX INTMAX_MAX
-
-#include "_wcstol.h"
diff --git a/StdLib/LibC/Locale/wcstol.c b/StdLib/LibC/Locale/wcstol.c
deleted file mode 100644
index f7d92ae077..0000000000
--- a/StdLib/LibC/Locale/wcstol.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/** @file
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c)2003 Citrus Project,
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- NetBSD: wcstol.c,v 1.3 2004/06/21 21:20:43 itojun Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: wcstol.c,v 1.3 2004/06/21 21:20:43 itojun Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include "__wctoint.h"
-
-#define _FUNCNAME wcstol
-#define __wINT long int
-#define __wINT_MIN LONG_MIN
-#define __wINT_MAX LONG_MAX
-
-#include "_wcstol.h"
diff --git a/StdLib/LibC/Locale/wcstold.c b/StdLib/LibC/Locale/wcstold.c
deleted file mode 100644
index 4e557be13f..0000000000
--- a/StdLib/LibC/Locale/wcstold.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* $NetBSD: wcstold.c,v 1.2 2006/04/16 17:03:32 christos Exp $ */
-
-/*-
- * Copyright (c)2006 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: wcstold.c,v 1.2 2006/04/16 17:03:32 christos Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <assert.h>
-#include <errno.h>
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#ifdef __weak_alias
-__strong_alias(_wcstold,wcstold)
-__weak_alias(wcstold,_wcstold)
-#endif
-
-#define _FUNCNAME wcstold
-#define _RETURN_TYPE long double
-#define _STRTOD_FUNC strtold
-
-#include "_wcstod.h"
diff --git a/StdLib/LibC/Locale/wcstoll.c b/StdLib/LibC/Locale/wcstoll.c
deleted file mode 100644
index ea0e646c19..0000000000
--- a/StdLib/LibC/Locale/wcstoll.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/** @file
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c)2003 Citrus Project,
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- NetBSD: wcstoll.c,v 1.2 2004/06/21 21:20:43 itojun Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: wcstoll.c,v 1.2 2004/06/21 21:20:43 itojun Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include "__wctoint.h"
-
-#define _FUNCNAME wcstoll
-#define __wINT /* LONGLONG */ long long int
-#define __wINT_MIN LLONG_MIN
-#define __wINT_MAX LLONG_MAX
-
-#include "_wcstol.h"
diff --git a/StdLib/LibC/Locale/wcstoul.c b/StdLib/LibC/Locale/wcstoul.c
deleted file mode 100644
index fd7059fdb5..0000000000
--- a/StdLib/LibC/Locale/wcstoul.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/** @file
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c)2003 Citrus Project,
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- NetBSD: wcstoul.c,v 1.3 2004/06/21 21:20:43 itojun Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: wcstoul.c,v 1.3 2004/06/21 21:20:43 itojun Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include "__wctoint.h"
-
-#define _FUNCNAME wcstoul
-#define __wINT long int
-#define __wUINT unsigned long int
-#define __wUINT_MAX ULONG_MAX
-
-#include "_wcstoul.h"
diff --git a/StdLib/LibC/Locale/wcstoull.c b/StdLib/LibC/Locale/wcstoull.c
deleted file mode 100644
index f257104b2c..0000000000
--- a/StdLib/LibC/Locale/wcstoull.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/** @file
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c)2003 Citrus Project,
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- NetBSD: wcstoull.c,v 1.2 2004/06/21 21:20:43 itojun Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: wcstoull.c,v 1.2 2004/06/21 21:20:43 itojun Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include "__wctoint.h"
-
-#define _FUNCNAME wcstoull
-#define __wINT long long int
-#define __wUINT /* LONGLONG */ unsigned long long int
-#define __wUINT_MAX ULLONG_MAX
-
-#include "_wcstoul.h"
diff --git a/StdLib/LibC/Locale/wcstoumax.c b/StdLib/LibC/Locale/wcstoumax.c
deleted file mode 100644
index 53a0de0f9e..0000000000
--- a/StdLib/LibC/Locale/wcstoumax.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/** @file
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c)2003 Citrus Project,
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- NetBSD: wcstoumax.c,v 1.2 2004/06/21 21:20:43 itojun Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: wcstoumax.c,v 1.2 2004/06/21 21:20:43 itojun Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <inttypes.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include "__wctoint.h"
-
-#define _FUNCNAME wcstoumax
-#define __wINT intmax_t
-#define __wUINT uintmax_t
-#define __wUINT_MAX UINTMAX_MAX
-
-#include "_wcstoul.h"
diff --git a/StdLib/LibC/Locale/wcsxfrm.c b/StdLib/LibC/Locale/wcsxfrm.c
deleted file mode 100644
index 288a5f9a46..0000000000
--- a/StdLib/LibC/Locale/wcsxfrm.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* $NetBSD: wcsxfrm.c,v 1.2 2006/10/15 16:14:08 christos Exp $ */
-
-/*-
- * Copyright (c)2003 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: wcsxfrm.c,v 1.2 2006/10/15 16:14:08 christos Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <assert.h>
-#include <wchar.h>
-
-/*
- * Compare strings with using collating information.
- */
-size_t
-wcsxfrm(
- wchar_t *s1,
- const wchar_t *s2,
- size_t n
- )
-{
- size_t len;
-
- /* XXX: LC_COLLATE should be implemented. */
-
- len = wcslen(s2);
- if (len<n)
- wcscpy(s1, s2);
- else {
- /*
- * SUSv3 says:
- * If the value returned is n or more, the contents
- * of the array pointed to by ws1 are unspecified.
- */
- /* thus, do nothing */
- }
-
- return (len);
-}
diff --git a/StdLib/LibC/Main/Arm/fixunsdfsi.c b/StdLib/LibC/Main/Arm/fixunsdfsi.c
deleted file mode 100644
index a63d22059d..0000000000
--- a/StdLib/LibC/Main/Arm/fixunsdfsi.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
-University of Illinois/NCSA
-Open Source License
-
-Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
-
-All rights reserved.
-
-Developed by:
-
- LLVM Team
-
- University of Illinois at Urbana-Champaign
-
- http://llvm.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal with
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimers.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimers in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the names of the LLVM Team, University of Illinois at
- Urbana-Champaign, nor the names of its contributors may be used to
- endorse or promote products derived from this Software without specific
- prior written permission.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
-SOFTWARE.
-**/
-
-#include "int_lib.h"
-
-/* Returns: convert a to a unsigned int, rounding toward zero.
- * Negative values all become zero.
- */
-
-/* Assumption: double is a IEEE 64 bit floating point type
- * su_int is a 32 bit integral type
- * value in double is representable in su_int or is negative
- * (no range checking performed)
- */
-
-/* seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm */
-
-ARM_EABI_FNALIAS(d2uiz, fixunsdfsi)
-
-COMPILER_RT_ABI su_int
-__fixunsdfsi(double a)
-{
- double_bits fb;
- fb.f = a;
- int e = ((fb.u.s.high & 0x7FF00000) >> 20) - 1023;
- if (e < 0 || (fb.u.s.high & 0x80000000))
- return 0;
- return (
- 0x80000000u |
- ((fb.u.s.high & 0x000FFFFF) << 11) |
- (fb.u.s.low >> 21)
- ) >> (31 - e);
-}
diff --git a/StdLib/LibC/Main/Arm/floatunsidf.c b/StdLib/LibC/Main/Arm/floatunsidf.c
deleted file mode 100644
index 5f5fb1e7e5..0000000000
--- a/StdLib/LibC/Main/Arm/floatunsidf.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
-University of Illinois/NCSA
-Open Source License
-
-Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
-
-All rights reserved.
-
-Developed by:
-
- LLVM Team
-
- University of Illinois at Urbana-Champaign
-
- http://llvm.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal with
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimers.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimers in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the names of the LLVM Team, University of Illinois at
- Urbana-Champaign, nor the names of its contributors may be used to
- endorse or promote products derived from this Software without specific
- prior written permission.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
-SOFTWARE.
-**/
-
-#define DOUBLE_PRECISION
-#include "fp_lib.h"
-
-#include "int_lib.h"
-
-ARM_EABI_FNALIAS(ui2d, floatunsidf)
-
-COMPILER_RT_ABI fp_t
-__floatunsidf(unsigned int a) {
-
- const int aWidth = sizeof a * CHAR_BIT;
-
- // Handle zero as a special case to protect clz
- if (a == 0) return fromRep(0);
-
- // Exponent of (fp_t)a is the width of abs(a).
- const int exponent = (aWidth - 1) - __builtin_clz(a);
- rep_t result;
-
- // Shift a into the significand field and clear the implicit bit.
- const int shift = significandBits - exponent;
- result = (rep_t)a << shift ^ implicitBit;
-
- // Insert the exponent
- result += (rep_t)(exponent + exponentBias) << significandBits;
- return fromRep(result);
-}
diff --git a/StdLib/LibC/Main/Arm/flt_rounds.c b/StdLib/LibC/Main/Arm/flt_rounds.c
deleted file mode 100644
index 7e052cc337..0000000000
--- a/StdLib/LibC/Main/Arm/flt_rounds.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* $NetBSD: flt_rounds.c,v 1.3 2006/02/25 00:58:35 wiz Exp $ */
-
-/*
- * Copyright (c) 1996 Mark Brinicombe
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Mark Brinicombe
- * for the NetBSD Project.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: flt_rounds.c,v 1.3 2006/02/25 00:58:35 wiz Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <sys/types.h>
-//#include <ieeefp.h>
-
-static const int map[] = {
- 1, /* round to nearest */
- 2, /* round to positive infinity */
- 3, /* round to negative infinity */
- 0 /* round to zero */
-};
-
-/*
- * Return the current FP rounding mode
- *
- * Returns:
- * 0 - round to zero
- * 1 - round to nearest
- * 2 - round to postive infinity
- * 3 - round to negative infinity
- *
- * ok all we need to do is get the current FP rounding mode
- * index our map table and return the appropriate value.
- *
- * HOWEVER:
- * The ARM FPA codes the rounding mode into the actual FP instructions
- * so there is no such thing as a global rounding mode.
- * The default is round to nearest if rounding is not explicitly specified.
- * FP instructions generated by GCC will not explicitly specify a rounding
- * mode.
- *
- * So the best we can do it to return the rounding mode FP instructions
- * use if rounding is not specified which is round to nearest.
- *
- * This could change in the future with new floating point emulators or
- * soft float FP libraries.
- */
-
-int __flt_rounds(void);
-
-int
-__flt_rounds()
-{
- //return(map[fpgetround()]);
- return 1; //TODO: FixMe
-}
diff --git a/StdLib/LibC/Main/Arm/fp_lib.h b/StdLib/LibC/Main/Arm/fp_lib.h
deleted file mode 100644
index 2b46cfab0c..0000000000
--- a/StdLib/LibC/Main/Arm/fp_lib.h
+++ /dev/null
@@ -1,282 +0,0 @@
-/**
-University of Illinois/NCSA
-Open Source License
-
-Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
-
-All rights reserved.
-
-Developed by:
-
- LLVM Team
-
- University of Illinois at Urbana-Champaign
-
- http://llvm.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal with
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimers.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimers in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the names of the LLVM Team, University of Illinois at
- Urbana-Champaign, nor the names of its contributors may be used to
- endorse or promote products derived from this Software without specific
- prior written permission.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
-SOFTWARE.
-**/
-
-#ifndef FP_LIB_HEADER
-#define FP_LIB_HEADER
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <limits.h>
-#include "int_lib.h"
-
-#if defined SINGLE_PRECISION
-
-typedef uint32_t rep_t;
-typedef int32_t srep_t;
-typedef float fp_t;
-#define REP_C UINT32_C
-#define significandBits 23
-
-static inline int rep_clz(rep_t a) {
- return __builtin_clz(a);
-}
-
-// 32x32 --> 64 bit multiply
-static inline void wideMultiply(rep_t a, rep_t b, rep_t *hi, rep_t *lo) {
- const uint64_t product = (uint64_t)a*b;
- *hi = product >> 32;
- *lo = product;
-}
-COMPILER_RT_ABI fp_t __addsf3(fp_t a, fp_t b);
-
-#elif defined DOUBLE_PRECISION
-
-typedef uint64_t rep_t;
-typedef int64_t srep_t;
-typedef double fp_t;
-#define REP_C UINT64_C
-#define significandBits 52
-
-static inline int rep_clz(rep_t a) {
-#if defined __LP64__
- return __builtin_clzl(a);
-#else
- if (a & REP_C(0xffffffff00000000))
- return __builtin_clz(a >> 32);
- else
- return 32 + __builtin_clz(a & REP_C(0xffffffff));
-#endif
-}
-
-#define loWord(a) (a & 0xffffffffU)
-#define hiWord(a) (a >> 32)
-
-// 64x64 -> 128 wide multiply for platforms that don't have such an operation;
-// many 64-bit platforms have this operation, but they tend to have hardware
-// floating-point, so we don't bother with a special case for them here.
-static inline void wideMultiply(rep_t a, rep_t b, rep_t *hi, rep_t *lo) {
- // Each of the component 32x32 -> 64 products
- const uint64_t plolo = loWord(a) * loWord(b);
- const uint64_t plohi = loWord(a) * hiWord(b);
- const uint64_t philo = hiWord(a) * loWord(b);
- const uint64_t phihi = hiWord(a) * hiWord(b);
- // Sum terms that contribute to lo in a way that allows us to get the carry
- const uint64_t r0 = loWord(plolo);
- const uint64_t r1 = hiWord(plolo) + loWord(plohi) + loWord(philo);
- *lo = r0 + (r1 << 32);
- // Sum terms contributing to hi with the carry from lo
- *hi = hiWord(plohi) + hiWord(philo) + hiWord(r1) + phihi;
-}
-#undef loWord
-#undef hiWord
-
-COMPILER_RT_ABI fp_t __adddf3(fp_t a, fp_t b);
-
-#elif defined QUAD_PRECISION
-#if __LDBL_MANT_DIG__ == 113
-#define CRT_LDBL_128BIT
-typedef __uint128_t rep_t;
-typedef __int128_t srep_t;
-typedef long double fp_t;
-#define REP_C (__uint128_t)
-// Note: Since there is no explicit way to tell compiler the constant is a
-// 128-bit integer, we let the constant be casted to 128-bit integer
-#define significandBits 112
-
-static inline int rep_clz(rep_t a) {
- const union
- {
- __uint128_t ll;
-#if _YUGA_BIG_ENDIAN
- struct { uint64_t high, low; } s;
-#else
- struct { uint64_t low, high; } s;
-#endif
- } uu = { .ll = a };
-
- uint64_t word;
- uint64_t add;
-
- if (uu.s.high){
- word = uu.s.high;
- add = 0;
- }
- else{
- word = uu.s.low;
- add = 64;
- }
- return __builtin_clzll(word) + add;
-}
-
-#define Word_LoMask UINT64_C(0x00000000ffffffff)
-#define Word_HiMask UINT64_C(0xffffffff00000000)
-#define Word_FullMask UINT64_C(0xffffffffffffffff)
-#define Word_1(a) (uint64_t)((a >> 96) & Word_LoMask)
-#define Word_2(a) (uint64_t)((a >> 64) & Word_LoMask)
-#define Word_3(a) (uint64_t)((a >> 32) & Word_LoMask)
-#define Word_4(a) (uint64_t)(a & Word_LoMask)
-
-// 128x128 -> 256 wide multiply for platforms that don't have such an operation;
-// many 64-bit platforms have this operation, but they tend to have hardware
-// floating-point, so we don't bother with a special case for them here.
-static inline void wideMultiply(rep_t a, rep_t b, rep_t *hi, rep_t *lo) {
-
- const uint64_t product11 = Word_1(a) * Word_1(b);
- const uint64_t product12 = Word_1(a) * Word_2(b);
- const uint64_t product13 = Word_1(a) * Word_3(b);
- const uint64_t product14 = Word_1(a) * Word_4(b);
- const uint64_t product21 = Word_2(a) * Word_1(b);
- const uint64_t product22 = Word_2(a) * Word_2(b);
- const uint64_t product23 = Word_2(a) * Word_3(b);
- const uint64_t product24 = Word_2(a) * Word_4(b);
- const uint64_t product31 = Word_3(a) * Word_1(b);
- const uint64_t product32 = Word_3(a) * Word_2(b);
- const uint64_t product33 = Word_3(a) * Word_3(b);
- const uint64_t product34 = Word_3(a) * Word_4(b);
- const uint64_t product41 = Word_4(a) * Word_1(b);
- const uint64_t product42 = Word_4(a) * Word_2(b);
- const uint64_t product43 = Word_4(a) * Word_3(b);
- const uint64_t product44 = Word_4(a) * Word_4(b);
-
- const __uint128_t sum0 = (__uint128_t)product44;
- const __uint128_t sum1 = (__uint128_t)product34 +
- (__uint128_t)product43;
- const __uint128_t sum2 = (__uint128_t)product24 +
- (__uint128_t)product33 +
- (__uint128_t)product42;
- const __uint128_t sum3 = (__uint128_t)product14 +
- (__uint128_t)product23 +
- (__uint128_t)product32 +
- (__uint128_t)product41;
- const __uint128_t sum4 = (__uint128_t)product13 +
- (__uint128_t)product22 +
- (__uint128_t)product31;
- const __uint128_t sum5 = (__uint128_t)product12 +
- (__uint128_t)product21;
- const __uint128_t sum6 = (__uint128_t)product11;
-
- const __uint128_t r0 = (sum0 & Word_FullMask) +
- ((sum1 & Word_LoMask) << 32);
- const __uint128_t r1 = (sum0 >> 64) +
- ((sum1 >> 32) & Word_FullMask) +
- (sum2 & Word_FullMask) +
- ((sum3 << 32) & Word_HiMask);
-
- *lo = r0 + (r1 << 64);
- *hi = (r1 >> 64) +
- (sum1 >> 96) +
- (sum2 >> 64) +
- (sum3 >> 32) +
- sum4 +
- (sum5 << 32) +
- (sum6 << 64);
-}
-#undef Word_1
-#undef Word_2
-#undef Word_3
-#undef Word_4
-#undef Word_HiMask
-#undef Word_LoMask
-#undef Word_FullMask
-#endif // __LDBL_MANT_DIG__ == 113
-#else
-#error SINGLE_PRECISION, DOUBLE_PRECISION or QUAD_PRECISION must be defined.
-#endif
-
-#if defined(SINGLE_PRECISION) || defined(DOUBLE_PRECISION) || defined(CRT_LDBL_128BIT)
-#define typeWidth (sizeof(rep_t)*CHAR_BIT)
-#define exponentBits (typeWidth - significandBits - 1)
-#define maxExponent ((1 << exponentBits) - 1)
-#define exponentBias (maxExponent >> 1)
-
-#define implicitBit (REP_C(1) << significandBits)
-#define significandMask (implicitBit - 1U)
-#define signBit (REP_C(1) << (significandBits + exponentBits))
-#define absMask (signBit - 1U)
-#define exponentMask (absMask ^ significandMask)
-#define oneRep ((rep_t)exponentBias << significandBits)
-#define infRep exponentMask
-#define quietBit (implicitBit >> 1)
-#define qnanRep (exponentMask | quietBit)
-
-static inline rep_t toRep(fp_t x) {
- const union { fp_t f; rep_t i; } rep = {.f = x};
- return rep.i;
-}
-
-static inline fp_t fromRep(rep_t x) {
- const union { fp_t f; rep_t i; } rep = {.i = x};
- return rep.f;
-}
-
-static inline int normalize(rep_t *significand) {
- const int shift = rep_clz(*significand) - rep_clz(implicitBit);
- *significand <<= shift;
- return 1 - shift;
-}
-
-static inline void wideLeftShift(rep_t *hi, rep_t *lo, int count) {
- *hi = *hi << count | *lo >> (typeWidth - count);
- *lo = *lo << count;
-}
-
-static inline void wideRightShiftWithSticky(rep_t *hi, rep_t *lo, unsigned int count) {
- if (count < typeWidth) {
- const bool sticky = *lo << (typeWidth - count);
- *lo = *hi << (typeWidth - count) | *lo >> count | sticky;
- *hi = *hi >> count;
- }
- else if (count < 2*typeWidth) {
- const bool sticky = *hi << (2*typeWidth - count) | *lo;
- *lo = *hi >> (count - typeWidth) | sticky;
- *hi = 0;
- } else {
- const bool sticky = *hi | *lo;
- *lo = sticky;
- *hi = 0;
- }
-}
-#endif
-
-#endif // FP_LIB_HEADER
diff --git a/StdLib/LibC/Main/Arm/int_endianness.h b/StdLib/LibC/Main/Arm/int_endianness.h
deleted file mode 100644
index f2dd973282..0000000000
--- a/StdLib/LibC/Main/Arm/int_endianness.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/**
-University of Illinois/NCSA
-Open Source License
-
-Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
-
-All rights reserved.
-
-Developed by:
-
- LLVM Team
-
- University of Illinois at Urbana-Champaign
-
- http://llvm.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal with
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimers.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimers in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the names of the LLVM Team, University of Illinois at
- Urbana-Champaign, nor the names of its contributors may be used to
- endorse or promote products derived from this Software without specific
- prior written permission.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
-SOFTWARE.
-**/
-
-#ifndef INT_ENDIANNESS_H
-#define INT_ENDIANNESS_H
-
-#include <sys/endian.h>
-
-#if _BYTE_ORDER == _BIG_ENDIAN
-#define _YUGA_LITTLE_ENDIAN 0
-#define _YUGA_BIG_ENDIAN 1
-#elif _BYTE_ORDER == _LITTLE_ENDIAN
-#define _YUGA_LITTLE_ENDIAN 1
-#define _YUGA_BIG_ENDIAN 0
-#endif /* _BYTE_ORDER */
-
-#endif /* INT_ENDIANNESS_H */
diff --git a/StdLib/LibC/Main/Arm/int_lib.h b/StdLib/LibC/Main/Arm/int_lib.h
deleted file mode 100644
index 460cf8b424..0000000000
--- a/StdLib/LibC/Main/Arm/int_lib.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
-University of Illinois/NCSA
-Open Source License
-
-Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
-
-All rights reserved.
-
-Developed by:
-
- LLVM Team
-
- University of Illinois at Urbana-Champaign
-
- http://llvm.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal with
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimers.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimers in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the names of the LLVM Team, University of Illinois at
- Urbana-Champaign, nor the names of its contributors may be used to
- endorse or promote products derived from this Software without specific
- prior written permission.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
-SOFTWARE.
-**/
-
-#ifndef INT_LIB_H
-#define INT_LIB_H
-
-/* Assumption: Signed integral is 2's complement. */
-/* Assumption: Right shift of signed negative is arithmetic shift. */
-/* Assumption: Endianness is little or big (not mixed). */
-
-/* ABI macro definitions */
-
-/*
- * TODO define this appropriately for targets that require explicit export
- * declarations (i.e. Windows)
- */
-#define COMPILER_RT_EXPORT
-
-#if __ARM_EABI__
-# define ARM_EABI_FNALIAS(aeabi_name, name) \
- void __aeabi_##aeabi_name() __attribute__((alias("__" #name)));
-# define COMPILER_RT_ABI COMPILER_RT_EXPORT __attribute__((pcs("aapcs")))
-#else
-# define ARM_EABI_FNALIAS(aeabi_name, name)
-# define COMPILER_RT_ABI COMPILER_RT_EXPORT
-#endif
-
-#if defined(__NetBSD__) && (defined(_KERNEL) || defined(_STANDALONE))
-/*
- * Kernel and boot environment can't use normal headers,
- * so use the equivalent system headers.
- */
-# include <machine/limits.h>
-# include <sys/stdint.h>
-# include <sys/types.h>
-#else
-/* Include the standard compiler builtin headers we use functionality from. */
-# include <limits.h>
-# include <stdint.h>
-# include <stdbool.h>
-# include <float.h>
-#endif
-
-/* Include the commonly used internal type definitions. */
-#include "int_types.h"
-
-/* Include internal utility function declarations. */
-#include "int_util.h"
-
-COMPILER_RT_ABI si_int __paritysi2(si_int a);
-COMPILER_RT_ABI si_int __paritydi2(di_int a);
-
-COMPILER_RT_ABI di_int __divdi3(di_int a, di_int b);
-COMPILER_RT_ABI si_int __divsi3(si_int a, si_int b);
-COMPILER_RT_ABI su_int __udivsi3(su_int n, su_int d);
-
-COMPILER_RT_ABI su_int __udivmodsi4(su_int a, su_int b, su_int* rem);
-COMPILER_RT_ABI du_int __udivmoddi4(du_int a, du_int b, du_int* rem);
-#ifdef CRT_HAS_128BIT
-COMPILER_RT_ABI si_int __clzti2(ti_int a);
-COMPILER_RT_ABI tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
-#endif
-
-#endif /* INT_LIB_H */
diff --git a/StdLib/LibC/Main/Arm/int_types.h b/StdLib/LibC/Main/Arm/int_types.h
deleted file mode 100644
index 8a4e1a3c41..0000000000
--- a/StdLib/LibC/Main/Arm/int_types.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/**
-University of Illinois/NCSA
-Open Source License
-
-Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
-
-All rights reserved.
-
-Developed by:
-
- LLVM Team
-
- University of Illinois at Urbana-Champaign
-
- http://llvm.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal with
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimers.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimers in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the names of the LLVM Team, University of Illinois at
- Urbana-Champaign, nor the names of its contributors may be used to
- endorse or promote products derived from this Software without specific
- prior written permission.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
-SOFTWARE.
-**/
-
-#ifndef INT_TYPES_H
-#define INT_TYPES_H
-
-#include "int_endianness.h"
-
-typedef int si_int;
-typedef unsigned su_int;
-
-typedef long long di_int;
-typedef unsigned long long du_int;
-
-typedef union
-{
- di_int all;
- struct
- {
-#if _YUGA_LITTLE_ENDIAN
- su_int low;
- si_int high;
-#else
- si_int high;
- su_int low;
-#endif /* _YUGA_LITTLE_ENDIAN */
- }s;
-} dwords;
-
-typedef union
-{
- du_int all;
- struct
- {
-#if _YUGA_LITTLE_ENDIAN
- su_int low;
- su_int high;
-#else
- su_int high;
- su_int low;
-#endif /* _YUGA_LITTLE_ENDIAN */
- }s;
-} udwords;
-
-#if __LP64__
-#define CRT_HAS_128BIT
-#endif
-
-#ifdef CRT_HAS_128BIT
-typedef int ti_int __attribute__ ((mode (TI)));
-typedef unsigned tu_int __attribute__ ((mode (TI)));
-
-typedef union
-{
- ti_int all;
- struct
- {
-#if _YUGA_LITTLE_ENDIAN
- du_int low;
- di_int high;
-#else
- di_int high;
- du_int low;
-#endif /* _YUGA_LITTLE_ENDIAN */
- }s;
-} twords;
-
-typedef union
-{
- tu_int all;
- struct
- {
-#if _YUGA_LITTLE_ENDIAN
- du_int low;
- du_int high;
-#else
- du_int high;
- du_int low;
-#endif /* _YUGA_LITTLE_ENDIAN */
- }s;
-} utwords;
-
-static inline ti_int make_ti(di_int h, di_int l) {
- twords r;
- r.s.high = h;
- r.s.low = l;
- return r.all;
-}
-
-static inline tu_int make_tu(du_int h, du_int l) {
- utwords r;
- r.s.high = h;
- r.s.low = l;
- return r.all;
-}
-
-#endif /* CRT_HAS_128BIT */
-
-typedef union
-{
- su_int u;
- float f;
-} float_bits;
-
-typedef union
-{
- udwords u;
- double f;
-} double_bits;
-
-typedef struct
-{
-#if _YUGA_LITTLE_ENDIAN
- udwords low;
- udwords high;
-#else
- udwords high;
- udwords low;
-#endif /* _YUGA_LITTLE_ENDIAN */
-} uqwords;
-
-typedef union
-{
- uqwords u;
- long double f;
-} long_double_bits;
-
-#endif /* INT_TYPES_H */
-
diff --git a/StdLib/LibC/Main/Arm/int_util.h b/StdLib/LibC/Main/Arm/int_util.h
deleted file mode 100644
index 19a26ea1c5..0000000000
--- a/StdLib/LibC/Main/Arm/int_util.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/** @file
-
- Copyright (c) 2014, ARM Limited. All rights reserved.
-
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-/**
-University of Illinois/NCSA
-Open Source License
-
-Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
-
-All rights reserved.
-
-Developed by:
-
- LLVM Team
-
- University of Illinois at Urbana-Champaign
-
- http://llvm.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal with
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimers.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimers in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the names of the LLVM Team, University of Illinois at
- Urbana-Champaign, nor the names of its contributors may be used to
- endorse or promote products derived from this Software without specific
- prior written permission.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
-SOFTWARE.
-**/
-
-#ifndef INT_UTIL_H
-#define INT_UTIL_H
-
-/** \brief Trigger a program abort (or panic for kernel code). */
-#define compilerrt_abort() compilerrt_abort_impl(__FILE__, __LINE__, \
- __func__)
-
-void compilerrt_abort_impl(const char *file, int line,
- const char *function) __attribute__((noreturn));
-
-#endif /* INT_UTIL_H */
diff --git a/StdLib/LibC/Main/ByteSwap.c b/StdLib/LibC/Main/ByteSwap.c
deleted file mode 100644
index f405bd9385..0000000000
--- a/StdLib/LibC/Main/ByteSwap.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/** @file
- Byte Swap routines for endian-nes conversions.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Library/BaseLib.h>
-#include <LibConfig.h>
-
-#include <sys/bswap.h>
-
-// Undefine macro versions of the functions to be defined below.
-#undef bswap16
-#undef bswap32
-#undef bswap64
-
-/**
-Switches the endianness of a 16-bit integer.
-
-This function swaps the bytes in a 16-bit unsigned value to switch the value
-from little endian to big endian or vice versa. The byte swapped value is
-returned.
-
-@param Value A 16-bit unsigned value.
-
-@return The byte swapped Value.
-
-**/
-uint16_t bswap16(uint16_t Value)
-{
- return SwapBytes16(Value);
-}
-
-/**
-Switches the endianness of a 32-bit integer.
-
-This function swaps the bytes in a 32-bit unsigned value to switch the value
-from little endian to big endian or vice versa. The byte swapped value is
-returned.
-
-@param Value A 32-bit unsigned value.
-
-@return The byte swapped Value.
-
-**/
-uint32_t bswap32(uint32_t Value)
-{
- return SwapBytes32(Value);
-}
-
-/**
-Switches the endianness of a 64-bit integer.
-
-This function swaps the bytes in a 64-bit unsigned value to switch the value
-from little endian to big endian or vice versa. The byte swapped value is
-returned.
-
-@param Value A 64-bit unsigned value.
-
-@return The byte swapped Value.
-
-**/
-uint64_t bswap64(uint64_t Value)
-{
- return SwapBytes64(Value);
-}
diff --git a/StdLib/LibC/Main/HtoNtoH.c b/StdLib/LibC/Main/HtoNtoH.c
deleted file mode 100644
index c501874b84..0000000000
--- a/StdLib/LibC/Main/HtoNtoH.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/** @File
- Routines for translating between host and network byte-order.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#include <Library/BaseLib.h>
-#include <LibConfig.h>
-#include <sys/endian.h>
-
-// Undefine macro versions of the functions to be defined below.
-#undef htonl
-#undef htons
-#undef ntohl
-#undef ntohs
-
-/** 32-bit Host to Network byte order conversion.
-
- @param[in] Datum The 32-bit value to be converted.
- @return Datum, converted to network byte order.
-**/
-uint32_t
-htonl(
- IN uint32_t Datum
- )
-{
-#if BYTE_ORDER == LITTLE_ENDIAN
- return SwapBytes32(Datum);
-#else
- return Datum;
-#endif
-}
-
-/** 16-bit Host to Network byte order conversion.
-
- @param[in] Datum The 16-bit value to be converted.
- @return Datum, converted to network byte order.
-**/
-uint16_t
-htons(
- IN uint16_t Datum
- )
-{
-#if BYTE_ORDER == LITTLE_ENDIAN
- return SwapBytes16(Datum);
-#else
- return Datum;
-#endif
-}
-
-/** 32-bit Network to Host byte order conversion.
-
- @param[in] Datum The 16-bit value to be converted.
- @return Datum, converted to host byte order.
-**/
-uint32_t
-ntohl(
- IN uint32_t Datum
- )
-{
-#if BYTE_ORDER == LITTLE_ENDIAN
- return SwapBytes32(Datum);
-#else
- return Datum;
-#endif
-}
-
-/** 16-bit Network to Host byte order conversion.
-
- @param[in] Datum The 16-bit value to be converted.
- @return Datum, converted to host byte order.
-**/
-uint16_t
-ntohs(
- IN uint16_t Datum
- )
-{
-#if BYTE_ORDER == LITTLE_ENDIAN
- return SwapBytes16(Datum);
-#else
- return Datum;
-#endif
-}
diff --git a/StdLib/LibC/Main/Ia32/fpu_rmode.S b/StdLib/LibC/Main/Ia32/fpu_rmode.S
deleted file mode 100644
index 3d012872fc..0000000000
--- a/StdLib/LibC/Main/Ia32/fpu_rmode.S
+++ /dev/null
@@ -1,22 +0,0 @@
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#------------------------------------------------------------------------------
-
-ASM_GLOBAL ASM_PFX(internal_FPU_rmode)
-ASM_PFX(internal_FPU_rmode):
- subl $4,%esp
- fnstcw (%esp)
- movl (%esp),%eax
- shrl $10,%eax
- andl $3,%eax
- addl $4,%esp
- ret
diff --git a/StdLib/LibC/Main/Ia32/fpu_rmode.asm b/StdLib/LibC/Main/Ia32/fpu_rmode.asm
deleted file mode 100644
index 11d78230c2..0000000000
--- a/StdLib/LibC/Main/Ia32/fpu_rmode.asm
+++ /dev/null
@@ -1,46 +0,0 @@
-;------------------------------------------------------------------------------
-; Return the current FPU rounding mode.
-;
-; MASM implementation of the flt_rounds function by:
-; J.T. Conklin, Apr 4, 1995
-; Public domain.
-;
-; Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-; This program and the accompanying materials
-; are licensed and made available under the terms and conditions of the BSD License
-; which accompanies this distribution. The full text of the license may be found at
-; http://opensource.org/licenses/bsd-license.php.
-;
-; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-;
-; NetBSD: flt_rounds.S,v 1.6 1999/08/23 08:45:09 kleink Exp
-;------------------------------------------------------------------------------
-
- .686
- .model flat,C
- .code
-
-;_map BYTE 1 ; round to nearest
-; BYTE 3 ; round to negative infinity
-; BYTE 2 ; round to positive infinity
-; BYTE 0 ; round to zero
-
-;------------------------------------------------------------------------------
-; int
-; EFIAPI
-; fpu_rmode( void );
-;
-;------------------------------------------------------------------------------
-
-internal_FPU_rmode PROC
- sub esp, 4 ; Create a local variable for fnstcw
- fnstcw [esp]
- mov eax, [esp]
- shr eax, 10
- and eax, 3
- add esp, 4 ; Delete the local variable
- ret
-internal_FPU_rmode ENDP
-
- END
diff --git a/StdLib/LibC/Main/Ia32/ftol2.obj b/StdLib/LibC/Main/Ia32/ftol2.obj
deleted file mode 100644
index b96f830bc0..0000000000
--- a/StdLib/LibC/Main/Ia32/ftol2.obj
+++ /dev/null
Binary files differ
diff --git a/StdLib/LibC/Main/Ia32/isinfl.c b/StdLib/LibC/Main/Ia32/isinfl.c
deleted file mode 100644
index 773758b14f..0000000000
--- a/StdLib/LibC/Main/Ia32/isinfl.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* $NetBSD: isinfl.c,v 1.5.16.1 2007/05/07 19:49:07 pavel Exp $ */
-
-/*
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This software was developed by the Computer Systems Engineering group
- * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
- * contributed to Berkeley.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Header: isinf.c,v 1.1 91/07/08 19:03:34 torek Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)isinf.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: isinfl.c,v 1.5.16.1 2007/05/07 19:49:07 pavel Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <machine/ieee.h>
-#include <math.h>
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
- // C4700: uninitialized local variable used
- #pragma warning ( disable : 4700 )
-#endif
-
-/*
- * 7.12.3.3 isinf - test for infinity
- * IEEE 754 compatible 80-bit extended-precision Intel 386 version
- */
-int
-__isinfl(long double x)
-{
- union ieee_ext_u u;
-
- u.extu_ld = x;
-
- return (u.extu_ext.ext_exp == EXT_EXP_INFNAN &&
- u.extu_ext.ext_frach == 0x80000000 && u.extu_ext.ext_fracl == 0);
-}
diff --git a/StdLib/LibC/Main/Ia32/isnanl.c b/StdLib/LibC/Main/Ia32/isnanl.c
deleted file mode 100644
index b80dc4fee2..0000000000
--- a/StdLib/LibC/Main/Ia32/isnanl.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* $NetBSD: isnanl.c,v 1.5.16.1 2007/05/07 19:49:07 pavel Exp $ */
-
-/*
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This software was developed by the Computer Systems Engineering group
- * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
- * contributed to Berkeley.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Header: isinf.c,v 1.1 91/07/08 19:03:34 torek Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)isinf.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: isnanl.c,v 1.5.16.1 2007/05/07 19:49:07 pavel Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <machine/ieee.h>
-#include <math.h>
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
- // C4700: uninitialized local variable used
- #pragma warning ( disable : 4700 )
-#endif
-
-/*
- * 7.12.3.4 isnan - test for a NaN
- * IEEE 754 compatible 80-bit extended-precision Intel 386 version
- */
-int
-__isnanl(long double x)
-{
- union ieee_ext_u u;
-
- u.extu_ld = x;
-
- return (u.extu_ext.ext_exp == EXT_EXP_INFNAN &&
- (u.extu_ext.ext_frach & 0x80000000) != 0 &&
- (u.extu_ext.ext_frach != 0x80000000 || u.extu_ext.ext_fracl != 0));
-}
diff --git a/StdLib/LibC/Main/Ipf/FpuRmode.s b/StdLib/LibC/Main/Ipf/FpuRmode.s
deleted file mode 100644
index caf4fba207..0000000000
--- a/StdLib/LibC/Main/Ipf/FpuRmode.s
+++ /dev/null
@@ -1,12 +0,0 @@
- .globl internal_FPU_rmode
- .proc internal_FPU_rmode
-internal_FPU_rmode::
- // get the floating point rounding control bits
- // bits 10 and 11 are the rc bits from main status field fpsr.sf0
- mov r8= ar.fpsr;;
- shr r8 = r8, 10
- mov r9 = 3;;
- and r8 = r8, r9;;
- br.sptk.few b0
-
- .endp internal_FPU_rmode
diff --git a/StdLib/LibC/Main/Ipf/flt_rounds.c b/StdLib/LibC/Main/Ipf/flt_rounds.c
deleted file mode 100644
index 0a18bb7390..0000000000
--- a/StdLib/LibC/Main/Ipf/flt_rounds.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Written by J.T. Conklin, Apr 10, 1995
- * Public domain.
- */
-
-#include <sys/EfiCdefs.h>
-/* __FBSDID("$FreeBSD: src/lib/libc/ia64/gen/flt_rounds.c,v 1.1 2004/07/19 08:17:24 das Exp $"); */
-
-#include <float.h>
-
-static const int map[] = {
- 1, /* round to nearest */
- 3, /* round to zero */
- 2, /* round to negative infinity */
- 0 /* round to positive infinity */
-};
-
-int
-__flt_rounds(void)
-{
- int x;
-
- __asm("mov %0=ar.fpsr" : "=r" (x));
- return (map[(x >> 10) & 0x03]);
-}
diff --git a/StdLib/LibC/Main/Main.c b/StdLib/LibC/Main/Main.c
deleted file mode 100644
index b203d1520e..0000000000
--- a/StdLib/LibC/Main/Main.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/** @file
- Establish the program environment and the "main" entry point.
-
- All of the global data in the gMD structure is initialized to 0, NULL, or
- SIG_DFL; as appropriate.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/UefiLib.h>
-#include <Library/DebugLib.h>
-
-#include <Library/ShellCEntryLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/TimerLib.h>
-
-#include <LibConfig.h>
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <MainData.h>
-#include <unistd.h>
-
-extern int main( int, char**);
-extern int __sse2_available;
-
-struct __MainData *gMD;
-
-/* Worker function to keep GCC happy. */
-void __main()
-{
- ;
-}
-
-/** Clean up data as required by the exit() function.
-
-**/
-void
-exitCleanup(INTN ExitVal)
-{
- void (*CleanUp)(void); // Pointer to Cleanup Function
- int i;
-
- if(gMD != NULL) {
- gMD->ExitValue = (int)ExitVal;
- CleanUp = gMD->cleanup; // Preserve the pointer to the Cleanup Function
-
- // Call all registered atexit functions in reverse order
- i = gMD->num_atexit;
- if( i > 0) {
- do {
- (gMD->atexit_handler[--i])();
- } while( i > 0);
- }
-
- if (CleanUp != NULL) {
- CleanUp();
- }
- }
-}
-
-/* Create mbcs versions of the Argv strings. */
-static
-char **
-ArgvConvert(UINTN Argc, CHAR16 **Argv)
-{
- ssize_t AVsz; /* Size of a single nArgv string, or -1 */
- UINTN count;
- char **nArgv;
- char *string;
- INTN nArgvSize; /* Cumulative size of narrow Argv[i] */
-
-DEBUG_CODE_BEGIN();
- DEBUG((DEBUG_INIT, "ArgvConvert called with %d arguments.\n", Argc));
- for(count = 0; count < ((Argc > 5)? 5: Argc); ++count) {
- DEBUG((DEBUG_INIT, "Argument[%d] = \"%s\".\n", count, Argv[count]));
- }
-DEBUG_CODE_END();
-
- nArgvSize = Argc;
- /* Determine space needed for narrow Argv strings. */
- for(count = 0; count < Argc; ++count) {
- AVsz = (ssize_t)wcstombs(NULL, Argv[count], ARG_MAX);
- if(AVsz < 0) {
- DEBUG((DEBUG_ERROR, "ABORTING: Argv[%d] contains an unconvertable character.\n", count));
- exit(EXIT_FAILURE);
- /* Not Reached */
- }
- nArgvSize += AVsz;
- }
-
- /* Reserve space for the converted strings. */
- gMD->NCmdLine = (char *)AllocateZeroPool(nArgvSize+1);
- if(gMD->NCmdLine == NULL) {
- DEBUG((DEBUG_ERROR, "ABORTING: Insufficient memory.\n"));
- exit(EXIT_FAILURE);
- /* Not Reached */
- }
-
- /* Convert Argument Strings. */
- nArgv = gMD->NArgV;
- string = gMD->NCmdLine;
- for(count = 0; count < Argc; ++count) {
- nArgv[count] = string;
- AVsz = wcstombs(string, Argv[count], nArgvSize) + 1;
- DEBUG((DEBUG_INFO, "Cvt[%d] %d \"%s\" --> \"%a\"\n", (INT32)count, (INT32)AVsz, Argv[count], nArgv[count]));
- string += AVsz;
- nArgvSize -= AVsz;
- if(nArgvSize < 0) {
- DEBUG((DEBUG_ERROR, "ABORTING: Internal Argv[%d] conversion error.\n", count));
- exit(EXIT_FAILURE);
- /* Not Reached */
- }
- }
- return gMD->NArgV;
-}
-
-INTN
-EFIAPI
-ShellAppMain (
- IN UINTN Argc,
- IN CHAR16 **Argv
- )
-{
- struct __filedes *mfd;
- char **nArgv;
- INTN ExitVal;
- int i;
-
- ExitVal = (INTN)RETURN_SUCCESS;
- gMD = AllocateZeroPool(sizeof(struct __MainData));
- if( gMD == NULL ) {
- ExitVal = (INTN)RETURN_OUT_OF_RESOURCES;
- }
- else {
- /* Initialize data */
- __sse2_available = 0;
- _fltused = 1;
- errno = 0;
- EFIerrno = 0;
-
- gMD->ClocksPerSecond = 1;
- gMD->AppStartTime = (clock_t)((UINT32)time(NULL));
-
- // Initialize file descriptors
- mfd = gMD->fdarray;
- for(i = 0; i < (FOPEN_MAX); ++i) {
- mfd[i].MyFD = (UINT16)i;
- }
-
- DEBUG((DEBUG_INIT, "StdLib: Open Standard IO.\n"));
- i = open("stdin:", (O_RDONLY | O_TTY_INIT), 0444);
- if(i == 0) {
- i = open("stdout:", (O_WRONLY | O_TTY_INIT), 0222);
- if(i == 1) {
- i = open("stderr:", O_WRONLY, 0222);
- }
- }
- if(i != 2) {
- Print(L"ERROR Initializing Standard IO: %a.\n %r\n",
- strerror(errno), EFIerrno);
- }
-
- /* Create mbcs versions of the Argv strings. */
- nArgv = ArgvConvert(Argc, Argv);
- if(nArgv == NULL) {
- ExitVal = (INTN)RETURN_INVALID_PARAMETER;
- }
- else {
- if( setjmp(gMD->MainExit) == 0) {
- errno = 0; // Clean up any "scratch" values from startup.
- ExitVal = (INTN)main( (int)Argc, gMD->NArgV);
- exitCleanup(ExitVal);
- }
- /* You reach here if:
- * normal return from main()
- * call to _Exit(), either directly or through exit().
- */
- ExitVal = (INTN)gMD->ExitValue;
- }
-
- if( ExitVal == EXIT_FAILURE) {
- ExitVal = RETURN_ABORTED;
- }
-
- /* Close any open files */
- for(i = OPEN_MAX - 1; i >= 0; --i) {
- (void)close(i); // Close properly handles closing a closed file.
- }
-
- /* Free the global MainData structure */
- if(gMD != NULL) {
- if(gMD->NCmdLine != NULL) {
- FreePool( gMD->NCmdLine );
- }
- FreePool( gMD );
- }
- }
- return ExitVal;
-}
diff --git a/StdLib/LibC/Main/X64/fpu_rmode.S b/StdLib/LibC/Main/X64/fpu_rmode.S
deleted file mode 100644
index 4999102582..0000000000
--- a/StdLib/LibC/Main/X64/fpu_rmode.S
+++ /dev/null
@@ -1,20 +0,0 @@
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#------------------------------------------------------------------------------
-
-ASM_GLOBAL ASM_PFX(internal_FPU_rmode)
-ASM_PFX(internal_FPU_rmode):
- fnstcw -4(%rsp)
- movl -4(%rsp),%eax
- shrl $10,%eax
- andl $3,%eax
- ret
diff --git a/StdLib/LibC/Main/X64/fpu_rmode.asm b/StdLib/LibC/Main/X64/fpu_rmode.asm
deleted file mode 100644
index 36b0d11ccd..0000000000
--- a/StdLib/LibC/Main/X64/fpu_rmode.asm
+++ /dev/null
@@ -1,41 +0,0 @@
-;------------------------------------------------------------------------------
-; Return the current FPU rounding mode.
-;
-; MASM implementation of the flt_rounds function from NetBSD.
-;
-; Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-; This program and the accompanying materials
-; are licensed and made available under the terms and conditions of the BSD License
-; which accompanies this distribution. The full text of the license may be found at
-; http://opensource.org/licenses/bsd-license.php.
-;
-; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-;
-;------------------------------------------------------------------------------
-
- .code
-
-;_map BYTE 1 ; round to nearest
-; BYTE 3 ; round to negative infinity
-; BYTE 2 ; round to positive infinity
-; BYTE 0 ; round to zero
-
-;------------------------------------------------------------------------------
-; int
-; EFIAPI
-; fpu_rmode( void );
-;
-; VC++ always creates space for 4 parameters on the stack, whether they are
-; used or not. We use one for temporary storage since the only variant of
-; fnstcw saves to memory, NOT a register.
-;------------------------------------------------------------------------------
-internal_FPU_rmode PROC
- fnstcw [rsp + 8] ; save 16-bit FPU Control Word
- mov eax, [rsp + 8] ; get the saved FPU Control Word
- shr eax, 10
- and rax, 3 ; index is only the LSB two bits in RAX
- ret ; Return rounding mode in RAX
-internal_FPU_rmode ENDP
-
- END
diff --git a/StdLib/LibC/Main/X64/isinfl.c b/StdLib/LibC/Main/X64/isinfl.c
deleted file mode 100644
index d50577ffd1..0000000000
--- a/StdLib/LibC/Main/X64/isinfl.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* $NetBSD: isinfl.c,v 1.5.16.1 2007/05/07 19:49:08 pavel Exp $ */
-
-/*
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This software was developed by the Computer Systems Engineering group
- * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
- * contributed to Berkeley.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Header: isinf.c,v 1.1 91/07/08 19:03:34 torek Exp
- */
-
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)isinf.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: isinfl.c,v 1.5.16.1 2007/05/07 19:49:08 pavel Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <machine/ieee.h>
-#include <math.h>
-
-/*
- * 7.12.3.3 isinf - test for infinity
- * IEEE 754 compatible 80-bit extended-precision Intel 386 version
- */
-int
-__isinfl(long double x)
-{
- union ieee_ext_u u = {0.0};
-
- u.extu_ld = x;
-
- return (u.extu_ext.ext_exp == EXT_EXP_INFNAN &&
- u.extu_ext.ext_frach == 0x80000000 && u.extu_ext.ext_fracl == 0);
-}
diff --git a/StdLib/LibC/Main/X64/isnanl.c b/StdLib/LibC/Main/X64/isnanl.c
deleted file mode 100644
index 148d674577..0000000000
--- a/StdLib/LibC/Main/X64/isnanl.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* $NetBSD: isnanl.c,v 1.5.16.1 2007/05/07 19:49:07 pavel Exp $ */
-
-/*
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This software was developed by the Computer Systems Engineering group
- * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
- * contributed to Berkeley.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Header: isinf.c,v 1.1 91/07/08 19:03:34 torek Exp
- */
-
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)isinf.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: isnanl.c,v 1.5.16.1 2007/05/07 19:49:07 pavel Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <machine/ieee.h>
-#include <math.h>
-
-/*
- * 7.12.3.4 isnan - test for a NaN
- * IEEE 754 compatible 80-bit extended-precision Intel 386 version
- */
-int
-__isnanl(long double x)
-{
- union ieee_ext_u u = { 0 };
-
- u.extu_ld = x;
-
- return (u.extu_ext.ext_exp == EXT_EXP_INFNAN &&
- (u.extu_ext.ext_frach & 0x80000000) != 0 &&
- (u.extu_ext.ext_frach != 0x80000000 || u.extu_ext.ext_fracl != 0));
-}
diff --git a/StdLib/LibC/Main/assert.c b/StdLib/LibC/Main/assert.c
deleted file mode 100644
index a6b96d81d7..0000000000
--- a/StdLib/LibC/Main/assert.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/** @file
- The implementation of the __assert function used internally by the assert macro
- to insert diagnostic messages into code.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-
-/** Internal helper function for the assert macro.
- The __assert function prints a diagnostic message then exits the
- currently running application.
-
- This function should NEVER be called directly.
-
- Some pre-processors do not provide the __func__ identifier. When that is
- the case, __func__ will be NULL. This function accounts for this and
- will modify the diagnostic message appropriately.
-
-
- @param[in] file The name of the file containing the assert.
- @param[in] func The name of the function containing the assert
- or NULL.
- @param[in] line The line number the assert is located on.
- @param[in] failedexpr A literal representation of the assert's expression.
-
- @return The __assert function will never return. It terminates execution
- of the current application and returns to the environment that
- the application was launched from.
-**/
-void
-__assert(
- IN const char *file,
- IN const char *func,
- IN int line,
- IN const char *failedexpr
- )
-{
- if (func == NULL)
- printf("Assertion failed: (%s), file %s, line %d.\n",
- failedexpr, file, line);
- else
- printf("Assertion failed: (%s), file %s, function %s, line %d.\n",
- failedexpr, file, func, line);
- abort();
- /* NOTREACHED */
-}
diff --git a/StdLib/LibC/Main/bswap16.c b/StdLib/LibC/Main/bswap16.c
deleted file mode 100644
index c0e60f03c6..0000000000
--- a/StdLib/LibC/Main/bswap16.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* $NetBSD: bswap16.c,v 1.1 2005/12/20 19:28:51 christos Exp $ */
-
-/*
- * Written by Manuel Bouyer <bouyer@NetBSD.org>.
- * Public domain.
- */
-
-//#include <sys/cdefs.h>
-//#if defined(LIBC_SCCS) && !defined(lint)
-//__RCSID("$NetBSD: bswap16.c,v 1.1 2005/12/20 19:28:51 christos Exp $");
-//#endif /* LIBC_SCCS and not lint */
-
-//#include <sys/types.h>
-//#include <machine/bswap.h>
-
-#undef bswap16
-
-UINT16
-bswap16(UINT16 x)
-{
- return ((x << 8) & 0xff00) | ((x >> 8) & 0x00ff);
-}
diff --git a/StdLib/LibC/Main/bswap32.c b/StdLib/LibC/Main/bswap32.c
deleted file mode 100644
index f573a54c6c..0000000000
--- a/StdLib/LibC/Main/bswap32.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* $NetBSD: bswap32.c,v 1.1 2005/12/20 19:28:51 christos Exp $ */
-
-/*
- * Written by Manuel Bouyer <bouyer@NetBSD.org>.
- * Public domain.
- */
-
-//#include <sys/cdefs.h>
-//#if defined(LIBC_SCCS) && !defined(lint)
-//__RCSID("$NetBSD: bswap32.c,v 1.1 2005/12/20 19:28:51 christos Exp $");
-//#endif /* LIBC_SCCS and not lint */
-
-//#include <sys/types.h>
-//#include <machine/bswap.h>
-
-#undef bswap32
-
-UINT32
-bswap32(UINT32 x)
-{
- return ((x << 24) & 0xff000000 ) |
- ((x << 8) & 0x00ff0000 ) |
- ((x >> 8) & 0x0000ff00 ) |
- ((x >> 24) & 0x000000ff );
-}
diff --git a/StdLib/LibC/Main/bswap64.c b/StdLib/LibC/Main/bswap64.c
deleted file mode 100644
index 29e6916ea6..0000000000
--- a/StdLib/LibC/Main/bswap64.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* $NetBSD: bswap64.c,v 1.1 2005/12/20 19:28:51 christos Exp $ */
-
-/*
- * Written by Manuel Bouyer <bouyer@NetBSD.org>.
- * Public domain.
- */
-
-//#include <sys/cdefs.h>
-//#if defined(LIBC_SCCS) && !defined(lint)
-//__RCSID("$NetBSD: bswap64.c,v 1.1 2005/12/20 19:28:51 christos Exp $");
-//#endif /* LIBC_SCCS and not lint */
-
-//#include <sys/types.h>
-//#include <machine/bswap.h>
-
-#undef bswap64
-
-UINT64
-bswap64(UINT64 x)
-{
-#ifndef _LP64
- /*
- * Assume we have wide enough registers to do it without touching
- * memory.
- */
- return ( (x << 56) & 0xff00000000000000UL ) |
- ( (x << 40) & 0x00ff000000000000UL ) |
- ( (x << 24) & 0x0000ff0000000000UL ) |
- ( (x << 8) & 0x000000ff00000000UL ) |
- ( (x >> 8) & 0x00000000ff000000UL ) |
- ( (x >> 24) & 0x0000000000ff0000UL ) |
- ( (x >> 40) & 0x000000000000ff00UL ) |
- ( (x >> 56) & 0x00000000000000ffUL );
-#else
- /*
- * Split the operation in two 32bit steps.
- */
- u_int32_t tl, th;
-
- th = bswap32((u_int32_t)(x & 0x00000000ffffffffULL));
- tl = bswap32((u_int32_t)((x >> 32) & 0x00000000ffffffffULL));
- return ((u_int64_t)th << 32) | tl;
-#endif
-}
diff --git a/StdLib/LibC/Main/errno.c b/StdLib/LibC/Main/errno.c
deleted file mode 100644
index 48eb1709b6..0000000000
--- a/StdLib/LibC/Main/errno.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/** @file
- Instantiate errno as declared in <errno.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-
-int errno = 0;
-RETURN_STATUS EFIerrno = RETURN_SUCCESS;
-
-// This is required to keep VC++ happy if you use floating-point
-int _fltused = 1;
-int __sse2_available = 0; ///< Used by ftol2_sse
diff --git a/StdLib/LibC/Main/infinityf_ieee754.c b/StdLib/LibC/Main/infinityf_ieee754.c
deleted file mode 100644
index 3f191650e2..0000000000
--- a/StdLib/LibC/Main/infinityf_ieee754.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* $NetBSD: infinityf_ieee754.c,v 1.2 2005/06/12 05:21:27 lukem Exp $ */
-
-/*
- * IEEE-compatible infinityf.c -- public domain.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: infinityf_ieee754.c,v 1.2 2005/06/12 05:21:27 lukem Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <math.h>
-#include <machine/endian.h>
-
-const union __float_u __infinityf =
-#if BYTE_ORDER == BIG_ENDIAN
- { { 0x7f, 0x80, 0, 0 } };
-#else
- { { 0, 0, 0x80, 0x7f } };
-#endif
diff --git a/StdLib/LibC/Main/isinfd_ieee754.c b/StdLib/LibC/Main/isinfd_ieee754.c
deleted file mode 100644
index f5757b083c..0000000000
--- a/StdLib/LibC/Main/isinfd_ieee754.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* $NetBSD: isinfd_ieee754.c,v 1.1 2004/03/04 23:42:39 kleink Exp $ */
-
-/*
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This software was developed by the Computer Systems Engineering group
- * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
- * contributed to Berkeley.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Header: isinf.c,v 1.1 91/07/08 19:03:34 torek Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)isinf.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: isinfd_ieee754.c,v 1.1 2004/03/04 23:42:39 kleink Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <machine/ieee.h>
-#include <math.h>
-
-/* libc.so.12 ABI compatbility */
-#ifdef __weak_alias
-__weak_alias(isinf,__isinfd)
-#endif
-
-/*
- * 7.12.3.3 isinf - test for infinity
- * IEEE 754 double-precision version
- */
-int
-__isinfd(double x)
-{
- union ieee_double_u u;
-
- u.dblu_d = x;
-
- return (u.dblu_dbl.dbl_exp == DBL_EXP_INFNAN &&
- (u.dblu_dbl.dbl_frach == 0 && u.dblu_dbl.dbl_fracl == 0));
-}
diff --git a/StdLib/LibC/Main/isinff_ieee754.c b/StdLib/LibC/Main/isinff_ieee754.c
deleted file mode 100644
index ada1e728f1..0000000000
--- a/StdLib/LibC/Main/isinff_ieee754.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* $NetBSD: isinff_ieee754.c,v 1.1 2004/03/04 23:42:39 kleink Exp $ */
-
-/*
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This software was developed by the Computer Systems Engineering group
- * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
- * contributed to Berkeley.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Header: isinf.c,v 1.1 91/07/08 19:03:34 torek Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)isinf.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: isinff_ieee754.c,v 1.1 2004/03/04 23:42:39 kleink Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <machine/ieee.h>
-#include <math.h>
-
-/*
- * 7.12.3.3 isinf - test for infinity
- * IEEE 754 single-precision version
- */
-int
-__isinff(float x)
-{
- union ieee_single_u u;
-
- u.sngu_f = x;
-
- return (u.sngu_sng.sng_exp == SNG_EXP_INFNAN &&
- u.sngu_sng.sng_frac == 0);
-}
diff --git a/StdLib/LibC/Main/isnand_ieee754.c b/StdLib/LibC/Main/isnand_ieee754.c
deleted file mode 100644
index 70c1535343..0000000000
--- a/StdLib/LibC/Main/isnand_ieee754.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* $NetBSD: isnand_ieee754.c,v 1.1 2004/03/04 23:42:39 kleink Exp $ */
-
-/*
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This software was developed by the Computer Systems Engineering group
- * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
- * contributed to Berkeley.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Header: isinf.c,v 1.1 91/07/08 19:03:34 torek Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)isinf.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: isnand_ieee754.c,v 1.1 2004/03/04 23:42:39 kleink Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <machine/ieee.h>
-#include <math.h>
-
-/* libc.so.12 ABI compatbility */
-#ifdef __weak_alias
-__weak_alias(isnan,__isnand)
-#endif
-
-/*
- * 7.12.3.4 isnan - test for a NaN
- * IEEE 754 double-precision version
- */
-int
-__isnand(double x)
-{
- union ieee_double_u u;
-
- u.dblu_d = x;
-
- return (u.dblu_dbl.dbl_exp == DBL_EXP_INFNAN &&
- (u.dblu_dbl.dbl_frach != 0 || u.dblu_dbl.dbl_fracl != 0));
-}
diff --git a/StdLib/LibC/Main/isnanf_ieee754.c b/StdLib/LibC/Main/isnanf_ieee754.c
deleted file mode 100644
index 309404d320..0000000000
--- a/StdLib/LibC/Main/isnanf_ieee754.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* $NetBSD: isnanf_ieee754.c,v 1.1 2004/03/04 23:42:39 kleink Exp $ */
-
-/*
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This software was developed by the Computer Systems Engineering group
- * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
- * contributed to Berkeley.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Header: isinf.c,v 1.1 91/07/08 19:03:34 torek Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)isinf.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: isnanf_ieee754.c,v 1.1 2004/03/04 23:42:39 kleink Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <machine/ieee.h>
-#include <math.h>
-
-/*
- * 7.12.3.4 isnan - test for a NaN
- * IEEE 754 single-precision version
- */
-int
-__isnanf(float x)
-{
- union ieee_single_u u;
-
- u.sngu_f = x;
-
- return (u.sngu_sng.sng_exp == SNG_EXP_INFNAN &&
- u.sngu_sng.sng_frac != 0);
-}
diff --git a/StdLib/LibC/Main/longjmp.c b/StdLib/LibC/Main/longjmp.c
deleted file mode 100644
index 2ae9a0d455..0000000000
--- a/StdLib/LibC/Main/longjmp.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/** @file
- The longjmp function.
- The C standard requires that longjmp be a function and not a macro.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Library/BaseLib.h>
-#include <setjmp.h>
-
-void longjmp(jmp_buf env, int val)
-{
- LongJump(env, (UINTN)((val == 0) ? 1 : val));
-}
diff --git a/StdLib/LibC/Main/x86flt_rounds.c b/StdLib/LibC/Main/x86flt_rounds.c
deleted file mode 100644
index 86b4846098..0000000000
--- a/StdLib/LibC/Main/x86flt_rounds.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/** @file
- Return the current FPU rounding mode.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-
-extern int internal_FPU_rmode( void );
-
-static INT8 rmode[] = { 1, 3, 2, 0 };
-
-int
-__flt_rounds ( void )
-{
- return rmode[ internal_FPU_rmode() ];
-}
diff --git a/StdLib/LibC/Math/Math.inf b/StdLib/LibC/Math/Math.inf
deleted file mode 100644
index 6a48d97cac..0000000000
--- a/StdLib/LibC/Math/Math.inf
+++ /dev/null
@@ -1,101 +0,0 @@
-## @file
-# Standard C library: Math Library.
-#
-# Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LibMath
- FILE_GUID = a9dc6f60-f861-47d1-8751-ecaae7d27291
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibMath
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- # ieee 754 specific
- e_acos.c
- e_asin.c
- e_atan2.c
- e_cosh.c
- e_exp.c
- e_sinh.c
- e_log.c
- e_log2.c
- e_log10.c
- e_pow.c
- e_sqrt.c
- e_fmod.c
- e_rem_pio2.c
-
- # kernel functions
- k_cos.c
- k_sin.c
- k_tan.c
- k_rem_pio2.c
-
- # Simple, unadorned, functions
- s_atan.c
- s_cos.c
- s_sin.c
- s_tan.c
- s_expm1.c
- s_tanh.c
- s_frexp.c
- s_ldexp.c
- s_scalbn.c
- s_copysign.c
- s_finite.c
- s_infinity.c
- s_modf.c
- s_fabs.c
- s_ceil.c
- s_floor.c
-
- # wrapper functions
- w_acos.c
- w_asin.c
- w_atan2.c
- w_cosh.c
- w_sinh.c
- w_exp.c
- w_log.c
- w_log2.c
- w_log10.c
- w_pow.c
- w_sqrt.c
- w_fmod.c
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
-
-[LibraryClasses]
- LibC
-
-################################################################
-# The Build Options, below, are only used when building the C library.
-# DO NOT use them when building your application!
-# Nasty things could happen if you do.
-#
-# /Oi- is required for Microsoft VC++ to allow "intrinsic" functions to be
-# defined in this library.
-# /GL- is required so that LTCG generated references to functions in this library,
-# such as memcpy(), can be resolved.
-#
-[BuildOptions]
- MSFT:*_*_*_CC_FLAGS = /Oi- /GL-
diff --git a/StdLib/LibC/Math/e_acos.c b/StdLib/LibC/Math/e_acos.c
deleted file mode 100644
index 4617729af6..0000000000
--- a/StdLib/LibC/Math/e_acos.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/** @file
- Compute acos(x) using ieee FP math.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
-
- e_acos.c 5.1 93/09/24
- NetBSD: e_acos.c,v 1.12 2002/05/26 22:01:47 wiz Exp
- */
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
- // Keep older compilers quiet about floating-point divide-by-zero
- #pragma warning ( disable : 4723 )
-#endif
-
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-/* __ieee754_acos(x)
- * Method :
- * acos(x) = pi/2 - asin(x)
- * acos(-x) = pi/2 + asin(x)
- * For |x|<=0.5
- * acos(x) = pi/2 - (x + x*x^2*R(x^2)) (see asin.c)
- * For x>0.5
- * acos(x) = pi/2 - (pi/2 - 2asin(sqrt((1-x)/2)))
- * = 2asin(sqrt((1-x)/2))
- * = 2s + 2s*z*R(z) ...z=(1-x)/2, s=sqrt(z)
- * = 2f + (2c + 2s*z*R(z))
- * where f=hi part of s, and c = (z-f*f)/(s+f) is the correction term
- * for f so that f+c ~ sqrt(z).
- * For x<-0.5
- * acos(x) = pi - 2asin(sqrt((1-|x|)/2))
- * = pi - 0.5*(s+s*z*R(z)), where z=(1-|x|)/2,s=sqrt(z)
- *
- * Special cases:
- * if x is NaN, return x itself;
- * if |x|>1, return NaN with invalid signal.
- *
- * Function needed: __ieee754_sqrt
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const double
-one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
-pi = 3.14159265358979311600e+00, /* 0x400921FB, 0x54442D18 */
-pio2_hi = 1.57079632679489655800e+00, /* 0x3FF921FB, 0x54442D18 */
-pio2_lo = 6.12323399573676603587e-17, /* 0x3C91A626, 0x33145C07 */
-pS0 = 1.66666666666666657415e-01, /* 0x3FC55555, 0x55555555 */
-pS1 = -3.25565818622400915405e-01, /* 0xBFD4D612, 0x03EB6F7D */
-pS2 = 2.01212532134862925881e-01, /* 0x3FC9C155, 0x0E884455 */
-pS3 = -4.00555345006794114027e-02, /* 0xBFA48228, 0xB5688F3B */
-pS4 = 7.91534994289814532176e-04, /* 0x3F49EFE0, 0x7501B288 */
-pS5 = 3.47933107596021167570e-05, /* 0x3F023DE1, 0x0DFDF709 */
-qS1 = -2.40339491173441421878e+00, /* 0xC0033A27, 0x1C8A2D4B */
-qS2 = 2.02094576023350569471e+00, /* 0x40002AE5, 0x9C598AC8 */
-qS3 = -6.88283971605453293030e-01, /* 0xBFE6066C, 0x1B8D0159 */
-qS4 = 7.70381505559019352791e-02; /* 0x3FB3B8C5, 0xB12E9282 */
-
-double
-__ieee754_acos(double x)
-{
- double z,p,q,r,w,s,c,df;
- int32_t hx,ix;
- GET_HIGH_WORD(hx,x);
- ix = hx&0x7fffffff;
- if(ix>=0x3ff00000) { /* |x| >= 1 */
- u_int32_t lx;
-
- GET_LOW_WORD(lx,x);
- if(((ix-0x3ff00000)|lx)==0) { /* |x|==1 */
- if(hx>0) return 0.0; /* acos(1) = 0 */
- else return pi+2.0*pio2_lo; /* acos(-1)= pi */
- }
- return (x-x)/(x-x); /* acos(|x|>1) is NaN */
- }
- if(ix<0x3fe00000) { /* |x| < 0.5 */
- if(ix<=0x3c600000) return pio2_hi+pio2_lo; /*if|x|<2**-57*/
- z = x*x;
- p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5)))));
- q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4)));
- r = p/q;
- return pio2_hi - (x - (pio2_lo-x*r));
- }
- else if (hx<0) { /* x < -0.5 */
- z = (one+x)*0.5;
- p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5)))));
- q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4)));
- s = __ieee754_sqrt(z);
- r = p/q;
- w = r*s-pio2_lo;
- return pi - 2.0*(s+w);
- }
- else { /* x > 0.5 */
- z = (one-x)*0.5;
- s = __ieee754_sqrt(z);
- df = s;
- SET_LOW_WORD(df,0);
- c = (z-df*df)/(s+df);
- p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5)))));
- q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4)));
- r = p/q;
- w = r*s+c;
- return 2.0*(df+w);
- }
-}
diff --git a/StdLib/LibC/Math/e_asin.c b/StdLib/LibC/Math/e_asin.c
deleted file mode 100644
index d1d4dc0019..0000000000
--- a/StdLib/LibC/Math/e_asin.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* @(#)e_asin.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: e_asin.c,v 1.12 2002/05/26 22:01:48 wiz Exp $");
-#endif
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
-// C4723: potential divide by zero.
-#pragma warning ( disable : 4723 )
-#endif
-
-/* __ieee754_asin(x)
- * Method :
- * Since asin(x) = x + x^3/6 + x^5*3/40 + x^7*15/336 + ...
- * we approximate asin(x) on [0,0.5] by
- * asin(x) = x + x*x^2*R(x^2)
- * where
- * R(x^2) is a rational approximation of (asin(x)-x)/x^3
- * and its remez error is bounded by
- * |(asin(x)-x)/x^3 - R(x^2)| < 2^(-58.75)
- *
- * For x in [0.5,1]
- * asin(x) = pi/2-2*asin(sqrt((1-x)/2))
- * Let y = (1-x), z = y/2, s := sqrt(z), and pio2_hi+pio2_lo=pi/2;
- * then for x>0.98
- * asin(x) = pi/2 - 2*(s+s*z*R(z))
- * = pio2_hi - (2*(s+s*z*R(z)) - pio2_lo)
- * For x<=0.98, let pio4_hi = pio2_hi/2, then
- * f = hi part of s;
- * c = sqrt(z) - f = (z-f*f)/(s+f) ...f+c=sqrt(z)
- * and
- * asin(x) = pi/2 - 2*(s+s*z*R(z))
- * = pio4_hi+(pio4-2s)-(2s*z*R(z)-pio2_lo)
- * = pio4_hi+(pio4-2f)-(2s*z*R(z)-(pio2_lo+2c))
- *
- * Special cases:
- * if x is NaN, return x itself;
- * if |x|>1, return NaN with invalid signal.
- *
- */
-
-
-#include "math.h"
-#include "math_private.h"
-
-static const double
-one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
-huge = 1.000e+300,
-pio2_hi = 1.57079632679489655800e+00, /* 0x3FF921FB, 0x54442D18 */
-pio2_lo = 6.12323399573676603587e-17, /* 0x3C91A626, 0x33145C07 */
-pio4_hi = 7.85398163397448278999e-01, /* 0x3FE921FB, 0x54442D18 */
- /* coefficient for R(x^2) */
-pS0 = 1.66666666666666657415e-01, /* 0x3FC55555, 0x55555555 */
-pS1 = -3.25565818622400915405e-01, /* 0xBFD4D612, 0x03EB6F7D */
-pS2 = 2.01212532134862925881e-01, /* 0x3FC9C155, 0x0E884455 */
-pS3 = -4.00555345006794114027e-02, /* 0xBFA48228, 0xB5688F3B */
-pS4 = 7.91534994289814532176e-04, /* 0x3F49EFE0, 0x7501B288 */
-pS5 = 3.47933107596021167570e-05, /* 0x3F023DE1, 0x0DFDF709 */
-qS1 = -2.40339491173441421878e+00, /* 0xC0033A27, 0x1C8A2D4B */
-qS2 = 2.02094576023350569471e+00, /* 0x40002AE5, 0x9C598AC8 */
-qS3 = -6.88283971605453293030e-01, /* 0xBFE6066C, 0x1B8D0159 */
-qS4 = 7.70381505559019352791e-02; /* 0x3FB3B8C5, 0xB12E9282 */
-
-double
-__ieee754_asin(double x)
-{
- double t,w,p,q,c,r,s;
- int32_t hx,ix;
-
- t = 0;
- GET_HIGH_WORD(hx,x);
- ix = hx&0x7fffffff;
- if(ix>= 0x3ff00000) { /* |x|>= 1 */
- u_int32_t lx;
- GET_LOW_WORD(lx,x);
- if(((ix-0x3ff00000)|lx)==0)
- /* asin(1)=+-pi/2 with inexact */
- return x*pio2_hi+x*pio2_lo;
- return (x-x)/(x-x); /* asin(|x|>1) is NaN */
- } else if (ix<0x3fe00000) { /* |x|<0.5 */
- if(ix<0x3e400000) { /* if |x| < 2**-27 */
- if(huge+x>one) return x;/* return x with inexact if x!=0*/
- } else
- t = x*x;
- p = t*(pS0+t*(pS1+t*(pS2+t*(pS3+t*(pS4+t*pS5)))));
- q = one+t*(qS1+t*(qS2+t*(qS3+t*qS4)));
- w = p/q;
- return x+x*w;
- }
- /* 1> |x|>= 0.5 */
- w = one-fabs(x);
- t = w*0.5;
- p = t*(pS0+t*(pS1+t*(pS2+t*(pS3+t*(pS4+t*pS5)))));
- q = one+t*(qS1+t*(qS2+t*(qS3+t*qS4)));
- s = __ieee754_sqrt(t);
- if(ix>=0x3FEF3333) { /* if |x| > 0.975 */
- w = p/q;
- t = pio2_hi-(2.0*(s+s*w)-pio2_lo);
- } else {
- w = s;
- SET_LOW_WORD(w,0);
- c = (t-w*w)/(s+w);
- r = p/q;
- p = 2.0*s*r-(pio2_lo-2.0*c);
- q = pio4_hi-2.0*w;
- t = pio4_hi-(p-q);
- }
- if(hx>0) return t; else return -t;
-}
diff --git a/StdLib/LibC/Math/e_atan2.c b/StdLib/LibC/Math/e_atan2.c
deleted file mode 100644
index 309447c0a5..0000000000
--- a/StdLib/LibC/Math/e_atan2.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* @(#)e_atan2.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: e_atan2.c,v 1.12 2002/05/26 22:01:48 wiz Exp $");
-#endif
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
- // unary minus operator applied to unsigned type, result still unsigned
- #pragma warning ( disable : 4146 )
-#endif
-
-/* __ieee754_atan2(y,x)
- * Method :
- * 1. Reduce y to positive by atan2(y,x)=-atan2(-y,x).
- * 2. Reduce x to positive by (if x and y are unexceptional):
- * ARG (x+iy) = arctan(y/x) ... if x > 0,
- * ARG (x+iy) = pi - arctan[y/(-x)] ... if x < 0,
- *
- * Special cases:
- *
- * ATAN2((anything), NaN ) is NaN;
- * ATAN2(NAN , (anything) ) is NaN;
- * ATAN2(+-0, +(anything but NaN)) is +-0 ;
- * ATAN2(+-0, -(anything but NaN)) is +-pi ;
- * ATAN2(+-(anything but 0 and NaN), 0) is +-pi/2;
- * ATAN2(+-(anything but INF and NaN), +INF) is +-0 ;
- * ATAN2(+-(anything but INF and NaN), -INF) is +-pi;
- * ATAN2(+-INF,+INF ) is +-pi/4 ;
- * ATAN2(+-INF,-INF ) is +-3pi/4;
- * ATAN2(+-INF, (anything but,0,NaN, and INF)) is +-pi/2;
- *
- * Constants:
- * The hexadecimal values are the intended ones for the following
- * constants. The decimal values may be used, provided that the
- * compiler will convert from decimal to binary accurately enough
- * to produce the hexadecimal values shown.
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const double
-tiny = 1.0e-300,
-zero = 0.0,
-pi_o_4 = 7.8539816339744827900E-01, /* 0x3FE921FB, 0x54442D18 */
-pi_o_2 = 1.5707963267948965580E+00, /* 0x3FF921FB, 0x54442D18 */
-pi = 3.1415926535897931160E+00, /* 0x400921FB, 0x54442D18 */
-pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */
-
-double
-__ieee754_atan2(double y, double x)
-{
- double z;
- int32_t k,m,hx,hy,ix,iy;
- u_int32_t lx,ly;
-
- EXTRACT_WORDS(hx,lx,x);
- ix = hx&0x7fffffff;
- EXTRACT_WORDS(hy,ly,y);
- iy = hy&0x7fffffff;
- if(((ix|((lx|-lx)>>31))>0x7ff00000)||
- ((iy|((ly|-ly)>>31))>0x7ff00000)) /* x or y is NaN */
- return x+y;
- if(((hx-0x3ff00000)|lx)==0) return atan(y); /* x=1.0 */
- m = ((hy>>31)&1)|((hx>>30)&2); /* 2*sign(x)+sign(y) */
-
- /* when y = 0 */
- if((iy|ly)==0) {
- switch(m) {
- case 0:
- case 1: return y; /* atan(+-0,+anything)=+-0 */
- case 2: return pi+tiny;/* atan(+0,-anything) = pi */
- case 3: return -pi-tiny;/* atan(-0,-anything) =-pi */
- }
- }
- /* when x = 0 */
- if((ix|lx)==0) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny;
-
- /* when x is INF */
- if(ix==0x7ff00000) {
- if(iy==0x7ff00000) {
- switch(m) {
- case 0: return pi_o_4+tiny;/* atan(+INF,+INF) */
- case 1: return -pi_o_4-tiny;/* atan(-INF,+INF) */
- case 2: return 3.0*pi_o_4+tiny;/*atan(+INF,-INF)*/
- case 3: return -3.0*pi_o_4-tiny;/*atan(-INF,-INF)*/
- }
- } else {
- switch(m) {
- case 0: return zero ; /* atan(+...,+INF) */
- case 1: return -zero ; /* atan(-...,+INF) */
- case 2: return pi+tiny ; /* atan(+...,-INF) */
- case 3: return -pi-tiny ; /* atan(-...,-INF) */
- }
- }
- }
- /* when y is INF */
- if(iy==0x7ff00000) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny;
-
- /* compute y/x */
- k = (iy-ix)>>20;
- if(k > 60) z=pi_o_2+0.5*pi_lo; /* |y/x| > 2**60 */
- else if(hx<0&&k<-60) z=0.0; /* |y|/x < -2**60 */
- else z=atan(fabs(y/x)); /* safe to do y/x */
- switch (m) {
- case 0: return z ; /* atan(+,+) */
- case 1: {
- u_int32_t zh;
- GET_HIGH_WORD(zh,z);
- SET_HIGH_WORD(z,zh ^ 0x80000000);
- }
- return z ; /* atan(-,+) */
- case 2: return pi-(z-pi_lo);/* atan(+,-) */
- default: /* case 3 */
- return (z-pi_lo)-pi;/* atan(-,-) */
- }
-}
diff --git a/StdLib/LibC/Math/e_cosh.c b/StdLib/LibC/Math/e_cosh.c
deleted file mode 100644
index 48ce6817d2..0000000000
--- a/StdLib/LibC/Math/e_cosh.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* @(#)e_cosh.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: e_cosh.c,v 1.11 2002/05/26 22:01:49 wiz Exp $");
-#endif
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
- // C4756: overflow in constant arithmetic
- #pragma warning ( disable : 4756 )
-#endif
-
-/* __ieee754_cosh(x)
- * Method :
- * mathematically cosh(x) if defined to be (exp(x)+exp(-x))/2
- * 1. Replace x by |x| (cosh(x) = cosh(-x)).
- * 2.
- * [ exp(x) - 1 ]^2
- * 0 <= x <= ln2/2 : cosh(x) := 1 + -------------------
- * 2*exp(x)
- *
- * exp(x) + 1/exp(x)
- * ln2/2 <= x <= 22 : cosh(x) := -------------------
- * 2
- * 22 <= x <= lnovft : cosh(x) := exp(x)/2
- * lnovft <= x <= ln2ovft: cosh(x) := exp(x/2)/2 * exp(x/2)
- * ln2ovft < x : cosh(x) := huge*huge (overflow)
- *
- * Special cases:
- * cosh(x) is |x| if x is +INF, -INF, or NaN.
- * only cosh(0)=1 is exact for finite x.
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const double one = 1.0, half=0.5, huge = 1.0e300;
-
-double
-__ieee754_cosh(double x)
-{
- double t,w;
- int32_t ix;
- u_int32_t lx;
-
- /* High word of |x|. */
- GET_HIGH_WORD(ix,x);
- ix &= 0x7fffffff;
-
- /* x is INF or NaN */
- if(ix>=0x7ff00000) return x*x;
-
- /* |x| in [0,0.5*ln2], return 1+expm1(|x|)^2/(2*exp(|x|)) */
- if(ix<0x3fd62e43) {
- t = expm1(fabs(x));
- w = one+t;
- if (ix<0x3c800000) return w; /* cosh(tiny) = 1 */
- return one+(t*t)/(w+w);
- }
-
- /* |x| in [0.5*ln2,22], return (exp(|x|)+1/exp(|x|)/2; */
- if (ix < 0x40360000) {
- t = __ieee754_exp(fabs(x));
- return half*t+half/t;
- }
-
- /* |x| in [22, log(maxdouble)] return half*exp(|x|) */
- if (ix < 0x40862E42) return half*__ieee754_exp(fabs(x));
-
- /* |x| in [log(maxdouble), overflowthresold] */
- GET_LOW_WORD(lx,x);
- if (ix<0x408633CE ||
- ((ix==0x408633ce)&&(lx<=(u_int32_t)0x8fb9f87d))) {
- w = __ieee754_exp(half*fabs(x));
- t = half*w;
- return t*w;
- }
-
- /* |x| > overflowthresold, cosh(x) overflow */
- return huge*huge;
-}
diff --git a/StdLib/LibC/Math/e_exp.c b/StdLib/LibC/Math/e_exp.c
deleted file mode 100644
index f05f5397e6..0000000000
--- a/StdLib/LibC/Math/e_exp.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/* @(#)e_exp.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: e_exp.c,v 1.11 2002/05/26 22:01:49 wiz Exp $");
-#endif
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
- // C4756: overflow in constant arithmetic
- #pragma warning ( disable : 4756 )
-#endif
-
-/* __ieee754_exp(x)
- * Returns the exponential of x.
- *
- * Method
- * 1. Argument reduction:
- * Reduce x to an r so that |r| <= 0.5*ln2 ~ 0.34658.
- * Given x, find r and integer k such that
- *
- * x = k*ln2 + r, |r| <= 0.5*ln2.
- *
- * Here r will be represented as r = hi-lo for better
- * accuracy.
- *
- * 2. Approximation of exp(r) by a special rational function on
- * the interval [0,0.34658]:
- * Write
- * R(r**2) = r*(exp(r)+1)/(exp(r)-1) = 2 + r*r/6 - r**4/360 + ...
- * We use a special Reme algorithm on [0,0.34658] to generate
- * a polynomial of degree 5 to approximate R. The maximum error
- * of this polynomial approximation is bounded by 2**-59. In
- * other words,
- * R(z) ~ 2.0 + P1*z + P2*z**2 + P3*z**3 + P4*z**4 + P5*z**5
- * (where z=r*r, and the values of P1 to P5 are listed below)
- * and
- * | 5 | -59
- * | 2.0+P1*z+...+P5*z - R(z) | <= 2
- * | |
- * The computation of exp(r) thus becomes
- * 2*r
- * exp(r) = 1 + -------
- * R - r
- * r*R1(r)
- * = 1 + r + ----------- (for better accuracy)
- * 2 - R1(r)
- * where
- * 2 4 10
- * R1(r) = r - (P1*r + P2*r + ... + P5*r ).
- *
- * 3. Scale back to obtain exp(x):
- * From step 1, we have
- * exp(x) = 2^k * exp(r)
- *
- * Special cases:
- * exp(INF) is INF, exp(NaN) is NaN;
- * exp(-INF) is 0, and
- * for finite argument, only exp(0)=1 is exact.
- *
- * Accuracy:
- * according to an error analysis, the error is always less than
- * 1 ulp (unit in the last place).
- *
- * Misc. info.
- * For IEEE double
- * if x > 7.09782712893383973096e+02 then exp(x) overflow
- * if x < -7.45133219101941108420e+02 then exp(x) underflow
- *
- * Constants:
- * The hexadecimal values are the intended ones for the following
- * constants. The decimal values may be used, provided that the
- * compiler will convert from decimal to binary accurately enough
- * to produce the hexadecimal values shown.
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const double
-one = 1.0,
-halF[2] = {0.5,-0.5,},
-huge = 1.0e+300,
-twom1000= 9.33263618503218878990e-302, /* 2**-1000=0x01700000,0*/
-o_threshold= 7.09782712893383973096e+02, /* 0x40862E42, 0xFEFA39EF */
-u_threshold= -7.45133219101941108420e+02, /* 0xc0874910, 0xD52D3051 */
-ln2HI[2] ={ 6.93147180369123816490e-01, /* 0x3fe62e42, 0xfee00000 */
- -6.93147180369123816490e-01,},/* 0xbfe62e42, 0xfee00000 */
-ln2LO[2] ={ 1.90821492927058770002e-10, /* 0x3dea39ef, 0x35793c76 */
- -1.90821492927058770002e-10,},/* 0xbdea39ef, 0x35793c76 */
-invln2 = 1.44269504088896338700e+00, /* 0x3ff71547, 0x652b82fe */
-P1 = 1.66666666666666019037e-01, /* 0x3FC55555, 0x5555553E */
-P2 = -2.77777777770155933842e-03, /* 0xBF66C16C, 0x16BEBD93 */
-P3 = 6.61375632143793436117e-05, /* 0x3F11566A, 0xAF25DE2C */
-P4 = -1.65339022054652515390e-06, /* 0xBEBBBD41, 0xC5D26BF1 */
-P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */
-
-
-double
-__ieee754_exp(double x) /* default IEEE double exp */
-{
- double y,hi,lo,c,t;
- int32_t k,xsb;
- u_int32_t hx;
-
- hi = lo = 0;
- k = 0;
- GET_HIGH_WORD(hx,x);
- xsb = (hx>>31)&1; /* sign bit of x */
- hx &= 0x7fffffff; /* high word of |x| */
-
- /* filter out non-finite argument */
- if(hx >= 0x40862E42) { /* if |x|>=709.78... */
- if(hx>=0x7ff00000) {
- u_int32_t lx;
- GET_LOW_WORD(lx,x);
- if(((hx&0xfffff)|lx)!=0)
- return x+x; /* NaN */
- else return (xsb==0)? x:0.0; /* exp(+-inf)={inf,0} */
- }
- if(x > o_threshold) return huge*huge; /* overflow */
- if(x < u_threshold) return twom1000*twom1000; /* underflow */
- }
-
- /* argument reduction */
- if(hx > 0x3fd62e42) { /* if |x| > 0.5 ln2 */
- if(hx < 0x3FF0A2B2) { /* and |x| < 1.5 ln2 */
- hi = x-ln2HI[xsb]; lo=ln2LO[xsb]; k = 1-xsb-xsb;
- } else {
- k = (int32_t)(invln2*x+halF[xsb]);
- t = k;
- hi = x - t*ln2HI[0]; /* t*ln2HI is exact here */
- lo = t*ln2LO[0];
- }
- x = hi - lo;
- }
- else if(hx < 0x3e300000) { /* when |x|<2**-28 */
- if(huge+x>one) return one+x;/* trigger inexact */
- }
- else k = 0;
-
- /* x is now in primary range */
- t = x*x;
- c = x - t*(P1+t*(P2+t*(P3+t*(P4+t*P5))));
- if(k==0) return one-((x*c)/(c-2.0)-x);
- else y = one-((lo-(x*c)/(2.0-c))-hi);
- if(k >= -1021) {
- u_int32_t hy;
- GET_HIGH_WORD(hy,y);
- SET_HIGH_WORD(y,hy+(k<<20)); /* add k to y's exponent */
- return y;
- } else {
- u_int32_t hy;
- GET_HIGH_WORD(hy,y);
- SET_HIGH_WORD(y,hy+((k+1000)<<20)); /* add k to y's exponent */
- return y*twom1000;
- }
-}
diff --git a/StdLib/LibC/Math/e_fmod.c b/StdLib/LibC/Math/e_fmod.c
deleted file mode 100644
index 3cb06c12b0..0000000000
--- a/StdLib/LibC/Math/e_fmod.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/* @(#)e_fmod.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: e_fmod.c,v 1.11 2002/05/26 22:01:49 wiz Exp $");
-#endif
-
-/*
- * __ieee754_fmod(x,y)
- * Return x mod y in exact arithmetic
- * Method: shift and subtract
- */
-
-#include "math.h"
-#include "math_private.h"
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
- // unary minus operator applied to unsigned type, result still unsigned
- #pragma warning ( disable : 4146 )
-#endif
-
-static const double one = 1.0, Zero[] = {0.0, -0.0,};
-
-double
-__ieee754_fmod(double x, double y)
-{
- int32_t n,hx,hy,hz,ix,iy,sx,i;
- u_int32_t lx,ly,lz;
-
- EXTRACT_WORDS(hx,lx,x);
- EXTRACT_WORDS(hy,ly,y);
- sx = hx&0x80000000; /* sign of x */
- hx ^=sx; /* |x| */
- hy &= 0x7fffffff; /* |y| */
-
- /* purge off exception values */
- if((hy|ly)==0||(hx>=0x7ff00000)|| /* y=0,or x not finite */
- ((hy|((ly|-ly)>>31))>0x7ff00000)) /* or y is NaN */
- return (x*y)/(x*y);
- if(hx<=hy) {
- if((hx<hy)||(lx<ly)) return x; /* |x|<|y| return x */
- if(lx==ly)
- return Zero[(u_int32_t)sx>>31]; /* |x|=|y| return x*0*/
- }
-
- /* determine ix = ilogb(x) */
- if(hx<0x00100000) { /* subnormal x */
- if(hx==0) {
- for (ix = -1043, i=lx; i>0; i<<=1) ix -=1;
- } else {
- for (ix = -1022,i=(hx<<11); i>0; i<<=1) ix -=1;
- }
- } else ix = (hx>>20)-1023;
-
- /* determine iy = ilogb(y) */
- if(hy<0x00100000) { /* subnormal y */
- if(hy==0) {
- for (iy = -1043, i=ly; i>0; i<<=1) iy -=1;
- } else {
- for (iy = -1022,i=(hy<<11); i>0; i<<=1) iy -=1;
- }
- } else iy = (hy>>20)-1023;
-
- /* set up {hx,lx}, {hy,ly} and align y to x */
- if(ix >= -1022)
- hx = 0x00100000|(0x000fffff&hx);
- else { /* subnormal x, shift x to normal */
- n = -1022-ix;
- if(n<=31) {
- hx = (hx<<n)|(lx>>(32-n));
- lx <<= n;
- } else {
- hx = lx<<(n-32);
- lx = 0;
- }
- }
- if(iy >= -1022)
- hy = 0x00100000|(0x000fffff&hy);
- else { /* subnormal y, shift y to normal */
- n = -1022-iy;
- if(n<=31) {
- hy = (hy<<n)|(ly>>(32-n));
- ly <<= n;
- } else {
- hy = ly<<(n-32);
- ly = 0;
- }
- }
-
- /* fix point fmod */
- n = ix - iy;
- while(n--) {
- hz=hx-hy;lz=lx-ly; if(lx<ly) hz -= 1;
- if(hz<0){hx = hx+hx+(lx>>31); lx = lx+lx;}
- else {
- if((hz|lz)==0) /* return sign(x)*0 */
- return Zero[(u_int32_t)sx>>31];
- hx = hz+hz+(lz>>31); lx = lz+lz;
- }
- }
- hz=hx-hy;lz=lx-ly; if(lx<ly) hz -= 1;
- if(hz>=0) {hx=hz;lx=lz;}
-
- /* convert back to floating value and restore the sign */
- if((hx|lx)==0) /* return sign(x)*0 */
- return Zero[(u_int32_t)sx>>31];
- while(hx<0x00100000) { /* normalize x */
- hx = hx+hx+(lx>>31); lx = lx+lx;
- iy -= 1;
- }
- if(iy>= -1022) { /* normalize output */
- hx = ((hx-0x00100000)|((iy+1023)<<20));
- INSERT_WORDS(x,hx|sx,lx);
- } else { /* subnormal output */
- n = -1022 - iy;
- if(n<=20) {
- lx = (lx>>n)|((u_int32_t)hx<<(32-n));
- hx >>= n;
- } else if (n<=31) {
- lx = (hx<<(32-n))|(lx>>n); hx = sx;
- } else {
- lx = hx>>(n-32); hx = sx;
- }
- INSERT_WORDS(x,hx|sx,lx);
- x *= one; /* create necessary signal */
- }
- return x; /* exact output */
-}
diff --git a/StdLib/LibC/Math/e_log.c b/StdLib/LibC/Math/e_log.c
deleted file mode 100644
index 979b7f9421..0000000000
--- a/StdLib/LibC/Math/e_log.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/** @file
- Compute the logrithm of x.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
-
- e_log.c 5.1 93/09/24
- NetBSD: e_log.c,v 1.12 2002/05/26 22:01:51 wiz Exp
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
- // potential divide by 0 -- near line 118, (x-x)/zero is on purpose
- #pragma warning ( disable : 4723 )
-#endif
-
-/* __ieee754_log(x)
- * Return the logrithm of x
- *
- * Method :
- * 1. Argument Reduction: find k and f such that
- * x = 2^k * (1+f),
- * where sqrt(2)/2 < 1+f < sqrt(2) .
- *
- * 2. Approximation of log(1+f).
- * Let s = f/(2+f) ; based on log(1+f) = log(1+s) - log(1-s)
- * = 2s + 2/3 s**3 + 2/5 s**5 + .....,
- * = 2s + s*R
- * We use a special Reme algorithm on [0,0.1716] to generate
- * a polynomial of degree 14 to approximate R The maximum error
- * of this polynomial approximation is bounded by 2**-58.45. In
- * other words,
- * 2 4 6 8 10 12 14
- * R(z) ~ Lg1*s +Lg2*s +Lg3*s +Lg4*s +Lg5*s +Lg6*s +Lg7*s
- * (the values of Lg1 to Lg7 are listed in the program)
- * and
- * | 2 14 | -58.45
- * | Lg1*s +...+Lg7*s - R(z) | <= 2
- * | |
- * Note that 2s = f - s*f = f - hfsq + s*hfsq, where hfsq = f*f/2.
- * In order to guarantee error in log below 1ulp, we compute log
- * by
- * log(1+f) = f - s*(f - R) (if f is not too large)
- * log(1+f) = f - (hfsq - s*(hfsq+R)). (better accuracy)
- *
- * 3. Finally, log(x) = k*ln2 + log(1+f).
- * = k*ln2_hi+(f-(hfsq-(s*(hfsq+R)+k*ln2_lo)))
- * Here ln2 is split into two floating point number:
- * ln2_hi + ln2_lo,
- * where n*ln2_hi is always exact for |n| < 2000.
- *
- * Special cases:
- * log(x) is NaN with signal if x < 0 (including -INF) ;
- * log(+INF) is +INF; log(0) is -INF with signal;
- * log(NaN) is that NaN with no signal.
- *
- * Accuracy:
- * according to an error analysis, the error is always less than
- * 1 ulp (unit in the last place).
- *
- * Constants:
- * The hexadecimal values are the intended ones for the following
- * constants. The decimal values may be used, provided that the
- * compiler will convert from decimal to binary accurately enough
- * to produce the hexadecimal values shown.
- */
-
-#include "math.h"
-#include "math_private.h"
-#include <errno.h>
-
-static const double
-ln2_hi = 6.93147180369123816490e-01, /* 3fe62e42 fee00000 */
-ln2_lo = 1.90821492927058770002e-10, /* 3dea39ef 35793c76 */
-two54 = 1.80143985094819840000e+16, /* 43500000 00000000 */
-Lg1 = 6.666666666666735130e-01, /* 3FE55555 55555593 */
-Lg2 = 3.999999999940941908e-01, /* 3FD99999 9997FA04 */
-Lg3 = 2.857142874366239149e-01, /* 3FD24924 94229359 */
-Lg4 = 2.222219843214978396e-01, /* 3FCC71C5 1D8E78AF */
-Lg5 = 1.818357216161805012e-01, /* 3FC74664 96CB03DE */
-Lg6 = 1.531383769920937332e-01, /* 3FC39A09 D078C69F */
-Lg7 = 1.479819860511658591e-01; /* 3FC2F112 DF3E5244 */
-
-static const double zero = 0.0;
-
-double
-__ieee754_log(double x)
-{
- double hfsq,f,s,z,R,w,t1,t2,dk;
- int32_t k,hx,i,j;
- u_int32_t lx;
-
- EXTRACT_WORDS(hx,lx,x);
-
- k=0;
- if (hx < 0x00100000) { /* x < 2**-1022 */
- if (((hx&0x7fffffff)|lx)==0)
- return -two54/zero; /* log(+-0)=-inf */
- if (hx<0) {
- errno = EDOM;
- return (x-x)/zero; /* log(-#) = NaN */
- }
- k -= 54; x *= two54; /* subnormal number, scale up x */
- GET_HIGH_WORD(hx,x);
- }
- if (hx >= 0x7ff00000) return x+x;
- k += (hx>>20)-1023;
- hx &= 0x000fffff;
- i = (hx+0x95f64)&0x100000;
- SET_HIGH_WORD(x,hx|(i^0x3ff00000)); /* normalize x or x/2 */
- k += (i>>20);
- f = x-1.0;
- if((0x000fffff&(2+hx))<3) { /* |f| < 2**-20 */
- if(f==zero) { if(k==0) return zero; else {dk=(double)k;
- return dk*ln2_hi+dk*ln2_lo;}
- }
- R = f*f*(0.5-0.33333333333333333*f);
- if(k==0) return f-R; else {dk=(double)k;
- return dk*ln2_hi-((R-dk*ln2_lo)-f);}
- }
- s = f/(2.0+f);
- dk = (double)k;
- z = s*s;
- i = hx-0x6147a;
- w = z*z;
- j = 0x6b851-hx;
- t1= w*(Lg2+w*(Lg4+w*Lg6));
- t2= z*(Lg1+w*(Lg3+w*(Lg5+w*Lg7)));
- i |= j;
- R = t2+t1;
- if(i>0) {
- hfsq=0.5*f*f;
- if(k==0) return f-(hfsq-s*(hfsq+R)); else
- return dk*ln2_hi-((hfsq-(s*(hfsq+R)+dk*ln2_lo))-f);
- } else {
- if(k==0) return f-s*(f-R); else
- return dk*ln2_hi-((s*(f-R)-dk*ln2_lo)-f);
- }
-}
diff --git a/StdLib/LibC/Math/e_log10.c b/StdLib/LibC/Math/e_log10.c
deleted file mode 100644
index 141dd6752a..0000000000
--- a/StdLib/LibC/Math/e_log10.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/** @file
- Compute the base 10 logrithm of x.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
-
- e_log10.c 5.1 93/09/24
- NetBSD: e_log10.c,v 1.12 2002/05/26 22:01:51 wiz Exp
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-/* __ieee754_log10(x)
- * Return the base 10 logarithm of x
- *
- * Method :
- * Let log10_2hi = leading 40 bits of log10(2) and
- * log10_2lo = log10(2) - log10_2hi,
- * ivln10 = 1/log(10) rounded.
- * Then
- * n = ilogb(x),
- * if(n<0) n = n+1;
- * x = scalbn(x,-n);
- * log10(x) := n*log10_2hi + (n*log10_2lo + ivln10*log(x))
- *
- * Note 1:
- * To guarantee log10(10**n)=n, where 10**n is normal, the rounding
- * mode must set to Round-to-Nearest.
- * Note 2:
- * [1/log(10)] rounded to 53 bits has error .198 ulps;
- * log10 is monotonic at all binary break points.
- *
- * Special cases:
- * log10(x) is NaN with signal if x < 0;
- * log10(+INF) is +INF with no signal; log10(0) is -INF with signal;
- * log10(NaN) is that NaN with no signal;
- * log10(10**N) = N for N=0,1,...,22.
- *
- * Constants:
- * The hexadecimal values are the intended ones for the following constants.
- * The decimal values may be used, provided that the compiler will convert
- * from decimal to binary accurately enough to produce the hexadecimal values
- * shown.
- */
-
-#include "math.h"
-#include "math_private.h"
-#include <errno.h>
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
- // potential divide by 0 -- near line 80, (x-x)/zero is on purpose
- #pragma warning ( disable : 4723 )
-#endif
-
-static const double
-two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
-ivln10 = 4.34294481903251816668e-01, /* 0x3FDBCB7B, 0x1526E50E */
-log10_2hi = 3.01029995663611771306e-01, /* 0x3FD34413, 0x509F6000 */
-log10_2lo = 3.69423907715893078616e-13; /* 0x3D59FEF3, 0x11F12B36 */
-
-static const double zero = 0.0;
-
-double
-__ieee754_log10(double x)
-{
- double y,z;
- int32_t i,k,hx;
- u_int32_t lx;
-
- EXTRACT_WORDS(hx,lx,x);
-
- k=0;
- if (hx < 0x00100000) { /* x < 2**-1022 */
- if (((hx&0x7fffffff)|lx)==0)
- return -two54/zero; /* log(+-0)=-inf */
- if (hx<0) {
- errno = EDOM;
- return (x-x)/zero; /* log(-#) = NaN */
- }
- k -= 54; x *= two54; /* subnormal number, scale up x */
- GET_HIGH_WORD(hx,x);
- }
- if (hx >= 0x7ff00000) return x+x;
- k += (hx>>20)-1023;
- i = ((u_int32_t)k&0x80000000)>>31;
- hx = (hx&0x000fffff)|((0x3ff-i)<<20);
- y = (double)(k+i);
- SET_HIGH_WORD(x,hx);
- z = y*log10_2lo + ivln10*__ieee754_log(x);
- return z+y*log10_2hi;
-}
diff --git a/StdLib/LibC/Math/e_log2.c b/StdLib/LibC/Math/e_log2.c
deleted file mode 100644
index 5d15cd3b01..0000000000
--- a/StdLib/LibC/Math/e_log2.c
+++ /dev/null
@@ -1,85 +0,0 @@
-
-/* @(#)e_log.c 1.3 95/01/18 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunSoft, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: e_log2.c,v 1.1 2005/07/21 12:55:58 christos Exp $");
-#endif
-
-#include "math.h"
-#include "math_private.h"
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
- // potential divide by 0 -- near line 53, (x-x)/zero is on purpose
- #pragma warning ( disable : 4723 )
-#endif
-
-static const double
-ln2 = 0.6931471805599452862268,
-two54 = 1.80143985094819840000e+16, /* 43500000 00000000 */
-Lg1 = 6.666666666666735130e-01, /* 3FE55555 55555593 */
-Lg2 = 3.999999999940941908e-01, /* 3FD99999 9997FA04 */
-Lg3 = 2.857142874366239149e-01, /* 3FD24924 94229359 */
-Lg4 = 2.222219843214978396e-01, /* 3FCC71C5 1D8E78AF */
-Lg5 = 1.818357216161805012e-01, /* 3FC74664 96CB03DE */
-Lg6 = 1.531383769920937332e-01, /* 3FC39A09 D078C69F */
-Lg7 = 1.479819860511658591e-01; /* 3FC2F112 DF3E5244 */
-
-static const double zero = 0.0;
-
-double
-__ieee754_log2(double x)
-{
- double hfsq,f,s,z,R,w,t1,t2,dk;
- int32_t k,hx,i,j;
- u_int32_t lx;
-
- EXTRACT_WORDS(hx,lx,x);
-
- k=0;
- if (hx < 0x00100000) { /* x < 2**-1022 */
- if (((hx&0x7fffffff)|lx)==0)
- return -two54/zero; /* log(+-0)=-inf */
- if (hx<0) return (x-x)/zero; /* log(-#) = NaN */
- k -= 54; x *= two54; /* subnormal number, scale up x */
- GET_HIGH_WORD(hx,x);
- }
- if (hx >= 0x7ff00000) return x+x;
- k += (hx>>20)-1023;
- hx &= 0x000fffff;
- i = (hx+0x95f64)&0x100000;
- SET_HIGH_WORD(x,hx|(i^0x3ff00000)); /* normalize x or x/2 */
- k += (i>>20);
- f = x-1.0;
- dk = (double)k;
- if((0x000fffff&(2+hx))<3) { /* |f| < 2**-20 */
- if (f==zero)
- return (dk);
- R = f*f*(0.5-0.33333333333333333*f);
- return (dk-(R-f)/ln2);
- }
- s = f/(2.0+f);
- z = s*s;
- i = hx-0x6147a;
- w = z*z;
- j = 0x6b851-hx;
- t1= w*(Lg2+w*(Lg4+w*Lg6));
- t2= z*(Lg1+w*(Lg3+w*(Lg5+w*Lg7)));
- i |= j;
- R = t2+t1;
- if(i>0) {
- hfsq=0.5*f*f;
- return (dk-(hfsq-s*(hfsq+R)-f)/ln2);
- } else
- return (dk-((s*(f-R))-f)/ln2);
-}
diff --git a/StdLib/LibC/Math/e_pow.c b/StdLib/LibC/Math/e_pow.c
deleted file mode 100644
index 6d2286b41a..0000000000
--- a/StdLib/LibC/Math/e_pow.c
+++ /dev/null
@@ -1,323 +0,0 @@
-/** @file
- Compute the base 10 logrithm of x.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
-
- e_pow.c 5.1 93/09/24
- NetBSD: e_pow.c,v 1.13 2004/06/30 18:43:15 drochner Exp
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
- // C4723: potential divide by zero.
- #pragma warning ( disable : 4723 )
- // C4756: overflow in constant arithmetic
- #pragma warning ( disable : 4756 )
-#endif
-
-/* __ieee754_pow(x,y) return x**y
- *
- * n
- * Method: Let x = 2 * (1+f)
- * 1. Compute and return log2(x) in two pieces:
- * log2(x) = w1 + w2,
- * where w1 has 53-24 = 29 bit trailing zeros.
- * 2. Perform y*log2(x) = n+y' by simulating multi-precision
- * arithmetic, where |y'|<=0.5.
- * 3. Return x**y = 2**n*exp(y'*log2)
- *
- * Special cases:
- * 1. (anything) ** 0 is 1
- * 2. (anything) ** 1 is itself
- * 3. (anything) ** NAN is NAN
- * 4. NAN ** (anything except 0) is NAN
- * 5. +-(|x| > 1) ** +INF is +INF
- * 6. +-(|x| > 1) ** -INF is +0
- * 7. +-(|x| < 1) ** +INF is +0
- * 8. +-(|x| < 1) ** -INF is +INF
- * 9. +-1 ** +-INF is NAN
- * 10. +0 ** (+anything except 0, NAN) is +0
- * 11. -0 ** (+anything except 0, NAN, odd integer) is +0
- * 12. +0 ** (-anything except 0, NAN) is +INF
- * 13. -0 ** (-anything except 0, NAN, odd integer) is +INF
- * 14. -0 ** (odd integer) = -( +0 ** (odd integer) )
- * 15. +INF ** (+anything except 0,NAN) is +INF
- * 16. +INF ** (-anything except 0,NAN) is +0
- * 17. -INF ** (anything) = -0 ** (-anything)
- * 18. (-anything) ** (integer) is (-1)**(integer)*(+anything**integer)
- * 19. (-anything except 0 and inf) ** (non-integer) is NAN
- *
- * Accuracy:
- * pow(x,y) returns x**y nearly rounded. In particular
- * pow(integer,integer)
- * always returns the correct integer provided it is
- * representable.
- *
- * Constants :
- * The hexadecimal values are the intended ones for the following
- * constants. The decimal values may be used, provided that the
- * compiler will convert from decimal to binary accurately enough
- * to produce the hexadecimal values shown.
- */
-
-#include "math.h"
-#include "math_private.h"
-#include <errno.h>
-
-static const double
-bp[] = {1.0, 1.5,},
-dp_h[] = { 0.0, 5.84962487220764160156e-01,}, /* 0x3FE2B803, 0x40000000 */
-dp_l[] = { 0.0, 1.35003920212974897128e-08,}, /* 0x3E4CFDEB, 0x43CFD006 */
-zero = 0.0,
-one = 1.0,
-two = 2.0,
-two53 = 9007199254740992.0, /* 0x43400000, 0x00000000 */
-huge = 1.0e300,
-tiny = 1.0e-300,
- /* poly coefs for (3/2)*(log(x)-2s-2/3*s**3 */
-L1 = 5.99999999999994648725e-01, /* 0x3FE33333, 0x33333303 */
-L2 = 4.28571428578550184252e-01, /* 0x3FDB6DB6, 0xDB6FABFF */
-L3 = 3.33333329818377432918e-01, /* 0x3FD55555, 0x518F264D */
-L4 = 2.72728123808534006489e-01, /* 0x3FD17460, 0xA91D4101 */
-L5 = 2.30660745775561754067e-01, /* 0x3FCD864A, 0x93C9DB65 */
-L6 = 2.06975017800338417784e-01, /* 0x3FCA7E28, 0x4A454EEF */
-P1 = 1.66666666666666019037e-01, /* 0x3FC55555, 0x5555553E */
-P2 = -2.77777777770155933842e-03, /* 0xBF66C16C, 0x16BEBD93 */
-P3 = 6.61375632143793436117e-05, /* 0x3F11566A, 0xAF25DE2C */
-P4 = -1.65339022054652515390e-06, /* 0xBEBBBD41, 0xC5D26BF1 */
-P5 = 4.13813679705723846039e-08, /* 0x3E663769, 0x72BEA4D0 */
-lg2 = 6.93147180559945286227e-01, /* 0x3FE62E42, 0xFEFA39EF */
-lg2_h = 6.93147182464599609375e-01, /* 0x3FE62E43, 0x00000000 */
-lg2_l = -1.90465429995776804525e-09, /* 0xBE205C61, 0x0CA86C39 */
-ovt = 8.0085662595372944372e-0017, /* -(1024-log2(ovfl+.5ulp)) */
-cp = 9.61796693925975554329e-01, /* 0x3FEEC709, 0xDC3A03FD =2/(3ln2) */
-cp_h = 9.61796700954437255859e-01, /* 0x3FEEC709, 0xE0000000 =(float)cp */
-cp_l = -7.02846165095275826516e-09, /* 0xBE3E2FE0, 0x145B01F5 =tail of cp_h*/
-ivln2 = 1.44269504088896338700e+00, /* 0x3FF71547, 0x652B82FE =1/ln2 */
-ivln2_h = 1.44269502162933349609e+00, /* 0x3FF71547, 0x60000000 =24b 1/ln2*/
-ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/
-
-double
-__ieee754_pow(double x, double y)
-{
- double z,ax,z_h,z_l,p_h,p_l;
- double y1,t1,t2,r,s,t,u,v,w;
- int32_t i,j,k,yisint,n;
- int32_t hx,hy,ix,iy;
- u_int32_t lx,ly;
-
- EXTRACT_WORDS(hx,lx,x);
- EXTRACT_WORDS(hy,ly,y);
- ix = hx&0x7fffffff; iy = hy&0x7fffffff;
-
- /* y==zero: x**0 = 1 */
- if((iy|ly)==0) return one;
-
- /* +-NaN return x+y */
- if(ix > 0x7ff00000 || ((ix==0x7ff00000)&&(lx!=0)) ||
- iy > 0x7ff00000 || ((iy==0x7ff00000)&&(ly!=0)))
- return x+y;
-
- /* determine if y is an odd int when x < 0
- * yisint = 0 ... y is not an integer
- * yisint = 1 ... y is an odd int
- * yisint = 2 ... y is an even int
- */
- yisint = 0;
- if(hx<0) {
- if(iy>=0x43400000) yisint = 2; /* even integer y */
- else if(iy>=0x3ff00000) {
- k = (iy>>20)-0x3ff; /* exponent */
- if(k>20) {
- j = ly>>(52-k);
- if((u_int32_t)(j<<(52-k))==ly) yisint = 2-(j&1);
- } else if(ly==0) {
- j = iy>>(20-k);
- if((j<<(20-k))==iy) yisint = 2-(j&1);
- }
- }
- }
-
- /* special value of y */
- if(ly==0) {
- if (iy==0x7ff00000) { /* y is +-inf */
- if(((ix-0x3ff00000)|lx)==0)
- return y - y; /* inf**+-1 is NaN */
- else if (ix >= 0x3ff00000)/* (|x|>1)**+-inf = inf,0 */
- return (hy>=0)? y: zero;
- else /* (|x|<1)**-,+inf = inf,0 */
- return (hy<0)?-y: zero;
- }
- if(iy==0x3ff00000) { /* y is +-1 */
- if(hy<0) return one/x; else return x;
- }
- if(hy==0x40000000) return x*x; /* y is 2 */
- if(hy==0x3fe00000) { /* y is 0.5 */
- if(hx>=0) /* x >= +0 */
- return __ieee754_sqrt(x);
- }
- }
-
- ax = fabs(x);
- /* special value of x */
- if(lx==0) {
- if(ix==0x7ff00000||ix==0||ix==0x3ff00000){
- z = ax; /*x is +-0,+-inf,+-1*/
- if(hy<0) z = one/z; /* z = (1/|x|) */
- if(hx<0) {
- if(((ix-0x3ff00000)|yisint)==0) {
- z = (z-z)/(z-z); /* (-1)**non-int is NaN */
- } else if(yisint==1)
- z = -z; /* (x<0)**odd = -(|x|**odd) */
- }
- return z;
- }
- }
-
- n = (hx>>31)+1;
-
- /* (x<0)**(non-int) is NaN */
- if((n|yisint)==0) {
- errno = EDOM;
- return (x-x)/(x-x);
- }
-
- s = one; /* s (sign of result -ve**odd) = -1 else = 1 */
- if((n|(yisint-1))==0) s = -one;/* (-ve)**(odd int) */
-
- /* |y| is huge */
- if(iy>0x41e00000) { /* if |y| > 2**31 */
- if(iy>0x43f00000){ /* if |y| > 2**64, must o/uflow */
- if(ix<=0x3fefffff) return (hy<0)? huge*huge:tiny*tiny;
- if(ix>=0x3ff00000) return (hy>0)? huge*huge:tiny*tiny;
- }
- /* over/underflow if x is not close to one */
- if(ix<0x3fefffff) return (hy<0)? s*huge*huge:s*tiny*tiny;
- if(ix>0x3ff00000) return (hy>0)? s*huge*huge:s*tiny*tiny;
- /* now |1-x| is tiny <= 2**-20, suffice to compute
- log(x) by x-x^2/2+x^3/3-x^4/4 */
- t = ax-one; /* t has 20 trailing zeros */
- w = (t*t)*(0.5-t*(0.3333333333333333333333-t*0.25));
- u = ivln2_h*t; /* ivln2_h has 21 sig. bits */
- v = t*ivln2_l-w*ivln2;
- t1 = u+v;
- SET_LOW_WORD(t1,0);
- t2 = v-(t1-u);
- } else {
- double ss,s2,s_h,s_l,t_h,t_l;
- n = 0;
- /* take care subnormal number */
- if(ix<0x00100000)
- {ax *= two53; n -= 53; GET_HIGH_WORD(ix,ax); }
- n += ((ix)>>20)-0x3ff;
- j = ix&0x000fffff;
- /* determine interval */
- ix = j|0x3ff00000; /* normalize ix */
- if(j<=0x3988E) k=0; /* |x|<sqrt(3/2) */
- else if(j<0xBB67A) k=1; /* |x|<sqrt(3) */
- else {k=0;n+=1;ix -= 0x00100000;}
- SET_HIGH_WORD(ax,ix);
-
- /* compute ss = s_h+s_l = (x-1)/(x+1) or (x-1.5)/(x+1.5) */
- u = ax-bp[k]; /* bp[0]=1.0, bp[1]=1.5 */
- v = one/(ax+bp[k]);
- ss = u*v;
- s_h = ss;
- SET_LOW_WORD(s_h,0);
- /* t_h=ax+bp[k] High */
- t_h = zero;
- SET_HIGH_WORD(t_h,((ix>>1)|0x20000000)+0x00080000+(k<<18));
- t_l = ax - (t_h-bp[k]);
- s_l = v*((u-s_h*t_h)-s_h*t_l);
- /* compute log(ax) */
- s2 = ss*ss;
- r = s2*s2*(L1+s2*(L2+s2*(L3+s2*(L4+s2*(L5+s2*L6)))));
- r += s_l*(s_h+ss);
- s2 = s_h*s_h;
- t_h = 3.0+s2+r;
- SET_LOW_WORD(t_h,0);
- t_l = r-((t_h-3.0)-s2);
- /* u+v = ss*(1+...) */
- u = s_h*t_h;
- v = s_l*t_h+t_l*ss;
- /* 2/(3log2)*(ss+...) */
- p_h = u+v;
- SET_LOW_WORD(p_h,0);
- p_l = v-(p_h-u);
- z_h = cp_h*p_h; /* cp_h+cp_l = 2/(3*log2) */
- z_l = cp_l*p_h+p_l*cp+dp_l[k];
- /* log2(ax) = (ss+..)*2/(3*log2) = n + dp_h + z_h + z_l */
- t = (double)n;
- t1 = (((z_h+z_l)+dp_h[k])+t);
- SET_LOW_WORD(t1,0);
- t2 = z_l-(((t1-t)-dp_h[k])-z_h);
- }
-
- /* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */
- y1 = y;
- SET_LOW_WORD(y1,0);
- p_l = (y-y1)*t1+y*t2;
- p_h = y1*t1;
- z = p_l+p_h;
- EXTRACT_WORDS(j,i,z);
- if (j>=0x40900000) { /* z >= 1024 */
- if(((j-0x40900000)|i)!=0) /* if z > 1024 */
- return s*huge*huge; /* overflow */
- else {
- if(p_l+ovt>z-p_h) return s*huge*huge; /* overflow */
- }
- } else if((j&0x7fffffff)>=0x4090cc00 ) { /* z <= -1075 */
- if(((j-0xc090cc00)|i)!=0) /* z < -1075 */
- return s*tiny*tiny; /* underflow */
- else {
- if(p_l<=z-p_h) return s*tiny*tiny; /* underflow */
- }
- }
- /*
- * compute 2**(p_h+p_l)
- */
- i = j&0x7fffffff;
- k = (i>>20)-0x3ff;
- n = 0;
- if(i>0x3fe00000) { /* if |z| > 0.5, set n = [z+0.5] */
- n = j+(0x00100000>>(k+1));
- k = ((n&0x7fffffff)>>20)-0x3ff; /* new k for n */
- t = zero;
- SET_HIGH_WORD(t,n&~(0x000fffff>>k));
- n = ((n&0x000fffff)|0x00100000)>>(20-k);
- if(j<0) n = -n;
- p_h -= t;
- }
- t = p_l+p_h;
- SET_LOW_WORD(t,0);
- u = t*lg2_h;
- v = (p_l-(t-p_h))*lg2+t*lg2_l;
- z = u+v;
- w = v-(z-u);
- t = z*z;
- t1 = z - t*(P1+t*(P2+t*(P3+t*(P4+t*P5))));
- r = (z*t1)/(t1-two)-(w+z*w);
- z = one-(r-z);
- GET_HIGH_WORD(j,z);
- j += (n<<20);
- if((j>>20)<=0) z = scalbn(z,n); /* subnormal output */
- else SET_HIGH_WORD(z,j);
- return s*z;
-}
diff --git a/StdLib/LibC/Math/e_rem_pio2.c b/StdLib/LibC/Math/e_rem_pio2.c
deleted file mode 100644
index 7b06d1775f..0000000000
--- a/StdLib/LibC/Math/e_rem_pio2.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/* @(#)e_rem_pio2.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: e_rem_pio2.c,v 1.11 2002/05/26 22:01:52 wiz Exp $");
-#endif
-
-/* __ieee754_rem_pio2(x,y)
- *
- * return the remainder of x rem pi/2 in y[0]+y[1]
- * use __kernel_rem_pio2()
- */
-
-#include "math.h"
-#include "math_private.h"
-
-/*
- * Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi
- */
-static const int32_t two_over_pi[] = {
-0xA2F983, 0x6E4E44, 0x1529FC, 0x2757D1, 0xF534DD, 0xC0DB62,
-0x95993C, 0x439041, 0xFE5163, 0xABDEBB, 0xC561B7, 0x246E3A,
-0x424DD2, 0xE00649, 0x2EEA09, 0xD1921C, 0xFE1DEB, 0x1CB129,
-0xA73EE8, 0x8235F5, 0x2EBB44, 0x84E99C, 0x7026B4, 0x5F7E41,
-0x3991D6, 0x398353, 0x39F49C, 0x845F8B, 0xBDF928, 0x3B1FF8,
-0x97FFDE, 0x05980F, 0xEF2F11, 0x8B5A0A, 0x6D1F6D, 0x367ECF,
-0x27CB09, 0xB74F46, 0x3F669E, 0x5FEA2D, 0x7527BA, 0xC7EBE5,
-0xF17B3D, 0x0739F7, 0x8A5292, 0xEA6BFB, 0x5FB11F, 0x8D5D08,
-0x560330, 0x46FC7B, 0x6BABF0, 0xCFBC20, 0x9AF436, 0x1DA9E3,
-0x91615E, 0xE61B08, 0x659985, 0x5F14A0, 0x68408D, 0xFFD880,
-0x4D7327, 0x310606, 0x1556CA, 0x73A8C9, 0x60E27B, 0xC08C6B,
-};
-
-static const int32_t npio2_hw[] = {
-0x3FF921FB, 0x400921FB, 0x4012D97C, 0x401921FB, 0x401F6A7A, 0x4022D97C,
-0x4025FDBB, 0x402921FB, 0x402C463A, 0x402F6A7A, 0x4031475C, 0x4032D97C,
-0x40346B9C, 0x4035FDBB, 0x40378FDB, 0x403921FB, 0x403AB41B, 0x403C463A,
-0x403DD85A, 0x403F6A7A, 0x40407E4C, 0x4041475C, 0x4042106C, 0x4042D97C,
-0x4043A28C, 0x40446B9C, 0x404534AC, 0x4045FDBB, 0x4046C6CB, 0x40478FDB,
-0x404858EB, 0x404921FB,
-};
-
-/*
- * invpio2: 53 bits of 2/pi
- * pio2_1: first 33 bit of pi/2
- * pio2_1t: pi/2 - pio2_1
- * pio2_2: second 33 bit of pi/2
- * pio2_2t: pi/2 - (pio2_1+pio2_2)
- * pio2_3: third 33 bit of pi/2
- * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3)
- */
-
-static const double
-zero = 0.00000000000000000000e+00, /* 0x00000000, 0x00000000 */
-half = 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */
-two24 = 1.67772160000000000000e+07, /* 0x41700000, 0x00000000 */
-invpio2 = 6.36619772367581382433e-01, /* 0x3FE45F30, 0x6DC9C883 */
-pio2_1 = 1.57079632673412561417e+00, /* 0x3FF921FB, 0x54400000 */
-pio2_1t = 6.07710050650619224932e-11, /* 0x3DD0B461, 0x1A626331 */
-pio2_2 = 6.07710050630396597660e-11, /* 0x3DD0B461, 0x1A600000 */
-pio2_2t = 2.02226624879595063154e-21, /* 0x3BA3198A, 0x2E037073 */
-pio2_3 = 2.02226624871116645580e-21, /* 0x3BA3198A, 0x2E000000 */
-pio2_3t = 8.47842766036889956997e-32; /* 0x397B839A, 0x252049C1 */
-
-int32_t
-__ieee754_rem_pio2(double x, double *y)
-{
- double z,w,t,r,fn;
- double tx[3];
- int32_t e0,i,j,nx,n,ix,hx;
- u_int32_t low;
-
- z = 0;
- GET_HIGH_WORD(hx,x); /* high word of x */
- ix = hx&0x7fffffff;
- if(ix<=0x3fe921fb) /* |x| ~<= pi/4 , no need for reduction */
- {y[0] = x; y[1] = 0; return 0;}
- if(ix<0x4002d97c) { /* |x| < 3pi/4, special case with n=+-1 */
- if(hx>0) {
- z = x - pio2_1;
- if(ix!=0x3ff921fb) { /* 33+53 bit pi is good enough */
- y[0] = z - pio2_1t;
- y[1] = (z-y[0])-pio2_1t;
- } else { /* near pi/2, use 33+33+53 bit pi */
- z -= pio2_2;
- y[0] = z - pio2_2t;
- y[1] = (z-y[0])-pio2_2t;
- }
- return 1;
- } else { /* negative x */
- z = x + pio2_1;
- if(ix!=0x3ff921fb) { /* 33+53 bit pi is good enough */
- y[0] = z + pio2_1t;
- y[1] = (z-y[0])+pio2_1t;
- } else { /* near pi/2, use 33+33+53 bit pi */
- z += pio2_2;
- y[0] = z + pio2_2t;
- y[1] = (z-y[0])+pio2_2t;
- }
- return -1;
- }
- }
- if(ix<=0x413921fb) { /* |x| ~<= 2^19*(pi/2), medium size */
- t = fabs(x);
- n = (int32_t) (t*invpio2+half);
- fn = (double)n;
- r = t-fn*pio2_1;
- w = fn*pio2_1t; /* 1st round good to 85 bit */
- if(n<32&&ix!=npio2_hw[n-1]) {
- y[0] = r-w; /* quick check no cancellation */
- } else {
- u_int32_t high;
- j = ix>>20;
- y[0] = r-w;
- GET_HIGH_WORD(high,y[0]);
- i = j-((high>>20)&0x7ff);
- if(i>16) { /* 2nd iteration needed, good to 118 */
- t = r;
- w = fn*pio2_2;
- r = t-w;
- w = fn*pio2_2t-((t-r)-w);
- y[0] = r-w;
- GET_HIGH_WORD(high,y[0]);
- i = j-((high>>20)&0x7ff);
- if(i>49) { /* 3rd iteration need, 151 bits acc */
- t = r; /* will cover all possible cases */
- w = fn*pio2_3;
- r = t-w;
- w = fn*pio2_3t-((t-r)-w);
- y[0] = r-w;
- }
- }
- }
- y[1] = (r-y[0])-w;
- if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;}
- else return n;
- }
- /*
- * all other (large) arguments
- */
- if(ix>=0x7ff00000) { /* x is inf or NaN */
- y[0]=y[1]=x-x; return 0;
- }
- /* set z = scalbn(|x|,ilogb(x)-23) */
- GET_LOW_WORD(low,x);
- SET_LOW_WORD(z,low);
- e0 = (ix>>20)-1046; /* e0 = ilogb(z)-23; */
- SET_HIGH_WORD(z, ix - ((int32_t)(e0<<20)));
- for(i=0;i<2;i++) {
- tx[i] = (double)((int32_t)(z));
- z = (z-tx[i])*two24;
- }
- tx[2] = z;
- nx = 3;
- while(tx[nx-1]==zero) nx--; /* skip zero term */
- n = __kernel_rem_pio2(tx,y,e0,nx,2,two_over_pi);
- if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;}
- return n;
-}
diff --git a/StdLib/LibC/Math/e_sinh.c b/StdLib/LibC/Math/e_sinh.c
deleted file mode 100644
index 421b515cd4..0000000000
--- a/StdLib/LibC/Math/e_sinh.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* @(#)e_sinh.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: e_sinh.c,v 1.11 2002/05/26 22:01:52 wiz Exp $");
-#endif
-
-#include "math.h"
-#include "math_private.h"
-
-/* __ieee754_sinh(x)
- * Method :
- * mathematically sinh(x) if defined to be (exp(x)-exp(-x))/2
- * 1. Replace x by |x| (sinh(-x) = -sinh(x)).
- * 2.
- * E + E/(E+1)
- * 0 <= x <= 22 : sinh(x) := --------------, E=expm1(x)
- * 2
- *
- * 22 <= x <= lnovft : sinh(x) := exp(x)/2
- * lnovft <= x <= ln2ovft: sinh(x) := exp(x/2)/2 * exp(x/2)
- * ln2ovft < x : sinh(x) := x*shuge (overflow)
- *
- * Special cases:
- * sinh(x) is |x| if x is +INF, -INF, or NaN.
- * only sinh(0)=0 is exact for finite x.
- */
-
-static const double one = 1.0, shuge = 1.0e307;
-
-double
-__ieee754_sinh(double x)
-{
- double t,w,h;
- int32_t ix,jx;
- u_int32_t lx;
-
- /* High word of |x|. */
- GET_HIGH_WORD(jx,x);
- ix = jx&0x7fffffff;
-
- /* x is INF or NaN */
- if(ix>=0x7ff00000) return x+x;
-
- h = 0.5;
- if (jx<0) h = -h;
- /* |x| in [0,22], return sign(x)*0.5*(E+E/(E+1))) */
- if (ix < 0x40360000) { /* |x|<22 */
- if (ix<0x3e300000) /* |x|<2**-28 */
- if(shuge+x>one) return x;/* sinh(tiny) = tiny with inexact */
- t = expm1(fabs(x));
- if(ix<0x3ff00000) return h*(2.0*t-t*t/(t+one));
- return h*(t+t/(t+one));
- }
-
- /* |x| in [22, log(maxdouble)] return 0.5*exp(|x|) */
- if (ix < 0x40862E42) return h*__ieee754_exp(fabs(x));
-
- /* |x| in [log(maxdouble), overflowthresold] */
- GET_LOW_WORD(lx,x);
- if (ix<0x408633CE || ((ix==0x408633ce)&&(lx<=(u_int32_t)0x8fb9f87d))) {
- w = __ieee754_exp(0.5*fabs(x));
- t = h*w;
- return t*w;
- }
-
- /* |x| > overflowthresold, sinh(x) overflow */
- return x*shuge;
-}
diff --git a/StdLib/LibC/Math/e_sqrt.c b/StdLib/LibC/Math/e_sqrt.c
deleted file mode 100644
index 2a772f60b4..0000000000
--- a/StdLib/LibC/Math/e_sqrt.c
+++ /dev/null
@@ -1,464 +0,0 @@
-/** @file
- Compute the logrithm of x.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
-
- e_sqrt.c 5.1 93/09/24
- NetBSD: e_sqrt.c,v 1.12 2002/05/26 22:01:52 wiz Exp
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <errno.h>
-#include "math.h"
-#include "math_private.h"
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
-// potential divide by 0 -- near line 129, (x-x)/(x-x) is on purpose
-#pragma warning ( disable : 4723 )
-#endif
-
-/* __ieee754_sqrt(x)
- * Return correctly rounded sqrt.
- * ------------------------------------------
- * | Use the hardware sqrt if you have one |
- * ------------------------------------------
- * Method:
- * Bit by bit method using integer arithmetic. (Slow, but portable)
- * 1. Normalization
- * Scale x to y in [1,4) with even powers of 2:
- * find an integer k such that 1 <= (y=x*2^(2k)) < 4, then
- * sqrt(x) = 2^k * sqrt(y)
- * 2. Bit by bit computation
- * Let q = sqrt(y) truncated to i bit after binary point (q = 1),
- * i 0
- * i+1 2
- * s = 2*q , and y = 2 * ( y - q ). (1)
- * i i i i
- *
- * To compute q from q , one checks whether
- * i+1 i
- *
- * -(i+1) 2
- * (q + 2 ) <= y. (2)
- * i
- * -(i+1)
- * If (2) is false, then q = q ; otherwise q = q + 2 .
- * i+1 i i+1 i
- *
- * With some algebric manipulation, it is not difficult to see
- * that (2) is equivalent to
- * -(i+1)
- * s + 2 <= y (3)
- * i i
- *
- * The advantage of (3) is that s and y can be computed by
- * i i
- * the following recurrence formula:
- * if (3) is false
- *
- * s = s , y = y ; (4)
- * i+1 i i+1 i
- *
- * otherwise,
- * -i -(i+1)
- * s = s + 2 , y = y - s - 2 (5)
- * i+1 i i+1 i i
- *
- * One may easily use induction to prove (4) and (5).
- * Note. Since the left hand side of (3) contain only i+2 bits,
- * it does not necessary to do a full (53-bit) comparison
- * in (3).
- * 3. Final rounding
- * After generating the 53 bits result, we compute one more bit.
- * Together with the remainder, we can decide whether the
- * result is exact, bigger than 1/2ulp, or less than 1/2ulp
- * (it will never equal to 1/2ulp).
- * The rounding mode can be detected by checking whether
- * huge + tiny is equal to huge, and whether huge - tiny is
- * equal to huge for some floating point number "huge" and "tiny".
- *
- * Special cases:
- * sqrt(+-0) = +-0 ... exact
- * sqrt(inf) = inf
- * sqrt(-ve) = NaN ... with invalid signal
- * sqrt(NaN) = NaN ... with invalid signal for signaling NaN
- *
- * Other methods : see the appended file at the end of the program below.
- *---------------
- */
-
-static const double one = 1.0, tiny=1.0e-300;
-
-double
-__ieee754_sqrt(double x)
-{
- double z;
- int32_t sign = (int)0x80000000;
- int32_t ix0,s0,q,m,t,i;
- u_int32_t r,t1,s1,ix1,q1;
-
- EXTRACT_WORDS(ix0,ix1,x);
-
- /* take care of Inf and NaN */
- if((ix0&0x7ff00000)==0x7ff00000) {
- return x*x+x; /* sqrt(NaN)=NaN, sqrt(+inf)=+inf
- sqrt(-inf)=sNaN */
- }
- /* take care of zero */
- if(ix0<=0) {
- if(((ix0&(~sign))|ix1)==0) return x;/* sqrt(+-0) = +-0 */
- else if(ix0<0) {
- errno = EDOM;
- return (x-x)/(x-x); /* sqrt(-ve) = sNaN */
- }
- }
- /* normalize x */
- m = (ix0>>20);
- if(m==0) { /* subnormal x */
- while(ix0==0) {
- m -= 21;
- ix0 |= (ix1>>11); ix1 <<= 21;
- }
- for(i=0;(ix0&0x00100000)==0;i++) ix0<<=1;
- m -= i-1;
- ix0 |= (ix1>>(32-i));
- ix1 <<= i;
- }
- m -= 1023; /* unbias exponent */
- ix0 = (ix0&0x000fffff)|0x00100000;
- if(m&1){ /* odd m, double x to make it even */
- ix0 += ix0 + ((ix1&sign)>>31);
- ix1 += ix1;
- }
- m >>= 1; /* m = [m/2] */
-
- /* generate sqrt(x) bit by bit */
- ix0 += ix0 + ((ix1&sign)>>31);
- ix1 += ix1;
- q = q1 = s0 = s1 = 0; /* [q,q1] = sqrt(x) */
- r = 0x00200000; /* r = moving bit from right to left */
-
- while(r!=0) {
- t = s0+r;
- if(t<=ix0) {
- s0 = t+r;
- ix0 -= t;
- q += r;
- }
- ix0 += ix0 + ((ix1&sign)>>31);
- ix1 += ix1;
- r>>=1;
- }
-
- r = sign;
- while(r!=0) {
- t1 = s1+r;
- t = s0;
- if((t<ix0)||((t==ix0)&&(t1<=ix1))) {
- s1 = t1+r;
- if(((t1&sign)==(u_int32_t)sign)&&(s1&sign)==0) s0 += 1;
- ix0 -= t;
- if (ix1 < t1) ix0 -= 1;
- ix1 -= t1;
- q1 += r;
- }
- ix0 += ix0 + ((ix1&sign)>>31);
- ix1 += ix1;
- r>>=1;
- }
-
- /* use floating add to find out rounding direction */
- if((ix0|ix1)!=0) {
- z = one-tiny; /* trigger inexact flag */
- if (z>=one) {
- z = one+tiny;
- if (q1==(u_int32_t)0xffffffff) { q1=0; q += 1;}
- else if (z>one) {
- if (q1==(u_int32_t)0xfffffffe) q+=1;
- q1+=2;
- } else
- q1 += (q1&1);
- }
- }
- ix0 = (q>>1)+0x3fe00000;
- ix1 = q1>>1;
- if ((q&1)==1) ix1 |= sign;
- ix0 += (m <<20);
- INSERT_WORDS(z,ix0,ix1);
- return z;
-}
-
-/*
-Other methods (use floating-point arithmetic)
--------------
-(This is a copy of a drafted paper by Prof W. Kahan
-and K.C. Ng, written in May, 1986)
-
- Two algorithms are given here to implement sqrt(x)
- (IEEE double precision arithmetic) in software.
- Both supply sqrt(x) correctly rounded. The first algorithm (in
- Section A) uses newton iterations and involves four divisions.
- The second one uses reciproot iterations to avoid division, but
- requires more multiplications. Both algorithms need the ability
- to chop results of arithmetic operations instead of round them,
- and the INEXACT flag to indicate when an arithmetic operation
- is executed exactly with no roundoff error, all part of the
- standard (IEEE 754-1985). The ability to perform shift, add,
- subtract and logical AND operations upon 32-bit words is needed
- too, though not part of the standard.
-
-A. sqrt(x) by Newton Iteration
-
- (1) Initial approximation
-
- Let x0 and x1 be the leading and the trailing 32-bit words of
- a floating point number x (in IEEE double format) respectively
-
- 1 11 52 ...widths
- ------------------------------------------------------
- x: |s| e | f |
- ------------------------------------------------------
- msb lsb msb lsb ...order
-
-
- ------------------------ ------------------------
- x0: |s| e | f1 | x1: | f2 |
- ------------------------ ------------------------
-
- By performing shifts and subtracts on x0 and x1 (both regarded
- as integers), we obtain an 8-bit approximation of sqrt(x) as
- follows.
-
- k := (x0>>1) + 0x1ff80000;
- y0 := k - T1[31&(k>>15)]. ... y ~ sqrt(x) to 8 bits
- Here k is a 32-bit integer and T1[] is an integer array containing
- correction terms. Now magically the floating value of y (y's
- leading 32-bit word is y0, the value of its trailing word is 0)
- approximates sqrt(x) to almost 8-bit.
-
- Value of T1:
- static int T1[32]= {
- 0, 1024, 3062, 5746, 9193, 13348, 18162, 23592,
- 29598, 36145, 43202, 50740, 58733, 67158, 75992, 85215,
- 83599, 71378, 60428, 50647, 41945, 34246, 27478, 21581,
- 16499, 12183, 8588, 5674, 3403, 1742, 661, 130,};
-
- (2) Iterative refinement
-
- Apply Heron's rule three times to y, we have y approximates
- sqrt(x) to within 1 ulp (Unit in the Last Place):
-
- y := (y+x/y)/2 ... almost 17 sig. bits
- y := (y+x/y)/2 ... almost 35 sig. bits
- y := y-(y-x/y)/2 ... within 1 ulp
-
-
- Remark 1.
- Another way to improve y to within 1 ulp is:
-
- y := (y+x/y) ... almost 17 sig. bits to 2*sqrt(x)
- y := y - 0x00100006 ... almost 18 sig. bits to sqrt(x)
-
- 2
- (x-y )*y
- y := y + 2* ---------- ...within 1 ulp
- 2
- 3y + x
-
-
- This formula has one division fewer than the one above; however,
- it requires more multiplications and additions. Also x must be
- scaled in advance to avoid spurious overflow in evaluating the
- expression 3y*y+x. Hence it is not recommended uless division
- is slow. If division is very slow, then one should use the
- reciproot algorithm given in section B.
-
- (3) Final adjustment
-
- By twiddling y's last bit it is possible to force y to be
- correctly rounded according to the prevailing rounding mode
- as follows. Let r and i be copies of the rounding mode and
- inexact flag before entering the square root program. Also we
- use the expression y+-ulp for the next representable floating
- numbers (up and down) of y. Note that y+-ulp = either fixed
- point y+-1, or multiply y by nextafter(1,+-inf) in chopped
- mode.
-
- I := FALSE; ... reset INEXACT flag I
- R := RZ; ... set rounding mode to round-toward-zero
- z := x/y; ... chopped quotient, possibly inexact
- If(not I) then { ... if the quotient is exact
- if(z=y) {
- I := i; ... restore inexact flag
- R := r; ... restore rounded mode
- return sqrt(x):=y.
- } else {
- z := z - ulp; ... special rounding
- }
- }
- i := TRUE; ... sqrt(x) is inexact
- If (r=RN) then z=z+ulp ... rounded-to-nearest
- If (r=RP) then { ... round-toward-+inf
- y = y+ulp; z=z+ulp;
- }
- y := y+z; ... chopped sum
- y0:=y0-0x00100000; ... y := y/2 is correctly rounded.
- I := i; ... restore inexact flag
- R := r; ... restore rounded mode
- return sqrt(x):=y.
-
- (4) Special cases
-
- Square root of +inf, +-0, or NaN is itself;
- Square root of a negative number is NaN with invalid signal.
-
-
-B. sqrt(x) by Reciproot Iteration
-
- (1) Initial approximation
-
- Let x0 and x1 be the leading and the trailing 32-bit words of
- a floating point number x (in IEEE double format) respectively
- (see section A). By performing shifs and subtracts on x0 and y0,
- we obtain a 7.8-bit approximation of 1/sqrt(x) as follows.
-
- k := 0x5fe80000 - (x0>>1);
- y0:= k - T2[63&(k>>14)]. ... y ~ 1/sqrt(x) to 7.8 bits
-
- Here k is a 32-bit integer and T2[] is an integer array
- containing correction terms. Now magically the floating
- value of y (y's leading 32-bit word is y0, the value of
- its trailing word y1 is set to zero) approximates 1/sqrt(x)
- to almost 7.8-bit.
-
- Value of T2:
- static int T2[64]= {
- 0x1500, 0x2ef8, 0x4d67, 0x6b02, 0x87be, 0xa395, 0xbe7a, 0xd866,
- 0xf14a, 0x1091b,0x11fcd,0x13552,0x14999,0x15c98,0x16e34,0x17e5f,
- 0x18d03,0x19a01,0x1a545,0x1ae8a,0x1b5c4,0x1bb01,0x1bfde,0x1c28d,
- 0x1c2de,0x1c0db,0x1ba73,0x1b11c,0x1a4b5,0x1953d,0x18266,0x16be0,
- 0x1683e,0x179d8,0x18a4d,0x19992,0x1a789,0x1b445,0x1bf61,0x1c989,
- 0x1d16d,0x1d77b,0x1dddf,0x1e2ad,0x1e5bf,0x1e6e8,0x1e654,0x1e3cd,
- 0x1df2a,0x1d635,0x1cb16,0x1be2c,0x1ae4e,0x19bde,0x1868e,0x16e2e,
- 0x1527f,0x1334a,0x11051,0xe951, 0xbe01, 0x8e0d, 0x5924, 0x1edd,};
-
- (2) Iterative refinement
-
- Apply Reciproot iteration three times to y and multiply the
- result by x to get an approximation z that matches sqrt(x)
- to about 1 ulp. To be exact, we will have
- -1ulp < sqrt(x)-z<1.0625ulp.
-
- ... set rounding mode to Round-to-nearest
- y := y*(1.5-0.5*x*y*y) ... almost 15 sig. bits to 1/sqrt(x)
- y := y*((1.5-2^-30)+0.5*x*y*y)... about 29 sig. bits to 1/sqrt(x)
- ... special arrangement for better accuracy
- z := x*y ... 29 bits to sqrt(x), with z*y<1
- z := z + 0.5*z*(1-z*y) ... about 1 ulp to sqrt(x)
-
- Remark 2. The constant 1.5-2^-30 is chosen to bias the error so that
- (a) the term z*y in the final iteration is always less than 1;
- (b) the error in the final result is biased upward so that
- -1 ulp < sqrt(x) - z < 1.0625 ulp
- instead of |sqrt(x)-z|<1.03125ulp.
-
- (3) Final adjustment
-
- By twiddling y's last bit it is possible to force y to be
- correctly rounded according to the prevailing rounding mode
- as follows. Let r and i be copies of the rounding mode and
- inexact flag before entering the square root program. Also we
- use the expression y+-ulp for the next representable floating
- numbers (up and down) of y. Note that y+-ulp = either fixed
- point y+-1, or multiply y by nextafter(1,+-inf) in chopped
- mode.
-
- R := RZ; ... set rounding mode to round-toward-zero
- switch(r) {
- case RN: ... round-to-nearest
- if(x<= z*(z-ulp)...chopped) z = z - ulp; else
- if(x<= z*(z+ulp)...chopped) z = z; else z = z+ulp;
- break;
- case RZ:case RM: ... round-to-zero or round-to--inf
- R:=RP; ... reset rounding mod to round-to-+inf
- if(x<z*z ... rounded up) z = z - ulp; else
- if(x>=(z+ulp)*(z+ulp) ...rounded up) z = z+ulp;
- break;
- case RP: ... round-to-+inf
- if(x>(z+ulp)*(z+ulp)...chopped) z = z+2*ulp; else
- if(x>z*z ...chopped) z = z+ulp;
- break;
- }
-
- Remark 3. The above comparisons can be done in fixed point. For
- example, to compare x and w=z*z chopped, it suffices to compare
- x1 and w1 (the trailing parts of x and w), regarding them as
- two's complement integers.
-
- ...Is z an exact square root?
- To determine whether z is an exact square root of x, let z1 be the
- trailing part of z, and also let x0 and x1 be the leading and
- trailing parts of x.
-
- If ((z1&0x03ffffff)!=0) ... not exact if trailing 26 bits of z!=0
- I := 1; ... Raise Inexact flag: z is not exact
- else {
- j := 1 - [(x0>>20)&1] ... j = logb(x) mod 2
- k := z1 >> 26; ... get z's 25-th and 26-th
- fraction bits
- I := i or (k&j) or ((k&(j+j+1))!=(x1&3));
- }
- R:= r ... restore rounded mode
- return sqrt(x):=z.
-
- If multiplication is cheaper than the foregoing red tape, the
- Inexact flag can be evaluated by
-
- I := i;
- I := (z*z!=x) or I.
-
- Note that z*z can overwrite I; this value must be sensed if it is
- True.
-
- Remark 4. If z*z = x exactly, then bit 25 to bit 0 of z1 must be
- zero.
-
- --------------------
- z1: | f2 |
- --------------------
- bit 31 bit 0
-
- Further more, bit 27 and 26 of z1, bit 0 and 1 of x1, and the odd
- or even of logb(x) have the following relations:
-
- -------------------------------------------------
- bit 27,26 of z1 bit 1,0 of x1 logb(x)
- -------------------------------------------------
- 00 00 odd and even
- 01 01 even
- 10 10 odd
- 10 00 even
- 11 01 even
- -------------------------------------------------
-
- (4) Special cases (see (4) of Section A).
-
- */
-
diff --git a/StdLib/LibC/Math/k_cos.c b/StdLib/LibC/Math/k_cos.c
deleted file mode 100644
index e1746a11d3..0000000000
--- a/StdLib/LibC/Math/k_cos.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* @(#)k_cos.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: k_cos.c,v 1.11 2002/05/26 22:01:53 wiz Exp $");
-#endif
-
-/*
- * __kernel_cos( x, y )
- * kernel cos function on [-pi/4, pi/4], pi/4 ~ 0.785398164
- * Input x is assumed to be bounded by ~pi/4 in magnitude.
- * Input y is the tail of x.
- *
- * Algorithm
- * 1. Since cos(-x) = cos(x), we need only to consider positive x.
- * 2. if x < 2^-27 (hx<0x3e400000 0), return 1 with inexact if x!=0.
- * 3. cos(x) is approximated by a polynomial of degree 14 on
- * [0,pi/4]
- * 4 14
- * cos(x) ~ 1 - x*x/2 + C1*x + ... + C6*x
- * where the remez error is
- *
- * | 2 4 6 8 10 12 14 | -58
- * |cos(x)-(1-.5*x +C1*x +C2*x +C3*x +C4*x +C5*x +C6*x )| <= 2
- * | |
- *
- * 4 6 8 10 12 14
- * 4. let r = C1*x +C2*x +C3*x +C4*x +C5*x +C6*x , then
- * cos(x) = 1 - x*x/2 + r
- * since cos(x+y) ~ cos(x) - sin(x)*y
- * ~ cos(x) - x*y,
- * a correction term is necessary in cos(x) and hence
- * cos(x+y) = 1 - (x*x/2 - (r - x*y))
- * For better accuracy when x > 0.3, let qx = |x|/4 with
- * the last 32 bits mask off, and if x > 0.78125, let qx = 0.28125.
- * Then
- * cos(x+y) = (1-qx) - ((x*x/2-qx) - (r-x*y)).
- * Note that 1-qx and (x*x/2-qx) is EXACT here, and the
- * magnitude of the latter is at least a quarter of x*x/2,
- * thus, reducing the rounding error in the subtraction.
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const double
-one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
-C1 = 4.16666666666666019037e-02, /* 0x3FA55555, 0x5555554C */
-C2 = -1.38888888888741095749e-03, /* 0xBF56C16C, 0x16C15177 */
-C3 = 2.48015872894767294178e-05, /* 0x3EFA01A0, 0x19CB1590 */
-C4 = -2.75573143513906633035e-07, /* 0xBE927E4F, 0x809C52AD */
-C5 = 2.08757232129817482790e-09, /* 0x3E21EE9E, 0xBDB4B1C4 */
-C6 = -1.13596475577881948265e-11; /* 0xBDA8FAE9, 0xBE8838D4 */
-
-double
-__kernel_cos(double x, double y)
-{
- double a,hz,z,r,qx;
- int32_t ix;
- GET_HIGH_WORD(ix,x);
- ix &= 0x7fffffff; /* ix = |x|'s high word*/
- if(ix<0x3e400000) { /* if x < 2**27 */
- if(((int)x)==0) return one; /* generate inexact */
- }
- z = x*x;
- r = z*(C1+z*(C2+z*(C3+z*(C4+z*(C5+z*C6)))));
- if(ix < 0x3FD33333) /* if |x| < 0.3 */
- return one - (0.5*z - (z*r - x*y));
- else {
- if(ix > 0x3fe90000) { /* x > 0.78125 */
- qx = 0.28125;
- } else {
- INSERT_WORDS(qx,ix-0x00200000,0); /* x/4 */
- }
- hz = 0.5*z-qx;
- a = one-qx;
- return a - (hz - (z*r-x*y));
- }
-}
diff --git a/StdLib/LibC/Math/k_rem_pio2.c b/StdLib/LibC/Math/k_rem_pio2.c
deleted file mode 100644
index af2857778d..0000000000
--- a/StdLib/LibC/Math/k_rem_pio2.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/* @(#)k_rem_pio2.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: k_rem_pio2.c,v 1.11 2003/01/04 23:43:03 wiz Exp $");
-#endif
-
-/*
- * __kernel_rem_pio2(x,y,e0,nx,prec,ipio2)
- * double x[],y[]; int e0,nx,prec; int ipio2[];
- *
- * __kernel_rem_pio2 return the last three digits of N with
- * y = x - N*pi/2
- * so that |y| < pi/2.
- *
- * The method is to compute the integer (mod 8) and fraction parts of
- * (2/pi)*x without doing the full multiplication. In general we
- * skip the part of the product that are known to be a huge integer (
- * more accurately, = 0 mod 8 ). Thus the number of operations are
- * independent of the exponent of the input.
- *
- * (2/pi) is represented by an array of 24-bit integers in ipio2[].
- *
- * Input parameters:
- * x[] The input value (must be positive) is broken into nx
- * pieces of 24-bit integers in double precision format.
- * x[i] will be the i-th 24 bit of x. The scaled exponent
- * of x[0] is given in input parameter e0 (i.e., x[0]*2^e0
- * match x's up to 24 bits.
- *
- * Example of breaking a double positive z into x[0]+x[1]+x[2]:
- * e0 = ilogb(z)-23
- * z = scalbn(z,-e0)
- * for i = 0,1,2
- * x[i] = floor(z)
- * z = (z-x[i])*2**24
- *
- *
- * y[] output result in an array of double precision numbers.
- * The dimension of y[] is:
- * 24-bit precision 1
- * 53-bit precision 2
- * 64-bit precision 2
- * 113-bit precision 3
- * The actual value is the sum of them. Thus for 113-bit
- * precison, one may have to do something like:
- *
- * long double t,w,r_head, r_tail;
- * t = (long double)y[2] + (long double)y[1];
- * w = (long double)y[0];
- * r_head = t+w;
- * r_tail = w - (r_head - t);
- *
- * e0 The exponent of x[0]
- *
- * nx dimension of x[]
- *
- * prec an integer indicating the precision:
- * 0 24 bits (single)
- * 1 53 bits (double)
- * 2 64 bits (extended)
- * 3 113 bits (quad)
- *
- * ipio2[]
- * integer array, contains the (24*i)-th to (24*i+23)-th
- * bit of 2/pi after binary point. The corresponding
- * floating value is
- *
- * ipio2[i] * 2^(-24(i+1)).
- *
- * External function:
- * double scalbn(), floor();
- *
- *
- * Here is the description of some local variables:
- *
- * jk jk+1 is the initial number of terms of ipio2[] needed
- * in the computation. The recommended value is 2,3,4,
- * 6 for single, double, extended,and quad.
- *
- * jz local integer variable indicating the number of
- * terms of ipio2[] used.
- *
- * jx nx - 1
- *
- * jv index for pointing to the suitable ipio2[] for the
- * computation. In general, we want
- * ( 2^e0*x[0] * ipio2[jv-1]*2^(-24jv) )/8
- * is an integer. Thus
- * e0-3-24*jv >= 0 or (e0-3)/24 >= jv
- * Hence jv = max(0,(e0-3)/24).
- *
- * jp jp+1 is the number of terms in PIo2[] needed, jp = jk.
- *
- * q[] double array with integral value, representing the
- * 24-bits chunk of the product of x and 2/pi.
- *
- * q0 the corresponding exponent of q[0]. Note that the
- * exponent for q[i] would be q0-24*i.
- *
- * PIo2[] double precision array, obtained by cutting pi/2
- * into 24 bits chunks.
- *
- * f[] ipio2[] in floating point
- *
- * iq[] integer array by breaking up q[] in 24-bits chunk.
- *
- * fq[] final product of x*(2/pi) in fq[0],..,fq[jk]
- *
- * ih integer. If >0 it indicates q[] is >= 0.5, hence
- * it also indicates the *sign* of the result.
- *
- */
-
-
-/*
- * Constants:
- * The hexadecimal values are the intended ones for the following
- * constants. The decimal values may be used, provided that the
- * compiler will convert from decimal to binary accurately enough
- * to produce the hexadecimal values shown.
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const int init_jk[] = {2,3,4,6}; /* initial value for jk */
-
-static const double PIo2[] = {
- 1.57079625129699707031e+00, /* 0x3FF921FB, 0x40000000 */
- 7.54978941586159635335e-08, /* 0x3E74442D, 0x00000000 */
- 5.39030252995776476554e-15, /* 0x3CF84698, 0x80000000 */
- 3.28200341580791294123e-22, /* 0x3B78CC51, 0x60000000 */
- 1.27065575308067607349e-29, /* 0x39F01B83, 0x80000000 */
- 1.22933308981111328932e-36, /* 0x387A2520, 0x40000000 */
- 2.73370053816464559624e-44, /* 0x36E38222, 0x80000000 */
- 2.16741683877804819444e-51, /* 0x3569F31D, 0x00000000 */
-};
-
-static const double
-zero = 0.0,
-one = 1.0,
-two24 = 1.67772160000000000000e+07, /* 0x41700000, 0x00000000 */
-twon24 = 5.96046447753906250000e-08; /* 0x3E700000, 0x00000000 */
-
-int
-__kernel_rem_pio2(double *x, double *y, int e0, int nx, int prec, const int32_t *ipio2)
-{
- int32_t jz,jx,jv,jp,jk,carry,n,iq[20],i,j,k,m,q0,ih;
- double z,fw,f[20],fq[20],q[20];
-
- /* initialize jk*/
- jk = init_jk[prec];
- jp = jk;
-
- /* determine jx,jv,q0, note that 3>q0 */
- jx = nx-1;
- jv = (e0-3)/24; if(jv<0) jv=0;
- q0 = e0-24*(jv+1);
-
- /* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */
- j = jv-jx; m = jx+jk;
- for(i=0;i<=m;i++,j++) f[i] = (j<0)? zero : (double) ipio2[j];
-
- /* compute q[0],q[1],...q[jk] */
- for (i=0;i<=jk;i++) {
- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
- }
-
- jz = jk;
-recompute:
- /* distill q[] into iq[] reversingly */
- for(i=0,j=jz,z=q[jz];j>0;i++,j--) {
- fw = (double)((int32_t)(twon24* z));
- iq[i] = (int32_t)(z-two24*fw);
- z = q[j-1]+fw;
- }
-
- /* compute n */
- z = scalbn(z,q0); /* actual value of z */
- z -= 8.0*floor(z*0.125); /* trim off integer >= 8 */
- n = (int32_t) z;
- z -= (double)n;
- ih = 0;
- if(q0>0) { /* need iq[jz-1] to determine n */
- i = (iq[jz-1]>>(24-q0)); n += i;
- iq[jz-1] -= i<<(24-q0);
- ih = iq[jz-1]>>(23-q0);
- }
- else if(q0==0) ih = iq[jz-1]>>23;
- else if(z>=0.5) ih=2;
-
- if(ih>0) { /* q > 0.5 */
- n += 1; carry = 0;
- for(i=0;i<jz ;i++) { /* compute 1-q */
- j = iq[i];
- if(carry==0) {
- if(j!=0) {
- carry = 1; iq[i] = 0x1000000- j;
- }
- } else iq[i] = 0xffffff - j;
- }
- if(q0>0) { /* rare case: chance is 1 in 12 */
- switch(q0) {
- case 1:
- iq[jz-1] &= 0x7fffff; break;
- case 2:
- iq[jz-1] &= 0x3fffff; break;
- }
- }
- if(ih==2) {
- z = one - z;
- if(carry!=0) z -= scalbn(one,q0);
- }
- }
-
- /* check if recomputation is needed */
- if(z==zero) {
- j = 0;
- for (i=jz-1;i>=jk;i--) j |= iq[i];
- if(j==0) { /* need recomputation */
- for(k=1;iq[jk-k]==0;k++); /* k = no. of terms needed */
-
- for(i=jz+1;i<=jz+k;i++) { /* add q[jz+1] to q[jz+k] */
- f[jx+i] = (double) ipio2[jv+i];
- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j];
- q[i] = fw;
- }
- jz += k;
- goto recompute;
- }
- }
-
- /* chop off zero terms */
- if(z==0.0) {
- jz -= 1; q0 -= 24;
- while(iq[jz]==0) { jz--; q0-=24;}
- } else { /* break z into 24-bit if necessary */
- z = scalbn(z,-q0);
- if(z>=two24) {
- fw = (double)((int32_t)(twon24*z));
- iq[jz] = (int32_t)(z-two24*fw);
- jz += 1; q0 += 24;
- iq[jz] = (int32_t) fw;
- } else iq[jz] = (int32_t) z ;
- }
-
- /* convert integer "bit" chunk to floating-point value */
- fw = scalbn(one,q0);
- for(i=jz;i>=0;i--) {
- q[i] = fw*(double)iq[i]; fw*=twon24;
- }
-
- /* compute PIo2[0,...,jp]*q[jz,...,0] */
- for(i=jz;i>=0;i--) {
- for(fw=0.0,k=0;k<=jp&&k<=jz-i;k++) fw += PIo2[k]*q[i+k];
- fq[jz-i] = fw;
- }
-
- /* compress fq[] into y[] */
- switch(prec) {
- case 0:
- fw = 0.0;
- for (i=jz;i>=0;i--) fw += fq[i];
- y[0] = (ih==0)? fw: -fw;
- break;
- case 1:
- case 2:
- fw = 0.0;
- for (i=jz;i>=0;i--) fw += fq[i];
- y[0] = (ih==0)? fw: -fw;
- fw = fq[0]-fw;
- for (i=1;i<=jz;i++) fw += fq[i];
- y[1] = (ih==0)? fw: -fw;
- break;
- case 3: /* painful */
- for (i=jz;i>0;i--) {
- fw = fq[i-1]+fq[i];
- fq[i] += fq[i-1]-fw;
- fq[i-1] = fw;
- }
- for (i=jz;i>1;i--) {
- fw = fq[i-1]+fq[i];
- fq[i] += fq[i-1]-fw;
- fq[i-1] = fw;
- }
- for (fw=0.0,i=jz;i>=2;i--) fw += fq[i];
- if(ih==0) {
- y[0] = fq[0]; y[1] = fq[1]; y[2] = fw;
- } else {
- y[0] = -fq[0]; y[1] = -fq[1]; y[2] = -fw;
- }
- }
- return n&7;
-}
diff --git a/StdLib/LibC/Math/k_sin.c b/StdLib/LibC/Math/k_sin.c
deleted file mode 100644
index 9e4c22d03d..0000000000
--- a/StdLib/LibC/Math/k_sin.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* @(#)k_sin.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: k_sin.c,v 1.11 2002/05/26 22:01:53 wiz Exp $");
-#endif
-
-/* __kernel_sin( x, y, iy)
- * kernel sin function on [-pi/4, pi/4], pi/4 ~ 0.7854
- * Input x is assumed to be bounded by ~pi/4 in magnitude.
- * Input y is the tail of x.
- * Input iy indicates whether y is 0. (if iy=0, y assume to be 0).
- *
- * Algorithm
- * 1. Since sin(-x) = -sin(x), we need only to consider positive x.
- * 2. if x < 2^-27 (hx<0x3e400000 0), return x with inexact if x!=0.
- * 3. sin(x) is approximated by a polynomial of degree 13 on
- * [0,pi/4]
- * 3 13
- * sin(x) ~ x + S1*x + ... + S6*x
- * where
- *
- * |sin(x) 2 4 6 8 10 12 | -58
- * |----- - (1+S1*x +S2*x +S3*x +S4*x +S5*x +S6*x )| <= 2
- * | x |
- *
- * 4. sin(x+y) = sin(x) + sin'(x')*y
- * ~ sin(x) + (1-x*x/2)*y
- * For better accuracy, let
- * 3 2 2 2 2
- * r = x *(S2+x *(S3+x *(S4+x *(S5+x *S6))))
- * then 3 2
- * sin(x) = x + (S1*x + (x *(r-y/2)+y))
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const double
-half = 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */
-S1 = -1.66666666666666324348e-01, /* 0xBFC55555, 0x55555549 */
-S2 = 8.33333333332248946124e-03, /* 0x3F811111, 0x1110F8A6 */
-S3 = -1.98412698298579493134e-04, /* 0xBF2A01A0, 0x19C161D5 */
-S4 = 2.75573137070700676789e-06, /* 0x3EC71DE3, 0x57B1FE7D */
-S5 = -2.50507602534068634195e-08, /* 0xBE5AE5E6, 0x8A2B9CEB */
-S6 = 1.58969099521155010221e-10; /* 0x3DE5D93A, 0x5ACFD57C */
-
-double
-__kernel_sin(double x, double y, int iy)
-{
- double z,r,v;
- int32_t ix;
- GET_HIGH_WORD(ix,x);
- ix &= 0x7fffffff; /* high word of x */
- if(ix<0x3e400000) /* |x| < 2**-27 */
- {if((int)x==0) return x;} /* generate inexact */
- z = x*x;
- v = z*x;
- r = S2+z*(S3+z*(S4+z*(S5+z*S6)));
- if(iy==0) return x+v*(S1+z*r);
- else return x-((z*(half*y-v*r)-y)-v*S1);
-}
diff --git a/StdLib/LibC/Math/k_tan.c b/StdLib/LibC/Math/k_tan.c
deleted file mode 100644
index ad83a21d3b..0000000000
--- a/StdLib/LibC/Math/k_tan.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/* @(#)k_tan.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: k_tan.c,v 1.12 2004/07/22 18:24:09 drochner Exp $");
-#endif
-
-/* __kernel_tan( x, y, k )
- * kernel tan function on [-pi/4, pi/4], pi/4 ~ 0.7854
- * Input x is assumed to be bounded by ~pi/4 in magnitude.
- * Input y is the tail of x.
- * Input k indicates whether tan (if k=1) or
- * -1/tan (if k= -1) is returned.
- *
- * Algorithm
- * 1. Since tan(-x) = -tan(x), we need only to consider positive x.
- * 2. if x < 2^-28 (hx<0x3e300000 0), return x with inexact if x!=0.
- * 3. tan(x) is approximated by a odd polynomial of degree 27 on
- * [0,0.67434]
- * 3 27
- * tan(x) ~ x + T1*x + ... + T13*x
- * where
- *
- * |tan(x) 2 4 26 | -59.2
- * |----- - (1+T1*x +T2*x +.... +T13*x )| <= 2
- * | x |
- *
- * Note: tan(x+y) = tan(x) + tan'(x)*y
- * ~ tan(x) + (1+x*x)*y
- * Therefore, for better accuracy in computing tan(x+y), let
- * 3 2 2 2 2
- * r = x *(T2+x *(T3+x *(...+x *(T12+x *T13))))
- * then
- * 3 2
- * tan(x+y) = x + (T1*x + (x *(r+y)+y))
- *
- * 4. For x in [0.67434,pi/4], let y = pi/4 - x, then
- * tan(x) = tan(pi/4-y) = (1-tan(y))/(1+tan(y))
- * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y)))
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const double xxx[] = {
- 3.33333333333334091986e-01, /* 3FD55555, 55555563 */
- 1.33333333333201242699e-01, /* 3FC11111, 1110FE7A */
- 5.39682539762260521377e-02, /* 3FABA1BA, 1BB341FE */
- 2.18694882948595424599e-02, /* 3F9664F4, 8406D637 */
- 8.86323982359930005737e-03, /* 3F8226E3, E96E8493 */
- 3.59207910759131235356e-03, /* 3F6D6D22, C9560328 */
- 1.45620945432529025516e-03, /* 3F57DBC8, FEE08315 */
- 5.88041240820264096874e-04, /* 3F4344D8, F2F26501 */
- 2.46463134818469906812e-04, /* 3F3026F7, 1A8D1068 */
- 7.81794442939557092300e-05, /* 3F147E88, A03792A6 */
- 7.14072491382608190305e-05, /* 3F12B80F, 32F0A7E9 */
- -1.85586374855275456654e-05, /* BEF375CB, DB605373 */
- 2.59073051863633712884e-05, /* 3EFB2A70, 74BF7AD4 */
-/* one */ 1.00000000000000000000e+00, /* 3FF00000, 00000000 */
-/* pio4 */ 7.85398163397448278999e-01, /* 3FE921FB, 54442D18 */
-/* pio4lo */ 3.06161699786838301793e-17 /* 3C81A626, 33145C07 */
-};
-#define one xxx[13]
-#define pio4 xxx[14]
-#define pio4lo xxx[15]
-#define T xxx
-
-double
-__kernel_tan(double x, double y, int iy)
-{
- double z, r, v, w, s;
- int32_t ix, hx;
-
- GET_HIGH_WORD(hx, x); /* high word of x */
- ix = hx & 0x7fffffff; /* high word of |x| */
- if (ix < 0x3e300000) { /* x < 2**-28 */
- if ((int) x == 0) { /* generate inexact */
- u_int32_t low;
- GET_LOW_WORD(low, x);
- if(((ix | low) | (iy + 1)) == 0)
- return one / fabs(x);
- else {
- if (iy == 1)
- return x;
- else { /* compute -1 / (x+y) carefully */
- double a, t;
-
- z = w = x + y;
- SET_LOW_WORD(z, 0);
- v = y - (z - x);
- t = a = -one / w;
- SET_LOW_WORD(t, 0);
- s = one + t * z;
- return t + a * (s + t * v);
- }
- }
- }
- }
- if (ix >= 0x3FE59428) { /* |x| >= 0.6744 */
- if (hx < 0) {
- x = -x;
- y = -y;
- }
- z = pio4 - x;
- w = pio4lo - y;
- x = z + w;
- y = 0.0;
- }
- z = x * x;
- w = z * z;
- /*
- * Break x^5*(T[1]+x^2*T[2]+...) into
- * x^5(T[1]+x^4*T[3]+...+x^20*T[11]) +
- * x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12]))
- */
- r = T[1] + w * (T[3] + w * (T[5] + w * (T[7] + w * (T[9] +
- w * T[11]))));
- v = z * (T[2] + w * (T[4] + w * (T[6] + w * (T[8] + w * (T[10] +
- w * T[12])))));
- s = z * x;
- r = y + z * (s * (r + v) + y);
- r += T[0] * s;
- w = x + r;
- if (ix >= 0x3FE59428) {
- v = (double) iy;
- return (double) (1 - ((hx >> 30) & 2)) *
- (v - 2.0 * (x - (w * w / (w + v) - r)));
- }
- if (iy == 1)
- return w;
- else {
- /*
- * if allow error up to 2 ulp, simply return
- * -1.0 / (x+r) here
- */
- /* compute -1.0 / (x+r) accurately */
- double a, t;
- z = w;
- SET_LOW_WORD(z, 0);
- v = r - (z - x); /* z+v = r+x */
- t = a = -1.0 / w; /* a = -1.0/w */
- SET_LOW_WORD(t, 0);
- s = 1.0 + t * z;
- return t + a * (s + t * v);
- }
-}
diff --git a/StdLib/LibC/Math/math_private.h b/StdLib/LibC/Math/math_private.h
deleted file mode 100644
index 0aed7e7950..0000000000
--- a/StdLib/LibC/Math/math_private.h
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/*
- * from: @(#)fdlibm.h 5.1 93/09/24
- * $NetBSD: math_private.h,v 1.12 2005/07/21 12:55:58 christos Exp $
- */
-
-#ifndef _MATH_PRIVATE_H_
-#define _MATH_PRIVATE_H_
-
-#include <sys/types.h>
-
-/* The original fdlibm code used statements like:
- n0 = ((*(int*)&one)>>29)^1; * index of high word *
- ix0 = *(n0+(int*)&x); * high word of x *
- ix1 = *((1-n0)+(int*)&x); * low word of x *
- to dig two 32 bit words out of the 64 bit IEEE floating point
- value. That is non-ANSI, and, moreover, the gcc instruction
- scheduler gets it wrong. We instead use the following macros.
- Unlike the original code, we determine the endianness at compile
- time, not at run time; I don't see much benefit to selecting
- endianness at run time. */
-
-/* A union which permits us to convert between a double and two 32 bit
- ints. */
-
-/*
- * The ARM ports are little endian except for the FPA word order which is
- * big endian.
- */
-
-#if (BYTE_ORDER == BIG_ENDIAN) || (defined(__arm__) && !defined(__VFP_FP__))
-
-typedef union
-{
- double value;
- struct
- {
- u_int32_t msw;
- u_int32_t lsw;
- } parts;
-} ieee_double_shape_type;
-
-#endif
-
-#if (BYTE_ORDER == LITTLE_ENDIAN) && \
- !(defined(__arm__) && !defined(__VFP_FP__))
-
-typedef union
-{
- double value;
- struct
- {
- u_int32_t lsw;
- u_int32_t msw;
- } parts;
-} ieee_double_shape_type;
-
-#endif
-
-/* Get two 32 bit ints from a double. */
-
-#define EXTRACT_WORDS(ix0,ix1,d) \
-do { \
- ieee_double_shape_type ew_u; \
- ew_u.value = (d); \
- (ix0) = ew_u.parts.msw; \
- (ix1) = ew_u.parts.lsw; \
-} while (0)
-
-/* Get the more significant 32 bit int from a double. */
-
-#define GET_HIGH_WORD(i,d) \
-do { \
- ieee_double_shape_type gh_u; \
- gh_u.value = (d); \
- (i) = gh_u.parts.msw; \
-} while (0)
-
-/* Get the less significant 32 bit int from a double. */
-
-#define GET_LOW_WORD(i,d) \
-do { \
- ieee_double_shape_type gl_u; \
- gl_u.value = (d); \
- (i) = gl_u.parts.lsw; \
-} while (0)
-
-/* Set a double from two 32 bit ints. */
-
-#define INSERT_WORDS(d,ix0,ix1) \
-do { \
- ieee_double_shape_type iw_u; \
- iw_u.parts.msw = (ix0); \
- iw_u.parts.lsw = (ix1); \
- (d) = iw_u.value; \
-} while (0)
-
-/* Set the more significant 32 bits of a double from an int. */
-
-#define SET_HIGH_WORD(d,v) \
-do { \
- ieee_double_shape_type sh_u; \
- sh_u.value = (d); \
- sh_u.parts.msw = (v); \
- (d) = sh_u.value; \
-} while (0)
-
-/* Set the less significant 32 bits of a double from an int. */
-
-#define SET_LOW_WORD(d,v) \
-do { \
- ieee_double_shape_type sl_u; \
- sl_u.value = (d); \
- sl_u.parts.lsw = (v); \
- (d) = sl_u.value; \
-} while (0)
-
-/* A union which permits us to convert between a float and a 32 bit
- int. */
-
-typedef union
-{
- float value;
- u_int32_t word;
-} ieee_float_shape_type;
-
-/* Get a 32 bit int from a float. */
-
-#define GET_FLOAT_WORD(i,d) \
-do { \
- ieee_float_shape_type gf_u; \
- gf_u.value = (d); \
- (i) = gf_u.word; \
-} while (0)
-
-/* Set a float from a 32 bit int. */
-
-#define SET_FLOAT_WORD(d,i) \
-do { \
- ieee_float_shape_type sf_u; \
- sf_u.word = (i); \
- (d) = sf_u.value; \
-} while (0)
-
-/* ieee style elementary functions */
-extern double __ieee754_sqrt (double);
-extern double __ieee754_acos (double);
-extern double __ieee754_acosh (double);
-extern double __ieee754_log (double);
-extern double __ieee754_atanh (double);
-extern double __ieee754_asin (double);
-extern double __ieee754_atan2 (double, double);
-extern double __ieee754_exp (double);
-extern double __ieee754_cosh (double);
-extern double __ieee754_fmod (double, double);
-extern double __ieee754_pow (double, double);
-extern double __ieee754_lgamma_r (double, int *);
-extern double __ieee754_gamma_r (double, int *);
-extern double __ieee754_lgamma (double);
-extern double __ieee754_gamma (double);
-extern double __ieee754_log10 (double);
-extern double __ieee754_log2 (double);
-extern double __ieee754_sinh (double);
-extern double __ieee754_hypot (double, double);
-extern double __ieee754_j0 (double);
-extern double __ieee754_j1 (double);
-extern double __ieee754_y0 (double);
-extern double __ieee754_y1 (double);
-extern double __ieee754_jn (int, double);
-extern double __ieee754_yn (int, double);
-extern double __ieee754_remainder (double, double);
-extern int __ieee754_rem_pio2 (double,double*);
-extern double __ieee754_scalb (double, double);
-
-/* fdlibm kernel function */
-extern double __kernel_standard (double, double, int);
-extern double __kernel_sin (double, double, int);
-extern double __kernel_cos (double, double);
-extern double __kernel_tan (double, double, int);
-extern int __kernel_rem_pio2 (double*,double*,int,int,int,const int*);
-
-
-///* ieee style elementary float functions */
-//extern float __ieee754_sqrtf __P((float));
-//extern float __ieee754_acosf __P((float));
-//extern float __ieee754_acoshf __P((float));
-//extern float __ieee754_logf __P((float));
-//extern float __ieee754_atanhf __P((float));
-//extern float __ieee754_asinf __P((float));
-//extern float __ieee754_atan2f __P((float,float));
-//extern float __ieee754_expf __P((float));
-//extern float __ieee754_coshf __P((float));
-//extern float __ieee754_fmodf __P((float,float));
-//extern float __ieee754_powf __P((float,float));
-//extern float __ieee754_lgammaf_r __P((float,int *));
-//extern float __ieee754_gammaf_r __P((float,int *));
-//extern float __ieee754_lgammaf __P((float));
-//extern float __ieee754_gammaf __P((float));
-//extern float __ieee754_log10f __P((float));
-//extern float __ieee754_log2f __P((float));
-//extern float __ieee754_sinhf __P((float));
-//extern float __ieee754_hypotf __P((float,float));
-//extern float __ieee754_j0f __P((float));
-//extern float __ieee754_j1f __P((float));
-//extern float __ieee754_y0f __P((float));
-//extern float __ieee754_y1f __P((float));
-//extern float __ieee754_jnf __P((int,float));
-//extern float __ieee754_ynf __P((int,float));
-//extern float __ieee754_remainderf __P((float,float));
-//extern int __ieee754_rem_pio2f __P((float,float*));
-//extern float __ieee754_scalbf __P((float,float));
-
-///* float versions of fdlibm kernel functions */
-//extern float __kernel_sinf __P((float,float,int));
-//extern float __kernel_cosf __P((float,float));
-//extern float __kernel_tanf __P((float,float,int));
-//extern int __kernel_rem_pio2f __P((float*,float*,int,int,int,const int*));
-
-#endif /* _MATH_PRIVATE_H_ */
diff --git a/StdLib/LibC/Math/s_atan.c b/StdLib/LibC/Math/s_atan.c
deleted file mode 100644
index cbaf359936..0000000000
--- a/StdLib/LibC/Math/s_atan.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* @(#)s_atan.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: s_atan.c,v 1.11 2002/05/26 22:01:54 wiz Exp $");
-#endif
-
-/* atan(x)
- * Method
- * 1. Reduce x to positive by atan(x) = -atan(-x).
- * 2. According to the integer k=4t+0.25 chopped, t=x, the argument
- * is further reduced to one of the following intervals and the
- * arctangent of t is evaluated by the corresponding formula:
- *
- * [0,7/16] atan(x) = t-t^3*(a1+t^2*(a2+...(a10+t^2*a11)...)
- * [7/16,11/16] atan(x) = atan(1/2) + atan( (t-0.5)/(1+t/2) )
- * [11/16.19/16] atan(x) = atan( 1 ) + atan( (t-1)/(1+t) )
- * [19/16,39/16] atan(x) = atan(3/2) + atan( (t-1.5)/(1+1.5t) )
- * [39/16,INF] atan(x) = atan(INF) + atan( -1/t )
- *
- * Constants:
- * The hexadecimal values are the intended ones for the following
- * constants. The decimal values may be used, provided that the
- * compiler will convert from decimal to binary accurately enough
- * to produce the hexadecimal values shown.
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const double atanhi[] = {
- 4.63647609000806093515e-01, /* atan(0.5)hi 0x3FDDAC67, 0x0561BB4F */
- 7.85398163397448278999e-01, /* atan(1.0)hi 0x3FE921FB, 0x54442D18 */
- 9.82793723247329054082e-01, /* atan(1.5)hi 0x3FEF730B, 0xD281F69B */
- 1.57079632679489655800e+00, /* atan(inf)hi 0x3FF921FB, 0x54442D18 */
-};
-
-static const double atanlo[] = {
- 2.26987774529616870924e-17, /* atan(0.5)lo 0x3C7A2B7F, 0x222F65E2 */
- 3.06161699786838301793e-17, /* atan(1.0)lo 0x3C81A626, 0x33145C07 */
- 1.39033110312309984516e-17, /* atan(1.5)lo 0x3C700788, 0x7AF0CBBD */
- 6.12323399573676603587e-17, /* atan(inf)lo 0x3C91A626, 0x33145C07 */
-};
-
-static const double aT[] = {
- 3.33333333333329318027e-01, /* 0x3FD55555, 0x5555550D */
- -1.99999999998764832476e-01, /* 0xBFC99999, 0x9998EBC4 */
- 1.42857142725034663711e-01, /* 0x3FC24924, 0x920083FF */
- -1.11111104054623557880e-01, /* 0xBFBC71C6, 0xFE231671 */
- 9.09088713343650656196e-02, /* 0x3FB745CD, 0xC54C206E */
- -7.69187620504482999495e-02, /* 0xBFB3B0F2, 0xAF749A6D */
- 6.66107313738753120669e-02, /* 0x3FB10D66, 0xA0D03D51 */
- -5.83357013379057348645e-02, /* 0xBFADDE2D, 0x52DEFD9A */
- 4.97687799461593236017e-02, /* 0x3FA97B4B, 0x24760DEB */
- -3.65315727442169155270e-02, /* 0xBFA2B444, 0x2C6A6C2F */
- 1.62858201153657823623e-02, /* 0x3F90AD3A, 0xE322DA11 */
-};
-
- static const double
-one = 1.0,
-huge = 1.0e300;
-
-double
-atan(double x)
-{
- double w,s1,s2,z;
- int32_t ix,hx,id;
-
- GET_HIGH_WORD(hx,x);
- ix = hx&0x7fffffff;
- if(ix>=0x44100000) { /* if |x| >= 2^66 */
- u_int32_t low;
- GET_LOW_WORD(low,x);
- if(ix>0x7ff00000||
- (ix==0x7ff00000&&(low!=0)))
- return x+x; /* NaN */
- if(hx>0) return atanhi[3]+atanlo[3];
- else return -atanhi[3]-atanlo[3];
- } if (ix < 0x3fdc0000) { /* |x| < 0.4375 */
- if (ix < 0x3e200000) { /* |x| < 2^-29 */
- if(huge+x>one) return x; /* raise inexact */
- }
- id = -1;
- } else {
- x = fabs(x);
- if (ix < 0x3ff30000) { /* |x| < 1.1875 */
- if (ix < 0x3fe60000) { /* 7/16 <=|x|<11/16 */
- id = 0; x = (2.0*x-one)/(2.0+x);
- } else { /* 11/16<=|x|< 19/16 */
- id = 1; x = (x-one)/(x+one);
- }
- } else {
- if (ix < 0x40038000) { /* |x| < 2.4375 */
- id = 2; x = (x-1.5)/(one+1.5*x);
- } else { /* 2.4375 <= |x| < 2^66 */
- id = 3; x = -1.0/x;
- }
- }}
- /* end of argument reduction */
- z = x*x;
- w = z*z;
- /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */
- s1 = z*(aT[0]+w*(aT[2]+w*(aT[4]+w*(aT[6]+w*(aT[8]+w*aT[10])))));
- s2 = w*(aT[1]+w*(aT[3]+w*(aT[5]+w*(aT[7]+w*aT[9]))));
- if (id<0) return x - x*(s1+s2);
- else {
- z = atanhi[id] - ((x*(s1+s2) - atanlo[id]) - x);
- return (hx<0)? -z:z;
- }
-}
diff --git a/StdLib/LibC/Math/s_ceil.c b/StdLib/LibC/Math/s_ceil.c
deleted file mode 100644
index e9579fab72..0000000000
--- a/StdLib/LibC/Math/s_ceil.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* @(#)s_ceil.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: s_ceil.c,v 1.11 2002/05/26 22:01:54 wiz Exp $");
-#endif
-
-/*
- * ceil(x)
- * Return x rounded toward -inf to integral value
- * Method:
- * Bit twiddling.
- * Exception:
- * Inexact flag raised if x not equal to ceil(x).
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const double huge = 1.0e300;
-
-double
-ceil(double x)
-{
- int32_t i0,i1,j0;
- u_int32_t i,j;
-
- EXTRACT_WORDS(i0,i1,x);
- j0 = ((i0>>20)&0x7ff)-0x3ff;
- if(j0<20) {
- if(j0<0) { /* raise inexact if x != 0 */
- if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */
- if(i0<0) {i0=0x80000000;i1=0;}
- else if((i0|i1)!=0) { i0=0x3ff00000;i1=0;}
- }
- } else {
- i = (0x000fffff)>>j0;
- if(((i0&i)|i1)==0) return x; /* x is integral */
- if(huge+x>0.0) { /* raise inexact flag */
- if(i0>0) i0 += (0x00100000)>>j0;
- i0 &= (~i); i1=0;
- }
- }
- } else if (j0>51) {
- if(j0==0x400) return x+x; /* inf or NaN */
- else return x; /* x is integral */
- } else {
- i = ((u_int32_t)(0xffffffff))>>(j0-20);
- if((i1&i)==0) return x; /* x is integral */
- if(huge+x>0.0) { /* raise inexact flag */
- if(i0>0) {
- if(j0==20) i0+=1;
- else {
- j = i1 + (1<<(52-j0));
- if((int32_t)j<i1) i0+=1; /* got a carry */
- i1 = j;
- }
- }
- i1 &= (~i);
- }
- }
- INSERT_WORDS(x,i0,i1);
- return x;
-}
diff --git a/StdLib/LibC/Math/s_copysign.c b/StdLib/LibC/Math/s_copysign.c
deleted file mode 100644
index 31a80af28f..0000000000
--- a/StdLib/LibC/Math/s_copysign.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* @(#)s_copysign.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: s_copysign.c,v 1.11 2002/05/26 22:01:54 wiz Exp $");
-#endif
-
-/*
- * copysign(double x, double y)
- * copysign(x,y) returns a value with the magnitude of x and
- * with the sign bit of y.
- */
-
-#include "math.h"
-#include "math_private.h"
-
-double
-copysign(double x, double y)
-{
- u_int32_t hx,hy;
- GET_HIGH_WORD(hx,x);
- GET_HIGH_WORD(hy,y);
- SET_HIGH_WORD(x,(hx&0x7fffffff)|(hy&0x80000000));
- return x;
-}
diff --git a/StdLib/LibC/Math/s_cos.c b/StdLib/LibC/Math/s_cos.c
deleted file mode 100644
index ef04e5d34c..0000000000
--- a/StdLib/LibC/Math/s_cos.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* @(#)s_cos.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: s_cos.c,v 1.10 2002/05/26 22:01:54 wiz Exp $");
-#endif
-
-/* cos(x)
- * Return cosine function of x.
- *
- * kernel function:
- * __kernel_sin ... sine function on [-pi/4,pi/4]
- * __kernel_cos ... cosine function on [-pi/4,pi/4]
- * __ieee754_rem_pio2 ... argument reduction routine
- *
- * Method.
- * Let S,C and T denote the sin, cos and tan respectively on
- * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2
- * in [-pi/4 , +pi/4], and let n = k mod 4.
- * We have
- *
- * n sin(x) cos(x) tan(x)
- * ----------------------------------------------------------
- * 0 S C T
- * 1 C -S -1/T
- * 2 -S -C T
- * 3 -C S -1/T
- * ----------------------------------------------------------
- *
- * Special cases:
- * Let trig be any of sin, cos, or tan.
- * trig(+-INF) is NaN, with signals;
- * trig(NaN) is that NaN;
- *
- * Accuracy:
- * TRIG(x) returns trig(x) nearly rounded
- */
-
-#include "math.h"
-#include "math_private.h"
-
-double
-cos(double x)
-{
- double y[2],z=0.0;
- int32_t n, ix;
-
- /* High word of x. */
- GET_HIGH_WORD(ix,x);
-
- /* |x| ~< pi/4 */
- ix &= 0x7fffffff;
- if(ix <= 0x3fe921fb) return __kernel_cos(x,z);
-
- /* cos(Inf or NaN) is NaN */
- else if (ix>=0x7ff00000) return x-x;
-
- /* argument reduction needed */
- else {
- n = __ieee754_rem_pio2(x,y);
- switch(n&3) {
- case 0: return __kernel_cos(y[0],y[1]);
- case 1: return -__kernel_sin(y[0],y[1],1);
- case 2: return -__kernel_cos(y[0],y[1]);
- default:
- return __kernel_sin(y[0],y[1],1);
- }
- }
-}
diff --git a/StdLib/LibC/Math/s_expm1.c b/StdLib/LibC/Math/s_expm1.c
deleted file mode 100644
index 338f377fa4..0000000000
--- a/StdLib/LibC/Math/s_expm1.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/* @(#)s_expm1.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: s_expm1.c,v 1.12 2002/05/26 22:01:55 wiz Exp $");
-#endif
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
- // C4756: overflow in constant arithmetic
- #pragma warning ( disable : 4756 )
-#endif
-
-/* expm1(x)
- * Returns exp(x)-1, the exponential of x minus 1.
- *
- * Method
- * 1. Argument reduction:
- * Given x, find r and integer k such that
- *
- * x = k*ln2 + r, |r| <= 0.5*ln2 ~ 0.34658
- *
- * Here a correction term c will be computed to compensate
- * the error in r when rounded to a floating-point number.
- *
- * 2. Approximating expm1(r) by a special rational function on
- * the interval [0,0.34658]:
- * Since
- * r*(exp(r)+1)/(exp(r)-1) = 2+ r^2/6 - r^4/360 + ...
- * we define R1(r*r) by
- * r*(exp(r)+1)/(exp(r)-1) = 2+ r^2/6 * R1(r*r)
- * That is,
- * R1(r**2) = 6/r *((exp(r)+1)/(exp(r)-1) - 2/r)
- * = 6/r * ( 1 + 2.0*(1/(exp(r)-1) - 1/r))
- * = 1 - r^2/60 + r^4/2520 - r^6/100800 + ...
- * We use a special Reme algorithm on [0,0.347] to generate
- * a polynomial of degree 5 in r*r to approximate R1. The
- * maximum error of this polynomial approximation is bounded
- * by 2**-61. In other words,
- * R1(z) ~ 1.0 + Q1*z + Q2*z**2 + Q3*z**3 + Q4*z**4 + Q5*z**5
- * where Q1 = -1.6666666666666567384E-2,
- * Q2 = 3.9682539681370365873E-4,
- * Q3 = -9.9206344733435987357E-6,
- * Q4 = 2.5051361420808517002E-7,
- * Q5 = -6.2843505682382617102E-9;
- * (where z=r*r, and the values of Q1 to Q5 are listed below)
- * with error bounded by
- * | 5 | -61
- * | 1.0+Q1*z+...+Q5*z - R1(z) | <= 2
- * | |
- *
- * expm1(r) = exp(r)-1 is then computed by the following
- * specific way which minimize the accumulation rounding error:
- * 2 3
- * r r [ 3 - (R1 + R1*r/2) ]
- * expm1(r) = r + --- + --- * [--------------------]
- * 2 2 [ 6 - r*(3 - R1*r/2) ]
- *
- * To compensate the error in the argument reduction, we use
- * expm1(r+c) = expm1(r) + c + expm1(r)*c
- * ~ expm1(r) + c + r*c
- * Thus c+r*c will be added in as the correction terms for
- * expm1(r+c). Now rearrange the term to avoid optimization
- * screw up:
- * ( 2 2 )
- * ({ ( r [ R1 - (3 - R1*r/2) ] ) } r )
- * expm1(r+c)~r - ({r*(--- * [--------------------]-c)-c} - --- )
- * ({ ( 2 [ 6 - r*(3 - R1*r/2) ] ) } 2 )
- * ( )
- *
- * = r - E
- * 3. Scale back to obtain expm1(x):
- * From step 1, we have
- * expm1(x) = either 2^k*[expm1(r)+1] - 1
- * = or 2^k*[expm1(r) + (1-2^-k)]
- * 4. Implementation notes:
- * (A). To save one multiplication, we scale the coefficient Qi
- * to Qi*2^i, and replace z by (x^2)/2.
- * (B). To achieve maximum accuracy, we compute expm1(x) by
- * (i) if x < -56*ln2, return -1.0, (raise inexact if x!=inf)
- * (ii) if k=0, return r-E
- * (iii) if k=-1, return 0.5*(r-E)-0.5
- * (iv) if k=1 if r < -0.25, return 2*((r+0.5)- E)
- * else return 1.0+2.0*(r-E);
- * (v) if (k<-2||k>56) return 2^k(1-(E-r)) - 1 (or exp(x)-1)
- * (vi) if k <= 20, return 2^k((1-2^-k)-(E-r)), else
- * (vii) return 2^k(1-((E+2^-k)-r))
- *
- * Special cases:
- * expm1(INF) is INF, expm1(NaN) is NaN;
- * expm1(-INF) is -1, and
- * for finite argument, only expm1(0)=0 is exact.
- *
- * Accuracy:
- * according to an error analysis, the error is always less than
- * 1 ulp (unit in the last place).
- *
- * Misc. info.
- * For IEEE double
- * if x > 7.09782712893383973096e+02 then expm1(x) overflow
- *
- * Constants:
- * The hexadecimal values are the intended ones for the following
- * constants. The decimal values may be used, provided that the
- * compiler will convert from decimal to binary accurately enough
- * to produce the hexadecimal values shown.
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const double
-one = 1.0,
-huge = 1.0e+300,
-tiny = 1.0e-300,
-o_threshold = 7.09782712893383973096e+02,/* 0x40862E42, 0xFEFA39EF */
-ln2_hi = 6.93147180369123816490e-01,/* 0x3fe62e42, 0xfee00000 */
-ln2_lo = 1.90821492927058770002e-10,/* 0x3dea39ef, 0x35793c76 */
-invln2 = 1.44269504088896338700e+00,/* 0x3ff71547, 0x652b82fe */
- /* scaled coefficients related to expm1 */
-Q1 = -3.33333333333331316428e-02, /* BFA11111 111110F4 */
-Q2 = 1.58730158725481460165e-03, /* 3F5A01A0 19FE5585 */
-Q3 = -7.93650757867487942473e-05, /* BF14CE19 9EAADBB7 */
-Q4 = 4.00821782732936239552e-06, /* 3ED0CFCA 86E65239 */
-Q5 = -2.01099218183624371326e-07; /* BE8AFDB7 6E09C32D */
-
-double
-expm1(double x)
-{
- double y,hi,lo,c,t,e,hxs,hfx,r1;
- int32_t k,xsb;
- u_int32_t hx;
-
- c = 0;
- GET_HIGH_WORD(hx,x);
- xsb = hx&0x80000000; /* sign bit of x */
- if(xsb==0) y=x; else y= -x; /* y = |x| */
- hx &= 0x7fffffff; /* high word of |x| */
-
- /* filter out huge and non-finite argument */
- if(hx >= 0x4043687A) { /* if |x|>=56*ln2 */
- if(hx >= 0x40862E42) { /* if |x|>=709.78... */
- if(hx>=0x7ff00000) {
- u_int32_t low;
- GET_LOW_WORD(low,x);
- if(((hx&0xfffff)|low)!=0)
- return x+x; /* NaN */
- else return (xsb==0)? x:-1.0;/* exp(+-inf)={inf,-1} */
- }
- if(x > o_threshold) return huge*huge; /* overflow */
- }
- if(xsb!=0) { /* x < -56*ln2, return -1.0 with inexact */
- if(x+tiny<0.0) /* raise inexact */
- return tiny-one; /* return -1 */
- }
- }
-
- /* argument reduction */
- if(hx > 0x3fd62e42) { /* if |x| > 0.5 ln2 */
- if(hx < 0x3FF0A2B2) { /* and |x| < 1.5 ln2 */
- if(xsb==0)
- {hi = x - ln2_hi; lo = ln2_lo; k = 1;}
- else
- {hi = x + ln2_hi; lo = -ln2_lo; k = -1;}
- } else {
- k = (int32_t)(invln2*x+((xsb==0)?0.5:-0.5));
- t = k;
- hi = x - t*ln2_hi; /* t*ln2_hi is exact here */
- lo = t*ln2_lo;
- }
- x = hi - lo;
- c = (hi-x)-lo;
- }
- else if(hx < 0x3c900000) { /* when |x|<2**-54, return x */
- t = huge+x; /* return x with inexact flags when x!=0 */
- return x - (t-(huge+x));
- }
- else k = 0;
-
- /* x is now in primary range */
- hfx = 0.5*x;
- hxs = x*hfx;
- r1 = one+hxs*(Q1+hxs*(Q2+hxs*(Q3+hxs*(Q4+hxs*Q5))));
- t = 3.0-r1*hfx;
- e = hxs*((r1-t)/(6.0 - x*t));
- if(k==0) return x - (x*e-hxs); /* c is 0 */
- else {
- e = (x*(e-c)-c);
- e -= hxs;
- if(k== -1) return 0.5*(x-e)-0.5;
- if(k==1) {
- if(x < -0.25) return -2.0*(e-(x+0.5));
- else return one+2.0*(x-e);
- }
- if (k <= -2 || k>56) { /* suffice to return exp(x)-1 */
- u_int32_t high;
- y = one-(e-x);
- GET_HIGH_WORD(high,y);
- SET_HIGH_WORD(y,high+(k<<20)); /* add k to y's exponent */
- return y-one;
- }
- t = one;
- if(k<20) {
- u_int32_t high;
- SET_HIGH_WORD(t,0x3ff00000 - (0x200000>>k)); /* t=1-2^-k */
- y = t-(e-x);
- GET_HIGH_WORD(high,y);
- SET_HIGH_WORD(y,high+(k<<20)); /* add k to y's exponent */
- } else {
- u_int32_t high;
- SET_HIGH_WORD(t,((0x3ff-k)<<20)); /* 2^-k */
- y = x-(e+t);
- y += one;
- GET_HIGH_WORD(high,y);
- SET_HIGH_WORD(y,high+(k<<20)); /* add k to y's exponent */
- }
- }
- return y;
-}
diff --git a/StdLib/LibC/Math/s_fabs.c b/StdLib/LibC/Math/s_fabs.c
deleted file mode 100644
index 4cd5a5e52a..0000000000
--- a/StdLib/LibC/Math/s_fabs.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* @(#)s_fabs.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: s_fabs.c,v 1.10 2002/05/26 22:01:55 wiz Exp $");
-#endif
-
-/*
- * fabs(x) returns the absolute value of x.
- */
-
-#include "math.h"
-#include "math_private.h"
-
-double
-fabs(double x)
-{
- u_int32_t high;
- GET_HIGH_WORD(high,x);
- SET_HIGH_WORD(x,high&0x7fffffff);
- return x;
-}
diff --git a/StdLib/LibC/Math/s_finite.c b/StdLib/LibC/Math/s_finite.c
deleted file mode 100644
index 3f66feb981..0000000000
--- a/StdLib/LibC/Math/s_finite.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* @(#)s_finite.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: s_finite.c,v 1.11 2002/05/26 22:01:55 wiz Exp $");
-#endif
-
-/*
- * finite(x) returns 1 is x is finite, else 0;
- * no branching!
- */
-
-#include "math.h"
-#include "math_private.h"
-
-int
-finite(double x)
-{
- int32_t hx;
- GET_HIGH_WORD(hx,x);
- return (int)((u_int32_t)((hx&0x7fffffff)-0x7ff00000)>>31);
-}
diff --git a/StdLib/LibC/Math/s_floor.c b/StdLib/LibC/Math/s_floor.c
deleted file mode 100644
index d63ef13c0d..0000000000
--- a/StdLib/LibC/Math/s_floor.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* @(#)s_floor.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: s_floor.c,v 1.11 2002/05/26 22:01:56 wiz Exp $");
-#endif
-
-/*
- * floor(x)
- * Return x rounded toward -inf to integral value
- * Method:
- * Bit twiddling.
- * Exception:
- * Inexact flag raised if x not equal to floor(x).
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const double huge = 1.0e300;
-
-double
-floor(double x)
-{
- int32_t i0,i1,j0;
- u_int32_t i,j;
- EXTRACT_WORDS(i0,i1,x);
- j0 = ((i0>>20)&0x7ff)-0x3ff;
- if(j0<20) {
- if(j0<0) { /* raise inexact if x != 0 */
- if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */
- if(i0>=0) {i0=i1=0;}
- else if(((i0&0x7fffffff)|i1)!=0)
- { i0=0xbff00000;i1=0;}
- }
- } else {
- i = (0x000fffff)>>j0;
- if(((i0&i)|i1)==0) return x; /* x is integral */
- if(huge+x>0.0) { /* raise inexact flag */
- if(i0<0) i0 += (0x00100000)>>j0;
- i0 &= (~i); i1=0;
- }
- }
- } else if (j0>51) {
- if(j0==0x400) return x+x; /* inf or NaN */
- else return x; /* x is integral */
- } else {
- i = ((u_int32_t)(0xffffffff))>>(j0-20);
- if((i1&i)==0) return x; /* x is integral */
- if(huge+x>0.0) { /* raise inexact flag */
- if(i0<0) {
- if(j0==20) i0+=1;
- else {
- j = i1+(1<<(52-j0));
- if((int32_t)j<i1) i0 +=1 ; /* got a carry */
- i1=j;
- }
- }
- i1 &= (~i);
- }
- }
- INSERT_WORDS(x,i0,i1);
- return x;
-}
diff --git a/StdLib/LibC/Math/s_frexp.c b/StdLib/LibC/Math/s_frexp.c
deleted file mode 100644
index 8e93600ef9..0000000000
--- a/StdLib/LibC/Math/s_frexp.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* @(#)s_frexp.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: s_frexp.c,v 1.12 2002/05/26 22:01:56 wiz Exp $");
-#endif
-
-/*
- * for non-zero x
- * x = frexp(arg,&exp);
- * return a double fp quantity x such that 0.5 <= |x| <1.0
- * and the corresponding binary exponent "exp". That is
- * arg = x*2^exp.
- * If arg is inf, 0.0, or NaN, then frexp(arg,&exp) returns arg
- * with *exp=0.
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const double
-two54 = 1.80143985094819840000e+16; /* 0x43500000, 0x00000000 */
-
-double
-frexp(double x, int *eptr)
-{
- int32_t hx, ix, lx;
- EXTRACT_WORDS(hx,lx,x);
- ix = 0x7fffffff&hx;
- *eptr = 0;
- if(ix>=0x7ff00000||((ix|lx)==0)) return x; /* 0,inf,nan */
- if (ix<0x00100000) { /* subnormal */
- x *= two54;
- GET_HIGH_WORD(hx,x);
- ix = hx&0x7fffffff;
- *eptr = -54;
- }
- *eptr += (ix>>20)-1022;
- hx = (hx&0x800fffff)|0x3fe00000;
- SET_HIGH_WORD(x,hx);
- return x;
-}
diff --git a/StdLib/LibC/Math/s_infinity.c b/StdLib/LibC/Math/s_infinity.c
deleted file mode 100644
index 9ee1abd0b4..0000000000
--- a/StdLib/LibC/Math/s_infinity.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* $NetBSD: s_infinity.c,v 1.5 2003/07/26 19:25:05 salo Exp $ */
-
-/*
- * Written by J.T. Conklin <jtc@NetBSD.org>.
- * Public domain.
- */
-#include <LibConfig.h>
-
-#include <sys/types.h>
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
- // Force 8-byte alignment
- #define ALIGN8 __declspec(align(8))
-
- // C4742: identifier has different alignment in 'X' and 'Y'
- #pragma warning ( disable : 4742 )
- // C4744: identifier has different type in 'X' and 'Y'
- #pragma warning ( disable : 4744 )
-#else
- #define ALIGN8
-#endif
-
-#if BYTE_ORDER == LITTLE_ENDIAN
-ALIGN8 char __infinity[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f };
-#else
-ALIGN8 char __infinity[] = { 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-#endif
diff --git a/StdLib/LibC/Math/s_ldexp.c b/StdLib/LibC/Math/s_ldexp.c
deleted file mode 100644
index 6c843c7fe9..0000000000
--- a/StdLib/LibC/Math/s_ldexp.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* @(#)s_ldexp.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: s_ldexp.c,v 1.9 2002/05/26 22:01:56 wiz Exp $");
-#endif
-
-#include <errno.h>
-#include "math.h"
-#include "math_private.h"
-
-double
-ldexp(double value, int exp)
-{
- if(!finite(value)||value==0.0) return value;
- value = scalbn(value,exp);
- if(!finite(value)||value==0.0) errno = ERANGE;
- return value;
-}
diff --git a/StdLib/LibC/Math/s_modf.c b/StdLib/LibC/Math/s_modf.c
deleted file mode 100644
index bf4faf42e0..0000000000
--- a/StdLib/LibC/Math/s_modf.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* @(#)s_modf.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: s_modf.c,v 1.11 2002/05/26 22:01:57 wiz Exp $");
-#endif
-
-/*
- * modf(double x, double *iptr)
- * return fraction part of x, and return x's integral part in *iptr.
- * Method:
- * Bit twiddling.
- *
- * Exception:
- * No exception.
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const double one = 1.0;
-
-double
-modf(double x, double *iptr)
-{
- int32_t i0,i1,j0;
- u_int32_t i;
- EXTRACT_WORDS(i0,i1,x);
- j0 = ((i0>>20)&0x7ff)-0x3ff; /* exponent of x */
- if(j0<20) { /* integer part in high x */
- if(j0<0) { /* |x|<1 */
- INSERT_WORDS(*iptr,i0&0x80000000,0); /* *iptr = +-0 */
- return x;
- } else {
- i = (0x000fffff)>>j0;
- if(((i0&i)|i1)==0) { /* x is integral */
- u_int32_t high;
- *iptr = x;
- GET_HIGH_WORD(high,x);
- INSERT_WORDS(x,high&0x80000000,0); /* return +-0 */
- return x;
- } else {
- INSERT_WORDS(*iptr,i0&(~i),0);
- return x - *iptr;
- }
- }
- } else if (j0>51) { /* no fraction part */
- u_int32_t high;
- *iptr = x*one;
- GET_HIGH_WORD(high,x);
- INSERT_WORDS(x,high&0x80000000,0); /* return +-0 */
- return x;
- } else { /* fraction part in low x */
- i = ((u_int32_t)(0xffffffff))>>(j0-20);
- if((i1&i)==0) { /* x is integral */
- u_int32_t high;
- *iptr = x;
- GET_HIGH_WORD(high,x);
- INSERT_WORDS(x,high&0x80000000,0); /* return +-0 */
- return x;
- } else {
- INSERT_WORDS(*iptr,i0,i1&(~i));
- return x - *iptr;
- }
- }
-}
diff --git a/StdLib/LibC/Math/s_scalbn.c b/StdLib/LibC/Math/s_scalbn.c
deleted file mode 100644
index 072f1c7c89..0000000000
--- a/StdLib/LibC/Math/s_scalbn.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* @(#)s_scalbn.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: s_scalbn.c,v 1.12 2002/05/26 22:01:58 wiz Exp $");
-#endif
-
-/*
- * scalbn (double x, int n)
- * scalbn(x,n) returns x* 2**n computed by exponent
- * manipulation rather than by actually performing an
- * exponentiation or a multiplication.
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const double
-two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
-twom54 = 5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */
-huge = 1.0e+300,
-tiny = 1.0e-300;
-
-double
-scalbn(double x, int n)
-{
- int32_t k,hx,lx;
- EXTRACT_WORDS(hx,lx,x);
- k = (hx&0x7ff00000)>>20; /* extract exponent */
- if (k==0) { /* 0 or subnormal x */
- if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
- x *= two54;
- GET_HIGH_WORD(hx,x);
- k = ((hx&0x7ff00000)>>20) - 54;
- if (n< -50000) return tiny*x; /*underflow*/
- }
- if (k==0x7ff) return x+x; /* NaN or Inf */
- k = k+n;
- if (k > 0x7fe) return huge*copysign(huge,x); /* overflow */
- if (k > 0) /* normal result */
- {SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20)); return x;}
- if (k <= -54) {
- if (n > 50000) /* in case integer overflow in n+k */
- return huge*copysign(huge,x); /*overflow*/
- else return tiny*copysign(tiny,x); /*underflow*/
- }
- k += 54; /* subnormal result */
- SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20));
- return x*twom54;
-}
diff --git a/StdLib/LibC/Math/s_sin.c b/StdLib/LibC/Math/s_sin.c
deleted file mode 100644
index 2f373c984e..0000000000
--- a/StdLib/LibC/Math/s_sin.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* @(#)s_sin.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: s_sin.c,v 1.10 2002/05/26 22:01:58 wiz Exp $");
-#endif
-
-/* sin(x)
- * Return sine function of x.
- *
- * kernel function:
- * __kernel_sin ... sine function on [-pi/4,pi/4]
- * __kernel_cos ... cose function on [-pi/4,pi/4]
- * __ieee754_rem_pio2 ... argument reduction routine
- *
- * Method.
- * Let S,C and T denote the sin, cos and tan respectively on
- * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2
- * in [-pi/4 , +pi/4], and let n = k mod 4.
- * We have
- *
- * n sin(x) cos(x) tan(x)
- * ----------------------------------------------------------
- * 0 S C T
- * 1 C -S -1/T
- * 2 -S -C T
- * 3 -C S -1/T
- * ----------------------------------------------------------
- *
- * Special cases:
- * Let trig be any of sin, cos, or tan.
- * trig(+-INF) is NaN, with signals;
- * trig(NaN) is that NaN;
- *
- * Accuracy:
- * TRIG(x) returns trig(x) nearly rounded
- */
-
-#include "math.h"
-#include "math_private.h"
-
-double
-sin(double x)
-{
- double y[2],z=0.0;
- int32_t n, ix;
-
- /* High word of x. */
- GET_HIGH_WORD(ix,x);
-
- /* |x| ~< pi/4 */
- ix &= 0x7fffffff;
- if(ix <= 0x3fe921fb) return __kernel_sin(x,z,0);
-
- /* sin(Inf or NaN) is NaN */
- else if (ix>=0x7ff00000) return x-x;
-
- /* argument reduction needed */
- else {
- n = __ieee754_rem_pio2(x,y);
- switch(n&3) {
- case 0: return __kernel_sin(y[0],y[1],1);
- case 1: return __kernel_cos(y[0],y[1]);
- case 2: return -__kernel_sin(y[0],y[1],1);
- default:
- return -__kernel_cos(y[0],y[1]);
- }
- }
-}
diff --git a/StdLib/LibC/Math/s_tan.c b/StdLib/LibC/Math/s_tan.c
deleted file mode 100644
index 6c2a26de5a..0000000000
--- a/StdLib/LibC/Math/s_tan.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* @(#)s_tan.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: s_tan.c,v 1.10 2002/05/26 22:01:58 wiz Exp $");
-#endif
-
-/* tan(x)
- * Return tangent function of x.
- *
- * kernel function:
- * __kernel_tan ... tangent function on [-pi/4,pi/4]
- * __ieee754_rem_pio2 ... argument reduction routine
- *
- * Method.
- * Let S,C and T denote the sin, cos and tan respectively on
- * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2
- * in [-pi/4 , +pi/4], and let n = k mod 4.
- * We have
- *
- * n sin(x) cos(x) tan(x)
- * ----------------------------------------------------------
- * 0 S C T
- * 1 C -S -1/T
- * 2 -S -C T
- * 3 -C S -1/T
- * ----------------------------------------------------------
- *
- * Special cases:
- * Let trig be any of sin, cos, or tan.
- * trig(+-INF) is NaN, with signals;
- * trig(NaN) is that NaN;
- *
- * Accuracy:
- * TRIG(x) returns trig(x) nearly rounded
- */
-
-#include "math.h"
-#include "math_private.h"
-
-double
-tan(double x)
-{
- double y[2],z=0.0;
- int32_t n, ix;
-
- /* High word of x. */
- GET_HIGH_WORD(ix,x);
-
- /* |x| ~< pi/4 */
- ix &= 0x7fffffff;
- if(ix <= 0x3fe921fb) return __kernel_tan(x,z,1);
-
- /* tan(Inf or NaN) is NaN */
- else if (ix>=0x7ff00000) return x-x; /* NaN */
-
- /* argument reduction needed */
- else {
- n = __ieee754_rem_pio2(x,y);
- return __kernel_tan(y[0],y[1],1-((n&1)<<1)); /* 1 -- n even
- -1 -- n odd */
- }
-}
diff --git a/StdLib/LibC/Math/s_tanh.c b/StdLib/LibC/Math/s_tanh.c
deleted file mode 100644
index f6e17a7b4f..0000000000
--- a/StdLib/LibC/Math/s_tanh.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* @(#)s_tanh.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: s_tanh.c,v 1.10 2002/05/26 22:01:59 wiz Exp $");
-#endif
-
-/* Tanh(x)
- * Return the Hyperbolic Tangent of x
- *
- * Method :
- * x -x
- * e - e
- * 0. tanh(x) is defined to be -----------
- * x -x
- * e + e
- * 1. reduce x to non-negative by tanh(-x) = -tanh(x).
- * 2. 0 <= x <= 2**-55 : tanh(x) := x*(one+x)
- * -t
- * 2**-55 < x <= 1 : tanh(x) := -----; t = expm1(-2x)
- * t + 2
- * 2
- * 1 <= x <= 22.0 : tanh(x) := 1- ----- ; t=expm1(2x)
- * t + 2
- * 22.0 < x <= INF : tanh(x) := 1.
- *
- * Special cases:
- * tanh(NaN) is NaN;
- * only tanh(0)=0 is exact for finite argument.
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const double one=1.0, two=2.0, tiny = 1.0e-300;
-
-double
-tanh(double x)
-{
- double t,z;
- int32_t jx,ix;
-
- /* High word of |x|. */
- GET_HIGH_WORD(jx,x);
- ix = jx&0x7fffffff;
-
- /* x is INF or NaN */
- if(ix>=0x7ff00000) {
- if (jx>=0) return one/x+one; /* tanh(+-inf)=+-1 */
- else return one/x-one; /* tanh(NaN) = NaN */
- }
-
- /* |x| < 22 */
- if (ix < 0x40360000) { /* |x|<22 */
- if (ix<0x3c800000) /* |x|<2**-55 */
- return x*(one+x); /* tanh(small) = small */
- if (ix>=0x3ff00000) { /* |x|>=1 */
- t = expm1(two*fabs(x));
- z = one - two/(t+two);
- } else {
- t = expm1(-two*fabs(x));
- z= -t/(t+two);
- }
- /* |x| > 22, return +-1 */
- } else {
- z = one - tiny; /* raised inexact flag */
- }
- return (jx>=0)? z: -z;
-}
diff --git a/StdLib/LibC/Math/w_acos.c b/StdLib/LibC/Math/w_acos.c
deleted file mode 100644
index 7e6aa10254..0000000000
--- a/StdLib/LibC/Math/w_acos.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* @(#)w_acos.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: w_acos.c,v 1.9 2002/05/26 22:01:59 wiz Exp $");
-#endif
-
-/*
- * wrap_acos(x)
- */
-
-#include "math.h"
-#include "math_private.h"
-
-
-double
-acos(double x) /* wrapper acos */
-{
-#ifdef _IEEE_LIBM
- return __ieee754_acos(x);
-#else
- double z;
- z = __ieee754_acos(x);
- if(_LIB_VERSION == _IEEE_ || isnan(x)) return z;
- if(fabs(x)>1.0) {
- return __kernel_standard(x,x,1); /* acos(|x|>1) */
- } else
- return z;
-#endif
-}
diff --git a/StdLib/LibC/Math/w_asin.c b/StdLib/LibC/Math/w_asin.c
deleted file mode 100644
index 988c42dc1f..0000000000
--- a/StdLib/LibC/Math/w_asin.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* @(#)w_asin.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: w_asin.c,v 1.9 2002/05/26 22:01:59 wiz Exp $");
-#endif
-
-/*
- * wrapper asin(x)
- */
-
-
-#include "math.h"
-#include "math_private.h"
-
-
-double
-asin(double x) /* wrapper asin */
-{
-#ifdef _IEEE_LIBM
- return __ieee754_asin(x);
-#else
- double z;
- z = __ieee754_asin(x);
- if(_LIB_VERSION == _IEEE_ || isnan(x)) return z;
- if(fabs(x)>1.0) {
- return __kernel_standard(x,x,2); /* asin(|x|>1) */
- } else
- return z;
-#endif
-}
diff --git a/StdLib/LibC/Math/w_atan2.c b/StdLib/LibC/Math/w_atan2.c
deleted file mode 100644
index dbf38de42f..0000000000
--- a/StdLib/LibC/Math/w_atan2.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* @(#)w_atan2.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: w_atan2.c,v 1.9 2002/05/26 22:01:59 wiz Exp $");
-#endif
-
-/*
- * wrapper atan2(y,x)
- */
-
-#include "math.h"
-#include "math_private.h"
-
-
-double
-atan2(double y, double x) /* wrapper atan2 */
-{
-#ifdef _IEEE_LIBM
- return __ieee754_atan2(y,x);
-#else
- double z;
- z = __ieee754_atan2(y,x);
- if(_LIB_VERSION == _IEEE_||isnan(x)||isnan(y)) return z;
- if(x==0.0&&y==0.0) {
- return __kernel_standard(y,x,3); /* atan2(+-0,+-0) */
- } else
- return z;
-#endif
-}
diff --git a/StdLib/LibC/Math/w_cosh.c b/StdLib/LibC/Math/w_cosh.c
deleted file mode 100644
index 3d73bff961..0000000000
--- a/StdLib/LibC/Math/w_cosh.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* @(#)w_cosh.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: w_cosh.c,v 1.9 2002/05/26 22:02:00 wiz Exp $");
-#endif
-
-/*
- * wrapper cosh(x)
- */
-
-#include "math.h"
-#include "math_private.h"
-
-double
-cosh(double x) /* wrapper cosh */
-{
-#ifdef _IEEE_LIBM
- return __ieee754_cosh(x);
-#else
- double z;
- z = __ieee754_cosh(x);
- if(_LIB_VERSION == _IEEE_ || isnan(x)) return z;
- if(fabs(x)>7.10475860073943863426e+02) {
- return __kernel_standard(x,x,5); /* cosh overflow */
- } else
- return z;
-#endif
-}
diff --git a/StdLib/LibC/Math/w_exp.c b/StdLib/LibC/Math/w_exp.c
deleted file mode 100644
index 29a2bb2906..0000000000
--- a/StdLib/LibC/Math/w_exp.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* @(#)w_exp.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: w_exp.c,v 1.9 2002/05/26 22:02:00 wiz Exp $");
-#endif
-
-/*
- * wrapper exp(x)
- */
-
-#include "math.h"
-#include "math_private.h"
-
-static const double
-o_threshold= 7.09782712893383973096e+02, /* 0x40862E42, 0xFEFA39EF */
-u_threshold= -7.45133219101941108420e+02; /* 0xc0874910, 0xD52D3051 */
-
-double
-exp(double x) /* wrapper exp */
-{
-#ifdef _IEEE_LIBM
- return __ieee754_exp(x);
-#else
- double z;
- z = __ieee754_exp(x);
- if(_LIB_VERSION == _IEEE_) return z;
- if(finite(x)) {
- if(x>o_threshold)
- return __kernel_standard(x,x,6); /* exp overflow */
- else if(x<u_threshold)
- return __kernel_standard(x,x,7); /* exp underflow */
- }
- return z;
-#endif
-}
diff --git a/StdLib/LibC/Math/w_fmod.c b/StdLib/LibC/Math/w_fmod.c
deleted file mode 100644
index ef1b1c6875..0000000000
--- a/StdLib/LibC/Math/w_fmod.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* @(#)w_fmod.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: w_fmod.c,v 1.9 2002/05/26 22:02:00 wiz Exp $");
-#endif
-
-/*
- * wrapper fmod(x,y)
- */
-
-#include "math.h"
-#include "math_private.h"
-
-
-double
-fmod(double x, double y) /* wrapper fmod */
-{
-#ifdef _IEEE_LIBM
- return __ieee754_fmod(x,y);
-#else
- double z;
- z = __ieee754_fmod(x,y);
- if(_LIB_VERSION == _IEEE_ ||isnan(y)||isnan(x)) return z;
- if(y==0.0) {
- return __kernel_standard(x,y,27); /* fmod(x,0) */
- } else
- return z;
-#endif
-}
diff --git a/StdLib/LibC/Math/w_log.c b/StdLib/LibC/Math/w_log.c
deleted file mode 100644
index ae8a5a2338..0000000000
--- a/StdLib/LibC/Math/w_log.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* @(#)w_log.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: w_log.c,v 1.9 2002/05/26 22:02:02 wiz Exp $");
-#endif
-
-/*
- * wrapper log(x)
- */
-
-#include "math.h"
-#include "math_private.h"
-
-
-double
-log(double x) /* wrapper log */
-{
-#ifdef _IEEE_LIBM
- return __ieee754_log(x);
-#else
- double z;
- z = __ieee754_log(x);
- if(_LIB_VERSION == _IEEE_ || isnan(x) || x > 0.0) return z;
- if(x==0.0)
- return __kernel_standard(x,x,16); /* log(0) */
- else
- return __kernel_standard(x,x,17); /* log(x<0) */
-#endif
-}
diff --git a/StdLib/LibC/Math/w_log10.c b/StdLib/LibC/Math/w_log10.c
deleted file mode 100644
index 4c82dfbccc..0000000000
--- a/StdLib/LibC/Math/w_log10.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* @(#)w_log10.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: w_log10.c,v 1.9 2002/05/26 22:02:02 wiz Exp $");
-#endif
-
-/*
- * wrapper log10(X)
- */
-
-#include "math.h"
-#include "math_private.h"
-
-
-double
-log10(double x) /* wrapper log10 */
-{
-#ifdef _IEEE_LIBM
- return __ieee754_log10(x);
-#else
- double z;
- z = __ieee754_log10(x);
- if(_LIB_VERSION == _IEEE_ || isnan(x)) return z;
- if(x<=0.0) {
- if(x==0.0)
- return __kernel_standard(x,x,18); /* log10(0) */
- else
- return __kernel_standard(x,x,19); /* log10(x<0) */
- } else
- return z;
-#endif
-}
diff --git a/StdLib/LibC/Math/w_log2.c b/StdLib/LibC/Math/w_log2.c
deleted file mode 100644
index 35e4d1fccd..0000000000
--- a/StdLib/LibC/Math/w_log2.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* @(#)w_log10.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: w_log2.c,v 1.1 2005/07/21 16:58:39 christos Exp $");
-#endif
-
-/*
- * wrapper log2(X)
- */
-
-#include "math.h"
-#include "math_private.h"
-
-
-double
-log2(double x) /* wrapper log10 */
-{
-#ifdef _IEEE_LIBM
- return __ieee754_log2(x);
-#else
- double z;
- z = __ieee754_log2(x);
- if(_LIB_VERSION == _IEEE_ || isnan(x)) return z;
- if(x<=0.0) {
- if(x==0.0)
- return __kernel_standard(x,x,48); /* log2(0) */
- else
- return __kernel_standard(x,x,49); /* log2(x<0) */
- } else
- return z;
-#endif
-}
diff --git a/StdLib/LibC/Math/w_pow.c b/StdLib/LibC/Math/w_pow.c
deleted file mode 100644
index f5c4a39a90..0000000000
--- a/StdLib/LibC/Math/w_pow.c
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-/* @(#)w_pow.c 5.2 93/10/01 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: w_pow.c,v 1.7 2002/05/26 22:02:02 wiz Exp $");
-#endif
-
-/*
- * wrapper pow(x,y) return x**y
- */
-
-#include "math.h"
-#include "math_private.h"
-
-
-double
-pow(double x, double y) /* wrapper pow */
-{
-#ifdef _IEEE_LIBM
- return __ieee754_pow(x,y);
-#else
- double z;
- z=__ieee754_pow(x,y);
- if(_LIB_VERSION == _IEEE_|| isnan(y)) return z;
- if(isnan(x)) {
- if(y==0.0)
- return __kernel_standard(x,y,42); /* pow(NaN,0.0) */
- else
- return z;
- }
- if(x==0.0){
- if(y==0.0)
- return __kernel_standard(x,y,20); /* pow(0.0,0.0) */
- if(finite(y)&&y<0.0)
- return __kernel_standard(x,y,23); /* pow(0.0,negative) */
- return z;
- }
- if(!finite(z)) {
- if(finite(x)&&finite(y)) {
- if(isnan(z))
- return __kernel_standard(x,y,24); /* pow neg**non-int */
- else
- return __kernel_standard(x,y,21); /* pow overflow */
- }
- }
- if(z==0.0&&finite(x)&&finite(y))
- return __kernel_standard(x,y,22); /* pow underflow */
- return z;
-#endif
-}
diff --git a/StdLib/LibC/Math/w_sinh.c b/StdLib/LibC/Math/w_sinh.c
deleted file mode 100644
index f653738a3c..0000000000
--- a/StdLib/LibC/Math/w_sinh.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* @(#)w_sinh.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: w_sinh.c,v 1.9 2002/05/26 22:02:03 wiz Exp $");
-#endif
-
-/*
- * wrapper sinh(x)
- */
-
-#include "math.h"
-#include "math_private.h"
-
-double
-sinh(double x) /* wrapper sinh */
-{
-#ifdef _IEEE_LIBM
- return __ieee754_sinh(x);
-#else
- double z;
- z = __ieee754_sinh(x);
- if(_LIB_VERSION == _IEEE_) return z;
- if(!finite(z)&&finite(x)) {
- return __kernel_standard(x,x,25); /* sinh overflow */
- } else
- return z;
-#endif
-}
diff --git a/StdLib/LibC/Math/w_sqrt.c b/StdLib/LibC/Math/w_sqrt.c
deleted file mode 100644
index e55b4d8953..0000000000
--- a/StdLib/LibC/Math/w_sqrt.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* @(#)w_sqrt.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBM_SCCS) && !defined(lint)
-__RCSID("$NetBSD: w_sqrt.c,v 1.9 2002/05/26 22:02:03 wiz Exp $");
-#endif
-
-/*
- * wrapper sqrt(x)
- */
-
-#include "math.h"
-#include "math_private.h"
-
-double
-sqrt(double x) /* wrapper sqrt */
-{
-#ifdef _IEEE_LIBM
- return __ieee754_sqrt(x);
-#else
- double z;
- z = __ieee754_sqrt(x);
- if(_LIB_VERSION == _IEEE_ || isnan(x)) return z;
- if(x<0.0) {
- return __kernel_standard(x,x,26); /* sqrt(negative) */
- } else
- return z;
-#endif
-}
diff --git a/StdLib/LibC/NetUtil/NetUtil.inf b/StdLib/LibC/NetUtil/NetUtil.inf
deleted file mode 100644
index 9fc6b9b7be..0000000000
--- a/StdLib/LibC/NetUtil/NetUtil.inf
+++ /dev/null
@@ -1,50 +0,0 @@
-## @file
-# BSD Socket Library, Infrastructure functions.
-#
-# Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LibNetUtil
- FILE_GUID = f3c9667b-c50c-4e9c-a1f1-78c3b1ddf2c2
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibNetUtil
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- inet_addr.c #
- inet_makeaddr.c #
- inet_lnaof.c #
- inet_netof.c #
- inet_network.c #
- inet_ntoa.c #
- inet_ntop.c #
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
-
-[LibraryClasses]
- UefiLib
- BaseLib
- BaseMemoryLib
- MemoryAllocationLib
- LibStdLib
- LibStdio
- LibString
diff --git a/StdLib/LibC/NetUtil/inet_addr.c b/StdLib/LibC/NetUtil/inet_addr.c
deleted file mode 100644
index fadc09de34..0000000000
--- a/StdLib/LibC/NetUtil/inet_addr.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/** @file
- Convert a string internet address into an integer (32-bit) address.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1983, 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies, and that
- * the name of Digital Equipment Corporation not be used in advertising or
- * publicity pertaining to distribution of the document or software without
- * specific, written prior permission.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
-
- * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
- * Portions Copyright (c) 1996-1999 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
- * ANY SPECIAL, DIRECT, 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.
-
- NetBSD: inet_addr.c,v 1.1 2005/12/20 19:28:51 christos Exp
- inet_addr.c 8.1 (Berkeley) 6/17/93
- inet_addr.c,v 1.2.206.2 2004/03/17 00:29:45 marka Exp
-**/
-
-#if !defined(_KERNEL) && !defined(_STANDALONE)
-#include <LibConfig.h>
-
-//#include "port_before.h"
-
-#include <namespace.h>
-#include <sys/types.h>
-#include <sys/param.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <ctype.h>
-
-//#include "port_after.h"
-
-#ifdef __weak_alias
- __weak_alias(inet_aton,_inet_aton)
-#endif
-
-#else // NOT (!defined(_KERNEL) && !defined(_STANDALONE))
- #include <lib/libkern/libkern.h>
- #include <netinet/in.h>
-#endif
-
-/*
- * Ascii internet address interpretation routine.
- * The value returned is in network order.
- */
-u_int32_t
-inet_addr(const char *cp) {
- struct in_addr val;
-
- if (inet_aton(cp, &val))
- return (val.s_addr);
- return (INADDR_NONE);
-}
-
-/*
- * Check whether "cp" is a valid ascii representation
- * of an Internet address and convert to a binary address.
- * Returns 1 if the address is valid, 0 if not.
- * This replaces inet_addr, the return value from which
- * cannot distinguish between failure and a local broadcast address.
- */
-int
-inet_aton(const char *cp, struct in_addr *addr) {
- u_int32_t val;
- int base, n;
- char c;
- u_int8_t parts[4];
- u_int8_t *pp = parts;
- int digit;
-
- c = *cp;
- for (;;) {
- /*
- * Collect number up to ``.''.
- * Values are specified as for C:
- * 0x=hex, 0=octal, isdigit=decimal.
- */
- if (!isdigit((unsigned char)c))
- return (0);
- val = 0; base = 10; digit = 0;
- if (c == '0') {
- c = *++cp;
- if (c == 'x' || c == 'X')
- base = 16, c = *++cp;
- else {
- base = 8;
- digit = 1 ;
- }
- }
- for (;;) {
- if (isascii(c) && isdigit((unsigned char)c)) {
- if (base == 8 && (c == '8' || c == '9'))
- return (0);
- val = (val * base) + (c - '0');
- c = *++cp;
- digit = 1;
- } else if (base == 16 && isascii(c) &&
- isxdigit((unsigned char)c)) {
- val = (val << 4) |
- (c + 10 - (islower((unsigned char)c) ? 'a' : 'A'));
- c = *++cp;
- digit = 1;
- } else
- break;
- }
- if (c == '.') {
- /*
- * Internet format:
- * a.b.c.d
- * a.b.c (with c treated as 16 bits)
- * a.b (with b treated as 24 bits)
- */
- if (pp >= parts + 3 || val > 0xffU)
- return (0);
- *pp++ = (u_int8_t)val;
- c = *++cp;
- } else
- break;
- }
- /*
- * Check for trailing characters.
- */
- if (c != '\0' && (!isascii(c) || !isspace((unsigned char)c)))
- return (0);
- /*
- * Did we get a valid digit?
- */
- if (!digit)
- return (0);
- /*
- * Concoct the address according to
- * the number of parts specified.
- */
- n = (int)(pp - parts + 1);
- switch (n) {
- case 1: /* a -- 32 bits */
- break;
-
- case 2: /* a.b -- 8.24 bits */
- if (val > 0xffffffU)
- return (0);
- val |= parts[0] << 24;
- break;
-
- case 3: /* a.b.c -- 8.8.16 bits */
- if (val > 0xffffU)
- return (0);
- val |= (parts[0] << 24) | (parts[1] << 16);
- break;
-
- case 4: /* a.b.c.d -- 8.8.8.8 bits */
- if (val > 0xffU)
- return (0);
- val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
- break;
- }
- if (addr != NULL)
- addr->s_addr = htonl(val);
- return (1);
-}
diff --git a/StdLib/LibC/NetUtil/inet_lnaof.c b/StdLib/LibC/NetUtil/inet_lnaof.c
deleted file mode 100644
index 39f09d1fde..0000000000
--- a/StdLib/LibC/NetUtil/inet_lnaof.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/** @File
- Return the local network address portion of an internet address.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: inet_lnaof.c,v 1.1 2004/05/20 23:13:02 christos Exp
- inet_lnaof.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include "namespace.h"
-#include <sys/param.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#ifdef __weak_alias
- __weak_alias(inet_lnaof,_inet_lnaof)
-#endif
-
-/*
- * Return the local network address portion of an
- * internet address; handles class a/b/c network
- * number formats.
- */
-in_addr_t
-inet_lnaof(struct in_addr in)
-{
- in_addr_t i = ntohl(in.s_addr);
-
- if (IN_CLASSA(i))
- return ((i)&IN_CLASSA_HOST);
- else if (IN_CLASSB(i))
- return ((i)&IN_CLASSB_HOST);
- else
- return ((i)&IN_CLASSC_HOST);
-}
diff --git a/StdLib/LibC/NetUtil/inet_makeaddr.c b/StdLib/LibC/NetUtil/inet_makeaddr.c
deleted file mode 100644
index 5ead092015..0000000000
--- a/StdLib/LibC/NetUtil/inet_makeaddr.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/** @File
- Formulate an Internet address from network + host.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: inet_makeaddr.c,v 1.1 2004/05/20 23:13:02 christos Exp
- inet_makeaddr.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include "namespace.h"
-#include <sys/param.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#ifdef __weak_alias
-__weak_alias(inet_makeaddr,_inet_makeaddr)
-#endif
-
-/*
- * Formulate an Internet address from network + host. Used in
- * building addresses stored in the ifnet structure.
- */
-struct in_addr
-inet_makeaddr(in_addr_t net, in_addr_t host)
-{
- in_addr_t addr;
- struct in_addr ret;
-
- if (net < 128)
- addr = (net << IN_CLASSA_NSHIFT) | (host & IN_CLASSA_HOST);
- else if (net < 65536)
- addr = (net << IN_CLASSB_NSHIFT) | (host & IN_CLASSB_HOST);
- else if (net < 16777216L)
- addr = (net << IN_CLASSC_NSHIFT) | (host & IN_CLASSC_HOST);
- else
- addr = net | host;
- ret.s_addr = htonl(addr);
- return ret;
-}
diff --git a/StdLib/LibC/NetUtil/inet_netof.c b/StdLib/LibC/NetUtil/inet_netof.c
deleted file mode 100644
index dabb768389..0000000000
--- a/StdLib/LibC/NetUtil/inet_netof.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/** @File
- Return the network number from an internet address.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: inet_netof.c,v 1.1 2004/05/20 23:13:02 christos Exp
- inet_netof.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include "namespace.h"
-#include <sys/param.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#ifdef __weak_alias
-__weak_alias(inet_netof,_inet_netof)
-#endif
-
-/*
- * Return the network number from an internet
- * address; handles class a/b/c network #'s.
- */
-in_addr_t
-inet_netof(struct in_addr in)
-{
- in_addr_t i = ntohl(in.s_addr);
-
- if (IN_CLASSA(i))
- return (((i)&IN_CLASSA_NET) >> IN_CLASSA_NSHIFT);
- else if (IN_CLASSB(i))
- return (((i)&IN_CLASSB_NET) >> IN_CLASSB_NSHIFT);
- else
- return (((i)&IN_CLASSC_NET) >> IN_CLASSC_NSHIFT);
-}
diff --git a/StdLib/LibC/NetUtil/inet_network.c b/StdLib/LibC/NetUtil/inet_network.c
deleted file mode 100644
index 8cec75dc0c..0000000000
--- a/StdLib/LibC/NetUtil/inet_network.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/** @File
- Internet network address interpretation routine.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: inet_network.c,v 1.1 2004/05/20 23:13:02 christos Exp
- inet_network.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include "namespace.h"
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <assert.h>
-#include <ctype.h>
-#ifdef _DIAGNOSTIC
-#include <stddef.h> /* for NULL */
-#endif
-
-#ifdef __weak_alias
-__weak_alias(inet_network,_inet_network)
-#endif
-
-/*
- * Internet network address interpretation routine.
- * The library routines call this routine to interpret
- * network numbers.
- */
-in_addr_t
-inet_network(const char *cp)
-{
- in_addr_t val;
- size_t i, n;
- u_char c;
- in_addr_t parts[4], *pp = parts;
- int digit, base;
-
- _DIAGASSERT(cp != NULL);
-
-again:
- val = 0; base = 10; digit = 0;
- if (*cp == '0')
- digit = 1, base = 8, cp++;
- if (*cp == 'x' || *cp == 'X')
- base = 16, cp++;
- while ((c = *cp) != 0) {
- if (isdigit(c)) {
- if (base == 8 && (c == '8' || c == '9'))
- return (INADDR_NONE);
- val = (val * base) + (c - '0');
- cp++;
- digit = 1;
- continue;
- }
- if (base == 16 && isxdigit(c)) {
- val = (val << 4) + (c + 10 - (islower(c) ? 'a' : 'A'));
- cp++;
- digit = 1;
- continue;
- }
- break;
- }
- if (!digit)
- return (INADDR_NONE);
- if (*cp == '.') {
- if (pp >= parts + 4 || val > 0xff)
- return (INADDR_NONE);
- *pp++ = val, cp++;
- goto again;
- }
- if (*cp && !isspace((u_char) *cp))
- return (INADDR_NONE);
- if (pp >= parts + 4 || val > 0xff)
- return (INADDR_NONE);
- *pp++ = val;
- n = pp - parts;
- if (n > 4)
- return (INADDR_NONE);
- for (val = 0, i = 0; i < n; i++) {
- val <<= 8;
- val |= parts[i] & 0xff;
- }
- return (val);
-}
diff --git a/StdLib/LibC/NetUtil/inet_ntoa.c b/StdLib/LibC/NetUtil/inet_ntoa.c
deleted file mode 100644
index 11bd842a48..0000000000
--- a/StdLib/LibC/NetUtil/inet_ntoa.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/** @File
- Convert network-format internet address to base 256 d.d.d.d representation.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1983, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: inet_ntoa.c,v 1.1 2004/05/20 23:13:02 christos Exp
- inet_ntoa.c 8.1 (Berkeley) 6/4/93
- */
-#include <LibConfig.h>
-
-#include "namespace.h"
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <stdio.h>
-#include <string.h>
-
-#ifdef __weak_alias
- __weak_alias(inet_ntoa,_inet_ntoa)
-#endif
-
-/*
- * Convert network-format internet address
- * to base 256 d.d.d.d representation.
- */
-/*const*/ char *
-inet_ntoa(struct in_addr in) {
- static char ret[18];
-
- //strlcpy(ret, "[inet_ntoa error]", sizeof(ret));
- strncpyX(ret, "[inet_ntoa error]", sizeof(ret));
- (void) inet_ntop(AF_INET, &in, ret, sizeof ret);
- return (ret);
-}
diff --git a/StdLib/LibC/NetUtil/inet_ntop.c b/StdLib/LibC/NetUtil/inet_ntop.c
deleted file mode 100644
index c16935c369..0000000000
--- a/StdLib/LibC/NetUtil/inet_ntop.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/** @File
- Convert a binary network address into a presentable (printable) format.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
- * Copyright (c) 1996-1999 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
- * ANY SPECIAL, DIRECT, 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.
-
- NetBSD: inet_ntop.c,v 1.3.4.2 2007/05/17 21:25:14 jdc Exp
- inet_ntop.c,v 1.3.18.2 2005/11/03 23:02:22 marka Exp
-**/
-#include <LibConfig.h>
-
-//#include "port_before.h"
-
-#include "namespace.h"
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <arpa/nameser.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-//#include "port_after.h"
-
-#ifdef __weak_alias
- __weak_alias(inet_ntop,_inet_ntop)
-#endif
-
-/*%
- * WARNING: Don't even consider trying to compile this on a system where
- * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX.
- */
-
-static const char *inet_ntop4(const u_char *src, char *dst, socklen_t size);
-static const char *inet_ntop6(const u_char *src, char *dst, socklen_t size);
-
-/* char *
- * inet_ntop(af, src, dst, size)
- * convert a network format address to presentation format.
- * return:
- * pointer to presentation format address (`dst'), or NULL (see errno).
- * author:
- * Paul Vixie, 1996.
- */
-const char *
-inet_ntop(int af, const void *src, char *dst, socklen_t size)
-{
-
- _DIAGASSERT(src != NULL);
- _DIAGASSERT(dst != NULL);
-
- switch (af) {
- case AF_INET:
- return (inet_ntop4(src, dst, size));
- case AF_INET6:
- return (inet_ntop6(src, dst, size));
- default:
- errno = EAFNOSUPPORT;
- return (NULL);
- }
- /* NOTREACHED */
-}
-
-/* const char *
- * inet_ntop4(src, dst, size)
- * format an IPv4 address, more or less like inet_ntoa()
- * return:
- * `dst' (as a const)
- * notes:
- * (1) uses no statics
- * (2) takes a u_char* not an in_addr as input
- * author:
- * Paul Vixie, 1996.
- */
-static const char *
-inet_ntop4(const u_char *src, char *dst, socklen_t size)
-{
- char tmp[sizeof "255.255.255.255"];
- int l;
-
- _DIAGASSERT(src != NULL);
- _DIAGASSERT(dst != NULL);
-
- l = snprintf(tmp, sizeof(tmp), "%u.%u.%u.%u",
- src[0], src[1], src[2], src[3]);
- if (l <= 0 || (socklen_t) l >= size) {
- errno = ENOSPC;
- return (NULL);
- }
- //strlcpy(dst, tmp, size);
- strncpyX(dst, tmp, (size_t)size);
- return (dst);
-}
-
-/* const char *
- * inet_ntop6(src, dst, size)
- * convert IPv6 binary address into presentation (printable) format
- * author:
- * Paul Vixie, 1996.
- */
-static const char *
-inet_ntop6(const u_char *src, char *dst, socklen_t size)
-{
- /*
- * Note that int32_t and int16_t need only be "at least" large enough
- * to contain a value of the specified size. On some systems, like
- * Crays, there is no such thing as an integer variable with 16 bits.
- * Keep this in mind if you think this function should have been coded
- * to use pointer overlays. All the world's not a VAX.
- */
- char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"];
- char *tp, *ep;
- struct { int base, len; } best, cur;
- unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ];
- int i;
- int advance;
-
- _DIAGASSERT(src != NULL);
- _DIAGASSERT(dst != NULL);
-
- /*
- * Preprocess:
- * Copy the input (bytewise) array into a wordwise array.
- * Find the longest run of 0x00's in src[] for :: shorthanding.
- */
- memset(words, '\0', sizeof words);
- for (i = 0; i < NS_IN6ADDRSZ; i++)
- words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));
- best.base = -1;
- best.len = 0;
- cur.base = -1;
- cur.len = 0;
- for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
- if (words[i] == 0) {
- if (cur.base == -1)
- cur.base = i, cur.len = 1;
- else
- cur.len++;
- } else {
- if (cur.base != -1) {
- if (best.base == -1 || cur.len > best.len)
- best = cur;
- cur.base = -1;
- }
- }
- }
- if (cur.base != -1) {
- if (best.base == -1 || cur.len > best.len)
- best = cur;
- }
- if (best.base != -1 && best.len < 2)
- best.base = -1;
-
- /*
- * Format the result.
- */
- tp = tmp;
- ep = tmp + sizeof(tmp);
- for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
- /* Are we inside the best run of 0x00's? */
- if (best.base != -1 && i >= best.base &&
- i < (best.base + best.len)) {
- if (i == best.base)
- *tp++ = ':';
- continue;
- }
- /* Are we following an initial run of 0x00s or any real hex? */
- if (i != 0) {
- if (tp + 1 >= ep)
- return (NULL);
- *tp++ = ':';
- }
- /* Is this address an encapsulated IPv4? */
- if (i == 6 && best.base == 0 &&
- (best.len == 6 ||
- (best.len == 7 && words[7] != 0x0001) ||
- (best.len == 5 && words[5] == 0xffff))) {
- if (!inet_ntop4(src+12, tp, (socklen_t)(ep - tp)))
- return (NULL);
- tp += strlen(tp);
- break;
- }
- advance = snprintf(tp, (size_t)(ep - tp), "%x", words[i]);
- if (advance <= 0 || advance >= ep - tp)
- return (NULL);
- tp += advance;
- }
- /* Was it a trailing run of 0x00's? */
- if (best.base != -1 && (best.base + best.len) ==
- (NS_IN6ADDRSZ / NS_INT16SZ)) {
- if (tp + 1 >= ep)
- return (NULL);
- *tp++ = ':';
- }
- if (tp + 1 >= ep)
- return (NULL);
- *tp++ = '\0';
-
- /*
- * Check for overflow, copy, and we're done.
- */
- if ((size_t)(tp - tmp) > size) {
- errno = ENOSPC;
- return (NULL);
- }
- //strlcpy(dst, tmp, size);
- strncpyX(dst, tmp, (size_t)size);
- return (dst);
-}
-
-/*! \file */
diff --git a/StdLib/LibC/Signal/Signal.c b/StdLib/LibC/Signal/Signal.c
deleted file mode 100644
index 15b9ecabc2..0000000000
--- a/StdLib/LibC/Signal/Signal.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/** @file
- Implementation of the signal and raise functions as declared in <signal.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#include <Uefi.h>
-#include <Library/UefiLib.h>
-
-#include <LibConfig.h>
-#include <errno.h>
-#include <signal.h>
-#include <MainData.h>
-
-/** The signal function associates a "signal handler" with a signal number.
-
- The signal function chooses one of three ways in which receipt of the
- signal number, sig, is to be subsequently handled. If the value of func
- is SIG_DFL, default handling for that signal will occur. If the value of
- func is SIG_IGN, the signal will be ignored. Otherwise, func shall point
- to a function to be called when that signal occurs. An invocation of such a
- function because of a signal, or (recursively) of any further functions
- called by that invocation (other than functions in the standard library),
- is called a signal handler.
-
- At program startup, the equivalent of signal(sig, SIG_IGN); may be executed
- for some signals selected in an implementation-defined manner; the
- equivalent of signal(sig, SIG_DFL); is executed for all other signals
- defined by the implementation.
-
- @return If the request can be honored, the signal function returns the
- value of func for the most recent successful call to signal for
- the specified signal sig. Otherwise, a value of SIG_ERR is
- returned and a positive value is stored in errno.
- */
-__sighandler_t *
-signal(int sig, __sighandler_t *func)
-{
- __sighandler_t *OldHandler;
-
- if (sig < 0 || sig >= SIG_LAST) {
- errno = EINVAL;
- return SIG_ERR;
- }
- OldHandler = gMD->sigarray[sig];
- gMD->sigarray[sig] = func;
-
- return OldHandler;
-}
-
-static
-void
-_defaultSignalHandler( int sig )
-{
- Print(L"\nCaught signal %d.\n", sig);
-}
-
-/** Send a signal.
-
- The raise function carries out the actions described for signal, above,
- for the signal sig.
-
- If a signal handler is called, the raise function shall not return until
- after the signal handler does.
-
- @return The raise function returns zero if successful,
- nonzero if unsuccessful.
-**/
-int
-raise( int sig)
-{
- __sighandler_t *Handler;
-
- if (sig < 0 || sig >= SIG_LAST) {
- return EINVAL;
- }
- Handler = gMD->sigarray[sig];
-
- if(Handler == SIG_DFL) {
- _defaultSignalHandler( sig );
- }
- else if( Handler != SIG_IGN) {
- Handler( sig );
- }
- return 0;
-}
diff --git a/StdLib/LibC/Signal/Signal.inf b/StdLib/LibC/Signal/Signal.inf
deleted file mode 100644
index 1d991887dd..0000000000
--- a/StdLib/LibC/Signal/Signal.inf
+++ /dev/null
@@ -1,39 +0,0 @@
-## @file
-# Standard C library: StdLib implementations.
-#
-# Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LibSignal
- FILE_GUID = 00c86db8-013b-4ff4-b8e9-208f4fcf1c00
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibSignal
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- Signal.c
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
- ShellPkg/ShellPkg.dec
-
-[LibraryClasses]
- UefiLib
- LibC
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmpeq.c b/StdLib/LibC/Softfloat/Arm/__aeabi_dcmpeq.c
deleted file mode 100644
index 8bde7a5489..0000000000
--- a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmpeq.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* $NetBSD: __aeabi_dcmpeq.c,v 1.1 2013/04/16 10:37:39 matt Exp $ */
-
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: __aeabi_dcmpeq.c,v 1.1 2013/04/16 10:37:39 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-int __aeabi_dcmpeq(float64, float64);
-
-int
-__aeabi_dcmpeq(float64 a, float64 b)
-{
-
- return float64_eq(a, b);
-}
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmpge.c b/StdLib/LibC/Softfloat/Arm/__aeabi_dcmpge.c
deleted file mode 100644
index c153feb6a8..0000000000
--- a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmpge.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* $NetBSD: __aeabi_dcmpge.c,v 1.2 2013/04/16 13:38:34 matt Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: __aeabi_dcmpge.c,v 1.2 2013/04/16 13:38:34 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-int __aeabi_dcmpge(float64, float64);
-
-int
-__aeabi_dcmpge(float64 a, float64 b)
-{
-
- return !float64_lt(a, b) && float64_eq(a, a) && float64_eq(b, b);
-}
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmpgt.c b/StdLib/LibC/Softfloat/Arm/__aeabi_dcmpgt.c
deleted file mode 100644
index 5fb1606697..0000000000
--- a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmpgt.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* $NetBSD: __aeabi_dcmpgt.c,v 1.2 2013/04/16 13:38:34 matt Exp $ */
-
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: __aeabi_dcmpgt.c,v 1.2 2013/04/16 13:38:34 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-int __aeabi_dcmpgt(float64, float64);
-
-int
-__aeabi_dcmpgt(float64 a, float64 b)
-{
-
- return !float64_le(a, b) && float64_eq(a, a) && float64_eq(b, b);
-}
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmple.c b/StdLib/LibC/Softfloat/Arm/__aeabi_dcmple.c
deleted file mode 100644
index a8327c5e5b..0000000000
--- a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmple.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* $NetBSD: __aeabi_dcmple.c,v 1.1 2013/04/16 10:37:39 matt Exp $ */
-
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: __aeabi_dcmple.c,v 1.1 2013/04/16 10:37:39 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-int __aeabi_dcmple(float64, float64);
-
-int
-__aeabi_dcmple(float64 a, float64 b)
-{
-
- return float64_le(a, b);
-}
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmplt.c b/StdLib/LibC/Softfloat/Arm/__aeabi_dcmplt.c
deleted file mode 100644
index 8d0e143cb4..0000000000
--- a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmplt.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* $NetBSD: __aeabi_dcmplt.c,v 1.1 2013/04/16 10:37:39 matt Exp $ */
-
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: __aeabi_dcmplt.c,v 1.1 2013/04/16 10:37:39 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-int __aeabi_dcmplt(float64, float64);
-
-int
-__aeabi_dcmplt(float64 a, float64 b)
-{
-
- return float64_lt(a, b);
-}
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmpun.c b/StdLib/LibC/Softfloat/Arm/__aeabi_dcmpun.c
deleted file mode 100644
index fa91120a6c..0000000000
--- a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmpun.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* $NetBSD: __aeabi_dcmpun.c,v 1.1 2013/04/16 10:37:39 matt Exp $ */
-
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-/*
- * Written by Richard Earnshaw, 2003. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: __aeabi_dcmpun.c,v 1.1 2013/04/16 10:37:39 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-int __aeabi_dcmpun(float64, float64);
-
-int
-__aeabi_dcmpun(float64 a, float64 b)
-{
- /*
- * The comparison is unordered if either input is a NaN.
- * Test for this by comparing each operand with itself.
- * We must perform both comparisons to correctly check for
- * signalling NaNs.
- */
- return !float64_eq(a, a) || !float64_eq(b, b);
-}
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmpeq.c b/StdLib/LibC/Softfloat/Arm/__aeabi_fcmpeq.c
deleted file mode 100644
index 83db09e6a4..0000000000
--- a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmpeq.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* $NetBSD: __aeabi_fcmpeq.c,v 1.1 2013/04/16 10:37:39 matt Exp $ */
-
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: __aeabi_fcmpeq.c,v 1.1 2013/04/16 10:37:39 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-int __aeabi_fcmpeq(float32, float32);
-
-int
-__aeabi_fcmpeq(float32 a, float32 b)
-{
-
- return float32_eq(a, b);
-}
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmpge.c b/StdLib/LibC/Softfloat/Arm/__aeabi_fcmpge.c
deleted file mode 100644
index db59a98822..0000000000
--- a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmpge.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* $NetBSD: __aeabi_fcmpge.c,v 1.2 2013/04/16 13:38:34 matt Exp $ */
-
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: __aeabi_fcmpge.c,v 1.2 2013/04/16 13:38:34 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-int __aeabi_fcmpge(float32, float32);
-
-int
-__aeabi_fcmpge(float32 a, float32 b)
-{
-
- return !float32_lt(a, b) && float32_eq(a, a) && float32_eq(b, b);
-}
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmpgt.c b/StdLib/LibC/Softfloat/Arm/__aeabi_fcmpgt.c
deleted file mode 100644
index 6d6dea6088..0000000000
--- a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmpgt.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* $NetBSD: __aeabi_fcmpgt.c,v 1.2 2013/04/16 13:38:34 matt Exp $ */
-
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: __aeabi_fcmpgt.c,v 1.2 2013/04/16 13:38:34 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-int __aeabi_fcmpgt(float32, float32);
-
-int
-__aeabi_fcmpgt(float32 a, float32 b)
-{
-
- return !float32_le(a, b) && float32_eq(a, a) && float32_eq(b, b);
-}
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmple.c b/StdLib/LibC/Softfloat/Arm/__aeabi_fcmple.c
deleted file mode 100644
index 84c0355e2e..0000000000
--- a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmple.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* $NetBSD: __aeabi_fcmple.c,v 1.1 2013/04/16 10:37:39 matt Exp $ */
-
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: __aeabi_fcmple.c,v 1.1 2013/04/16 10:37:39 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-int __aeabi_fcmple(float32, float32);
-
-int
-__aeabi_fcmple(float32 a, float32 b)
-{
-
- return float32_le(a, b);
-}
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmplt.c b/StdLib/LibC/Softfloat/Arm/__aeabi_fcmplt.c
deleted file mode 100644
index a421e8ce21..0000000000
--- a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmplt.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* $NetBSD: __aeabi_fcmplt.c,v 1.1 2013/04/16 10:37:39 matt Exp $ */
-
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: __aeabi_fcmplt.c,v 1.1 2013/04/16 10:37:39 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-int __aeabi_fcmplt(float32, float32);
-
-int
-__aeabi_fcmplt(float32 a, float32 b)
-{
-
- return float32_lt(a, b);
-}
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmpun.c b/StdLib/LibC/Softfloat/Arm/__aeabi_fcmpun.c
deleted file mode 100644
index 403afba17e..0000000000
--- a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmpun.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* $NetBSD: __aeabi_fcmpun.c,v 1.1 2013/04/16 10:37:39 matt Exp $ */
-
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-/*
- * Written by Richard Earnshaw, 2003. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: __aeabi_fcmpun.c,v 1.1 2013/04/16 10:37:39 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-int __aeabi_fcmpun(float32, float32);
-
-int
-__aeabi_fcmpun(float32 a, float32 b)
-{
- /*
- * The comparison is unordered if either input is a NaN.
- * Test for this by comparing each operand with itself.
- * We must perform both comparisons to correctly check for
- * signalling NaNs.
- */
- return !float32_eq(a, a) || !float32_eq(b, b);
-}
diff --git a/StdLib/LibC/Softfloat/Makefile.inc b/StdLib/LibC/Softfloat/Makefile.inc
deleted file mode 100644
index df7a95aaa9..0000000000
--- a/StdLib/LibC/Softfloat/Makefile.inc
+++ /dev/null
@@ -1,42 +0,0 @@
-# $NetBSD: Makefile.inc,v 1.17 2014/01/30 19:11:54 matt Exp $
-
-SOFTFLOAT_BITS?=64
-.PATH: ${ARCHDIR}/softfloat \
- ${.CURDIR}/softfloat/bits${SOFTFLOAT_BITS} ${.CURDIR}/softfloat
-
-CPPFLAGS+= -I${ARCHDIR}/softfloat -I${.CURDIR}/softfloat
-CPPFLAGS+= -DSOFTFLOAT_FOR_GCC
-
-SRCS.softfloat= softfloat.c
-
-SRCS.softfloat+=fpgetround.c fpsetround.c fpgetmask.c fpsetmask.c \
- fpgetsticky.c fpsetsticky.c
-
-.if !empty(LIBC_MACHINE_ARCH:Mearm*)
-SRCS.softfloat+=__aeabi_dcmpeq.c __aeabi_fcmpeq.c
-SRCS.softfloat+=__aeabi_dcmpge.c __aeabi_fcmpge.c
-SRCS.softfloat+=__aeabi_dcmpgt.c __aeabi_fcmpgt.c
-SRCS.softfloat+=__aeabi_dcmple.c __aeabi_fcmple.c
-SRCS.softfloat+=__aeabi_dcmplt.c __aeabi_fcmplt.c
-SRCS.softfloat+=__aeabi_dcmpun.c __aeabi_fcmpun.c
-.else
-SRCS.softfloat+=eqsf2.c nesf2.c gtsf2.c gesf2.c ltsf2.c lesf2.c negsf2.c \
- eqdf2.c nedf2.c gtdf2.c gedf2.c ltdf2.c ledf2.c negdf2.c \
- eqtf2.c netf2.c gttf2.c getf2.c lttf2.c letf2.c negtf2.c \
- nexf2.c gtxf2.c gexf2.c negxf2.c \
- unordsf2.c unorddf2.c unordtf2.c
-.endif
-
-SRCS+= ${SRCS.softfloat}
-
-# XXX
-.if defined(HAVE_GCC) && ${HAVE_GCC} >= 45
-.if (${MACHINE_CPU} == "arm")
-# See doc/HACKS for more information.
-COPTS.softfloat.c+= -Wno-enum-compare
-COPTS.softfloat.c+= ${${ACTIVE_CXX} == "gcc":? -fno-tree-vrp :}
-.elif (${MACHINE_CPU} == "mips" || \
- ${MACHINE_CPU} == "sh3")
-COPTS.softfloat.c+= -Wno-enum-compare
-.endif
-.endif
diff --git a/StdLib/LibC/Softfloat/README.NetBSD b/StdLib/LibC/Softfloat/README.NetBSD
deleted file mode 100644
index ec310a0692..0000000000
--- a/StdLib/LibC/Softfloat/README.NetBSD
+++ /dev/null
@@ -1,8 +0,0 @@
-$NetBSD: README.NetBSD,v 1.2 2002/05/21 23:51:05 bjh21 Exp $
-
-This is a modified version of part of John Hauser's SoftFloat 2a package.
-This version has been heavily modified to support its use with GCC to
-implement built-in floating-point operations, but compiling
-softfloat.c without SOFTFLOAT_FOR_GCC defined should get you the same
-results as from the original.
-
diff --git a/StdLib/LibC/Softfloat/README.txt b/StdLib/LibC/Softfloat/README.txt
deleted file mode 100644
index de6052e468..0000000000
--- a/StdLib/LibC/Softfloat/README.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-$NetBSD: README.txt,v 1.1 2000/06/06 08:15:02 bjh21 Exp $
-
-Package Overview for SoftFloat Release 2a
-
-John R. Hauser
-1998 December 13
-
-
-SoftFloat is a software implementation of floating-point that conforms to
-the IEC/IEEE Standard for Binary Floating-Point Arithmetic. SoftFloat is
-distributed in the form of C source code. Compiling the SoftFloat sources
-generates two things:
-
--- A SoftFloat object file (typically `softfloat.o') containing the complete
- set of IEC/IEEE floating-point routines.
-
--- A `timesoftfloat' program for evaluating the speed of the SoftFloat
- routines. (The SoftFloat module is linked into this program.)
-
-The SoftFloat package is documented in four text files:
-
- softfloat.txt Documentation for using the SoftFloat functions.
- softfloat-source.txt Documentation for compiling SoftFloat.
- softfloat-history.txt History of major changes to SoftFloat.
- timesoftfloat.txt Documentation for using `timesoftfloat'.
-
-Other files in the package comprise the source code for SoftFloat.
-
-Please be aware that some work is involved in porting this software to other
-targets. It is not just a matter of getting `make' to complete without
-error messages. I would have written the code that way if I could, but
-there are fundamental differences between systems that I can't make go away.
-You should not attempt to compile SoftFloat without first reading both
-`softfloat.txt' and `softfloat-source.txt'.
-
-At the time of this writing, the most up-to-date information about
-SoftFloat and the latest release can be found at the Web page `http://
-HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/SoftFloat.html'.
-
diff --git a/StdLib/LibC/Softfloat/Softfloat.inf b/StdLib/LibC/Softfloat/Softfloat.inf
deleted file mode 100644
index 99763bcb57..0000000000
--- a/StdLib/LibC/Softfloat/Softfloat.inf
+++ /dev/null
@@ -1,74 +0,0 @@
-## @file
-# Standard C library: Software floating point Library.
-#
-# Copyright (c) 2014, ARM Ltd. All rights reserved.
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LibSoftfloat
- FILE_GUID = e9f4b929-ee33-4b70-8e90-17d283af508c
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibSoftfloat
-
-#
-# VALID_ARCHITECTURES = ARM AARCH64
-#
-
-# Only tested with GCC
-# Look at the Makefile.inc file from NetBSD to see how to build
-
-[Sources.ARM]
- bits32/softfloat.c
- Arm/__aeabi_dcmpeq.c
- Arm/__aeabi_fcmpeq.c
- Arm/__aeabi_dcmpge.c
- Arm/__aeabi_fcmpge.c
- Arm/__aeabi_dcmpgt.c
- Arm/__aeabi_fcmpgt.c
- Arm/__aeabi_dcmple.c
- Arm/__aeabi_fcmple.c
- Arm/__aeabi_dcmplt.c
- Arm/__aeabi_fcmplt.c
- Arm/__aeabi_dcmpun.c
- Arm/__aeabi_fcmpun.c
-
-[Sources.AARCH64]
- bits64/softfloat.c
- eqtf2.c
- getf2.c
- gttf2.c
- letf2.c
- lttf2.c
- netf2.c
-
-[Sources]
- fpgetround.c
- fpsetround.c
- fpgetmask.c
- fpsetmask.c
- fpgetsticky.c
- fpsetsticky.c
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
-
-################################################################
-# The Build Options, below, are only used when building the C library.
-# DO NOT use them when building your application!
-# Nasty things could happen if you do.
-
-[BuildOptions]
- GCC:*_*_*_CC_FLAGS = -DSOFTFLOAT_FOR_GCC -Wno-enum-compare -fno-tree-vrp
diff --git a/StdLib/LibC/Softfloat/bits32/softfloat-macros b/StdLib/LibC/Softfloat/bits32/softfloat-macros
deleted file mode 100644
index 8e1f2d8b9a..0000000000
--- a/StdLib/LibC/Softfloat/bits32/softfloat-macros
+++ /dev/null
@@ -1,648 +0,0 @@
-
-/*
-===============================================================================
-
-This C source fragment is part of the SoftFloat IEC/IEEE Floating-point
-Arithmetic Package, Release 2a.
-
-Written by John R. Hauser. This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704. Funding was partially provided by the
-National Science Foundation under grant MIP-9311980. The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-/*
--------------------------------------------------------------------------------
-Shifts `a' right by the number of bits given in `count'. If any nonzero
-bits are shifted off, they are ``jammed'' into the least significant bit of
-the result by setting the least significant bit to 1. The value of `count'
-can be arbitrarily large; in particular, if `count' is greater than 32, the
-result will be either 0 or 1, depending on whether `a' is zero or nonzero.
-The result is stored in the location pointed to by `zPtr'.
--------------------------------------------------------------------------------
-*/
-INLINE void shift32RightJamming( bits32 a, int16 count, bits32 *zPtr )
-{
- bits32 z;
-
- if ( count == 0 ) {
- z = a;
- }
- else if ( count < 32 ) {
- z = ( a>>count ) | ( ( a<<( ( - count ) & 31 ) ) != 0 );
- }
- else {
- z = ( a != 0 );
- }
- *zPtr = z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Shifts the 64-bit value formed by concatenating `a0' and `a1' right by the
-number of bits given in `count'. Any bits shifted off are lost. The value
-of `count' can be arbitrarily large; in particular, if `count' is greater
-than 64, the result will be 0. The result is broken into two 32-bit pieces
-which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- shift64Right(
- bits32 a0, bits32 a1, int16 count, bits32 *z0Ptr, bits32 *z1Ptr )
-{
- bits32 z0, z1;
- int8 negCount = ( - count ) & 31;
-
- if ( count == 0 ) {
- z1 = a1;
- z0 = a0;
- }
- else if ( count < 32 ) {
- z1 = ( a0<<negCount ) | ( a1>>count );
- z0 = a0>>count;
- }
- else {
- z1 = ( count < 64 ) ? ( a0>>( count & 31 ) ) : 0;
- z0 = 0;
- }
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Shifts the 64-bit value formed by concatenating `a0' and `a1' right by the
-number of bits given in `count'. If any nonzero bits are shifted off, they
-are ``jammed'' into the least significant bit of the result by setting the
-least significant bit to 1. The value of `count' can be arbitrarily large;
-in particular, if `count' is greater than 64, the result will be either 0
-or 1, depending on whether the concatenation of `a0' and `a1' is zero or
-nonzero. The result is broken into two 32-bit pieces which are stored at
-the locations pointed to by `z0Ptr' and `z1Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- shift64RightJamming(
- bits32 a0, bits32 a1, int16 count, bits32 *z0Ptr, bits32 *z1Ptr )
-{
- bits32 z0, z1;
- int8 negCount = ( - count ) & 31;
-
- if ( count == 0 ) {
- z1 = a1;
- z0 = a0;
- }
- else if ( count < 32 ) {
- z1 = ( a0<<negCount ) | ( a1>>count ) | ( ( a1<<negCount ) != 0 );
- z0 = a0>>count;
- }
- else {
- if ( count == 32 ) {
- z1 = a0 | ( a1 != 0 );
- }
- else if ( count < 64 ) {
- z1 = ( a0>>( count & 31 ) ) | ( ( ( a0<<negCount ) | a1 ) != 0 );
- }
- else {
- z1 = ( ( a0 | a1 ) != 0 );
- }
- z0 = 0;
- }
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Shifts the 96-bit value formed by concatenating `a0', `a1', and `a2' right
-by 32 _plus_ the number of bits given in `count'. The shifted result is
-at most 64 nonzero bits; these are broken into two 32-bit pieces which are
-stored at the locations pointed to by `z0Ptr' and `z1Ptr'. The bits shifted
-off form a third 32-bit result as follows: The _last_ bit shifted off is
-the most-significant bit of the extra result, and the other 31 bits of the
-extra result are all zero if and only if _all_but_the_last_ bits shifted off
-were all zero. This extra result is stored in the location pointed to by
-`z2Ptr'. The value of `count' can be arbitrarily large.
- (This routine makes more sense if `a0', `a1', and `a2' are considered
-to form a fixed-point value with binary point between `a1' and `a2'. This
-fixed-point value is shifted right by the number of bits given in `count',
-and the integer part of the result is returned at the locations pointed to
-by `z0Ptr' and `z1Ptr'. The fractional part of the result may be slightly
-corrupted as described above, and is returned at the location pointed to by
-`z2Ptr'.)
--------------------------------------------------------------------------------
-*/
-INLINE void
- shift64ExtraRightJamming(
- bits32 a0,
- bits32 a1,
- bits32 a2,
- int16 count,
- bits32 *z0Ptr,
- bits32 *z1Ptr,
- bits32 *z2Ptr
- )
-{
- bits32 z0, z1, z2;
- int8 negCount = ( - count ) & 31;
-
- if ( count == 0 ) {
- z2 = a2;
- z1 = a1;
- z0 = a0;
- }
- else {
- if ( count < 32 ) {
- z2 = a1<<negCount;
- z1 = ( a0<<negCount ) | ( a1>>count );
- z0 = a0>>count;
- }
- else {
- if ( count == 32 ) {
- z2 = a1;
- z1 = a0;
- }
- else {
- a2 |= a1;
- if ( count < 64 ) {
- z2 = a0<<negCount;
- z1 = a0>>( count & 31 );
- }
- else {
- z2 = ( count == 64 ) ? a0 : ( a0 != 0 );
- z1 = 0;
- }
- }
- z0 = 0;
- }
- z2 |= ( a2 != 0 );
- }
- *z2Ptr = z2;
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Shifts the 64-bit value formed by concatenating `a0' and `a1' left by the
-number of bits given in `count'. Any bits shifted off are lost. The value
-of `count' must be less than 32. The result is broken into two 32-bit
-pieces which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- shortShift64Left(
- bits32 a0, bits32 a1, int16 count, bits32 *z0Ptr, bits32 *z1Ptr )
-{
-
- *z1Ptr = a1<<count;
- *z0Ptr =
- ( count == 0 ) ? a0 : ( a0<<count ) | ( a1>>( ( - count ) & 31 ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Shifts the 96-bit value formed by concatenating `a0', `a1', and `a2' left
-by the number of bits given in `count'. Any bits shifted off are lost.
-The value of `count' must be less than 32. The result is broken into three
-32-bit pieces which are stored at the locations pointed to by `z0Ptr',
-`z1Ptr', and `z2Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- shortShift96Left(
- bits32 a0,
- bits32 a1,
- bits32 a2,
- int16 count,
- bits32 *z0Ptr,
- bits32 *z1Ptr,
- bits32 *z2Ptr
- )
-{
- bits32 z0, z1, z2;
- int8 negCount;
-
- z2 = a2<<count;
- z1 = a1<<count;
- z0 = a0<<count;
- if ( 0 < count ) {
- negCount = ( ( - count ) & 31 );
- z1 |= a2>>negCount;
- z0 |= a1>>negCount;
- }
- *z2Ptr = z2;
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Adds the 64-bit value formed by concatenating `a0' and `a1' to the 64-bit
-value formed by concatenating `b0' and `b1'. Addition is modulo 2^64, so
-any carry out is lost. The result is broken into two 32-bit pieces which
-are stored at the locations pointed to by `z0Ptr' and `z1Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- add64(
- bits32 a0, bits32 a1, bits32 b0, bits32 b1, bits32 *z0Ptr, bits32 *z1Ptr )
-{
- bits32 z1;
-
- z1 = a1 + b1;
- *z1Ptr = z1;
- *z0Ptr = a0 + b0 + ( z1 < a1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Adds the 96-bit value formed by concatenating `a0', `a1', and `a2' to the
-96-bit value formed by concatenating `b0', `b1', and `b2'. Addition is
-modulo 2^96, so any carry out is lost. The result is broken into three
-32-bit pieces which are stored at the locations pointed to by `z0Ptr',
-`z1Ptr', and `z2Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- add96(
- bits32 a0,
- bits32 a1,
- bits32 a2,
- bits32 b0,
- bits32 b1,
- bits32 b2,
- bits32 *z0Ptr,
- bits32 *z1Ptr,
- bits32 *z2Ptr
- )
-{
- bits32 z0, z1, z2;
- int8 carry0, carry1;
-
- z2 = a2 + b2;
- carry1 = ( z2 < a2 );
- z1 = a1 + b1;
- carry0 = ( z1 < a1 );
- z0 = a0 + b0;
- z1 += carry1;
- z0 += ( z1 < (bits32)carry1 );
- z0 += carry0;
- *z2Ptr = z2;
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Subtracts the 64-bit value formed by concatenating `b0' and `b1' from the
-64-bit value formed by concatenating `a0' and `a1'. Subtraction is modulo
-2^64, so any borrow out (carry out) is lost. The result is broken into two
-32-bit pieces which are stored at the locations pointed to by `z0Ptr' and
-`z1Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- sub64(
- bits32 a0, bits32 a1, bits32 b0, bits32 b1, bits32 *z0Ptr, bits32 *z1Ptr )
-{
-
- *z1Ptr = a1 - b1;
- *z0Ptr = a0 - b0 - ( a1 < b1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Subtracts the 96-bit value formed by concatenating `b0', `b1', and `b2' from
-the 96-bit value formed by concatenating `a0', `a1', and `a2'. Subtraction
-is modulo 2^96, so any borrow out (carry out) is lost. The result is broken
-into three 32-bit pieces which are stored at the locations pointed to by
-`z0Ptr', `z1Ptr', and `z2Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- sub96(
- bits32 a0,
- bits32 a1,
- bits32 a2,
- bits32 b0,
- bits32 b1,
- bits32 b2,
- bits32 *z0Ptr,
- bits32 *z1Ptr,
- bits32 *z2Ptr
- )
-{
- bits32 z0, z1, z2;
- int8 borrow0, borrow1;
-
- z2 = a2 - b2;
- borrow1 = ( a2 < b2 );
- z1 = a1 - b1;
- borrow0 = ( a1 < b1 );
- z0 = a0 - b0;
- z0 -= ( z1 < (bits32)borrow1 );
- z1 -= borrow1;
- z0 -= borrow0;
- *z2Ptr = z2;
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Multiplies `a' by `b' to obtain a 64-bit product. The product is broken
-into two 32-bit pieces which are stored at the locations pointed to by
-`z0Ptr' and `z1Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void mul32To64( bits32 a, bits32 b, bits32 *z0Ptr, bits32 *z1Ptr )
-{
- bits16 aHigh, aLow, bHigh, bLow;
- bits32 z0, zMiddleA, zMiddleB, z1;
-
- aLow = a;
- aHigh = a>>16;
- bLow = b;
- bHigh = b>>16;
- z1 = ( (bits32) aLow ) * bLow;
- zMiddleA = ( (bits32) aLow ) * bHigh;
- zMiddleB = ( (bits32) aHigh ) * bLow;
- z0 = ( (bits32) aHigh ) * bHigh;
- zMiddleA += zMiddleB;
- z0 += ( ( (bits32) ( zMiddleA < zMiddleB ) )<<16 ) + ( zMiddleA>>16 );
- zMiddleA <<= 16;
- z1 += zMiddleA;
- z0 += ( z1 < zMiddleA );
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Multiplies the 64-bit value formed by concatenating `a0' and `a1' by `b'
-to obtain a 96-bit product. The product is broken into three 32-bit pieces
-which are stored at the locations pointed to by `z0Ptr', `z1Ptr', and
-`z2Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- mul64By32To96(
- bits32 a0,
- bits32 a1,
- bits32 b,
- bits32 *z0Ptr,
- bits32 *z1Ptr,
- bits32 *z2Ptr
- )
-{
- bits32 z0, z1, z2, more1;
-
- mul32To64( a1, b, &z1, &z2 );
- mul32To64( a0, b, &z0, &more1 );
- add64( z0, more1, 0, z1, &z0, &z1 );
- *z2Ptr = z2;
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Multiplies the 64-bit value formed by concatenating `a0' and `a1' to the
-64-bit value formed by concatenating `b0' and `b1' to obtain a 128-bit
-product. The product is broken into four 32-bit pieces which are stored at
-the locations pointed to by `z0Ptr', `z1Ptr', `z2Ptr', and `z3Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- mul64To128(
- bits32 a0,
- bits32 a1,
- bits32 b0,
- bits32 b1,
- bits32 *z0Ptr,
- bits32 *z1Ptr,
- bits32 *z2Ptr,
- bits32 *z3Ptr
- )
-{
- bits32 z0, z1, z2, z3;
- bits32 more1, more2;
-
- mul32To64( a1, b1, &z2, &z3 );
- mul32To64( a1, b0, &z1, &more2 );
- add64( z1, more2, 0, z2, &z1, &z2 );
- mul32To64( a0, b0, &z0, &more1 );
- add64( z0, more1, 0, z1, &z0, &z1 );
- mul32To64( a0, b1, &more1, &more2 );
- add64( more1, more2, 0, z2, &more1, &z2 );
- add64( z0, z1, 0, more1, &z0, &z1 );
- *z3Ptr = z3;
- *z2Ptr = z2;
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns an approximation to the 32-bit integer quotient obtained by dividing
-`b' into the 64-bit value formed by concatenating `a0' and `a1'. The
-divisor `b' must be at least 2^31. If q is the exact quotient truncated
-toward zero, the approximation returned lies between q and q + 2 inclusive.
-If the exact quotient q is larger than 32 bits, the maximum positive 32-bit
-unsigned integer is returned.
--------------------------------------------------------------------------------
-*/
-static bits32 estimateDiv64To32( bits32 a0, bits32 a1, bits32 b )
-{
- bits32 b0, b1;
- bits32 rem0, rem1, term0, term1;
- bits32 z;
-
- if ( b <= a0 ) return 0xFFFFFFFF;
- b0 = b>>16;
- z = ( b0<<16 <= a0 ) ? 0xFFFF0000 : ( a0 / b0 )<<16;
- mul32To64( b, z, &term0, &term1 );
- sub64( a0, a1, term0, term1, &rem0, &rem1 );
- while ( ( (sbits32) rem0 ) < 0 ) {
- z -= 0x10000;
- b1 = b<<16;
- add64( rem0, rem1, b0, b1, &rem0, &rem1 );
- }
- rem0 = ( rem0<<16 ) | ( rem1>>16 );
- z |= ( b0<<16 <= rem0 ) ? 0xFFFF : rem0 / b0;
- return z;
-
-}
-
-#ifndef SOFTFLOAT_FOR_GCC
-/*
--------------------------------------------------------------------------------
-Returns an approximation to the square root of the 32-bit significand given
-by `a'. Considered as an integer, `a' must be at least 2^31. If bit 0 of
-`aExp' (the least significant bit) is 1, the integer returned approximates
-2^31*sqrt(`a'/2^31), where `a' is considered an integer. If bit 0 of `aExp'
-is 0, the integer returned approximates 2^31*sqrt(`a'/2^30). In either
-case, the approximation returned lies strictly within +/-2 of the exact
-value.
--------------------------------------------------------------------------------
-*/
-static bits32 estimateSqrt32( int16 aExp, bits32 a )
-{
- static const bits16 sqrtOddAdjustments[] = {
- 0x0004, 0x0022, 0x005D, 0x00B1, 0x011D, 0x019F, 0x0236, 0x02E0,
- 0x039C, 0x0468, 0x0545, 0x0631, 0x072B, 0x0832, 0x0946, 0x0A67
- };
- static const bits16 sqrtEvenAdjustments[] = {
- 0x0A2D, 0x08AF, 0x075A, 0x0629, 0x051A, 0x0429, 0x0356, 0x029E,
- 0x0200, 0x0179, 0x0109, 0x00AF, 0x0068, 0x0034, 0x0012, 0x0002
- };
- int8 index;
- bits32 z;
-
- index = ( a>>27 ) & 15;
- if ( aExp & 1 ) {
- z = 0x4000 + ( a>>17 ) - sqrtOddAdjustments[ index ];
- z = ( ( a / z )<<14 ) + ( z<<15 );
- a >>= 1;
- }
- else {
- z = 0x8000 + ( a>>17 ) - sqrtEvenAdjustments[ index ];
- z = a / z + z;
- z = ( 0x20000 <= z ) ? 0xFFFF8000 : ( z<<15 );
- if ( z <= a ) return (bits32) ( ( (sbits32) a )>>1 );
- }
- return ( ( estimateDiv64To32( a, 0, z ) )>>1 ) + ( z>>1 );
-
-}
-#endif
-
-/*
--------------------------------------------------------------------------------
-Returns the number of leading 0 bits before the most-significant 1 bit of
-`a'. If `a' is zero, 32 is returned.
--------------------------------------------------------------------------------
-*/
-static int8 countLeadingZeros32( bits32 a )
-{
- static const int8 countLeadingZerosHigh[] = {
- 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- };
- int8 shiftCount;
-
- shiftCount = 0;
- if ( a < 0x10000 ) {
- shiftCount += 16;
- a <<= 16;
- }
- if ( a < 0x1000000 ) {
- shiftCount += 8;
- a <<= 8;
- }
- shiftCount += countLeadingZerosHigh[ a>>24 ];
- return shiftCount;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the 64-bit value formed by concatenating `a0' and `a1' is
-equal to the 64-bit value formed by concatenating `b0' and `b1'. Otherwise,
-returns 0.
--------------------------------------------------------------------------------
-*/
-INLINE flag eq64( bits32 a0, bits32 a1, bits32 b0, bits32 b1 )
-{
-
- return ( a0 == b0 ) && ( a1 == b1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the 64-bit value formed by concatenating `a0' and `a1' is less
-than or equal to the 64-bit value formed by concatenating `b0' and `b1'.
-Otherwise, returns 0.
--------------------------------------------------------------------------------
-*/
-INLINE flag le64( bits32 a0, bits32 a1, bits32 b0, bits32 b1 )
-{
-
- return ( a0 < b0 ) || ( ( a0 == b0 ) && ( a1 <= b1 ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the 64-bit value formed by concatenating `a0' and `a1' is less
-than the 64-bit value formed by concatenating `b0' and `b1'. Otherwise,
-returns 0.
--------------------------------------------------------------------------------
-*/
-INLINE flag lt64( bits32 a0, bits32 a1, bits32 b0, bits32 b1 )
-{
-
- return ( a0 < b0 ) || ( ( a0 == b0 ) && ( a1 < b1 ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the 64-bit value formed by concatenating `a0' and `a1' is not
-equal to the 64-bit value formed by concatenating `b0' and `b1'. Otherwise,
-returns 0.
--------------------------------------------------------------------------------
-*/
-INLINE flag ne64( bits32 a0, bits32 a1, bits32 b0, bits32 b1 )
-{
-
- return ( a0 != b0 ) || ( a1 != b1 );
-
-}
-
diff --git a/StdLib/LibC/Softfloat/bits32/softfloat.c b/StdLib/LibC/Softfloat/bits32/softfloat.c
deleted file mode 100644
index a513bf94e1..0000000000
--- a/StdLib/LibC/Softfloat/bits32/softfloat.c
+++ /dev/null
@@ -1,2355 +0,0 @@
-/* $NetBSD: softfloat.c,v 1.3 2013/01/10 08:16:11 matt Exp $ */
-
-/*
- * This version hacked for use with gcc -msoft-float by bjh21.
- * (Mostly a case of #ifdefing out things GCC doesn't need or provides
- * itself).
- */
-
-/*
- * Things you may want to define:
- *
- * SOFTFLOAT_FOR_GCC - build only those functions necessary for GCC (with
- * -msoft-float) to work. Include "softfloat-for-gcc.h" to get them
- * properly renamed.
- */
-
-/*
- * This differs from the standard bits32/softfloat.c in that float64
- * is defined to be a 64-bit integer rather than a structure. The
- * structure is float64s, with translation between the two going via
- * float64u.
- */
-
-/*
-===============================================================================
-
-This C source file is part of the SoftFloat IEC/IEEE Floating-Point
-Arithmetic Package, Release 2a.
-
-Written by John R. Hauser. This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704. Funding was partially provided by the
-National Science Foundation under grant MIP-9311980. The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: softfloat.c,v 1.3 2013/01/10 08:16:11 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#ifdef SOFTFLOAT_FOR_GCC
-#include "softfloat-for-gcc.h"
-#endif
-
-#include "milieu.h"
-#include "softfloat.h"
-
-/*
- * Conversions between floats as stored in memory and floats as
- * SoftFloat uses them
- */
-#ifndef FLOAT64_DEMANGLE
-#define FLOAT64_DEMANGLE(a) (a)
-#endif
-#ifndef FLOAT64_MANGLE
-#define FLOAT64_MANGLE(a) (a)
-#endif
-
-/*
--------------------------------------------------------------------------------
-Floating-point rounding mode and exception flags.
--------------------------------------------------------------------------------
-*/
-#ifndef set_float_rounding_mode
-fp_rnd float_rounding_mode = float_round_nearest_even;
-fp_except float_exception_flags = 0;
-#endif
-#ifndef set_float_exception_inexact_flag
-#define set_float_exception_inexact_flag() \
- ((void)(float_exception_flags |= float_flag_inexact))
-#endif
-
-/*
--------------------------------------------------------------------------------
-Primitive arithmetic functions, including multi-word arithmetic, and
-division and square root approximations. (Can be specialized to target if
-desired.)
--------------------------------------------------------------------------------
-*/
-#include "softfloat-macros"
-
-/*
--------------------------------------------------------------------------------
-Functions and definitions to determine: (1) whether tininess for underflow
-is detected before or after rounding by default, (2) what (if anything)
-happens when exceptions are raised, (3) how signaling NaNs are distinguished
-from quiet NaNs, (4) the default generated quiet NaNs, and (4) how NaNs
-are propagated from function inputs to output. These details are target-
-specific.
--------------------------------------------------------------------------------
-*/
-#include "softfloat-specialize"
-
-/*
--------------------------------------------------------------------------------
-Returns the fraction bits of the single-precision floating-point value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE bits32 extractFloat32Frac( float32 a )
-{
-
- return a & 0x007FFFFF;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the exponent bits of the single-precision floating-point value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE int16 extractFloat32Exp( float32 a )
-{
-
- return ( a>>23 ) & 0xFF;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the sign bit of the single-precision floating-point value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE flag extractFloat32Sign( float32 a )
-{
-
- return a>>31;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Normalizes the subnormal single-precision floating-point value represented
-by the denormalized significand `aSig'. The normalized exponent and
-significand are stored at the locations pointed to by `zExpPtr' and
-`zSigPtr', respectively.
--------------------------------------------------------------------------------
-*/
-static void
- normalizeFloat32Subnormal( bits32 aSig, int16 *zExpPtr, bits32 *zSigPtr )
-{
- int8 shiftCount;
-
- shiftCount = countLeadingZeros32( aSig ) - 8;
- *zSigPtr = aSig<<shiftCount;
- *zExpPtr = 1 - shiftCount;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Packs the sign `zSign', exponent `zExp', and significand `zSig' into a
-single-precision floating-point value, returning the result. After being
-shifted into the proper positions, the three fields are simply added
-together to form the result. This means that any integer portion of `zSig'
-will be added into the exponent. Since a properly normalized significand
-will have an integer portion equal to 1, the `zExp' input should be 1 less
-than the desired result exponent whenever `zSig' is a complete, normalized
-significand.
--------------------------------------------------------------------------------
-*/
-INLINE float32 packFloat32( flag zSign, int16 zExp, bits32 zSig )
-{
-
- return ( ( (bits32) zSign )<<31 ) + ( ( (bits32) zExp )<<23 ) + zSig;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes an abstract floating-point value having sign `zSign', exponent `zExp',
-and significand `zSig', and returns the proper single-precision floating-
-point value corresponding to the abstract input. Ordinarily, the abstract
-value is simply rounded and packed into the single-precision format, with
-the inexact exception raised if the abstract input cannot be represented
-exactly. However, if the abstract value is too large, the overflow and
-inexact exceptions are raised and an infinity or maximal finite value is
-returned. If the abstract value is too small, the input value is rounded to
-a subnormal number, and the underflow and inexact exceptions are raised if
-the abstract input cannot be represented exactly as a subnormal single-
-precision floating-point number.
- The input significand `zSig' has its binary point between bits 30
-and 29, which is 7 bits to the left of the usual location. This shifted
-significand must be normalized or smaller. If `zSig' is not normalized,
-`zExp' must be 0; in that case, the result returned is a subnormal number,
-and it must not require rounding. In the usual case that `zSig' is
-normalized, `zExp' must be 1 less than the ``true'' floating-point exponent.
-The handling of underflow and overflow follows the IEC/IEEE Standard for
-Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static float32 roundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig )
-{
- int8 roundingMode;
- flag roundNearestEven;
- int8 roundIncrement, roundBits;
- flag isTiny;
-
- roundingMode = float_rounding_mode;
- roundNearestEven = roundingMode == float_round_nearest_even;
- roundIncrement = 0x40;
- if ( ! roundNearestEven ) {
- if ( roundingMode == float_round_to_zero ) {
- roundIncrement = 0;
- }
- else {
- roundIncrement = 0x7F;
- if ( zSign ) {
- if ( roundingMode == float_round_up ) roundIncrement = 0;
- }
- else {
- if ( roundingMode == float_round_down ) roundIncrement = 0;
- }
- }
- }
- roundBits = zSig & 0x7F;
- if ( 0xFD <= (bits16) zExp ) {
- if ( ( 0xFD < zExp )
- || ( ( zExp == 0xFD )
- && ( (sbits32) ( zSig + roundIncrement ) < 0 ) )
- ) {
- float_raise( float_flag_overflow | float_flag_inexact );
- return packFloat32( zSign, 0xFF, 0 ) - ( roundIncrement == 0 );
- }
- if ( zExp < 0 ) {
- isTiny =
- ( float_detect_tininess == float_tininess_before_rounding )
- || ( zExp < -1 )
- || ( zSig + roundIncrement < (uint32)0x80000000 );
- shift32RightJamming( zSig, - zExp, &zSig );
- zExp = 0;
- roundBits = zSig & 0x7F;
- if ( isTiny && roundBits ) float_raise( float_flag_underflow );
- }
- }
- if ( roundBits ) set_float_exception_inexact_flag();
- zSig = ( zSig + roundIncrement )>>7;
- zSig &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
- if ( zSig == 0 ) zExp = 0;
- return packFloat32( zSign, zExp, zSig );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes an abstract floating-point value having sign `zSign', exponent `zExp',
-and significand `zSig', and returns the proper single-precision floating-
-point value corresponding to the abstract input. This routine is just like
-`roundAndPackFloat32' except that `zSig' does not have to be normalized.
-Bit 31 of `zSig' must be zero, and `zExp' must be 1 less than the ``true''
-floating-point exponent.
--------------------------------------------------------------------------------
-*/
-static float32
- normalizeRoundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig )
-{
- int8 shiftCount;
-
- shiftCount = countLeadingZeros32( zSig ) - 1;
- return roundAndPackFloat32( zSign, zExp - shiftCount, zSig<<shiftCount );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the least-significant 32 fraction bits of the double-precision
-floating-point value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE bits32 extractFloat64Frac1( float64 a )
-{
-
- return (bits32)(FLOAT64_DEMANGLE(a) & LIT64(0x00000000FFFFFFFF));
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the most-significant 20 fraction bits of the double-precision
-floating-point value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE bits32 extractFloat64Frac0( float64 a )
-{
-
- return (bits32)((FLOAT64_DEMANGLE(a) >> 32) & 0x000FFFFF);
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the exponent bits of the double-precision floating-point value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE int16 extractFloat64Exp( float64 a )
-{
-
- return (int16)((FLOAT64_DEMANGLE(a) >> 52) & 0x7FF);
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the sign bit of the double-precision floating-point value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE flag extractFloat64Sign( float64 a )
-{
-
- return (flag)(FLOAT64_DEMANGLE(a) >> 63);
-
-}
-
-/*
--------------------------------------------------------------------------------
-Normalizes the subnormal double-precision floating-point value represented
-by the denormalized significand formed by the concatenation of `aSig0' and
-`aSig1'. The normalized exponent is stored at the location pointed to by
-`zExpPtr'. The most significant 21 bits of the normalized significand are
-stored at the location pointed to by `zSig0Ptr', and the least significant
-32 bits of the normalized significand are stored at the location pointed to
-by `zSig1Ptr'.
--------------------------------------------------------------------------------
-*/
-static void
- normalizeFloat64Subnormal(
- bits32 aSig0,
- bits32 aSig1,
- int16 *zExpPtr,
- bits32 *zSig0Ptr,
- bits32 *zSig1Ptr
- )
-{
- int8 shiftCount;
-
- if ( aSig0 == 0 ) {
- shiftCount = countLeadingZeros32( aSig1 ) - 11;
- if ( shiftCount < 0 ) {
- *zSig0Ptr = aSig1>>( - shiftCount );
- *zSig1Ptr = aSig1<<( shiftCount & 31 );
- }
- else {
- *zSig0Ptr = aSig1<<shiftCount;
- *zSig1Ptr = 0;
- }
- *zExpPtr = - shiftCount - 31;
- }
- else {
- shiftCount = countLeadingZeros32( aSig0 ) - 11;
- shortShift64Left( aSig0, aSig1, shiftCount, zSig0Ptr, zSig1Ptr );
- *zExpPtr = 1 - shiftCount;
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-Packs the sign `zSign', the exponent `zExp', and the significand formed by
-the concatenation of `zSig0' and `zSig1' into a double-precision floating-
-point value, returning the result. After being shifted into the proper
-positions, the three fields `zSign', `zExp', and `zSig0' are simply added
-together to form the most significant 32 bits of the result. This means
-that any integer portion of `zSig0' will be added into the exponent. Since
-a properly normalized significand will have an integer portion equal to 1,
-the `zExp' input should be 1 less than the desired result exponent whenever
-`zSig0' and `zSig1' concatenated form a complete, normalized significand.
--------------------------------------------------------------------------------
-*/
-INLINE float64
- packFloat64( flag zSign, int16 zExp, bits32 zSig0, bits32 zSig1 )
-{
-
- return FLOAT64_MANGLE( ( ( (bits64) zSign )<<63 ) +
- ( ( (bits64) zExp )<<52 ) +
- ( ( (bits64) zSig0 )<<32 ) + zSig1 );
-
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes an abstract floating-point value having sign `zSign', exponent `zExp',
-and extended significand formed by the concatenation of `zSig0', `zSig1',
-and `zSig2', and returns the proper double-precision floating-point value
-corresponding to the abstract input. Ordinarily, the abstract value is
-simply rounded and packed into the double-precision format, with the inexact
-exception raised if the abstract input cannot be represented exactly.
-However, if the abstract value is too large, the overflow and inexact
-exceptions are raised and an infinity or maximal finite value is returned.
-If the abstract value is too small, the input value is rounded to a
-subnormal number, and the underflow and inexact exceptions are raised if the
-abstract input cannot be represented exactly as a subnormal double-precision
-floating-point number.
- The input significand must be normalized or smaller. If the input
-significand is not normalized, `zExp' must be 0; in that case, the result
-returned is a subnormal number, and it must not require rounding. In the
-usual case that the input significand is normalized, `zExp' must be 1 less
-than the ``true'' floating-point exponent. The handling of underflow and
-overflow follows the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static float64
- roundAndPackFloat64(
- flag zSign, int16 zExp, bits32 zSig0, bits32 zSig1, bits32 zSig2 )
-{
- int8 roundingMode;
- flag roundNearestEven, increment, isTiny;
-
- roundingMode = float_rounding_mode;
- roundNearestEven = ( roundingMode == float_round_nearest_even );
- increment = ( (sbits32) zSig2 < 0 );
- if ( ! roundNearestEven ) {
- if ( roundingMode == float_round_to_zero ) {
- increment = 0;
- }
- else {
- if ( zSign ) {
- increment = ( roundingMode == float_round_down ) && zSig2;
- }
- else {
- increment = ( roundingMode == float_round_up ) && zSig2;
- }
- }
- }
- if ( 0x7FD <= (bits16) zExp ) {
- if ( ( 0x7FD < zExp )
- || ( ( zExp == 0x7FD )
- && eq64( 0x001FFFFF, 0xFFFFFFFF, zSig0, zSig1 )
- && increment
- )
- ) {
- float_raise( float_flag_overflow | float_flag_inexact );
- if ( ( roundingMode == float_round_to_zero )
- || ( zSign && ( roundingMode == float_round_up ) )
- || ( ! zSign && ( roundingMode == float_round_down ) )
- ) {
- return packFloat64( zSign, 0x7FE, 0x000FFFFF, 0xFFFFFFFF );
- }
- return packFloat64( zSign, 0x7FF, 0, 0 );
- }
- if ( zExp < 0 ) {
- isTiny =
- ( float_detect_tininess == float_tininess_before_rounding )
- || ( zExp < -1 )
- || ! increment
- || lt64( zSig0, zSig1, 0x001FFFFF, 0xFFFFFFFF );
- shift64ExtraRightJamming(
- zSig0, zSig1, zSig2, - zExp, &zSig0, &zSig1, &zSig2 );
- zExp = 0;
- if ( isTiny && zSig2 ) float_raise( float_flag_underflow );
- if ( roundNearestEven ) {
- increment = ( (sbits32) zSig2 < 0 );
- }
- else {
- if ( zSign ) {
- increment = ( roundingMode == float_round_down ) && zSig2;
- }
- else {
- increment = ( roundingMode == float_round_up ) && zSig2;
- }
- }
- }
- }
- if ( zSig2 ) set_float_exception_inexact_flag();
- if ( increment ) {
- add64( zSig0, zSig1, 0, 1, &zSig0, &zSig1 );
- zSig1 &= ~ ( ( zSig2 + zSig2 == 0 ) & roundNearestEven );
- }
- else {
- if ( ( zSig0 | zSig1 ) == 0 ) zExp = 0;
- }
- return packFloat64( zSign, zExp, zSig0, zSig1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes an abstract floating-point value having sign `zSign', exponent `zExp',
-and significand formed by the concatenation of `zSig0' and `zSig1', and
-returns the proper double-precision floating-point value corresponding
-to the abstract input. This routine is just like `roundAndPackFloat64'
-except that the input significand has fewer bits and does not have to be
-normalized. In all cases, `zExp' must be 1 less than the ``true'' floating-
-point exponent.
--------------------------------------------------------------------------------
-*/
-static float64
- normalizeRoundAndPackFloat64(
- flag zSign, int16 zExp, bits32 zSig0, bits32 zSig1 )
-{
- int8 shiftCount;
- bits32 zSig2;
-
- if ( zSig0 == 0 ) {
- zSig0 = zSig1;
- zSig1 = 0;
- zExp -= 32;
- }
- shiftCount = countLeadingZeros32( zSig0 ) - 11;
- if ( 0 <= shiftCount ) {
- zSig2 = 0;
- shortShift64Left( zSig0, zSig1, shiftCount, &zSig0, &zSig1 );
- }
- else {
- shift64ExtraRightJamming(
- zSig0, zSig1, 0, - shiftCount, &zSig0, &zSig1, &zSig2 );
- }
- zExp -= shiftCount;
- return roundAndPackFloat64( zSign, zExp, zSig0, zSig1, zSig2 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the 32-bit two's complement integer `a' to
-the single-precision floating-point format. The conversion is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 int32_to_float32( int32 a )
-{
- flag zSign;
-
- if ( a == 0 ) return 0;
- if ( a == (sbits32) 0x80000000 ) return packFloat32( 1, 0x9E, 0 );
- zSign = ( a < 0 );
- return normalizeRoundAndPackFloat32(zSign, 0x9C, (uint32)(zSign ? - a : a));
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the 32-bit two's complement integer `a' to
-the double-precision floating-point format. The conversion is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 int32_to_float64( int32 a )
-{
- flag zSign;
- bits32 absA;
- int8 shiftCount;
- bits32 zSig0, zSig1;
-
- if ( a == 0 ) return packFloat64( 0, 0, 0, 0 );
- zSign = ( a < 0 );
- absA = zSign ? - a : a;
- shiftCount = countLeadingZeros32( absA ) - 11;
- if ( 0 <= shiftCount ) {
- zSig0 = absA<<shiftCount;
- zSig1 = 0;
- }
- else {
- shift64Right( absA, 0, - shiftCount, &zSig0, &zSig1 );
- }
- return packFloat64( zSign, 0x412 - shiftCount, zSig0, zSig1 );
-
-}
-
-#ifndef SOFTFLOAT_FOR_GCC
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the single-precision floating-point value
-`a' to the 32-bit two's complement integer format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic---which means in particular that the conversion is rounded
-according to the current rounding mode. If `a' is a NaN, the largest
-positive integer is returned. Otherwise, if the conversion overflows, the
-largest integer with the same sign as `a' is returned.
--------------------------------------------------------------------------------
-*/
-int32 float32_to_int32( float32 a )
-{
- flag aSign;
- int16 aExp, shiftCount;
- bits32 aSig, aSigExtra;
- int32 z;
- int8 roundingMode;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- shiftCount = aExp - 0x96;
- if ( 0 <= shiftCount ) {
- if ( 0x9E <= aExp ) {
- if ( a != 0xCF000000 ) {
- float_raise( float_flag_invalid );
- if ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) {
- return 0x7FFFFFFF;
- }
- }
- return (sbits32) 0x80000000;
- }
- z = ( aSig | 0x00800000 )<<shiftCount;
- if ( aSign ) z = - z;
- }
- else {
- if ( aExp < 0x7E ) {
- aSigExtra = aExp | aSig;
- z = 0;
- }
- else {
- aSig |= 0x00800000;
- aSigExtra = aSig<<( shiftCount & 31 );
- z = aSig>>( - shiftCount );
- }
- if ( aSigExtra ) set_float_exception_inexact_flag();
- roundingMode = float_rounding_mode;
- if ( roundingMode == float_round_nearest_even ) {
- if ( (sbits32) aSigExtra < 0 ) {
- ++z;
- if ( (bits32) ( aSigExtra<<1 ) == 0 ) z &= ~1;
- }
- if ( aSign ) z = - z;
- }
- else {
- aSigExtra = ( aSigExtra != 0 );
- if ( aSign ) {
- z += ( roundingMode == float_round_down ) & aSigExtra;
- z = - z;
- }
- else {
- z += ( roundingMode == float_round_up ) & aSigExtra;
- }
- }
- }
- return z;
-
-}
-#endif
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the single-precision floating-point value
-`a' to the 32-bit two's complement integer format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic, except that the conversion is always rounded toward zero.
-If `a' is a NaN, the largest positive integer is returned. Otherwise, if
-the conversion overflows, the largest integer with the same sign as `a' is
-returned.
--------------------------------------------------------------------------------
-*/
-int32 float32_to_int32_round_to_zero( float32 a )
-{
- flag aSign;
- int16 aExp, shiftCount;
- bits32 aSig;
- int32 z;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- shiftCount = aExp - 0x9E;
- if ( 0 <= shiftCount ) {
- if ( a != 0xCF000000 ) {
- float_raise( float_flag_invalid );
- if ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) return 0x7FFFFFFF;
- }
- return (sbits32) 0x80000000;
- }
- else if ( aExp <= 0x7E ) {
- if ( aExp | aSig ) set_float_exception_inexact_flag();
- return 0;
- }
- aSig = ( aSig | 0x00800000 )<<8;
- z = aSig>>( - shiftCount );
- if ( (bits32) ( aSig<<( shiftCount & 31 ) ) ) {
- set_float_exception_inexact_flag();
- }
- if ( aSign ) z = - z;
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the single-precision floating-point value
-`a' to the double-precision floating-point format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float32_to_float64( float32 a )
-{
- flag aSign;
- int16 aExp;
- bits32 aSig, zSig0, zSig1;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- if ( aExp == 0xFF ) {
- if ( aSig ) return commonNaNToFloat64( float32ToCommonNaN( a ) );
- return packFloat64( aSign, 0x7FF, 0, 0 );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return packFloat64( aSign, 0, 0, 0 );
- normalizeFloat32Subnormal( aSig, &aExp, &aSig );
- --aExp;
- }
- shift64Right( aSig, 0, 3, &zSig0, &zSig1 );
- return packFloat64( aSign, aExp + 0x380, zSig0, zSig1 );
-
-}
-
-#ifndef SOFTFLOAT_FOR_GCC
-/*
--------------------------------------------------------------------------------
-Rounds the single-precision floating-point value `a' to an integer,
-and returns the result as a single-precision floating-point value. The
-operation is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float32_round_to_int( float32 a )
-{
- flag aSign;
- int16 aExp;
- bits32 lastBitMask, roundBitsMask;
- int8 roundingMode;
- float32 z;
-
- aExp = extractFloat32Exp( a );
- if ( 0x96 <= aExp ) {
- if ( ( aExp == 0xFF ) && extractFloat32Frac( a ) ) {
- return propagateFloat32NaN( a, a );
- }
- return a;
- }
- if ( aExp <= 0x7E ) {
- if ( (bits32) ( a<<1 ) == 0 ) return a;
- set_float_exception_inexact_flag();
- aSign = extractFloat32Sign( a );
- switch ( float_rounding_mode ) {
- case float_round_nearest_even:
- if ( ( aExp == 0x7E ) && extractFloat32Frac( a ) ) {
- return packFloat32( aSign, 0x7F, 0 );
- }
- break;
- case float_round_to_zero:
- break;
- case float_round_down:
- return aSign ? 0xBF800000 : 0;
- case float_round_up:
- return aSign ? 0x80000000 : 0x3F800000;
- }
- return packFloat32( aSign, 0, 0 );
- }
- lastBitMask = 1;
- lastBitMask <<= 0x96 - aExp;
- roundBitsMask = lastBitMask - 1;
- z = a;
- roundingMode = float_rounding_mode;
- if ( roundingMode == float_round_nearest_even ) {
- z += lastBitMask>>1;
- if ( ( z & roundBitsMask ) == 0 ) z &= ~ lastBitMask;
- }
- else if ( roundingMode != float_round_to_zero ) {
- if ( extractFloat32Sign( z ) ^ ( roundingMode == float_round_up ) ) {
- z += roundBitsMask;
- }
- }
- z &= ~ roundBitsMask;
- if ( z != a ) set_float_exception_inexact_flag();
- return z;
-
-}
-#endif
-
-/*
--------------------------------------------------------------------------------
-Returns the result of adding the absolute values of the single-precision
-floating-point values `a' and `b'. If `zSign' is 1, the sum is negated
-before being returned. `zSign' is ignored if the result is a NaN.
-The addition is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static float32 addFloat32Sigs( float32 a, float32 b, flag zSign )
-{
- int16 aExp, bExp, zExp;
- bits32 aSig, bSig, zSig;
- int16 expDiff;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- bSig = extractFloat32Frac( b );
- bExp = extractFloat32Exp( b );
- expDiff = aExp - bExp;
- aSig <<= 6;
- bSig <<= 6;
- if ( 0 < expDiff ) {
- if ( aExp == 0xFF ) {
- if ( aSig ) return propagateFloat32NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) {
- --expDiff;
- }
- else {
- bSig |= 0x20000000;
- }
- shift32RightJamming( bSig, expDiff, &bSig );
- zExp = aExp;
- }
- else if ( expDiff < 0 ) {
- if ( bExp == 0xFF ) {
- if ( bSig ) return propagateFloat32NaN( a, b );
- return packFloat32( zSign, 0xFF, 0 );
- }
- if ( aExp == 0 ) {
- ++expDiff;
- }
- else {
- aSig |= 0x20000000;
- }
- shift32RightJamming( aSig, - expDiff, &aSig );
- zExp = bExp;
- }
- else {
- if ( aExp == 0xFF ) {
- if ( aSig | bSig ) return propagateFloat32NaN( a, b );
- return a;
- }
- if ( aExp == 0 ) return packFloat32( zSign, 0, ( aSig + bSig )>>6 );
- zSig = 0x40000000 + aSig + bSig;
- zExp = aExp;
- goto roundAndPack;
- }
- aSig |= 0x20000000;
- zSig = ( aSig + bSig )<<1;
- --zExp;
- if ( (sbits32) zSig < 0 ) {
- zSig = aSig + bSig;
- ++zExp;
- }
- roundAndPack:
- return roundAndPackFloat32( zSign, zExp, zSig );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of subtracting the absolute values of the single-
-precision floating-point values `a' and `b'. If `zSign' is 1, the
-difference is negated before being returned. `zSign' is ignored if the
-result is a NaN. The subtraction is performed according to the IEC/IEEE
-Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static float32 subFloat32Sigs( float32 a, float32 b, flag zSign )
-{
- int16 aExp, bExp, zExp;
- bits32 aSig, bSig, zSig;
- int16 expDiff;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- bSig = extractFloat32Frac( b );
- bExp = extractFloat32Exp( b );
- expDiff = aExp - bExp;
- aSig <<= 7;
- bSig <<= 7;
- if ( 0 < expDiff ) goto aExpBigger;
- if ( expDiff < 0 ) goto bExpBigger;
- if ( aExp == 0xFF ) {
- if ( aSig | bSig ) return propagateFloat32NaN( a, b );
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- if ( aExp == 0 ) {
- aExp = 1;
- bExp = 1;
- }
- if ( bSig < aSig ) goto aBigger;
- if ( aSig < bSig ) goto bBigger;
- return packFloat32( float_rounding_mode == float_round_down, 0, 0 );
- bExpBigger:
- if ( bExp == 0xFF ) {
- if ( bSig ) return propagateFloat32NaN( a, b );
- return packFloat32( zSign ^ 1, 0xFF, 0 );
- }
- if ( aExp == 0 ) {
- ++expDiff;
- }
- else {
- aSig |= 0x40000000;
- }
- shift32RightJamming( aSig, - expDiff, &aSig );
- bSig |= 0x40000000;
- bBigger:
- zSig = bSig - aSig;
- zExp = bExp;
- zSign ^= 1;
- goto normalizeRoundAndPack;
- aExpBigger:
- if ( aExp == 0xFF ) {
- if ( aSig ) return propagateFloat32NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) {
- --expDiff;
- }
- else {
- bSig |= 0x40000000;
- }
- shift32RightJamming( bSig, expDiff, &bSig );
- aSig |= 0x40000000;
- aBigger:
- zSig = aSig - bSig;
- zExp = aExp;
- normalizeRoundAndPack:
- --zExp;
- return normalizeRoundAndPackFloat32( zSign, zExp, zSig );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of adding the single-precision floating-point values `a'
-and `b'. The operation is performed according to the IEC/IEEE Standard for
-Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float32_add( float32 a, float32 b )
-{
- flag aSign, bSign;
-
- aSign = extractFloat32Sign( a );
- bSign = extractFloat32Sign( b );
- if ( aSign == bSign ) {
- return addFloat32Sigs( a, b, aSign );
- }
- else {
- return subFloat32Sigs( a, b, aSign );
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of subtracting the single-precision floating-point values
-`a' and `b'. The operation is performed according to the IEC/IEEE Standard
-for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float32_sub( float32 a, float32 b )
-{
- flag aSign, bSign;
-
- aSign = extractFloat32Sign( a );
- bSign = extractFloat32Sign( b );
- if ( aSign == bSign ) {
- return subFloat32Sigs( a, b, aSign );
- }
- else {
- return addFloat32Sigs( a, b, aSign );
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of multiplying the single-precision floating-point values
-`a' and `b'. The operation is performed according to the IEC/IEEE Standard
-for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float32_mul( float32 a, float32 b )
-{
- flag aSign, bSign, zSign;
- int16 aExp, bExp, zExp;
- bits32 aSig, bSig, zSig0, zSig1;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- bSig = extractFloat32Frac( b );
- bExp = extractFloat32Exp( b );
- bSign = extractFloat32Sign( b );
- zSign = aSign ^ bSign;
- if ( aExp == 0xFF ) {
- if ( aSig || ( ( bExp == 0xFF ) && bSig ) ) {
- return propagateFloat32NaN( a, b );
- }
- if ( ( bExp | bSig ) == 0 ) {
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- return packFloat32( zSign, 0xFF, 0 );
- }
- if ( bExp == 0xFF ) {
- if ( bSig ) return propagateFloat32NaN( a, b );
- if ( ( aExp | aSig ) == 0 ) {
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- return packFloat32( zSign, 0xFF, 0 );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return packFloat32( zSign, 0, 0 );
- normalizeFloat32Subnormal( aSig, &aExp, &aSig );
- }
- if ( bExp == 0 ) {
- if ( bSig == 0 ) return packFloat32( zSign, 0, 0 );
- normalizeFloat32Subnormal( bSig, &bExp, &bSig );
- }
- zExp = aExp + bExp - 0x7F;
- aSig = ( aSig | 0x00800000 )<<7;
- bSig = ( bSig | 0x00800000 )<<8;
- mul32To64( aSig, bSig, &zSig0, &zSig1 );
- zSig0 |= ( zSig1 != 0 );
- if ( 0 <= (sbits32) ( zSig0<<1 ) ) {
- zSig0 <<= 1;
- --zExp;
- }
- return roundAndPackFloat32( zSign, zExp, zSig0 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of dividing the single-precision floating-point value `a'
-by the corresponding value `b'. The operation is performed according to the
-IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float32_div( float32 a, float32 b )
-{
- flag aSign, bSign, zSign;
- int16 aExp, bExp, zExp;
- bits32 aSig, bSig, zSig, rem0, rem1, term0, term1;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- bSig = extractFloat32Frac( b );
- bExp = extractFloat32Exp( b );
- bSign = extractFloat32Sign( b );
- zSign = aSign ^ bSign;
- if ( aExp == 0xFF ) {
- if ( aSig ) return propagateFloat32NaN( a, b );
- if ( bExp == 0xFF ) {
- if ( bSig ) return propagateFloat32NaN( a, b );
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- return packFloat32( zSign, 0xFF, 0 );
- }
- if ( bExp == 0xFF ) {
- if ( bSig ) return propagateFloat32NaN( a, b );
- return packFloat32( zSign, 0, 0 );
- }
- if ( bExp == 0 ) {
- if ( bSig == 0 ) {
- if ( ( aExp | aSig ) == 0 ) {
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- float_raise( float_flag_divbyzero );
- return packFloat32( zSign, 0xFF, 0 );
- }
- normalizeFloat32Subnormal( bSig, &bExp, &bSig );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return packFloat32( zSign, 0, 0 );
- normalizeFloat32Subnormal( aSig, &aExp, &aSig );
- }
- zExp = aExp - bExp + 0x7D;
- aSig = ( aSig | 0x00800000 )<<7;
- bSig = ( bSig | 0x00800000 )<<8;
- if ( bSig <= ( aSig + aSig ) ) {
- aSig >>= 1;
- ++zExp;
- }
- zSig = estimateDiv64To32( aSig, 0, bSig );
- if ( ( zSig & 0x3F ) <= 2 ) {
- mul32To64( bSig, zSig, &term0, &term1 );
- sub64( aSig, 0, term0, term1, &rem0, &rem1 );
- while ( (sbits32) rem0 < 0 ) {
- --zSig;
- add64( rem0, rem1, 0, bSig, &rem0, &rem1 );
- }
- zSig |= ( rem1 != 0 );
- }
- return roundAndPackFloat32( zSign, zExp, zSig );
-
-}
-
-#ifndef SOFTFLOAT_FOR_GCC
-/*
--------------------------------------------------------------------------------
-Returns the remainder of the single-precision floating-point value `a'
-with respect to the corresponding value `b'. The operation is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float32_rem( float32 a, float32 b )
-{
- flag aSign, bSign, zSign;
- int16 aExp, bExp, expDiff;
- bits32 aSig, bSig, q, allZero, alternateASig;
- sbits32 sigMean;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- bSig = extractFloat32Frac( b );
- bExp = extractFloat32Exp( b );
- bSign = extractFloat32Sign( b );
- if ( aExp == 0xFF ) {
- if ( aSig || ( ( bExp == 0xFF ) && bSig ) ) {
- return propagateFloat32NaN( a, b );
- }
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- if ( bExp == 0xFF ) {
- if ( bSig ) return propagateFloat32NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) {
- if ( bSig == 0 ) {
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- normalizeFloat32Subnormal( bSig, &bExp, &bSig );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return a;
- normalizeFloat32Subnormal( aSig, &aExp, &aSig );
- }
- expDiff = aExp - bExp;
- aSig = ( aSig | 0x00800000 )<<8;
- bSig = ( bSig | 0x00800000 )<<8;
- if ( expDiff < 0 ) {
- if ( expDiff < -1 ) return a;
- aSig >>= 1;
- }
- q = ( bSig <= aSig );
- if ( q ) aSig -= bSig;
- expDiff -= 32;
- while ( 0 < expDiff ) {
- q = estimateDiv64To32( aSig, 0, bSig );
- q = ( 2 < q ) ? q - 2 : 0;
- aSig = - ( ( bSig>>2 ) * q );
- expDiff -= 30;
- }
- expDiff += 32;
- if ( 0 < expDiff ) {
- q = estimateDiv64To32( aSig, 0, bSig );
- q = ( 2 < q ) ? q - 2 : 0;
- q >>= 32 - expDiff;
- bSig >>= 2;
- aSig = ( ( aSig>>1 )<<( expDiff - 1 ) ) - bSig * q;
- }
- else {
- aSig >>= 2;
- bSig >>= 2;
- }
- do {
- alternateASig = aSig;
- ++q;
- aSig -= bSig;
- } while ( 0 <= (sbits32) aSig );
- sigMean = aSig + alternateASig;
- if ( ( sigMean < 0 ) || ( ( sigMean == 0 ) && ( q & 1 ) ) ) {
- aSig = alternateASig;
- }
- zSign = ( (sbits32) aSig < 0 );
- if ( zSign ) aSig = - aSig;
- return normalizeRoundAndPackFloat32( aSign ^ zSign, bExp, aSig );
-
-}
-#endif
-
-#ifndef SOFTFLOAT_FOR_GCC
-/*
--------------------------------------------------------------------------------
-Returns the square root of the single-precision floating-point value `a'.
-The operation is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float32_sqrt( float32 a )
-{
- flag aSign;
- int16 aExp, zExp;
- bits32 aSig, zSig, rem0, rem1, term0, term1;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- if ( aExp == 0xFF ) {
- if ( aSig ) return propagateFloat32NaN( a, 0 );
- if ( ! aSign ) return a;
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- if ( aSign ) {
- if ( ( aExp | aSig ) == 0 ) return a;
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return 0;
- normalizeFloat32Subnormal( aSig, &aExp, &aSig );
- }
- zExp = ( ( aExp - 0x7F )>>1 ) + 0x7E;
- aSig = ( aSig | 0x00800000 )<<8;
- zSig = estimateSqrt32( aExp, aSig ) + 2;
- if ( ( zSig & 0x7F ) <= 5 ) {
- if ( zSig < 2 ) {
- zSig = 0x7FFFFFFF;
- goto roundAndPack;
- }
- else {
- aSig >>= aExp & 1;
- mul32To64( zSig, zSig, &term0, &term1 );
- sub64( aSig, 0, term0, term1, &rem0, &rem1 );
- while ( (sbits32) rem0 < 0 ) {
- --zSig;
- shortShift64Left( 0, zSig, 1, &term0, &term1 );
- term1 |= 1;
- add64( rem0, rem1, term0, term1, &rem0, &rem1 );
- }
- zSig |= ( ( rem0 | rem1 ) != 0 );
- }
- }
- shift32RightJamming( zSig, 1, &zSig );
- roundAndPack:
- return roundAndPackFloat32( 0, zExp, zSig );
-
-}
-#endif
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the single-precision floating-point value `a' is equal to
-the corresponding value `b', and 0 otherwise. The comparison is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float32_eq( float32 a, float32 b )
-{
-
- if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )
- || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )
- ) {
- if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- return ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the single-precision floating-point value `a' is less than
-or equal to the corresponding value `b', and 0 otherwise. The comparison
-is performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float32_le( float32 a, float32 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )
- || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- aSign = extractFloat32Sign( a );
- bSign = extractFloat32Sign( b );
- if ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 );
- return ( a == b ) || ( aSign ^ ( a < b ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the single-precision floating-point value `a' is less than
-the corresponding value `b', and 0 otherwise. The comparison is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float32_lt( float32 a, float32 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )
- || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- aSign = extractFloat32Sign( a );
- bSign = extractFloat32Sign( b );
- if ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 );
- return ( a != b ) && ( aSign ^ ( a < b ) );
-
-}
-
-#ifndef SOFTFLOAT_FOR_GCC /* Not needed */
-/*
--------------------------------------------------------------------------------
-Returns 1 if the single-precision floating-point value `a' is equal to
-the corresponding value `b', and 0 otherwise. The invalid exception is
-raised if either operand is a NaN. Otherwise, the comparison is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float32_eq_signaling( float32 a, float32 b )
-{
-
- if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )
- || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- return ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the single-precision floating-point value `a' is less than or
-equal to the corresponding value `b', and 0 otherwise. Quiet NaNs do not
-cause an exception. Otherwise, the comparison is performed according to the
-IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float32_le_quiet( float32 a, float32 b )
-{
- flag aSign, bSign;
- int16 aExp, bExp;
-
- if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )
- || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )
- ) {
- if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- aSign = extractFloat32Sign( a );
- bSign = extractFloat32Sign( b );
- if ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 );
- return ( a == b ) || ( aSign ^ ( a < b ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the single-precision floating-point value `a' is less than
-the corresponding value `b', and 0 otherwise. Quiet NaNs do not cause an
-exception. Otherwise, the comparison is performed according to the IEC/IEEE
-Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float32_lt_quiet( float32 a, float32 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )
- || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )
- ) {
- if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- aSign = extractFloat32Sign( a );
- bSign = extractFloat32Sign( b );
- if ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 );
- return ( a != b ) && ( aSign ^ ( a < b ) );
-
-}
-#endif /* !SOFTFLOAT_FOR_GCC */
-
-#ifndef SOFTFLOAT_FOR_GCC /* Not needed */
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the double-precision floating-point value
-`a' to the 32-bit two's complement integer format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic---which means in particular that the conversion is rounded
-according to the current rounding mode. If `a' is a NaN, the largest
-positive integer is returned. Otherwise, if the conversion overflows, the
-largest integer with the same sign as `a' is returned.
--------------------------------------------------------------------------------
-*/
-int32 float64_to_int32( float64 a )
-{
- flag aSign;
- int16 aExp, shiftCount;
- bits32 aSig0, aSig1, absZ, aSigExtra;
- int32 z;
- int8 roundingMode;
-
- aSig1 = extractFloat64Frac1( a );
- aSig0 = extractFloat64Frac0( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- shiftCount = aExp - 0x413;
- if ( 0 <= shiftCount ) {
- if ( 0x41E < aExp ) {
- if ( ( aExp == 0x7FF ) && ( aSig0 | aSig1 ) ) aSign = 0;
- goto invalid;
- }
- shortShift64Left(
- aSig0 | 0x00100000, aSig1, shiftCount, &absZ, &aSigExtra );
- if ( 0x80000000 < absZ ) goto invalid;
- }
- else {
- aSig1 = ( aSig1 != 0 );
- if ( aExp < 0x3FE ) {
- aSigExtra = aExp | aSig0 | aSig1;
- absZ = 0;
- }
- else {
- aSig0 |= 0x00100000;
- aSigExtra = ( aSig0<<( shiftCount & 31 ) ) | aSig1;
- absZ = aSig0>>( - shiftCount );
- }
- }
- roundingMode = float_rounding_mode;
- if ( roundingMode == float_round_nearest_even ) {
- if ( (sbits32) aSigExtra < 0 ) {
- ++absZ;
- if ( (bits32) ( aSigExtra<<1 ) == 0 ) absZ &= ~1;
- }
- z = aSign ? - absZ : absZ;
- }
- else {
- aSigExtra = ( aSigExtra != 0 );
- if ( aSign ) {
- z = - ( absZ
- + ( ( roundingMode == float_round_down ) & aSigExtra ) );
- }
- else {
- z = absZ + ( ( roundingMode == float_round_up ) & aSigExtra );
- }
- }
- if ( ( aSign ^ ( z < 0 ) ) && z ) {
- invalid:
- float_raise( float_flag_invalid );
- return aSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;
- }
- if ( aSigExtra ) set_float_exception_inexact_flag();
- return z;
-
-}
-#endif /* !SOFTFLOAT_FOR_GCC */
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the double-precision floating-point value
-`a' to the 32-bit two's complement integer format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic, except that the conversion is always rounded toward zero.
-If `a' is a NaN, the largest positive integer is returned. Otherwise, if
-the conversion overflows, the largest integer with the same sign as `a' is
-returned.
--------------------------------------------------------------------------------
-*/
-int32 float64_to_int32_round_to_zero( float64 a )
-{
- flag aSign;
- int16 aExp, shiftCount;
- bits32 aSig0, aSig1, absZ, aSigExtra;
- int32 z;
-
- aSig1 = extractFloat64Frac1( a );
- aSig0 = extractFloat64Frac0( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- shiftCount = aExp - 0x413;
- if ( 0 <= shiftCount ) {
- if ( 0x41E < aExp ) {
- if ( ( aExp == 0x7FF ) && ( aSig0 | aSig1 ) ) aSign = 0;
- goto invalid;
- }
- shortShift64Left(
- aSig0 | 0x00100000, aSig1, shiftCount, &absZ, &aSigExtra );
- }
- else {
- if ( aExp < 0x3FF ) {
- if ( aExp | aSig0 | aSig1 ) {
- set_float_exception_inexact_flag();
- }
- return 0;
- }
- aSig0 |= 0x00100000;
- aSigExtra = ( aSig0<<( shiftCount & 31 ) ) | aSig1;
- absZ = aSig0>>( - shiftCount );
- }
- z = aSign ? - absZ : absZ;
- if ( ( aSign ^ ( z < 0 ) ) && z ) {
- invalid:
- float_raise( float_flag_invalid );
- return aSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;
- }
- if ( aSigExtra ) set_float_exception_inexact_flag();
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the double-precision floating-point value
-`a' to the single-precision floating-point format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float64_to_float32( float64 a )
-{
- flag aSign;
- int16 aExp;
- bits32 aSig0, aSig1, zSig;
- bits32 allZero;
-
- aSig1 = extractFloat64Frac1( a );
- aSig0 = extractFloat64Frac0( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- if ( aExp == 0x7FF ) {
- if ( aSig0 | aSig1 ) {
- return commonNaNToFloat32( float64ToCommonNaN( a ) );
- }
- return packFloat32( aSign, 0xFF, 0 );
- }
- shift64RightJamming( aSig0, aSig1, 22, &allZero, &zSig );
- if ( aExp ) zSig |= 0x40000000;
- return roundAndPackFloat32( aSign, aExp - 0x381, zSig );
-
-}
-
-#ifndef SOFTFLOAT_FOR_GCC
-/*
--------------------------------------------------------------------------------
-Rounds the double-precision floating-point value `a' to an integer,
-and returns the result as a double-precision floating-point value. The
-operation is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float64_round_to_int( float64 a )
-{
- flag aSign;
- int16 aExp;
- bits32 lastBitMask, roundBitsMask;
- int8 roundingMode;
- float64 z;
-
- aExp = extractFloat64Exp( a );
- if ( 0x413 <= aExp ) {
- if ( 0x433 <= aExp ) {
- if ( ( aExp == 0x7FF )
- && ( extractFloat64Frac0( a ) | extractFloat64Frac1( a ) ) ) {
- return propagateFloat64NaN( a, a );
- }
- return a;
- }
- lastBitMask = 1;
- lastBitMask = ( lastBitMask<<( 0x432 - aExp ) )<<1;
- roundBitsMask = lastBitMask - 1;
- z = a;
- roundingMode = float_rounding_mode;
- if ( roundingMode == float_round_nearest_even ) {
- if ( lastBitMask ) {
- add64( z.high, z.low, 0, lastBitMask>>1, &z.high, &z.low );
- if ( ( z.low & roundBitsMask ) == 0 ) z.low &= ~ lastBitMask;
- }
- else {
- if ( (sbits32) z.low < 0 ) {
- ++z.high;
- if ( (bits32) ( z.low<<1 ) == 0 ) z.high &= ~1;
- }
- }
- }
- else if ( roundingMode != float_round_to_zero ) {
- if ( extractFloat64Sign( z )
- ^ ( roundingMode == float_round_up ) ) {
- add64( z.high, z.low, 0, roundBitsMask, &z.high, &z.low );
- }
- }
- z.low &= ~ roundBitsMask;
- }
- else {
- if ( aExp <= 0x3FE ) {
- if ( ( ( (bits32) ( a.high<<1 ) ) | a.low ) == 0 ) return a;
- set_float_exception_inexact_flag();
- aSign = extractFloat64Sign( a );
- switch ( float_rounding_mode ) {
- case float_round_nearest_even:
- if ( ( aExp == 0x3FE )
- && ( extractFloat64Frac0( a ) | extractFloat64Frac1( a ) )
- ) {
- return packFloat64( aSign, 0x3FF, 0, 0 );
- }
- break;
- case float_round_down:
- return
- aSign ? packFloat64( 1, 0x3FF, 0, 0 )
- : packFloat64( 0, 0, 0, 0 );
- case float_round_up:
- return
- aSign ? packFloat64( 1, 0, 0, 0 )
- : packFloat64( 0, 0x3FF, 0, 0 );
- }
- return packFloat64( aSign, 0, 0, 0 );
- }
- lastBitMask = 1;
- lastBitMask <<= 0x413 - aExp;
- roundBitsMask = lastBitMask - 1;
- z.low = 0;
- z.high = a.high;
- roundingMode = float_rounding_mode;
- if ( roundingMode == float_round_nearest_even ) {
- z.high += lastBitMask>>1;
- if ( ( ( z.high & roundBitsMask ) | a.low ) == 0 ) {
- z.high &= ~ lastBitMask;
- }
- }
- else if ( roundingMode != float_round_to_zero ) {
- if ( extractFloat64Sign( z )
- ^ ( roundingMode == float_round_up ) ) {
- z.high |= ( a.low != 0 );
- z.high += roundBitsMask;
- }
- }
- z.high &= ~ roundBitsMask;
- }
- if ( ( z.low != a.low ) || ( z.high != a.high ) ) {
- set_float_exception_inexact_flag();
- }
- return z;
-
-}
-#endif
-
-/*
--------------------------------------------------------------------------------
-Returns the result of adding the absolute values of the double-precision
-floating-point values `a' and `b'. If `zSign' is 1, the sum is negated
-before being returned. `zSign' is ignored if the result is a NaN.
-The addition is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static float64 addFloat64Sigs( float64 a, float64 b, flag zSign )
-{
- int16 aExp, bExp, zExp;
- bits32 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2;
- int16 expDiff;
-
- aSig1 = extractFloat64Frac1( a );
- aSig0 = extractFloat64Frac0( a );
- aExp = extractFloat64Exp( a );
- bSig1 = extractFloat64Frac1( b );
- bSig0 = extractFloat64Frac0( b );
- bExp = extractFloat64Exp( b );
- expDiff = aExp - bExp;
- if ( 0 < expDiff ) {
- if ( aExp == 0x7FF ) {
- if ( aSig0 | aSig1 ) return propagateFloat64NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) {
- --expDiff;
- }
- else {
- bSig0 |= 0x00100000;
- }
- shift64ExtraRightJamming(
- bSig0, bSig1, 0, expDiff, &bSig0, &bSig1, &zSig2 );
- zExp = aExp;
- }
- else if ( expDiff < 0 ) {
- if ( bExp == 0x7FF ) {
- if ( bSig0 | bSig1 ) return propagateFloat64NaN( a, b );
- return packFloat64( zSign, 0x7FF, 0, 0 );
- }
- if ( aExp == 0 ) {
- ++expDiff;
- }
- else {
- aSig0 |= 0x00100000;
- }
- shift64ExtraRightJamming(
- aSig0, aSig1, 0, - expDiff, &aSig0, &aSig1, &zSig2 );
- zExp = bExp;
- }
- else {
- if ( aExp == 0x7FF ) {
- if ( aSig0 | aSig1 | bSig0 | bSig1 ) {
- return propagateFloat64NaN( a, b );
- }
- return a;
- }
- add64( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 );
- if ( aExp == 0 ) return packFloat64( zSign, 0, zSig0, zSig1 );
- zSig2 = 0;
- zSig0 |= 0x00200000;
- zExp = aExp;
- goto shiftRight1;
- }
- aSig0 |= 0x00100000;
- add64( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 );
- --zExp;
- if ( zSig0 < 0x00200000 ) goto roundAndPack;
- ++zExp;
- shiftRight1:
- shift64ExtraRightJamming( zSig0, zSig1, zSig2, 1, &zSig0, &zSig1, &zSig2 );
- roundAndPack:
- return roundAndPackFloat64( zSign, zExp, zSig0, zSig1, zSig2 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of subtracting the absolute values of the double-
-precision floating-point values `a' and `b'. If `zSign' is 1, the
-difference is negated before being returned. `zSign' is ignored if the
-result is a NaN. The subtraction is performed according to the IEC/IEEE
-Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static float64 subFloat64Sigs( float64 a, float64 b, flag zSign )
-{
- int16 aExp, bExp, zExp;
- bits32 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1;
- int16 expDiff;
-
- aSig1 = extractFloat64Frac1( a );
- aSig0 = extractFloat64Frac0( a );
- aExp = extractFloat64Exp( a );
- bSig1 = extractFloat64Frac1( b );
- bSig0 = extractFloat64Frac0( b );
- bExp = extractFloat64Exp( b );
- expDiff = aExp - bExp;
- shortShift64Left( aSig0, aSig1, 10, &aSig0, &aSig1 );
- shortShift64Left( bSig0, bSig1, 10, &bSig0, &bSig1 );
- if ( 0 < expDiff ) goto aExpBigger;
- if ( expDiff < 0 ) goto bExpBigger;
- if ( aExp == 0x7FF ) {
- if ( aSig0 | aSig1 | bSig0 | bSig1 ) {
- return propagateFloat64NaN( a, b );
- }
- float_raise( float_flag_invalid );
- return float64_default_nan;
- }
- if ( aExp == 0 ) {
- aExp = 1;
- bExp = 1;
- }
- if ( bSig0 < aSig0 ) goto aBigger;
- if ( aSig0 < bSig0 ) goto bBigger;
- if ( bSig1 < aSig1 ) goto aBigger;
- if ( aSig1 < bSig1 ) goto bBigger;
- return packFloat64( float_rounding_mode == float_round_down, 0, 0, 0 );
- bExpBigger:
- if ( bExp == 0x7FF ) {
- if ( bSig0 | bSig1 ) return propagateFloat64NaN( a, b );
- return packFloat64( zSign ^ 1, 0x7FF, 0, 0 );
- }
- if ( aExp == 0 ) {
- ++expDiff;
- }
- else {
- aSig0 |= 0x40000000;
- }
- shift64RightJamming( aSig0, aSig1, - expDiff, &aSig0, &aSig1 );
- bSig0 |= 0x40000000;
- bBigger:
- sub64( bSig0, bSig1, aSig0, aSig1, &zSig0, &zSig1 );
- zExp = bExp;
- zSign ^= 1;
- goto normalizeRoundAndPack;
- aExpBigger:
- if ( aExp == 0x7FF ) {
- if ( aSig0 | aSig1 ) return propagateFloat64NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) {
- --expDiff;
- }
- else {
- bSig0 |= 0x40000000;
- }
- shift64RightJamming( bSig0, bSig1, expDiff, &bSig0, &bSig1 );
- aSig0 |= 0x40000000;
- aBigger:
- sub64( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 );
- zExp = aExp;
- normalizeRoundAndPack:
- --zExp;
- return normalizeRoundAndPackFloat64( zSign, zExp - 10, zSig0, zSig1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of adding the double-precision floating-point values `a'
-and `b'. The operation is performed according to the IEC/IEEE Standard for
-Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float64_add( float64 a, float64 b )
-{
- flag aSign, bSign;
-
- aSign = extractFloat64Sign( a );
- bSign = extractFloat64Sign( b );
- if ( aSign == bSign ) {
- return addFloat64Sigs( a, b, aSign );
- }
- else {
- return subFloat64Sigs( a, b, aSign );
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of subtracting the double-precision floating-point values
-`a' and `b'. The operation is performed according to the IEC/IEEE Standard
-for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float64_sub( float64 a, float64 b )
-{
- flag aSign, bSign;
-
- aSign = extractFloat64Sign( a );
- bSign = extractFloat64Sign( b );
- if ( aSign == bSign ) {
- return subFloat64Sigs( a, b, aSign );
- }
- else {
- return addFloat64Sigs( a, b, aSign );
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of multiplying the double-precision floating-point values
-`a' and `b'. The operation is performed according to the IEC/IEEE Standard
-for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float64_mul( float64 a, float64 b )
-{
- flag aSign, bSign, zSign;
- int16 aExp, bExp, zExp;
- bits32 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2, zSig3;
-
- aSig1 = extractFloat64Frac1( a );
- aSig0 = extractFloat64Frac0( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- bSig1 = extractFloat64Frac1( b );
- bSig0 = extractFloat64Frac0( b );
- bExp = extractFloat64Exp( b );
- bSign = extractFloat64Sign( b );
- zSign = aSign ^ bSign;
- if ( aExp == 0x7FF ) {
- if ( ( aSig0 | aSig1 )
- || ( ( bExp == 0x7FF ) && ( bSig0 | bSig1 ) ) ) {
- return propagateFloat64NaN( a, b );
- }
- if ( ( bExp | bSig0 | bSig1 ) == 0 ) goto invalid;
- return packFloat64( zSign, 0x7FF, 0, 0 );
- }
- if ( bExp == 0x7FF ) {
- if ( bSig0 | bSig1 ) return propagateFloat64NaN( a, b );
- if ( ( aExp | aSig0 | aSig1 ) == 0 ) {
- invalid:
- float_raise( float_flag_invalid );
- return float64_default_nan;
- }
- return packFloat64( zSign, 0x7FF, 0, 0 );
- }
- if ( aExp == 0 ) {
- if ( ( aSig0 | aSig1 ) == 0 ) return packFloat64( zSign, 0, 0, 0 );
- normalizeFloat64Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );
- }
- if ( bExp == 0 ) {
- if ( ( bSig0 | bSig1 ) == 0 ) return packFloat64( zSign, 0, 0, 0 );
- normalizeFloat64Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 );
- }
- zExp = aExp + bExp - 0x400;
- aSig0 |= 0x00100000;
- shortShift64Left( bSig0, bSig1, 12, &bSig0, &bSig1 );
- mul64To128( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1, &zSig2, &zSig3 );
- add64( zSig0, zSig1, aSig0, aSig1, &zSig0, &zSig1 );
- zSig2 |= ( zSig3 != 0 );
- if ( 0x00200000 <= zSig0 ) {
- shift64ExtraRightJamming(
- zSig0, zSig1, zSig2, 1, &zSig0, &zSig1, &zSig2 );
- ++zExp;
- }
- return roundAndPackFloat64( zSign, zExp, zSig0, zSig1, zSig2 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of dividing the double-precision floating-point value `a'
-by the corresponding value `b'. The operation is performed according to the
-IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float64_div( float64 a, float64 b )
-{
- flag aSign, bSign, zSign;
- int16 aExp, bExp, zExp;
- bits32 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2;
- bits32 rem0, rem1, rem2, rem3, term0, term1, term2, term3;
-
- aSig1 = extractFloat64Frac1( a );
- aSig0 = extractFloat64Frac0( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- bSig1 = extractFloat64Frac1( b );
- bSig0 = extractFloat64Frac0( b );
- bExp = extractFloat64Exp( b );
- bSign = extractFloat64Sign( b );
- zSign = aSign ^ bSign;
- if ( aExp == 0x7FF ) {
- if ( aSig0 | aSig1 ) return propagateFloat64NaN( a, b );
- if ( bExp == 0x7FF ) {
- if ( bSig0 | bSig1 ) return propagateFloat64NaN( a, b );
- goto invalid;
- }
- return packFloat64( zSign, 0x7FF, 0, 0 );
- }
- if ( bExp == 0x7FF ) {
- if ( bSig0 | bSig1 ) return propagateFloat64NaN( a, b );
- return packFloat64( zSign, 0, 0, 0 );
- }
- if ( bExp == 0 ) {
- if ( ( bSig0 | bSig1 ) == 0 ) {
- if ( ( aExp | aSig0 | aSig1 ) == 0 ) {
- invalid:
- float_raise( float_flag_invalid );
- return float64_default_nan;
- }
- float_raise( float_flag_divbyzero );
- return packFloat64( zSign, 0x7FF, 0, 0 );
- }
- normalizeFloat64Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 );
- }
- if ( aExp == 0 ) {
- if ( ( aSig0 | aSig1 ) == 0 ) return packFloat64( zSign, 0, 0, 0 );
- normalizeFloat64Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );
- }
- zExp = aExp - bExp + 0x3FD;
- shortShift64Left( aSig0 | 0x00100000, aSig1, 11, &aSig0, &aSig1 );
- shortShift64Left( bSig0 | 0x00100000, bSig1, 11, &bSig0, &bSig1 );
- if ( le64( bSig0, bSig1, aSig0, aSig1 ) ) {
- shift64Right( aSig0, aSig1, 1, &aSig0, &aSig1 );
- ++zExp;
- }
- zSig0 = estimateDiv64To32( aSig0, aSig1, bSig0 );
- mul64By32To96( bSig0, bSig1, zSig0, &term0, &term1, &term2 );
- sub96( aSig0, aSig1, 0, term0, term1, term2, &rem0, &rem1, &rem2 );
- while ( (sbits32) rem0 < 0 ) {
- --zSig0;
- add96( rem0, rem1, rem2, 0, bSig0, bSig1, &rem0, &rem1, &rem2 );
- }
- zSig1 = estimateDiv64To32( rem1, rem2, bSig0 );
- if ( ( zSig1 & 0x3FF ) <= 4 ) {
- mul64By32To96( bSig0, bSig1, zSig1, &term1, &term2, &term3 );
- sub96( rem1, rem2, 0, term1, term2, term3, &rem1, &rem2, &rem3 );
- while ( (sbits32) rem1 < 0 ) {
- --zSig1;
- add96( rem1, rem2, rem3, 0, bSig0, bSig1, &rem1, &rem2, &rem3 );
- }
- zSig1 |= ( ( rem1 | rem2 | rem3 ) != 0 );
- }
- shift64ExtraRightJamming( zSig0, zSig1, 0, 11, &zSig0, &zSig1, &zSig2 );
- return roundAndPackFloat64( zSign, zExp, zSig0, zSig1, zSig2 );
-
-}
-
-#ifndef SOFTFLOAT_FOR_GCC
-/*
--------------------------------------------------------------------------------
-Returns the remainder of the double-precision floating-point value `a'
-with respect to the corresponding value `b'. The operation is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float64_rem( float64 a, float64 b )
-{
- flag aSign, bSign, zSign;
- int16 aExp, bExp, expDiff;
- bits32 aSig0, aSig1, bSig0, bSig1, q, term0, term1, term2;
- bits32 allZero, alternateASig0, alternateASig1, sigMean1;
- sbits32 sigMean0;
- float64 z;
-
- aSig1 = extractFloat64Frac1( a );
- aSig0 = extractFloat64Frac0( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- bSig1 = extractFloat64Frac1( b );
- bSig0 = extractFloat64Frac0( b );
- bExp = extractFloat64Exp( b );
- bSign = extractFloat64Sign( b );
- if ( aExp == 0x7FF ) {
- if ( ( aSig0 | aSig1 )
- || ( ( bExp == 0x7FF ) && ( bSig0 | bSig1 ) ) ) {
- return propagateFloat64NaN( a, b );
- }
- goto invalid;
- }
- if ( bExp == 0x7FF ) {
- if ( bSig0 | bSig1 ) return propagateFloat64NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) {
- if ( ( bSig0 | bSig1 ) == 0 ) {
- invalid:
- float_raise( float_flag_invalid );
- return float64_default_nan;
- }
- normalizeFloat64Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 );
- }
- if ( aExp == 0 ) {
- if ( ( aSig0 | aSig1 ) == 0 ) return a;
- normalizeFloat64Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );
- }
- expDiff = aExp - bExp;
- if ( expDiff < -1 ) return a;
- shortShift64Left(
- aSig0 | 0x00100000, aSig1, 11 - ( expDiff < 0 ), &aSig0, &aSig1 );
- shortShift64Left( bSig0 | 0x00100000, bSig1, 11, &bSig0, &bSig1 );
- q = le64( bSig0, bSig1, aSig0, aSig1 );
- if ( q ) sub64( aSig0, aSig1, bSig0, bSig1, &aSig0, &aSig1 );
- expDiff -= 32;
- while ( 0 < expDiff ) {
- q = estimateDiv64To32( aSig0, aSig1, bSig0 );
- q = ( 4 < q ) ? q - 4 : 0;
- mul64By32To96( bSig0, bSig1, q, &term0, &term1, &term2 );
- shortShift96Left( term0, term1, term2, 29, &term1, &term2, &allZero );
- shortShift64Left( aSig0, aSig1, 29, &aSig0, &allZero );
- sub64( aSig0, 0, term1, term2, &aSig0, &aSig1 );
- expDiff -= 29;
- }
- if ( -32 < expDiff ) {
- q = estimateDiv64To32( aSig0, aSig1, bSig0 );
- q = ( 4 < q ) ? q - 4 : 0;
- q >>= - expDiff;
- shift64Right( bSig0, bSig1, 8, &bSig0, &bSig1 );
- expDiff += 24;
- if ( expDiff < 0 ) {
- shift64Right( aSig0, aSig1, - expDiff, &aSig0, &aSig1 );
- }
- else {
- shortShift64Left( aSig0, aSig1, expDiff, &aSig0, &aSig1 );
- }
- mul64By32To96( bSig0, bSig1, q, &term0, &term1, &term2 );
- sub64( aSig0, aSig1, term1, term2, &aSig0, &aSig1 );
- }
- else {
- shift64Right( aSig0, aSig1, 8, &aSig0, &aSig1 );
- shift64Right( bSig0, bSig1, 8, &bSig0, &bSig1 );
- }
- do {
- alternateASig0 = aSig0;
- alternateASig1 = aSig1;
- ++q;
- sub64( aSig0, aSig1, bSig0, bSig1, &aSig0, &aSig1 );
- } while ( 0 <= (sbits32) aSig0 );
- add64(
- aSig0, aSig1, alternateASig0, alternateASig1, &sigMean0, &sigMean1 );
- if ( ( sigMean0 < 0 )
- || ( ( ( sigMean0 | sigMean1 ) == 0 ) && ( q & 1 ) ) ) {
- aSig0 = alternateASig0;
- aSig1 = alternateASig1;
- }
- zSign = ( (sbits32) aSig0 < 0 );
- if ( zSign ) sub64( 0, 0, aSig0, aSig1, &aSig0, &aSig1 );
- return
- normalizeRoundAndPackFloat64( aSign ^ zSign, bExp - 4, aSig0, aSig1 );
-
-}
-#endif
-
-#ifndef SOFTFLOAT_FOR_GCC
-/*
--------------------------------------------------------------------------------
-Returns the square root of the double-precision floating-point value `a'.
-The operation is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float64_sqrt( float64 a )
-{
- flag aSign;
- int16 aExp, zExp;
- bits32 aSig0, aSig1, zSig0, zSig1, zSig2, doubleZSig0;
- bits32 rem0, rem1, rem2, rem3, term0, term1, term2, term3;
- float64 z;
-
- aSig1 = extractFloat64Frac1( a );
- aSig0 = extractFloat64Frac0( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- if ( aExp == 0x7FF ) {
- if ( aSig0 | aSig1 ) return propagateFloat64NaN( a, a );
- if ( ! aSign ) return a;
- goto invalid;
- }
- if ( aSign ) {
- if ( ( aExp | aSig0 | aSig1 ) == 0 ) return a;
- invalid:
- float_raise( float_flag_invalid );
- return float64_default_nan;
- }
- if ( aExp == 0 ) {
- if ( ( aSig0 | aSig1 ) == 0 ) return packFloat64( 0, 0, 0, 0 );
- normalizeFloat64Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );
- }
- zExp = ( ( aExp - 0x3FF )>>1 ) + 0x3FE;
- aSig0 |= 0x00100000;
- shortShift64Left( aSig0, aSig1, 11, &term0, &term1 );
- zSig0 = ( estimateSqrt32( aExp, term0 )>>1 ) + 1;
- if ( zSig0 == 0 ) zSig0 = 0x7FFFFFFF;
- doubleZSig0 = zSig0 + zSig0;
- shortShift64Left( aSig0, aSig1, 9 - ( aExp & 1 ), &aSig0, &aSig1 );
- mul32To64( zSig0, zSig0, &term0, &term1 );
- sub64( aSig0, aSig1, term0, term1, &rem0, &rem1 );
- while ( (sbits32) rem0 < 0 ) {
- --zSig0;
- doubleZSig0 -= 2;
- add64( rem0, rem1, 0, doubleZSig0 | 1, &rem0, &rem1 );
- }
- zSig1 = estimateDiv64To32( rem1, 0, doubleZSig0 );
- if ( ( zSig1 & 0x1FF ) <= 5 ) {
- if ( zSig1 == 0 ) zSig1 = 1;
- mul32To64( doubleZSig0, zSig1, &term1, &term2 );
- sub64( rem1, 0, term1, term2, &rem1, &rem2 );
- mul32To64( zSig1, zSig1, &term2, &term3 );
- sub96( rem1, rem2, 0, 0, term2, term3, &rem1, &rem2, &rem3 );
- while ( (sbits32) rem1 < 0 ) {
- --zSig1;
- shortShift64Left( 0, zSig1, 1, &term2, &term3 );
- term3 |= 1;
- term2 |= doubleZSig0;
- add96( rem1, rem2, rem3, 0, term2, term3, &rem1, &rem2, &rem3 );
- }
- zSig1 |= ( ( rem1 | rem2 | rem3 ) != 0 );
- }
- shift64ExtraRightJamming( zSig0, zSig1, 0, 10, &zSig0, &zSig1, &zSig2 );
- return roundAndPackFloat64( 0, zExp, zSig0, zSig1, zSig2 );
-
-}
-#endif
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the double-precision floating-point value `a' is equal to
-the corresponding value `b', and 0 otherwise. The comparison is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float64_eq( float64 a, float64 b )
-{
-
- if ( ( ( extractFloat64Exp( a ) == 0x7FF )
- && ( extractFloat64Frac0( a ) | extractFloat64Frac1( a ) ) )
- || ( ( extractFloat64Exp( b ) == 0x7FF )
- && ( extractFloat64Frac0( b ) | extractFloat64Frac1( b ) ) )
- ) {
- if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- return ( a == b ) ||
- ( (bits64) ( ( FLOAT64_DEMANGLE(a) | FLOAT64_DEMANGLE(b) )<<1 ) == 0 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the double-precision floating-point value `a' is less than
-or equal to the corresponding value `b', and 0 otherwise. The comparison
-is performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float64_le( float64 a, float64 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat64Exp( a ) == 0x7FF )
- && ( extractFloat64Frac0( a ) | extractFloat64Frac1( a ) ) )
- || ( ( extractFloat64Exp( b ) == 0x7FF )
- && ( extractFloat64Frac0( b ) | extractFloat64Frac1( b ) ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- aSign = extractFloat64Sign( a );
- bSign = extractFloat64Sign( b );
- if ( aSign != bSign )
- return aSign ||
- ( (bits64) ( ( FLOAT64_DEMANGLE(a) | FLOAT64_DEMANGLE(b) )<<1 ) ==
- 0 );
- return ( a == b ) ||
- ( aSign ^ ( FLOAT64_DEMANGLE(a) < FLOAT64_DEMANGLE(b) ) );
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the double-precision floating-point value `a' is less than
-the corresponding value `b', and 0 otherwise. The comparison is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float64_lt( float64 a, float64 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat64Exp( a ) == 0x7FF )
- && ( extractFloat64Frac0( a ) | extractFloat64Frac1( a ) ) )
- || ( ( extractFloat64Exp( b ) == 0x7FF )
- && ( extractFloat64Frac0( b ) | extractFloat64Frac1( b ) ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- aSign = extractFloat64Sign( a );
- bSign = extractFloat64Sign( b );
- if ( aSign != bSign )
- return aSign &&
- ( (bits64) ( ( FLOAT64_DEMANGLE(a) | FLOAT64_DEMANGLE(b) )<<1 ) !=
- 0 );
- return ( a != b ) &&
- ( aSign ^ ( FLOAT64_DEMANGLE(a) < FLOAT64_DEMANGLE(b) ) );
-
-}
-
-#ifndef SOFTFLOAT_FOR_GCC
-/*
--------------------------------------------------------------------------------
-Returns 1 if the double-precision floating-point value `a' is equal to
-the corresponding value `b', and 0 otherwise. The invalid exception is
-raised if either operand is a NaN. Otherwise, the comparison is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float64_eq_signaling( float64 a, float64 b )
-{
-
- if ( ( ( extractFloat64Exp( a ) == 0x7FF )
- && ( extractFloat64Frac0( a ) | extractFloat64Frac1( a ) ) )
- || ( ( extractFloat64Exp( b ) == 0x7FF )
- && ( extractFloat64Frac0( b ) | extractFloat64Frac1( b ) ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- return ( a == b ) || ( (bits64) ( ( a | b )<<1 ) == 0 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the double-precision floating-point value `a' is less than or
-equal to the corresponding value `b', and 0 otherwise. Quiet NaNs do not
-cause an exception. Otherwise, the comparison is performed according to the
-IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float64_le_quiet( float64 a, float64 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat64Exp( a ) == 0x7FF )
- && ( extractFloat64Frac0( a ) | extractFloat64Frac1( a ) ) )
- || ( ( extractFloat64Exp( b ) == 0x7FF )
- && ( extractFloat64Frac0( b ) | extractFloat64Frac1( b ) ) )
- ) {
- if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- aSign = extractFloat64Sign( a );
- bSign = extractFloat64Sign( b );
- if ( aSign != bSign ) return aSign || ( (bits64) ( ( a | b )<<1 ) == 0 );
- return ( a == b ) || ( aSign ^ ( a < b ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the double-precision floating-point value `a' is less than
-the corresponding value `b', and 0 otherwise. Quiet NaNs do not cause an
-exception. Otherwise, the comparison is performed according to the IEC/IEEE
-Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float64_lt_quiet( float64 a, float64 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat64Exp( a ) == 0x7FF )
- && ( extractFloat64Frac0( a ) | extractFloat64Frac1( a ) ) )
- || ( ( extractFloat64Exp( b ) == 0x7FF )
- && ( extractFloat64Frac0( b ) | extractFloat64Frac1( b ) ) )
- ) {
- if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- aSign = extractFloat64Sign( a );
- bSign = extractFloat64Sign( b );
- if ( aSign != bSign ) return aSign && ( (bits64) ( ( a | b )<<1 ) != 0 );
- return ( a != b ) && ( aSign ^ ( a < b ) );
-
-}
-
-#endif
diff --git a/StdLib/LibC/Softfloat/bits64/softfloat-macros b/StdLib/LibC/Softfloat/bits64/softfloat-macros
deleted file mode 100644
index 12ab441f01..0000000000
--- a/StdLib/LibC/Softfloat/bits64/softfloat-macros
+++ /dev/null
@@ -1,745 +0,0 @@
-/* $NetBSD: softfloat-macros,v 1.3 2012/03/21 02:32:26 christos Exp $ */
-
-/*
-===============================================================================
-
-This C source fragment is part of the SoftFloat IEC/IEEE Floating-point
-Arithmetic Package, Release 2a.
-
-Written by John R. Hauser. This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704. Funding was partially provided by the
-National Science Foundation under grant MIP-9311980. The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-/*
--------------------------------------------------------------------------------
-Shifts `a' right by the number of bits given in `count'. If any nonzero
-bits are shifted off, they are ``jammed'' into the least significant bit of
-the result by setting the least significant bit to 1. The value of `count'
-can be arbitrarily large; in particular, if `count' is greater than 32, the
-result will be either 0 or 1, depending on whether `a' is zero or nonzero.
-The result is stored in the location pointed to by `zPtr'.
--------------------------------------------------------------------------------
-*/
-INLINE void shift32RightJamming( bits32 a, int16 count, bits32 *zPtr )
-{
- bits32 z;
-
- if ( count == 0 ) {
- z = a;
- }
- else if ( count < 32 ) {
- z = ( a>>count ) | ( ( a<<( ( - count ) & 31 ) ) != 0 );
- }
- else {
- z = ( a != 0 );
- }
- *zPtr = z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Shifts `a' right by the number of bits given in `count'. If any nonzero
-bits are shifted off, they are ``jammed'' into the least significant bit of
-the result by setting the least significant bit to 1. The value of `count'
-can be arbitrarily large; in particular, if `count' is greater than 64, the
-result will be either 0 or 1, depending on whether `a' is zero or nonzero.
-The result is stored in the location pointed to by `zPtr'.
--------------------------------------------------------------------------------
-*/
-INLINE void shift64RightJamming( bits64 a, int16 count, bits64 *zPtr )
-{
- bits64 z;
-
- if ( count == 0 ) {
- z = a;
- }
- else if ( count < 64 ) {
- z = ( a>>count ) | ( ( a<<( ( - count ) & 63 ) ) != 0 );
- }
- else {
- z = ( a != 0 );
- }
- *zPtr = z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Shifts the 128-bit value formed by concatenating `a0' and `a1' right by 64
-_plus_ the number of bits given in `count'. The shifted result is at most
-64 nonzero bits; this is stored at the location pointed to by `z0Ptr'. The
-bits shifted off form a second 64-bit result as follows: The _last_ bit
-shifted off is the most-significant bit of the extra result, and the other
-63 bits of the extra result are all zero if and only if _all_but_the_last_
-bits shifted off were all zero. This extra result is stored in the location
-pointed to by `z1Ptr'. The value of `count' can be arbitrarily large.
- (This routine makes more sense if `a0' and `a1' are considered to form a
-fixed-point value with binary point between `a0' and `a1'. This fixed-point
-value is shifted right by the number of bits given in `count', and the
-integer part of the result is returned at the location pointed to by
-`z0Ptr'. The fractional part of the result may be slightly corrupted as
-described above, and is returned at the location pointed to by `z1Ptr'.)
--------------------------------------------------------------------------------
-*/
-INLINE void
- shift64ExtraRightJamming(
- bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr )
-{
- bits64 z0, z1;
- int8 negCount = ( - count ) & 63;
-
- if ( count == 0 ) {
- z1 = a1;
- z0 = a0;
- }
- else if ( count < 64 ) {
- z1 = ( a0<<negCount ) | ( a1 != 0 );
- z0 = a0>>count;
- }
- else {
- if ( count == 64 ) {
- z1 = a0 | ( a1 != 0 );
- }
- else {
- z1 = ( ( a0 | a1 ) != 0 );
- }
- z0 = 0;
- }
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Shifts the 128-bit value formed by concatenating `a0' and `a1' right by the
-number of bits given in `count'. Any bits shifted off are lost. The value
-of `count' can be arbitrarily large; in particular, if `count' is greater
-than 128, the result will be 0. The result is broken into two 64-bit pieces
-which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- shift128Right(
- bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr )
-{
- bits64 z0, z1;
- int8 negCount = ( - count ) & 63;
-
- if ( count == 0 ) {
- z1 = a1;
- z0 = a0;
- }
- else if ( count < 64 ) {
- z1 = ( a0<<negCount ) | ( a1>>count );
- z0 = a0>>count;
- }
- else {
- z1 = ( count < 64 ) ? ( a0>>( count & 63 ) ) : 0;
- z0 = 0;
- }
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Shifts the 128-bit value formed by concatenating `a0' and `a1' right by the
-number of bits given in `count'. If any nonzero bits are shifted off, they
-are ``jammed'' into the least significant bit of the result by setting the
-least significant bit to 1. The value of `count' can be arbitrarily large;
-in particular, if `count' is greater than 128, the result will be either
-0 or 1, depending on whether the concatenation of `a0' and `a1' is zero or
-nonzero. The result is broken into two 64-bit pieces which are stored at
-the locations pointed to by `z0Ptr' and `z1Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- shift128RightJamming(
- bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr )
-{
- bits64 z0, z1;
- int8 negCount = ( - count ) & 63;
-
- if ( count == 0 ) {
- z1 = a1;
- z0 = a0;
- }
- else if ( count < 64 ) {
- z1 = ( a0<<negCount ) | ( a1>>count ) | ( ( a1<<negCount ) != 0 );
- z0 = a0>>count;
- }
- else {
- if ( count == 64 ) {
- z1 = a0 | ( a1 != 0 );
- }
- else if ( count < 128 ) {
- z1 = ( a0>>( count & 63 ) ) | ( ( ( a0<<negCount ) | a1 ) != 0 );
- }
- else {
- z1 = ( ( a0 | a1 ) != 0 );
- }
- z0 = 0;
- }
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Shifts the 192-bit value formed by concatenating `a0', `a1', and `a2' right
-by 64 _plus_ the number of bits given in `count'. The shifted result is
-at most 128 nonzero bits; these are broken into two 64-bit pieces which are
-stored at the locations pointed to by `z0Ptr' and `z1Ptr'. The bits shifted
-off form a third 64-bit result as follows: The _last_ bit shifted off is
-the most-significant bit of the extra result, and the other 63 bits of the
-extra result are all zero if and only if _all_but_the_last_ bits shifted off
-were all zero. This extra result is stored in the location pointed to by
-`z2Ptr'. The value of `count' can be arbitrarily large.
- (This routine makes more sense if `a0', `a1', and `a2' are considered
-to form a fixed-point value with binary point between `a1' and `a2'. This
-fixed-point value is shifted right by the number of bits given in `count',
-and the integer part of the result is returned at the locations pointed to
-by `z0Ptr' and `z1Ptr'. The fractional part of the result may be slightly
-corrupted as described above, and is returned at the location pointed to by
-`z2Ptr'.)
--------------------------------------------------------------------------------
-*/
-INLINE void
- shift128ExtraRightJamming(
- bits64 a0,
- bits64 a1,
- bits64 a2,
- int16 count,
- bits64 *z0Ptr,
- bits64 *z1Ptr,
- bits64 *z2Ptr
- )
-{
- bits64 z0, z1, z2;
- int8 negCount = ( - count ) & 63;
-
- if ( count == 0 ) {
- z2 = a2;
- z1 = a1;
- z0 = a0;
- }
- else {
- if ( count < 64 ) {
- z2 = a1<<negCount;
- z1 = ( a0<<negCount ) | ( a1>>count );
- z0 = a0>>count;
- }
- else {
- if ( count == 64 ) {
- z2 = a1;
- z1 = a0;
- }
- else {
- a2 |= a1;
- if ( count < 128 ) {
- z2 = a0<<negCount;
- z1 = a0>>( count & 63 );
- }
- else {
- z2 = ( count == 128 ) ? a0 : ( a0 != 0 );
- z1 = 0;
- }
- }
- z0 = 0;
- }
- z2 |= ( a2 != 0 );
- }
- *z2Ptr = z2;
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Shifts the 128-bit value formed by concatenating `a0' and `a1' left by the
-number of bits given in `count'. Any bits shifted off are lost. The value
-of `count' must be less than 64. The result is broken into two 64-bit
-pieces which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- shortShift128Left(
- bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr )
-{
-
- *z1Ptr = a1<<count;
- *z0Ptr =
- ( count == 0 ) ? a0 : ( a0<<count ) | ( a1>>( ( - count ) & 63 ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Shifts the 192-bit value formed by concatenating `a0', `a1', and `a2' left
-by the number of bits given in `count'. Any bits shifted off are lost.
-The value of `count' must be less than 64. The result is broken into three
-64-bit pieces which are stored at the locations pointed to by `z0Ptr',
-`z1Ptr', and `z2Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- shortShift192Left(
- bits64 a0,
- bits64 a1,
- bits64 a2,
- int16 count,
- bits64 *z0Ptr,
- bits64 *z1Ptr,
- bits64 *z2Ptr
- )
-{
- bits64 z0, z1, z2;
- int8 negCount;
-
- z2 = a2<<count;
- z1 = a1<<count;
- z0 = a0<<count;
- if ( 0 < count ) {
- negCount = ( ( - count ) & 63 );
- z1 |= a2>>negCount;
- z0 |= a1>>negCount;
- }
- *z2Ptr = z2;
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Adds the 128-bit value formed by concatenating `a0' and `a1' to the 128-bit
-value formed by concatenating `b0' and `b1'. Addition is modulo 2^128, so
-any carry out is lost. The result is broken into two 64-bit pieces which
-are stored at the locations pointed to by `z0Ptr' and `z1Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- add128(
- bits64 a0, bits64 a1, bits64 b0, bits64 b1, bits64 *z0Ptr, bits64 *z1Ptr )
-{
- bits64 z1;
-
- z1 = a1 + b1;
- *z1Ptr = z1;
- *z0Ptr = a0 + b0 + ( z1 < a1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Adds the 192-bit value formed by concatenating `a0', `a1', and `a2' to the
-192-bit value formed by concatenating `b0', `b1', and `b2'. Addition is
-modulo 2^192, so any carry out is lost. The result is broken into three
-64-bit pieces which are stored at the locations pointed to by `z0Ptr',
-`z1Ptr', and `z2Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- add192(
- bits64 a0,
- bits64 a1,
- bits64 a2,
- bits64 b0,
- bits64 b1,
- bits64 b2,
- bits64 *z0Ptr,
- bits64 *z1Ptr,
- bits64 *z2Ptr
- )
-{
- bits64 z0, z1, z2;
- int8 carry0, carry1;
-
- z2 = a2 + b2;
- carry1 = ( z2 < a2 );
- z1 = a1 + b1;
- carry0 = ( z1 < a1 );
- z0 = a0 + b0;
- z1 += carry1;
- z0 += ( z1 < (bits64)carry1 );
- z0 += carry0;
- *z2Ptr = z2;
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Subtracts the 128-bit value formed by concatenating `b0' and `b1' from the
-128-bit value formed by concatenating `a0' and `a1'. Subtraction is modulo
-2^128, so any borrow out (carry out) is lost. The result is broken into two
-64-bit pieces which are stored at the locations pointed to by `z0Ptr' and
-`z1Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- sub128(
- bits64 a0, bits64 a1, bits64 b0, bits64 b1, bits64 *z0Ptr, bits64 *z1Ptr )
-{
-
- *z1Ptr = a1 - b1;
- *z0Ptr = a0 - b0 - ( a1 < b1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Subtracts the 192-bit value formed by concatenating `b0', `b1', and `b2'
-from the 192-bit value formed by concatenating `a0', `a1', and `a2'.
-Subtraction is modulo 2^192, so any borrow out (carry out) is lost. The
-result is broken into three 64-bit pieces which are stored at the locations
-pointed to by `z0Ptr', `z1Ptr', and `z2Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- sub192(
- bits64 a0,
- bits64 a1,
- bits64 a2,
- bits64 b0,
- bits64 b1,
- bits64 b2,
- bits64 *z0Ptr,
- bits64 *z1Ptr,
- bits64 *z2Ptr
- )
-{
- bits64 z0, z1, z2;
- int8 borrow0, borrow1;
-
- z2 = a2 - b2;
- borrow1 = ( a2 < b2 );
- z1 = a1 - b1;
- borrow0 = ( a1 < b1 );
- z0 = a0 - b0;
- z0 -= ( z1 < (bits64)borrow1 );
- z1 -= borrow1;
- z0 -= borrow0;
- *z2Ptr = z2;
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Multiplies `a' by `b' to obtain a 128-bit product. The product is broken
-into two 64-bit pieces which are stored at the locations pointed to by
-`z0Ptr' and `z1Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void mul64To128( bits64 a, bits64 b, bits64 *z0Ptr, bits64 *z1Ptr )
-{
- bits32 aHigh, aLow, bHigh, bLow;
- bits64 z0, zMiddleA, zMiddleB, z1;
-
- aLow = (bits32)a;
- aHigh = (bits32)(a>>32);
- bLow = (bits32)b;
- bHigh = (bits32)(b>>32);
- z1 = ( (bits64) aLow ) * bLow;
- zMiddleA = ( (bits64) aLow ) * bHigh;
- zMiddleB = ( (bits64) aHigh ) * bLow;
- z0 = ( (bits64) aHigh ) * bHigh;
- zMiddleA += zMiddleB;
- z0 += ( ( (bits64) ( zMiddleA < zMiddleB ) )<<32 ) + ( zMiddleA>>32 );
- zMiddleA <<= 32;
- z1 += zMiddleA;
- z0 += ( z1 < zMiddleA );
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Multiplies the 128-bit value formed by concatenating `a0' and `a1' by
-`b' to obtain a 192-bit product. The product is broken into three 64-bit
-pieces which are stored at the locations pointed to by `z0Ptr', `z1Ptr', and
-`z2Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- mul128By64To192(
- bits64 a0,
- bits64 a1,
- bits64 b,
- bits64 *z0Ptr,
- bits64 *z1Ptr,
- bits64 *z2Ptr
- )
-{
- bits64 z0, z1, z2, more1;
-
- mul64To128( a1, b, &z1, &z2 );
- mul64To128( a0, b, &z0, &more1 );
- add128( z0, more1, 0, z1, &z0, &z1 );
- *z2Ptr = z2;
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Multiplies the 128-bit value formed by concatenating `a0' and `a1' to the
-128-bit value formed by concatenating `b0' and `b1' to obtain a 256-bit
-product. The product is broken into four 64-bit pieces which are stored at
-the locations pointed to by `z0Ptr', `z1Ptr', `z2Ptr', and `z3Ptr'.
--------------------------------------------------------------------------------
-*/
-INLINE void
- mul128To256(
- bits64 a0,
- bits64 a1,
- bits64 b0,
- bits64 b1,
- bits64 *z0Ptr,
- bits64 *z1Ptr,
- bits64 *z2Ptr,
- bits64 *z3Ptr
- )
-{
- bits64 z0, z1, z2, z3;
- bits64 more1, more2;
-
- mul64To128( a1, b1, &z2, &z3 );
- mul64To128( a1, b0, &z1, &more2 );
- add128( z1, more2, 0, z2, &z1, &z2 );
- mul64To128( a0, b0, &z0, &more1 );
- add128( z0, more1, 0, z1, &z0, &z1 );
- mul64To128( a0, b1, &more1, &more2 );
- add128( more1, more2, 0, z2, &more1, &z2 );
- add128( z0, z1, 0, more1, &z0, &z1 );
- *z3Ptr = z3;
- *z2Ptr = z2;
- *z1Ptr = z1;
- *z0Ptr = z0;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns an approximation to the 64-bit integer quotient obtained by dividing
-`b' into the 128-bit value formed by concatenating `a0' and `a1'. The
-divisor `b' must be at least 2^63. If q is the exact quotient truncated
-toward zero, the approximation returned lies between q and q + 2 inclusive.
-If the exact quotient q is larger than 64 bits, the maximum positive 64-bit
-unsigned integer is returned.
--------------------------------------------------------------------------------
-*/
-static bits64 estimateDiv128To64( bits64 a0, bits64 a1, bits64 b )
-{
- bits64 b0, b1;
- bits64 rem0, rem1, term0, term1;
- bits64 z;
-
- if ( b <= a0 ) return LIT64( 0xFFFFFFFFFFFFFFFF );
- b0 = b>>32;
- z = ( b0<<32 <= a0 ) ? LIT64( 0xFFFFFFFF00000000 ) : ( a0 / b0 )<<32;
- mul64To128( b, z, &term0, &term1 );
- sub128( a0, a1, term0, term1, &rem0, &rem1 );
- while ( ( (sbits64) rem0 ) < 0 ) {
- z -= LIT64( 0x100000000 );
- b1 = b<<32;
- add128( rem0, rem1, b0, b1, &rem0, &rem1 );
- }
- rem0 = ( rem0<<32 ) | ( rem1>>32 );
- z |= ( b0<<32 <= rem0 ) ? 0xFFFFFFFF : rem0 / b0;
- return z;
-
-}
-
-#if !defined(SOFTFLOAT_FOR_GCC) || defined(FLOATX80) || defined(FLOAT128)
-/*
--------------------------------------------------------------------------------
-Returns an approximation to the square root of the 32-bit significand given
-by `a'. Considered as an integer, `a' must be at least 2^31. If bit 0 of
-`aExp' (the least significant bit) is 1, the integer returned approximates
-2^31*sqrt(`a'/2^31), where `a' is considered an integer. If bit 0 of `aExp'
-is 0, the integer returned approximates 2^31*sqrt(`a'/2^30). In either
-case, the approximation returned lies strictly within +/-2 of the exact
-value.
--------------------------------------------------------------------------------
-*/
-static bits32 estimateSqrt32( int16 aExp, bits32 a )
-{
- static const bits16 sqrtOddAdjustments[] = {
- 0x0004, 0x0022, 0x005D, 0x00B1, 0x011D, 0x019F, 0x0236, 0x02E0,
- 0x039C, 0x0468, 0x0545, 0x0631, 0x072B, 0x0832, 0x0946, 0x0A67
- };
- static const bits16 sqrtEvenAdjustments[] = {
- 0x0A2D, 0x08AF, 0x075A, 0x0629, 0x051A, 0x0429, 0x0356, 0x029E,
- 0x0200, 0x0179, 0x0109, 0x00AF, 0x0068, 0x0034, 0x0012, 0x0002
- };
- int8 idx;
- bits32 z;
-
- idx = ( a>>27 ) & 15;
- if ( aExp & 1 ) {
- z = 0x4000 + ( a>>17 ) - sqrtOddAdjustments[ idx ];
- z = ( ( a / z )<<14 ) + ( z<<15 );
- a >>= 1;
- }
- else {
- z = 0x8000 + ( a>>17 ) - sqrtEvenAdjustments[ idx ];
- z = a / z + z;
- z = ( 0x20000 <= z ) ? 0xFFFF8000 : ( z<<15 );
- if ( z <= a ) return (bits32) ( ( (bits32) a )>>1 );
- }
- return ( (bits32) ( ( ( (bits64) a )<<31 ) / z ) ) + ( z>>1 );
-
-}
-#endif
-
-/*
--------------------------------------------------------------------------------
-Returns the number of leading 0 bits before the most-significant 1 bit of
-`a'. If `a' is zero, 32 is returned.
--------------------------------------------------------------------------------
-*/
-static int8 countLeadingZeros32( bits32 a )
-{
- static const int8 countLeadingZerosHigh[] = {
- 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- };
- int8 shiftCount;
-
- shiftCount = 0;
- if ( a < 0x10000 ) {
- shiftCount += 16;
- a <<= 16;
- }
- if ( a < 0x1000000 ) {
- shiftCount += 8;
- a <<= 8;
- }
- shiftCount += countLeadingZerosHigh[ a>>24 ];
- return shiftCount;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the number of leading 0 bits before the most-significant 1 bit of
-`a'. If `a' is zero, 64 is returned.
--------------------------------------------------------------------------------
-*/
-static int8 countLeadingZeros64( bits64 a )
-{
- int8 shiftCount;
-
- shiftCount = 0;
- if ( a < ( (bits64) 1 )<<32 ) {
- shiftCount += 32;
- }
- else {
- a >>= 32;
- }
- shiftCount += (int8)countLeadingZeros32( (bits32)a );
- return shiftCount;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the 128-bit value formed by concatenating `a0' and `a1'
-is equal to the 128-bit value formed by concatenating `b0' and `b1'.
-Otherwise, returns 0.
--------------------------------------------------------------------------------
-*/
-INLINE flag eq128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 )
-{
-
- return ( a0 == b0 ) && ( a1 == b1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the 128-bit value formed by concatenating `a0' and `a1' is less
-than or equal to the 128-bit value formed by concatenating `b0' and `b1'.
-Otherwise, returns 0.
--------------------------------------------------------------------------------
-*/
-INLINE flag le128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 )
-{
-
- return ( a0 < b0 ) || ( ( a0 == b0 ) && ( a1 <= b1 ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the 128-bit value formed by concatenating `a0' and `a1' is less
-than the 128-bit value formed by concatenating `b0' and `b1'. Otherwise,
-returns 0.
--------------------------------------------------------------------------------
-*/
-INLINE flag lt128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 )
-{
-
- return ( a0 < b0 ) || ( ( a0 == b0 ) && ( a1 < b1 ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the 128-bit value formed by concatenating `a0' and `a1' is
-not equal to the 128-bit value formed by concatenating `b0' and `b1'.
-Otherwise, returns 0.
--------------------------------------------------------------------------------
-*/
-INLINE flag ne128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 )
-{
-
- return ( a0 != b0 ) || ( a1 != b1 );
-
-}
-
diff --git a/StdLib/LibC/Softfloat/bits64/softfloat.c b/StdLib/LibC/Softfloat/bits64/softfloat.c
deleted file mode 100644
index e264dd1922..0000000000
--- a/StdLib/LibC/Softfloat/bits64/softfloat.c
+++ /dev/null
@@ -1,5602 +0,0 @@
-/* $NetBSD: softfloat.c,v 1.13 2013/11/22 17:04:24 martin Exp $ */
-
-/*
- * This version hacked for use with gcc -msoft-float by bjh21.
- * (Mostly a case of #ifdefing out things GCC doesn't need or provides
- * itself).
- */
-
-/*
- * Things you may want to define:
- *
- * SOFTFLOAT_FOR_GCC - build only those functions necessary for GCC (with
- * -msoft-float) to work. Include "softfloat-for-gcc.h" to get them
- * properly renamed.
- */
-
-/*
-===============================================================================
-
-This C source file is part of the SoftFloat IEC/IEEE Floating-point
-Arithmetic Package, Release 2a.
-
-Written by John R. Hauser. This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704. Funding was partially provided by the
-National Science Foundation under grant MIP-9311980. The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: softfloat.c,v 1.13 2013/11/22 17:04:24 martin Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#ifdef SOFTFLOAT_FOR_GCC
-#include "softfloat-for-gcc.h"
-#endif
-
-#include "milieu.h"
-#include "softfloat.h"
-
-/*
- * Conversions between floats as stored in memory and floats as
- * SoftFloat uses them
- */
-#ifndef FLOAT64_DEMANGLE
-#define FLOAT64_DEMANGLE(a) (a)
-#endif
-#ifndef FLOAT64_MANGLE
-#define FLOAT64_MANGLE(a) (a)
-#endif
-
-/*
--------------------------------------------------------------------------------
-Floating-point rounding mode, extended double-precision rounding precision,
-and exception flags.
--------------------------------------------------------------------------------
-*/
-#ifndef set_float_rounding_mode
-fp_rnd float_rounding_mode = float_round_nearest_even;
-fp_except float_exception_flags = 0;
-#endif
-#ifndef set_float_exception_inexact_flag
-#define set_float_exception_inexact_flag() \
- ((void)(float_exception_flags |= float_flag_inexact))
-#endif
-#ifdef FLOATX80
-int8 floatx80_rounding_precision = 80;
-#endif
-
-/*
--------------------------------------------------------------------------------
-Primitive arithmetic functions, including multi-word arithmetic, and
-division and square root approximations. (Can be specialized to target if
-desired.)
--------------------------------------------------------------------------------
-*/
-#include "softfloat-macros"
-
-/*
--------------------------------------------------------------------------------
-Functions and definitions to determine: (1) whether tininess for underflow
-is detected before or after rounding by default, (2) what (if anything)
-happens when exceptions are raised, (3) how signaling NaNs are distinguished
-from quiet NaNs, (4) the default generated quiet NaNs, and (5) how NaNs
-are propagated from function inputs to output. These details are target-
-specific.
--------------------------------------------------------------------------------
-*/
-#include "softfloat-specialize"
-
-#if !defined(SOFTFLOAT_FOR_GCC) || defined(FLOATX80) || defined(FLOAT128)
-/*
--------------------------------------------------------------------------------
-Takes a 64-bit fixed-point value `absZ' with binary point between bits 6
-and 7, and returns the properly rounded 32-bit integer corresponding to the
-input. If `zSign' is 1, the input is negated before being converted to an
-integer. Bit 63 of `absZ' must be zero. Ordinarily, the fixed-point input
-is simply rounded to an integer, with the inexact exception raised if the
-input cannot be represented exactly as an integer. However, if the fixed-
-point input is too large, the invalid exception is raised and the largest
-positive or negative integer is returned.
--------------------------------------------------------------------------------
-*/
-static int32 roundAndPackInt32( flag zSign, bits64 absZ )
-{
- int8 roundingMode;
- flag roundNearestEven;
- int8 roundIncrement, roundBits;
- int32 z;
-
- roundingMode = float_rounding_mode;
- roundNearestEven = ( roundingMode == float_round_nearest_even );
- roundIncrement = 0x40;
- if ( ! roundNearestEven ) {
- if ( roundingMode == float_round_to_zero ) {
- roundIncrement = 0;
- }
- else {
- roundIncrement = 0x7F;
- if ( zSign ) {
- if ( roundingMode == float_round_up ) roundIncrement = 0;
- }
- else {
- if ( roundingMode == float_round_down ) roundIncrement = 0;
- }
- }
- }
- roundBits = (int8)(absZ & 0x7F);
- absZ = ( absZ + roundIncrement )>>7;
- absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
- z = (int32)absZ;
- if ( zSign ) z = - z;
- if ( ( absZ>>32 ) || ( z && ( ( z < 0 ) ^ zSign ) ) ) {
- float_raise( float_flag_invalid );
- return zSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;
- }
- if ( roundBits ) set_float_exception_inexact_flag();
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes the 128-bit fixed-point value formed by concatenating `absZ0' and
-`absZ1', with binary point between bits 63 and 64 (between the input words),
-and returns the properly rounded 64-bit integer corresponding to the input.
-If `zSign' is 1, the input is negated before being converted to an integer.
-Ordinarily, the fixed-point input is simply rounded to an integer, with
-the inexact exception raised if the input cannot be represented exactly as
-an integer. However, if the fixed-point input is too large, the invalid
-exception is raised and the largest positive or negative integer is
-returned.
--------------------------------------------------------------------------------
-*/
-static int64 roundAndPackInt64( flag zSign, bits64 absZ0, bits64 absZ1 )
-{
- int8 roundingMode;
- flag roundNearestEven, increment;
- int64 z;
-
- roundingMode = float_rounding_mode;
- roundNearestEven = ( roundingMode == float_round_nearest_even );
- increment = ( (sbits64) absZ1 < 0 );
- if ( ! roundNearestEven ) {
- if ( roundingMode == float_round_to_zero ) {
- increment = 0;
- }
- else {
- if ( zSign ) {
- increment = ( roundingMode == float_round_down ) && absZ1;
- }
- else {
- increment = ( roundingMode == float_round_up ) && absZ1;
- }
- }
- }
- if ( increment ) {
- ++absZ0;
- if ( absZ0 == 0 ) goto overflow;
- absZ0 &= ~ ( ( (bits64) ( absZ1<<1 ) == 0 ) & roundNearestEven );
- }
- z = absZ0;
- if ( zSign ) z = - z;
- if ( z && ( ( z < 0 ) ^ zSign ) ) {
- overflow:
- float_raise( float_flag_invalid );
- return
- zSign ? (sbits64) LIT64( 0x8000000000000000 )
- : LIT64( 0x7FFFFFFFFFFFFFFF );
- }
- if ( absZ1 ) set_float_exception_inexact_flag();
- return z;
-
-}
-#endif
-
-/*
--------------------------------------------------------------------------------
-Returns the fraction bits of the single-precision floating-point value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE bits32 extractFloat32Frac( float32 a )
-{
-
- return a & 0x007FFFFF;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the exponent bits of the single-precision floating-point value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE int16 extractFloat32Exp( float32 a )
-{
-
- return ( a>>23 ) & 0xFF;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the sign bit of the single-precision floating-point value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE flag extractFloat32Sign( float32 a )
-{
-
- return a>>31;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Normalizes the subnormal single-precision floating-point value represented
-by the denormalized significand `aSig'. The normalized exponent and
-significand are stored at the locations pointed to by `zExpPtr' and
-`zSigPtr', respectively.
--------------------------------------------------------------------------------
-*/
-static void
- normalizeFloat32Subnormal( bits32 aSig, int16 *zExpPtr, bits32 *zSigPtr )
-{
- int8 shiftCount;
-
- shiftCount = countLeadingZeros32( aSig ) - 8;
- *zSigPtr = aSig<<shiftCount;
- *zExpPtr = 1 - shiftCount;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Packs the sign `zSign', exponent `zExp', and significand `zSig' into a
-single-precision floating-point value, returning the result. After being
-shifted into the proper positions, the three fields are simply added
-together to form the result. This means that any integer portion of `zSig'
-will be added into the exponent. Since a properly normalized significand
-will have an integer portion equal to 1, the `zExp' input should be 1 less
-than the desired result exponent whenever `zSig' is a complete, normalized
-significand.
--------------------------------------------------------------------------------
-*/
-INLINE float32 packFloat32( flag zSign, int16 zExp, bits32 zSig )
-{
-
- return ( ( (bits32) zSign )<<31 ) + ( ( (bits32) zExp )<<23 ) + zSig;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes an abstract floating-point value having sign `zSign', exponent `zExp',
-and significand `zSig', and returns the proper single-precision floating-
-point value corresponding to the abstract input. Ordinarily, the abstract
-value is simply rounded and packed into the single-precision format, with
-the inexact exception raised if the abstract input cannot be represented
-exactly. However, if the abstract value is too large, the overflow and
-inexact exceptions are raised and an infinity or maximal finite value is
-returned. If the abstract value is too small, the input value is rounded to
-a subnormal number, and the underflow and inexact exceptions are raised if
-the abstract input cannot be represented exactly as a subnormal single-
-precision floating-point number.
- The input significand `zSig' has its binary point between bits 30
-and 29, which is 7 bits to the left of the usual location. This shifted
-significand must be normalized or smaller. If `zSig' is not normalized,
-`zExp' must be 0; in that case, the result returned is a subnormal number,
-and it must not require rounding. In the usual case that `zSig' is
-normalized, `zExp' must be 1 less than the ``true'' floating-point exponent.
-The handling of underflow and overflow follows the IEC/IEEE Standard for
-Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static float32 roundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig )
-{
- int8 roundingMode;
- flag roundNearestEven;
- int8 roundIncrement, roundBits;
- flag isTiny;
-
- roundingMode = float_rounding_mode;
- roundNearestEven = ( roundingMode == float_round_nearest_even );
- roundIncrement = 0x40;
- if ( ! roundNearestEven ) {
- if ( roundingMode == float_round_to_zero ) {
- roundIncrement = 0;
- }
- else {
- roundIncrement = 0x7F;
- if ( zSign ) {
- if ( roundingMode == float_round_up ) roundIncrement = 0;
- }
- else {
- if ( roundingMode == float_round_down ) roundIncrement = 0;
- }
- }
- }
- roundBits = zSig & 0x7F;
- if ( 0xFD <= (bits16) zExp ) {
- if ( ( 0xFD < zExp )
- || ( ( zExp == 0xFD )
- && ( (sbits32) ( zSig + roundIncrement ) < 0 ) )
- ) {
- float_raise( float_flag_overflow | float_flag_inexact );
- return packFloat32( zSign, 0xFF, 0 ) - ( roundIncrement == 0 );
- }
- if ( zExp < 0 ) {
- isTiny =
- ( float_detect_tininess == float_tininess_before_rounding )
- || ( zExp < -1 )
- || ( zSig + roundIncrement < 0x80000000U );
- shift32RightJamming( zSig, - zExp, &zSig );
- zExp = 0;
- roundBits = zSig & 0x7F;
- if ( isTiny && roundBits ) float_raise( float_flag_underflow );
- }
- }
- if ( roundBits ) set_float_exception_inexact_flag();
- zSig = ( zSig + roundIncrement )>>7;
- zSig &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
- if ( zSig == 0 ) zExp = 0;
- return packFloat32( zSign, zExp, zSig );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes an abstract floating-point value having sign `zSign', exponent `zExp',
-and significand `zSig', and returns the proper single-precision floating-
-point value corresponding to the abstract input. This routine is just like
-`roundAndPackFloat32' except that `zSig' does not have to be normalized.
-Bit 31 of `zSig' must be zero, and `zExp' must be 1 less than the ``true''
-floating-point exponent.
--------------------------------------------------------------------------------
-*/
-static float32
- normalizeRoundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig )
-{
- int8 shiftCount;
-
- shiftCount = countLeadingZeros32( zSig ) - 1;
- return roundAndPackFloat32( zSign, zExp - shiftCount, zSig<<shiftCount );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the fraction bits of the double-precision floating-point value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE bits64 extractFloat64Frac( float64 a )
-{
-
- return FLOAT64_DEMANGLE(a) & LIT64( 0x000FFFFFFFFFFFFF );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the exponent bits of the double-precision floating-point value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE int16 extractFloat64Exp( float64 a )
-{
-
- return (int16)((FLOAT64_DEMANGLE(a) >> 52) & 0x7FF);
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the sign bit of the double-precision floating-point value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE flag extractFloat64Sign( float64 a )
-{
-
- return (flag)(FLOAT64_DEMANGLE(a) >> 63);
-
-}
-
-/*
--------------------------------------------------------------------------------
-Normalizes the subnormal double-precision floating-point value represented
-by the denormalized significand `aSig'. The normalized exponent and
-significand are stored at the locations pointed to by `zExpPtr' and
-`zSigPtr', respectively.
--------------------------------------------------------------------------------
-*/
-static void
- normalizeFloat64Subnormal( bits64 aSig, int16 *zExpPtr, bits64 *zSigPtr )
-{
- int8 shiftCount;
-
- shiftCount = countLeadingZeros64( aSig ) - 11;
- *zSigPtr = aSig<<shiftCount;
- *zExpPtr = 1 - shiftCount;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Packs the sign `zSign', exponent `zExp', and significand `zSig' into a
-double-precision floating-point value, returning the result. After being
-shifted into the proper positions, the three fields are simply added
-together to form the result. This means that any integer portion of `zSig'
-will be added into the exponent. Since a properly normalized significand
-will have an integer portion equal to 1, the `zExp' input should be 1 less
-than the desired result exponent whenever `zSig' is a complete, normalized
-significand.
--------------------------------------------------------------------------------
-*/
-INLINE float64 packFloat64( flag zSign, int16 zExp, bits64 zSig )
-{
-
- return FLOAT64_MANGLE( ( ( (bits64) zSign )<<63 ) +
- ( ( (bits64) zExp )<<52 ) + zSig );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes an abstract floating-point value having sign `zSign', exponent `zExp',
-and significand `zSig', and returns the proper double-precision floating-
-point value corresponding to the abstract input. Ordinarily, the abstract
-value is simply rounded and packed into the double-precision format, with
-the inexact exception raised if the abstract input cannot be represented
-exactly. However, if the abstract value is too large, the overflow and
-inexact exceptions are raised and an infinity or maximal finite value is
-returned. If the abstract value is too small, the input value is rounded to
-a subnormal number, and the underflow and inexact exceptions are raised if
-the abstract input cannot be represented exactly as a subnormal double-
-precision floating-point number.
- The input significand `zSig' has its binary point between bits 62
-and 61, which is 10 bits to the left of the usual location. This shifted
-significand must be normalized or smaller. If `zSig' is not normalized,
-`zExp' must be 0; in that case, the result returned is a subnormal number,
-and it must not require rounding. In the usual case that `zSig' is
-normalized, `zExp' must be 1 less than the ``true'' floating-point exponent.
-The handling of underflow and overflow follows the IEC/IEEE Standard for
-Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static float64 roundAndPackFloat64( flag zSign, int16 zExp, bits64 zSig )
-{
- int8 roundingMode;
- flag roundNearestEven;
- int16 roundIncrement, roundBits;
- flag isTiny;
-
- roundingMode = float_rounding_mode;
- roundNearestEven = ( roundingMode == float_round_nearest_even );
- roundIncrement = 0x200;
- if ( ! roundNearestEven ) {
- if ( roundingMode == float_round_to_zero ) {
- roundIncrement = 0;
- }
- else {
- roundIncrement = 0x3FF;
- if ( zSign ) {
- if ( roundingMode == float_round_up ) roundIncrement = 0;
- }
- else {
- if ( roundingMode == float_round_down ) roundIncrement = 0;
- }
- }
- }
- roundBits = (int16)(zSig & 0x3FF);
- if ( 0x7FD <= (bits16) zExp ) {
- if ( ( 0x7FD < zExp )
- || ( ( zExp == 0x7FD )
- && ( (sbits64) ( zSig + roundIncrement ) < 0 ) )
- ) {
- float_raise( float_flag_overflow | float_flag_inexact );
- return FLOAT64_MANGLE(
- FLOAT64_DEMANGLE(packFloat64( zSign, 0x7FF, 0 )) -
- ( roundIncrement == 0 ));
- }
- if ( zExp < 0 ) {
- isTiny =
- ( float_detect_tininess == float_tininess_before_rounding )
- || ( zExp < -1 )
- || ( zSig + roundIncrement < (bits64)LIT64( 0x8000000000000000 ) );
- shift64RightJamming( zSig, - zExp, &zSig );
- zExp = 0;
- roundBits = (int16)(zSig & 0x3FF);
- if ( isTiny && roundBits ) float_raise( float_flag_underflow );
- }
- }
- if ( roundBits ) set_float_exception_inexact_flag();
- zSig = ( zSig + roundIncrement )>>10;
- zSig &= ~ ( ( ( roundBits ^ 0x200 ) == 0 ) & roundNearestEven );
- if ( zSig == 0 ) zExp = 0;
- return packFloat64( zSign, zExp, zSig );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes an abstract floating-point value having sign `zSign', exponent `zExp',
-and significand `zSig', and returns the proper double-precision floating-
-point value corresponding to the abstract input. This routine is just like
-`roundAndPackFloat64' except that `zSig' does not have to be normalized.
-Bit 63 of `zSig' must be zero, and `zExp' must be 1 less than the ``true''
-floating-point exponent.
--------------------------------------------------------------------------------
-*/
-static float64
- normalizeRoundAndPackFloat64( flag zSign, int16 zExp, bits64 zSig )
-{
- int8 shiftCount;
-
- shiftCount = countLeadingZeros64( zSig ) - 1;
- return roundAndPackFloat64( zSign, zExp - shiftCount, zSig<<shiftCount );
-
-}
-
-#ifdef FLOATX80
-
-/*
--------------------------------------------------------------------------------
-Returns the fraction bits of the extended double-precision floating-point
-value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE bits64 extractFloatx80Frac( floatx80 a )
-{
-
- return a.low;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the exponent bits of the extended double-precision floating-point
-value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE int32 extractFloatx80Exp( floatx80 a )
-{
-
- return a.high & 0x7FFF;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the sign bit of the extended double-precision floating-point value
-`a'.
--------------------------------------------------------------------------------
-*/
-INLINE flag extractFloatx80Sign( floatx80 a )
-{
-
- return a.high>>15;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Normalizes the subnormal extended double-precision floating-point value
-represented by the denormalized significand `aSig'. The normalized exponent
-and significand are stored at the locations pointed to by `zExpPtr' and
-`zSigPtr', respectively.
--------------------------------------------------------------------------------
-*/
-static void
- normalizeFloatx80Subnormal( bits64 aSig, int32 *zExpPtr, bits64 *zSigPtr )
-{
- int8 shiftCount;
-
- shiftCount = countLeadingZeros64( aSig );
- *zSigPtr = aSig<<shiftCount;
- *zExpPtr = 1 - shiftCount;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Packs the sign `zSign', exponent `zExp', and significand `zSig' into an
-extended double-precision floating-point value, returning the result.
--------------------------------------------------------------------------------
-*/
-INLINE floatx80 packFloatx80( flag zSign, int32 zExp, bits64 zSig )
-{
- floatx80 z;
-
- z.low = zSig;
- z.high = ( ( (bits16) zSign )<<15 ) + zExp;
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes an abstract floating-point value having sign `zSign', exponent `zExp',
-and extended significand formed by the concatenation of `zSig0' and `zSig1',
-and returns the proper extended double-precision floating-point value
-corresponding to the abstract input. Ordinarily, the abstract value is
-rounded and packed into the extended double-precision format, with the
-inexact exception raised if the abstract input cannot be represented
-exactly. However, if the abstract value is too large, the overflow and
-inexact exceptions are raised and an infinity or maximal finite value is
-returned. If the abstract value is too small, the input value is rounded to
-a subnormal number, and the underflow and inexact exceptions are raised if
-the abstract input cannot be represented exactly as a subnormal extended
-double-precision floating-point number.
- If `roundingPrecision' is 32 or 64, the result is rounded to the same
-number of bits as single or double precision, respectively. Otherwise, the
-result is rounded to the full precision of the extended double-precision
-format.
- The input significand must be normalized or smaller. If the input
-significand is not normalized, `zExp' must be 0; in that case, the result
-returned is a subnormal number, and it must not require rounding. The
-handling of underflow and overflow follows the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static floatx80
- roundAndPackFloatx80(
- int8 roundingPrecision, flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1
- )
-{
- int8 roundingMode;
- flag roundNearestEven, increment, isTiny;
- int64 roundIncrement, roundMask, roundBits;
-
- roundingMode = float_rounding_mode;
- roundNearestEven = ( roundingMode == float_round_nearest_even );
- if ( roundingPrecision == 80 ) goto precision80;
- if ( roundingPrecision == 64 ) {
- roundIncrement = LIT64( 0x0000000000000400 );
- roundMask = LIT64( 0x00000000000007FF );
- }
- else if ( roundingPrecision == 32 ) {
- roundIncrement = LIT64( 0x0000008000000000 );
- roundMask = LIT64( 0x000000FFFFFFFFFF );
- }
- else {
- goto precision80;
- }
- zSig0 |= ( zSig1 != 0 );
- if ( ! roundNearestEven ) {
- if ( roundingMode == float_round_to_zero ) {
- roundIncrement = 0;
- }
- else {
- roundIncrement = roundMask;
- if ( zSign ) {
- if ( roundingMode == float_round_up ) roundIncrement = 0;
- }
- else {
- if ( roundingMode == float_round_down ) roundIncrement = 0;
- }
- }
- }
- roundBits = zSig0 & roundMask;
- if ( 0x7FFD <= (bits32) ( zExp - 1 ) ) {
- if ( ( 0x7FFE < zExp )
- || ( ( zExp == 0x7FFE ) && ( zSig0 + roundIncrement < zSig0 ) )
- ) {
- goto overflow;
- }
- if ( zExp <= 0 ) {
- isTiny =
- ( float_detect_tininess == float_tininess_before_rounding )
- || ( zExp < 0 )
- || ( zSig0 <= zSig0 + roundIncrement );
- shift64RightJamming( zSig0, 1 - zExp, &zSig0 );
- zExp = 0;
- roundBits = zSig0 & roundMask;
- if ( isTiny && roundBits ) float_raise( float_flag_underflow );
- if ( roundBits ) set_float_exception_inexact_flag();
- zSig0 += roundIncrement;
- if ( (sbits64) zSig0 < 0 ) zExp = 1;
- roundIncrement = roundMask + 1;
- if ( roundNearestEven && ( roundBits<<1 == roundIncrement ) ) {
- roundMask |= roundIncrement;
- }
- zSig0 &= ~ roundMask;
- return packFloatx80( zSign, zExp, zSig0 );
- }
- }
- if ( roundBits ) set_float_exception_inexact_flag();
- zSig0 += roundIncrement;
- if ( zSig0 < roundIncrement ) {
- ++zExp;
- zSig0 = LIT64( 0x8000000000000000 );
- }
- roundIncrement = roundMask + 1;
- if ( roundNearestEven && ( roundBits<<1 == roundIncrement ) ) {
- roundMask |= roundIncrement;
- }
- zSig0 &= ~ roundMask;
- if ( zSig0 == 0 ) zExp = 0;
- return packFloatx80( zSign, zExp, zSig0 );
- precision80:
- increment = ( (sbits64) zSig1 < 0 );
- if ( ! roundNearestEven ) {
- if ( roundingMode == float_round_to_zero ) {
- increment = 0;
- }
- else {
- if ( zSign ) {
- increment = ( roundingMode == float_round_down ) && zSig1;
- }
- else {
- increment = ( roundingMode == float_round_up ) && zSig1;
- }
- }
- }
- if ( 0x7FFD <= (bits32) ( zExp - 1 ) ) {
- if ( ( 0x7FFE < zExp )
- || ( ( zExp == 0x7FFE )
- && ( zSig0 == LIT64( 0xFFFFFFFFFFFFFFFF ) )
- && increment
- )
- ) {
- roundMask = 0;
- overflow:
- float_raise( float_flag_overflow | float_flag_inexact );
- if ( ( roundingMode == float_round_to_zero )
- || ( zSign && ( roundingMode == float_round_up ) )
- || ( ! zSign && ( roundingMode == float_round_down ) )
- ) {
- return packFloatx80( zSign, 0x7FFE, ~ roundMask );
- }
- return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );
- }
- if ( zExp <= 0 ) {
- isTiny =
- ( float_detect_tininess == float_tininess_before_rounding )
- || ( zExp < 0 )
- || ! increment
- || ( zSig0 < LIT64( 0xFFFFFFFFFFFFFFFF ) );
- shift64ExtraRightJamming( zSig0, zSig1, 1 - zExp, &zSig0, &zSig1 );
- zExp = 0;
- if ( isTiny && zSig1 ) float_raise( float_flag_underflow );
- if ( zSig1 ) set_float_exception_inexact_flag();
- if ( roundNearestEven ) {
- increment = ( (sbits64) zSig1 < 0 );
- }
- else {
- if ( zSign ) {
- increment = ( roundingMode == float_round_down ) && zSig1;
- }
- else {
- increment = ( roundingMode == float_round_up ) && zSig1;
- }
- }
- if ( increment ) {
- ++zSig0;
- zSig0 &=
- ~ ( ( (bits64) ( zSig1<<1 ) == 0 ) & roundNearestEven );
- if ( (sbits64) zSig0 < 0 ) zExp = 1;
- }
- return packFloatx80( zSign, zExp, zSig0 );
- }
- }
- if ( zSig1 ) set_float_exception_inexact_flag();
- if ( increment ) {
- ++zSig0;
- if ( zSig0 == 0 ) {
- ++zExp;
- zSig0 = LIT64( 0x8000000000000000 );
- }
- else {
- zSig0 &= ~ ( ( (bits64) ( zSig1<<1 ) == 0 ) & roundNearestEven );
- }
- }
- else {
- if ( zSig0 == 0 ) zExp = 0;
- }
- return packFloatx80( zSign, zExp, zSig0 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes an abstract floating-point value having sign `zSign', exponent
-`zExp', and significand formed by the concatenation of `zSig0' and `zSig1',
-and returns the proper extended double-precision floating-point value
-corresponding to the abstract input. This routine is just like
-`roundAndPackFloatx80' except that the input significand does not have to be
-normalized.
--------------------------------------------------------------------------------
-*/
-static floatx80
- normalizeRoundAndPackFloatx80(
- int8 roundingPrecision, flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1
- )
-{
- int8 shiftCount;
-
- if ( zSig0 == 0 ) {
- zSig0 = zSig1;
- zSig1 = 0;
- zExp -= 64;
- }
- shiftCount = countLeadingZeros64( zSig0 );
- shortShift128Left( zSig0, zSig1, shiftCount, &zSig0, &zSig1 );
- zExp -= shiftCount;
- return
- roundAndPackFloatx80( roundingPrecision, zSign, zExp, zSig0, zSig1 );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-/*
--------------------------------------------------------------------------------
-Returns the least-significant 64 fraction bits of the quadruple-precision
-floating-point value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE bits64 extractFloat128Frac1( float128 a )
-{
-
- return a.low;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the most-significant 48 fraction bits of the quadruple-precision
-floating-point value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE bits64 extractFloat128Frac0( float128 a )
-{
-
- return a.high & LIT64( 0x0000FFFFFFFFFFFF );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the exponent bits of the quadruple-precision floating-point value
-`a'.
--------------------------------------------------------------------------------
-*/
-INLINE int32 extractFloat128Exp( float128 a )
-{
-
- return (int32)((a.high >> 48) & 0x7FFF);
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the sign bit of the quadruple-precision floating-point value `a'.
--------------------------------------------------------------------------------
-*/
-INLINE flag extractFloat128Sign( float128 a )
-{
-
- return (flag)(a.high >> 63);
-
-}
-
-/*
--------------------------------------------------------------------------------
-Normalizes the subnormal quadruple-precision floating-point value
-represented by the denormalized significand formed by the concatenation of
-`aSig0' and `aSig1'. The normalized exponent is stored at the location
-pointed to by `zExpPtr'. The most significant 49 bits of the normalized
-significand are stored at the location pointed to by `zSig0Ptr', and the
-least significant 64 bits of the normalized significand are stored at the
-location pointed to by `zSig1Ptr'.
--------------------------------------------------------------------------------
-*/
-static void
- normalizeFloat128Subnormal(
- bits64 aSig0,
- bits64 aSig1,
- int32 *zExpPtr,
- bits64 *zSig0Ptr,
- bits64 *zSig1Ptr
- )
-{
- int8 shiftCount;
-
- if ( aSig0 == 0 ) {
- shiftCount = countLeadingZeros64( aSig1 ) - 15;
- if ( shiftCount < 0 ) {
- *zSig0Ptr = aSig1>>( - shiftCount );
- *zSig1Ptr = aSig1<<( shiftCount & 63 );
- }
- else {
- *zSig0Ptr = aSig1<<shiftCount;
- *zSig1Ptr = 0;
- }
- *zExpPtr = - shiftCount - 63;
- }
- else {
- shiftCount = countLeadingZeros64( aSig0 ) - 15;
- shortShift128Left( aSig0, aSig1, shiftCount, zSig0Ptr, zSig1Ptr );
- *zExpPtr = 1 - shiftCount;
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-Packs the sign `zSign', the exponent `zExp', and the significand formed
-by the concatenation of `zSig0' and `zSig1' into a quadruple-precision
-floating-point value, returning the result. After being shifted into the
-proper positions, the three fields `zSign', `zExp', and `zSig0' are simply
-added together to form the most significant 32 bits of the result. This
-means that any integer portion of `zSig0' will be added into the exponent.
-Since a properly normalized significand will have an integer portion equal
-to 1, the `zExp' input should be 1 less than the desired result exponent
-whenever `zSig0' and `zSig1' concatenated form a complete, normalized
-significand.
--------------------------------------------------------------------------------
-*/
-INLINE float128
- packFloat128( flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1 )
-{
- float128 z;
-
- z.low = zSig1;
- z.high = ( ( (bits64) zSign )<<63 ) + ( ( (bits64) zExp )<<48 ) + zSig0;
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes an abstract floating-point value having sign `zSign', exponent `zExp',
-and extended significand formed by the concatenation of `zSig0', `zSig1',
-and `zSig2', and returns the proper quadruple-precision floating-point value
-corresponding to the abstract input. Ordinarily, the abstract value is
-simply rounded and packed into the quadruple-precision format, with the
-inexact exception raised if the abstract input cannot be represented
-exactly. However, if the abstract value is too large, the overflow and
-inexact exceptions are raised and an infinity or maximal finite value is
-returned. If the abstract value is too small, the input value is rounded to
-a subnormal number, and the underflow and inexact exceptions are raised if
-the abstract input cannot be represented exactly as a subnormal quadruple-
-precision floating-point number.
- The input significand must be normalized or smaller. If the input
-significand is not normalized, `zExp' must be 0; in that case, the result
-returned is a subnormal number, and it must not require rounding. In the
-usual case that the input significand is normalized, `zExp' must be 1 less
-than the ``true'' floating-point exponent. The handling of underflow and
-overflow follows the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static float128
- roundAndPackFloat128(
- flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1, bits64 zSig2 )
-{
- int8 roundingMode;
- flag roundNearestEven, increment, isTiny;
-
- roundingMode = float_rounding_mode;
- roundNearestEven = ( roundingMode == float_round_nearest_even );
- increment = ( (sbits64) zSig2 < 0 );
- if ( ! roundNearestEven ) {
- if ( roundingMode == float_round_to_zero ) {
- increment = 0;
- }
- else {
- if ( zSign ) {
- increment = ( roundingMode == float_round_down ) && zSig2;
- }
- else {
- increment = ( roundingMode == float_round_up ) && zSig2;
- }
- }
- }
- if ( 0x7FFD <= (bits32) zExp ) {
- if ( ( 0x7FFD < zExp )
- || ( ( zExp == 0x7FFD )
- && eq128(
- LIT64( 0x0001FFFFFFFFFFFF ),
- LIT64( 0xFFFFFFFFFFFFFFFF ),
- zSig0,
- zSig1
- )
- && increment
- )
- ) {
- float_raise( float_flag_overflow | float_flag_inexact );
- if ( ( roundingMode == float_round_to_zero )
- || ( zSign && ( roundingMode == float_round_up ) )
- || ( ! zSign && ( roundingMode == float_round_down ) )
- ) {
- return
- packFloat128(
- zSign,
- 0x7FFE,
- LIT64( 0x0000FFFFFFFFFFFF ),
- LIT64( 0xFFFFFFFFFFFFFFFF )
- );
- }
- return packFloat128( zSign, 0x7FFF, 0, 0 );
- }
- if ( zExp < 0 ) {
- isTiny =
- ( float_detect_tininess == float_tininess_before_rounding )
- || ( zExp < -1 )
- || ! increment
- || lt128(
- zSig0,
- zSig1,
- LIT64( 0x0001FFFFFFFFFFFF ),
- LIT64( 0xFFFFFFFFFFFFFFFF )
- );
- shift128ExtraRightJamming(
- zSig0, zSig1, zSig2, - zExp, &zSig0, &zSig1, &zSig2 );
- zExp = 0;
- if ( isTiny && zSig2 ) float_raise( float_flag_underflow );
- if ( roundNearestEven ) {
- increment = ( (sbits64) zSig2 < 0 );
- }
- else {
- if ( zSign ) {
- increment = ( roundingMode == float_round_down ) && zSig2;
- }
- else {
- increment = ( roundingMode == float_round_up ) && zSig2;
- }
- }
- }
- }
- if ( zSig2 ) set_float_exception_inexact_flag();
- if ( increment ) {
- add128( zSig0, zSig1, 0, 1, &zSig0, &zSig1 );
- zSig1 &= ~ ( ( zSig2 + zSig2 == 0 ) & roundNearestEven );
- }
- else {
- if ( ( zSig0 | zSig1 ) == 0 ) zExp = 0;
- }
- return packFloat128( zSign, zExp, zSig0, zSig1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes an abstract floating-point value having sign `zSign', exponent `zExp',
-and significand formed by the concatenation of `zSig0' and `zSig1', and
-returns the proper quadruple-precision floating-point value corresponding
-to the abstract input. This routine is just like `roundAndPackFloat128'
-except that the input significand has fewer bits and does not have to be
-normalized. In all cases, `zExp' must be 1 less than the ``true'' floating-
-point exponent.
--------------------------------------------------------------------------------
-*/
-static float128
- normalizeRoundAndPackFloat128(
- flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1 )
-{
- int8 shiftCount;
- bits64 zSig2;
-
- if ( zSig0 == 0 ) {
- zSig0 = zSig1;
- zSig1 = 0;
- zExp -= 64;
- }
- shiftCount = countLeadingZeros64( zSig0 ) - 15;
- if ( 0 <= shiftCount ) {
- zSig2 = 0;
- shortShift128Left( zSig0, zSig1, shiftCount, &zSig0, &zSig1 );
- }
- else {
- shift128ExtraRightJamming(
- zSig0, zSig1, 0, - shiftCount, &zSig0, &zSig1, &zSig2 );
- }
- zExp -= shiftCount;
- return roundAndPackFloat128( zSign, zExp, zSig0, zSig1, zSig2 );
-
-}
-
-#endif
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the 32-bit two's complement integer `a'
-to the single-precision floating-point format. The conversion is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 int32_to_float32( int32 a )
-{
- flag zSign;
-
- if ( a == 0 ) return 0;
- if ( a == (sbits32) 0x80000000 ) return packFloat32( 1, 0x9E, 0 );
- zSign = ( a < 0 );
- return normalizeRoundAndPackFloat32(zSign, 0x9C, (uint32)(zSign ? - a : a));
-
-}
-
-float32 uint32_to_float32( uint32 a )
-{
- if ( a == 0 ) return 0;
- if ( a & (bits32) 0x80000000 )
- return normalizeRoundAndPackFloat32( 0, 0x9D, a >> 1 );
- return normalizeRoundAndPackFloat32( 0, 0x9C, a );
-}
-
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the 32-bit two's complement integer `a'
-to the double-precision floating-point format. The conversion is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 int32_to_float64( int32 a )
-{
- flag zSign;
- uint32 absA;
- int8 shiftCount;
- bits64 zSig;
-
- if ( a == 0 ) return 0;
- zSign = ( a < 0 );
- absA = zSign ? - a : a;
- shiftCount = countLeadingZeros32( absA ) + 21;
- zSig = absA;
- return packFloat64( zSign, 0x432 - shiftCount, zSig<<shiftCount );
-
-}
-
-float64 uint32_to_float64( uint32 a )
-{
- int8 shiftCount;
- bits64 zSig = a;
-
- if ( a == 0 ) return 0;
- shiftCount = countLeadingZeros32( a ) + 21;
- return packFloat64( 0, 0x432 - shiftCount, zSig<<shiftCount );
-
-}
-
-#ifdef FLOATX80
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the 32-bit two's complement integer `a'
-to the extended double-precision floating-point format. The conversion
-is performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-floatx80 int32_to_floatx80( int32 a )
-{
- flag zSign;
- uint32 absA;
- int8 shiftCount;
- bits64 zSig;
-
- if ( a == 0 ) return packFloatx80( 0, 0, 0 );
- zSign = ( a < 0 );
- absA = zSign ? - a : a;
- shiftCount = countLeadingZeros32( absA ) + 32;
- zSig = absA;
- return packFloatx80( zSign, 0x403E - shiftCount, zSig<<shiftCount );
-
-}
-
-floatx80 uint32_to_floatx80( uint32 a )
-{
- int8 shiftCount;
- bits64 zSig = a;
-
- if ( a == 0 ) return packFloatx80( 0, 0, 0 );
- shiftCount = countLeadingZeros32( a ) + 32;
- return packFloatx80( 0, 0x403E - shiftCount, zSig<<shiftCount );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the 32-bit two's complement integer `a' to
-the quadruple-precision floating-point format. The conversion is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float128 int32_to_float128( int32 a )
-{
- flag zSign;
- uint32 absA;
- int8 shiftCount;
- bits64 zSig0;
-
- if ( a == 0 ) return packFloat128( 0, 0, 0, 0 );
- zSign = ( a < 0 );
- absA = zSign ? - a : a;
- shiftCount = countLeadingZeros32( absA ) + 17;
- zSig0 = absA;
- return packFloat128( zSign, 0x402E - shiftCount, zSig0<<shiftCount, 0 );
-
-}
-
-float128 uint32_to_float128( uint32 a )
-{
- int8 shiftCount;
- bits64 zSig0 = a;
-
- if ( a == 0 ) return packFloat128( 0, 0, 0, 0 );
- shiftCount = countLeadingZeros32( a ) + 17;
- return packFloat128( 0, 0x402E - shiftCount, zSig0<<shiftCount, 0 );
-
-}
-
-#endif
-
-#ifndef SOFTFLOAT_FOR_GCC /* __floatdi?f is in libgcc2.c */
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the 64-bit two's complement integer `a'
-to the single-precision floating-point format. The conversion is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 int64_to_float32( int64 a )
-{
- flag zSign;
- uint64 absA;
- int8 shiftCount;
-
- if ( a == 0 ) return 0;
- zSign = ( a < 0 );
- absA = zSign ? - a : a;
- shiftCount = countLeadingZeros64( absA ) - 40;
- if ( 0 <= shiftCount ) {
- return packFloat32( zSign, 0x95 - shiftCount, absA<<shiftCount );
- }
- else {
- shiftCount += 7;
- if ( shiftCount < 0 ) {
- shift64RightJamming( absA, - shiftCount, &absA );
- }
- else {
- absA <<= shiftCount;
- }
- return roundAndPackFloat32( zSign, 0x9C - shiftCount, absA );
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the 64-bit two's complement integer `a'
-to the double-precision floating-point format. The conversion is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 int64_to_float64( int64 a )
-{
- flag zSign;
-
- if ( a == 0 ) return 0;
- if ( a == (sbits64) LIT64( 0x8000000000000000 ) ) {
- return packFloat64( 1, 0x43E, 0 );
- }
- zSign = ( a < 0 );
- return normalizeRoundAndPackFloat64( zSign, 0x43C, zSign ? - a : a );
-
-}
-
-#ifdef FLOATX80
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the 64-bit two's complement integer `a'
-to the extended double-precision floating-point format. The conversion
-is performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-floatx80 int64_to_floatx80( int64 a )
-{
- flag zSign;
- uint64 absA;
- int8 shiftCount;
-
- if ( a == 0 ) return packFloatx80( 0, 0, 0 );
- zSign = ( a < 0 );
- absA = zSign ? - a : a;
- shiftCount = countLeadingZeros64( absA );
- return packFloatx80( zSign, 0x403E - shiftCount, absA<<shiftCount );
-
-}
-
-#endif
-
-#endif /* !SOFTFLOAT_FOR_GCC */
-
-#ifdef FLOAT128
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the 64-bit two's complement integer `a' to
-the quadruple-precision floating-point format. The conversion is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float128 int64_to_float128( int64 a )
-{
- flag zSign;
- uint64 absA;
- int8 shiftCount;
- int32 zExp;
- bits64 zSig0, zSig1;
-
- if ( a == 0 ) return packFloat128( 0, 0, 0, 0 );
- zSign = ( a < 0 );
- absA = zSign ? - a : a;
- shiftCount = countLeadingZeros64( absA ) + 49;
- zExp = 0x406E - shiftCount;
- if ( 64 <= shiftCount ) {
- zSig1 = 0;
- zSig0 = absA;
- shiftCount -= 64;
- }
- else {
- zSig1 = absA;
- zSig0 = 0;
- }
- shortShift128Left( zSig0, zSig1, shiftCount, &zSig0, &zSig1 );
- return packFloat128( zSign, zExp, zSig0, zSig1 );
-
-}
-
-#endif
-
-#ifndef SOFTFLOAT_FOR_GCC /* Not needed */
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the single-precision floating-point value
-`a' to the 32-bit two's complement integer format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic---which means in particular that the conversion is rounded
-according to the current rounding mode. If `a' is a NaN, the largest
-positive integer is returned. Otherwise, if the conversion overflows, the
-largest integer with the same sign as `a' is returned.
--------------------------------------------------------------------------------
-*/
-int32 float32_to_int32( float32 a )
-{
- flag aSign;
- int16 aExp, shiftCount;
- bits32 aSig;
- bits64 aSig64;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- if ( ( aExp == 0xFF ) && aSig ) aSign = 0;
- if ( aExp ) aSig |= 0x00800000;
- shiftCount = 0xAF - aExp;
- aSig64 = aSig;
- aSig64 <<= 32;
- if ( 0 < shiftCount ) shift64RightJamming( aSig64, shiftCount, &aSig64 );
- return roundAndPackInt32( aSign, aSig64 );
-
-}
-#endif /* !SOFTFLOAT_FOR_GCC */
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the single-precision floating-point value
-`a' to the 32-bit two's complement integer format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic, except that the conversion is always rounded toward zero.
-If `a' is a NaN, the largest positive integer is returned. Otherwise, if
-the conversion overflows, the largest integer with the same sign as `a' is
-returned.
--------------------------------------------------------------------------------
-*/
-int32 float32_to_int32_round_to_zero( float32 a )
-{
- flag aSign;
- int16 aExp, shiftCount;
- bits32 aSig;
- int32 z;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- shiftCount = aExp - 0x9E;
- if ( 0 <= shiftCount ) {
- if ( a != 0xCF000000 ) {
- float_raise( float_flag_invalid );
- if ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) return 0x7FFFFFFF;
- }
- return (sbits32) 0x80000000;
- }
- else if ( aExp <= 0x7E ) {
- if ( aExp | aSig ) set_float_exception_inexact_flag();
- return 0;
- }
- aSig = ( aSig | 0x00800000 )<<8;
- z = aSig>>( - shiftCount );
- if ( (bits32) ( aSig<<( shiftCount & 31 ) ) ) {
- set_float_exception_inexact_flag();
- }
- if ( aSign ) z = - z;
- return z;
-
-}
-
-#ifndef SOFTFLOAT_FOR_GCC /* __fix?fdi provided by libgcc2.c */
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the single-precision floating-point value
-`a' to the 64-bit two's complement integer format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic---which means in particular that the conversion is rounded
-according to the current rounding mode. If `a' is a NaN, the largest
-positive integer is returned. Otherwise, if the conversion overflows, the
-largest integer with the same sign as `a' is returned.
--------------------------------------------------------------------------------
-*/
-int64 float32_to_int64( float32 a )
-{
- flag aSign;
- int16 aExp, shiftCount;
- bits32 aSig;
- bits64 aSig64, aSigExtra;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- shiftCount = 0xBE - aExp;
- if ( shiftCount < 0 ) {
- float_raise( float_flag_invalid );
- if ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) {
- return LIT64( 0x7FFFFFFFFFFFFFFF );
- }
- return (sbits64) LIT64( 0x8000000000000000 );
- }
- if ( aExp ) aSig |= 0x00800000;
- aSig64 = aSig;
- aSig64 <<= 40;
- shift64ExtraRightJamming( aSig64, 0, shiftCount, &aSig64, &aSigExtra );
- return roundAndPackInt64( aSign, aSig64, aSigExtra );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the single-precision floating-point value
-`a' to the 64-bit two's complement integer format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic, except that the conversion is always rounded toward zero. If
-`a' is a NaN, the largest positive integer is returned. Otherwise, if the
-conversion overflows, the largest integer with the same sign as `a' is
-returned.
--------------------------------------------------------------------------------
-*/
-int64 float32_to_int64_round_to_zero( float32 a )
-{
- flag aSign;
- int16 aExp, shiftCount;
- bits32 aSig;
- bits64 aSig64;
- int64 z;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- shiftCount = aExp - 0xBE;
- if ( 0 <= shiftCount ) {
- if ( a != 0xDF000000 ) {
- float_raise( float_flag_invalid );
- if ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) {
- return LIT64( 0x7FFFFFFFFFFFFFFF );
- }
- }
- return (sbits64) LIT64( 0x8000000000000000 );
- }
- else if ( aExp <= 0x7E ) {
- if ( aExp | aSig ) set_float_exception_inexact_flag();
- return 0;
- }
- aSig64 = aSig | 0x00800000;
- aSig64 <<= 40;
- z = aSig64>>( - shiftCount );
- if ( (bits64) ( aSig64<<( shiftCount & 63 ) ) ) {
- set_float_exception_inexact_flag();
- }
- if ( aSign ) z = - z;
- return z;
-
-}
-#endif /* !SOFTFLOAT_FOR_GCC */
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the single-precision floating-point value
-`a' to the double-precision floating-point format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float32_to_float64( float32 a )
-{
- flag aSign;
- int16 aExp;
- bits32 aSig;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- if ( aExp == 0xFF ) {
- if ( aSig ) return commonNaNToFloat64( float32ToCommonNaN( a ) );
- return packFloat64( aSign, 0x7FF, 0 );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return packFloat64( aSign, 0, 0 );
- normalizeFloat32Subnormal( aSig, &aExp, &aSig );
- --aExp;
- }
- return packFloat64( aSign, aExp + 0x380, ( (bits64) aSig )<<29 );
-
-}
-
-#ifdef FLOATX80
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the single-precision floating-point value
-`a' to the extended double-precision floating-point format. The conversion
-is performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-floatx80 float32_to_floatx80( float32 a )
-{
- flag aSign;
- int16 aExp;
- bits32 aSig;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- if ( aExp == 0xFF ) {
- if ( aSig ) return commonNaNToFloatx80( float32ToCommonNaN( a ) );
- return packFloatx80( aSign, 0x7FFF, LIT64( 0x8000000000000000 ) );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return packFloatx80( aSign, 0, 0 );
- normalizeFloat32Subnormal( aSig, &aExp, &aSig );
- }
- aSig |= 0x00800000;
- return packFloatx80( aSign, aExp + 0x3F80, ( (bits64) aSig )<<40 );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the single-precision floating-point value
-`a' to the double-precision floating-point format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-float128 float32_to_float128( float32 a )
-{
- flag aSign;
- int16 aExp;
- bits32 aSig;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- if ( aExp == 0xFF ) {
- if ( aSig ) return commonNaNToFloat128( float32ToCommonNaN( a ) );
- return packFloat128( aSign, 0x7FFF, 0, 0 );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return packFloat128( aSign, 0, 0, 0 );
- normalizeFloat32Subnormal( aSig, &aExp, &aSig );
- --aExp;
- }
- return packFloat128( aSign, aExp + 0x3F80, ( (bits64) aSig )<<25, 0 );
-
-}
-
-#endif
-
-#ifndef SOFTFLOAT_FOR_GCC /* Not needed */
-/*
--------------------------------------------------------------------------------
-Rounds the single-precision floating-point value `a' to an integer, and
-returns the result as a single-precision floating-point value. The
-operation is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float32_round_to_int( float32 a )
-{
- flag aSign;
- int16 aExp;
- bits32 lastBitMask, roundBitsMask;
- int8 roundingMode;
- float32 z;
-
- aExp = extractFloat32Exp( a );
- if ( 0x96 <= aExp ) {
- if ( ( aExp == 0xFF ) && extractFloat32Frac( a ) ) {
- return propagateFloat32NaN( a, a );
- }
- return a;
- }
- if ( aExp <= 0x7E ) {
- if ( (bits32) ( a<<1 ) == 0 ) return a;
- set_float_exception_inexact_flag();
- aSign = extractFloat32Sign( a );
- switch ( float_rounding_mode ) {
- case float_round_nearest_even:
- if ( ( aExp == 0x7E ) && extractFloat32Frac( a ) ) {
- return packFloat32( aSign, 0x7F, 0 );
- }
- break;
- case float_round_to_zero:
- break;
- case float_round_down:
- return aSign ? 0xBF800000 : 0;
- case float_round_up:
- return aSign ? 0x80000000 : 0x3F800000;
- }
- return packFloat32( aSign, 0, 0 );
- }
- lastBitMask = 1;
- lastBitMask <<= 0x96 - aExp;
- roundBitsMask = lastBitMask - 1;
- z = a;
- roundingMode = float_rounding_mode;
- if ( roundingMode == float_round_nearest_even ) {
- z += lastBitMask>>1;
- if ( ( z & roundBitsMask ) == 0 ) z &= ~ lastBitMask;
- }
- else if ( roundingMode != float_round_to_zero ) {
- if ( extractFloat32Sign( z ) ^ ( roundingMode == float_round_up ) ) {
- z += roundBitsMask;
- }
- }
- z &= ~ roundBitsMask;
- if ( z != a ) set_float_exception_inexact_flag();
- return z;
-
-}
-#endif /* !SOFTFLOAT_FOR_GCC */
-
-/*
--------------------------------------------------------------------------------
-Returns the result of adding the absolute values of the single-precision
-floating-point values `a' and `b'. If `zSign' is 1, the sum is negated
-before being returned. `zSign' is ignored if the result is a NaN.
-The addition is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static float32 addFloat32Sigs( float32 a, float32 b, flag zSign )
-{
- int16 aExp, bExp, zExp;
- bits32 aSig, bSig, zSig;
- int16 expDiff;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- bSig = extractFloat32Frac( b );
- bExp = extractFloat32Exp( b );
- expDiff = aExp - bExp;
- aSig <<= 6;
- bSig <<= 6;
- if ( 0 < expDiff ) {
- if ( aExp == 0xFF ) {
- if ( aSig ) return propagateFloat32NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) {
- --expDiff;
- }
- else {
- bSig |= 0x20000000;
- }
- shift32RightJamming( bSig, expDiff, &bSig );
- zExp = aExp;
- }
- else if ( expDiff < 0 ) {
- if ( bExp == 0xFF ) {
- if ( bSig ) return propagateFloat32NaN( a, b );
- return packFloat32( zSign, 0xFF, 0 );
- }
- if ( aExp == 0 ) {
- ++expDiff;
- }
- else {
- aSig |= 0x20000000;
- }
- shift32RightJamming( aSig, - expDiff, &aSig );
- zExp = bExp;
- }
- else {
- if ( aExp == 0xFF ) {
- if ( aSig | bSig ) return propagateFloat32NaN( a, b );
- return a;
- }
- if ( aExp == 0 ) return packFloat32( zSign, 0, ( aSig + bSig )>>6 );
- zSig = 0x40000000 + aSig + bSig;
- zExp = aExp;
- goto roundAndPack;
- }
- aSig |= 0x20000000;
- zSig = ( aSig + bSig )<<1;
- --zExp;
- if ( (sbits32) zSig < 0 ) {
- zSig = aSig + bSig;
- ++zExp;
- }
- roundAndPack:
- return roundAndPackFloat32( zSign, zExp, zSig );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of subtracting the absolute values of the single-
-precision floating-point values `a' and `b'. If `zSign' is 1, the
-difference is negated before being returned. `zSign' is ignored if the
-result is a NaN. The subtraction is performed according to the IEC/IEEE
-Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static float32 subFloat32Sigs( float32 a, float32 b, flag zSign )
-{
- int16 aExp, bExp, zExp;
- bits32 aSig, bSig, zSig;
- int16 expDiff;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- bSig = extractFloat32Frac( b );
- bExp = extractFloat32Exp( b );
- expDiff = aExp - bExp;
- aSig <<= 7;
- bSig <<= 7;
- if ( 0 < expDiff ) goto aExpBigger;
- if ( expDiff < 0 ) goto bExpBigger;
- if ( aExp == 0xFF ) {
- if ( aSig | bSig ) return propagateFloat32NaN( a, b );
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- if ( aExp == 0 ) {
- aExp = 1;
- bExp = 1;
- }
- if ( bSig < aSig ) goto aBigger;
- if ( aSig < bSig ) goto bBigger;
- return packFloat32( float_rounding_mode == float_round_down, 0, 0 );
- bExpBigger:
- if ( bExp == 0xFF ) {
- if ( bSig ) return propagateFloat32NaN( a, b );
- return packFloat32( zSign ^ 1, 0xFF, 0 );
- }
- if ( aExp == 0 ) {
- ++expDiff;
- }
- else {
- aSig |= 0x40000000;
- }
- shift32RightJamming( aSig, - expDiff, &aSig );
- bSig |= 0x40000000;
- bBigger:
- zSig = bSig - aSig;
- zExp = bExp;
- zSign ^= 1;
- goto normalizeRoundAndPack;
- aExpBigger:
- if ( aExp == 0xFF ) {
- if ( aSig ) return propagateFloat32NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) {
- --expDiff;
- }
- else {
- bSig |= 0x40000000;
- }
- shift32RightJamming( bSig, expDiff, &bSig );
- aSig |= 0x40000000;
- aBigger:
- zSig = aSig - bSig;
- zExp = aExp;
- normalizeRoundAndPack:
- --zExp;
- return normalizeRoundAndPackFloat32( zSign, zExp, zSig );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of adding the single-precision floating-point values `a'
-and `b'. The operation is performed according to the IEC/IEEE Standard for
-Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float32_add( float32 a, float32 b )
-{
- flag aSign, bSign;
-
- aSign = extractFloat32Sign( a );
- bSign = extractFloat32Sign( b );
- if ( aSign == bSign ) {
- return addFloat32Sigs( a, b, aSign );
- }
- else {
- return subFloat32Sigs( a, b, aSign );
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of subtracting the single-precision floating-point values
-`a' and `b'. The operation is performed according to the IEC/IEEE Standard
-for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float32_sub( float32 a, float32 b )
-{
- flag aSign, bSign;
-
- aSign = extractFloat32Sign( a );
- bSign = extractFloat32Sign( b );
- if ( aSign == bSign ) {
- return subFloat32Sigs( a, b, aSign );
- }
- else {
- return addFloat32Sigs( a, b, aSign );
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of multiplying the single-precision floating-point values
-`a' and `b'. The operation is performed according to the IEC/IEEE Standard
-for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float32_mul( float32 a, float32 b )
-{
- flag aSign, bSign, zSign;
- int16 aExp, bExp, zExp;
- bits32 aSig, bSig;
- bits64 zSig64;
- bits32 zSig;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- bSig = extractFloat32Frac( b );
- bExp = extractFloat32Exp( b );
- bSign = extractFloat32Sign( b );
- zSign = aSign ^ bSign;
- if ( aExp == 0xFF ) {
- if ( aSig || ( ( bExp == 0xFF ) && bSig ) ) {
- return propagateFloat32NaN( a, b );
- }
- if ( ( bExp | bSig ) == 0 ) {
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- return packFloat32( zSign, 0xFF, 0 );
- }
- if ( bExp == 0xFF ) {
- if ( bSig ) return propagateFloat32NaN( a, b );
- if ( ( aExp | aSig ) == 0 ) {
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- return packFloat32( zSign, 0xFF, 0 );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return packFloat32( zSign, 0, 0 );
- normalizeFloat32Subnormal( aSig, &aExp, &aSig );
- }
- if ( bExp == 0 ) {
- if ( bSig == 0 ) return packFloat32( zSign, 0, 0 );
- normalizeFloat32Subnormal( bSig, &bExp, &bSig );
- }
- zExp = aExp + bExp - 0x7F;
- aSig = ( aSig | 0x00800000 )<<7;
- bSig = ( bSig | 0x00800000 )<<8;
- shift64RightJamming( ( (bits64) aSig ) * bSig, 32, &zSig64 );
- zSig = (bits32)zSig64;
- if ( 0 <= (sbits32) ( zSig<<1 ) ) {
- zSig <<= 1;
- --zExp;
- }
- return roundAndPackFloat32( zSign, zExp, zSig );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of dividing the single-precision floating-point value `a'
-by the corresponding value `b'. The operation is performed according to the
-IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float32_div( float32 a, float32 b )
-{
- flag aSign, bSign, zSign;
- int16 aExp, bExp, zExp;
- bits32 aSig, bSig, zSig;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- bSig = extractFloat32Frac( b );
- bExp = extractFloat32Exp( b );
- bSign = extractFloat32Sign( b );
- zSign = aSign ^ bSign;
- if ( aExp == 0xFF ) {
- if ( aSig ) return propagateFloat32NaN( a, b );
- if ( bExp == 0xFF ) {
- if ( bSig ) return propagateFloat32NaN( a, b );
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- return packFloat32( zSign, 0xFF, 0 );
- }
- if ( bExp == 0xFF ) {
- if ( bSig ) return propagateFloat32NaN( a, b );
- return packFloat32( zSign, 0, 0 );
- }
- if ( bExp == 0 ) {
- if ( bSig == 0 ) {
- if ( ( aExp | aSig ) == 0 ) {
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- float_raise( float_flag_divbyzero );
- return packFloat32( zSign, 0xFF, 0 );
- }
- normalizeFloat32Subnormal( bSig, &bExp, &bSig );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return packFloat32( zSign, 0, 0 );
- normalizeFloat32Subnormal( aSig, &aExp, &aSig );
- }
- zExp = aExp - bExp + 0x7D;
- aSig = ( aSig | 0x00800000 )<<7;
- bSig = ( bSig | 0x00800000 )<<8;
- if ( bSig <= ( aSig + aSig ) ) {
- aSig >>= 1;
- ++zExp;
- }
- zSig = (bits32)((((bits64) aSig) << 32) / bSig);
- if ( ( zSig & 0x3F ) == 0 ) {
- zSig |= ( (bits64) bSig * zSig != ( (bits64) aSig )<<32 );
- }
- return roundAndPackFloat32( zSign, zExp, zSig );
-
-}
-
-#ifndef SOFTFLOAT_FOR_GCC /* Not needed */
-/*
--------------------------------------------------------------------------------
-Returns the remainder of the single-precision floating-point value `a'
-with respect to the corresponding value `b'. The operation is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float32_rem( float32 a, float32 b )
-{
- flag aSign, bSign, zSign;
- int16 aExp, bExp, expDiff;
- bits32 aSig, bSig;
- bits32 q;
- bits64 aSig64, bSig64, q64;
- bits32 alternateASig;
- sbits32 sigMean;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- bSig = extractFloat32Frac( b );
- bExp = extractFloat32Exp( b );
- bSign = extractFloat32Sign( b );
- if ( aExp == 0xFF ) {
- if ( aSig || ( ( bExp == 0xFF ) && bSig ) ) {
- return propagateFloat32NaN( a, b );
- }
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- if ( bExp == 0xFF ) {
- if ( bSig ) return propagateFloat32NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) {
- if ( bSig == 0 ) {
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- normalizeFloat32Subnormal( bSig, &bExp, &bSig );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return a;
- normalizeFloat32Subnormal( aSig, &aExp, &aSig );
- }
- expDiff = aExp - bExp;
- aSig |= 0x00800000;
- bSig |= 0x00800000;
- if ( expDiff < 32 ) {
- aSig <<= 8;
- bSig <<= 8;
- if ( expDiff < 0 ) {
- if ( expDiff < -1 ) return a;
- aSig >>= 1;
- }
- q = ( bSig <= aSig );
- if ( q ) aSig -= bSig;
- if ( 0 < expDiff ) {
- q = ( ( (bits64) aSig )<<32 ) / bSig;
- q >>= 32 - expDiff;
- bSig >>= 2;
- aSig = ( ( aSig>>1 )<<( expDiff - 1 ) ) - bSig * q;
- }
- else {
- aSig >>= 2;
- bSig >>= 2;
- }
- }
- else {
- if ( bSig <= aSig ) aSig -= bSig;
- aSig64 = ( (bits64) aSig )<<40;
- bSig64 = ( (bits64) bSig )<<40;
- expDiff -= 64;
- while ( 0 < expDiff ) {
- q64 = estimateDiv128To64( aSig64, 0, bSig64 );
- q64 = ( 2 < q64 ) ? q64 - 2 : 0;
- aSig64 = - ( ( bSig * q64 )<<38 );
- expDiff -= 62;
- }
- expDiff += 64;
- q64 = estimateDiv128To64( aSig64, 0, bSig64 );
- q64 = ( 2 < q64 ) ? q64 - 2 : 0;
- q = q64>>( 64 - expDiff );
- bSig <<= 6;
- aSig = ( ( aSig64>>33 )<<( expDiff - 1 ) ) - bSig * q;
- }
- do {
- alternateASig = aSig;
- ++q;
- aSig -= bSig;
- } while ( 0 <= (sbits32) aSig );
- sigMean = aSig + alternateASig;
- if ( ( sigMean < 0 ) || ( ( sigMean == 0 ) && ( q & 1 ) ) ) {
- aSig = alternateASig;
- }
- zSign = ( (sbits32) aSig < 0 );
- if ( zSign ) aSig = - aSig;
- return normalizeRoundAndPackFloat32( aSign ^ zSign, bExp, aSig );
-
-}
-#endif /* !SOFTFLOAT_FOR_GCC */
-
-#ifndef SOFTFLOAT_FOR_GCC /* Not needed */
-/*
--------------------------------------------------------------------------------
-Returns the square root of the single-precision floating-point value `a'.
-The operation is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float32_sqrt( float32 a )
-{
- flag aSign;
- int16 aExp, zExp;
- bits32 aSig, zSig;
- bits64 rem, term;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- if ( aExp == 0xFF ) {
- if ( aSig ) return propagateFloat32NaN( a, 0 );
- if ( ! aSign ) return a;
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- if ( aSign ) {
- if ( ( aExp | aSig ) == 0 ) return a;
- float_raise( float_flag_invalid );
- return float32_default_nan;
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return 0;
- normalizeFloat32Subnormal( aSig, &aExp, &aSig );
- }
- zExp = ( ( aExp - 0x7F )>>1 ) + 0x7E;
- aSig = ( aSig | 0x00800000 )<<8;
- zSig = estimateSqrt32( aExp, aSig ) + 2;
- if ( ( zSig & 0x7F ) <= 5 ) {
- if ( zSig < 2 ) {
- zSig = 0x7FFFFFFF;
- goto roundAndPack;
- }
- aSig >>= aExp & 1;
- term = ( (bits64) zSig ) * zSig;
- rem = ( ( (bits64) aSig )<<32 ) - term;
- while ( (sbits64) rem < 0 ) {
- --zSig;
- rem += ( ( (bits64) zSig )<<1 ) | 1;
- }
- zSig |= ( rem != 0 );
- }
- shift32RightJamming( zSig, 1, &zSig );
- roundAndPack:
- return roundAndPackFloat32( 0, zExp, zSig );
-
-}
-#endif /* !SOFTFLOAT_FOR_GCC */
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the single-precision floating-point value `a' is equal to
-the corresponding value `b', and 0 otherwise. The comparison is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float32_eq( float32 a, float32 b )
-{
-
- if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )
- || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )
- ) {
- if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- return ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the single-precision floating-point value `a' is less than
-or equal to the corresponding value `b', and 0 otherwise. The comparison
-is performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float32_le( float32 a, float32 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )
- || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- aSign = extractFloat32Sign( a );
- bSign = extractFloat32Sign( b );
- if ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 );
- return ( a == b ) || ( aSign ^ ( a < b ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the single-precision floating-point value `a' is less than
-the corresponding value `b', and 0 otherwise. The comparison is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float32_lt( float32 a, float32 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )
- || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- aSign = extractFloat32Sign( a );
- bSign = extractFloat32Sign( b );
- if ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 );
- return ( a != b ) && ( aSign ^ ( a < b ) );
-
-}
-
-#ifndef SOFTFLOAT_FOR_GCC /* Not needed */
-/*
--------------------------------------------------------------------------------
-Returns 1 if the single-precision floating-point value `a' is equal to
-the corresponding value `b', and 0 otherwise. The invalid exception is
-raised if either operand is a NaN. Otherwise, the comparison is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float32_eq_signaling( float32 a, float32 b )
-{
-
- if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )
- || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- return ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the single-precision floating-point value `a' is less than or
-equal to the corresponding value `b', and 0 otherwise. Quiet NaNs do not
-cause an exception. Otherwise, the comparison is performed according to the
-IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float32_le_quiet( float32 a, float32 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )
- || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )
- ) {
- if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- aSign = extractFloat32Sign( a );
- bSign = extractFloat32Sign( b );
- if ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 );
- return ( a == b ) || ( aSign ^ ( a < b ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the single-precision floating-point value `a' is less than
-the corresponding value `b', and 0 otherwise. Quiet NaNs do not cause an
-exception. Otherwise, the comparison is performed according to the IEC/IEEE
-Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float32_lt_quiet( float32 a, float32 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )
- || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )
- ) {
- if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- aSign = extractFloat32Sign( a );
- bSign = extractFloat32Sign( b );
- if ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 );
- return ( a != b ) && ( aSign ^ ( a < b ) );
-
-}
-#endif /* !SOFTFLOAT_FOR_GCC */
-
-#ifndef SOFTFLOAT_FOR_GCC /* Not needed */
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the double-precision floating-point value
-`a' to the 32-bit two's complement integer format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic---which means in particular that the conversion is rounded
-according to the current rounding mode. If `a' is a NaN, the largest
-positive integer is returned. Otherwise, if the conversion overflows, the
-largest integer with the same sign as `a' is returned.
--------------------------------------------------------------------------------
-*/
-int32 float64_to_int32( float64 a )
-{
- flag aSign;
- int16 aExp, shiftCount;
- bits64 aSig;
-
- aSig = extractFloat64Frac( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- if ( ( aExp == 0x7FF ) && aSig ) aSign = 0;
- if ( aExp ) aSig |= LIT64( 0x0010000000000000 );
- shiftCount = 0x42C - aExp;
- if ( 0 < shiftCount ) shift64RightJamming( aSig, shiftCount, &aSig );
- return roundAndPackInt32( aSign, aSig );
-
-}
-#endif /* !SOFTFLOAT_FOR_GCC */
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the double-precision floating-point value
-`a' to the 32-bit two's complement integer format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic, except that the conversion is always rounded toward zero.
-If `a' is a NaN, the largest positive integer is returned. Otherwise, if
-the conversion overflows, the largest integer with the same sign as `a' is
-returned.
--------------------------------------------------------------------------------
-*/
-int32 float64_to_int32_round_to_zero( float64 a )
-{
- flag aSign;
- int16 aExp, shiftCount;
- bits64 aSig, savedASig;
- int32 z;
-
- aSig = extractFloat64Frac( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- if ( 0x41E < aExp ) {
- if ( ( aExp == 0x7FF ) && aSig ) aSign = 0;
- goto invalid;
- }
- else if ( aExp < 0x3FF ) {
- if ( aExp || aSig ) set_float_exception_inexact_flag();
- return 0;
- }
- aSig |= LIT64( 0x0010000000000000 );
- shiftCount = 0x433 - aExp;
- savedASig = aSig;
- aSig >>= shiftCount;
- z = (int32)aSig;
- if ( aSign ) z = - z;
- if ( ( z < 0 ) ^ aSign ) {
- invalid:
- float_raise( float_flag_invalid );
- return aSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;
- }
- if ( ( aSig<<shiftCount ) != savedASig ) {
- set_float_exception_inexact_flag();
- }
- return z;
-
-}
-
-#ifndef SOFTFLOAT_FOR_GCC /* Not needed */
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the double-precision floating-point value
-`a' to the 64-bit two's complement integer format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic---which means in particular that the conversion is rounded
-according to the current rounding mode. If `a' is a NaN, the largest
-positive integer is returned. Otherwise, if the conversion overflows, the
-largest integer with the same sign as `a' is returned.
--------------------------------------------------------------------------------
-*/
-int64 float64_to_int64( float64 a )
-{
- flag aSign;
- int16 aExp, shiftCount;
- bits64 aSig, aSigExtra;
-
- aSig = extractFloat64Frac( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- if ( aExp ) aSig |= LIT64( 0x0010000000000000 );
- shiftCount = 0x433 - aExp;
- if ( shiftCount <= 0 ) {
- if ( 0x43E < aExp ) {
- float_raise( float_flag_invalid );
- if ( ! aSign
- || ( ( aExp == 0x7FF )
- && ( aSig != LIT64( 0x0010000000000000 ) ) )
- ) {
- return LIT64( 0x7FFFFFFFFFFFFFFF );
- }
- return (sbits64) LIT64( 0x8000000000000000 );
- }
- aSigExtra = 0;
- aSig <<= - shiftCount;
- }
- else {
- shift64ExtraRightJamming( aSig, 0, shiftCount, &aSig, &aSigExtra );
- }
- return roundAndPackInt64( aSign, aSig, aSigExtra );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the double-precision floating-point value
-`a' to the 64-bit two's complement integer format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic, except that the conversion is always rounded toward zero.
-If `a' is a NaN, the largest positive integer is returned. Otherwise, if
-the conversion overflows, the largest integer with the same sign as `a' is
-returned.
--------------------------------------------------------------------------------
-*/
-int64 float64_to_int64_round_to_zero( float64 a )
-{
- flag aSign;
- int16 aExp, shiftCount;
- bits64 aSig;
- int64 z;
-
- aSig = extractFloat64Frac( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- if ( aExp ) aSig |= LIT64( 0x0010000000000000 );
- shiftCount = aExp - 0x433;
- if ( 0 <= shiftCount ) {
- if ( 0x43E <= aExp ) {
- if ( a != LIT64( 0xC3E0000000000000 ) ) {
- float_raise( float_flag_invalid );
- if ( ! aSign
- || ( ( aExp == 0x7FF )
- && ( aSig != LIT64( 0x0010000000000000 ) ) )
- ) {
- return LIT64( 0x7FFFFFFFFFFFFFFF );
- }
- }
- return (sbits64) LIT64( 0x8000000000000000 );
- }
- z = aSig<<shiftCount;
- }
- else {
- if ( aExp < 0x3FE ) {
- if ( aExp | aSig ) set_float_exception_inexact_flag();
- return 0;
- }
- z = aSig>>( - shiftCount );
- if ( (bits64) ( aSig<<( shiftCount & 63 ) ) ) {
- set_float_exception_inexact_flag();
- }
- }
- if ( aSign ) z = - z;
- return z;
-
-}
-#endif /* !SOFTFLOAT_FOR_GCC */
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the double-precision floating-point value
-`a' to the single-precision floating-point format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float64_to_float32( float64 a )
-{
- flag aSign;
- int16 aExp;
- bits64 aSig;
- bits32 zSig;
-
- aSig = extractFloat64Frac( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- if ( aExp == 0x7FF ) {
- if ( aSig ) return commonNaNToFloat32( float64ToCommonNaN( a ) );
- return packFloat32( aSign, 0xFF, 0 );
- }
- shift64RightJamming( aSig, 22, &aSig );
- zSig = (bits32)aSig;
- if ( aExp || zSig ) {
- zSig |= 0x40000000;
- aExp -= 0x381;
- }
- return roundAndPackFloat32( aSign, aExp, zSig );
-
-}
-
-#ifdef FLOATX80
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the double-precision floating-point value
-`a' to the extended double-precision floating-point format. The conversion
-is performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-floatx80 float64_to_floatx80( float64 a )
-{
- flag aSign;
- int16 aExp;
- bits64 aSig;
-
- aSig = extractFloat64Frac( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- if ( aExp == 0x7FF ) {
- if ( aSig ) return commonNaNToFloatx80( float64ToCommonNaN( a ) );
- return packFloatx80( aSign, 0x7FFF, LIT64( 0x8000000000000000 ) );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return packFloatx80( aSign, 0, 0 );
- normalizeFloat64Subnormal( aSig, &aExp, &aSig );
- }
- return
- packFloatx80(
- aSign, aExp + 0x3C00, ( aSig | LIT64( 0x0010000000000000 ) )<<11 );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the double-precision floating-point value
-`a' to the quadruple-precision floating-point format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-float128 float64_to_float128( float64 a )
-{
- flag aSign;
- int16 aExp;
- bits64 aSig, zSig0, zSig1;
-
- aSig = extractFloat64Frac( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- if ( aExp == 0x7FF ) {
- if ( aSig ) return commonNaNToFloat128( float64ToCommonNaN( a ) );
- return packFloat128( aSign, 0x7FFF, 0, 0 );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return packFloat128( aSign, 0, 0, 0 );
- normalizeFloat64Subnormal( aSig, &aExp, &aSig );
- --aExp;
- }
- shift128Right( aSig, 0, 4, &zSig0, &zSig1 );
- return packFloat128( aSign, aExp + 0x3C00, zSig0, zSig1 );
-
-}
-
-#endif
-
-#ifndef SOFTFLOAT_FOR_GCC
-/*
--------------------------------------------------------------------------------
-Rounds the double-precision floating-point value `a' to an integer, and
-returns the result as a double-precision floating-point value. The
-operation is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float64_round_to_int( float64 a )
-{
- flag aSign;
- int16 aExp;
- bits64 lastBitMask, roundBitsMask;
- int8 roundingMode;
- float64 z;
-
- aExp = extractFloat64Exp( a );
- if ( 0x433 <= aExp ) {
- if ( ( aExp == 0x7FF ) && extractFloat64Frac( a ) ) {
- return propagateFloat64NaN( a, a );
- }
- return a;
- }
- if ( aExp < 0x3FF ) {
- if ( (bits64) ( a<<1 ) == 0 ) return a;
- set_float_exception_inexact_flag();
- aSign = extractFloat64Sign( a );
- switch ( float_rounding_mode ) {
- case float_round_nearest_even:
- if ( ( aExp == 0x3FE ) && extractFloat64Frac( a ) ) {
- return packFloat64( aSign, 0x3FF, 0 );
- }
- break;
- case float_round_to_zero:
- break;
- case float_round_down:
- return aSign ? LIT64( 0xBFF0000000000000 ) : 0;
- case float_round_up:
- return
- aSign ? LIT64( 0x8000000000000000 ) : LIT64( 0x3FF0000000000000 );
- }
- return packFloat64( aSign, 0, 0 );
- }
- lastBitMask = 1;
- lastBitMask <<= 0x433 - aExp;
- roundBitsMask = lastBitMask - 1;
- z = a;
- roundingMode = float_rounding_mode;
- if ( roundingMode == float_round_nearest_even ) {
- z += lastBitMask>>1;
- if ( ( z & roundBitsMask ) == 0 ) z &= ~ lastBitMask;
- }
- else if ( roundingMode != float_round_to_zero ) {
- if ( extractFloat64Sign( z ) ^ ( roundingMode == float_round_up ) ) {
- z += roundBitsMask;
- }
- }
- z &= ~ roundBitsMask;
- if ( z != a ) set_float_exception_inexact_flag();
- return z;
-
-}
-#endif
-
-/*
--------------------------------------------------------------------------------
-Returns the result of adding the absolute values of the double-precision
-floating-point values `a' and `b'. If `zSign' is 1, the sum is negated
-before being returned. `zSign' is ignored if the result is a NaN.
-The addition is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static float64 addFloat64Sigs( float64 a, float64 b, flag zSign )
-{
- int16 aExp, bExp, zExp;
- bits64 aSig, bSig, zSig;
- int16 expDiff;
-
- aSig = extractFloat64Frac( a );
- aExp = extractFloat64Exp( a );
- bSig = extractFloat64Frac( b );
- bExp = extractFloat64Exp( b );
- expDiff = aExp - bExp;
- aSig <<= 9;
- bSig <<= 9;
- if ( 0 < expDiff ) {
- if ( aExp == 0x7FF ) {
- if ( aSig ) return propagateFloat64NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) {
- --expDiff;
- }
- else {
- bSig |= LIT64( 0x2000000000000000 );
- }
- shift64RightJamming( bSig, expDiff, &bSig );
- zExp = aExp;
- }
- else if ( expDiff < 0 ) {
- if ( bExp == 0x7FF ) {
- if ( bSig ) return propagateFloat64NaN( a, b );
- return packFloat64( zSign, 0x7FF, 0 );
- }
- if ( aExp == 0 ) {
- ++expDiff;
- }
- else {
- aSig |= LIT64( 0x2000000000000000 );
- }
- shift64RightJamming( aSig, - expDiff, &aSig );
- zExp = bExp;
- }
- else {
- if ( aExp == 0x7FF ) {
- if ( aSig | bSig ) return propagateFloat64NaN( a, b );
- return a;
- }
- if ( aExp == 0 ) return packFloat64( zSign, 0, ( aSig + bSig )>>9 );
- zSig = LIT64( 0x4000000000000000 ) + aSig + bSig;
- zExp = aExp;
- goto roundAndPack;
- }
- aSig |= LIT64( 0x2000000000000000 );
- zSig = ( aSig + bSig )<<1;
- --zExp;
- if ( (sbits64) zSig < 0 ) {
- zSig = aSig + bSig;
- ++zExp;
- }
- roundAndPack:
- return roundAndPackFloat64( zSign, zExp, zSig );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of subtracting the absolute values of the double-
-precision floating-point values `a' and `b'. If `zSign' is 1, the
-difference is negated before being returned. `zSign' is ignored if the
-result is a NaN. The subtraction is performed according to the IEC/IEEE
-Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static float64 subFloat64Sigs( float64 a, float64 b, flag zSign )
-{
- int16 aExp, bExp, zExp;
- bits64 aSig, bSig, zSig;
- int16 expDiff;
-
- aSig = extractFloat64Frac( a );
- aExp = extractFloat64Exp( a );
- bSig = extractFloat64Frac( b );
- bExp = extractFloat64Exp( b );
- expDiff = aExp - bExp;
- aSig <<= 10;
- bSig <<= 10;
- if ( 0 < expDiff ) goto aExpBigger;
- if ( expDiff < 0 ) goto bExpBigger;
- if ( aExp == 0x7FF ) {
- if ( aSig | bSig ) return propagateFloat64NaN( a, b );
- float_raise( float_flag_invalid );
- return float64_default_nan;
- }
- if ( aExp == 0 ) {
- aExp = 1;
- bExp = 1;
- }
- if ( bSig < aSig ) goto aBigger;
- if ( aSig < bSig ) goto bBigger;
- return packFloat64( float_rounding_mode == float_round_down, 0, 0 );
- bExpBigger:
- if ( bExp == 0x7FF ) {
- if ( bSig ) return propagateFloat64NaN( a, b );
- return packFloat64( zSign ^ 1, 0x7FF, 0 );
- }
- if ( aExp == 0 ) {
- ++expDiff;
- }
- else {
- aSig |= LIT64( 0x4000000000000000 );
- }
- shift64RightJamming( aSig, - expDiff, &aSig );
- bSig |= LIT64( 0x4000000000000000 );
- bBigger:
- zSig = bSig - aSig;
- zExp = bExp;
- zSign ^= 1;
- goto normalizeRoundAndPack;
- aExpBigger:
- if ( aExp == 0x7FF ) {
- if ( aSig ) return propagateFloat64NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) {
- --expDiff;
- }
- else {
- bSig |= LIT64( 0x4000000000000000 );
- }
- shift64RightJamming( bSig, expDiff, &bSig );
- aSig |= LIT64( 0x4000000000000000 );
- aBigger:
- zSig = aSig - bSig;
- zExp = aExp;
- normalizeRoundAndPack:
- --zExp;
- return normalizeRoundAndPackFloat64( zSign, zExp, zSig );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of adding the double-precision floating-point values `a'
-and `b'. The operation is performed according to the IEC/IEEE Standard for
-Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float64_add( float64 a, float64 b )
-{
- flag aSign, bSign;
-
- aSign = extractFloat64Sign( a );
- bSign = extractFloat64Sign( b );
- if ( aSign == bSign ) {
- return addFloat64Sigs( a, b, aSign );
- }
- else {
- return subFloat64Sigs( a, b, aSign );
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of subtracting the double-precision floating-point values
-`a' and `b'. The operation is performed according to the IEC/IEEE Standard
-for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float64_sub( float64 a, float64 b )
-{
- flag aSign, bSign;
-
- aSign = extractFloat64Sign( a );
- bSign = extractFloat64Sign( b );
- if ( aSign == bSign ) {
- return subFloat64Sigs( a, b, aSign );
- }
- else {
- return addFloat64Sigs( a, b, aSign );
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of multiplying the double-precision floating-point values
-`a' and `b'. The operation is performed according to the IEC/IEEE Standard
-for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float64_mul( float64 a, float64 b )
-{
- flag aSign, bSign, zSign;
- int16 aExp, bExp, zExp;
- bits64 aSig, bSig, zSig0, zSig1;
-
- aSig = extractFloat64Frac( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- bSig = extractFloat64Frac( b );
- bExp = extractFloat64Exp( b );
- bSign = extractFloat64Sign( b );
- zSign = aSign ^ bSign;
- if ( aExp == 0x7FF ) {
- if ( aSig || ( ( bExp == 0x7FF ) && bSig ) ) {
- return propagateFloat64NaN( a, b );
- }
- if ( ( bExp | bSig ) == 0 ) {
- float_raise( float_flag_invalid );
- return float64_default_nan;
- }
- return packFloat64( zSign, 0x7FF, 0 );
- }
- if ( bExp == 0x7FF ) {
- if ( bSig ) return propagateFloat64NaN( a, b );
- if ( ( aExp | aSig ) == 0 ) {
- float_raise( float_flag_invalid );
- return float64_default_nan;
- }
- return packFloat64( zSign, 0x7FF, 0 );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return packFloat64( zSign, 0, 0 );
- normalizeFloat64Subnormal( aSig, &aExp, &aSig );
- }
- if ( bExp == 0 ) {
- if ( bSig == 0 ) return packFloat64( zSign, 0, 0 );
- normalizeFloat64Subnormal( bSig, &bExp, &bSig );
- }
- zExp = aExp + bExp - 0x3FF;
- aSig = ( aSig | LIT64( 0x0010000000000000 ) )<<10;
- bSig = ( bSig | LIT64( 0x0010000000000000 ) )<<11;
- mul64To128( aSig, bSig, &zSig0, &zSig1 );
- zSig0 |= ( zSig1 != 0 );
- if ( 0 <= (sbits64) ( zSig0<<1 ) ) {
- zSig0 <<= 1;
- --zExp;
- }
- return roundAndPackFloat64( zSign, zExp, zSig0 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of dividing the double-precision floating-point value `a'
-by the corresponding value `b'. The operation is performed according to
-the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float64_div( float64 a, float64 b )
-{
- flag aSign, bSign, zSign;
- int16 aExp, bExp, zExp;
- bits64 aSig, bSig, zSig;
- bits64 rem0, rem1;
- bits64 term0, term1;
-
- aSig = extractFloat64Frac( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- bSig = extractFloat64Frac( b );
- bExp = extractFloat64Exp( b );
- bSign = extractFloat64Sign( b );
- zSign = aSign ^ bSign;
- if ( aExp == 0x7FF ) {
- if ( aSig ) return propagateFloat64NaN( a, b );
- if ( bExp == 0x7FF ) {
- if ( bSig ) return propagateFloat64NaN( a, b );
- float_raise( float_flag_invalid );
- return float64_default_nan;
- }
- return packFloat64( zSign, 0x7FF, 0 );
- }
- if ( bExp == 0x7FF ) {
- if ( bSig ) return propagateFloat64NaN( a, b );
- return packFloat64( zSign, 0, 0 );
- }
- if ( bExp == 0 ) {
- if ( bSig == 0 ) {
- if ( ( aExp | aSig ) == 0 ) {
- float_raise( float_flag_invalid );
- return float64_default_nan;
- }
- float_raise( float_flag_divbyzero );
- return packFloat64( zSign, 0x7FF, 0 );
- }
- normalizeFloat64Subnormal( bSig, &bExp, &bSig );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return packFloat64( zSign, 0, 0 );
- normalizeFloat64Subnormal( aSig, &aExp, &aSig );
- }
- zExp = aExp - bExp + 0x3FD;
- aSig = ( aSig | LIT64( 0x0010000000000000 ) )<<10;
- bSig = ( bSig | LIT64( 0x0010000000000000 ) )<<11;
- if ( bSig <= ( aSig + aSig ) ) {
- aSig >>= 1;
- ++zExp;
- }
- zSig = estimateDiv128To64( aSig, 0, bSig );
- if ( ( zSig & 0x1FF ) <= 2 ) {
- mul64To128( bSig, zSig, &term0, &term1 );
- sub128( aSig, 0, term0, term1, &rem0, &rem1 );
- while ( (sbits64) rem0 < 0 ) {
- --zSig;
- add128( rem0, rem1, 0, bSig, &rem0, &rem1 );
- }
- zSig |= ( rem1 != 0 );
- }
- return roundAndPackFloat64( zSign, zExp, zSig );
-
-}
-
-#ifndef SOFTFLOAT_FOR_GCC
-/*
--------------------------------------------------------------------------------
-Returns the remainder of the double-precision floating-point value `a'
-with respect to the corresponding value `b'. The operation is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float64_rem( float64 a, float64 b )
-{
- flag aSign, bSign, zSign;
- int16 aExp, bExp, expDiff;
- bits64 aSig, bSig;
- bits64 q, alternateASig;
- sbits64 sigMean;
-
- aSig = extractFloat64Frac( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- bSig = extractFloat64Frac( b );
- bExp = extractFloat64Exp( b );
- bSign = extractFloat64Sign( b );
- if ( aExp == 0x7FF ) {
- if ( aSig || ( ( bExp == 0x7FF ) && bSig ) ) {
- return propagateFloat64NaN( a, b );
- }
- float_raise( float_flag_invalid );
- return float64_default_nan;
- }
- if ( bExp == 0x7FF ) {
- if ( bSig ) return propagateFloat64NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) {
- if ( bSig == 0 ) {
- float_raise( float_flag_invalid );
- return float64_default_nan;
- }
- normalizeFloat64Subnormal( bSig, &bExp, &bSig );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return a;
- normalizeFloat64Subnormal( aSig, &aExp, &aSig );
- }
- expDiff = aExp - bExp;
- aSig = ( aSig | LIT64( 0x0010000000000000 ) )<<11;
- bSig = ( bSig | LIT64( 0x0010000000000000 ) )<<11;
- if ( expDiff < 0 ) {
- if ( expDiff < -1 ) return a;
- aSig >>= 1;
- }
- q = ( bSig <= aSig );
- if ( q ) aSig -= bSig;
- expDiff -= 64;
- while ( 0 < expDiff ) {
- q = estimateDiv128To64( aSig, 0, bSig );
- q = ( 2 < q ) ? q - 2 : 0;
- aSig = - ( ( bSig>>2 ) * q );
- expDiff -= 62;
- }
- expDiff += 64;
- if ( 0 < expDiff ) {
- q = estimateDiv128To64( aSig, 0, bSig );
- q = ( 2 < q ) ? q - 2 : 0;
- q >>= 64 - expDiff;
- bSig >>= 2;
- aSig = ( ( aSig>>1 )<<( expDiff - 1 ) ) - bSig * q;
- }
- else {
- aSig >>= 2;
- bSig >>= 2;
- }
- do {
- alternateASig = aSig;
- ++q;
- aSig -= bSig;
- } while ( 0 <= (sbits64) aSig );
- sigMean = aSig + alternateASig;
- if ( ( sigMean < 0 ) || ( ( sigMean == 0 ) && ( q & 1 ) ) ) {
- aSig = alternateASig;
- }
- zSign = ( (sbits64) aSig < 0 );
- if ( zSign ) aSig = - aSig;
- return normalizeRoundAndPackFloat64( aSign ^ zSign, bExp, aSig );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the square root of the double-precision floating-point value `a'.
-The operation is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float64_sqrt( float64 a )
-{
- flag aSign;
- int16 aExp, zExp;
- bits64 aSig, zSig, doubleZSig;
- bits64 rem0, rem1, term0, term1;
-
- aSig = extractFloat64Frac( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
- if ( aExp == 0x7FF ) {
- if ( aSig ) return propagateFloat64NaN( a, a );
- if ( ! aSign ) return a;
- float_raise( float_flag_invalid );
- return float64_default_nan;
- }
- if ( aSign ) {
- if ( ( aExp | aSig ) == 0 ) return a;
- float_raise( float_flag_invalid );
- return float64_default_nan;
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return 0;
- normalizeFloat64Subnormal( aSig, &aExp, &aSig );
- }
- zExp = ( ( aExp - 0x3FF )>>1 ) + 0x3FE;
- aSig |= LIT64( 0x0010000000000000 );
- zSig = estimateSqrt32( aExp, aSig>>21 );
- aSig <<= 9 - ( aExp & 1 );
- zSig = estimateDiv128To64( aSig, 0, zSig<<32 ) + ( zSig<<30 );
- if ( ( zSig & 0x1FF ) <= 5 ) {
- doubleZSig = zSig<<1;
- mul64To128( zSig, zSig, &term0, &term1 );
- sub128( aSig, 0, term0, term1, &rem0, &rem1 );
- while ( (sbits64) rem0 < 0 ) {
- --zSig;
- doubleZSig -= 2;
- add128( rem0, rem1, zSig>>63, doubleZSig | 1, &rem0, &rem1 );
- }
- zSig |= ( ( rem0 | rem1 ) != 0 );
- }
- return roundAndPackFloat64( 0, zExp, zSig );
-
-}
-#endif
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the double-precision floating-point value `a' is equal to the
-corresponding value `b', and 0 otherwise. The comparison is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float64_eq( float64 a, float64 b )
-{
-
- if ( ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )
- || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )
- ) {
- if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- return ( a == b ) ||
- ( (bits64) ( ( FLOAT64_DEMANGLE(a) | FLOAT64_DEMANGLE(b) )<<1 ) == 0 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the double-precision floating-point value `a' is less than or
-equal to the corresponding value `b', and 0 otherwise. The comparison is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float64_le( float64 a, float64 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )
- || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- aSign = extractFloat64Sign( a );
- bSign = extractFloat64Sign( b );
- if ( aSign != bSign )
- return aSign ||
- ( (bits64) ( ( FLOAT64_DEMANGLE(a) | FLOAT64_DEMANGLE(b) )<<1 ) ==
- 0 );
- return ( a == b ) ||
- ( aSign ^ ( FLOAT64_DEMANGLE(a) < FLOAT64_DEMANGLE(b) ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the double-precision floating-point value `a' is less than
-the corresponding value `b', and 0 otherwise. The comparison is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float64_lt( float64 a, float64 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )
- || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- aSign = extractFloat64Sign( a );
- bSign = extractFloat64Sign( b );
- if ( aSign != bSign )
- return aSign &&
- ( (bits64) ( ( FLOAT64_DEMANGLE(a) | FLOAT64_DEMANGLE(b) )<<1 ) !=
- 0 );
- return ( a != b ) &&
- ( aSign ^ ( FLOAT64_DEMANGLE(a) < FLOAT64_DEMANGLE(b) ) );
-
-}
-
-#ifndef SOFTFLOAT_FOR_GCC
-/*
--------------------------------------------------------------------------------
-Returns 1 if the double-precision floating-point value `a' is equal to the
-corresponding value `b', and 0 otherwise. The invalid exception is raised
-if either operand is a NaN. Otherwise, the comparison is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float64_eq_signaling( float64 a, float64 b )
-{
-
- if ( ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )
- || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- return ( a == b ) || ( (bits64) ( ( a | b )<<1 ) == 0 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the double-precision floating-point value `a' is less than or
-equal to the corresponding value `b', and 0 otherwise. Quiet NaNs do not
-cause an exception. Otherwise, the comparison is performed according to the
-IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float64_le_quiet( float64 a, float64 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )
- || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )
- ) {
- if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- aSign = extractFloat64Sign( a );
- bSign = extractFloat64Sign( b );
- if ( aSign != bSign ) return aSign || ( (bits64) ( ( a | b )<<1 ) == 0 );
- return ( a == b ) || ( aSign ^ ( a < b ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the double-precision floating-point value `a' is less than
-the corresponding value `b', and 0 otherwise. Quiet NaNs do not cause an
-exception. Otherwise, the comparison is performed according to the IEC/IEEE
-Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float64_lt_quiet( float64 a, float64 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )
- || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )
- ) {
- if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- aSign = extractFloat64Sign( a );
- bSign = extractFloat64Sign( b );
- if ( aSign != bSign ) return aSign && ( (bits64) ( ( a | b )<<1 ) != 0 );
- return ( a != b ) && ( aSign ^ ( a < b ) );
-
-}
-#endif
-
-#ifdef FLOATX80
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the extended double-precision floating-
-point value `a' to the 32-bit two's complement integer format. The
-conversion is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic---which means in particular that the conversion
-is rounded according to the current rounding mode. If `a' is a NaN, the
-largest positive integer is returned. Otherwise, if the conversion
-overflows, the largest integer with the same sign as `a' is returned.
--------------------------------------------------------------------------------
-*/
-int32 floatx80_to_int32( floatx80 a )
-{
- flag aSign;
- int32 aExp, shiftCount;
- bits64 aSig;
-
- aSig = extractFloatx80Frac( a );
- aExp = extractFloatx80Exp( a );
- aSign = extractFloatx80Sign( a );
- if ( ( aExp == 0x7FFF ) && (bits64) ( aSig<<1 ) ) aSign = 0;
- shiftCount = 0x4037 - aExp;
- if ( shiftCount <= 0 ) shiftCount = 1;
- shift64RightJamming( aSig, shiftCount, &aSig );
- return roundAndPackInt32( aSign, aSig );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the extended double-precision floating-
-point value `a' to the 32-bit two's complement integer format. The
-conversion is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic, except that the conversion is always rounded
-toward zero. If `a' is a NaN, the largest positive integer is returned.
-Otherwise, if the conversion overflows, the largest integer with the same
-sign as `a' is returned.
--------------------------------------------------------------------------------
-*/
-int32 floatx80_to_int32_round_to_zero( floatx80 a )
-{
- flag aSign;
- int32 aExp, shiftCount;
- bits64 aSig, savedASig;
- int32 z;
-
- aSig = extractFloatx80Frac( a );
- aExp = extractFloatx80Exp( a );
- aSign = extractFloatx80Sign( a );
- if ( 0x401E < aExp ) {
- if ( ( aExp == 0x7FFF ) && (bits64) ( aSig<<1 ) ) aSign = 0;
- goto invalid;
- }
- else if ( aExp < 0x3FFF ) {
- if ( aExp || aSig ) set_float_exception_inexact_flag();
- return 0;
- }
- shiftCount = 0x403E - aExp;
- savedASig = aSig;
- aSig >>= shiftCount;
- z = aSig;
- if ( aSign ) z = - z;
- if ( ( z < 0 ) ^ aSign ) {
- invalid:
- float_raise( float_flag_invalid );
- return aSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;
- }
- if ( ( aSig<<shiftCount ) != savedASig ) {
- set_float_exception_inexact_flag();
- }
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the extended double-precision floating-
-point value `a' to the 64-bit two's complement integer format. The
-conversion is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic---which means in particular that the conversion
-is rounded according to the current rounding mode. If `a' is a NaN,
-the largest positive integer is returned. Otherwise, if the conversion
-overflows, the largest integer with the same sign as `a' is returned.
--------------------------------------------------------------------------------
-*/
-int64 floatx80_to_int64( floatx80 a )
-{
- flag aSign;
- int32 aExp, shiftCount;
- bits64 aSig, aSigExtra;
-
- aSig = extractFloatx80Frac( a );
- aExp = extractFloatx80Exp( a );
- aSign = extractFloatx80Sign( a );
- shiftCount = 0x403E - aExp;
- if ( shiftCount <= 0 ) {
- if ( shiftCount ) {
- float_raise( float_flag_invalid );
- if ( ! aSign
- || ( ( aExp == 0x7FFF )
- && ( aSig != LIT64( 0x8000000000000000 ) ) )
- ) {
- return LIT64( 0x7FFFFFFFFFFFFFFF );
- }
- return (sbits64) LIT64( 0x8000000000000000 );
- }
- aSigExtra = 0;
- }
- else {
- shift64ExtraRightJamming( aSig, 0, shiftCount, &aSig, &aSigExtra );
- }
- return roundAndPackInt64( aSign, aSig, aSigExtra );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the extended double-precision floating-
-point value `a' to the 64-bit two's complement integer format. The
-conversion is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic, except that the conversion is always rounded
-toward zero. If `a' is a NaN, the largest positive integer is returned.
-Otherwise, if the conversion overflows, the largest integer with the same
-sign as `a' is returned.
--------------------------------------------------------------------------------
-*/
-int64 floatx80_to_int64_round_to_zero( floatx80 a )
-{
- flag aSign;
- int32 aExp, shiftCount;
- bits64 aSig;
- int64 z;
-
- aSig = extractFloatx80Frac( a );
- aExp = extractFloatx80Exp( a );
- aSign = extractFloatx80Sign( a );
- shiftCount = aExp - 0x403E;
- if ( 0 <= shiftCount ) {
- aSig &= LIT64( 0x7FFFFFFFFFFFFFFF );
- if ( ( a.high != 0xC03E ) || aSig ) {
- float_raise( float_flag_invalid );
- if ( ! aSign || ( ( aExp == 0x7FFF ) && aSig ) ) {
- return LIT64( 0x7FFFFFFFFFFFFFFF );
- }
- }
- return (sbits64) LIT64( 0x8000000000000000 );
- }
- else if ( aExp < 0x3FFF ) {
- if ( aExp | aSig ) set_float_exception_inexact_flag();
- return 0;
- }
- z = aSig>>( - shiftCount );
- if ( (bits64) ( aSig<<( shiftCount & 63 ) ) ) {
- set_float_exception_inexact_flag();
- }
- if ( aSign ) z = - z;
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the extended double-precision floating-
-point value `a' to the single-precision floating-point format. The
-conversion is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 floatx80_to_float32( floatx80 a )
-{
- flag aSign;
- int32 aExp;
- bits64 aSig;
-
- aSig = extractFloatx80Frac( a );
- aExp = extractFloatx80Exp( a );
- aSign = extractFloatx80Sign( a );
- if ( aExp == 0x7FFF ) {
- if ( (bits64) ( aSig<<1 ) ) {
- return commonNaNToFloat32( floatx80ToCommonNaN( a ) );
- }
- return packFloat32( aSign, 0xFF, 0 );
- }
- shift64RightJamming( aSig, 33, &aSig );
- if ( aExp || aSig ) aExp -= 0x3F81;
- return roundAndPackFloat32( aSign, aExp, aSig );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the extended double-precision floating-
-point value `a' to the double-precision floating-point format. The
-conversion is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 floatx80_to_float64( floatx80 a )
-{
- flag aSign;
- int32 aExp;
- bits64 aSig, zSig;
-
- aSig = extractFloatx80Frac( a );
- aExp = extractFloatx80Exp( a );
- aSign = extractFloatx80Sign( a );
- if ( aExp == 0x7FFF ) {
- if ( (bits64) ( aSig<<1 ) ) {
- return commonNaNToFloat64( floatx80ToCommonNaN( a ) );
- }
- return packFloat64( aSign, 0x7FF, 0 );
- }
- shift64RightJamming( aSig, 1, &zSig );
- if ( aExp || aSig ) aExp -= 0x3C01;
- return roundAndPackFloat64( aSign, aExp, zSig );
-
-}
-
-#ifdef FLOAT128
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the extended double-precision floating-
-point value `a' to the quadruple-precision floating-point format. The
-conversion is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float128 floatx80_to_float128( floatx80 a )
-{
- flag aSign;
- int16 aExp;
- bits64 aSig, zSig0, zSig1;
-
- aSig = extractFloatx80Frac( a );
- aExp = extractFloatx80Exp( a );
- aSign = extractFloatx80Sign( a );
- if ( ( aExp == 0x7FFF ) && (bits64) ( aSig<<1 ) ) {
- return commonNaNToFloat128( floatx80ToCommonNaN( a ) );
- }
- shift128Right( aSig<<1, 0, 16, &zSig0, &zSig1 );
- return packFloat128( aSign, aExp, zSig0, zSig1 );
-
-}
-
-#endif
-
-/*
--------------------------------------------------------------------------------
-Rounds the extended double-precision floating-point value `a' to an integer,
-and returns the result as an extended quadruple-precision floating-point
-value. The operation is performed according to the IEC/IEEE Standard for
-Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-floatx80 floatx80_round_to_int( floatx80 a )
-{
- flag aSign;
- int32 aExp;
- bits64 lastBitMask, roundBitsMask;
- int8 roundingMode;
- floatx80 z;
-
- aExp = extractFloatx80Exp( a );
- if ( 0x403E <= aExp ) {
- if ( ( aExp == 0x7FFF ) && (bits64) ( extractFloatx80Frac( a )<<1 ) ) {
- return propagateFloatx80NaN( a, a );
- }
- return a;
- }
- if ( aExp < 0x3FFF ) {
- if ( ( aExp == 0 )
- && ( (bits64) ( extractFloatx80Frac( a )<<1 ) == 0 ) ) {
- return a;
- }
- set_float_exception_inexact_flag();
- aSign = extractFloatx80Sign( a );
- switch ( float_rounding_mode ) {
- case float_round_nearest_even:
- if ( ( aExp == 0x3FFE ) && (bits64) ( extractFloatx80Frac( a )<<1 )
- ) {
- return
- packFloatx80( aSign, 0x3FFF, LIT64( 0x8000000000000000 ) );
- }
- break;
- case float_round_to_zero:
- break;
- case float_round_down:
- return
- aSign ?
- packFloatx80( 1, 0x3FFF, LIT64( 0x8000000000000000 ) )
- : packFloatx80( 0, 0, 0 );
- case float_round_up:
- return
- aSign ? packFloatx80( 1, 0, 0 )
- : packFloatx80( 0, 0x3FFF, LIT64( 0x8000000000000000 ) );
- }
- return packFloatx80( aSign, 0, 0 );
- }
- lastBitMask = 1;
- lastBitMask <<= 0x403E - aExp;
- roundBitsMask = lastBitMask - 1;
- z = a;
- roundingMode = float_rounding_mode;
- if ( roundingMode == float_round_nearest_even ) {
- z.low += lastBitMask>>1;
- if ( ( z.low & roundBitsMask ) == 0 ) z.low &= ~ lastBitMask;
- }
- else if ( roundingMode != float_round_to_zero ) {
- if ( extractFloatx80Sign( z ) ^ ( roundingMode == float_round_up ) ) {
- z.low += roundBitsMask;
- }
- }
- z.low &= ~ roundBitsMask;
- if ( z.low == 0 ) {
- ++z.high;
- z.low = LIT64( 0x8000000000000000 );
- }
- if ( z.low != a.low ) set_float_exception_inexact_flag();
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of adding the absolute values of the extended double-
-precision floating-point values `a' and `b'. If `zSign' is 1, the sum is
-negated before being returned. `zSign' is ignored if the result is a NaN.
-The addition is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static floatx80 addFloatx80Sigs( floatx80 a, floatx80 b, flag zSign )
-{
- int32 aExp, bExp, zExp;
- bits64 aSig, bSig, zSig0, zSig1;
- int32 expDiff;
-
- aSig = extractFloatx80Frac( a );
- aExp = extractFloatx80Exp( a );
- bSig = extractFloatx80Frac( b );
- bExp = extractFloatx80Exp( b );
- expDiff = aExp - bExp;
- if ( 0 < expDiff ) {
- if ( aExp == 0x7FFF ) {
- if ( (bits64) ( aSig<<1 ) ) return propagateFloatx80NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) --expDiff;
- shift64ExtraRightJamming( bSig, 0, expDiff, &bSig, &zSig1 );
- zExp = aExp;
- }
- else if ( expDiff < 0 ) {
- if ( bExp == 0x7FFF ) {
- if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );
- return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );
- }
- if ( aExp == 0 ) ++expDiff;
- shift64ExtraRightJamming( aSig, 0, - expDiff, &aSig, &zSig1 );
- zExp = bExp;
- }
- else {
- if ( aExp == 0x7FFF ) {
- if ( (bits64) ( ( aSig | bSig )<<1 ) ) {
- return propagateFloatx80NaN( a, b );
- }
- return a;
- }
- zSig1 = 0;
- zSig0 = aSig + bSig;
- if ( aExp == 0 ) {
- normalizeFloatx80Subnormal( zSig0, &zExp, &zSig0 );
- goto roundAndPack;
- }
- zExp = aExp;
- goto shiftRight1;
- }
- zSig0 = aSig + bSig;
- if ( (sbits64) zSig0 < 0 ) goto roundAndPack;
- shiftRight1:
- shift64ExtraRightJamming( zSig0, zSig1, 1, &zSig0, &zSig1 );
- zSig0 |= LIT64( 0x8000000000000000 );
- ++zExp;
- roundAndPack:
- return
- roundAndPackFloatx80(
- floatx80_rounding_precision, zSign, zExp, zSig0, zSig1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of subtracting the absolute values of the extended
-double-precision floating-point values `a' and `b'. If `zSign' is 1, the
-difference is negated before being returned. `zSign' is ignored if the
-result is a NaN. The subtraction is performed according to the IEC/IEEE
-Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static floatx80 subFloatx80Sigs( floatx80 a, floatx80 b, flag zSign )
-{
- int32 aExp, bExp, zExp;
- bits64 aSig, bSig, zSig0, zSig1;
- int32 expDiff;
- floatx80 z;
-
- aSig = extractFloatx80Frac( a );
- aExp = extractFloatx80Exp( a );
- bSig = extractFloatx80Frac( b );
- bExp = extractFloatx80Exp( b );
- expDiff = aExp - bExp;
- if ( 0 < expDiff ) goto aExpBigger;
- if ( expDiff < 0 ) goto bExpBigger;
- if ( aExp == 0x7FFF ) {
- if ( (bits64) ( ( aSig | bSig )<<1 ) ) {
- return propagateFloatx80NaN( a, b );
- }
- float_raise( float_flag_invalid );
- z.low = floatx80_default_nan_low;
- z.high = floatx80_default_nan_high;
- return z;
- }
- if ( aExp == 0 ) {
- aExp = 1;
- bExp = 1;
- }
- zSig1 = 0;
- if ( bSig < aSig ) goto aBigger;
- if ( aSig < bSig ) goto bBigger;
- return packFloatx80( float_rounding_mode == float_round_down, 0, 0 );
- bExpBigger:
- if ( bExp == 0x7FFF ) {
- if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );
- return packFloatx80( zSign ^ 1, 0x7FFF, LIT64( 0x8000000000000000 ) );
- }
- if ( aExp == 0 ) ++expDiff;
- shift128RightJamming( aSig, 0, - expDiff, &aSig, &zSig1 );
- bBigger:
- sub128( bSig, 0, aSig, zSig1, &zSig0, &zSig1 );
- zExp = bExp;
- zSign ^= 1;
- goto normalizeRoundAndPack;
- aExpBigger:
- if ( aExp == 0x7FFF ) {
- if ( (bits64) ( aSig<<1 ) ) return propagateFloatx80NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) --expDiff;
- shift128RightJamming( bSig, 0, expDiff, &bSig, &zSig1 );
- aBigger:
- sub128( aSig, 0, bSig, zSig1, &zSig0, &zSig1 );
- zExp = aExp;
- normalizeRoundAndPack:
- return
- normalizeRoundAndPackFloatx80(
- floatx80_rounding_precision, zSign, zExp, zSig0, zSig1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of adding the extended double-precision floating-point
-values `a' and `b'. The operation is performed according to the IEC/IEEE
-Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-floatx80 floatx80_add( floatx80 a, floatx80 b )
-{
- flag aSign, bSign;
-
- aSign = extractFloatx80Sign( a );
- bSign = extractFloatx80Sign( b );
- if ( aSign == bSign ) {
- return addFloatx80Sigs( a, b, aSign );
- }
- else {
- return subFloatx80Sigs( a, b, aSign );
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of subtracting the extended double-precision floating-
-point values `a' and `b'. The operation is performed according to the
-IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-floatx80 floatx80_sub( floatx80 a, floatx80 b )
-{
- flag aSign, bSign;
-
- aSign = extractFloatx80Sign( a );
- bSign = extractFloatx80Sign( b );
- if ( aSign == bSign ) {
- return subFloatx80Sigs( a, b, aSign );
- }
- else {
- return addFloatx80Sigs( a, b, aSign );
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of multiplying the extended double-precision floating-
-point values `a' and `b'. The operation is performed according to the
-IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-floatx80 floatx80_mul( floatx80 a, floatx80 b )
-{
- flag aSign, bSign, zSign;
- int32 aExp, bExp, zExp;
- bits64 aSig, bSig, zSig0, zSig1;
- floatx80 z;
-
- aSig = extractFloatx80Frac( a );
- aExp = extractFloatx80Exp( a );
- aSign = extractFloatx80Sign( a );
- bSig = extractFloatx80Frac( b );
- bExp = extractFloatx80Exp( b );
- bSign = extractFloatx80Sign( b );
- zSign = aSign ^ bSign;
- if ( aExp == 0x7FFF ) {
- if ( (bits64) ( aSig<<1 )
- || ( ( bExp == 0x7FFF ) && (bits64) ( bSig<<1 ) ) ) {
- return propagateFloatx80NaN( a, b );
- }
- if ( ( bExp | bSig ) == 0 ) goto invalid;
- return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );
- }
- if ( bExp == 0x7FFF ) {
- if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );
- if ( ( aExp | aSig ) == 0 ) {
- invalid:
- float_raise( float_flag_invalid );
- z.low = floatx80_default_nan_low;
- z.high = floatx80_default_nan_high;
- return z;
- }
- return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return packFloatx80( zSign, 0, 0 );
- normalizeFloatx80Subnormal( aSig, &aExp, &aSig );
- }
- if ( bExp == 0 ) {
- if ( bSig == 0 ) return packFloatx80( zSign, 0, 0 );
- normalizeFloatx80Subnormal( bSig, &bExp, &bSig );
- }
- zExp = aExp + bExp - 0x3FFE;
- mul64To128( aSig, bSig, &zSig0, &zSig1 );
- if ( 0 < (sbits64) zSig0 ) {
- shortShift128Left( zSig0, zSig1, 1, &zSig0, &zSig1 );
- --zExp;
- }
- return
- roundAndPackFloatx80(
- floatx80_rounding_precision, zSign, zExp, zSig0, zSig1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of dividing the extended double-precision floating-point
-value `a' by the corresponding value `b'. The operation is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-floatx80 floatx80_div( floatx80 a, floatx80 b )
-{
- flag aSign, bSign, zSign;
- int32 aExp, bExp, zExp;
- bits64 aSig, bSig, zSig0, zSig1;
- bits64 rem0, rem1, rem2, term0, term1, term2;
- floatx80 z;
-
- aSig = extractFloatx80Frac( a );
- aExp = extractFloatx80Exp( a );
- aSign = extractFloatx80Sign( a );
- bSig = extractFloatx80Frac( b );
- bExp = extractFloatx80Exp( b );
- bSign = extractFloatx80Sign( b );
- zSign = aSign ^ bSign;
- if ( aExp == 0x7FFF ) {
- if ( (bits64) ( aSig<<1 ) ) return propagateFloatx80NaN( a, b );
- if ( bExp == 0x7FFF ) {
- if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );
- goto invalid;
- }
- return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );
- }
- if ( bExp == 0x7FFF ) {
- if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );
- return packFloatx80( zSign, 0, 0 );
- }
- if ( bExp == 0 ) {
- if ( bSig == 0 ) {
- if ( ( aExp | aSig ) == 0 ) {
- invalid:
- float_raise( float_flag_invalid );
- z.low = floatx80_default_nan_low;
- z.high = floatx80_default_nan_high;
- return z;
- }
- float_raise( float_flag_divbyzero );
- return packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );
- }
- normalizeFloatx80Subnormal( bSig, &bExp, &bSig );
- }
- if ( aExp == 0 ) {
- if ( aSig == 0 ) return packFloatx80( zSign, 0, 0 );
- normalizeFloatx80Subnormal( aSig, &aExp, &aSig );
- }
- zExp = aExp - bExp + 0x3FFE;
- rem1 = 0;
- if ( bSig <= aSig ) {
- shift128Right( aSig, 0, 1, &aSig, &rem1 );
- ++zExp;
- }
- zSig0 = estimateDiv128To64( aSig, rem1, bSig );
- mul64To128( bSig, zSig0, &term0, &term1 );
- sub128( aSig, rem1, term0, term1, &rem0, &rem1 );
- while ( (sbits64) rem0 < 0 ) {
- --zSig0;
- add128( rem0, rem1, 0, bSig, &rem0, &rem1 );
- }
- zSig1 = estimateDiv128To64( rem1, 0, bSig );
- if ( (bits64) ( zSig1<<1 ) <= 8 ) {
- mul64To128( bSig, zSig1, &term1, &term2 );
- sub128( rem1, 0, term1, term2, &rem1, &rem2 );
- while ( (sbits64) rem1 < 0 ) {
- --zSig1;
- add128( rem1, rem2, 0, bSig, &rem1, &rem2 );
- }
- zSig1 |= ( ( rem1 | rem2 ) != 0 );
- }
- return
- roundAndPackFloatx80(
- floatx80_rounding_precision, zSign, zExp, zSig0, zSig1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the remainder of the extended double-precision floating-point value
-`a' with respect to the corresponding value `b'. The operation is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-floatx80 floatx80_rem( floatx80 a, floatx80 b )
-{
- flag aSign, bSign, zSign;
- int32 aExp, bExp, expDiff;
- bits64 aSig0, aSig1, bSig;
- bits64 q, term0, term1, alternateASig0, alternateASig1;
- floatx80 z;
-
- aSig0 = extractFloatx80Frac( a );
- aExp = extractFloatx80Exp( a );
- aSign = extractFloatx80Sign( a );
- bSig = extractFloatx80Frac( b );
- bExp = extractFloatx80Exp( b );
- bSign = extractFloatx80Sign( b );
- if ( aExp == 0x7FFF ) {
- if ( (bits64) ( aSig0<<1 )
- || ( ( bExp == 0x7FFF ) && (bits64) ( bSig<<1 ) ) ) {
- return propagateFloatx80NaN( a, b );
- }
- goto invalid;
- }
- if ( bExp == 0x7FFF ) {
- if ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) {
- if ( bSig == 0 ) {
- invalid:
- float_raise( float_flag_invalid );
- z.low = floatx80_default_nan_low;
- z.high = floatx80_default_nan_high;
- return z;
- }
- normalizeFloatx80Subnormal( bSig, &bExp, &bSig );
- }
- if ( aExp == 0 ) {
- if ( (bits64) ( aSig0<<1 ) == 0 ) return a;
- normalizeFloatx80Subnormal( aSig0, &aExp, &aSig0 );
- }
- bSig |= LIT64( 0x8000000000000000 );
- zSign = aSign;
- expDiff = aExp - bExp;
- aSig1 = 0;
- if ( expDiff < 0 ) {
- if ( expDiff < -1 ) return a;
- shift128Right( aSig0, 0, 1, &aSig0, &aSig1 );
- expDiff = 0;
- }
- q = ( bSig <= aSig0 );
- if ( q ) aSig0 -= bSig;
- expDiff -= 64;
- while ( 0 < expDiff ) {
- q = estimateDiv128To64( aSig0, aSig1, bSig );
- q = ( 2 < q ) ? q - 2 : 0;
- mul64To128( bSig, q, &term0, &term1 );
- sub128( aSig0, aSig1, term0, term1, &aSig0, &aSig1 );
- shortShift128Left( aSig0, aSig1, 62, &aSig0, &aSig1 );
- expDiff -= 62;
- }
- expDiff += 64;
- if ( 0 < expDiff ) {
- q = estimateDiv128To64( aSig0, aSig1, bSig );
- q = ( 2 < q ) ? q - 2 : 0;
- q >>= 64 - expDiff;
- mul64To128( bSig, q<<( 64 - expDiff ), &term0, &term1 );
- sub128( aSig0, aSig1, term0, term1, &aSig0, &aSig1 );
- shortShift128Left( 0, bSig, 64 - expDiff, &term0, &term1 );
- while ( le128( term0, term1, aSig0, aSig1 ) ) {
- ++q;
- sub128( aSig0, aSig1, term0, term1, &aSig0, &aSig1 );
- }
- }
- else {
- term1 = 0;
- term0 = bSig;
- }
- sub128( term0, term1, aSig0, aSig1, &alternateASig0, &alternateASig1 );
- if ( lt128( alternateASig0, alternateASig1, aSig0, aSig1 )
- || ( eq128( alternateASig0, alternateASig1, aSig0, aSig1 )
- && ( q & 1 ) )
- ) {
- aSig0 = alternateASig0;
- aSig1 = alternateASig1;
- zSign = ! zSign;
- }
- return
- normalizeRoundAndPackFloatx80(
- 80, zSign, bExp + expDiff, aSig0, aSig1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the square root of the extended double-precision floating-point
-value `a'. The operation is performed according to the IEC/IEEE Standard
-for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-floatx80 floatx80_sqrt( floatx80 a )
-{
- flag aSign;
- int32 aExp, zExp;
- bits64 aSig0, aSig1, zSig0, zSig1, doubleZSig0;
- bits64 rem0, rem1, rem2, rem3, term0, term1, term2, term3;
- floatx80 z;
-
- aSig0 = extractFloatx80Frac( a );
- aExp = extractFloatx80Exp( a );
- aSign = extractFloatx80Sign( a );
- if ( aExp == 0x7FFF ) {
- if ( (bits64) ( aSig0<<1 ) ) return propagateFloatx80NaN( a, a );
- if ( ! aSign ) return a;
- goto invalid;
- }
- if ( aSign ) {
- if ( ( aExp | aSig0 ) == 0 ) return a;
- invalid:
- float_raise( float_flag_invalid );
- z.low = floatx80_default_nan_low;
- z.high = floatx80_default_nan_high;
- return z;
- }
- if ( aExp == 0 ) {
- if ( aSig0 == 0 ) return packFloatx80( 0, 0, 0 );
- normalizeFloatx80Subnormal( aSig0, &aExp, &aSig0 );
- }
- zExp = ( ( aExp - 0x3FFF )>>1 ) + 0x3FFF;
- zSig0 = estimateSqrt32( aExp, aSig0>>32 );
- shift128Right( aSig0, 0, 2 + ( aExp & 1 ), &aSig0, &aSig1 );
- zSig0 = estimateDiv128To64( aSig0, aSig1, zSig0<<32 ) + ( zSig0<<30 );
- doubleZSig0 = zSig0<<1;
- mul64To128( zSig0, zSig0, &term0, &term1 );
- sub128( aSig0, aSig1, term0, term1, &rem0, &rem1 );
- while ( (sbits64) rem0 < 0 ) {
- --zSig0;
- doubleZSig0 -= 2;
- add128( rem0, rem1, zSig0>>63, doubleZSig0 | 1, &rem0, &rem1 );
- }
- zSig1 = estimateDiv128To64( rem1, 0, doubleZSig0 );
- if ( ( zSig1 & LIT64( 0x3FFFFFFFFFFFFFFF ) ) <= 5 ) {
- if ( zSig1 == 0 ) zSig1 = 1;
- mul64To128( doubleZSig0, zSig1, &term1, &term2 );
- sub128( rem1, 0, term1, term2, &rem1, &rem2 );
- mul64To128( zSig1, zSig1, &term2, &term3 );
- sub192( rem1, rem2, 0, 0, term2, term3, &rem1, &rem2, &rem3 );
- while ( (sbits64) rem1 < 0 ) {
- --zSig1;
- shortShift128Left( 0, zSig1, 1, &term2, &term3 );
- term3 |= 1;
- term2 |= doubleZSig0;
- add192( rem1, rem2, rem3, 0, term2, term3, &rem1, &rem2, &rem3 );
- }
- zSig1 |= ( ( rem1 | rem2 | rem3 ) != 0 );
- }
- shortShift128Left( 0, zSig1, 1, &zSig0, &zSig1 );
- zSig0 |= doubleZSig0;
- return
- roundAndPackFloatx80(
- floatx80_rounding_precision, 0, zExp, zSig0, zSig1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the extended double-precision floating-point value `a' is
-equal to the corresponding value `b', and 0 otherwise. The comparison is
-performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag floatx80_eq( floatx80 a, floatx80 b )
-{
-
- if ( ( ( extractFloatx80Exp( a ) == 0x7FFF )
- && (bits64) ( extractFloatx80Frac( a )<<1 ) )
- || ( ( extractFloatx80Exp( b ) == 0x7FFF )
- && (bits64) ( extractFloatx80Frac( b )<<1 ) )
- ) {
- if ( floatx80_is_signaling_nan( a )
- || floatx80_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- return
- ( a.low == b.low )
- && ( ( a.high == b.high )
- || ( ( a.low == 0 )
- && ( (bits16) ( ( a.high | b.high )<<1 ) == 0 ) )
- );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the extended double-precision floating-point value `a' is
-less than or equal to the corresponding value `b', and 0 otherwise. The
-comparison is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag floatx80_le( floatx80 a, floatx80 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloatx80Exp( a ) == 0x7FFF )
- && (bits64) ( extractFloatx80Frac( a )<<1 ) )
- || ( ( extractFloatx80Exp( b ) == 0x7FFF )
- && (bits64) ( extractFloatx80Frac( b )<<1 ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- aSign = extractFloatx80Sign( a );
- bSign = extractFloatx80Sign( b );
- if ( aSign != bSign ) {
- return
- aSign
- || ( ( ( (bits16) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )
- == 0 );
- }
- return
- aSign ? le128( b.high, b.low, a.high, a.low )
- : le128( a.high, a.low, b.high, b.low );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the extended double-precision floating-point value `a' is
-less than the corresponding value `b', and 0 otherwise. The comparison
-is performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag floatx80_lt( floatx80 a, floatx80 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloatx80Exp( a ) == 0x7FFF )
- && (bits64) ( extractFloatx80Frac( a )<<1 ) )
- || ( ( extractFloatx80Exp( b ) == 0x7FFF )
- && (bits64) ( extractFloatx80Frac( b )<<1 ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- aSign = extractFloatx80Sign( a );
- bSign = extractFloatx80Sign( b );
- if ( aSign != bSign ) {
- return
- aSign
- && ( ( ( (bits16) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )
- != 0 );
- }
- return
- aSign ? lt128( b.high, b.low, a.high, a.low )
- : lt128( a.high, a.low, b.high, b.low );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the extended double-precision floating-point value `a' is equal
-to the corresponding value `b', and 0 otherwise. The invalid exception is
-raised if either operand is a NaN. Otherwise, the comparison is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag floatx80_eq_signaling( floatx80 a, floatx80 b )
-{
-
- if ( ( ( extractFloatx80Exp( a ) == 0x7FFF )
- && (bits64) ( extractFloatx80Frac( a )<<1 ) )
- || ( ( extractFloatx80Exp( b ) == 0x7FFF )
- && (bits64) ( extractFloatx80Frac( b )<<1 ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- return
- ( a.low == b.low )
- && ( ( a.high == b.high )
- || ( ( a.low == 0 )
- && ( (bits16) ( ( a.high | b.high )<<1 ) == 0 ) )
- );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the extended double-precision floating-point value `a' is less
-than or equal to the corresponding value `b', and 0 otherwise. Quiet NaNs
-do not cause an exception. Otherwise, the comparison is performed according
-to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag floatx80_le_quiet( floatx80 a, floatx80 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloatx80Exp( a ) == 0x7FFF )
- && (bits64) ( extractFloatx80Frac( a )<<1 ) )
- || ( ( extractFloatx80Exp( b ) == 0x7FFF )
- && (bits64) ( extractFloatx80Frac( b )<<1 ) )
- ) {
- if ( floatx80_is_signaling_nan( a )
- || floatx80_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- aSign = extractFloatx80Sign( a );
- bSign = extractFloatx80Sign( b );
- if ( aSign != bSign ) {
- return
- aSign
- || ( ( ( (bits16) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )
- == 0 );
- }
- return
- aSign ? le128( b.high, b.low, a.high, a.low )
- : le128( a.high, a.low, b.high, b.low );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the extended double-precision floating-point value `a' is less
-than the corresponding value `b', and 0 otherwise. Quiet NaNs do not cause
-an exception. Otherwise, the comparison is performed according to the
-IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag floatx80_lt_quiet( floatx80 a, floatx80 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloatx80Exp( a ) == 0x7FFF )
- && (bits64) ( extractFloatx80Frac( a )<<1 ) )
- || ( ( extractFloatx80Exp( b ) == 0x7FFF )
- && (bits64) ( extractFloatx80Frac( b )<<1 ) )
- ) {
- if ( floatx80_is_signaling_nan( a )
- || floatx80_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- aSign = extractFloatx80Sign( a );
- bSign = extractFloatx80Sign( b );
- if ( aSign != bSign ) {
- return
- aSign
- && ( ( ( (bits16) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )
- != 0 );
- }
- return
- aSign ? lt128( b.high, b.low, a.high, a.low )
- : lt128( a.high, a.low, b.high, b.low );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the quadruple-precision floating-point
-value `a' to the 32-bit two's complement integer format. The conversion
-is performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic---which means in particular that the conversion is rounded
-according to the current rounding mode. If `a' is a NaN, the largest
-positive integer is returned. Otherwise, if the conversion overflows, the
-largest integer with the same sign as `a' is returned.
--------------------------------------------------------------------------------
-*/
-int32 float128_to_int32( float128 a )
-{
- flag aSign;
- int32 aExp, shiftCount;
- bits64 aSig0, aSig1;
-
- aSig1 = extractFloat128Frac1( a );
- aSig0 = extractFloat128Frac0( a );
- aExp = extractFloat128Exp( a );
- aSign = extractFloat128Sign( a );
- if ( ( aExp == 0x7FFF ) && ( aSig0 | aSig1 ) ) aSign = 0;
- if ( aExp ) aSig0 |= LIT64( 0x0001000000000000 );
- aSig0 |= ( aSig1 != 0 );
- shiftCount = 0x4028 - aExp;
- if ( 0 < shiftCount ) shift64RightJamming( aSig0, shiftCount, &aSig0 );
- return roundAndPackInt32( aSign, aSig0 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the quadruple-precision floating-point
-value `a' to the 32-bit two's complement integer format. The conversion
-is performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic, except that the conversion is always rounded toward zero. If
-`a' is a NaN, the largest positive integer is returned. Otherwise, if the
-conversion overflows, the largest integer with the same sign as `a' is
-returned.
--------------------------------------------------------------------------------
-*/
-int32 float128_to_int32_round_to_zero( float128 a )
-{
- flag aSign;
- int32 aExp, shiftCount;
- bits64 aSig0, aSig1, savedASig;
- int32 z;
-
- aSig1 = extractFloat128Frac1( a );
- aSig0 = extractFloat128Frac0( a );
- aExp = extractFloat128Exp( a );
- aSign = extractFloat128Sign( a );
- aSig0 |= ( aSig1 != 0 );
- if ( 0x401E < aExp ) {
- if ( ( aExp == 0x7FFF ) && aSig0 ) aSign = 0;
- goto invalid;
- }
- else if ( aExp < 0x3FFF ) {
- if ( aExp || aSig0 ) set_float_exception_inexact_flag();
- return 0;
- }
- aSig0 |= LIT64( 0x0001000000000000 );
- shiftCount = 0x402F - aExp;
- savedASig = aSig0;
- aSig0 >>= shiftCount;
- z = (int32)aSig0;
- if ( aSign ) z = - z;
- if ( ( z < 0 ) ^ aSign ) {
- invalid:
- float_raise( float_flag_invalid );
- return aSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;
- }
- if ( ( aSig0<<shiftCount ) != savedASig ) {
- set_float_exception_inexact_flag();
- }
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the quadruple-precision floating-point
-value `a' to the 64-bit two's complement integer format. The conversion
-is performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic---which means in particular that the conversion is rounded
-according to the current rounding mode. If `a' is a NaN, the largest
-positive integer is returned. Otherwise, if the conversion overflows, the
-largest integer with the same sign as `a' is returned.
--------------------------------------------------------------------------------
-*/
-int64 float128_to_int64( float128 a )
-{
- flag aSign;
- int32 aExp, shiftCount;
- bits64 aSig0, aSig1;
-
- aSig1 = extractFloat128Frac1( a );
- aSig0 = extractFloat128Frac0( a );
- aExp = extractFloat128Exp( a );
- aSign = extractFloat128Sign( a );
- if ( aExp ) aSig0 |= LIT64( 0x0001000000000000 );
- shiftCount = 0x402F - aExp;
- if ( shiftCount <= 0 ) {
- if ( 0x403E < aExp ) {
- float_raise( float_flag_invalid );
- if ( ! aSign
- || ( ( aExp == 0x7FFF )
- && ( aSig1 || ( aSig0 != LIT64( 0x0001000000000000 ) ) )
- )
- ) {
- return LIT64( 0x7FFFFFFFFFFFFFFF );
- }
- return (sbits64) LIT64( 0x8000000000000000 );
- }
- shortShift128Left( aSig0, aSig1, - shiftCount, &aSig0, &aSig1 );
- }
- else {
- shift64ExtraRightJamming( aSig0, aSig1, shiftCount, &aSig0, &aSig1 );
- }
- return roundAndPackInt64( aSign, aSig0, aSig1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the quadruple-precision floating-point
-value `a' to the 64-bit two's complement integer format. The conversion
-is performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic, except that the conversion is always rounded toward zero.
-If `a' is a NaN, the largest positive integer is returned. Otherwise, if
-the conversion overflows, the largest integer with the same sign as `a' is
-returned.
--------------------------------------------------------------------------------
-*/
-int64 float128_to_int64_round_to_zero( float128 a )
-{
- flag aSign;
- int32 aExp, shiftCount;
- bits64 aSig0, aSig1;
- int64 z;
-
- aSig1 = extractFloat128Frac1( a );
- aSig0 = extractFloat128Frac0( a );
- aExp = extractFloat128Exp( a );
- aSign = extractFloat128Sign( a );
- if ( aExp ) aSig0 |= LIT64( 0x0001000000000000 );
- shiftCount = aExp - 0x402F;
- if ( 0 < shiftCount ) {
- if ( 0x403E <= aExp ) {
- aSig0 &= LIT64( 0x0000FFFFFFFFFFFF );
- if ( ( a.high == LIT64( 0xC03E000000000000 ) )
- && ( aSig1 < LIT64( 0x0002000000000000 ) ) ) {
- if ( aSig1 ) set_float_exception_inexact_flag();
- }
- else {
- float_raise( float_flag_invalid );
- if ( ! aSign || ( ( aExp == 0x7FFF ) && ( aSig0 | aSig1 ) ) ) {
- return LIT64( 0x7FFFFFFFFFFFFFFF );
- }
- }
- return (sbits64) LIT64( 0x8000000000000000 );
- }
- z = ( aSig0<<shiftCount ) | ( aSig1>>( ( - shiftCount ) & 63 ) );
- if ( (bits64) ( aSig1<<shiftCount ) ) {
- set_float_exception_inexact_flag();
- }
- }
- else {
- if ( aExp < 0x3FFF ) {
- if ( aExp | aSig0 | aSig1 ) {
- set_float_exception_inexact_flag();
- }
- return 0;
- }
- z = aSig0>>( - shiftCount );
- if ( aSig1
- || ( shiftCount && (bits64) ( aSig0<<( shiftCount & 63 ) ) ) ) {
- set_float_exception_inexact_flag();
- }
- }
- if ( aSign ) z = - z;
- return z;
-
-}
-
-#if (defined(SOFTFLOATSPARC64_FOR_GCC) || defined(SOFTFLOAT_FOR_GCC)) \
- && defined(SOFTFLOAT_NEED_FIXUNS)
-/*
- * just like above - but do not care for overflow of signed results
- */
-uint64 float128_to_uint64_round_to_zero( float128 a )
-{
- flag aSign;
- int32 aExp, shiftCount;
- bits64 aSig0, aSig1;
- uint64 z;
-
- aSig1 = extractFloat128Frac1( a );
- aSig0 = extractFloat128Frac0( a );
- aExp = extractFloat128Exp( a );
- aSign = extractFloat128Sign( a );
- if ( aExp ) aSig0 |= LIT64( 0x0001000000000000 );
- shiftCount = aExp - 0x402F;
- if ( 0 < shiftCount ) {
- if ( 0x403F <= aExp ) {
- aSig0 &= LIT64( 0x0000FFFFFFFFFFFF );
- if ( ( a.high == LIT64( 0xC03E000000000000 ) )
- && ( aSig1 < LIT64( 0x0002000000000000 ) ) ) {
- if ( aSig1 ) set_float_exception_inexact_flag();
- }
- else {
- float_raise( float_flag_invalid );
- }
- return LIT64( 0xFFFFFFFFFFFFFFFF );
- }
- z = ( aSig0<<shiftCount ) | ( aSig1>>( ( - shiftCount ) & 63 ) );
- if ( (bits64) ( aSig1<<shiftCount ) ) {
- set_float_exception_inexact_flag();
- }
- }
- else {
- if ( aExp < 0x3FFF ) {
- if ( aExp | aSig0 | aSig1 ) {
- set_float_exception_inexact_flag();
- }
- return 0;
- }
- z = aSig0>>( - shiftCount );
- if (aSig1 || ( shiftCount && (bits64) ( aSig0<<( shiftCount & 63 ) ) ) ) {
- set_float_exception_inexact_flag();
- }
- }
- if ( aSign ) z = - z;
- return z;
-
-}
-#endif /* (SOFTFLOATSPARC64_FOR_GCC || SOFTFLOAT_FOR_GCC) && SOFTFLOAT_NEED_FIXUNS */
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the quadruple-precision floating-point
-value `a' to the single-precision floating-point format. The conversion
-is performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-float32 float128_to_float32( float128 a )
-{
- flag aSign;
- int32 aExp;
- bits64 aSig0, aSig1;
- bits32 zSig;
-
- aSig1 = extractFloat128Frac1( a );
- aSig0 = extractFloat128Frac0( a );
- aExp = extractFloat128Exp( a );
- aSign = extractFloat128Sign( a );
- if ( aExp == 0x7FFF ) {
- if ( aSig0 | aSig1 ) {
- return commonNaNToFloat32( float128ToCommonNaN( a ) );
- }
- return packFloat32( aSign, 0xFF, 0 );
- }
- aSig0 |= ( aSig1 != 0 );
- shift64RightJamming( aSig0, 18, &aSig0 );
- zSig = (bits32)aSig0;
- if ( aExp || zSig ) {
- zSig |= 0x40000000;
- aExp -= 0x3F81;
- }
- return roundAndPackFloat32( aSign, aExp, zSig );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the quadruple-precision floating-point
-value `a' to the double-precision floating-point format. The conversion
-is performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-float64 float128_to_float64( float128 a )
-{
- flag aSign;
- int32 aExp;
- bits64 aSig0, aSig1;
-
- aSig1 = extractFloat128Frac1( a );
- aSig0 = extractFloat128Frac0( a );
- aExp = extractFloat128Exp( a );
- aSign = extractFloat128Sign( a );
- if ( aExp == 0x7FFF ) {
- if ( aSig0 | aSig1 ) {
- return commonNaNToFloat64( float128ToCommonNaN( a ) );
- }
- return packFloat64( aSign, 0x7FF, 0 );
- }
- shortShift128Left( aSig0, aSig1, 14, &aSig0, &aSig1 );
- aSig0 |= ( aSig1 != 0 );
- if ( aExp || aSig0 ) {
- aSig0 |= LIT64( 0x4000000000000000 );
- aExp -= 0x3C01;
- }
- return roundAndPackFloat64( aSign, aExp, aSig0 );
-
-}
-
-#ifdef FLOATX80
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the quadruple-precision floating-point
-value `a' to the extended double-precision floating-point format. The
-conversion is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-floatx80 float128_to_floatx80( float128 a )
-{
- flag aSign;
- int32 aExp;
- bits64 aSig0, aSig1;
-
- aSig1 = extractFloat128Frac1( a );
- aSig0 = extractFloat128Frac0( a );
- aExp = extractFloat128Exp( a );
- aSign = extractFloat128Sign( a );
- if ( aExp == 0x7FFF ) {
- if ( aSig0 | aSig1 ) {
- return commonNaNToFloatx80( float128ToCommonNaN( a ) );
- }
- return packFloatx80( aSign, 0x7FFF, LIT64( 0x8000000000000000 ) );
- }
- if ( aExp == 0 ) {
- if ( ( aSig0 | aSig1 ) == 0 ) return packFloatx80( aSign, 0, 0 );
- normalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );
- }
- else {
- aSig0 |= LIT64( 0x0001000000000000 );
- }
- shortShift128Left( aSig0, aSig1, 15, &aSig0, &aSig1 );
- return roundAndPackFloatx80( 80, aSign, aExp, aSig0, aSig1 );
-
-}
-
-#endif
-
-/*
--------------------------------------------------------------------------------
-Rounds the quadruple-precision floating-point value `a' to an integer, and
-returns the result as a quadruple-precision floating-point value. The
-operation is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float128 float128_round_to_int( float128 a )
-{
- flag aSign;
- int32 aExp;
- bits64 lastBitMask, roundBitsMask;
- int8 roundingMode;
- float128 z;
-
- aExp = extractFloat128Exp( a );
- if ( 0x402F <= aExp ) {
- if ( 0x406F <= aExp ) {
- if ( ( aExp == 0x7FFF )
- && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) )
- ) {
- return propagateFloat128NaN( a, a );
- }
- return a;
- }
- lastBitMask = 1;
- lastBitMask = ( lastBitMask<<( 0x406E - aExp ) )<<1;
- roundBitsMask = lastBitMask - 1;
- z = a;
- roundingMode = float_rounding_mode;
- if ( roundingMode == float_round_nearest_even ) {
- if ( lastBitMask ) {
- add128( z.high, z.low, 0, lastBitMask>>1, &z.high, &z.low );
- if ( ( z.low & roundBitsMask ) == 0 ) z.low &= ~ lastBitMask;
- }
- else {
- if ( (sbits64) z.low < 0 ) {
- ++z.high;
- if ( (bits64) ( z.low<<1 ) == 0 ) z.high &= ~1;
- }
- }
- }
- else if ( roundingMode != float_round_to_zero ) {
- if ( extractFloat128Sign( z )
- ^ ( roundingMode == float_round_up ) ) {
- add128( z.high, z.low, 0, roundBitsMask, &z.high, &z.low );
- }
- }
- z.low &= ~ roundBitsMask;
- }
- else {
- if ( aExp < 0x3FFF ) {
- if ( ( ( (bits64) ( a.high<<1 ) ) | a.low ) == 0 ) return a;
- set_float_exception_inexact_flag();
- aSign = extractFloat128Sign( a );
- switch ( float_rounding_mode ) {
- case float_round_nearest_even:
- if ( ( aExp == 0x3FFE )
- && ( extractFloat128Frac0( a )
- | extractFloat128Frac1( a ) )
- ) {
- return packFloat128( aSign, 0x3FFF, 0, 0 );
- }
- break;
- case float_round_to_zero:
- break;
- case float_round_down:
- return
- aSign ? packFloat128( 1, 0x3FFF, 0, 0 )
- : packFloat128( 0, 0, 0, 0 );
- case float_round_up:
- return
- aSign ? packFloat128( 1, 0, 0, 0 )
- : packFloat128( 0, 0x3FFF, 0, 0 );
- }
- return packFloat128( aSign, 0, 0, 0 );
- }
- lastBitMask = 1;
- lastBitMask <<= 0x402F - aExp;
- roundBitsMask = lastBitMask - 1;
- z.low = 0;
- z.high = a.high;
- roundingMode = float_rounding_mode;
- if ( roundingMode == float_round_nearest_even ) {
- z.high += lastBitMask>>1;
- if ( ( ( z.high & roundBitsMask ) | a.low ) == 0 ) {
- z.high &= ~ lastBitMask;
- }
- }
- else if ( roundingMode != float_round_to_zero ) {
- if ( extractFloat128Sign( z )
- ^ ( roundingMode == float_round_up ) ) {
- z.high |= ( a.low != 0 );
- z.high += roundBitsMask;
- }
- }
- z.high &= ~ roundBitsMask;
- }
- if ( ( z.low != a.low ) || ( z.high != a.high ) ) {
- set_float_exception_inexact_flag();
- }
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of adding the absolute values of the quadruple-precision
-floating-point values `a' and `b'. If `zSign' is 1, the sum is negated
-before being returned. `zSign' is ignored if the result is a NaN.
-The addition is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static float128 addFloat128Sigs( float128 a, float128 b, flag zSign )
-{
- int32 aExp, bExp, zExp;
- bits64 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2;
- int32 expDiff;
-
- aSig1 = extractFloat128Frac1( a );
- aSig0 = extractFloat128Frac0( a );
- aExp = extractFloat128Exp( a );
- bSig1 = extractFloat128Frac1( b );
- bSig0 = extractFloat128Frac0( b );
- bExp = extractFloat128Exp( b );
- expDiff = aExp - bExp;
- if ( 0 < expDiff ) {
- if ( aExp == 0x7FFF ) {
- if ( aSig0 | aSig1 ) return propagateFloat128NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) {
- --expDiff;
- }
- else {
- bSig0 |= LIT64( 0x0001000000000000 );
- }
- shift128ExtraRightJamming(
- bSig0, bSig1, 0, expDiff, &bSig0, &bSig1, &zSig2 );
- zExp = aExp;
- }
- else if ( expDiff < 0 ) {
- if ( bExp == 0x7FFF ) {
- if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );
- return packFloat128( zSign, 0x7FFF, 0, 0 );
- }
- if ( aExp == 0 ) {
- ++expDiff;
- }
- else {
- aSig0 |= LIT64( 0x0001000000000000 );
- }
- shift128ExtraRightJamming(
- aSig0, aSig1, 0, - expDiff, &aSig0, &aSig1, &zSig2 );
- zExp = bExp;
- }
- else {
- if ( aExp == 0x7FFF ) {
- if ( aSig0 | aSig1 | bSig0 | bSig1 ) {
- return propagateFloat128NaN( a, b );
- }
- return a;
- }
- add128( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 );
- if ( aExp == 0 ) return packFloat128( zSign, 0, zSig0, zSig1 );
- zSig2 = 0;
- zSig0 |= LIT64( 0x0002000000000000 );
- zExp = aExp;
- goto shiftRight1;
- }
- aSig0 |= LIT64( 0x0001000000000000 );
- add128( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 );
- --zExp;
- if ( zSig0 < LIT64( 0x0002000000000000 ) ) goto roundAndPack;
- ++zExp;
- shiftRight1:
- shift128ExtraRightJamming(
- zSig0, zSig1, zSig2, 1, &zSig0, &zSig1, &zSig2 );
- roundAndPack:
- return roundAndPackFloat128( zSign, zExp, zSig0, zSig1, zSig2 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of subtracting the absolute values of the quadruple-
-precision floating-point values `a' and `b'. If `zSign' is 1, the
-difference is negated before being returned. `zSign' is ignored if the
-result is a NaN. The subtraction is performed according to the IEC/IEEE
-Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-static float128 subFloat128Sigs( float128 a, float128 b, flag zSign )
-{
- int32 aExp, bExp, zExp;
- bits64 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1;
- int32 expDiff;
- float128 z;
-
- aSig1 = extractFloat128Frac1( a );
- aSig0 = extractFloat128Frac0( a );
- aExp = extractFloat128Exp( a );
- bSig1 = extractFloat128Frac1( b );
- bSig0 = extractFloat128Frac0( b );
- bExp = extractFloat128Exp( b );
- expDiff = aExp - bExp;
- shortShift128Left( aSig0, aSig1, 14, &aSig0, &aSig1 );
- shortShift128Left( bSig0, bSig1, 14, &bSig0, &bSig1 );
- if ( 0 < expDiff ) goto aExpBigger;
- if ( expDiff < 0 ) goto bExpBigger;
- if ( aExp == 0x7FFF ) {
- if ( aSig0 | aSig1 | bSig0 | bSig1 ) {
- return propagateFloat128NaN( a, b );
- }
- float_raise( float_flag_invalid );
- z.low = float128_default_nan_low;
- z.high = float128_default_nan_high;
- return z;
- }
- if ( aExp == 0 ) {
- aExp = 1;
- bExp = 1;
- }
- if ( bSig0 < aSig0 ) goto aBigger;
- if ( aSig0 < bSig0 ) goto bBigger;
- if ( bSig1 < aSig1 ) goto aBigger;
- if ( aSig1 < bSig1 ) goto bBigger;
- return packFloat128( float_rounding_mode == float_round_down, 0, 0, 0 );
- bExpBigger:
- if ( bExp == 0x7FFF ) {
- if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );
- return packFloat128( zSign ^ 1, 0x7FFF, 0, 0 );
- }
- if ( aExp == 0 ) {
- ++expDiff;
- }
- else {
- aSig0 |= LIT64( 0x4000000000000000 );
- }
- shift128RightJamming( aSig0, aSig1, - expDiff, &aSig0, &aSig1 );
- bSig0 |= LIT64( 0x4000000000000000 );
- bBigger:
- sub128( bSig0, bSig1, aSig0, aSig1, &zSig0, &zSig1 );
- zExp = bExp;
- zSign ^= 1;
- goto normalizeRoundAndPack;
- aExpBigger:
- if ( aExp == 0x7FFF ) {
- if ( aSig0 | aSig1 ) return propagateFloat128NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) {
- --expDiff;
- }
- else {
- bSig0 |= LIT64( 0x4000000000000000 );
- }
- shift128RightJamming( bSig0, bSig1, expDiff, &bSig0, &bSig1 );
- aSig0 |= LIT64( 0x4000000000000000 );
- aBigger:
- sub128( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 );
- zExp = aExp;
- normalizeRoundAndPack:
- --zExp;
- return normalizeRoundAndPackFloat128( zSign, zExp - 14, zSig0, zSig1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of adding the quadruple-precision floating-point values
-`a' and `b'. The operation is performed according to the IEC/IEEE Standard
-for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float128 float128_add( float128 a, float128 b )
-{
- flag aSign, bSign;
-
- aSign = extractFloat128Sign( a );
- bSign = extractFloat128Sign( b );
- if ( aSign == bSign ) {
- return addFloat128Sigs( a, b, aSign );
- }
- else {
- return subFloat128Sigs( a, b, aSign );
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of subtracting the quadruple-precision floating-point
-values `a' and `b'. The operation is performed according to the IEC/IEEE
-Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float128 float128_sub( float128 a, float128 b )
-{
- flag aSign, bSign;
-
- aSign = extractFloat128Sign( a );
- bSign = extractFloat128Sign( b );
- if ( aSign == bSign ) {
- return subFloat128Sigs( a, b, aSign );
- }
- else {
- return addFloat128Sigs( a, b, aSign );
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of multiplying the quadruple-precision floating-point
-values `a' and `b'. The operation is performed according to the IEC/IEEE
-Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float128 float128_mul( float128 a, float128 b )
-{
- flag aSign, bSign, zSign;
- int32 aExp, bExp, zExp;
- bits64 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2, zSig3;
- float128 z;
-
- aSig1 = extractFloat128Frac1( a );
- aSig0 = extractFloat128Frac0( a );
- aExp = extractFloat128Exp( a );
- aSign = extractFloat128Sign( a );
- bSig1 = extractFloat128Frac1( b );
- bSig0 = extractFloat128Frac0( b );
- bExp = extractFloat128Exp( b );
- bSign = extractFloat128Sign( b );
- zSign = aSign ^ bSign;
- if ( aExp == 0x7FFF ) {
- if ( ( aSig0 | aSig1 )
- || ( ( bExp == 0x7FFF ) && ( bSig0 | bSig1 ) ) ) {
- return propagateFloat128NaN( a, b );
- }
- if ( ( bExp | bSig0 | bSig1 ) == 0 ) goto invalid;
- return packFloat128( zSign, 0x7FFF, 0, 0 );
- }
- if ( bExp == 0x7FFF ) {
- if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );
- if ( ( aExp | aSig0 | aSig1 ) == 0 ) {
- invalid:
- float_raise( float_flag_invalid );
- z.low = float128_default_nan_low;
- z.high = float128_default_nan_high;
- return z;
- }
- return packFloat128( zSign, 0x7FFF, 0, 0 );
- }
- if ( aExp == 0 ) {
- if ( ( aSig0 | aSig1 ) == 0 ) return packFloat128( zSign, 0, 0, 0 );
- normalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );
- }
- if ( bExp == 0 ) {
- if ( ( bSig0 | bSig1 ) == 0 ) return packFloat128( zSign, 0, 0, 0 );
- normalizeFloat128Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 );
- }
- zExp = aExp + bExp - 0x4000;
- aSig0 |= LIT64( 0x0001000000000000 );
- shortShift128Left( bSig0, bSig1, 16, &bSig0, &bSig1 );
- mul128To256( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1, &zSig2, &zSig3 );
- add128( zSig0, zSig1, aSig0, aSig1, &zSig0, &zSig1 );
- zSig2 |= ( zSig3 != 0 );
- if ( LIT64( 0x0002000000000000 ) <= zSig0 ) {
- shift128ExtraRightJamming(
- zSig0, zSig1, zSig2, 1, &zSig0, &zSig1, &zSig2 );
- ++zExp;
- }
- return roundAndPackFloat128( zSign, zExp, zSig0, zSig1, zSig2 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of dividing the quadruple-precision floating-point value
-`a' by the corresponding value `b'. The operation is performed according to
-the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float128 float128_div( float128 a, float128 b )
-{
- flag aSign, bSign, zSign;
- int32 aExp, bExp, zExp;
- bits64 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2;
- bits64 rem0, rem1, rem2, rem3, term0, term1, term2, term3;
- float128 z;
-
- aSig1 = extractFloat128Frac1( a );
- aSig0 = extractFloat128Frac0( a );
- aExp = extractFloat128Exp( a );
- aSign = extractFloat128Sign( a );
- bSig1 = extractFloat128Frac1( b );
- bSig0 = extractFloat128Frac0( b );
- bExp = extractFloat128Exp( b );
- bSign = extractFloat128Sign( b );
- zSign = aSign ^ bSign;
- if ( aExp == 0x7FFF ) {
- if ( aSig0 | aSig1 ) return propagateFloat128NaN( a, b );
- if ( bExp == 0x7FFF ) {
- if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );
- goto invalid;
- }
- return packFloat128( zSign, 0x7FFF, 0, 0 );
- }
- if ( bExp == 0x7FFF ) {
- if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );
- return packFloat128( zSign, 0, 0, 0 );
- }
- if ( bExp == 0 ) {
- if ( ( bSig0 | bSig1 ) == 0 ) {
- if ( ( aExp | aSig0 | aSig1 ) == 0 ) {
- invalid:
- float_raise( float_flag_invalid );
- z.low = float128_default_nan_low;
- z.high = float128_default_nan_high;
- return z;
- }
- float_raise( float_flag_divbyzero );
- return packFloat128( zSign, 0x7FFF, 0, 0 );
- }
- normalizeFloat128Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 );
- }
- if ( aExp == 0 ) {
- if ( ( aSig0 | aSig1 ) == 0 ) return packFloat128( zSign, 0, 0, 0 );
- normalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );
- }
- zExp = aExp - bExp + 0x3FFD;
- shortShift128Left(
- aSig0 | LIT64( 0x0001000000000000 ), aSig1, 15, &aSig0, &aSig1 );
- shortShift128Left(
- bSig0 | LIT64( 0x0001000000000000 ), bSig1, 15, &bSig0, &bSig1 );
- if ( le128( bSig0, bSig1, aSig0, aSig1 ) ) {
- shift128Right( aSig0, aSig1, 1, &aSig0, &aSig1 );
- ++zExp;
- }
- zSig0 = estimateDiv128To64( aSig0, aSig1, bSig0 );
- mul128By64To192( bSig0, bSig1, zSig0, &term0, &term1, &term2 );
- sub192( aSig0, aSig1, 0, term0, term1, term2, &rem0, &rem1, &rem2 );
- while ( (sbits64) rem0 < 0 ) {
- --zSig0;
- add192( rem0, rem1, rem2, 0, bSig0, bSig1, &rem0, &rem1, &rem2 );
- }
- zSig1 = estimateDiv128To64( rem1, rem2, bSig0 );
- if ( ( zSig1 & 0x3FFF ) <= 4 ) {
- mul128By64To192( bSig0, bSig1, zSig1, &term1, &term2, &term3 );
- sub192( rem1, rem2, 0, term1, term2, term3, &rem1, &rem2, &rem3 );
- while ( (sbits64) rem1 < 0 ) {
- --zSig1;
- add192( rem1, rem2, rem3, 0, bSig0, bSig1, &rem1, &rem2, &rem3 );
- }
- zSig1 |= ( ( rem1 | rem2 | rem3 ) != 0 );
- }
- shift128ExtraRightJamming( zSig0, zSig1, 0, 15, &zSig0, &zSig1, &zSig2 );
- return roundAndPackFloat128( zSign, zExp, zSig0, zSig1, zSig2 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the remainder of the quadruple-precision floating-point value `a'
-with respect to the corresponding value `b'. The operation is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float128 float128_rem( float128 a, float128 b )
-{
- flag aSign, zSign;
- int32 aExp, bExp, expDiff;
- bits64 aSig0, aSig1, bSig0, bSig1, q, term0, term1, term2;
- bits64 allZero, alternateASig0, alternateASig1, sigMean1;
- sbits64 sigMean0;
- float128 z;
-
- aSig1 = extractFloat128Frac1( a );
- aSig0 = extractFloat128Frac0( a );
- aExp = extractFloat128Exp( a );
- aSign = extractFloat128Sign( a );
- bSig1 = extractFloat128Frac1( b );
- bSig0 = extractFloat128Frac0( b );
- bExp = extractFloat128Exp( b );
- if ( aExp == 0x7FFF ) {
- if ( ( aSig0 | aSig1 )
- || ( ( bExp == 0x7FFF ) && ( bSig0 | bSig1 ) ) ) {
- return propagateFloat128NaN( a, b );
- }
- goto invalid;
- }
- if ( bExp == 0x7FFF ) {
- if ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );
- return a;
- }
- if ( bExp == 0 ) {
- if ( ( bSig0 | bSig1 ) == 0 ) {
- invalid:
- float_raise( float_flag_invalid );
- z.low = float128_default_nan_low;
- z.high = float128_default_nan_high;
- return z;
- }
- normalizeFloat128Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 );
- }
- if ( aExp == 0 ) {
- if ( ( aSig0 | aSig1 ) == 0 ) return a;
- normalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );
- }
- expDiff = aExp - bExp;
- if ( expDiff < -1 ) return a;
- shortShift128Left(
- aSig0 | LIT64( 0x0001000000000000 ),
- aSig1,
- 15 - ( expDiff < 0 ),
- &aSig0,
- &aSig1
- );
- shortShift128Left(
- bSig0 | LIT64( 0x0001000000000000 ), bSig1, 15, &bSig0, &bSig1 );
- q = le128( bSig0, bSig1, aSig0, aSig1 );
- if ( q ) sub128( aSig0, aSig1, bSig0, bSig1, &aSig0, &aSig1 );
- expDiff -= 64;
- while ( 0 < expDiff ) {
- q = estimateDiv128To64( aSig0, aSig1, bSig0 );
- q = ( 4 < q ) ? q - 4 : 0;
- mul128By64To192( bSig0, bSig1, q, &term0, &term1, &term2 );
- shortShift192Left( term0, term1, term2, 61, &term1, &term2, &allZero );
- shortShift128Left( aSig0, aSig1, 61, &aSig0, &allZero );
- sub128( aSig0, 0, term1, term2, &aSig0, &aSig1 );
- expDiff -= 61;
- }
- if ( -64 < expDiff ) {
- q = estimateDiv128To64( aSig0, aSig1, bSig0 );
- q = ( 4 < q ) ? q - 4 : 0;
- q >>= - expDiff;
- shift128Right( bSig0, bSig1, 12, &bSig0, &bSig1 );
- expDiff += 52;
- if ( expDiff < 0 ) {
- shift128Right( aSig0, aSig1, - expDiff, &aSig0, &aSig1 );
- }
- else {
- shortShift128Left( aSig0, aSig1, expDiff, &aSig0, &aSig1 );
- }
- mul128By64To192( bSig0, bSig1, q, &term0, &term1, &term2 );
- sub128( aSig0, aSig1, term1, term2, &aSig0, &aSig1 );
- }
- else {
- shift128Right( aSig0, aSig1, 12, &aSig0, &aSig1 );
- shift128Right( bSig0, bSig1, 12, &bSig0, &bSig1 );
- }
- do {
- alternateASig0 = aSig0;
- alternateASig1 = aSig1;
- ++q;
- sub128( aSig0, aSig1, bSig0, bSig1, &aSig0, &aSig1 );
- } while ( 0 <= (sbits64) aSig0 );
- add128(
- aSig0, aSig1, alternateASig0, alternateASig1, (bits64 *)&sigMean0, &sigMean1 );
- if ( ( sigMean0 < 0 )
- || ( ( ( sigMean0 | sigMean1 ) == 0 ) && ( q & 1 ) ) ) {
- aSig0 = alternateASig0;
- aSig1 = alternateASig1;
- }
- zSign = ( (sbits64) aSig0 < 0 );
- if ( zSign ) sub128( 0, 0, aSig0, aSig1, &aSig0, &aSig1 );
- return
- normalizeRoundAndPackFloat128( aSign ^ zSign, bExp - 4, aSig0, aSig1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the square root of the quadruple-precision floating-point value `a'.
-The operation is performed according to the IEC/IEEE Standard for Binary
-Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-float128 float128_sqrt( float128 a )
-{
- flag aSign;
- int32 aExp, zExp;
- bits64 aSig0, aSig1, zSig0, zSig1, zSig2, doubleZSig0;
- bits64 rem0, rem1, rem2, rem3, term0, term1, term2, term3;
- float128 z;
-
- aSig1 = extractFloat128Frac1( a );
- aSig0 = extractFloat128Frac0( a );
- aExp = extractFloat128Exp( a );
- aSign = extractFloat128Sign( a );
- if ( aExp == 0x7FFF ) {
- if ( aSig0 | aSig1 ) return propagateFloat128NaN( a, a );
- if ( ! aSign ) return a;
- goto invalid;
- }
- if ( aSign ) {
- if ( ( aExp | aSig0 | aSig1 ) == 0 ) return a;
- invalid:
- float_raise( float_flag_invalid );
- z.low = float128_default_nan_low;
- z.high = float128_default_nan_high;
- return z;
- }
- if ( aExp == 0 ) {
- if ( ( aSig0 | aSig1 ) == 0 ) return packFloat128( 0, 0, 0, 0 );
- normalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );
- }
- zExp = (int32) ( (aExp - 0x3FFF) >> 1) + 0x3FFE;
- aSig0 |= LIT64( 0x0001000000000000 );
- zSig0 = estimateSqrt32((int16)aExp, (bits32)(aSig0>>17));
- shortShift128Left( aSig0, aSig1, 13 - ( aExp & 1 ), &aSig0, &aSig1 );
- zSig0 = estimateDiv128To64( aSig0, aSig1, zSig0<<32 ) + ( zSig0<<30 );
- doubleZSig0 = zSig0<<1;
- mul64To128( zSig0, zSig0, &term0, &term1 );
- sub128( aSig0, aSig1, term0, term1, &rem0, &rem1 );
- while ( (sbits64) rem0 < 0 ) {
- --zSig0;
- doubleZSig0 -= 2;
- add128( rem0, rem1, zSig0>>63, doubleZSig0 | 1, &rem0, &rem1 );
- }
- zSig1 = estimateDiv128To64( rem1, 0, doubleZSig0 );
- if ( ( zSig1 & 0x1FFF ) <= 5 ) {
- if ( zSig1 == 0 ) zSig1 = 1;
- mul64To128( doubleZSig0, zSig1, &term1, &term2 );
- sub128( rem1, 0, term1, term2, &rem1, &rem2 );
- mul64To128( zSig1, zSig1, &term2, &term3 );
- sub192( rem1, rem2, 0, 0, term2, term3, &rem1, &rem2, &rem3 );
- while ( (sbits64) rem1 < 0 ) {
- --zSig1;
- shortShift128Left( 0, zSig1, 1, &term2, &term3 );
- term3 |= 1;
- term2 |= doubleZSig0;
- add192( rem1, rem2, rem3, 0, term2, term3, &rem1, &rem2, &rem3 );
- }
- zSig1 |= ( ( rem1 | rem2 | rem3 ) != 0 );
- }
- shift128ExtraRightJamming( zSig0, zSig1, 0, 14, &zSig0, &zSig1, &zSig2 );
- return roundAndPackFloat128( 0, zExp, zSig0, zSig1, zSig2 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the quadruple-precision floating-point value `a' is equal to
-the corresponding value `b', and 0 otherwise. The comparison is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float128_eq( float128 a, float128 b )
-{
-
- if ( ( ( extractFloat128Exp( a ) == 0x7FFF )
- && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )
- || ( ( extractFloat128Exp( b ) == 0x7FFF )
- && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )
- ) {
- if ( float128_is_signaling_nan( a )
- || float128_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- return
- ( a.low == b.low )
- && ( ( a.high == b.high )
- || ( ( a.low == 0 )
- && ( (bits64) ( ( a.high | b.high )<<1 ) == 0 ) )
- );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the quadruple-precision floating-point value `a' is less than
-or equal to the corresponding value `b', and 0 otherwise. The comparison
-is performed according to the IEC/IEEE Standard for Binary Floating-Point
-Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float128_le( float128 a, float128 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat128Exp( a ) == 0x7FFF )
- && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )
- || ( ( extractFloat128Exp( b ) == 0x7FFF )
- && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- aSign = extractFloat128Sign( a );
- bSign = extractFloat128Sign( b );
- if ( aSign != bSign ) {
- return
- aSign
- || ( ( ( (bits64) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )
- == 0 );
- }
- return
- aSign ? le128( b.high, b.low, a.high, a.low )
- : le128( a.high, a.low, b.high, b.low );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the quadruple-precision floating-point value `a' is less than
-the corresponding value `b', and 0 otherwise. The comparison is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float128_lt( float128 a, float128 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat128Exp( a ) == 0x7FFF )
- && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )
- || ( ( extractFloat128Exp( b ) == 0x7FFF )
- && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- aSign = extractFloat128Sign( a );
- bSign = extractFloat128Sign( b );
- if ( aSign != bSign ) {
- return
- aSign
- && ( ( ( (bits64) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )
- != 0 );
- }
- return
- aSign ? lt128( b.high, b.low, a.high, a.low )
- : lt128( a.high, a.low, b.high, b.low );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the quadruple-precision floating-point value `a' is equal to
-the corresponding value `b', and 0 otherwise. The invalid exception is
-raised if either operand is a NaN. Otherwise, the comparison is performed
-according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float128_eq_signaling( float128 a, float128 b )
-{
-
- if ( ( ( extractFloat128Exp( a ) == 0x7FFF )
- && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )
- || ( ( extractFloat128Exp( b ) == 0x7FFF )
- && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )
- ) {
- float_raise( float_flag_invalid );
- return 0;
- }
- return
- ( a.low == b.low )
- && ( ( a.high == b.high )
- || ( ( a.low == 0 )
- && ( (bits64) ( ( a.high | b.high )<<1 ) == 0 ) )
- );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the quadruple-precision floating-point value `a' is less than
-or equal to the corresponding value `b', and 0 otherwise. Quiet NaNs do not
-cause an exception. Otherwise, the comparison is performed according to the
-IEC/IEEE Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float128_le_quiet( float128 a, float128 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat128Exp( a ) == 0x7FFF )
- && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )
- || ( ( extractFloat128Exp( b ) == 0x7FFF )
- && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )
- ) {
- if ( float128_is_signaling_nan( a )
- || float128_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- aSign = extractFloat128Sign( a );
- bSign = extractFloat128Sign( b );
- if ( aSign != bSign ) {
- return
- aSign
- || ( ( ( (bits64) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )
- == 0 );
- }
- return
- aSign ? le128( b.high, b.low, a.high, a.low )
- : le128( a.high, a.low, b.high, b.low );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the quadruple-precision floating-point value `a' is less than
-the corresponding value `b', and 0 otherwise. Quiet NaNs do not cause an
-exception. Otherwise, the comparison is performed according to the IEC/IEEE
-Standard for Binary Floating-Point Arithmetic.
--------------------------------------------------------------------------------
-*/
-flag float128_lt_quiet( float128 a, float128 b )
-{
- flag aSign, bSign;
-
- if ( ( ( extractFloat128Exp( a ) == 0x7FFF )
- && ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )
- || ( ( extractFloat128Exp( b ) == 0x7FFF )
- && ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )
- ) {
- if ( float128_is_signaling_nan( a )
- || float128_is_signaling_nan( b ) ) {
- float_raise( float_flag_invalid );
- }
- return 0;
- }
- aSign = extractFloat128Sign( a );
- bSign = extractFloat128Sign( b );
- if ( aSign != bSign ) {
- return
- aSign
- && ( ( ( (bits64) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )
- != 0 );
- }
- return
- aSign ? lt128( b.high, b.low, a.high, a.low )
- : lt128( a.high, a.low, b.high, b.low );
-
-}
-
-#endif
-
-
-#if defined(SOFTFLOAT_FOR_GCC) && defined(SOFTFLOAT_NEED_FIXUNS)
-
-/*
- * These two routines are not part of the original softfloat distribution.
- *
- * They are based on the corresponding conversions to integer but return
- * unsigned numbers instead since these functions are required by GCC.
- *
- * Added by Mark Brinicombe <mark@NetBSD.org> 27/09/97
- *
- * float64 version overhauled for SoftFloat 2a [bjh21 2000-07-15]
- */
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the double-precision floating-point value
-`a' to the 32-bit unsigned integer format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-point
-Arithmetic, except that the conversion is always rounded toward zero. If
-`a' is a NaN, the largest positive integer is returned. If the conversion
-overflows, the largest integer positive is returned.
--------------------------------------------------------------------------------
-*/
-uint32 float64_to_uint32_round_to_zero( float64 a )
-{
- flag aSign;
- int16 aExp, shiftCount;
- bits64 aSig, savedASig;
- uint32 z;
-
- aSig = extractFloat64Frac( a );
- aExp = extractFloat64Exp( a );
- aSign = extractFloat64Sign( a );
-
- if (aSign) {
- float_raise( float_flag_invalid );
- return(0);
- }
-
- if ( 0x41E < aExp ) {
- float_raise( float_flag_invalid );
- return 0xffffffff;
- }
- else if ( aExp < 0x3FF ) {
- if ( aExp || aSig ) set_float_exception_inexact_flag();
- return 0;
- }
- aSig |= LIT64( 0x0010000000000000 );
- shiftCount = 0x433 - aExp;
- savedASig = aSig;
- aSig >>= shiftCount;
- z = (uint32)aSig;
- if ( ( aSig<<shiftCount ) != savedASig ) {
- set_float_exception_inexact_flag();
- }
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the single-precision floating-point value
-`a' to the 32-bit unsigned integer format. The conversion is
-performed according to the IEC/IEEE Standard for Binary Floating-point
-Arithmetic, except that the conversion is always rounded toward zero. If
-`a' is a NaN, the largest positive integer is returned. If the conversion
-overflows, the largest positive integer is returned.
--------------------------------------------------------------------------------
-*/
-uint32 float32_to_uint32_round_to_zero( float32 a )
-{
- flag aSign;
- int16 aExp, shiftCount;
- bits32 aSig;
- uint32 z;
-
- aSig = extractFloat32Frac( a );
- aExp = extractFloat32Exp( a );
- aSign = extractFloat32Sign( a );
- shiftCount = aExp - 0x9E;
-
- if (aSign) {
- float_raise( float_flag_invalid );
- return(0);
- }
- if ( 0 < shiftCount ) {
- float_raise( float_flag_invalid );
- return 0xFFFFFFFF;
- }
- else if ( aExp <= 0x7E ) {
- if ( aExp | aSig ) set_float_exception_inexact_flag();
- return 0;
- }
- aSig = ( aSig | 0x800000 )<<8;
- z = aSig>>( - shiftCount );
- if ( aSig<<( shiftCount & 31 ) ) {
- set_float_exception_inexact_flag();
- }
- return z;
-
-}
-
-#endif
diff --git a/StdLib/LibC/Softfloat/eqdf2.c b/StdLib/LibC/Softfloat/eqdf2.c
deleted file mode 100644
index d76aae30e7..0000000000
--- a/StdLib/LibC/Softfloat/eqdf2.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* $NetBSD: eqdf2.c,v 1.1 2000/06/06 08:15:02 bjh21 Exp $ */
-
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: eqdf2.c,v 1.1 2000/06/06 08:15:02 bjh21 Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-flag __eqdf2(float64, float64);
-
-flag
-__eqdf2(float64 a, float64 b)
-{
-
- /* libgcc1.c says !(a == b) */
- return !float64_eq(a, b);
-}
diff --git a/StdLib/LibC/Softfloat/eqsf2.c b/StdLib/LibC/Softfloat/eqsf2.c
deleted file mode 100644
index 973c85b4b0..0000000000
--- a/StdLib/LibC/Softfloat/eqsf2.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* $NetBSD: eqsf2.c,v 1.1 2000/06/06 08:15:03 bjh21 Exp $ */
-
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: eqsf2.c,v 1.1 2000/06/06 08:15:03 bjh21 Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-flag __eqsf2(float32, float32);
-
-flag
-__eqsf2(float32 a, float32 b)
-{
-
- /* libgcc1.c says !(a == b) */
- return !float32_eq(a, b);
-}
diff --git a/StdLib/LibC/Softfloat/eqtf2.c b/StdLib/LibC/Softfloat/eqtf2.c
deleted file mode 100644
index 6aa1d509f7..0000000000
--- a/StdLib/LibC/Softfloat/eqtf2.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* $NetBSD: eqtf2.c,v 1.1 2011/01/17 10:08:35 matt Exp $ */
-
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-/*
- * Written by Matt Thomas, 2011. This file is in the Public Domain.
- */
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: eqtf2.c,v 1.1 2011/01/17 10:08:35 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#ifdef FLOAT128
-flag __eqtf2(float128, float128);
-
-flag
-__eqtf2(float128 a, float128 b)
-{
-
- /* libgcc1.c says !(a == b) */
- return !float128_eq(a, b);
-}
-#endif /* FLOAT128 */
diff --git a/StdLib/LibC/Softfloat/fpgetmask.c b/StdLib/LibC/Softfloat/fpgetmask.c
deleted file mode 100644
index fe0f623696..0000000000
--- a/StdLib/LibC/Softfloat/fpgetmask.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* $NetBSD: fpgetmask.c,v 1.4 2008/04/28 20:23:00 martin Exp $ */
-
-/*-
- * Copyright (c) 1997 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Neil A. Carson and Mark Brinicombe
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: fpgetmask.c,v 1.4 2008/04/28 20:23:00 martin Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <ieeefp.h>
-#ifdef SOFTFLOAT_FOR_GCC
-#include "softfloat-for-gcc.h"
-#endif
-#include "milieu.h"
-#include "softfloat.h"
-
-#ifdef __weak_alias
-__weak_alias(fpgetmask,_fpgetmask)
-#endif
-
-fp_except
-fpgetmask(void)
-{
-
- return float_exception_mask;
-}
diff --git a/StdLib/LibC/Softfloat/fpgetround.c b/StdLib/LibC/Softfloat/fpgetround.c
deleted file mode 100644
index 115ad50cec..0000000000
--- a/StdLib/LibC/Softfloat/fpgetround.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* $NetBSD: fpgetround.c,v 1.3 2008/04/28 20:23:00 martin Exp $ */
-
-/*-
- * Copyright (c) 1997 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Neil A. Carson and Mark Brinicombe
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: fpgetround.c,v 1.3 2008/04/28 20:23:00 martin Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <ieeefp.h>
-#ifdef SOFTFLOAT_FOR_GCC
-#include "softfloat-for-gcc.h"
-#endif
-#include "milieu.h"
-#include "softfloat.h"
-
-#ifdef __weak_alias
-__weak_alias(fpgetround,_fpgetround)
-#endif
-
-fp_rnd
-fpgetround(void)
-{
-
- return float_rounding_mode;
-}
diff --git a/StdLib/LibC/Softfloat/fpgetsticky.c b/StdLib/LibC/Softfloat/fpgetsticky.c
deleted file mode 100644
index 5d5070942f..0000000000
--- a/StdLib/LibC/Softfloat/fpgetsticky.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* $NetBSD: fpgetsticky.c,v 1.3 2008/04/28 20:23:00 martin Exp $ */
-
-/*-
- * Copyright (c) 1997 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Neil A. Carson and Mark Brinicombe
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: fpgetsticky.c,v 1.3 2008/04/28 20:23:00 martin Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <ieeefp.h>
-#ifdef SOFTFLOAT_FOR_GCC
-#include "softfloat-for-gcc.h"
-#endif
-#include "milieu.h"
-#include "softfloat.h"
-
-#ifdef __weak_alias
-__weak_alias(fpgetsticky,_fpgetsticky)
-#endif
-
-fp_except
-fpgetsticky(void)
-{
-
- return float_exception_flags;
-}
diff --git a/StdLib/LibC/Softfloat/fpsetmask.c b/StdLib/LibC/Softfloat/fpsetmask.c
deleted file mode 100644
index 87aa8b73d7..0000000000
--- a/StdLib/LibC/Softfloat/fpsetmask.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* $NetBSD: fpsetmask.c,v 1.5 2013/01/10 08:16:10 matt Exp $ */
-
-/*-
- * Copyright (c) 1997 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Neil A. Carson and Mark Brinicombe
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: fpsetmask.c,v 1.5 2013/01/10 08:16:10 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <ieeefp.h>
-#ifdef SOFTFLOAT_FOR_GCC
-#include "softfloat-for-gcc.h"
-#endif
-#include "milieu.h"
-#include "softfloat.h"
-
-#ifdef __weak_alias
-__weak_alias(fpsetmask,_fpsetmask)
-#endif
-
-fp_except
-fpsetmask(fp_except mask)
-{
-#ifdef set_float_exception_mask
- return set_float_exception_mask(mask);
-#else
- const fp_except old = float_exception_mask;
- float_exception_mask = mask;
- return old;
-#endif
-}
diff --git a/StdLib/LibC/Softfloat/fpsetround.c b/StdLib/LibC/Softfloat/fpsetround.c
deleted file mode 100644
index 3e3d9eb5d0..0000000000
--- a/StdLib/LibC/Softfloat/fpsetround.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* $NetBSD: fpsetround.c,v 1.4 2013/01/10 08:16:10 matt Exp $ */
-
-/*-
- * Copyright (c) 1997 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Neil A. Carson and Mark Brinicombe
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: fpsetround.c,v 1.4 2013/01/10 08:16:10 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <ieeefp.h>
-#ifdef SOFTFLOAT_FOR_GCC
-#include "softfloat-for-gcc.h"
-#endif
-#include "milieu.h"
-#include "softfloat.h"
-
-#ifdef __weak_alias
-__weak_alias(fpsetround,_fpsetround)
-#endif
-
-fp_rnd
-fpsetround(fp_rnd rnd_dir)
-{
-#ifdef set_float_rounding_mode
- return set_float_rounding_mode(rnd_dir);
-#else
- const fp_rnd old = float_rounding_mode;
- float_rounding_mode = rnd_dir;
- return old;
-#endif
-}
diff --git a/StdLib/LibC/Softfloat/fpsetsticky.c b/StdLib/LibC/Softfloat/fpsetsticky.c
deleted file mode 100644
index 742706278c..0000000000
--- a/StdLib/LibC/Softfloat/fpsetsticky.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* $NetBSD: fpsetsticky.c,v 1.4 2013/01/10 08:16:10 matt Exp $ */
-
-/*-
- * Copyright (c) 1997 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Neil A. Carson and Mark Brinicombe
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: fpsetsticky.c,v 1.4 2013/01/10 08:16:10 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <ieeefp.h>
-#ifdef SOFTFLOAT_FOR_GCC
-#include "softfloat-for-gcc.h"
-#endif
-#include "milieu.h"
-#include "softfloat.h"
-
-#ifdef __weak_alias
-__weak_alias(fpsetsticky,_fpsetsticky)
-#endif
-
-fp_except
-fpsetsticky(fp_except except)
-{
-#ifdef set_float_exception_flags
- return set_float_exception_flags(except, 1);
-#else
- const fp_except old = float_exception_flags;
- float_exception_flags = except;
- return old;
-#endif
-}
diff --git a/StdLib/LibC/Softfloat/gedf2.c b/StdLib/LibC/Softfloat/gedf2.c
deleted file mode 100644
index b9e39f2ada..0000000000
--- a/StdLib/LibC/Softfloat/gedf2.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* $NetBSD: gedf2.c,v 1.1 2000/06/06 08:15:05 bjh21 Exp $ */
-
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: gedf2.c,v 1.1 2000/06/06 08:15:05 bjh21 Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-flag __gedf2(float64, float64);
-
-flag
-__gedf2(float64 a, float64 b)
-{
-
- /* libgcc1.c says (a >= b) - 1 */
- return float64_le(b, a) - 1;
-}
diff --git a/StdLib/LibC/Softfloat/gesf2.c b/StdLib/LibC/Softfloat/gesf2.c
deleted file mode 100644
index b68dd04332..0000000000
--- a/StdLib/LibC/Softfloat/gesf2.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* $NetBSD: gesf2.c,v 1.1 2000/06/06 08:15:05 bjh21 Exp $ */
-
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: gesf2.c,v 1.1 2000/06/06 08:15:05 bjh21 Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-flag __gesf2(float32, float32);
-
-flag
-__gesf2(float32 a, float32 b)
-{
-
- /* libgcc1.c says (a >= b) - 1 */
- return float32_le(b, a) - 1;
-}
diff --git a/StdLib/LibC/Softfloat/getf2.c b/StdLib/LibC/Softfloat/getf2.c
deleted file mode 100644
index 0800cc893e..0000000000
--- a/StdLib/LibC/Softfloat/getf2.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* $NetBSD: getf2.c,v 1.1 2011/01/17 10:08:35 matt Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Matt Thomas, 2011. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: getf2.c,v 1.1 2011/01/17 10:08:35 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#ifdef FLOAT128
-
-flag __getf2(float128, float128);
-
-flag
-__getf2(float128 a, float128 b)
-{
-
- /* libgcc1.c says (a >= b) - 1 */
- return float128_le(b, a) - 1;
-}
-
-#endif /* FLOAT128 */
diff --git a/StdLib/LibC/Softfloat/gexf2.c b/StdLib/LibC/Softfloat/gexf2.c
deleted file mode 100644
index e34158c8cd..0000000000
--- a/StdLib/LibC/Softfloat/gexf2.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* $NetBSD: gexf2.c,v 1.2 2004/09/27 10:16:24 he Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: gexf2.c,v 1.2 2004/09/27 10:16:24 he Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#ifdef FLOATX80
-
-flag __gexf2(floatx80, floatx80);
-
-flag
-__gexf2(floatx80 a, floatx80 b)
-{
-
- /* libgcc1.c says (a >= b) - 1 */
- return floatx80_le(b, a) - 1;
-}
-#endif /* FLOATX80 */
diff --git a/StdLib/LibC/Softfloat/gtdf2.c b/StdLib/LibC/Softfloat/gtdf2.c
deleted file mode 100644
index 6c6db225cd..0000000000
--- a/StdLib/LibC/Softfloat/gtdf2.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* $NetBSD: gtdf2.c,v 1.1 2000/06/06 08:15:05 bjh21 Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: gtdf2.c,v 1.1 2000/06/06 08:15:05 bjh21 Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-flag __gtdf2(float64, float64);
-
-flag
-__gtdf2(float64 a, float64 b)
-{
-
- /* libgcc1.c says a > b */
- return float64_lt(b, a);
-}
diff --git a/StdLib/LibC/Softfloat/gtsf2.c b/StdLib/LibC/Softfloat/gtsf2.c
deleted file mode 100644
index 7b18f3ca75..0000000000
--- a/StdLib/LibC/Softfloat/gtsf2.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* $NetBSD: gtsf2.c,v 1.1 2000/06/06 08:15:06 bjh21 Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: gtsf2.c,v 1.1 2000/06/06 08:15:06 bjh21 Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-flag __gtsf2(float32, float32);
-
-flag
-__gtsf2(float32 a, float32 b)
-{
-
- /* libgcc1.c says a > b */
- return float32_lt(b, a);
-}
diff --git a/StdLib/LibC/Softfloat/gttf2.c b/StdLib/LibC/Softfloat/gttf2.c
deleted file mode 100644
index 7fdefd8ee3..0000000000
--- a/StdLib/LibC/Softfloat/gttf2.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* $NetBSD: gttf2.c,v 1.1 2011/01/17 10:08:35 matt Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Matt Thomas, 2011. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: gttf2.c,v 1.1 2011/01/17 10:08:35 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#ifdef FLOAT128
-
-flag __gttf2(float128, float128);
-
-flag
-__gttf2(float128 a, float128 b)
-{
-
- /* libgcc1.c says a > b */
- return float128_lt(b, a);
-}
-
-#endif /* FLOAT128 */
diff --git a/StdLib/LibC/Softfloat/gtxf2.c b/StdLib/LibC/Softfloat/gtxf2.c
deleted file mode 100644
index 11e2211f3f..0000000000
--- a/StdLib/LibC/Softfloat/gtxf2.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* $NetBSD: gtxf2.c,v 1.2 2004/09/27 10:16:24 he Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: gtxf2.c,v 1.2 2004/09/27 10:16:24 he Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#ifdef FLOATX80
-
-flag __gtxf2(floatx80, floatx80);
-
-flag
-__gtxf2(floatx80 a, floatx80 b)
-{
-
- /* libgcc1.c says a > b */
- return floatx80_lt(b, a);
-}
-#endif /* FLOATX80 */
diff --git a/StdLib/LibC/Softfloat/ledf2.c b/StdLib/LibC/Softfloat/ledf2.c
deleted file mode 100644
index e6b910171b..0000000000
--- a/StdLib/LibC/Softfloat/ledf2.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* $NetBSD: ledf2.c,v 1.1 2000/06/06 08:15:06 bjh21 Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: ledf2.c,v 1.1 2000/06/06 08:15:06 bjh21 Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-flag __ledf2(float64, float64);
-
-flag
-__ledf2(float64 a, float64 b)
-{
-
- /* libgcc1.c says 1 - (a <= b) */
- return 1 - float64_le(a, b);
-}
diff --git a/StdLib/LibC/Softfloat/lesf2.c b/StdLib/LibC/Softfloat/lesf2.c
deleted file mode 100644
index b26202c9e6..0000000000
--- a/StdLib/LibC/Softfloat/lesf2.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* $NetBSD: lesf2.c,v 1.1 2000/06/06 08:15:06 bjh21 Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: lesf2.c,v 1.1 2000/06/06 08:15:06 bjh21 Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-flag __lesf2(float32, float32);
-
-flag
-__lesf2(float32 a, float32 b)
-{
-
- /* libgcc1.c says 1 - (a <= b) */
- return 1 - float32_le(a, b);
-}
diff --git a/StdLib/LibC/Softfloat/letf2.c b/StdLib/LibC/Softfloat/letf2.c
deleted file mode 100644
index 13695a1e49..0000000000
--- a/StdLib/LibC/Softfloat/letf2.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* $NetBSD: letf2.c,v 1.1 2011/01/17 10:08:35 matt Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Matt Thomas, 2011. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: letf2.c,v 1.1 2011/01/17 10:08:35 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#ifdef FLOAT128
-
-flag __letf2(float128, float128);
-
-flag
-__letf2(float128 a, float128 b)
-{
-
- /* libgcc1.c says 1 - (a <= b) */
- return 1 - float128_le(a, b);
-}
-
-#endif /* FLOAT128 */
diff --git a/StdLib/LibC/Softfloat/ltdf2.c b/StdLib/LibC/Softfloat/ltdf2.c
deleted file mode 100644
index 8c47648d37..0000000000
--- a/StdLib/LibC/Softfloat/ltdf2.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* $NetBSD: ltdf2.c,v 1.1 2000/06/06 08:15:06 bjh21 Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: ltdf2.c,v 1.1 2000/06/06 08:15:06 bjh21 Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-flag __ltdf2(float64, float64);
-
-flag
-__ltdf2(float64 a, float64 b)
-{
-
- /* libgcc1.c says -(a < b) */
- return -float64_lt(a, b);
-}
diff --git a/StdLib/LibC/Softfloat/ltsf2.c b/StdLib/LibC/Softfloat/ltsf2.c
deleted file mode 100644
index 72081e9a2a..0000000000
--- a/StdLib/LibC/Softfloat/ltsf2.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* $NetBSD: ltsf2.c,v 1.1 2000/06/06 08:15:06 bjh21 Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: ltsf2.c,v 1.1 2000/06/06 08:15:06 bjh21 Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-flag __ltsf2(float32, float32);
-
-flag
-__ltsf2(float32 a, float32 b)
-{
-
- /* libgcc1.c says -(a < b) */
- return -float32_lt(a, b);
-}
diff --git a/StdLib/LibC/Softfloat/lttf2.c b/StdLib/LibC/Softfloat/lttf2.c
deleted file mode 100644
index ba1306a5e2..0000000000
--- a/StdLib/LibC/Softfloat/lttf2.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* $NetBSD: lttf2.c,v 1.1 2011/01/17 10:08:35 matt Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Matt Thomas, 2011. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: lttf2.c,v 1.1 2011/01/17 10:08:35 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#ifdef FLOAT128
-
-flag __lttf2(float128, float128);
-
-flag
-__lttf2(float128 a, float128 b)
-{
-
- /* libgcc1.c says -(a < b) */
- return -float128_lt(a, b);
-}
-
-#endif /* FLOAT128 */
diff --git a/StdLib/LibC/Softfloat/nedf2.c b/StdLib/LibC/Softfloat/nedf2.c
deleted file mode 100644
index 89bfcb1af7..0000000000
--- a/StdLib/LibC/Softfloat/nedf2.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* $NetBSD: nedf2.c,v 1.1 2000/06/06 08:15:07 bjh21 Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: nedf2.c,v 1.1 2000/06/06 08:15:07 bjh21 Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-flag __nedf2(float64, float64);
-
-flag
-__nedf2(float64 a, float64 b)
-{
-
- /* libgcc1.c says a != b */
- return !float64_eq(a, b);
-}
diff --git a/StdLib/LibC/Softfloat/negdf2.c b/StdLib/LibC/Softfloat/negdf2.c
deleted file mode 100644
index 926133be18..0000000000
--- a/StdLib/LibC/Softfloat/negdf2.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* $NetBSD: negdf2.c,v 1.1 2000/06/06 08:15:07 bjh21 Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: negdf2.c,v 1.1 2000/06/06 08:15:07 bjh21 Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-float64 __negdf2(float64);
-
-float64
-__negdf2(float64 a)
-{
-
- /* libgcc1.c says -a */
- return a ^ FLOAT64_MANGLE(0x8000000000000000ULL);
-}
diff --git a/StdLib/LibC/Softfloat/negsf2.c b/StdLib/LibC/Softfloat/negsf2.c
deleted file mode 100644
index 20054a4ab8..0000000000
--- a/StdLib/LibC/Softfloat/negsf2.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* $NetBSD: negsf2.c,v 1.1 2000/06/06 08:15:07 bjh21 Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: negsf2.c,v 1.1 2000/06/06 08:15:07 bjh21 Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-float32 __negsf2(float32);
-
-float32
-__negsf2(float32 a)
-{
-
- /* libgcc1.c says INTIFY(-a) */
- return a ^ 0x80000000;
-}
diff --git a/StdLib/LibC/Softfloat/negtf2.c b/StdLib/LibC/Softfloat/negtf2.c
deleted file mode 100644
index 65b19bd165..0000000000
--- a/StdLib/LibC/Softfloat/negtf2.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* $NetBSD: negtf2.c,v 1.1 2011/01/17 10:08:35 matt Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Matt Thomas, 2011. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: negtf2.c,v 1.1 2011/01/17 10:08:35 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#ifdef FLOAT128
-
-float128 __negtf2(float128);
-
-float128
-__negtf2(float128 a)
-{
-
- /* libgcc1.c says -a */
- a.high ^= FLOAT64_MANGLE(0x8000000000000000ULL);
- return a;
-}
-
-#endif /* FLOAT128 */
diff --git a/StdLib/LibC/Softfloat/negxf2.c b/StdLib/LibC/Softfloat/negxf2.c
deleted file mode 100644
index c640415be5..0000000000
--- a/StdLib/LibC/Softfloat/negxf2.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* $NetBSD: negxf2.c,v 1.2 2004/09/27 10:16:24 he Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: negxf2.c,v 1.2 2004/09/27 10:16:24 he Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#ifdef FLOATX80
-
-floatx80 __negxf2(floatx80);
-
-floatx80
-__negxf2(floatx80 a)
-{
-
- /* libgcc1.c says -a */
- return __mulxf3(a,__floatsixf(-1));
-}
-#endif /* FLOATX80 */
diff --git a/StdLib/LibC/Softfloat/nesf2.c b/StdLib/LibC/Softfloat/nesf2.c
deleted file mode 100644
index 40b160d12b..0000000000
--- a/StdLib/LibC/Softfloat/nesf2.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* $NetBSD: nesf2.c,v 1.1 2000/06/06 08:15:07 bjh21 Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: nesf2.c,v 1.1 2000/06/06 08:15:07 bjh21 Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-flag __nesf2(float32, float32);
-
-flag
-__nesf2(float32 a, float32 b)
-{
-
- /* libgcc1.c says a != b */
- return !float32_eq(a, b);
-}
diff --git a/StdLib/LibC/Softfloat/netf2.c b/StdLib/LibC/Softfloat/netf2.c
deleted file mode 100644
index 48cd0be5fc..0000000000
--- a/StdLib/LibC/Softfloat/netf2.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* $NetBSD: netf2.c,v 1.1 2011/01/17 10:08:35 matt Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Matt Thomas, 2011. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: netf2.c,v 1.1 2011/01/17 10:08:35 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#ifdef FLOAT128
-
-flag __netf2(float128, float128);
-
-flag
-__netf2(float128 a, float128 b)
-{
-
- /* libgcc1.c says a != b */
- return !float128_eq(a, b);
-}
-
-#endif /* FLOAT128 */
diff --git a/StdLib/LibC/Softfloat/nexf2.c b/StdLib/LibC/Softfloat/nexf2.c
deleted file mode 100644
index d9ecc73673..0000000000
--- a/StdLib/LibC/Softfloat/nexf2.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* $NetBSD: nexf2.c,v 1.2 2004/09/27 10:16:24 he Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Ben Harris, 2000. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: nexf2.c,v 1.2 2004/09/27 10:16:24 he Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#ifdef FLOATX80
-
-flag __nexf2(floatx80, floatx80);
-
-flag
-__nexf2(floatx80 a, floatx80 b)
-{
-
- /* libgcc1.c says a != b */
- return !floatx80_eq(a, b);
-}
-#endif /* FLOATX80 */
diff --git a/StdLib/LibC/Softfloat/softfloat-for-gcc.h b/StdLib/LibC/Softfloat/softfloat-for-gcc.h
deleted file mode 100644
index 420cecc298..0000000000
--- a/StdLib/LibC/Softfloat/softfloat-for-gcc.h
+++ /dev/null
@@ -1,242 +0,0 @@
-/* $NetBSD: softfloat-for-gcc.h,v 1.12 2013/08/01 23:21:19 matt Exp $ */
-/*-
- * Copyright (c) 2008 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * Move private identifiers with external linkage into implementation
- * namespace. -- Klaus Klein <kleink@NetBSD.org>, May 5, 1999
- */
-#define float_exception_flags _softfloat_float_exception_flags
-#define float_exception_mask _softfloat_float_exception_mask
-#define float_rounding_mode _softfloat_float_rounding_mode
-#define float_raise _softfloat_float_raise
-
-/* The following batch are called by GCC through wrappers */
-#define float32_eq _softfloat_float32_eq
-#define float32_le _softfloat_float32_le
-#define float32_lt _softfloat_float32_lt
-#define float64_eq _softfloat_float64_eq
-#define float64_le _softfloat_float64_le
-#define float64_lt _softfloat_float64_lt
-#define float128_eq _softfloat_float128_eq
-#define float128_le _softfloat_float128_le
-#define float128_lt _softfloat_float128_lt
-
-/*
- * Macros to define functions with the GCC expected names
- */
-
-#define float32_add __addsf3
-#define float64_add __adddf3
-#define floatx80_add __addxf3
-#define float128_add __addtf3
-
-#define float32_sub __subsf3
-#define float64_sub __subdf3
-#define floatx80_sub __subxf3
-#define float128_sub __subtf3
-
-#define float32_mul __mulsf3
-#define float64_mul __muldf3
-#define floatx80_mul __mulxf3
-#define float128_mul __multf3
-
-#define float32_div __divsf3
-#define float64_div __divdf3
-#define floatx80_div __divxf3
-#define float128_div __divtf3
-
-#if 0
-#define float32_neg __negsf2
-#define float64_neg __negdf2
-#define floatx80_neg __negxf2
-#define float128_neg __negtf2
-#endif
-
-#define int32_to_float32 __floatsisf
-#define int32_to_float64 __floatsidf
-#define int32_to_floatx80 __floatsixf
-#define int32_to_float128 __floatsitf
-
-#define int64_to_float32 __floatdisf
-#define int64_to_float64 __floatdidf
-#define int64_to_floatx80 __floatdixf
-#define int64_to_float128 __floatditf
-
-#define int128_to_float32 __floattisf
-#define int128_to_float64 __floattidf
-#define int128_to_floatx80 __floattixf
-#define int128_to_float128 __floattitf
-
-#define uint32_to_float32 __floatunsisf
-#define uint32_to_float64 __floatunsidf
-#define uint32_to_floatx80 __floatunsixf
-#define uint32_to_float128 __floatunsitf
-
-#define uint64_to_float32 __floatundisf
-#define uint64_to_float64 __floatundidf
-#define uint64_to_floatx80 __floatundixf
-#define uint64_to_float128 __floatunditf
-
-#define uint128_to_float32 __floatuntisf
-#define uint128_to_float64 __floatuntidf
-#define uint128_to_floatx80 __floatuntixf
-#define uint128_to_float128 __floatuntitf
-
-#define float32_to_int32_round_to_zero __fixsfsi
-#define float64_to_int32_round_to_zero __fixdfsi
-#define floatx80_to_int32_round_to_zero __fixxfsi
-#define float128_to_int32_round_to_zero __fixtfsi
-
-#define float32_to_int64_round_to_zero __fixsfdi
-#define float64_to_int64_round_to_zero __fixdfdi
-#define floatx80_to_int64_round_to_zero __fixxfdi
-#define float128_to_int64_round_to_zero __fixtfdi
-
-#define float32_to_int128_round_to_zero __fixsfti
-#define float64_to_int128_round_to_zero __fixdfti
-#define floatx80_to_int128_round_to_zero __fixxfti
-#define float128_to_int128_round_to_zero __fixtfti
-
-#define float32_to_uint32_round_to_zero __fixunssfsi
-#define float64_to_uint32_round_to_zero __fixunsdfsi
-#define floatx80_to_uint32_round_to_zero __fixunsxfsi
-#define float128_to_uint32_round_to_zero __fixunstfsi
-
-#define float32_to_uint64_round_to_zero __fixunssfdi
-#define float64_to_uint64_round_to_zero __fixunsdfdi
-#define floatx80_to_uint64_round_to_zero __fixunsxfdi
-#define float128_to_uint64_round_to_zero __fixunstfdi
-
-#define float32_to_uint128_round_to_zero __fixunssfti
-#define float64_to_uint128_round_to_zero __fixunsdfti
-#define floatx80_to_uint128_round_to_zero __fixunsxfti
-#define float128_to_uint128_round_to_zero __fixunstfti
-
-#define float32_to_float64 __extendsfdf2
-#define float32_to_floatx80 __extendsfxf2
-#define float32_to_float128 __extendsftf2
-#define float64_to_floatx80 __extenddfxf2
-#define float64_to_float128 __extenddftf2
-
-#define float128_to_float64 __trunctfdf2
-#define floatx80_to_float64 __truncxfdf2
-#define float128_to_float32 __trunctfsf2
-#define floatx80_to_float32 __truncxfsf2
-#define float64_to_float32 __truncdfsf2
-
-#if 0
-#define float32_cmp __cmpsf2
-#define float32_unord __unordsf2
-#define float32_eq __eqsf2
-#define float32_ne __nesf2
-#define float32_ge __gesf2
-#define float32_lt __ltsf2
-#define float32_le __lesf2
-#define float32_gt __gtsf2
-#endif
-
-#if 0
-#define float64_cmp __cmpdf2
-#define float64_unord __unorddf2
-#define float64_eq __eqdf2
-#define float64_ne __nedf2
-#define float64_ge __gedf2
-#define float64_lt __ltdf2
-#define float64_le __ledf2
-#define float64_gt __gtdf2
-#endif
-
-/* XXX not in libgcc */
-#if 1
-#define floatx80_cmp __cmpxf2
-#define floatx80_unord __unordxf2
-#define floatx80_eq __eqxf2
-#define floatx80_ne __nexf2
-#define floatx80_ge __gexf2
-#define floatx80_lt __ltxf2
-#define floatx80_le __lexf2
-#define floatx80_gt __gtxf2
-#endif
-
-#if 0
-#define float128_cmp __cmptf2
-#define float128_unord __unordtf2
-#define float128_eq __eqtf2
-#define float128_ne __netf2
-#define float128_ge __getf2
-#define float128_lt __lttf2
-#define float128_le __letf2
-#define float128_gt __gttf2
-#endif
-
-#ifdef __ARM_EABI__
-#ifdef __ARM_PCS_VFP
-#include <arm/aeabi.h>
-#endif
-#define __addsf3 __aeabi_fadd
-#define __adddf3 __aeabi_dadd
-
-#define __subsf3 __aeabi_fsub
-#define __subdf3 __aeabi_dsub
-
-#define __mulsf3 __aeabi_fmul
-#define __muldf3 __aeabi_dmul
-
-#define __divsf3 __aeabi_fdiv
-#define __divdf3 __aeabi_ddiv
-
-#define __floatsisf __aeabi_i2f
-#define __floatsidf __aeabi_i2d
-
-#define __floatdisf __aeabi_l2f
-#define __floatdidf __aeabi_l2d
-
-#define __floatunsisf __aeabi_ui2f
-#define __floatunsidf __aeabi_ui2d
-
-#define __floatundisf __aeabi_ul2f
-#define __floatundidf __aeabi_ul2d
-
-#define __fixsfsi __aeabi_f2iz
-#define __fixdfsi __aeabi_d2iz
-
-#define __fixsfdi __aeabi_f2lz
-#define __fixdfdi __aeabi_d2lz
-
-#define __fixunssfsi __aeabi_f2uiz
-#define __fixunsdfsi __aeabi_d2uiz
-
-#define __fixunssfdi __aeabi_f2ulz
-#define __fixunsdfdi __aeabi_d2ulz
-
-#define __extendsfdf2 __aeabi_f2d
-#define __truncdfsf2 __aeabi_d2f
-
-#endif /* __ARM_EABI__ */
diff --git a/StdLib/LibC/Softfloat/softfloat-history.txt b/StdLib/LibC/Softfloat/softfloat-history.txt
deleted file mode 100644
index 5e2732a8fa..0000000000
--- a/StdLib/LibC/Softfloat/softfloat-history.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-$NetBSD: softfloat-history.txt,v 1.1 2000/06/06 08:15:08 bjh21 Exp $
-
-History of Major Changes to SoftFloat, up to Release 2a
-
-John R. Hauser
-1998 December 16
-
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Release 2a (1998 December)
-
--- Added functions to convert between 64-bit integers (int64) and all
- supported floating-point formats.
-
--- Fixed a bug in all 64-bit-version square root functions except
- `float32_sqrt' that caused the result sometimes to be off by 1 unit in
- the last place (1 ulp) from what it should be. (Bug discovered by Paul
- Donahue.)
-
--- Improved the makefiles.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Release 2 (1997 June)
-
--- Created the 64-bit (bits64) version, adding the floatx80 and float128
- formats.
-
--- Changed the source directory structure, splitting the sources into a
- `bits32' and a `bits64' version. Renamed `environment.h' to `milieu.h'
- (to avoid confusion with environment variables).
-
--- Fixed a small error that caused `float64_round_to_int' often to round the
- wrong way in nearest/even mode when the operand was between 2^20 and 2^21
- and halfway between two integers.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Release 1a (1996 July)
-
--- Corrected a mistake that caused borderline underflow cases not to raise
- the underflow flag when they should have. (Problem reported by Doug
- Priest.)
-
--- Added the `float_detect_tininess' variable to control whether tininess is
- detected before or after rounding.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Release 1 (1996 July)
-
--- Original release.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
diff --git a/StdLib/LibC/Softfloat/softfloat-source.txt b/StdLib/LibC/Softfloat/softfloat-source.txt
deleted file mode 100644
index e77f77a1d0..0000000000
--- a/StdLib/LibC/Softfloat/softfloat-source.txt
+++ /dev/null
@@ -1,383 +0,0 @@
-$NetBSD: softfloat-source.txt,v 1.2 2006/11/24 19:46:58 christos Exp $
-
-SoftFloat Release 2a Source Documentation
-
-John R. Hauser
-1998 December 14
-
-
--------------------------------------------------------------------------------
-Introduction
-
-SoftFloat is a software implementation of floating-point that conforms to
-the IEC/IEEE Standard for Binary Floating-Point Arithmetic. SoftFloat can
-support four floating-point formats: single precision, double precision,
-extended double precision, and quadruple precision. All operations required
-by the IEEE Standard are implemented, except for conversions to and from
-decimal. SoftFloat is distributed in the form of C source code, so a
-C compiler is needed to compile the code. Support for the extended double-
-precision and quadruple-precision formats is dependent on the C compiler
-implementing a 64-bit integer type.
-
-This document gives information needed for compiling and/or porting
-SoftFloat.
-
-The source code for SoftFloat is intended to be relatively machine-
-independent and should be compilable using any ISO/ANSI C compiler. At the
-time of this writing, SoftFloat has been successfully compiled with the GNU
-C Compiler (`gcc') for several platforms.
-
-
--------------------------------------------------------------------------------
-Limitations
-
-SoftFloat as written requires an ISO/ANSI-style C compiler. No attempt has
-been made to accommodate compilers that are not ISO-conformant. Older ``K&R-
-style'' compilers are not adequate for compiling SoftFloat. All testing I
-have done so far has been with the GNU C Compiler. Compilation with other
-compilers should be possible but has not been tested.
-
-The SoftFloat sources assume that source code file names can be longer than
-8 characters. In order to compile under an MS-DOS-type system, many of the
-source files will need to be renamed, and the source and makefiles edited
-appropriately. Once compiled, the SoftFloat binary does not depend on the
-existence of long file names.
-
-The underlying machine is assumed to be binary with a word size that is a
-power of 2. Bytes are 8 bits. Support for the extended double-precision
-and quadruple-precision formats depends on the C compiler implementing
-a 64-bit integer type. If the largest integer type supported by the
-C compiler is 32 bits, SoftFloat is limited to the single- and double-
-precision formats.
-
-
--------------------------------------------------------------------------------
-Contents
-
- Introduction
- Limitations
- Contents
- Legal Notice
- SoftFloat Source Directory Structure
- SoftFloat Source Files
- processors/*.h
- softfloat/bits*/*/softfloat.h
- softfloat/bits*/*/milieu.h
- softfloat/bits*/*/softfloat-specialize
- softfloat/bits*/softfloat-macros
- softfloat/bits*/softfloat.c
- Steps to Creating a `softfloat.o'
- Making `softfloat.o' a Library
- Testing SoftFloat
- Timing SoftFloat
- Compiler Options and Efficiency
- Processor-Specific Optimization of `softfloat.c' Using `softfloat-macros'
- Contact Information
-
-
-
--------------------------------------------------------------------------------
-Legal Notice
-
-SoftFloat was written by John R. Hauser. This work was made possible in
-part by the International Computer Science Institute, located at Suite 600,
-1947 Center Street, Berkeley, California 94704. Funding was partially
-provided by the National Science Foundation under grant MIP-9311980. The
-original version of this code was written as part of a project to build
-a fixed-point vector processor in collaboration with the University of
-California at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-
--------------------------------------------------------------------------------
-SoftFloat Source Directory Structure
-
-Because SoftFloat is targeted to multiple platforms, its source code
-is slightly scattered between target-specific and target-independent
-directories and files. The directory structure is as follows:
-
- processors
- softfloat
- bits64
- templates
- 386-Win32-gcc
- SPARC-Solaris-gcc
- bits32
- templates
- 386-Win32-gcc
- SPARC-Solaris-gcc
-
-The two topmost directories and their contents are:
-
- softfloat - Most of the source code needed for SoftFloat.
- processors - Target-specific header files that are not specific to
- SoftFloat.
-
-The `softfloat' directory is further split into two parts:
-
- bits64 - SoftFloat implementation using 64-bit integers.
- bits32 - SoftFloat implementation using only 32-bit integers.
-
-Within these directories are subdirectories for each of the targeted
-platforms. The SoftFloat source code is distributed with targets
-`386-Win32-gcc' and `SPARC-Solaris-gcc' (and perhaps others) already
-prepared for both the 32-bit and 64-bit implementations. Source files that
-are not within these target-specific subdirectories are intended to be
-target-independent.
-
-The naming convention used for the target-specific directories is
-`<processor>-<executable-type>-<compiler>'. The names of the supplied
-target directories should be interpreted as follows:
-
- <processor>:
- 386 - Intel 386-compatible processor.
- SPARC - SPARC processor (as used by Sun machines).
- <executable-type>:
- Win32 - Microsoft Win32 executable.
- Solaris - Sun Solaris executable.
- <compiler>:
- gcc - GNU C Compiler.
-
-You do not need to maintain this convention if you do not want to.
-
-Alongside the supplied target-specific directories is a `templates'
-directory containing a set of ``generic'' target-specific source files. A
-new target directory can be created by copying the `templates' directory and
-editing the files inside. (Complete instructions for porting SoftFloat to a
-new target are in the section _Steps_to_Creating_a_`softfloat.o'_.) Note
-that the `templates' directory will not work as a target directory without
-some editing. To avoid confusion, it would be wise to refrain from editing
-the files inside `templates' directly.
-
-
--------------------------------------------------------------------------------
-SoftFloat Source Files
-
-The purpose of each source file is described below. In the following,
-the `*' symbol is used in place of the name of a specific target, such as
-`386-Win32-gcc' or `SPARC-Solaris-gcc', or in place of some other text, as
-in `bits*' for either `bits32' or `bits64'.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-processors/*.h
-
-The target-specific `processors' header file defines integer types
-of various sizes, and also defines certain C preprocessor macros that
-characterize the target. The two examples supplied are `386-gcc.h' and
-`SPARC-gcc.h'. The naming convention used for processor header files is
-`<processor>-<compiler>.h'.
-
-If 64-bit integers are supported by the compiler, the macro name `BITS64'
-should be defined here along with the corresponding 64-bit integer
-types. In addition, the function-like macro `LIT64' must be defined for
-constructing 64-bit integer literals (constants). The `LIT64' macro is used
-consistently in the SoftFloat code to annotate 64-bit literals.
-
-If `BITS64' is not defined, only the 32-bit version of SoftFloat can be
-compiled. If `BITS64' _is_ defined, either can be compiled.
-
-If an inlining attribute (such as an `inline' keyword) is provided by the
-compiler, the macro `INLINE' should be defined to the appropriate keyword.
-If not, `INLINE' can be set to the keyword `static'. The `INLINE' macro
-appears in the SoftFloat source code before every function that should
-be inlined by the compiler. SoftFloat depends on inlining to obtain
-good speed. Even if inlining cannot be forced with a language keyword,
-the compiler may still be able to perform inlining on its own as an
-optimization. If a command-line option is needed to convince the compiler
-to perform this optimization, this should be assured in the makefile. (See
-the section _Compiler_Options_and_Efficiency_ below.)
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-softfloat/bits*/*/softfloat.h
-
-The target-specific `softfloat.h' header file defines the SoftFloat
-interface as seen by clients.
-
-Unlike the actual function definitions in `softfloat.c', the declarations
-in `softfloat.h' do not use any of the types defined by the `processors'
-header file. This is done so that clients will not have to include the
-`processors' header file in order to use SoftFloat. Nevertheless, the
-target-specific declarations in `softfloat.h' must match what `softfloat.c'
-expects. For example, if `int32' is defined as `int' in the `processors'
-header file, then in `softfloat.h' the output of `float32_to_int32' should
-be stated as `int', although in `softfloat.c' it is given in target-
-independent form as `int32'.
-
-For the `bits64' implementation of SoftFloat, the macro names `FLOATX80' and
-`FLOAT128' must be defined in order for the extended double-precision and
-quadruple-precision formats to be enabled in the code. Conversely, either
-or both of the extended formats can be disabled by simply removing the
-`#define' of the respective macro. When an extended format is not enabled,
-none of the functions that either input or output the format are defined,
-and no space is taken up in `softfloat.o' by such functions. There is no
-provision for disabling the usual single- and double-precision formats.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-softfloat/bits*/*/milieu.h
-
-The target-specific `milieu.h' header file provides declarations that are
-needed to compile SoftFloat. In addition, deviations from ISO/ANSI C by
-the compiler (such as names not properly declared in system header files)
-are corrected in this header if possible.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-softfloat/bits*/*/softfloat-specialize
-
-This target-specific C source fragment defines:
-
--- whether tininess for underflow is detected before or after rounding by
- default;
--- what (if anything) special happens when exceptions are raised;
--- how signaling NaNs are distinguished from quiet NaNs;
--- the default generated quiet NaNs; and
--- how NaNs are propagated from function inputs to output.
-
-These details are not decided by the IEC/IEEE Standard. This fragment is
-included verbatim within `softfloat.c' when SoftFloat is compiled.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-softfloat/bits*/softfloat-macros
-
-This target-independent C source fragment defines a number of arithmetic
-functions used as primitives within the `softfloat.c' source. Most of the
-functions defined here are intended to be inlined for efficiency. This
-fragment is included verbatim within `softfloat.c' when SoftFloat is
-compiled.
-
-Target-specific variations on this file are possible. See the section
-_Processor-Specific_Optimization_of_`softfloat.c'_Using_`softfloat-macros'_
-below.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-softfloat/bits*/softfloat.c
-
-The target-independent `softfloat.c' source file contains the body of the
-SoftFloat implementation.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-The inclusion of the files above within each other (using `#include') can be
-shown graphically as follows:
-
- softfloat/bits*/softfloat.c
- softfloat/bits*/*/milieu.h
- processors/*.h
- softfloat/bits*/*/softfloat.h
- softfloat/bits*/*/softfloat-specialize
- softfloat/bits*/softfloat-macros
-
-Note in particular that `softfloat.c' does not include the `processors'
-header file directly. Rather, `softfloat.c' includes the target-specific
-`milieu.h' header file, which in turn includes the processor header file.
-
-
--------------------------------------------------------------------------------
-Steps to Creating a `softfloat.o'
-
-Porting and/or compiling SoftFloat involves the following steps:
-
-1. If one does not already exist, create an appropriate `.h' file in the
- `processors' directory.
-
-2. If `BITS64' is defined in the `processors' header file, choose whether
- to compile the 32-bit or 64-bit implementation of SoftFloat. If
- `BITS64' is not defined, your only choice is the 32-bit implementation.
- The remaining steps occur within either the `bits32' or `bits64'
- subdirectories.
-
-3. If one does not already exist, create an appropriate target-specific
- subdirectory by copying the given `templates' directory.
-
-4. In the target-specific subdirectory, edit the files `softfloat-specialize'
- and `softfloat.h' to define the desired exception handling functions
- and mode control values. In the `softfloat.h' header file, ensure also
- that all declarations give the proper target-specific type (such as
- `int' or `long') corresponding to the target-independent type used in
- `softfloat.c' (such as `int32'). None of the type names declared in the
- `processors' header file should appear in `softfloat.h'.
-
-5. In the target-specific subdirectory, edit the files `milieu.h' and
- `Makefile' to reflect the current environment.
-
-6. In the target-specific subdirectory, execute `make'.
-
-For the targets that are supplied, if the expected compiler is available
-(usually `gcc'), it should only be necessary to execute `make' in the
-target-specific subdirectory.
-
-
--------------------------------------------------------------------------------
-Making `softfloat.o' a Library
-
-SoftFloat is not made into a software library by the supplied makefile.
-If desired, `softfloat.o' can easily be put into its own library (in Unix,
-`softfloat.a') using the usual system tool (in Unix, `ar').
-
-
--------------------------------------------------------------------------------
-Testing SoftFloat
-
-SoftFloat can be tested using the `testsoftfloat' program by the same
-author. The `testsoftfloat' program is part of the TestFloat package
-available at the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/
-TestFloat.html'.
-
-
--------------------------------------------------------------------------------
-Timing SoftFloat
-
-A program called `timesoftfloat' for timing the SoftFloat functions is
-included with the SoftFloat source code. Compiling `timesoftfloat' should
-pose no difficulties once `softfloat.o' exists. The supplied makefile
-will create a `timesoftfloat' executable by default after generating
-`softfloat.o'. See `timesoftfloat.txt' for documentation about using
-`timesoftfloat'.
-
-
--------------------------------------------------------------------------------
-Compiler Options and Efficiency
-
-In order to get good speed with SoftFloat, it is important that the compiler
-inline the routines that have been marked `INLINE' in the code. Even if
-inlining cannot be forced by an appropriate definition of the `INLINE'
-macro, the compiler may still be able to perform inlining on its own as
-an optimization. In that case, the makefile should be edited to give the
-compiler whatever option is required to cause it to inline small functions.
-
-The ability of the processor to do fast shifts has been assumed. Efficiency
-will not be as good on processors for which this is not the case (such as
-the original Motorola 68000 or Intel 8086 processors).
-
-
--------------------------------------------------------------------------------
-Processor-Specific Optimization of `softfloat.c' Using `softfloat-macros'
-
-The `softfloat-macros' source fragment defines arithmetic functions used
-as primitives by `softfloat.c'. This file has been written in a target-
-independent form. For a given target, it may be possible to improve on
-these functions using target-specific and/or non-ISO-C features (such
-as `asm' statements). For example, one of the ``macro'' functions takes
-two word-size integers and returns their full product in two words.
-This operation can be done directly in hardware on many processors; but
-because it is not available through standard C, the function defined in
-`softfloat-macros' uses four multiplies to achieve the same result.
-
-To address these shortcomings, a customized version of `softfloat-macros'
-can be created in any of the target-specific subdirectories. A simple
-modification to the target's makefile should be sufficient to ensure that
-the custom version is used instead of the generic one.
-
-
--------------------------------------------------------------------------------
-Contact Information
-
-At the time of this writing, the most up-to-date information about
-SoftFloat and the latest release can be found at the Web page `http://
-HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/SoftFloat.html'.
-
-
diff --git a/StdLib/LibC/Softfloat/softfloat-specialize b/StdLib/LibC/Softfloat/softfloat-specialize
deleted file mode 100644
index 13ada988d1..0000000000
--- a/StdLib/LibC/Softfloat/softfloat-specialize
+++ /dev/null
@@ -1,529 +0,0 @@
-/* $NetBSD: softfloat-specialize,v 1.8 2013/01/10 08:16:10 matt Exp $ */
-
-/* This is a derivative work. */
-
-/*
-===============================================================================
-
-This C source fragment is part of the SoftFloat IEC/IEEE Floating-point
-Arithmetic Package, Release 2a.
-
-Written by John R. Hauser. This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704. Funding was partially provided by the
-National Science Foundation under grant MIP-9311980. The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-#include <signal.h>
-#include <string.h>
-#include <unistd.h>
-
-/*
--------------------------------------------------------------------------------
-Underflow tininess-detection mode, statically initialized to default value.
-(The declaration in `softfloat.h' must match the `int8' type here.)
--------------------------------------------------------------------------------
-*/
-#ifdef SOFTFLOAT_FOR_GCC
-static
-#endif
-int8 float_detect_tininess = float_tininess_after_rounding;
-
-/*
--------------------------------------------------------------------------------
-Raises the exceptions specified by `flags'. Floating-point traps can be
-defined here if desired. It is currently not possible for such a trap to
-substitute a result value. If traps are not implemented, this routine
-should be simply `float_exception_flags |= flags;'.
--------------------------------------------------------------------------------
-*/
-#ifdef SOFTFLOAT_FOR_GCC
-#ifndef set_float_exception_mask
-#define float_exception_mask _softfloat_float_exception_mask
-#endif
-#endif
-#ifndef set_float_exception_mask
-fp_except float_exception_mask = 0;
-#endif
-void
-float_raise( fp_except flags )
-{
-
-#if 0 // Don't raise exceptions
- siginfo_t info;
- fp_except mask = float_exception_mask;
-
-#ifdef set_float_exception_mask
- flags |= set_float_exception_flags(flags, 0);
-#else
- float_exception_flags |= flags;
- flags = float_exception_flags;
-#endif
-
- flags &= mask;
- if ( flags ) {
- memset(&info, 0, sizeof info);
- info.si_signo = SIGFPE;
- info.si_pid = getpid();
- info.si_uid = geteuid();
- if (flags & float_flag_underflow)
- info.si_code = FPE_FLTUND;
- else if (flags & float_flag_overflow)
- info.si_code = FPE_FLTOVF;
- else if (flags & float_flag_divbyzero)
- info.si_code = FPE_FLTDIV;
- else if (flags & float_flag_invalid)
- info.si_code = FPE_FLTINV;
- else if (flags & float_flag_inexact)
- info.si_code = FPE_FLTRES;
- sigqueueinfo(getpid(), &info);
- }
-#else // Don't raise exceptions
- float_exception_flags |= flags;
-#endif // Don't raise exceptions
-}
-#undef float_exception_mask
-
-/*
--------------------------------------------------------------------------------
-Internal canonical NaN format.
--------------------------------------------------------------------------------
-*/
-typedef struct {
- flag sign;
- bits64 high, low;
-} commonNaNT;
-
-/*
--------------------------------------------------------------------------------
-The pattern for a default generated single-precision NaN.
--------------------------------------------------------------------------------
-*/
-#define float32_default_nan 0xFFFFFFFF
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the single-precision floating-point value `a' is a NaN;
-otherwise returns 0.
--------------------------------------------------------------------------------
-*/
-#ifdef SOFTFLOAT_FOR_GCC
-static
-#endif
-flag float32_is_nan( float32 a )
-{
-
- return ( (bits32)0xFF000000 < (bits32) ( a<<1 ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the single-precision floating-point value `a' is a signaling
-NaN; otherwise returns 0.
--------------------------------------------------------------------------------
-*/
-#if defined(SOFTFLOAT_FOR_GCC) && !defined(SOFTFLOATSPARC64_FOR_GCC) && \
- !defined(SOFTFLOAT_M68K_FOR_GCC)
-static
-#endif
-flag float32_is_signaling_nan( float32 a )
-{
-
- return ( ( ( a>>22 ) & 0x1FF ) == 0x1FE ) && ( a & 0x003FFFFF );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the single-precision floating-point NaN
-`a' to the canonical NaN format. If `a' is a signaling NaN, the invalid
-exception is raised.
--------------------------------------------------------------------------------
-*/
-static commonNaNT float32ToCommonNaN( float32 a )
-{
- commonNaNT z;
-
- if ( float32_is_signaling_nan( a ) ) float_raise( float_flag_invalid );
- z.sign = a>>31;
- z.low = 0;
- z.high = ( (bits64) a )<<41;
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the canonical NaN `a' to the single-
-precision floating-point format.
--------------------------------------------------------------------------------
-*/
-static float32 commonNaNToFloat32( commonNaNT a )
-{
-
- return ( ( (bits32) a.sign )<<31 ) | 0x7FC00000 | (bits32)( a.high>>41 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes two single-precision floating-point values `a' and `b', one of which
-is a NaN, and returns the appropriate NaN result. If either `a' or `b' is a
-signaling NaN, the invalid exception is raised.
--------------------------------------------------------------------------------
-*/
-static float32 propagateFloat32NaN( float32 a, float32 b )
-{
- flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;
-
- aIsNaN = float32_is_nan( a );
- aIsSignalingNaN = float32_is_signaling_nan( a );
- bIsNaN = float32_is_nan( b );
- bIsSignalingNaN = float32_is_signaling_nan( b );
- a |= 0x00400000;
- b |= 0x00400000;
- if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );
- if ( aIsNaN ) {
- return ( aIsSignalingNaN & bIsNaN ) ? b : a;
- }
- else {
- return b;
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-The pattern for a default generated double-precision NaN.
--------------------------------------------------------------------------------
-*/
-#define float64_default_nan LIT64( 0xFFFFFFFFFFFFFFFF )
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the double-precision floating-point value `a' is a NaN;
-otherwise returns 0.
--------------------------------------------------------------------------------
-*/
-#ifdef SOFTFLOAT_FOR_GCC
-static
-#endif
-flag float64_is_nan( float64 a )
-{
-
- return ( (bits64)LIT64( 0xFFE0000000000000 ) <
- (bits64) ( FLOAT64_DEMANGLE(a)<<1 ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the double-precision floating-point value `a' is a signaling
-NaN; otherwise returns 0.
--------------------------------------------------------------------------------
-*/
-#if defined(SOFTFLOAT_FOR_GCC) && !defined(SOFTFLOATSPARC64_FOR_GCC) && \
- !defined(SOFTFLOATM68K_FOR_GCC)
-static
-#endif
-flag float64_is_signaling_nan( float64 a )
-{
-
- return
- ( ( ( FLOAT64_DEMANGLE(a)>>51 ) & 0xFFF ) == 0xFFE )
- && ( FLOAT64_DEMANGLE(a) & LIT64( 0x0007FFFFFFFFFFFF ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the double-precision floating-point NaN
-`a' to the canonical NaN format. If `a' is a signaling NaN, the invalid
-exception is raised.
--------------------------------------------------------------------------------
-*/
-static commonNaNT float64ToCommonNaN( float64 a )
-{
- commonNaNT z;
-
- if ( float64_is_signaling_nan( a ) ) float_raise( float_flag_invalid );
- z.sign = (flag)(FLOAT64_DEMANGLE(a)>>63);
- z.low = 0;
- z.high = FLOAT64_DEMANGLE(a)<<12;
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the canonical NaN `a' to the double-
-precision floating-point format.
--------------------------------------------------------------------------------
-*/
-static float64 commonNaNToFloat64( commonNaNT a )
-{
-
- return FLOAT64_MANGLE(
- ( ( (bits64) a.sign )<<63 )
- | LIT64( 0x7FF8000000000000 )
- | ( a.high>>12 ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes two double-precision floating-point values `a' and `b', one of which
-is a NaN, and returns the appropriate NaN result. If either `a' or `b' is a
-signaling NaN, the invalid exception is raised.
--------------------------------------------------------------------------------
-*/
-static float64 propagateFloat64NaN( float64 a, float64 b )
-{
- flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;
-
- aIsNaN = float64_is_nan( a );
- aIsSignalingNaN = float64_is_signaling_nan( a );
- bIsNaN = float64_is_nan( b );
- bIsSignalingNaN = float64_is_signaling_nan( b );
- a |= FLOAT64_MANGLE(LIT64( 0x0008000000000000 ));
- b |= FLOAT64_MANGLE(LIT64( 0x0008000000000000 ));
- if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );
- if ( aIsNaN ) {
- return ( aIsSignalingNaN & bIsNaN ) ? b : a;
- }
- else {
- return b;
- }
-
-}
-
-#ifdef FLOATX80
-
-/*
--------------------------------------------------------------------------------
-The pattern for a default generated extended double-precision NaN. The
-`high' and `low' values hold the most- and least-significant bits,
-respectively.
--------------------------------------------------------------------------------
-*/
-#define floatx80_default_nan_high 0xFFFF
-#define floatx80_default_nan_low LIT64( 0xFFFFFFFFFFFFFFFF )
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the extended double-precision floating-point value `a' is a
-NaN; otherwise returns 0.
--------------------------------------------------------------------------------
-*/
-flag floatx80_is_nan( floatx80 a )
-{
-
- return ( ( a.high & 0x7FFF ) == 0x7FFF ) && (bits64) ( a.low<<1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the extended double-precision floating-point value `a' is a
-signaling NaN; otherwise returns 0.
--------------------------------------------------------------------------------
-*/
-flag floatx80_is_signaling_nan( floatx80 a )
-{
- bits64 aLow;
-
- aLow = a.low & ~ LIT64( 0x4000000000000000 );
- return
- ( ( a.high & 0x7FFF ) == 0x7FFF )
- && (bits64) ( aLow<<1 )
- && ( a.low == aLow );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the extended double-precision floating-
-point NaN `a' to the canonical NaN format. If `a' is a signaling NaN, the
-invalid exception is raised.
--------------------------------------------------------------------------------
-*/
-static commonNaNT floatx80ToCommonNaN( floatx80 a )
-{
- commonNaNT z;
-
- if ( floatx80_is_signaling_nan( a ) ) float_raise( float_flag_invalid );
- z.sign = a.high>>15;
- z.low = 0;
- z.high = a.low<<1;
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the canonical NaN `a' to the extended
-double-precision floating-point format.
--------------------------------------------------------------------------------
-*/
-static floatx80 commonNaNToFloatx80( commonNaNT a )
-{
- floatx80 z;
-
- z.low = LIT64( 0xC000000000000000 ) | ( a.high>>1 );
- z.high = ( ( (bits16) a.sign )<<15 ) | 0x7FFF;
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes two extended double-precision floating-point values `a' and `b', one
-of which is a NaN, and returns the appropriate NaN result. If either `a' or
-`b' is a signaling NaN, the invalid exception is raised.
--------------------------------------------------------------------------------
-*/
-static floatx80 propagateFloatx80NaN( floatx80 a, floatx80 b )
-{
- flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;
-
- aIsNaN = floatx80_is_nan( a );
- aIsSignalingNaN = floatx80_is_signaling_nan( a );
- bIsNaN = floatx80_is_nan( b );
- bIsSignalingNaN = floatx80_is_signaling_nan( b );
- a.low |= LIT64( 0xC000000000000000 );
- b.low |= LIT64( 0xC000000000000000 );
- if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );
- if ( aIsNaN ) {
- return ( aIsSignalingNaN & bIsNaN ) ? b : a;
- }
- else {
- return b;
- }
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-/*
--------------------------------------------------------------------------------
-The pattern for a default generated quadruple-precision NaN. The `high' and
-`low' values hold the most- and least-significant bits, respectively.
--------------------------------------------------------------------------------
-*/
-#define float128_default_nan_high LIT64( 0xFFFFFFFFFFFFFFFF )
-#define float128_default_nan_low LIT64( 0xFFFFFFFFFFFFFFFF )
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the quadruple-precision floating-point value `a' is a NaN;
-otherwise returns 0.
--------------------------------------------------------------------------------
-*/
-flag float128_is_nan( float128 a )
-{
-
- return
- ( (bits64)LIT64( 0xFFFE000000000000 ) <= (bits64) ( a.high<<1 ) )
- && ( a.low || ( a.high & LIT64( 0x0000FFFFFFFFFFFF ) ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the quadruple-precision floating-point value `a' is a
-signaling NaN; otherwise returns 0.
--------------------------------------------------------------------------------
-*/
-flag float128_is_signaling_nan( float128 a )
-{
-
- return
- ( ( ( a.high>>47 ) & 0xFFFF ) == 0xFFFE )
- && ( a.low || ( a.high & LIT64( 0x00007FFFFFFFFFFF ) ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the quadruple-precision floating-point NaN
-`a' to the canonical NaN format. If `a' is a signaling NaN, the invalid
-exception is raised.
--------------------------------------------------------------------------------
-*/
-static commonNaNT float128ToCommonNaN( float128 a )
-{
- commonNaNT z;
-
- if ( float128_is_signaling_nan( a ) ) float_raise( float_flag_invalid );
- z.sign = (flag)(a.high>>63);
- shortShift128Left( a.high, a.low, 16, &z.high, &z.low );
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the canonical NaN `a' to the quadruple-
-precision floating-point format.
--------------------------------------------------------------------------------
-*/
-static float128 commonNaNToFloat128( commonNaNT a )
-{
- float128 z;
-
- shift128Right( a.high, a.low, 16, &z.high, &z.low );
- z.high |= ( ( (bits64) a.sign )<<63 ) | LIT64( 0x7FFF800000000000 );
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes two quadruple-precision floating-point values `a' and `b', one of
-which is a NaN, and returns the appropriate NaN result. If either `a' or
-`b' is a signaling NaN, the invalid exception is raised.
--------------------------------------------------------------------------------
-*/
-static float128 propagateFloat128NaN( float128 a, float128 b )
-{
- flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;
-
- aIsNaN = float128_is_nan( a );
- aIsSignalingNaN = float128_is_signaling_nan( a );
- bIsNaN = float128_is_nan( b );
- bIsSignalingNaN = float128_is_signaling_nan( b );
- a.high |= LIT64( 0x0000800000000000 );
- b.high |= LIT64( 0x0000800000000000 );
- if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );
- if ( aIsNaN ) {
- return ( aIsSignalingNaN & bIsNaN ) ? b : a;
- }
- else {
- return b;
- }
-
-}
-
-#endif
-
diff --git a/StdLib/LibC/Softfloat/softfloat.txt b/StdLib/LibC/Softfloat/softfloat.txt
deleted file mode 100644
index c1463b2f30..0000000000
--- a/StdLib/LibC/Softfloat/softfloat.txt
+++ /dev/null
@@ -1,372 +0,0 @@
-$NetBSD: softfloat.txt,v 1.2 2006/11/24 19:46:58 christos Exp $
-
-SoftFloat Release 2a General Documentation
-
-John R. Hauser
-1998 December 13
-
-
--------------------------------------------------------------------------------
-Introduction
-
-SoftFloat is a software implementation of floating-point that conforms to
-the IEC/IEEE Standard for Binary Floating-Point Arithmetic. As many as four
-formats are supported: single precision, double precision, extended double
-precision, and quadruple precision. All operations required by the standard
-are implemented, except for conversions to and from decimal.
-
-This document gives information about the types defined and the routines
-implemented by SoftFloat. It does not attempt to define or explain the
-IEC/IEEE Floating-Point Standard. Details about the standard are available
-elsewhere.
-
-
--------------------------------------------------------------------------------
-Limitations
-
-SoftFloat is written in C and is designed to work with other C code. The
-SoftFloat header files assume an ISO/ANSI-style C compiler. No attempt
-has been made to accommodate compilers that are not ISO-conformant. In
-particular, the distributed header files will not be acceptable to any
-compiler that does not recognize function prototypes.
-
-Support for the extended double-precision and quadruple-precision formats
-depends on a C compiler that implements 64-bit integer arithmetic. If the
-largest integer format supported by the C compiler is 32 bits, SoftFloat is
-limited to only single and double precisions. When that is the case, all
-references in this document to the extended double precision, quadruple
-precision, and 64-bit integers should be ignored.
-
-
--------------------------------------------------------------------------------
-Contents
-
- Introduction
- Limitations
- Contents
- Legal Notice
- Types and Functions
- Rounding Modes
- Extended Double-Precision Rounding Precision
- Exceptions and Exception Flags
- Function Details
- Conversion Functions
- Standard Arithmetic Functions
- Remainder Functions
- Round-to-Integer Functions
- Comparison Functions
- Signaling NaN Test Functions
- Raise-Exception Function
- Contact Information
-
-
-
--------------------------------------------------------------------------------
-Legal Notice
-
-SoftFloat was written by John R. Hauser. This work was made possible in
-part by the International Computer Science Institute, located at Suite 600,
-1947 Center Street, Berkeley, California 94704. Funding was partially
-provided by the National Science Foundation under grant MIP-9311980. The
-original version of this code was written as part of a project to build
-a fixed-point vector processor in collaboration with the University of
-California at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-
--------------------------------------------------------------------------------
-Types and Functions
-
-When 64-bit integers are supported by the compiler, the `softfloat.h' header
-file defines four types: `float32' (single precision), `float64' (double
-precision), `floatx80' (extended double precision), and `float128'
-(quadruple precision). The `float32' and `float64' types are defined in
-terms of 32-bit and 64-bit integer types, respectively, while the `float128'
-type is defined as a structure of two 64-bit integers, taking into account
-the byte order of the particular machine being used. The `floatx80' type
-is defined as a structure containing one 16-bit and one 64-bit integer, with
-the machine's byte order again determining the order of the `high' and `low'
-fields.
-
-When 64-bit integers are _not_ supported by the compiler, the `softfloat.h'
-header file defines only two types: `float32' and `float64'. Because
-ISO/ANSI C guarantees at least one built-in integer type of 32 bits,
-the `float32' type is identified with an appropriate integer type. The
-`float64' type is defined as a structure of two 32-bit integers, with the
-machine's byte order determining the order of the fields.
-
-In either case, the types in `softfloat.h' are defined such that if a system
-implements the usual C `float' and `double' types according to the IEC/IEEE
-Standard, then the `float32' and `float64' types should be indistinguishable
-in memory from the native `float' and `double' types. (On the other hand,
-when `float32' or `float64' values are placed in processor registers by
-the compiler, the type of registers used may differ from those used for the
-native `float' and `double' types.)
-
-SoftFloat implements the following arithmetic operations:
-
--- Conversions among all the floating-point formats, and also between
- integers (32-bit and 64-bit) and any of the floating-point formats.
-
--- The usual add, subtract, multiply, divide, and square root operations
- for all floating-point formats.
-
--- For each format, the floating-point remainder operation defined by the
- IEC/IEEE Standard.
-
--- For each floating-point format, a ``round to integer'' operation that
- rounds to the nearest integer value in the same format. (The floating-
- point formats can hold integer values, of course.)
-
--- Comparisons between two values in the same floating-point format.
-
-The only functions required by the IEC/IEEE Standard that are not provided
-are conversions to and from decimal.
-
-
--------------------------------------------------------------------------------
-Rounding Modes
-
-All four rounding modes prescribed by the IEC/IEEE Standard are implemented
-for all operations that require rounding. The rounding mode is selected
-by the global variable `float_rounding_mode'. This variable may be set
-to one of the values `float_round_nearest_even', `float_round_to_zero',
-`float_round_down', or `float_round_up'. The rounding mode is initialized
-to nearest/even.
-
-
--------------------------------------------------------------------------------
-Extended Double-Precision Rounding Precision
-
-For extended double precision (`floatx80') only, the rounding precision
-of the standard arithmetic operations is controlled by the global variable
-`floatx80_rounding_precision'. The operations affected are:
-
- floatx80_add floatx80_sub floatx80_mul floatx80_div floatx80_sqrt
-
-When `floatx80_rounding_precision' is set to its default value of 80, these
-operations are rounded (as usual) to the full precision of the extended
-double-precision format. Setting `floatx80_rounding_precision' to 32
-or to 64 causes the operations listed to be rounded to reduced precision
-equivalent to single precision (`float32') or to double precision
-(`float64'), respectively. When rounding to reduced precision, additional
-bits in the result significand beyond the rounding point are set to zero.
-The consequences of setting `floatx80_rounding_precision' to a value other
-than 32, 64, or 80 is not specified. Operations other than the ones listed
-above are not affected by `floatx80_rounding_precision'.
-
-
--------------------------------------------------------------------------------
-Exceptions and Exception Flags
-
-All five exception flags required by the IEC/IEEE Standard are
-implemented. Each flag is stored as a unique bit in the global variable
-`float_exception_flags'. The positions of the exception flag bits within
-this variable are determined by the bit masks `float_flag_inexact',
-`float_flag_underflow', `float_flag_overflow', `float_flag_divbyzero', and
-`float_flag_invalid'. The exception flags variable is initialized to all 0,
-meaning no exceptions.
-
-An individual exception flag can be cleared with the statement
-
- float_exception_flags &= ~ float_flag_<exception>;
-
-where `<exception>' is the appropriate name. To raise a floating-point
-exception, the SoftFloat function `float_raise' should be used (see below).
-
-In the terminology of the IEC/IEEE Standard, SoftFloat can detect tininess
-for underflow either before or after rounding. The choice is made by
-the global variable `float_detect_tininess', which can be set to either
-`float_tininess_before_rounding' or `float_tininess_after_rounding'.
-Detecting tininess after rounding is better because it results in fewer
-spurious underflow signals. The other option is provided for compatibility
-with some systems. Like most systems, SoftFloat always detects loss of
-accuracy for underflow as an inexact result.
-
-
--------------------------------------------------------------------------------
-Function Details
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Conversion Functions
-
-All conversions among the floating-point formats are supported, as are all
-conversions between a floating-point format and 32-bit and 64-bit signed
-integers. The complete set of conversion functions is:
-
- int32_to_float32 int64_to_float32
- int32_to_float64 int64_to_float32
- int32_to_floatx80 int64_to_floatx80
- int32_to_float128 int64_to_float128
-
- float32_to_int32 float32_to_int64
- float32_to_int32 float64_to_int64
- floatx80_to_int32 floatx80_to_int64
- float128_to_int32 float128_to_int64
-
- float32_to_float64 float32_to_floatx80 float32_to_float128
- float64_to_float32 float64_to_floatx80 float64_to_float128
- floatx80_to_float32 floatx80_to_float64 floatx80_to_float128
- float128_to_float32 float128_to_float64 float128_to_floatx80
-
-Each conversion function takes one operand of the appropriate type and
-returns one result. Conversions from a smaller to a larger floating-point
-format are always exact and so require no rounding. Conversions from 32-bit
-integers to double precision and larger formats are also exact, and likewise
-for conversions from 64-bit integers to extended double and quadruple
-precisions.
-
-Conversions from floating-point to integer raise the invalid exception if
-the source value cannot be rounded to a representable integer of the desired
-size (32 or 64 bits). If the floating-point operand is a NaN, the largest
-positive integer is returned. Otherwise, if the conversion overflows, the
-largest integer with the same sign as the operand is returned.
-
-On conversions to integer, if the floating-point operand is not already an
-integer value, the operand is rounded according to the current rounding
-mode as specified by `float_rounding_mode'. Because C (and perhaps other
-languages) require that conversions to integers be rounded toward zero, the
-following functions are provided for improved speed and convenience:
-
- float32_to_int32_round_to_zero float32_to_int64_round_to_zero
- float64_to_int32_round_to_zero float64_to_int64_round_to_zero
- floatx80_to_int32_round_to_zero floatx80_to_int64_round_to_zero
- float128_to_int32_round_to_zero float128_to_int64_round_to_zero
-
-These variant functions ignore `float_rounding_mode' and always round toward
-zero.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Standard Arithmetic Functions
-
-The following standard arithmetic functions are provided:
-
- float32_add float32_sub float32_mul float32_div float32_sqrt
- float64_add float64_sub float64_mul float64_div float64_sqrt
- floatx80_add floatx80_sub floatx80_mul floatx80_div floatx80_sqrt
- float128_add float128_sub float128_mul float128_div float128_sqrt
-
-Each function takes two operands, except for `sqrt' which takes only one.
-The operands and result are all of the same type.
-
-Rounding of the extended double-precision (`floatx80') functions is affected
-by the `floatx80_rounding_precision' variable, as explained above in the
-section _Extended_Double-Precision_Rounding_Precision_.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Remainder Functions
-
-For each format, SoftFloat implements the remainder function according to
-the IEC/IEEE Standard. The remainder functions are:
-
- float32_rem
- float64_rem
- floatx80_rem
- float128_rem
-
-Each remainder function takes two operands. The operands and result are all
-of the same type. Given operands x and y, the remainder functions return
-the value x - n*y, where n is the integer closest to x/y. If x/y is exactly
-halfway between two integers, n is the even integer closest to x/y. The
-remainder functions are always exact and so require no rounding.
-
-Depending on the relative magnitudes of the operands, the remainder
-functions can take considerably longer to execute than the other SoftFloat
-functions. This is inherent in the remainder operation itself and is not a
-flaw in the SoftFloat implementation.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Round-to-Integer Functions
-
-For each format, SoftFloat implements the round-to-integer function
-specified by the IEC/IEEE Standard. The functions are:
-
- float32_round_to_int
- float64_round_to_int
- floatx80_round_to_int
- float128_round_to_int
-
-Each function takes a single floating-point operand and returns a result of
-the same type. (Note that the result is not an integer type.) The operand
-is rounded to an exact integer according to the current rounding mode, and
-the resulting integer value is returned in the same floating-point format.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Comparison Functions
-
-The following floating-point comparison functions are provided:
-
- float32_eq float32_le float32_lt
- float64_eq float64_le float64_lt
- floatx80_eq floatx80_le floatx80_lt
- float128_eq float128_le float128_lt
-
-Each function takes two operands of the same type and returns a 1 or 0
-representing either _true_ or _false_. The abbreviation `eq' stands for
-``equal'' (=); `le' stands for ``less than or equal'' (<=); and `lt' stands
-for ``less than'' (<).
-
-The standard greater-than (>), greater-than-or-equal (>=), and not-equal
-(!=) functions are easily obtained using the functions provided. The
-not-equal function is just the logical complement of the equal function.
-The greater-than-or-equal function is identical to the less-than-or-equal
-function with the operands reversed; and the greater-than function can be
-obtained from the less-than function in the same way.
-
-The IEC/IEEE Standard specifies that the less-than-or-equal and less-than
-functions raise the invalid exception if either input is any kind of NaN.
-The equal functions, on the other hand, are defined not to raise the invalid
-exception on quiet NaNs. For completeness, SoftFloat provides the following
-additional functions:
-
- float32_eq_signaling float32_le_quiet float32_lt_quiet
- float64_eq_signaling float64_le_quiet float64_lt_quiet
- floatx80_eq_signaling floatx80_le_quiet floatx80_lt_quiet
- float128_eq_signaling float128_le_quiet float128_lt_quiet
-
-The `signaling' equal functions are identical to the standard functions
-except that the invalid exception is raised for any NaN input. Likewise,
-the `quiet' comparison functions are identical to their counterparts except
-that the invalid exception is not raised for quiet NaNs.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Signaling NaN Test Functions
-
-The following functions test whether a floating-point value is a signaling
-NaN:
-
- float32_is_signaling_nan
- float64_is_signaling_nan
- floatx80_is_signaling_nan
- float128_is_signaling_nan
-
-The functions take one operand and return 1 if the operand is a signaling
-NaN and 0 otherwise.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Raise-Exception Function
-
-SoftFloat provides a function for raising floating-point exceptions:
-
- float_raise
-
-The function takes a mask indicating the set of exceptions to raise. No
-result is returned. In addition to setting the specified exception flags,
-this function may cause a trap or abort appropriate for the current system.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
--------------------------------------------------------------------------------
-Contact Information
-
-At the time of this writing, the most up-to-date information about
-SoftFloat and the latest release can be found at the Web page `http://
-HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/SoftFloat.html'.
-
-
diff --git a/StdLib/LibC/Softfloat/templates/milieu.h b/StdLib/LibC/Softfloat/templates/milieu.h
deleted file mode 100644
index 2fcfa1fa12..0000000000
--- a/StdLib/LibC/Softfloat/templates/milieu.h
+++ /dev/null
@@ -1,48 +0,0 @@
-
-/*
-===============================================================================
-
-This C header file is part of the SoftFloat IEC/IEEE Floating-point
-Arithmetic Package, Release 2a.
-
-Written by John R. Hauser. This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704. Funding was partially provided by the
-National Science Foundation under grant MIP-9311980. The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-/*
--------------------------------------------------------------------------------
-Include common integer types and flags.
--------------------------------------------------------------------------------
-*/
-#include "../../../processors/!!!processor.h"
-
-/*
--------------------------------------------------------------------------------
-Symbolic Boolean literals.
--------------------------------------------------------------------------------
-*/
-enum {
- FALSE = 0,
- TRUE = 1
-};
-
diff --git a/StdLib/LibC/Softfloat/templates/softfloat-specialize b/StdLib/LibC/Softfloat/templates/softfloat-specialize
deleted file mode 100644
index d8b2500f4a..0000000000
--- a/StdLib/LibC/Softfloat/templates/softfloat-specialize
+++ /dev/null
@@ -1,464 +0,0 @@
-
-/*
-===============================================================================
-
-This C source fragment is part of the SoftFloat IEC/IEEE Floating-point
-Arithmetic Package, Release 2a.
-
-Written by John R. Hauser. This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704. Funding was partially provided by the
-National Science Foundation under grant MIP-9311980. The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-/*
--------------------------------------------------------------------------------
-Underflow tininess-detection mode, statically initialized to default value.
-(The declaration in `softfloat.h' must match the `int8' type here.)
--------------------------------------------------------------------------------
-*/
-int8 float_detect_tininess = float_tininess_after_rounding;
-
-/*
--------------------------------------------------------------------------------
-Raises the exceptions specified by `flags'. Floating-point traps can be
-defined here if desired. It is currently not possible for such a trap to
-substitute a result value. If traps are not implemented, this routine
-should be simply `float_exception_flags |= flags;'.
--------------------------------------------------------------------------------
-*/
-void float_raise( int8 flags )
-{
-
- float_exception_flags |= flags;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Internal canonical NaN format.
--------------------------------------------------------------------------------
-*/
-typedef struct {
- flag sign;
- bits64 high, low;
-} commonNaNT;
-
-/*
--------------------------------------------------------------------------------
-The pattern for a default generated single-precision NaN.
--------------------------------------------------------------------------------
-*/
-#define float32_default_nan 0xFFFFFFFF
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the single-precision floating-point value `a' is a NaN;
-otherwise returns 0.
--------------------------------------------------------------------------------
-*/
-flag float32_is_nan( float32 a )
-{
-
- return ( 0xFF000000 < (bits32) ( a<<1 ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the single-precision floating-point value `a' is a signaling
-NaN; otherwise returns 0.
--------------------------------------------------------------------------------
-*/
-flag float32_is_signaling_nan( float32 a )
-{
-
- return ( ( ( a>>22 ) & 0x1FF ) == 0x1FE ) && ( a & 0x003FFFFF );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the single-precision floating-point NaN
-`a' to the canonical NaN format. If `a' is a signaling NaN, the invalid
-exception is raised.
--------------------------------------------------------------------------------
-*/
-static commonNaNT float32ToCommonNaN( float32 a )
-{
- commonNaNT z;
-
- if ( float32_is_signaling_nan( a ) ) float_raise( float_flag_invalid );
- z.sign = a>>31;
- z.low = 0;
- z.high = ( (bits64) a )<<41;
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the canonical NaN `a' to the single-
-precision floating-point format.
--------------------------------------------------------------------------------
-*/
-static float32 commonNaNToFloat32( commonNaNT a )
-{
-
- return ( ( (bits32) a.sign )<<31 ) | 0x7FC00000 | ( a.high>>41 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes two single-precision floating-point values `a' and `b', one of which
-is a NaN, and returns the appropriate NaN result. If either `a' or `b' is a
-signaling NaN, the invalid exception is raised.
--------------------------------------------------------------------------------
-*/
-static float32 propagateFloat32NaN( float32 a, float32 b )
-{
- flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;
-
- aIsNaN = float32_is_nan( a );
- aIsSignalingNaN = float32_is_signaling_nan( a );
- bIsNaN = float32_is_nan( b );
- bIsSignalingNaN = float32_is_signaling_nan( b );
- a |= 0x00400000;
- b |= 0x00400000;
- if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );
- if ( aIsNaN ) {
- return ( aIsSignalingNaN & bIsNaN ) ? b : a;
- }
- else {
- return b;
- }
-
-}
-
-/*
--------------------------------------------------------------------------------
-The pattern for a default generated double-precision NaN.
--------------------------------------------------------------------------------
-*/
-#define float64_default_nan LIT64( 0xFFFFFFFFFFFFFFFF )
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the double-precision floating-point value `a' is a NaN;
-otherwise returns 0.
--------------------------------------------------------------------------------
-*/
-flag float64_is_nan( float64 a )
-{
-
- return ( LIT64( 0xFFE0000000000000 ) < (bits64) ( a<<1 ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the double-precision floating-point value `a' is a signaling
-NaN; otherwise returns 0.
--------------------------------------------------------------------------------
-*/
-flag float64_is_signaling_nan( float64 a )
-{
-
- return
- ( ( ( a>>51 ) & 0xFFF ) == 0xFFE )
- && ( a & LIT64( 0x0007FFFFFFFFFFFF ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the double-precision floating-point NaN
-`a' to the canonical NaN format. If `a' is a signaling NaN, the invalid
-exception is raised.
--------------------------------------------------------------------------------
-*/
-static commonNaNT float64ToCommonNaN( float64 a )
-{
- commonNaNT z;
-
- if ( float64_is_signaling_nan( a ) ) float_raise( float_flag_invalid );
- z.sign = a>>63;
- z.low = 0;
- z.high = a<<12;
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the canonical NaN `a' to the double-
-precision floating-point format.
--------------------------------------------------------------------------------
-*/
-static float64 commonNaNToFloat64( commonNaNT a )
-{
-
- return
- ( ( (bits64) a.sign )<<63 )
- | LIT64( 0x7FF8000000000000 )
- | ( a.high>>12 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes two double-precision floating-point values `a' and `b', one of which
-is a NaN, and returns the appropriate NaN result. If either `a' or `b' is a
-signaling NaN, the invalid exception is raised.
--------------------------------------------------------------------------------
-*/
-static float64 propagateFloat64NaN( float64 a, float64 b )
-{
- flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;
-
- aIsNaN = float64_is_nan( a );
- aIsSignalingNaN = float64_is_signaling_nan( a );
- bIsNaN = float64_is_nan( b );
- bIsSignalingNaN = float64_is_signaling_nan( b );
- a |= LIT64( 0x0008000000000000 );
- b |= LIT64( 0x0008000000000000 );
- if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );
- if ( aIsNaN ) {
- return ( aIsSignalingNaN & bIsNaN ) ? b : a;
- }
- else {
- return b;
- }
-
-}
-
-#ifdef FLOATX80
-
-/*
--------------------------------------------------------------------------------
-The pattern for a default generated extended double-precision NaN. The
-`high' and `low' values hold the most- and least-significant bits,
-respectively.
--------------------------------------------------------------------------------
-*/
-#define floatx80_default_nan_high 0xFFFF
-#define floatx80_default_nan_low LIT64( 0xFFFFFFFFFFFFFFFF )
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the extended double-precision floating-point value `a' is a
-NaN; otherwise returns 0.
--------------------------------------------------------------------------------
-*/
-flag floatx80_is_nan( floatx80 a )
-{
-
- return ( ( a.high & 0x7FFF ) == 0x7FFF ) && (bits64) ( a.low<<1 );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the extended double-precision floating-point value `a' is a
-signaling NaN; otherwise returns 0.
--------------------------------------------------------------------------------
-*/
-flag floatx80_is_signaling_nan( floatx80 a )
-{
- bits64 aLow;
-
- aLow = a.low & ~ LIT64( 0x4000000000000000 );
- return
- ( ( a.high & 0x7FFF ) == 0x7FFF )
- && (bits64) ( aLow<<1 )
- && ( a.low == aLow );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the extended double-precision floating-
-point NaN `a' to the canonical NaN format. If `a' is a signaling NaN, the
-invalid exception is raised.
--------------------------------------------------------------------------------
-*/
-static commonNaNT floatx80ToCommonNaN( floatx80 a )
-{
- commonNaNT z;
-
- if ( floatx80_is_signaling_nan( a ) ) float_raise( float_flag_invalid );
- z.sign = a.high>>15;
- z.low = 0;
- z.high = a.low<<1;
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the canonical NaN `a' to the extended
-double-precision floating-point format.
--------------------------------------------------------------------------------
-*/
-static floatx80 commonNaNToFloatx80( commonNaNT a )
-{
- floatx80 z;
-
- z.low = LIT64( 0xC000000000000000 ) | ( a.high>>1 );
- z.high = ( ( (bits16) a.sign )<<15 ) | 0x7FFF;
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes two extended double-precision floating-point values `a' and `b', one
-of which is a NaN, and returns the appropriate NaN result. If either `a' or
-`b' is a signaling NaN, the invalid exception is raised.
--------------------------------------------------------------------------------
-*/
-static floatx80 propagateFloatx80NaN( floatx80 a, floatx80 b )
-{
- flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;
-
- aIsNaN = floatx80_is_nan( a );
- aIsSignalingNaN = floatx80_is_signaling_nan( a );
- bIsNaN = floatx80_is_nan( b );
- bIsSignalingNaN = floatx80_is_signaling_nan( b );
- a.low |= LIT64( 0xC000000000000000 );
- b.low |= LIT64( 0xC000000000000000 );
- if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );
- if ( aIsNaN ) {
- return ( aIsSignalingNaN & bIsNaN ) ? b : a;
- }
- else {
- return b;
- }
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-/*
--------------------------------------------------------------------------------
-The pattern for a default generated quadruple-precision NaN. The `high' and
-`low' values hold the most- and least-significant bits, respectively.
--------------------------------------------------------------------------------
-*/
-#define float128_default_nan_high LIT64( 0xFFFFFFFFFFFFFFFF )
-#define float128_default_nan_low LIT64( 0xFFFFFFFFFFFFFFFF )
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the quadruple-precision floating-point value `a' is a NaN;
-otherwise returns 0.
--------------------------------------------------------------------------------
-*/
-flag float128_is_nan( float128 a )
-{
-
- return
- ( LIT64( 0xFFFE000000000000 ) <= (bits64) ( a.high<<1 ) )
- && ( a.low || ( a.high & LIT64( 0x0000FFFFFFFFFFFF ) ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns 1 if the quadruple-precision floating-point value `a' is a
-signaling NaN; otherwise returns 0.
--------------------------------------------------------------------------------
-*/
-flag float128_is_signaling_nan( float128 a )
-{
-
- return
- ( ( ( a.high>>47 ) & 0xFFFF ) == 0xFFFE )
- && ( a.low || ( a.high & LIT64( 0x00007FFFFFFFFFFF ) ) );
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the quadruple-precision floating-point NaN
-`a' to the canonical NaN format. If `a' is a signaling NaN, the invalid
-exception is raised.
--------------------------------------------------------------------------------
-*/
-static commonNaNT float128ToCommonNaN( float128 a )
-{
- commonNaNT z;
-
- if ( float128_is_signaling_nan( a ) ) float_raise( float_flag_invalid );
- z.sign = a.high>>63;
- shortShift128Left( a.high, a.low, 16, &z.high, &z.low );
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Returns the result of converting the canonical NaN `a' to the quadruple-
-precision floating-point format.
--------------------------------------------------------------------------------
-*/
-static float128 commonNaNToFloat128( commonNaNT a )
-{
- float128 z;
-
- shift128Right( a.high, a.low, 16, &z.high, &z.low );
- z.high |= ( ( (bits64) a.sign )<<63 ) | LIT64( 0x7FFF800000000000 );
- return z;
-
-}
-
-/*
--------------------------------------------------------------------------------
-Takes two quadruple-precision floating-point values `a' and `b', one of
-which is a NaN, and returns the appropriate NaN result. If either `a' or
-`b' is a signaling NaN, the invalid exception is raised.
--------------------------------------------------------------------------------
-*/
-static float128 propagateFloat128NaN( float128 a, float128 b )
-{
- flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;
-
- aIsNaN = float128_is_nan( a );
- aIsSignalingNaN = float128_is_signaling_nan( a );
- bIsNaN = float128_is_nan( b );
- bIsSignalingNaN = float128_is_signaling_nan( b );
- a.high |= LIT64( 0x0000800000000000 );
- b.high |= LIT64( 0x0000800000000000 );
- if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );
- if ( aIsNaN ) {
- return ( aIsSignalingNaN & bIsNaN ) ? b : a;
- }
- else {
- return b;
- }
-
-}
-
-#endif
-
diff --git a/StdLib/LibC/Softfloat/templates/softfloat.h b/StdLib/LibC/Softfloat/templates/softfloat.h
deleted file mode 100644
index 8c0fe10134..0000000000
--- a/StdLib/LibC/Softfloat/templates/softfloat.h
+++ /dev/null
@@ -1,290 +0,0 @@
-
-/*
-===============================================================================
-
-This C header file is part of the SoftFloat IEC/IEEE Floating-point
-Arithmetic Package, Release 2a.
-
-Written by John R. Hauser. This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704. Funding was partially provided by the
-National Science Foundation under grant MIP-9311980. The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-/*
--------------------------------------------------------------------------------
-The macro `FLOATX80' must be defined to enable the extended double-precision
-floating-point format `floatx80'. If this macro is not defined, the
-`floatx80' type will not be defined, and none of the functions that either
-input or output the `floatx80' type will be defined. The same applies to
-the `FLOAT128' macro and the quadruple-precision format `float128'.
--------------------------------------------------------------------------------
-*/
-#define FLOATX80
-#define FLOAT128
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE floating-point types.
--------------------------------------------------------------------------------
-*/
-typedef !!!bits32 float32;
-typedef !!!bits64 float64;
-#ifdef FLOATX80
-typedef struct {
- !!!bits16 high;
- !!!bits64 low;
-} floatx80;
-#endif
-#ifdef FLOAT128
-typedef struct {
- !!!bits64 high, low;
-} float128;
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE floating-point underflow tininess-detection mode.
--------------------------------------------------------------------------------
-*/
-extern !!!int8 float_detect_tininess;
-enum {
- float_tininess_after_rounding = 0,
- float_tininess_before_rounding = 1
-};
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE floating-point rounding mode.
--------------------------------------------------------------------------------
-*/
-extern !!!int8 float_rounding_mode;
-enum {
- float_round_nearest_even = 0,
- float_round_to_zero = 1,
- float_round_down = 2,
- float_round_up = 3
-};
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE floating-point exception flags.
--------------------------------------------------------------------------------
-*/
-extern !!!int8 float_exception_flags;
-enum {
- float_flag_inexact = 1,
- float_flag_underflow = 2,
- float_flag_overflow = 4,
- float_flag_divbyzero = 8,
- float_flag_invalid = 16
-};
-
-/*
--------------------------------------------------------------------------------
-Routine to raise any or all of the software IEC/IEEE floating-point
-exception flags.
--------------------------------------------------------------------------------
-*/
-void float_raise( !!!int8 );
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE integer-to-floating-point conversion routines.
--------------------------------------------------------------------------------
-*/
-float32 int32_to_float32( !!!int32 );
-float64 int32_to_float64( !!!int32 );
-#ifdef FLOATX80
-floatx80 int32_to_floatx80( !!!int32 );
-#endif
-#ifdef FLOAT128
-float128 int32_to_float128( !!!int32 );
-#endif
-float32 int64_to_float32( !!!int64 );
-float64 int64_to_float64( !!!int64 );
-#ifdef FLOATX80
-floatx80 int64_to_floatx80( !!!int64 );
-#endif
-#ifdef FLOAT128
-float128 int64_to_float128( !!!int64 );
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE single-precision conversion routines.
--------------------------------------------------------------------------------
-*/
-!!!int32 float32_to_int32( float32 );
-!!!int32 float32_to_int32_round_to_zero( float32 );
-!!!int64 float32_to_int64( float32 );
-!!!int64 float32_to_int64_round_to_zero( float32 );
-float64 float32_to_float64( float32 );
-#ifdef FLOATX80
-floatx80 float32_to_floatx80( float32 );
-#endif
-#ifdef FLOAT128
-float128 float32_to_float128( float32 );
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE single-precision operations.
--------------------------------------------------------------------------------
-*/
-float32 float32_round_to_int( float32 );
-float32 float32_add( float32, float32 );
-float32 float32_sub( float32, float32 );
-float32 float32_mul( float32, float32 );
-float32 float32_div( float32, float32 );
-float32 float32_rem( float32, float32 );
-float32 float32_sqrt( float32 );
-!!!flag float32_eq( float32, float32 );
-!!!flag float32_le( float32, float32 );
-!!!flag float32_lt( float32, float32 );
-!!!flag float32_eq_signaling( float32, float32 );
-!!!flag float32_le_quiet( float32, float32 );
-!!!flag float32_lt_quiet( float32, float32 );
-!!!flag float32_is_signaling_nan( float32 );
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE double-precision conversion routines.
--------------------------------------------------------------------------------
-*/
-!!!int32 float64_to_int32( float64 );
-!!!int32 float64_to_int32_round_to_zero( float64 );
-!!!int64 float64_to_int64( float64 );
-!!!int64 float64_to_int64_round_to_zero( float64 );
-float32 float64_to_float32( float64 );
-#ifdef FLOATX80
-floatx80 float64_to_floatx80( float64 );
-#endif
-#ifdef FLOAT128
-float128 float64_to_float128( float64 );
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE double-precision operations.
--------------------------------------------------------------------------------
-*/
-float64 float64_round_to_int( float64 );
-float64 float64_add( float64, float64 );
-float64 float64_sub( float64, float64 );
-float64 float64_mul( float64, float64 );
-float64 float64_div( float64, float64 );
-float64 float64_rem( float64, float64 );
-float64 float64_sqrt( float64 );
-!!!flag float64_eq( float64, float64 );
-!!!flag float64_le( float64, float64 );
-!!!flag float64_lt( float64, float64 );
-!!!flag float64_eq_signaling( float64, float64 );
-!!!flag float64_le_quiet( float64, float64 );
-!!!flag float64_lt_quiet( float64, float64 );
-!!!flag float64_is_signaling_nan( float64 );
-
-#ifdef FLOATX80
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE extended double-precision conversion routines.
--------------------------------------------------------------------------------
-*/
-!!!int32 floatx80_to_int32( floatx80 );
-!!!int32 floatx80_to_int32_round_to_zero( floatx80 );
-!!!int64 floatx80_to_int64( floatx80 );
-!!!int64 floatx80_to_int64_round_to_zero( floatx80 );
-float32 floatx80_to_float32( floatx80 );
-float64 floatx80_to_float64( floatx80 );
-#ifdef FLOAT128
-float128 floatx80_to_float128( floatx80 );
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE extended double-precision rounding precision. Valid
-values are 32, 64, and 80.
--------------------------------------------------------------------------------
-*/
-extern !!!int8 floatx80_rounding_precision;
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE extended double-precision operations.
--------------------------------------------------------------------------------
-*/
-floatx80 floatx80_round_to_int( floatx80 );
-floatx80 floatx80_add( floatx80, floatx80 );
-floatx80 floatx80_sub( floatx80, floatx80 );
-floatx80 floatx80_mul( floatx80, floatx80 );
-floatx80 floatx80_div( floatx80, floatx80 );
-floatx80 floatx80_rem( floatx80, floatx80 );
-floatx80 floatx80_sqrt( floatx80 );
-!!!flag floatx80_eq( floatx80, floatx80 );
-!!!flag floatx80_le( floatx80, floatx80 );
-!!!flag floatx80_lt( floatx80, floatx80 );
-!!!flag floatx80_eq_signaling( floatx80, floatx80 );
-!!!flag floatx80_le_quiet( floatx80, floatx80 );
-!!!flag floatx80_lt_quiet( floatx80, floatx80 );
-!!!flag floatx80_is_signaling_nan( floatx80 );
-
-#endif
-
-#ifdef FLOAT128
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE quadruple-precision conversion routines.
--------------------------------------------------------------------------------
-*/
-!!!int32 float128_to_int32( float128 );
-!!!int32 float128_to_int32_round_to_zero( float128 );
-!!!int64 float128_to_int64( float128 );
-!!!int64 float128_to_int64_round_to_zero( float128 );
-float32 float128_to_float32( float128 );
-float64 float128_to_float64( float128 );
-#ifdef FLOATX80
-floatx80 float128_to_floatx80( float128 );
-#endif
-
-/*
--------------------------------------------------------------------------------
-Software IEC/IEEE quadruple-precision operations.
--------------------------------------------------------------------------------
-*/
-float128 float128_round_to_int( float128 );
-float128 float128_add( float128, float128 );
-float128 float128_sub( float128, float128 );
-float128 float128_mul( float128, float128 );
-float128 float128_div( float128, float128 );
-float128 float128_rem( float128, float128 );
-float128 float128_sqrt( float128 );
-!!!flag float128_eq( float128, float128 );
-!!!flag float128_le( float128, float128 );
-!!!flag float128_lt( float128, float128 );
-!!!flag float128_eq_signaling( float128, float128 );
-!!!flag float128_le_quiet( float128, float128 );
-!!!flag float128_lt_quiet( float128, float128 );
-!!!flag float128_is_signaling_nan( float128 );
-
-#endif
-
diff --git a/StdLib/LibC/Softfloat/timesoftfloat.c b/StdLib/LibC/Softfloat/timesoftfloat.c
deleted file mode 100644
index c6eabc6ac1..0000000000
--- a/StdLib/LibC/Softfloat/timesoftfloat.c
+++ /dev/null
@@ -1,2641 +0,0 @@
-/* $NetBSD: timesoftfloat.c,v 1.1 2000/06/06 08:15:11 bjh21 Exp $ */
-
-/*
-===============================================================================
-
-This C source file is part of the SoftFloat IEC/IEEE Floating-point
-Arithmetic Package, Release 2a.
-
-Written by John R. Hauser. This work was made possible in part by the
-International Computer Science Institute, located at Suite 600, 1947 Center
-Street, Berkeley, California 94704. Funding was partially provided by the
-National Science Foundation under grant MIP-9311980. The original version
-of this code was written as part of a project to build a fixed-point vector
-processor in collaboration with the University of California at Berkeley,
-overseen by Profs. Nelson Morgan and John Wawrzynek. More information
-is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
-arithmetic/SoftFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: timesoftfloat.c,v 1.1 2000/06/06 08:15:11 bjh21 Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <stdio.h>
-#include <time.h>
-#include "milieu.h"
-#include "softfloat.h"
-
-enum {
- minIterations = 1000
-};
-
-static void fail( const char *message, ... )
-{
- va_list varArgs;
-
- fputs( "timesoftfloat: ", stderr );
- va_start( varArgs, message );
- vfprintf( stderr, message, varArgs );
- va_end( varArgs );
- fputs( ".\n", stderr );
- exit( EXIT_FAILURE );
-
-}
-
-static char *functionName;
-static char *roundingPrecisionName, *roundingModeName, *tininessModeName;
-
-static void reportTime( int32 count, long clocks )
-{
-
- printf(
- "%8.1f kops/s: %s",
- ( count / ( ( (float) clocks ) / CLOCKS_PER_SEC ) ) / 1000,
- functionName
- );
- if ( roundingModeName ) {
- if ( roundingPrecisionName ) {
- fputs( ", precision ", stdout );
- fputs( roundingPrecisionName, stdout );
- }
- fputs( ", rounding ", stdout );
- fputs( roundingModeName, stdout );
- if ( tininessModeName ) {
- fputs( ", tininess ", stdout );
- fputs( tininessModeName, stdout );
- fputs( " rounding", stdout );
- }
- }
- fputc( '\n', stdout );
-
-}
-
-enum {
- numInputs_int32 = 32
-};
-
-static const int32 inputs_int32[ numInputs_int32 ] = {
- 0xFFFFBB79, 0x405CF80F, 0x00000000, 0xFFFFFD04,
- 0xFFF20002, 0x0C8EF795, 0xF00011FF, 0x000006CA,
- 0x00009BFE, 0xFF4862E3, 0x9FFFEFFE, 0xFFFFFFB7,
- 0x0BFF7FFF, 0x0000F37A, 0x0011DFFE, 0x00000006,
- 0xFFF02006, 0xFFFFF7D1, 0x10200003, 0xDE8DF765,
- 0x00003E02, 0x000019E8, 0x0008FFFE, 0xFFFFFB5C,
- 0xFFDF7FFE, 0x07C42FBF, 0x0FFFE3FF, 0x040B9F13,
- 0xBFFFFFF8, 0x0001BF56, 0x000017F6, 0x000A908A
-};
-
-static void time_a_int32_z_float32( float32 function( int32 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_int32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_int32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_a_int32_z_float64( float64 function( int32 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_int32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_int32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#ifdef FLOATX80
-
-static void time_a_int32_z_floatx80( floatx80 function( int32 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_int32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_int32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-static void time_a_int32_z_float128( float128 function( int32 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_int32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_int32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_int32 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#endif
-
-enum {
- numInputs_int64 = 32
-};
-
-static const int64 inputs_int64[ numInputs_int64 ] = {
- LIT64( 0xFBFFC3FFFFFFFFFF ),
- LIT64( 0x0000000003C589BC ),
- LIT64( 0x00000000400013FE ),
- LIT64( 0x0000000000186171 ),
- LIT64( 0xFFFFFFFFFFFEFBFA ),
- LIT64( 0xFFFFFD79E6DFFC73 ),
- LIT64( 0x0000000010001DFF ),
- LIT64( 0xDD1A0F0C78513710 ),
- LIT64( 0xFFFF83FFFFFEFFFE ),
- LIT64( 0x00756EBD1AD0C1C7 ),
- LIT64( 0x0003FDFFFFFFFFBE ),
- LIT64( 0x0007D0FB2C2CA951 ),
- LIT64( 0x0007FC0007FFFFFE ),
- LIT64( 0x0000001F942B18BB ),
- LIT64( 0x0000080101FFFFFE ),
- LIT64( 0xFFFFFFFFFFFF0978 ),
- LIT64( 0x000000000008BFFF ),
- LIT64( 0x0000000006F5AF08 ),
- LIT64( 0xFFDEFF7FFFFFFFFE ),
- LIT64( 0x0000000000000003 ),
- LIT64( 0x3FFFFFFFFF80007D ),
- LIT64( 0x0000000000000078 ),
- LIT64( 0xFFF80000007FDFFD ),
- LIT64( 0x1BBC775B78016AB0 ),
- LIT64( 0xFFF9001FFFFFFFFE ),
- LIT64( 0xFFFD4767AB98E43F ),
- LIT64( 0xFFFFFEFFFE00001E ),
- LIT64( 0xFFFFFFFFFFF04EFD ),
- LIT64( 0x07FFFFFFFFFFF7FF ),
- LIT64( 0xFFFC9EAA38F89050 ),
- LIT64( 0x00000020FBFFFFFE ),
- LIT64( 0x0000099AE6455357 )
-};
-
-static void time_a_int64_z_float32( float32 function( int64 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_int64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_int64 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_int64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_int64 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_a_int64_z_float64( float64 function( int64 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_int64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_int64 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_int64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_int64 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#ifdef FLOATX80
-
-static void time_a_int64_z_floatx80( floatx80 function( int64 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_int64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_int64 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_int64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_int64 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-static void time_a_int64_z_float128( float128 function( int64 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_int64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_int64 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_int64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_int64 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#endif
-
-enum {
- numInputs_float32 = 32
-};
-
-static const float32 inputs_float32[ numInputs_float32 ] = {
- 0x4EFA0000, 0xC1D0B328, 0x80000000, 0x3E69A31E,
- 0xAF803EFF, 0x3F800000, 0x17BF8000, 0xE74A301A,
- 0x4E010003, 0x7EE3C75D, 0xBD803FE0, 0xBFFEFF00,
- 0x7981F800, 0x431FFFFC, 0xC100C000, 0x3D87EFFF,
- 0x4103FEFE, 0xBC000007, 0xBF01F7FF, 0x4E6C6B5C,
- 0xC187FFFE, 0xC58B9F13, 0x4F88007F, 0xDF004007,
- 0xB7FFD7FE, 0x7E8001FB, 0x46EFFBFF, 0x31C10000,
- 0xDB428661, 0x33F89B1F, 0xA3BFEFFF, 0x537BFFBE
-};
-
-static void time_a_float32_z_int32( int32 function( float32 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_float32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_float32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_a_float32_z_int64( int64 function( float32 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_float32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_float32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_a_float32_z_float64( float64 function( float32 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_float32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_float32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#ifdef FLOATX80
-
-static void time_a_float32_z_floatx80( floatx80 function( float32 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_float32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_float32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-static void time_a_float32_z_float128( float128 function( float32 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_float32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_float32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#endif
-
-static void time_az_float32( float32 function( float32 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_float32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_float32[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_ab_float32_z_flag( flag function( float32, float32 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNumA, inputNumB;
-
- count = 0;
- inputNumA = 0;
- inputNumB = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function(
- inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] );
- inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 );
- if ( inputNumA == 0 ) ++inputNumB;
- inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNumA = 0;
- inputNumB = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function(
- inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] );
- inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 );
- if ( inputNumA == 0 ) ++inputNumB;
- inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_abz_float32( float32 function( float32, float32 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNumA, inputNumB;
-
- count = 0;
- inputNumA = 0;
- inputNumB = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function(
- inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] );
- inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 );
- if ( inputNumA == 0 ) ++inputNumB;
- inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNumA = 0;
- inputNumB = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function(
- inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] );
- inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 );
- if ( inputNumA == 0 ) ++inputNumB;
- inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static const float32 inputs_float32_pos[ numInputs_float32 ] = {
- 0x4EFA0000, 0x41D0B328, 0x00000000, 0x3E69A31E,
- 0x2F803EFF, 0x3F800000, 0x17BF8000, 0x674A301A,
- 0x4E010003, 0x7EE3C75D, 0x3D803FE0, 0x3FFEFF00,
- 0x7981F800, 0x431FFFFC, 0x4100C000, 0x3D87EFFF,
- 0x4103FEFE, 0x3C000007, 0x3F01F7FF, 0x4E6C6B5C,
- 0x4187FFFE, 0x458B9F13, 0x4F88007F, 0x5F004007,
- 0x37FFD7FE, 0x7E8001FB, 0x46EFFBFF, 0x31C10000,
- 0x5B428661, 0x33F89B1F, 0x23BFEFFF, 0x537BFFBE
-};
-
-static void time_az_float32_pos( float32 function( float32 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_float32_pos[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_float32_pos[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-enum {
- numInputs_float64 = 32
-};
-
-static const float64 inputs_float64[ numInputs_float64 ] = {
- LIT64( 0x422FFFC008000000 ),
- LIT64( 0xB7E0000480000000 ),
- LIT64( 0xF3FD2546120B7935 ),
- LIT64( 0x3FF0000000000000 ),
- LIT64( 0xCE07F766F09588D6 ),
- LIT64( 0x8000000000000000 ),
- LIT64( 0x3FCE000400000000 ),
- LIT64( 0x8313B60F0032BED8 ),
- LIT64( 0xC1EFFFFFC0002000 ),
- LIT64( 0x3FB3C75D224F2B0F ),
- LIT64( 0x7FD00000004000FF ),
- LIT64( 0xA12FFF8000001FFF ),
- LIT64( 0x3EE0000000FE0000 ),
- LIT64( 0x0010000080000004 ),
- LIT64( 0x41CFFFFE00000020 ),
- LIT64( 0x40303FFFFFFFFFFD ),
- LIT64( 0x3FD000003FEFFFFF ),
- LIT64( 0xBFD0000010000000 ),
- LIT64( 0xB7FC6B5C16CA55CF ),
- LIT64( 0x413EEB940B9D1301 ),
- LIT64( 0xC7E00200001FFFFF ),
- LIT64( 0x47F00021FFFFFFFE ),
- LIT64( 0xBFFFFFFFF80000FF ),
- LIT64( 0xC07FFFFFE00FFFFF ),
- LIT64( 0x001497A63740C5E8 ),
- LIT64( 0xC4BFFFE0001FFFFF ),
- LIT64( 0x96FFDFFEFFFFFFFF ),
- LIT64( 0x403FC000000001FE ),
- LIT64( 0xFFD00000000001F6 ),
- LIT64( 0x0640400002000000 ),
- LIT64( 0x479CEE1E4F789FE0 ),
- LIT64( 0xC237FFFFFFFFFDFE )
-};
-
-static void time_a_float64_z_int32( int32 function( float64 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_float64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_float64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_a_float64_z_int64( int64 function( float64 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_float64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_float64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_a_float64_z_float32( float32 function( float64 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_float64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_float64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#ifdef FLOATX80
-
-static void time_a_float64_z_floatx80( floatx80 function( float64 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_float64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_float64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-static void time_a_float64_z_float128( float128 function( float64 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_float64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_float64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#endif
-
-static void time_az_float64( float64 function( float64 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_float64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_float64[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_ab_float64_z_flag( flag function( float64, float64 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNumA, inputNumB;
-
- count = 0;
- inputNumA = 0;
- inputNumB = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function(
- inputs_float64[ inputNumA ], inputs_float64[ inputNumB ] );
- inputNumA = ( inputNumA + 1 ) & ( numInputs_float64 - 1 );
- if ( inputNumA == 0 ) ++inputNumB;
- inputNumB = ( inputNumB + 1 ) & ( numInputs_float64 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNumA = 0;
- inputNumB = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function(
- inputs_float64[ inputNumA ], inputs_float64[ inputNumB ] );
- inputNumA = ( inputNumA + 1 ) & ( numInputs_float64 - 1 );
- if ( inputNumA == 0 ) ++inputNumB;
- inputNumB = ( inputNumB + 1 ) & ( numInputs_float64 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_abz_float64( float64 function( float64, float64 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNumA, inputNumB;
-
- count = 0;
- inputNumA = 0;
- inputNumB = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function(
- inputs_float64[ inputNumA ], inputs_float64[ inputNumB ] );
- inputNumA = ( inputNumA + 1 ) & ( numInputs_float64 - 1 );
- if ( inputNumA == 0 ) ++inputNumB;
- inputNumB = ( inputNumB + 1 ) & ( numInputs_float64 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNumA = 0;
- inputNumB = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function(
- inputs_float64[ inputNumA ], inputs_float64[ inputNumB ] );
- inputNumA = ( inputNumA + 1 ) & ( numInputs_float64 - 1 );
- if ( inputNumA == 0 ) ++inputNumB;
- inputNumB = ( inputNumB + 1 ) & ( numInputs_float64 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static const float64 inputs_float64_pos[ numInputs_float64 ] = {
- LIT64( 0x422FFFC008000000 ),
- LIT64( 0x37E0000480000000 ),
- LIT64( 0x73FD2546120B7935 ),
- LIT64( 0x3FF0000000000000 ),
- LIT64( 0x4E07F766F09588D6 ),
- LIT64( 0x0000000000000000 ),
- LIT64( 0x3FCE000400000000 ),
- LIT64( 0x0313B60F0032BED8 ),
- LIT64( 0x41EFFFFFC0002000 ),
- LIT64( 0x3FB3C75D224F2B0F ),
- LIT64( 0x7FD00000004000FF ),
- LIT64( 0x212FFF8000001FFF ),
- LIT64( 0x3EE0000000FE0000 ),
- LIT64( 0x0010000080000004 ),
- LIT64( 0x41CFFFFE00000020 ),
- LIT64( 0x40303FFFFFFFFFFD ),
- LIT64( 0x3FD000003FEFFFFF ),
- LIT64( 0x3FD0000010000000 ),
- LIT64( 0x37FC6B5C16CA55CF ),
- LIT64( 0x413EEB940B9D1301 ),
- LIT64( 0x47E00200001FFFFF ),
- LIT64( 0x47F00021FFFFFFFE ),
- LIT64( 0x3FFFFFFFF80000FF ),
- LIT64( 0x407FFFFFE00FFFFF ),
- LIT64( 0x001497A63740C5E8 ),
- LIT64( 0x44BFFFE0001FFFFF ),
- LIT64( 0x16FFDFFEFFFFFFFF ),
- LIT64( 0x403FC000000001FE ),
- LIT64( 0x7FD00000000001F6 ),
- LIT64( 0x0640400002000000 ),
- LIT64( 0x479CEE1E4F789FE0 ),
- LIT64( 0x4237FFFFFFFFFDFE )
-};
-
-static void time_az_float64_pos( float64 function( float64 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- function( inputs_float64_pos[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- function( inputs_float64_pos[ inputNum ] );
- inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#ifdef FLOATX80
-
-enum {
- numInputs_floatx80 = 32
-};
-
-static const struct {
- bits16 high;
- bits64 low;
-} inputs_floatx80[ numInputs_floatx80 ] = {
- { 0xC03F, LIT64( 0xA9BE15A19C1E8B62 ) },
- { 0x8000, LIT64( 0x0000000000000000 ) },
- { 0x75A8, LIT64( 0xE59591E4788957A5 ) },
- { 0xBFFF, LIT64( 0xFFF0000000000040 ) },
- { 0x0CD8, LIT64( 0xFC000000000007FE ) },
- { 0x43BA, LIT64( 0x99A4000000000000 ) },
- { 0x3FFF, LIT64( 0x8000000000000000 ) },
- { 0x4081, LIT64( 0x94FBF1BCEB5545F0 ) },
- { 0x403E, LIT64( 0xFFF0000000002000 ) },
- { 0x3FFE, LIT64( 0xC860E3C75D224F28 ) },
- { 0x407E, LIT64( 0xFC00000FFFFFFFFE ) },
- { 0x737A, LIT64( 0x800000007FFDFFFE ) },
- { 0x4044, LIT64( 0xFFFFFF80000FFFFF ) },
- { 0xBBFE, LIT64( 0x8000040000001FFE ) },
- { 0xC002, LIT64( 0xFF80000000000020 ) },
- { 0xDE8D, LIT64( 0xFFFFFFFFFFE00004 ) },
- { 0xC004, LIT64( 0x8000000000003FFB ) },
- { 0x407F, LIT64( 0x800000000003FFFE ) },
- { 0xC000, LIT64( 0xA459EE6A5C16CA55 ) },
- { 0x8003, LIT64( 0xC42CBF7399AEEB94 ) },
- { 0xBF7F, LIT64( 0xF800000000000006 ) },
- { 0xC07F, LIT64( 0xBF56BE8871F28FEA ) },
- { 0xC07E, LIT64( 0xFFFF77FFFFFFFFFE ) },
- { 0xADC9, LIT64( 0x8000000FFFFFFFDE ) },
- { 0xC001, LIT64( 0xEFF7FFFFFFFFFFFF ) },
- { 0x4001, LIT64( 0xBE84F30125C497A6 ) },
- { 0xC06B, LIT64( 0xEFFFFFFFFFFFFFFF ) },
- { 0x4080, LIT64( 0xFFFFFFFFBFFFFFFF ) },
- { 0x87E9, LIT64( 0x81FFFFFFFFFFFBFF ) },
- { 0xA63F, LIT64( 0x801FFFFFFEFFFFFE ) },
- { 0x403C, LIT64( 0x801FFFFFFFF7FFFF ) },
- { 0x4018, LIT64( 0x8000000000080003 ) }
-};
-
-static void time_a_floatx80_z_int32( int32 function( floatx80 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
- floatx80 a;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_floatx80[ inputNum ].low;
- a.high = inputs_floatx80[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_floatx80[ inputNum ].low;
- a.high = inputs_floatx80[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_a_floatx80_z_int64( int64 function( floatx80 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
- floatx80 a;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_floatx80[ inputNum ].low;
- a.high = inputs_floatx80[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_floatx80[ inputNum ].low;
- a.high = inputs_floatx80[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_a_floatx80_z_float32( float32 function( floatx80 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
- floatx80 a;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_floatx80[ inputNum ].low;
- a.high = inputs_floatx80[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_floatx80[ inputNum ].low;
- a.high = inputs_floatx80[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_a_floatx80_z_float64( float64 function( floatx80 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
- floatx80 a;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_floatx80[ inputNum ].low;
- a.high = inputs_floatx80[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_floatx80[ inputNum ].low;
- a.high = inputs_floatx80[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#ifdef FLOAT128
-
-static void time_a_floatx80_z_float128( float128 function( floatx80 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
- floatx80 a;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_floatx80[ inputNum ].low;
- a.high = inputs_floatx80[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_floatx80[ inputNum ].low;
- a.high = inputs_floatx80[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#endif
-
-static void time_az_floatx80( floatx80 function( floatx80 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
- floatx80 a;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_floatx80[ inputNum ].low;
- a.high = inputs_floatx80[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_floatx80[ inputNum ].low;
- a.high = inputs_floatx80[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_ab_floatx80_z_flag( flag function( floatx80, floatx80 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNumA, inputNumB;
- floatx80 a, b;
-
- count = 0;
- inputNumA = 0;
- inputNumB = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_floatx80[ inputNumA ].low;
- a.high = inputs_floatx80[ inputNumA ].high;
- b.low = inputs_floatx80[ inputNumB ].low;
- b.high = inputs_floatx80[ inputNumB ].high;
- function( a, b );
- inputNumA = ( inputNumA + 1 ) & ( numInputs_floatx80 - 1 );
- if ( inputNumA == 0 ) ++inputNumB;
- inputNumB = ( inputNumB + 1 ) & ( numInputs_floatx80 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNumA = 0;
- inputNumB = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_floatx80[ inputNumA ].low;
- a.high = inputs_floatx80[ inputNumA ].high;
- b.low = inputs_floatx80[ inputNumB ].low;
- b.high = inputs_floatx80[ inputNumB ].high;
- function( a, b );
- inputNumA = ( inputNumA + 1 ) & ( numInputs_floatx80 - 1 );
- if ( inputNumA == 0 ) ++inputNumB;
- inputNumB = ( inputNumB + 1 ) & ( numInputs_floatx80 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_abz_floatx80( floatx80 function( floatx80, floatx80 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNumA, inputNumB;
- floatx80 a, b;
-
- count = 0;
- inputNumA = 0;
- inputNumB = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_floatx80[ inputNumA ].low;
- a.high = inputs_floatx80[ inputNumA ].high;
- b.low = inputs_floatx80[ inputNumB ].low;
- b.high = inputs_floatx80[ inputNumB ].high;
- function( a, b );
- inputNumA = ( inputNumA + 1 ) & ( numInputs_floatx80 - 1 );
- if ( inputNumA == 0 ) ++inputNumB;
- inputNumB = ( inputNumB + 1 ) & ( numInputs_floatx80 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNumA = 0;
- inputNumB = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_floatx80[ inputNumA ].low;
- a.high = inputs_floatx80[ inputNumA ].high;
- b.low = inputs_floatx80[ inputNumB ].low;
- b.high = inputs_floatx80[ inputNumB ].high;
- function( a, b );
- inputNumA = ( inputNumA + 1 ) & ( numInputs_floatx80 - 1 );
- if ( inputNumA == 0 ) ++inputNumB;
- inputNumB = ( inputNumB + 1 ) & ( numInputs_floatx80 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static const struct {
- bits16 high;
- bits64 low;
-} inputs_floatx80_pos[ numInputs_floatx80 ] = {
- { 0x403F, LIT64( 0xA9BE15A19C1E8B62 ) },
- { 0x0000, LIT64( 0x0000000000000000 ) },
- { 0x75A8, LIT64( 0xE59591E4788957A5 ) },
- { 0x3FFF, LIT64( 0xFFF0000000000040 ) },
- { 0x0CD8, LIT64( 0xFC000000000007FE ) },
- { 0x43BA, LIT64( 0x99A4000000000000 ) },
- { 0x3FFF, LIT64( 0x8000000000000000 ) },
- { 0x4081, LIT64( 0x94FBF1BCEB5545F0 ) },
- { 0x403E, LIT64( 0xFFF0000000002000 ) },
- { 0x3FFE, LIT64( 0xC860E3C75D224F28 ) },
- { 0x407E, LIT64( 0xFC00000FFFFFFFFE ) },
- { 0x737A, LIT64( 0x800000007FFDFFFE ) },
- { 0x4044, LIT64( 0xFFFFFF80000FFFFF ) },
- { 0x3BFE, LIT64( 0x8000040000001FFE ) },
- { 0x4002, LIT64( 0xFF80000000000020 ) },
- { 0x5E8D, LIT64( 0xFFFFFFFFFFE00004 ) },
- { 0x4004, LIT64( 0x8000000000003FFB ) },
- { 0x407F, LIT64( 0x800000000003FFFE ) },
- { 0x4000, LIT64( 0xA459EE6A5C16CA55 ) },
- { 0x0003, LIT64( 0xC42CBF7399AEEB94 ) },
- { 0x3F7F, LIT64( 0xF800000000000006 ) },
- { 0x407F, LIT64( 0xBF56BE8871F28FEA ) },
- { 0x407E, LIT64( 0xFFFF77FFFFFFFFFE ) },
- { 0x2DC9, LIT64( 0x8000000FFFFFFFDE ) },
- { 0x4001, LIT64( 0xEFF7FFFFFFFFFFFF ) },
- { 0x4001, LIT64( 0xBE84F30125C497A6 ) },
- { 0x406B, LIT64( 0xEFFFFFFFFFFFFFFF ) },
- { 0x4080, LIT64( 0xFFFFFFFFBFFFFFFF ) },
- { 0x07E9, LIT64( 0x81FFFFFFFFFFFBFF ) },
- { 0x263F, LIT64( 0x801FFFFFFEFFFFFE ) },
- { 0x403C, LIT64( 0x801FFFFFFFF7FFFF ) },
- { 0x4018, LIT64( 0x8000000000080003 ) }
-};
-
-static void time_az_floatx80_pos( floatx80 function( floatx80 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
- floatx80 a;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_floatx80_pos[ inputNum ].low;
- a.high = inputs_floatx80_pos[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_floatx80_pos[ inputNum ].low;
- a.high = inputs_floatx80_pos[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_floatx80 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-enum {
- numInputs_float128 = 32
-};
-
-static const struct {
- bits64 high, low;
-} inputs_float128[ numInputs_float128 ] = {
- { LIT64( 0x3FDA200000100000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x3FFF000000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x85F14776190C8306 ), LIT64( 0xD8715F4E3D54BB92 ) },
- { LIT64( 0xF2B00000007FFFFF ), LIT64( 0xFFFFFFFFFFF7FFFF ) },
- { LIT64( 0x8000000000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0xBFFFFFFFFFE00000 ), LIT64( 0x0000008000000000 ) },
- { LIT64( 0x407F1719CE722F3E ), LIT64( 0xDA6B3FE5FF29425B ) },
- { LIT64( 0x43FFFF8000000000 ), LIT64( 0x0000000000400000 ) },
- { LIT64( 0x401E000000000100 ), LIT64( 0x0000000000002000 ) },
- { LIT64( 0x3FFED71DACDA8E47 ), LIT64( 0x4860E3C75D224F28 ) },
- { LIT64( 0xBF7ECFC1E90647D1 ), LIT64( 0x7A124FE55623EE44 ) },
- { LIT64( 0x0DF7007FFFFFFFFF ), LIT64( 0xFFFFFFFFEFFFFFFF ) },
- { LIT64( 0x3FE5FFEFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFEFFF ) },
- { LIT64( 0x403FFFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFBFE ) },
- { LIT64( 0xBFFB2FBF7399AFEB ), LIT64( 0xA459EE6A5C16CA55 ) },
- { LIT64( 0xBDB8FFFFFFFFFFFC ), LIT64( 0x0000000000000400 ) },
- { LIT64( 0x3FC8FFDFFFFFFFFF ), LIT64( 0xFFFFFFFFF0000000 ) },
- { LIT64( 0x3FFBFFFFFFDFFFFF ), LIT64( 0xFFF8000000000000 ) },
- { LIT64( 0x407043C11737BE84 ), LIT64( 0xDDD58212ADC937F4 ) },
- { LIT64( 0x8001000000000000 ), LIT64( 0x0000001000000001 ) },
- { LIT64( 0xC036FFFFFFFFFFFF ), LIT64( 0xFE40000000000000 ) },
- { LIT64( 0x4002FFFFFE000002 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x4000C3FEDE897773 ), LIT64( 0x326AC4FD8EFBE6DC ) },
- { LIT64( 0xBFFF0000000FFFFF ), LIT64( 0xFFFFFE0000000000 ) },
- { LIT64( 0x62C3E502146E426D ), LIT64( 0x43F3CAA0DC7DF1A0 ) },
- { LIT64( 0xB5CBD32E52BB570E ), LIT64( 0xBCC477CB11C6236C ) },
- { LIT64( 0xE228FFFFFFC00000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x3F80000000000000 ), LIT64( 0x0000000080000008 ) },
- { LIT64( 0xC1AFFFDFFFFFFFFF ), LIT64( 0xFFFC000000000000 ) },
- { LIT64( 0xC96F000000000000 ), LIT64( 0x00000001FFFBFFFF ) },
- { LIT64( 0x3DE09BFE7923A338 ), LIT64( 0xBCC8FBBD7CEC1F4F ) },
- { LIT64( 0x401CFFFFFFFFFFFF ), LIT64( 0xFFFFFFFEFFFFFF80 ) }
-};
-
-static void time_a_float128_z_int32( int32 function( float128 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
- float128 a;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_float128[ inputNum ].low;
- a.high = inputs_float128[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_float128[ inputNum ].low;
- a.high = inputs_float128[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_a_float128_z_int64( int64 function( float128 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
- float128 a;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_float128[ inputNum ].low;
- a.high = inputs_float128[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_float128[ inputNum ].low;
- a.high = inputs_float128[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_a_float128_z_float32( float32 function( float128 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
- float128 a;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_float128[ inputNum ].low;
- a.high = inputs_float128[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_float128[ inputNum ].low;
- a.high = inputs_float128[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_a_float128_z_float64( float64 function( float128 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
- float128 a;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_float128[ inputNum ].low;
- a.high = inputs_float128[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_float128[ inputNum ].low;
- a.high = inputs_float128[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#ifdef FLOATX80
-
-static void time_a_float128_z_floatx80( floatx80 function( float128 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
- float128 a;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_float128[ inputNum ].low;
- a.high = inputs_float128[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_float128[ inputNum ].low;
- a.high = inputs_float128[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#endif
-
-static void time_az_float128( float128 function( float128 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
- float128 a;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_float128[ inputNum ].low;
- a.high = inputs_float128[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_float128[ inputNum ].low;
- a.high = inputs_float128[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_ab_float128_z_flag( flag function( float128, float128 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNumA, inputNumB;
- float128 a, b;
-
- count = 0;
- inputNumA = 0;
- inputNumB = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_float128[ inputNumA ].low;
- a.high = inputs_float128[ inputNumA ].high;
- b.low = inputs_float128[ inputNumB ].low;
- b.high = inputs_float128[ inputNumB ].high;
- function( a, b );
- inputNumA = ( inputNumA + 1 ) & ( numInputs_float128 - 1 );
- if ( inputNumA == 0 ) ++inputNumB;
- inputNumB = ( inputNumB + 1 ) & ( numInputs_float128 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNumA = 0;
- inputNumB = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_float128[ inputNumA ].low;
- a.high = inputs_float128[ inputNumA ].high;
- b.low = inputs_float128[ inputNumB ].low;
- b.high = inputs_float128[ inputNumB ].high;
- function( a, b );
- inputNumA = ( inputNumA + 1 ) & ( numInputs_float128 - 1 );
- if ( inputNumA == 0 ) ++inputNumB;
- inputNumB = ( inputNumB + 1 ) & ( numInputs_float128 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static void time_abz_float128( float128 function( float128, float128 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNumA, inputNumB;
- float128 a, b;
-
- count = 0;
- inputNumA = 0;
- inputNumB = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_float128[ inputNumA ].low;
- a.high = inputs_float128[ inputNumA ].high;
- b.low = inputs_float128[ inputNumB ].low;
- b.high = inputs_float128[ inputNumB ].high;
- function( a, b );
- inputNumA = ( inputNumA + 1 ) & ( numInputs_float128 - 1 );
- if ( inputNumA == 0 ) ++inputNumB;
- inputNumB = ( inputNumB + 1 ) & ( numInputs_float128 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNumA = 0;
- inputNumB = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_float128[ inputNumA ].low;
- a.high = inputs_float128[ inputNumA ].high;
- b.low = inputs_float128[ inputNumB ].low;
- b.high = inputs_float128[ inputNumB ].high;
- function( a, b );
- inputNumA = ( inputNumA + 1 ) & ( numInputs_float128 - 1 );
- if ( inputNumA == 0 ) ++inputNumB;
- inputNumB = ( inputNumB + 1 ) & ( numInputs_float128 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-static const struct {
- bits64 high, low;
-} inputs_float128_pos[ numInputs_float128 ] = {
- { LIT64( 0x3FDA200000100000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x3FFF000000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x05F14776190C8306 ), LIT64( 0xD8715F4E3D54BB92 ) },
- { LIT64( 0x72B00000007FFFFF ), LIT64( 0xFFFFFFFFFFF7FFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x3FFFFFFFFFE00000 ), LIT64( 0x0000008000000000 ) },
- { LIT64( 0x407F1719CE722F3E ), LIT64( 0xDA6B3FE5FF29425B ) },
- { LIT64( 0x43FFFF8000000000 ), LIT64( 0x0000000000400000 ) },
- { LIT64( 0x401E000000000100 ), LIT64( 0x0000000000002000 ) },
- { LIT64( 0x3FFED71DACDA8E47 ), LIT64( 0x4860E3C75D224F28 ) },
- { LIT64( 0x3F7ECFC1E90647D1 ), LIT64( 0x7A124FE55623EE44 ) },
- { LIT64( 0x0DF7007FFFFFFFFF ), LIT64( 0xFFFFFFFFEFFFFFFF ) },
- { LIT64( 0x3FE5FFEFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFEFFF ) },
- { LIT64( 0x403FFFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFBFE ) },
- { LIT64( 0x3FFB2FBF7399AFEB ), LIT64( 0xA459EE6A5C16CA55 ) },
- { LIT64( 0x3DB8FFFFFFFFFFFC ), LIT64( 0x0000000000000400 ) },
- { LIT64( 0x3FC8FFDFFFFFFFFF ), LIT64( 0xFFFFFFFFF0000000 ) },
- { LIT64( 0x3FFBFFFFFFDFFFFF ), LIT64( 0xFFF8000000000000 ) },
- { LIT64( 0x407043C11737BE84 ), LIT64( 0xDDD58212ADC937F4 ) },
- { LIT64( 0x0001000000000000 ), LIT64( 0x0000001000000001 ) },
- { LIT64( 0x4036FFFFFFFFFFFF ), LIT64( 0xFE40000000000000 ) },
- { LIT64( 0x4002FFFFFE000002 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x4000C3FEDE897773 ), LIT64( 0x326AC4FD8EFBE6DC ) },
- { LIT64( 0x3FFF0000000FFFFF ), LIT64( 0xFFFFFE0000000000 ) },
- { LIT64( 0x62C3E502146E426D ), LIT64( 0x43F3CAA0DC7DF1A0 ) },
- { LIT64( 0x35CBD32E52BB570E ), LIT64( 0xBCC477CB11C6236C ) },
- { LIT64( 0x6228FFFFFFC00000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x3F80000000000000 ), LIT64( 0x0000000080000008 ) },
- { LIT64( 0x41AFFFDFFFFFFFFF ), LIT64( 0xFFFC000000000000 ) },
- { LIT64( 0x496F000000000000 ), LIT64( 0x00000001FFFBFFFF ) },
- { LIT64( 0x3DE09BFE7923A338 ), LIT64( 0xBCC8FBBD7CEC1F4F ) },
- { LIT64( 0x401CFFFFFFFFFFFF ), LIT64( 0xFFFFFFFEFFFFFF80 ) }
-};
-
-static void time_az_float128_pos( float128 function( float128 ) )
-{
- clock_t startClock, endClock;
- int32 count, i;
- int8 inputNum;
- float128 a;
-
- count = 0;
- inputNum = 0;
- startClock = clock();
- do {
- for ( i = minIterations; i; --i ) {
- a.low = inputs_float128_pos[ inputNum ].low;
- a.high = inputs_float128_pos[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );
- }
- count += minIterations;
- } while ( clock() - startClock < CLOCKS_PER_SEC );
- inputNum = 0;
- startClock = clock();
- for ( i = count; i; --i ) {
- a.low = inputs_float128_pos[ inputNum ].low;
- a.high = inputs_float128_pos[ inputNum ].high;
- function( a );
- inputNum = ( inputNum + 1 ) & ( numInputs_float128 - 1 );
- }
- endClock = clock();
- reportTime( count, endClock - startClock );
-
-}
-
-#endif
-
-enum {
- INT32_TO_FLOAT32 = 1,
- INT32_TO_FLOAT64,
-#ifdef FLOATX80
- INT32_TO_FLOATX80,
-#endif
-#ifdef FLOAT128
- INT32_TO_FLOAT128,
-#endif
- INT64_TO_FLOAT32,
- INT64_TO_FLOAT64,
-#ifdef FLOATX80
- INT64_TO_FLOATX80,
-#endif
-#ifdef FLOAT128
- INT64_TO_FLOAT128,
-#endif
- FLOAT32_TO_INT32,
- FLOAT32_TO_INT32_ROUND_TO_ZERO,
- FLOAT32_TO_INT64,
- FLOAT32_TO_INT64_ROUND_TO_ZERO,
- FLOAT32_TO_FLOAT64,
-#ifdef FLOATX80
- FLOAT32_TO_FLOATX80,
-#endif
-#ifdef FLOAT128
- FLOAT32_TO_FLOAT128,
-#endif
- FLOAT32_ROUND_TO_INT,
- FLOAT32_ADD,
- FLOAT32_SUB,
- FLOAT32_MUL,
- FLOAT32_DIV,
- FLOAT32_REM,
- FLOAT32_SQRT,
- FLOAT32_EQ,
- FLOAT32_LE,
- FLOAT32_LT,
- FLOAT32_EQ_SIGNALING,
- FLOAT32_LE_QUIET,
- FLOAT32_LT_QUIET,
- FLOAT64_TO_INT32,
- FLOAT64_TO_INT32_ROUND_TO_ZERO,
- FLOAT64_TO_INT64,
- FLOAT64_TO_INT64_ROUND_TO_ZERO,
- FLOAT64_TO_FLOAT32,
-#ifdef FLOATX80
- FLOAT64_TO_FLOATX80,
-#endif
-#ifdef FLOAT128
- FLOAT64_TO_FLOAT128,
-#endif
- FLOAT64_ROUND_TO_INT,
- FLOAT64_ADD,
- FLOAT64_SUB,
- FLOAT64_MUL,
- FLOAT64_DIV,
- FLOAT64_REM,
- FLOAT64_SQRT,
- FLOAT64_EQ,
- FLOAT64_LE,
- FLOAT64_LT,
- FLOAT64_EQ_SIGNALING,
- FLOAT64_LE_QUIET,
- FLOAT64_LT_QUIET,
-#ifdef FLOATX80
- FLOATX80_TO_INT32,
- FLOATX80_TO_INT32_ROUND_TO_ZERO,
- FLOATX80_TO_INT64,
- FLOATX80_TO_INT64_ROUND_TO_ZERO,
- FLOATX80_TO_FLOAT32,
- FLOATX80_TO_FLOAT64,
-#ifdef FLOAT128
- FLOATX80_TO_FLOAT128,
-#endif
- FLOATX80_ROUND_TO_INT,
- FLOATX80_ADD,
- FLOATX80_SUB,
- FLOATX80_MUL,
- FLOATX80_DIV,
- FLOATX80_REM,
- FLOATX80_SQRT,
- FLOATX80_EQ,
- FLOATX80_LE,
- FLOATX80_LT,
- FLOATX80_EQ_SIGNALING,
- FLOATX80_LE_QUIET,
- FLOATX80_LT_QUIET,
-#endif
-#ifdef FLOAT128
- FLOAT128_TO_INT32,
- FLOAT128_TO_INT32_ROUND_TO_ZERO,
- FLOAT128_TO_INT64,
- FLOAT128_TO_INT64_ROUND_TO_ZERO,
- FLOAT128_TO_FLOAT32,
- FLOAT128_TO_FLOAT64,
-#ifdef FLOATX80
- FLOAT128_TO_FLOATX80,
-#endif
- FLOAT128_ROUND_TO_INT,
- FLOAT128_ADD,
- FLOAT128_SUB,
- FLOAT128_MUL,
- FLOAT128_DIV,
- FLOAT128_REM,
- FLOAT128_SQRT,
- FLOAT128_EQ,
- FLOAT128_LE,
- FLOAT128_LT,
- FLOAT128_EQ_SIGNALING,
- FLOAT128_LE_QUIET,
- FLOAT128_LT_QUIET,
-#endif
- NUM_FUNCTIONS
-};
-
-static struct {
- char *name;
- int8 numInputs;
- flag roundingPrecision, roundingMode;
- flag tininessMode, tininessModeAtReducedPrecision;
-} functions[ NUM_FUNCTIONS ] = {
- { 0, 0, 0, 0, 0, 0 },
- { "int32_to_float32", 1, FALSE, TRUE, FALSE, FALSE },
- { "int32_to_float64", 1, FALSE, FALSE, FALSE, FALSE },
-#ifdef FLOATX80
- { "int32_to_floatx80", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
-#ifdef FLOAT128
- { "int32_to_float128", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
- { "int64_to_float32", 1, FALSE, TRUE, FALSE, FALSE },
- { "int64_to_float64", 1, FALSE, TRUE, FALSE, FALSE },
-#ifdef FLOATX80
- { "int64_to_floatx80", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
-#ifdef FLOAT128
- { "int64_to_float128", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
- { "float32_to_int32", 1, FALSE, TRUE, FALSE, FALSE },
- { "float32_to_int32_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },
- { "float32_to_int64", 1, FALSE, TRUE, FALSE, FALSE },
- { "float32_to_int64_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },
- { "float32_to_float64", 1, FALSE, FALSE, FALSE, FALSE },
-#ifdef FLOATX80
- { "float32_to_floatx80", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
-#ifdef FLOAT128
- { "float32_to_float128", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
- { "float32_round_to_int", 1, FALSE, TRUE, FALSE, FALSE },
- { "float32_add", 2, FALSE, TRUE, FALSE, FALSE },
- { "float32_sub", 2, FALSE, TRUE, FALSE, FALSE },
- { "float32_mul", 2, FALSE, TRUE, TRUE, FALSE },
- { "float32_div", 2, FALSE, TRUE, FALSE, FALSE },
- { "float32_rem", 2, FALSE, FALSE, FALSE, FALSE },
- { "float32_sqrt", 1, FALSE, TRUE, FALSE, FALSE },
- { "float32_eq", 2, FALSE, FALSE, FALSE, FALSE },
- { "float32_le", 2, FALSE, FALSE, FALSE, FALSE },
- { "float32_lt", 2, FALSE, FALSE, FALSE, FALSE },
- { "float32_eq_signaling", 2, FALSE, FALSE, FALSE, FALSE },
- { "float32_le_quiet", 2, FALSE, FALSE, FALSE, FALSE },
- { "float32_lt_quiet", 2, FALSE, FALSE, FALSE, FALSE },
- { "float64_to_int32", 1, FALSE, TRUE, FALSE, FALSE },
- { "float64_to_int32_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },
- { "float64_to_int64", 1, FALSE, TRUE, FALSE, FALSE },
- { "float64_to_int64_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },
- { "float64_to_float32", 1, FALSE, TRUE, TRUE, FALSE },
-#ifdef FLOATX80
- { "float64_to_floatx80", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
-#ifdef FLOAT128
- { "float64_to_float128", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
- { "float64_round_to_int", 1, FALSE, TRUE, FALSE, FALSE },
- { "float64_add", 2, FALSE, TRUE, FALSE, FALSE },
- { "float64_sub", 2, FALSE, TRUE, FALSE, FALSE },
- { "float64_mul", 2, FALSE, TRUE, TRUE, FALSE },
- { "float64_div", 2, FALSE, TRUE, FALSE, FALSE },
- { "float64_rem", 2, FALSE, FALSE, FALSE, FALSE },
- { "float64_sqrt", 1, FALSE, TRUE, FALSE, FALSE },
- { "float64_eq", 2, FALSE, FALSE, FALSE, FALSE },
- { "float64_le", 2, FALSE, FALSE, FALSE, FALSE },
- { "float64_lt", 2, FALSE, FALSE, FALSE, FALSE },
- { "float64_eq_signaling", 2, FALSE, FALSE, FALSE, FALSE },
- { "float64_le_quiet", 2, FALSE, FALSE, FALSE, FALSE },
- { "float64_lt_quiet", 2, FALSE, FALSE, FALSE, FALSE },
-#ifdef FLOATX80
- { "floatx80_to_int32", 1, FALSE, TRUE, FALSE, FALSE },
- { "floatx80_to_int32_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },
- { "floatx80_to_int64", 1, FALSE, TRUE, FALSE, FALSE },
- { "floatx80_to_int64_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },
- { "floatx80_to_float32", 1, FALSE, TRUE, TRUE, FALSE },
- { "floatx80_to_float64", 1, FALSE, TRUE, TRUE, FALSE },
-#ifdef FLOAT128
- { "floatx80_to_float128", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
- { "floatx80_round_to_int", 1, FALSE, TRUE, FALSE, FALSE },
- { "floatx80_add", 2, TRUE, TRUE, FALSE, TRUE },
- { "floatx80_sub", 2, TRUE, TRUE, FALSE, TRUE },
- { "floatx80_mul", 2, TRUE, TRUE, TRUE, TRUE },
- { "floatx80_div", 2, TRUE, TRUE, FALSE, TRUE },
- { "floatx80_rem", 2, FALSE, FALSE, FALSE, FALSE },
- { "floatx80_sqrt", 1, TRUE, TRUE, FALSE, FALSE },
- { "floatx80_eq", 2, FALSE, FALSE, FALSE, FALSE },
- { "floatx80_le", 2, FALSE, FALSE, FALSE, FALSE },
- { "floatx80_lt", 2, FALSE, FALSE, FALSE, FALSE },
- { "floatx80_eq_signaling", 2, FALSE, FALSE, FALSE, FALSE },
- { "floatx80_le_quiet", 2, FALSE, FALSE, FALSE, FALSE },
- { "floatx80_lt_quiet", 2, FALSE, FALSE, FALSE, FALSE },
-#endif
-#ifdef FLOAT128
- { "float128_to_int32", 1, FALSE, TRUE, FALSE, FALSE },
- { "float128_to_int32_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },
- { "float128_to_int64", 1, FALSE, TRUE, FALSE, FALSE },
- { "float128_to_int64_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },
- { "float128_to_float32", 1, FALSE, TRUE, TRUE, FALSE },
- { "float128_to_float64", 1, FALSE, TRUE, TRUE, FALSE },
-#ifdef FLOATX80
- { "float128_to_floatx80", 1, FALSE, TRUE, TRUE, FALSE },
-#endif
- { "float128_round_to_int", 1, FALSE, TRUE, FALSE, FALSE },
- { "float128_add", 2, FALSE, TRUE, FALSE, FALSE },
- { "float128_sub", 2, FALSE, TRUE, FALSE, FALSE },
- { "float128_mul", 2, FALSE, TRUE, TRUE, FALSE },
- { "float128_div", 2, FALSE, TRUE, FALSE, FALSE },
- { "float128_rem", 2, FALSE, FALSE, FALSE, FALSE },
- { "float128_sqrt", 1, FALSE, TRUE, FALSE, FALSE },
- { "float128_eq", 2, FALSE, FALSE, FALSE, FALSE },
- { "float128_le", 2, FALSE, FALSE, FALSE, FALSE },
- { "float128_lt", 2, FALSE, FALSE, FALSE, FALSE },
- { "float128_eq_signaling", 2, FALSE, FALSE, FALSE, FALSE },
- { "float128_le_quiet", 2, FALSE, FALSE, FALSE, FALSE },
- { "float128_lt_quiet", 2, FALSE, FALSE, FALSE, FALSE },
-#endif
-};
-
-enum {
- ROUND_NEAREST_EVEN = 1,
- ROUND_TO_ZERO,
- ROUND_DOWN,
- ROUND_UP,
- NUM_ROUNDINGMODES
-};
-enum {
- TININESS_BEFORE_ROUNDING = 1,
- TININESS_AFTER_ROUNDING,
- NUM_TININESSMODES
-};
-
-static void
- timeFunctionVariety(
- uint8 functionCode,
- int8 roundingPrecision,
- int8 roundingMode,
- int8 tininessMode
- )
-{
- uint8 roundingCode;
- int8 tininessCode;
-
- functionName = functions[ functionCode ].name;
- if ( roundingPrecision == 32 ) {
- roundingPrecisionName = "32";
- }
- else if ( roundingPrecision == 64 ) {
- roundingPrecisionName = "64";
- }
- else if ( roundingPrecision == 80 ) {
- roundingPrecisionName = "80";
- }
- else {
- roundingPrecisionName = 0;
- }
-#ifdef FLOATX80
- floatx80_rounding_precision = roundingPrecision;
-#endif
- switch ( roundingMode ) {
- case 0:
- roundingModeName = 0;
- roundingCode = float_round_nearest_even;
- break;
- case ROUND_NEAREST_EVEN:
- roundingModeName = "nearest_even";
- roundingCode = float_round_nearest_even;
- break;
- case ROUND_TO_ZERO:
- roundingModeName = "to_zero";
- roundingCode = float_round_to_zero;
- break;
- case ROUND_DOWN:
- roundingModeName = "down";
- roundingCode = float_round_down;
- break;
- case ROUND_UP:
- roundingModeName = "up";
- roundingCode = float_round_up;
- break;
- }
- float_rounding_mode = roundingCode;
- switch ( tininessMode ) {
- case 0:
- tininessModeName = 0;
- tininessCode = float_tininess_after_rounding;
- break;
- case TININESS_BEFORE_ROUNDING:
- tininessModeName = "before";
- tininessCode = float_tininess_before_rounding;
- break;
- case TININESS_AFTER_ROUNDING:
- tininessModeName = "after";
- tininessCode = float_tininess_after_rounding;
- break;
- }
- float_detect_tininess = tininessCode;
- switch ( functionCode ) {
- case INT32_TO_FLOAT32:
- time_a_int32_z_float32( int32_to_float32 );
- break;
- case INT32_TO_FLOAT64:
- time_a_int32_z_float64( int32_to_float64 );
- break;
-#ifdef FLOATX80
- case INT32_TO_FLOATX80:
- time_a_int32_z_floatx80( int32_to_floatx80 );
- break;
-#endif
-#ifdef FLOAT128
- case INT32_TO_FLOAT128:
- time_a_int32_z_float128( int32_to_float128 );
- break;
-#endif
- case INT64_TO_FLOAT32:
- time_a_int64_z_float32( int64_to_float32 );
- break;
- case INT64_TO_FLOAT64:
- time_a_int64_z_float64( int64_to_float64 );
- break;
-#ifdef FLOATX80
- case INT64_TO_FLOATX80:
- time_a_int64_z_floatx80( int64_to_floatx80 );
- break;
-#endif
-#ifdef FLOAT128
- case INT64_TO_FLOAT128:
- time_a_int64_z_float128( int64_to_float128 );
- break;
-#endif
- case FLOAT32_TO_INT32:
- time_a_float32_z_int32( float32_to_int32 );
- break;
- case FLOAT32_TO_INT32_ROUND_TO_ZERO:
- time_a_float32_z_int32( float32_to_int32_round_to_zero );
- break;
- case FLOAT32_TO_INT64:
- time_a_float32_z_int64( float32_to_int64 );
- break;
- case FLOAT32_TO_INT64_ROUND_TO_ZERO:
- time_a_float32_z_int64( float32_to_int64_round_to_zero );
- break;
- case FLOAT32_TO_FLOAT64:
- time_a_float32_z_float64( float32_to_float64 );
- break;
-#ifdef FLOATX80
- case FLOAT32_TO_FLOATX80:
- time_a_float32_z_floatx80( float32_to_floatx80 );
- break;
-#endif
-#ifdef FLOAT128
- case FLOAT32_TO_FLOAT128:
- time_a_float32_z_float128( float32_to_float128 );
- break;
-#endif
- case FLOAT32_ROUND_TO_INT:
- time_az_float32( float32_round_to_int );
- break;
- case FLOAT32_ADD:
- time_abz_float32( float32_add );
- break;
- case FLOAT32_SUB:
- time_abz_float32( float32_sub );
- break;
- case FLOAT32_MUL:
- time_abz_float32( float32_mul );
- break;
- case FLOAT32_DIV:
- time_abz_float32( float32_div );
- break;
- case FLOAT32_REM:
- time_abz_float32( float32_rem );
- break;
- case FLOAT32_SQRT:
- time_az_float32_pos( float32_sqrt );
- break;
- case FLOAT32_EQ:
- time_ab_float32_z_flag( float32_eq );
- break;
- case FLOAT32_LE:
- time_ab_float32_z_flag( float32_le );
- break;
- case FLOAT32_LT:
- time_ab_float32_z_flag( float32_lt );
- break;
- case FLOAT32_EQ_SIGNALING:
- time_ab_float32_z_flag( float32_eq_signaling );
- break;
- case FLOAT32_LE_QUIET:
- time_ab_float32_z_flag( float32_le_quiet );
- break;
- case FLOAT32_LT_QUIET:
- time_ab_float32_z_flag( float32_lt_quiet );
- break;
- case FLOAT64_TO_INT32:
- time_a_float64_z_int32( float64_to_int32 );
- break;
- case FLOAT64_TO_INT32_ROUND_TO_ZERO:
- time_a_float64_z_int32( float64_to_int32_round_to_zero );
- break;
- case FLOAT64_TO_INT64:
- time_a_float64_z_int64( float64_to_int64 );
- break;
- case FLOAT64_TO_INT64_ROUND_TO_ZERO:
- time_a_float64_z_int64( float64_to_int64_round_to_zero );
- break;
- case FLOAT64_TO_FLOAT32:
- time_a_float64_z_float32( float64_to_float32 );
- break;
-#ifdef FLOATX80
- case FLOAT64_TO_FLOATX80:
- time_a_float64_z_floatx80( float64_to_floatx80 );
- break;
-#endif
-#ifdef FLOAT128
- case FLOAT64_TO_FLOAT128:
- time_a_float64_z_float128( float64_to_float128 );
- break;
-#endif
- case FLOAT64_ROUND_TO_INT:
- time_az_float64( float64_round_to_int );
- break;
- case FLOAT64_ADD:
- time_abz_float64( float64_add );
- break;
- case FLOAT64_SUB:
- time_abz_float64( float64_sub );
- break;
- case FLOAT64_MUL:
- time_abz_float64( float64_mul );
- break;
- case FLOAT64_DIV:
- time_abz_float64( float64_div );
- break;
- case FLOAT64_REM:
- time_abz_float64( float64_rem );
- break;
- case FLOAT64_SQRT:
- time_az_float64_pos( float64_sqrt );
- break;
- case FLOAT64_EQ:
- time_ab_float64_z_flag( float64_eq );
- break;
- case FLOAT64_LE:
- time_ab_float64_z_flag( float64_le );
- break;
- case FLOAT64_LT:
- time_ab_float64_z_flag( float64_lt );
- break;
- case FLOAT64_EQ_SIGNALING:
- time_ab_float64_z_flag( float64_eq_signaling );
- break;
- case FLOAT64_LE_QUIET:
- time_ab_float64_z_flag( float64_le_quiet );
- break;
- case FLOAT64_LT_QUIET:
- time_ab_float64_z_flag( float64_lt_quiet );
- break;
-#ifdef FLOATX80
- case FLOATX80_TO_INT32:
- time_a_floatx80_z_int32( floatx80_to_int32 );
- break;
- case FLOATX80_TO_INT32_ROUND_TO_ZERO:
- time_a_floatx80_z_int32( floatx80_to_int32_round_to_zero );
- break;
- case FLOATX80_TO_INT64:
- time_a_floatx80_z_int64( floatx80_to_int64 );
- break;
- case FLOATX80_TO_INT64_ROUND_TO_ZERO:
- time_a_floatx80_z_int64( floatx80_to_int64_round_to_zero );
- break;
- case FLOATX80_TO_FLOAT32:
- time_a_floatx80_z_float32( floatx80_to_float32 );
- break;
- case FLOATX80_TO_FLOAT64:
- time_a_floatx80_z_float64( floatx80_to_float64 );
- break;
-#ifdef FLOAT128
- case FLOATX80_TO_FLOAT128:
- time_a_floatx80_z_float128( floatx80_to_float128 );
- break;
-#endif
- case FLOATX80_ROUND_TO_INT:
- time_az_floatx80( floatx80_round_to_int );
- break;
- case FLOATX80_ADD:
- time_abz_floatx80( floatx80_add );
- break;
- case FLOATX80_SUB:
- time_abz_floatx80( floatx80_sub );
- break;
- case FLOATX80_MUL:
- time_abz_floatx80( floatx80_mul );
- break;
- case FLOATX80_DIV:
- time_abz_floatx80( floatx80_div );
- break;
- case FLOATX80_REM:
- time_abz_floatx80( floatx80_rem );
- break;
- case FLOATX80_SQRT:
- time_az_floatx80_pos( floatx80_sqrt );
- break;
- case FLOATX80_EQ:
- time_ab_floatx80_z_flag( floatx80_eq );
- break;
- case FLOATX80_LE:
- time_ab_floatx80_z_flag( floatx80_le );
- break;
- case FLOATX80_LT:
- time_ab_floatx80_z_flag( floatx80_lt );
- break;
- case FLOATX80_EQ_SIGNALING:
- time_ab_floatx80_z_flag( floatx80_eq_signaling );
- break;
- case FLOATX80_LE_QUIET:
- time_ab_floatx80_z_flag( floatx80_le_quiet );
- break;
- case FLOATX80_LT_QUIET:
- time_ab_floatx80_z_flag( floatx80_lt_quiet );
- break;
-#endif
-#ifdef FLOAT128
- case FLOAT128_TO_INT32:
- time_a_float128_z_int32( float128_to_int32 );
- break;
- case FLOAT128_TO_INT32_ROUND_TO_ZERO:
- time_a_float128_z_int32( float128_to_int32_round_to_zero );
- break;
- case FLOAT128_TO_INT64:
- time_a_float128_z_int64( float128_to_int64 );
- break;
- case FLOAT128_TO_INT64_ROUND_TO_ZERO:
- time_a_float128_z_int64( float128_to_int64_round_to_zero );
- break;
- case FLOAT128_TO_FLOAT32:
- time_a_float128_z_float32( float128_to_float32 );
- break;
- case FLOAT128_TO_FLOAT64:
- time_a_float128_z_float64( float128_to_float64 );
- break;
-#ifdef FLOATX80
- case FLOAT128_TO_FLOATX80:
- time_a_float128_z_floatx80( float128_to_floatx80 );
- break;
-#endif
- case FLOAT128_ROUND_TO_INT:
- time_az_float128( float128_round_to_int );
- break;
- case FLOAT128_ADD:
- time_abz_float128( float128_add );
- break;
- case FLOAT128_SUB:
- time_abz_float128( float128_sub );
- break;
- case FLOAT128_MUL:
- time_abz_float128( float128_mul );
- break;
- case FLOAT128_DIV:
- time_abz_float128( float128_div );
- break;
- case FLOAT128_REM:
- time_abz_float128( float128_rem );
- break;
- case FLOAT128_SQRT:
- time_az_float128_pos( float128_sqrt );
- break;
- case FLOAT128_EQ:
- time_ab_float128_z_flag( float128_eq );
- break;
- case FLOAT128_LE:
- time_ab_float128_z_flag( float128_le );
- break;
- case FLOAT128_LT:
- time_ab_float128_z_flag( float128_lt );
- break;
- case FLOAT128_EQ_SIGNALING:
- time_ab_float128_z_flag( float128_eq_signaling );
- break;
- case FLOAT128_LE_QUIET:
- time_ab_float128_z_flag( float128_le_quiet );
- break;
- case FLOAT128_LT_QUIET:
- time_ab_float128_z_flag( float128_lt_quiet );
- break;
-#endif
- }
-
-}
-
-static void
- timeFunction(
- uint8 functionCode,
- int8 roundingPrecisionIn,
- int8 roundingModeIn,
- int8 tininessModeIn
- )
-{
- int8 roundingPrecision, roundingMode, tininessMode;
-
- roundingPrecision = 32;
- for (;;) {
- if ( ! functions[ functionCode ].roundingPrecision ) {
- roundingPrecision = 0;
- }
- else if ( roundingPrecisionIn ) {
- roundingPrecision = roundingPrecisionIn;
- }
- for ( roundingMode = 1;
- roundingMode < NUM_ROUNDINGMODES;
- ++roundingMode
- ) {
- if ( ! functions[ functionCode ].roundingMode ) {
- roundingMode = 0;
- }
- else if ( roundingModeIn ) {
- roundingMode = roundingModeIn;
- }
- for ( tininessMode = 1;
- tininessMode < NUM_TININESSMODES;
- ++tininessMode
- ) {
- if ( ( roundingPrecision == 32 )
- || ( roundingPrecision == 64 ) ) {
- if ( ! functions[ functionCode ]
- .tininessModeAtReducedPrecision
- ) {
- tininessMode = 0;
- }
- else if ( tininessModeIn ) {
- tininessMode = tininessModeIn;
- }
- }
- else {
- if ( ! functions[ functionCode ].tininessMode ) {
- tininessMode = 0;
- }
- else if ( tininessModeIn ) {
- tininessMode = tininessModeIn;
- }
- }
- timeFunctionVariety(
- functionCode, roundingPrecision, roundingMode, tininessMode
- );
- if ( tininessModeIn || ! tininessMode ) break;
- }
- if ( roundingModeIn || ! roundingMode ) break;
- }
- if ( roundingPrecisionIn || ! roundingPrecision ) break;
- if ( roundingPrecision == 80 ) {
- break;
- }
- else if ( roundingPrecision == 64 ) {
- roundingPrecision = 80;
- }
- else if ( roundingPrecision == 32 ) {
- roundingPrecision = 64;
- }
- }
-
-}
-
-main( int argc, char **argv )
-{
- char *argPtr;
- flag functionArgument;
- uint8 functionCode;
- int8 operands, roundingPrecision, roundingMode, tininessMode;
-
- if ( argc <= 1 ) goto writeHelpMessage;
- functionArgument = FALSE;
- functionCode = 0;
- operands = 0;
- roundingPrecision = 0;
- roundingMode = 0;
- tininessMode = 0;
- --argc;
- ++argv;
- while ( argc && ( argPtr = argv[ 0 ] ) ) {
- if ( argPtr[ 0 ] == '-' ) ++argPtr;
- if ( strcmp( argPtr, "help" ) == 0 ) {
- writeHelpMessage:
- fputs(
-"timesoftfloat [<option>...] <function>\n"
-" <option>: (* is default)\n"
-" -help --Write this message and exit.\n"
-#ifdef FLOATX80
-" -precision32 --Only time rounding precision equivalent to float32.\n"
-" -precision64 --Only time rounding precision equivalent to float64.\n"
-" -precision80 --Only time maximum rounding precision.\n"
-#endif
-" -nearesteven --Only time rounding to nearest/even.\n"
-" -tozero --Only time rounding to zero.\n"
-" -down --Only time rounding down.\n"
-" -up --Only time rounding up.\n"
-" -tininessbefore --Only time underflow tininess before rounding.\n"
-" -tininessafter --Only time underflow tininess after rounding.\n"
-" <function>:\n"
-" int32_to_<float> <float>_add <float>_eq\n"
-" <float>_to_int32 <float>_sub <float>_le\n"
-" <float>_to_int32_round_to_zero <float>_mul <float>_lt\n"
-" int64_to_<float> <float>_div <float>_eq_signaling\n"
-" <float>_to_int64 <float>_rem <float>_le_quiet\n"
-" <float>_to_int64_round_to_zero <float>_lt_quiet\n"
-" <float>_to_<float>\n"
-" <float>_round_to_int\n"
-" <float>_sqrt\n"
-" -all1 --All 1-operand functions.\n"
-" -all2 --All 2-operand functions.\n"
-" -all --All functions.\n"
-" <float>:\n"
-" float32 --Single precision.\n"
-" float64 --Double precision.\n"
-#ifdef FLOATX80
-" floatx80 --Extended double precision.\n"
-#endif
-#ifdef FLOAT128
-" float128 --Quadruple precision.\n"
-#endif
- ,
- stdout
- );
- return EXIT_SUCCESS;
- }
-#ifdef FLOATX80
- else if ( strcmp( argPtr, "precision32" ) == 0 ) {
- roundingPrecision = 32;
- }
- else if ( strcmp( argPtr, "precision64" ) == 0 ) {
- roundingPrecision = 64;
- }
- else if ( strcmp( argPtr, "precision80" ) == 0 ) {
- roundingPrecision = 80;
- }
-#endif
- else if ( ( strcmp( argPtr, "nearesteven" ) == 0 )
- || ( strcmp( argPtr, "nearest_even" ) == 0 ) ) {
- roundingMode = ROUND_NEAREST_EVEN;
- }
- else if ( ( strcmp( argPtr, "tozero" ) == 0 )
- || ( strcmp( argPtr, "to_zero" ) == 0 ) ) {
- roundingMode = ROUND_TO_ZERO;
- }
- else if ( strcmp( argPtr, "down" ) == 0 ) {
- roundingMode = ROUND_DOWN;
- }
- else if ( strcmp( argPtr, "up" ) == 0 ) {
- roundingMode = ROUND_UP;
- }
- else if ( strcmp( argPtr, "tininessbefore" ) == 0 ) {
- tininessMode = TININESS_BEFORE_ROUNDING;
- }
- else if ( strcmp( argPtr, "tininessafter" ) == 0 ) {
- tininessMode = TININESS_AFTER_ROUNDING;
- }
- else if ( strcmp( argPtr, "all1" ) == 0 ) {
- functionArgument = TRUE;
- functionCode = 0;
- operands = 1;
- }
- else if ( strcmp( argPtr, "all2" ) == 0 ) {
- functionArgument = TRUE;
- functionCode = 0;
- operands = 2;
- }
- else if ( strcmp( argPtr, "all" ) == 0 ) {
- functionArgument = TRUE;
- functionCode = 0;
- operands = 0;
- }
- else {
- for ( functionCode = 1;
- functionCode < NUM_FUNCTIONS;
- ++functionCode
- ) {
- if ( strcmp( argPtr, functions[ functionCode ].name ) == 0 ) {
- break;
- }
- }
- if ( functionCode == NUM_FUNCTIONS ) {
- fail( "Invalid option or function `%s'", argv[ 0 ] );
- }
- functionArgument = TRUE;
- }
- --argc;
- ++argv;
- }
- if ( ! functionArgument ) fail( "Function argument required" );
- if ( functionCode ) {
- timeFunction(
- functionCode, roundingPrecision, roundingMode, tininessMode );
- }
- else if ( operands == 1 ) {
- for ( functionCode = 1; functionCode < NUM_FUNCTIONS; ++functionCode
- ) {
- if ( functions[ functionCode ].numInputs == 1 ) {
- timeFunction(
- functionCode, roundingPrecision, roundingMode, tininessMode
- );
- }
- }
- }
- else if ( operands == 2 ) {
- for ( functionCode = 1; functionCode < NUM_FUNCTIONS; ++functionCode
- ) {
- if ( functions[ functionCode ].numInputs == 2 ) {
- timeFunction(
- functionCode, roundingPrecision, roundingMode, tininessMode
- );
- }
- }
- }
- else {
- for ( functionCode = 1; functionCode < NUM_FUNCTIONS; ++functionCode
- ) {
- timeFunction(
- functionCode, roundingPrecision, roundingMode, tininessMode );
- }
- }
- return EXIT_SUCCESS;
-
-}
-
diff --git a/StdLib/LibC/Softfloat/timesoftfloat.txt b/StdLib/LibC/Softfloat/timesoftfloat.txt
deleted file mode 100644
index a411de452a..0000000000
--- a/StdLib/LibC/Softfloat/timesoftfloat.txt
+++ /dev/null
@@ -1,149 +0,0 @@
-$NetBSD: timesoftfloat.txt,v 1.1 2000/06/06 08:15:11 bjh21 Exp $
-
-Documentation for the `timesoftfloat' Program of SoftFloat Release 2a
-
-John R. Hauser
-1998 December 14
-
-
--------------------------------------------------------------------------------
-Introduction
-
-The `timesoftfloat' program evaluates the speed of SoftFloat's floating-
-point routines. Each routine can be evaluated for every relevant rounding
-mode, tininess mode, and/or rounding precision.
-
-
--------------------------------------------------------------------------------
-Contents
-
- Introduction
- Contents
- Legal Notice
- Executing `timesoftfloat'
- Options
- -help
- -precision32, -precision64, -precision80
- -nearesteven, -tozero, -down, -up
- -tininessbefore, -tininessafter
- Function Sets
-
-
-
--------------------------------------------------------------------------------
-Legal Notice
-
-The `timesoftfloat' program was written by John R. Hauser.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-
--------------------------------------------------------------------------------
-Executing `timesoftfloat'
-
-The `timesoftfloat' program is intended to be invoked from a command line
-interpreter as follows:
-
- timesoftfloat [<option>...] <function>
-
-Here square brackets ([]) indicate optional items, while angled brackets
-(<>) denote parameters to be filled in. The `<function>' argument is
-the name of the SoftFloat routine to evaluate, such as `float32_add' or
-`float64_to_int32'. The allowed options are detailed in the next section,
-_Options_. If `timesoftfloat' is executed without any arguments, a summary
-of usage is written. It is also possible to evaluate all machine functions
-in a single invocation as explained in the section _Function_Sets_ later in
-this document.
-
-Ordinarily, a function's speed will be evaulated separately for each of
-the four rounding modes, one after the other. If the rounding mode is not
-supposed to have any affect on the results of a function--for instance,
-some operations do not require rounding--only the nearest/even rounding mode
-is timed. In the same way, if a function is affected by the way in which
-underflow tininess is detected, `timesoftfloat' times the function both with
-tininess detected before rounding and after rounding. For extended double-
-precision operations affected by rounding precision control, `timesoftfloat'
-also times the function for all three rounding precision modes, one after
-the other. Evaluation of a function can be limited to a single rounding
-mode, a single tininess mode, and/or a single rounding precision with
-appropriate options (see _Options_).
-
-For each function and mode evaluated, `timesoftfloat' reports the speed of
-the function in kops/s, or ``thousands of operations per second''. This
-unit of measure differs from the traditional MFLOPS (``millions of floating-
-point operations per second'') only in being a factor of 1000 smaller.
-(1000 kops/s is exactly 1 MFLOPS.) Speeds are reported in thousands instead
-of millions because software floating-point often executes at less than
-1 MFLOPS.
-
-The speeds reported by `timesoftfloat' may be affected somewhat by other
-programs executing at the same time as `timesoftfloat'.
-
-Note that the remainder operations (`float32_rem', `float64_rem',
-`floatx80_rem' and `float128_rem') will be markedly slower than other
-operations, particularly for extended double precision (`floatx80') and
-quadruple precision (`float128'). This is inherent to the remainder
-function itself and is not a failing of the SoftFloat implementation.
-
-
--------------------------------------------------------------------------------
-Options
-
-The `timesoftfloat' program accepts several command options. If mutually
-contradictory options are given, the last one has priority.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--help
-
-The `-help' option causes a summary of program usage to be written, after
-which the program exits.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--precision32, -precision64, -precision80
-
-For extended double-precision functions affected by rounding precision
-control, the `-precision32' option restricts evaluation to only the cases
-in which rounding precision is equivalent to single precision. The other
-rounding precision options are not timed. Likewise, the `-precision64'
-and `-precision80' options fix the rounding precision equivalent to double
-precision or extended double precision, respectively. These options are
-ignored for functions not affected by rounding precision control.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--nearesteven, -tozero, -down, -up
-
-The `-nearesteven' option restricts evaluation to only the cases in which
-the rounding mode is nearest/even. The other rounding mode options are not
-timed. Likewise, `-tozero' forces rounding to zero; `-down' forces rounding
-down; and `-up' forces rounding up. These options are ignored for functions
-that are exact and thus do not round.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--tininessbefore, -tininessafter
-
-The `-tininessbefore' option restricts evaluation to only the cases
-detecting underflow tininess before rounding. Tininess after rounding
-is not timed. Likewise, `-tininessafter' forces underflow tininess to be
-detected after rounding only. These options are ignored for functions not
-affected by the way in which underflow tininess is detected.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
--------------------------------------------------------------------------------
-Function Sets
-
-Just as `timesoftfloat' can test an operation for all four rounding modes in
-sequence, multiple operations can also be tested with a single invocation.
-Three sets are recognized: `-all1', `-all2', and `-all'. The set `-all1'
-comprises all one-operand functions; `-all2' is all two-operand functions;
-and `-all' is all functions. A function set can be used in place of a
-function name in the command line, as in
-
- timesoftfloat [<option>...] -all
-
-
diff --git a/StdLib/LibC/Softfloat/unorddf2.c b/StdLib/LibC/Softfloat/unorddf2.c
deleted file mode 100644
index 3759afefcf..0000000000
--- a/StdLib/LibC/Softfloat/unorddf2.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* $NetBSD: unorddf2.c,v 1.1 2003/05/06 08:58:19 rearnsha Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Richard Earnshaw, 2003. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: unorddf2.c,v 1.1 2003/05/06 08:58:19 rearnsha Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-flag __unorddf2(float64, float64);
-
-flag
-__unorddf2(float64 a, float64 b)
-{
- /*
- * The comparison is unordered if either input is a NaN.
- * Test for this by comparing each operand with itself.
- * We must perform both comparisons to correctly check for
- * signalling NaNs.
- */
- return 1 ^ (float64_eq(a, a) & float64_eq(b, b));
-}
diff --git a/StdLib/LibC/Softfloat/unordsf2.c b/StdLib/LibC/Softfloat/unordsf2.c
deleted file mode 100644
index 5ba1e3a75e..0000000000
--- a/StdLib/LibC/Softfloat/unordsf2.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* $NetBSD: unordsf2.c,v 1.1 2003/05/06 08:58:20 rearnsha Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Richard Earnshaw, 2003. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: unordsf2.c,v 1.1 2003/05/06 08:58:20 rearnsha Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-flag __unordsf2(float32, float32);
-
-flag
-__unordsf2(float32 a, float32 b)
-{
- /*
- * The comparison is unordered if either input is a NaN.
- * Test for this by comparing each operand with itself.
- * We must perform both comparisons to correctly check for
- * signalling NaNs.
- */
- return 1 ^ (float32_eq(a, a) & float32_eq(b, b));
-}
diff --git a/StdLib/LibC/Softfloat/unordtf2.c b/StdLib/LibC/Softfloat/unordtf2.c
deleted file mode 100644
index 5149c5c5ac..0000000000
--- a/StdLib/LibC/Softfloat/unordtf2.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* $NetBSD: unordtf2.c,v 1.2 2014/01/30 19:11:41 matt Exp $ */
-/** @file
-*
-* Copyright (c) 2013 - 2014, ARM Limited. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/*
- * Written by Richard Earnshaw, 2003. This file is in the Public Domain.
- */
-
-#include "softfloat-for-gcc.h"
-#include "milieu.h"
-#include "softfloat.h"
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: unordtf2.c,v 1.2 2014/01/30 19:11:41 matt Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#ifdef FLOAT128
-
-flag __unordtf2(float128, float128);
-
-flag
-__unordtf2(float128 a, float128 b)
-{
- /*
- * The comparison is unordered if either input is a NaN.
- * Test for this by comparing each operand with itself.
- * We must perform both comparisons to correctly check for
- * signalling NaNs.
- */
- return 1 ^ (float128_eq(a, a) & float128_eq(b, b));
-}
-
-#endif /* FLOAT128 */
diff --git a/StdLib/LibC/StdLib/Bsearch.c b/StdLib/LibC/StdLib/Bsearch.c
deleted file mode 100644
index 90a42bfd12..0000000000
--- a/StdLib/LibC/StdLib/Bsearch.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/** @file
- Binary search utility function.
-
- This utility makes use of a comparison function to search arrays of
- unspecified type. Where an argument declared as size_t nmemb specifies the
- length of the array for a function, nmemb can have the value zero on a call
- to that function; the comparison function is not called, a search finds no
- matching element. Pointer arguments on such a call shall still have valid
- values.
-
- The implementation shall ensure that the second argument of the comparison
- function is a pointer to an element of the array. The first argument shall
- equal key.
-
- The comparison function shall not alter the contents of the array. The
- implementation may reorder elements of the array between calls to the
- comparison function, but shall not alter the contents of any individual
- element.
-
- When the same objects (consisting of size bytes, irrespective of their
- current positions in the array) are passed more than once to the comparison
- function, the results shall be consistent with one another. That is, the same
- object shall always compare the same way with the key.
-
- A sequence point occurs immediately before and immediately after each call to
- the comparison function, and also between any call to the comparison function
- and any movement of the objects passed as arguments to that call.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- ("$FreeBSD: src/lib/libc/stdlib/bsearch.c,v 1.4.10.1.2.1 2009/10/25 01:10:29 kensmith Exp $");
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#include <stdlib.h>
-
-/*
- * Perform a binary search.
- *
- * The code below is a bit sneaky. After a comparison fails, we
- * divide the work in half by moving either left or right. If lim
- * is odd, moving left simply involves halving lim: e.g., when lim
- * is 5 we look at item 2, so we change lim to 2 so that we will
- * look at items 0 & 1. If lim is even, the same applies. If lim
- * is odd, moving right again involes halving lim, this time moving
- * the base up one item past p: e.g., when lim is 5 we change base
- * to item 3 and make lim 2 so that we will look at items 3 and 4.
- * If lim is even, however, we have to shrink it by one before
- * halving: e.g., when lim is 4, we still looked at item 2, so we
- * have to make lim 3, then halve, obtaining 1, so that we will only
- * look at item 3.
- */
-void *
-bsearch(
- const void *key,
- const void *base0,
- size_t nmemb,
- size_t size,
- int (*compar)(const void *, const void *)
- )
-{
- const char *base = base0;
- size_t lim;
- int cmp;
- const void *p;
-
- for (lim = nmemb; lim != 0; lim >>= 1) {
- p = base + (lim >> 1) * size;
- cmp = (*compar)(key, p);
- if (cmp == 0)
- return ((void *)p);
- if (cmp > 0) { /* key > p: move right */
- base = (char *)p + size;
- lim--;
- } /* else move left */
- }
- return (NULL);
-}
diff --git a/StdLib/LibC/StdLib/Environs.c b/StdLib/LibC/StdLib/Environs.c
deleted file mode 100644
index 15221a1260..0000000000
--- a/StdLib/LibC/StdLib/Environs.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/** @file
- Implementation of the <stdlib.h> functions responsible for communication with
- the environment:
- - abort(void)
- - atexit(void(*handler)(void))
- - exit(int status)
- - _Exit(int status)
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#include <Uefi.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/BaseLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/ShellLib.h>
-
-#include <LibConfig.h>
-
-#include <errno.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <MainData.h>
-
-/** Internal worker function used by exit().
-**/
-void exitCleanup(INTN ExitVal);
-
-/* ################# Public Functions ################################### */
-
-/** The abort function causes abnormal program termination to occur, unless
- the signal SIGABRT is being caught and the signal handler does not return.
-
- Open streams with unwritten buffered data are not flushed, open
- streams are not closed, and temporary files are not removed by abort.
-
-**/
-void
-abort(void)
-{
- if (!gMD->aborting) {
- gMD->aborting = TRUE;
-
- if (gMD->cleanup != NULL) {
- gMD->cleanup();
- }
- }
- raise(SIGABRT);
- _Exit(EXIT_FAILURE); // In case raise returns.
-}
-
-/** The atexit function registers the function pointed to by func, to be
- called without arguments at normal program termination.
-
- The implementation shall support the registration of
- at least 32 functions.
-
- @return The atexit function returns zero if the registration succeeds,
- nonzero if it fails.
-**/
-int
-atexit(void (*handler)(void))
-{
- int retval = 1;
-
- if((handler != NULL) && (gMD->num_atexit < ATEXIT_MAX)) {
- gMD->atexit_handler[gMD->num_atexit++] = handler;
- retval = 0;
- }
- return retval;
-}
-
-/** The exit function causes normal program termination to occur. If more than
- one call to the exit function is executed by a program,
- the behavior is undefined.
-
- First, all functions registered by the atexit function are called, in the
- reverse order of their registration. If, during the call to any such function, a
- call to the longjmp function is made that would terminate the call to the
- registered function, the behavior is undefined.
-
- Next, all open streams with unwritten buffered data are flushed, all open
- streams are closed, and all files created by the tmpfile function
- are removed.
-
- The status returned to the host environment is determined in the same way
- as for the _Exit function.
-**/
-void
-exit(int status)
-{
- exitCleanup((INTN) status);
- _Exit(status);
-}
-
-/** The _Exit function causes normal program termination to occur and control
- to be returned to the host environment.
-
- No functions registered by the atexit function or signal handlers
- registered by the signal function are called. Open streams with unwritten
- buffered data are not flushed, open streams are not closed, and temporary
- files are not removed by abort.
-
- Finally, control is returned to the host environment. If the value of
- status is zero, or EXIT_SUCCESS, status is returned unchanged. If the value
- of status is EXIT_FAILURE, RETURN_ABORTED is returned.
- Otherwise, status is returned unchanged.
-**/
-void
-_Exit(int status)
-{
- gMD->ExitValue = status; // Save our exit status. Allows a status of 0.
- longjmp(gMD->MainExit, 0x55); // Get out of here. longjmp can't return 0. Use 0x55 for a non-zero value.
-
-#ifdef __GNUC__
- _Exit(status); /* Keep GCC happy - never reached */
-#endif
-}
-
-/** If string is a null pointer, the system function determines whether the
- host environment has a command processor. If string is not a null pointer,
- the system function passes the string pointed to by string to that command
- processor to be executed in a manner which the implementation shall
- document; this might then cause the program calling system to behave in a
- non-conforming manner or to terminate.
-
- @retval EXIT_FAILURE EFIerrno will contain the EFI status code
- indicating the cause of failure.
-
- @retval EXIT_SUCCESS EFIerrno will contain the EFI status returned
- by the executed command string.
- @retval 0 If string is NULL, 0 means a command processor
- is not available.
- @retval 1 If string is NULL, 1 means a command processor
- is available.
-**/
-int
-system(const char *string)
-{
- EFI_STATUS CmdStat;
- EFI_STATUS OpStat;
- EFI_HANDLE MyHandle = gImageHandle;
-
- if( string == NULL) {
- return 1;
- }
- (void)AsciiStrToUnicodeStr( string, gMD->UString);
- OpStat = ShellExecute( &MyHandle, gMD->UString, FALSE, NULL, &CmdStat);
- if(OpStat == RETURN_SUCCESS) {
- EFIerrno = CmdStat;
- return EXIT_SUCCESS;
- }
- EFIerrno = OpStat;
- return EXIT_FAILURE;
-}
-
-/** The getenv function searches an environment list, provided by the host
- environment, for a string that matches the string pointed to by name. The
- set of environment names and the method for altering the environment list
- are determined by the underlying UEFI Shell implementation.
-
- @return The getenv function returns a pointer to a string associated with
- the matched list member. The string pointed to shall not be
- modified by the program, but may be overwritten by a subsequent
- call to the getenv function. If the specified name cannot be
- found, a null pointer is returned.
-**/
-char *getenv(const char *name)
-{
- const CHAR16 *EfiEnv;
- char *retval = NULL;
-
- (void)AsciiStrToUnicodeStr( name, gMD->UString);
- EfiEnv = ShellGetEnvironmentVariable(gMD->UString);
- if(EfiEnv != NULL) {
- retval = UnicodeStrToAsciiStr( EfiEnv, gMD->ASgetenv);
- }
-
- return retval;
-}
-
-
-/**
- Add or update a variable in the environment list
-
- @param name Address of a zero terminated name string
- @param value Address of a zero terminated value string
- @param rewrite TRUE allows overwriting existing values
-
- @retval Returns 0 upon success
- @retval Returns -1 upon failure, sets errno with more information
-
- Errors
-
- EINVAL - name is NULL or points to a zero length string
- EALREADY - name already set and rewrite set to FALSE
- ENODEV - Unable to set non-volatile version of environment variable
- ENOMEM - Unable to set volatile version of environment variable
- ENOTSUP - Variable storage not supported
-
-**/
-int
-setenv (
- register const char * name,
- register const char * value,
- int rewrite
- )
-{
- CONST CHAR16 * HostName;
- int retval;
- EFI_STATUS Status;
- CHAR16 * UName;
- CHAR16 * UValue;
-
- //
- // Assume failure
- //
- retval = -1;
-
- //
- // Validate the inputs
- //
- errno = EINVAL;
- if (( NULL != name ) && ( 0 != *name )) {
- //
- // Get the storage locations for the unicode strings
- //
- UName = &gMD->UString[0];
- UValue = &gMD->UString2[0];
-
- //
- // Convert the strings
- //
- AsciiStrToUnicodeStr ( name, UName );
- AsciiStrToUnicodeStr ( value, UValue );
-
- //
- // Determine if the string is already present
- //
- errno = EALREADY;
- HostName = ShellGetEnvironmentVariable ( UName );
- if ( rewrite || ( NULL == HostName )) {
- //
- // Support systems that don't have non-volatile memory
- //
- errno = ENOMEM;
- Status = ShellSetEnvironmentVariable ( UName, UValue, TRUE );
- if ( EFI_ERROR ( Status )) {
- if ( EFI_UNSUPPORTED == Status ) {
- errno = ENOTSUP;
- }
- }
- else {
- //
- // Permanently set the environment variable
- //
- errno = ENODEV;
- Status = ShellSetEnvironmentVariable ( UName, UValue, FALSE );
- if ( !EFI_ERROR ( Status )) {
- //
- // Success
- //
- errno = 0;
- retval = 0;
- }
- }
- }
- }
-
- //
- // Return the operation status
- //
- return retval;
-}
-
diff --git a/StdLib/LibC/StdLib/Malloc.c b/StdLib/LibC/StdLib/Malloc.c
deleted file mode 100644
index c131b9ebf5..0000000000
--- a/StdLib/LibC/StdLib/Malloc.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/** @file
- Definitions for memory allocation routines: calloc, malloc, realloc, free.
-
- The order and contiguity of storage allocated by successive calls to the
- calloc, malloc, and realloc functions is unspecified. The pointer returned
- if the allocation succeeds is suitably aligned so that it may be assigned to
- a pointer of any type of object and then used to access such an object or an
- array of such objects in the space allocated (until the space is explicitly
- freed or reallocated). Each such allocation shall yield a pointer to an
- object disjoint from any other object. The pointer returned points to the
- start (lowest byte address) of the allocated space. If the space can not be
- allocated, a null pointer is returned. If the size of the space requested
- is zero, the behavior is implementation-defined; the value returned shall be
- either a null pointer or a unique pointer. The value of a pointer that
- refers to freed space is indeterminate.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
- */
-#include <Uefi.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
-
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#define CPOOL_HEAD_SIGNATURE SIGNATURE_32('C','p','h','d')
-
-/** The UEFI functions do not provide a way to determine the size of an
- allocated region of memory given just a pointer to the start of that
- region. Since this is required for the implementation of realloc,
- the memory head structure, CPOOL_HEAD, containing the necessary
- information is prepended to the requested space.
-
- The order of members is important. This structure is 8-byte aligned,
- as per the UEFI specification for memory allocation functions. By
- specifying Size as a 64-bit value and placing it immediately before
- Data, it ensures that Data will always be 8-byte aligned.
-
- On IA32 systems, this structure is 24 bytes long, excluding Data.
- On X64 systems, this structure is 32 bytes long, excluding Data.
-**/
-typedef struct {
- LIST_ENTRY List;
- UINT32 Signature;
- UINT64 Size;
- CHAR8 Data[1];
-} CPOOL_HEAD;
-
-// List of memory allocated by malloc/calloc/etc.
-static LIST_ENTRY MemPoolHead = INITIALIZE_LIST_HEAD_VARIABLE(MemPoolHead);
-
-/****************************/
-
-/** The malloc function allocates space for an object whose size is specified
- by size and whose value is indeterminate.
-
- This implementation uses the UEFI memory allocation boot services to get a
- region of memory that is 8-byte aligned and of the specified size. The
- region is allocated with type EfiLoaderData.
-
- @param size Size, in bytes, of the region to allocate.
-
- @return NULL is returned if the space could not be allocated and errno
- contains the cause. Otherwise, a pointer to an 8-byte aligned
- region of the requested size is returned.<BR>
- If NULL is returned, errno may contain:
- - EINVAL: Requested Size is zero.
- - ENOMEM: Memory could not be allocated.
-**/
-void *
-malloc(size_t Size)
-{
- CPOOL_HEAD *Head;
- void *RetVal;
- EFI_STATUS Status;
- UINTN NodeSize;
-
- if( Size == 0) {
- errno = EINVAL; // Make errno diffenent, just in case of a lingering ENOMEM.
- DEBUG((DEBUG_ERROR, "ERROR malloc: Zero Size\n"));
- return NULL;
- }
-
- NodeSize = (UINTN)(Size + sizeof(CPOOL_HEAD));
-
- DEBUG((DEBUG_POOL, "malloc(%d): NodeSz: %d", Size, NodeSize));
-
- Status = gBS->AllocatePool( EfiLoaderData, NodeSize, (void**)&Head);
- if( Status != EFI_SUCCESS) {
- RetVal = NULL;
- errno = ENOMEM;
- DEBUG((DEBUG_ERROR, "\nERROR malloc: AllocatePool returned %r\n", Status));
- }
- else {
- assert(Head != NULL);
- // Fill out the pool header
- Head->Signature = CPOOL_HEAD_SIGNATURE;
- Head->Size = NodeSize;
-
- // Add this node to the list
- (void)InsertTailList(&MemPoolHead, (LIST_ENTRY *)Head);
-
- // Return a pointer to the data
- RetVal = (void*)Head->Data;
- DEBUG((DEBUG_POOL, " Head: %p, Returns %p\n", Head, RetVal));
- }
-
- return RetVal;
-}
-
-/** The calloc function allocates space for an array of Num objects, each of
- whose size is Size. The space is initialized to all bits zero.
-
- This implementation uses the UEFI memory allocation boot services to get a
- region of memory that is 8-byte aligned and of the specified size. The
- region is allocated with type EfiLoaderData.
-
- @param Num Number of objects to allocate.
- @param Size Size, in bytes, of the objects to allocate space for.
-
- @return NULL is returned if the space could not be allocated and errno
- contains the cause. Otherwise, a pointer to an 8-byte aligned
- region of the requested size is returned.
-**/
-void *
-calloc(size_t Num, size_t Size)
-{
- void *RetVal;
- size_t NumSize;
-
- NumSize = Num * Size;
- RetVal = NULL;
- if (NumSize != 0) {
- RetVal = malloc(NumSize);
- if( RetVal != NULL) {
- (VOID)ZeroMem( RetVal, NumSize);
- }
- }
- DEBUG((DEBUG_POOL, "0x%p = calloc(%d, %d)\n", RetVal, Num, Size));
-
- return RetVal;
-}
-
-/** The free function causes the space pointed to by Ptr to be deallocated,
- that is, made available for further allocation.
-
- If Ptr is a null pointer, no action occurs. Otherwise, if the argument
- does not match a pointer earlier returned by the calloc, malloc, or realloc
- function, or if the space has been deallocated by a call to free or
- realloc, the behavior is undefined.
-
- @param Ptr Pointer to a previously allocated region of memory to be freed.
-
-**/
-void
-free(void *Ptr)
-{
- CPOOL_HEAD *Head;
-
- Head = BASE_CR(Ptr, CPOOL_HEAD, Data);
- assert(Head != NULL);
- DEBUG((DEBUG_POOL, "free(%p): Head: %p\n", Ptr, Head));
-
- if(Ptr != NULL) {
- if (Head->Signature == CPOOL_HEAD_SIGNATURE) {
- (void) RemoveEntryList((LIST_ENTRY *)Head); // Remove this node from the malloc pool
- (void) gBS->FreePool (Head); // Now free the associated memory
- }
- else {
- errno = EFAULT;
- DEBUG((DEBUG_ERROR, "ERROR free(0x%p): Signature is 0x%8X, expected 0x%8X\n",
- Ptr, Head->Signature, CPOOL_HEAD_SIGNATURE));
- }
- }
- DEBUG((DEBUG_POOL, "free Done\n"));
-}
-
-/** The realloc function changes the size of the object pointed to by Ptr to
- the size specified by NewSize.
-
- The contents of the object are unchanged up to the lesser of the new and
- old sizes. If the new size is larger, the value of the newly allocated
- portion of the object is indeterminate.
-
- If Ptr is a null pointer, the realloc function behaves like the malloc
- function for the specified size.
-
- If Ptr does not match a pointer earlier returned by the calloc, malloc, or
- realloc function, or if the space has been deallocated by a call to the free
- or realloc function, the behavior is undefined.
-
- If the space cannot be allocated, the object pointed to by Ptr is unchanged.
-
- If NewSize is zero and Ptr is not a null pointer, the object it points to
- is freed.
-
- This implementation uses the UEFI memory allocation boot services to get a
- region of memory that is 8-byte aligned and of the specified size. The
- region is allocated with type EfiLoaderData.
-
- The following combinations of Ptr and NewSize can occur:<BR>
- Ptr NewSize<BR>
- -------- -------------------<BR>
- - NULL 0 Returns NULL;
- - NULL > 0 Same as malloc(NewSize)
- - invalid X Returns NULL;
- - valid NewSize >= OldSize Returns malloc(NewSize) with Oldsize bytes copied from Ptr
- - valid NewSize < OldSize Returns new buffer with Oldsize bytes copied from Ptr
- - valid 0 Return NULL. Frees Ptr.
-
-
- @param Ptr Pointer to a previously allocated region of memory to be resized.
- @param NewSize Size, in bytes, of the new object to allocate space for.
-
- @return NULL is returned if the space could not be allocated and errno
- contains the cause. Otherwise, a pointer to an 8-byte aligned
- region of the requested size is returned. If NewSize is zero,
- NULL is returned and errno will be unchanged.
-**/
-void *
-realloc(void *Ptr, size_t ReqSize)
-{
- void *RetVal = NULL;
- CPOOL_HEAD *Head = NULL;
- size_t OldSize = 0;
- size_t NewSize;
- size_t NumCpy;
-
- // Find out the size of the OLD memory region
- if( Ptr != NULL) {
- Head = BASE_CR (Ptr, CPOOL_HEAD, Data);
- assert(Head != NULL);
- if (Head->Signature != CPOOL_HEAD_SIGNATURE) {
- errno = EFAULT;
- DEBUG((DEBUG_ERROR, "ERROR realloc(0x%p): Signature is 0x%8X, expected 0x%8X\n",
- Ptr, Head->Signature, CPOOL_HEAD_SIGNATURE));
- return NULL;
- }
- OldSize = (size_t)Head->Size;
- }
-
- // At this point, Ptr is either NULL or a valid pointer to an allocated space
- NewSize = (size_t)(ReqSize + (sizeof(CPOOL_HEAD)));
-
- if( ReqSize > 0) {
- RetVal = malloc(NewSize); // Get the NEW memory region
- if( Ptr != NULL) { // If there is an OLD region...
- if( RetVal != NULL) { // and the NEW region was successfully allocated
- NumCpy = OldSize;
- if( OldSize > NewSize) {
- NumCpy = NewSize;
- }
- (VOID)CopyMem( RetVal, Ptr, NumCpy); // Copy old data to the new region.
- free( Ptr); // and reclaim the old region.
- }
- else {
- errno = ENOMEM;
- }
- }
- }
- else {
- free( Ptr); // Reclaim the old region.
- }
- DEBUG((DEBUG_POOL, "0x%p = realloc(%p, %d): Head: %p NewSz: %d\n",
- RetVal, Ptr, ReqSize, Head, NewSize));
-
- return RetVal;
-}
diff --git a/StdLib/LibC/StdLib/NumericInt.c b/StdLib/LibC/StdLib/NumericInt.c
deleted file mode 100644
index 97e52eb1bd..0000000000
--- a/StdLib/LibC/StdLib/NumericInt.c
+++ /dev/null
@@ -1,498 +0,0 @@
-/** @file
- Integer Numeric Conversion Functions.
-
- The atoi, atol, and atoll functions convert the initial portion of the string
- pointed to by nptr to int, long int, and long long int representation,
- respectively. They are equivalent to:
- - atoi: (int)strtol(nptr, (char **)NULL, 10)
- - atol: strtol(nptr, (char **)NULL, 10)
- - atoll: strtoll(nptr, (char **)NULL, 10)
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/BaseLib.h>
-
-#include <LibConfig.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdlib.h>
-
-/** The atoi function converts the initial portion of the string pointed to by
- nptr to int representation. Except for the behavior on error, it is
- equivalent to:
- - (int)strtol(nptr, (char **)NULL, 10)
-
- @return The atoi function returns the converted value.
-**/
-int
-atoi(const char *nptr)
-{
- int Retval;
- BOOLEAN Negative = FALSE;
-
- while(isspace((const unsigned char)*nptr)) ++nptr; // Skip leading spaces
-
- if(*nptr == '+') {
- Negative = FALSE;
- ++nptr;
- }
- else if(*nptr == '-') {
- Negative = TRUE;
- ++nptr;
- }
- Retval = (int)AsciiStrDecimalToUintn(nptr);
- if(Negative) {
- Retval = -Retval;
- }
- return Retval;
-}
-
-/** The atol function converts the initial portion of the string pointed to by
- nptr to long int representation. Except for the behavior on error, it is
- equivalent to:
- - strtol(nptr, (char **)NULL, 10)
-
- @return The atol function returns the converted value.
-**/
-long int
-atol(const char *nptr)
-{
- long int Retval;
- BOOLEAN Negative = FALSE;
-
- while(isspace(*nptr)) ++nptr; // Skip leading spaces
-
- if(*nptr == '+') {
- Negative = FALSE;
- ++nptr;
- }
- else if(*nptr == '-') {
- Negative = TRUE;
- ++nptr;
- }
- Retval = (long int)AsciiStrDecimalToUint64(nptr);
- if(Negative) {
- Retval = -Retval;
- }
- return Retval;
-}
-
-/** The atoll function converts the initial portion of the string pointed to by
- nptr to long long int representation. Except for the behavior on error, it
- is equivalent to:
- - strtoll(nptr, (char **)NULL, 10)
-
- @return The atoll function returns the converted value.
-**/
-long long int
-atoll(const char *nptr)
-{
- long long int Retval;
- BOOLEAN Negative = FALSE;
-
- while(isspace(*nptr)) ++nptr; // Skip leading spaces
-
- if(*nptr == '+') {
- Negative = FALSE;
- ++nptr;
- }
- else if(*nptr == '-') {
- Negative = TRUE;
- ++nptr;
- }
- Retval = (long long int)AsciiStrDecimalToUint64(nptr);
- if(Negative) {
- Retval = -Retval;
- }
- return Retval;
-}
-
-static int
-Digit2Val( int c)
-{
- if(isalpha(c)) { /* If c is one of [A-Za-z]... */
- c = toupper(c) - 7; // Adjust so 'A' is ('9' + 1)
- }
- return c - '0'; // Value returned is between 0 and 35, inclusive.
-}
-
-/** The strtol, strtoll, strtoul, and strtoull functions convert the initial
- portion of the string pointed to by nptr to long int, long long int,
- unsigned long int, and unsigned long long int representation, respectively.
- First, they decompose the input string into three parts: an initial,
- possibly empty, sequence of white-space characters (as specified by the
- isspace function), a subject sequence resembling an integer represented in
- some radix determined by the value of base, and a final string of one or
- more unrecognized characters, including the terminating null character of
- the input string. Then, they attempt to convert the subject sequence to an
- integer, and return the result.
-
- If the value of base is zero, the expected form of the subject sequence is
- that of an integer constant, optionally preceded
- by a plus or minus sign, but not including an integer suffix. If the value
- of base is between 2 and 36 (inclusive), the expected form of the subject
- sequence is a sequence of letters and digits representing an integer with
- the radix specified by base, optionally preceded by a plus or minus sign,
- but not including an integer suffix. The letters from a (or A) through z
- (or Z) are ascribed the values 10 through 35; only letters and digits whose
- ascribed values are less than that of base are permitted. If the value of
- base is 16, the characters 0x or 0X may optionally precede the sequence of
- letters and digits, following the sign if present.
-
- The subject sequence is defined as the longest initial subsequence of the
- input string, starting with the first non-white-space character, that is of
- the expected form. The subject sequence contains no characters if the input
- string is empty or consists entirely of white space, or if the first
- non-white-space character is other than a sign or a permissible letter or digit.
-
- If the subject sequence has the expected form and the value of base is
- zero, the sequence of characters starting with the first digit is
- interpreted as an integer constant. If the subject sequence has the
- expected form and the value of base is between 2 and 36, it is used as the
- base for conversion, ascribing to each letter its value as given above. If
- the subject sequence begins with a minus sign, the value resulting from the
- conversion is negated (in the return type). A pointer to the final string
- is stored in the object pointed to by endptr, provided that endptr is
- not a null pointer.
-
- In other than the "C" locale, additional locale-specific subject sequence
- forms may be accepted.
-
- If the subject sequence is empty or does not have the expected form, no
- conversion is performed; the value of nptr is stored in the object pointed
- to by endptr, provided that endptr is not a null pointer.
-
- @return The strtol, strtoll, strtoul, and strtoull functions return the
- converted value, if any. If no conversion could be performed, zero
- is returned. If the correct value is outside the range of
- representable values, LONG_MIN, LONG_MAX, LLONG_MIN, LLONG_MAX,
- ULONG_MAX, or ULLONG_MAX is returned (according to the return type
- and sign of the value, if any), and the value of the macro ERANGE
- is stored in errno.
-**/
-long
-strtol(const char * __restrict nptr, char ** __restrict endptr, int base)
-{
- const char *pEnd;
- long Result = 0;
- long Previous;
- int temp;
- BOOLEAN Negative = FALSE;
-
- pEnd = nptr;
-
- if((base < 0) || (base == 1) || (base > 36)) {
- if(endptr != NULL) {
- *endptr = NULL;
- }
- return 0;
- }
- // Skip leading spaces.
- while(isspace(*nptr)) ++nptr;
-
- // Process Subject sequence: optional sign followed by digits.
- if(*nptr == '+') {
- Negative = FALSE;
- ++nptr;
- }
- else if(*nptr == '-') {
- Negative = TRUE;
- ++nptr;
- }
-
- if(*nptr == '0') { /* Might be Octal or Hex */
- if(toupper(nptr[1]) == 'X') { /* Looks like Hex */
- if((base == 0) || (base == 16)) {
- nptr += 2; /* Skip the "0X" */
- base = 16; /* In case base was 0 */
- }
- }
- else { /* Looks like Octal */
- if((base == 0) || (base == 8)) {
- ++nptr; /* Skip the leading "0" */
- base = 8; /* In case base was 0 */
- }
- }
- }
- if(base == 0) { /* If still zero then must be decimal */
- base = 10;
- }
- if(*nptr == '0') {
- for( ; *nptr == '0'; ++nptr); /* Skip any remaining leading zeros */
- pEnd = nptr;
- }
-
- while( isalnum(*nptr) && ((temp = Digit2Val(*nptr)) < base)) {
- Previous = Result;
- Result = (Result * base) + (long int)temp;
- if( Result <= Previous) { // Detect Overflow
- if(Negative) {
- Result = LONG_MIN;
- }
- else {
- Result = LONG_MAX;
- }
- Negative = FALSE;
- errno = ERANGE;
- break;
- }
- pEnd = ++nptr;
- }
- if(Negative) {
- Result = -Result;
- }
-
- // Save pointer to final sequence
- if(endptr != NULL) {
- *endptr = (char *)pEnd;
- }
- return Result;
-}
-
-/** The strtoul function converts the initial portion of the string pointed to
- by nptr to unsigned long int representation.
-
- See the description for strtol for more information.
-
- @return The strtoul function returns the converted value, if any. If no
- conversion could be performed, zero is returned. If the correct
- value is outside the range of representable values, ULONG_MAX is
- returned and the value of the macro ERANGE is stored in errno.
-**/
-unsigned long
-strtoul(const char * __restrict nptr, char ** __restrict endptr, int base)
-{
- const char *pEnd;
- unsigned long Result = 0;
- unsigned long Previous;
- int temp;
-
- pEnd = nptr;
-
- if((base < 0) || (base == 1) || (base > 36)) {
- if(endptr != NULL) {
- *endptr = NULL;
- }
- return 0;
- }
- // Skip leading spaces.
- while(isspace(*nptr)) ++nptr;
-
- // Process Subject sequence: optional + sign followed by digits.
- if(*nptr == '+') {
- ++nptr;
- }
-
- if(*nptr == '0') { /* Might be Octal or Hex */
- if(toupper(nptr[1]) == 'X') { /* Looks like Hex */
- if((base == 0) || (base == 16)) {
- nptr += 2; /* Skip the "0X" */
- base = 16; /* In case base was 0 */
- }
- }
- else { /* Looks like Octal */
- if((base == 0) || (base == 8)) {
- ++nptr; /* Skip the leading "0" */
- base = 8; /* In case base was 0 */
- }
- }
- }
- if(base == 0) { /* If still zero then must be decimal */
- base = 10;
- }
- if(*nptr == '0') {
- for( ; *nptr == '0'; ++nptr); /* Skip any remaining leading zeros */
- pEnd = nptr;
- }
-
- while( isalnum(*nptr) && ((temp = Digit2Val(*nptr)) < base)) {
- Previous = Result;
- Result = (Result * base) + (unsigned long)temp;
- if( Result < Previous) { // If we overflowed
- Result = ULONG_MAX;
- errno = ERANGE;
- break;
- }
- pEnd = ++nptr;
- }
-
- // Save pointer to final sequence
- if(endptr != NULL) {
- *endptr = (char *)pEnd;
- }
- return Result;
-}
-
-/** The strtoll function converts the initial portion of the string pointed to
- by nptr to long long int representation.
-
- See the description for strtol for more information.
-
- @return The strtoll function returns the converted value, if any. If no
- conversion could be performed, zero is returned. If the correct
- value is outside the range of representable values, LLONG_MIN or
- LLONG_MAX is returned (according to the sign of the value, if any),
- and the value of the macro ERANGE is stored in errno.
-**/
-long long
-strtoll(const char * __restrict nptr, char ** __restrict endptr, int base)
-{
- const char *pEnd;
- long long Result = 0;
- long long Previous;
- int temp;
- BOOLEAN Negative = FALSE;
-
- pEnd = nptr;
-
- if((base < 0) || (base == 1) || (base > 36)) {
- if(endptr != NULL) {
- *endptr = NULL;
- }
- return 0;
- }
- // Skip leading spaces.
- while(isspace(*nptr)) ++nptr;
-
- // Process Subject sequence: optional sign followed by digits.
- if(*nptr == '+') {
- Negative = FALSE;
- ++nptr;
- }
- else if(*nptr == '-') {
- Negative = TRUE;
- ++nptr;
- }
-
- if(*nptr == '0') { /* Might be Octal or Hex */
- if(toupper(nptr[1]) == 'X') { /* Looks like Hex */
- if((base == 0) || (base == 16)) {
- nptr += 2; /* Skip the "0X" */
- base = 16; /* In case base was 0 */
- }
- }
- else { /* Looks like Octal */
- if((base == 0) || (base == 8)) {
- ++nptr; /* Skip the leading "0" */
- base = 8; /* In case base was 0 */
- }
- }
- }
- if(base == 0) { /* If still zero then must be decimal */
- base = 10;
- }
- if(*nptr == '0') {
- for( ; *nptr == '0'; ++nptr); /* Skip any remaining leading zeros */
- pEnd = nptr;
- }
-
- while( isalnum(*nptr) && ((temp = Digit2Val(*nptr)) < base)) {
- Previous = Result;
- Result = (Result * base) + (long long int)temp;
- if( Result <= Previous) { // Detect Overflow
- if(Negative) {
- Result = LLONG_MIN;
- }
- else {
- Result = LLONG_MAX;
- }
- Negative = FALSE;
- errno = ERANGE;
- break;
- }
- pEnd = ++nptr;
- }
- if(Negative) {
- Result = -Result;
- }
-
- // Save pointer to final sequence
- if(endptr != NULL) {
- *endptr = (char *)pEnd;
- }
- return Result;
-}
-
-/** The strtoull function converts the initial portion of the string pointed to
- by nptr to unsigned long long int representation.
-
- See the description for strtol for more information.
-
- @return The strtoull function returns the converted value, if any. If no
- conversion could be performed, zero is returned. If the correct
- value is outside the range of representable values, ULLONG_MAX is
- returned and the value of the macro ERANGE is stored in errno.
-**/
-unsigned long long
-strtoull(const char * __restrict nptr, char ** __restrict endptr, int base)
-{
- const char *pEnd;
- unsigned long long Result = 0;
- unsigned long long Previous;
- int temp;
-
- pEnd = nptr;
-
- if((base < 0) || (base == 1) || (base > 36)) {
- if(endptr != NULL) {
- *endptr = NULL;
- }
- return 0;
- }
- // Skip leading spaces.
- while(isspace(*nptr)) ++nptr;
-
- // Process Subject sequence: optional + sign followed by digits.
- if(*nptr == '+') {
- ++nptr;
- }
-
- if(*nptr == '0') { /* Might be Octal or Hex */
- if(toupper(nptr[1]) == 'X') { /* Looks like Hex */
- if((base == 0) || (base == 16)) {
- nptr += 2; /* Skip the "0X" */
- base = 16; /* In case base was 0 */
- }
- }
- else { /* Looks like Octal */
- if((base == 0) || (base == 8)) {
- ++nptr; /* Skip the leading "0" */
- base = 8; /* In case base was 0 */
- }
- }
- }
- if(base == 0) { /* If still zero then must be decimal */
- base = 10;
- }
- if(*nptr == '0') {
- for( ; *nptr == '0'; ++nptr); /* Skip any remaining leading zeros */
- pEnd = nptr;
- }
-
- while( isalnum(*nptr) && ((temp = Digit2Val(*nptr)) < base)) {
- Previous = Result;
- Result = (Result * base) + (unsigned long long)temp;
- if( Result < Previous) { // If we overflowed
- Result = ULLONG_MAX;
- errno = ERANGE;
- break;
- }
- pEnd = ++nptr;
- }
-
- // Save pointer to final sequence
- if(endptr != NULL) {
- *endptr = (char *)pEnd;
- }
- return Result;
-}
diff --git a/StdLib/LibC/StdLib/Qsort.c b/StdLib/LibC/StdLib/Qsort.c
deleted file mode 100644
index 3c98c6aa9e..0000000000
--- a/StdLib/LibC/StdLib/Qsort.c
+++ /dev/null
@@ -1,205 +0,0 @@
-/** @file
- Quick Sort utility function.
-
- This utility makes use of a comparison function to search arrays of
- unspecified type. Where an argument declared as size_t nmemb specifies the
- length of the array for a function, nmemb can have the value zero on a call
- to that function; the comparison function is not called, a search finds no
- matching element. Pointer arguments on such a call shall still have valid
- values.
-
- The implementation shall ensure that both arguments of the comparison
- function are pointers to elements of the array.
-
- The comparison function shall not alter the contents of the array. The
- implementation may reorder elements of the array between calls to the
- comparison function, but shall not alter the contents of any individual
- element.
-
- When the same objects (consisting of size bytes, irrespective of their
- current positions in the array) are passed more than once to the comparison
- function, the results shall be consistent with one another. That is, they
- define a total ordering on the array.
-
- A sequence point occurs immediately before and immediately after each call to
- the comparison function, and also between any call to the comparison function
- and any movement of the objects passed as arguments to that call.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- ("$FreeBSD: src/lib/libc/stdlib/qsort.c,v 1.15.2.1.2.1 2009/10/25 01:10:29 kensmith Exp $");
- */
-#include <LibConfig.h>
-
-#include <stdlib.h>
-
-typedef int cmp_t(const void *, const void *);
-
-static __inline char *med3(char *, char *, char *, cmp_t *);
-static __inline void swapfunc(char *, char *, size_t, int);
-
-/*
- * Qsort routine from Bentley & McIlroy's "Engineering a Sort Function".
- */
-#define swapcode(TYPE, parmi, parmj, n) { \
- size_t i = (n) / sizeof (TYPE); \
- TYPE *pi = (TYPE *) (parmi); \
- TYPE *pj = (TYPE *) (parmj); \
- do { \
- TYPE t = *pi; \
- *pi++ = *pj; \
- *pj++ = t; \
- } while (--i > 0); \
-}
-
-#define SWAPINIT(a, es) swaptype = ((char *)a - (char *)0) % sizeof(long) || \
- es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1;
-
-static __inline void
-swapfunc(char *a, char *b, size_t n, int swaptype)
-{
- if(swaptype <= 1)
- swapcode(long, a, b, n)
- else
- swapcode(char, a, b, n)
-}
-
-#define swap(a, b) \
- if (swaptype == 0) { \
- long t = *(long *)(a); \
- *(long *)(a) = *(long *)(b); \
- *(long *)(b) = t; \
- } else \
- swapfunc(a, b, es, swaptype)
-
-#define vecswap(a, b, n) if ((n) > 0) swapfunc(a, b, n, swaptype)
-
-static __inline char *
-med3(char *a, char *b, char *c, cmp_t *cmp )
-{
- return cmp(a, b) < 0 ?
- (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a ))
- :(cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c ));
-}
-
-/* The qsort function sorts an array of nmemb objects, the initial element of
- which is pointed to by base. The size of each object is specified by size.
-
- The contents of the array are sorted into ascending order according to a
- comparison function pointed to by compar, which is called with two
- arguments that point to the objects being compared. The function shall
- return an integer less than, equal to, or greater than zero if the first
- argument is considered to be respectively less than, equal to, or greater
- than the second.
-
- If two elements compare as equal, their order in the resulting sorted array
- is unspecified.
-*/
-void
-qsort(void *a, size_t n, size_t es, cmp_t *cmp)
-{
- char *pa, *pb, *pc, *pd, *pl, *pm, *pn;
- size_t d, r;
- int cmp_result;
- int swaptype, swap_cnt;
-
-loop: SWAPINIT(a, es);
- swap_cnt = 0;
- if (n < 7) {
- for (pm = (char *)a + es; pm < (char *)a + n * es; pm += es)
- for (pl = pm;
- pl > (char *)a && cmp(pl - es, pl) > 0;
- pl -= es)
- swap(pl, pl - es);
- return;
- }
- pm = (char *)a + (n / 2) * es;
- if (n > 7) {
- pl = a;
- pn = (char *)a + (n - 1) * es;
- if (n > 40) {
- d = (n / 8) * es;
- pl = med3(pl, pl + d, pl + 2 * d, cmp);
- pm = med3(pm - d, pm, pm + d, cmp);
- pn = med3(pn - 2 * d, pn - d, pn, cmp);
- }
- pm = med3(pl, pm, pn, cmp);
- }
- swap(a, pm);
- pa = pb = (char *)a + es;
-
- pc = pd = (char *)a + (n - 1) * es;
- for (;;) {
- while (pb <= pc && (cmp_result = cmp(pb, a)) <= 0) {
- if (cmp_result == 0) {
- swap_cnt = 1;
- swap(pa, pb);
- pa += es;
- }
- pb += es;
- }
- while (pb <= pc && (cmp_result = cmp(pc, a)) >= 0) {
- if (cmp_result == 0) {
- swap_cnt = 1;
- swap(pc, pd);
- pd -= es;
- }
- pc -= es;
- }
- if (pb > pc)
- break;
- swap(pb, pc);
- swap_cnt = 1;
- pb += es;
- pc -= es;
- }
- if (swap_cnt == 0) { /* Switch to insertion sort */
- for (pm = (char *)a + es; pm < (char *)a + n * es; pm += es)
- for (pl = pm;
- pl > (char *)a && cmp(pl - es, pl) > 0;
- pl -= es)
- swap(pl, pl - es);
- return;
- }
-
- pn = (char *)a + n * es;
- r = MIN(pa - (char *)a, pb - pa);
- vecswap(a, pb - r, r);
- r = MIN((size_t)(pd - pc), ((size_t)(pn - pd)) - es);
- vecswap(pb, pn - r, r);
- if ((size_t)(r = pb - pa) > es)
- qsort(a, r / es, es, cmp);
- if ((size_t)(r = pd - pc) > es) {
- /* Iterate rather than recurse to save stack space */
- a = pn - r;
- n = r / es;
- goto loop;
- }
-/* qsort(pn - r, r / es, es, cmp);*/
-}
diff --git a/StdLib/LibC/StdLib/Rand.c b/StdLib/LibC/StdLib/Rand.c
deleted file mode 100644
index 4e17ff1313..0000000000
--- a/StdLib/LibC/StdLib/Rand.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*-
- * Portions Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-//__FBSDID("$FreeBSD: src/lib/libc/stdlib/rand.c,v 1.17.2.1.2.1 2009/10/25 01:10:29 kensmith Exp $");
-#include <LibConfig.h>
-
-#include <stdlib.h>
-
-static UINT32 next = 1;
-
-/** Compute a pseudo-random number.
- *
- * Compute x = (7^5 * x) mod (2^31 - 1)
- * without overflowing 31 bits:
- * (2^31 - 1) = 127773 * (7^5) + 2836
- * From "Random number generators: good ones are hard to find",
- * Park and Miller, Communications of the ACM, vol. 31, no. 10,
- * October 1988, p. 1195.
-**/
-int
-rand()
-{
- INT32 hi, lo, x;
-
- /* Can't be initialized with 0, so use another value. */
- if (next == 0)
- next = 123459876;
- hi = next / 127773;
- lo = next % 127773;
- x = 16807 * lo - 2836 * hi;
- if (x < 0)
- x += 0x7fffffff;
- return ((next = x) % ((UINT32)RAND_MAX + 1));
-}
-
-void
-srand(unsigned int seed)
-{
- next = (UINT32)seed;
-}
diff --git a/StdLib/LibC/StdLib/StdLib.inf b/StdLib/LibC/StdLib/StdLib.inf
deleted file mode 100644
index ffc54b562e..0000000000
--- a/StdLib/LibC/StdLib/StdLib.inf
+++ /dev/null
@@ -1,69 +0,0 @@
-## @file
-# Standard C library: StdLib implementations.
-#
-# Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LibStdLib
- FILE_GUID = f8a312f8-bccc-479f-b49b-ce129568b06a
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibStdLib
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- Bsearch.c
- Environs.c
- Malloc.c
- NumericInt.c
- Qsort.c
- Rand.c
- strtoimax.c
- strtoumax.c
- Xabs.c
- Xdiv.c
- realpath.c
- setprogname.c
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
- ShellPkg/ShellPkg.dec
-
-[LibraryClasses]
- UefiBootServicesTableLib
- DebugLib
- BaseLib
- BaseMemoryLib
- MemoryAllocationLib
- ShellLib
- LibC
- LibCType
- LibSignal
-
-################################################################
-#
-# The Build Options, below, are only used when building the C library.
-# DO NOT use them when building your application!
-# Nasty things could happen if you do.
-#
-# /Oi- is required for Microsoft VC++ to allow "intrinsic" functions to be
-# defined in this library.
-#
-[BuildOptions]
- MSFT:*_*_*_CC_FLAGS = /Oi-
diff --git a/StdLib/LibC/StdLib/Xabs.c b/StdLib/LibC/StdLib/Xabs.c
deleted file mode 100644
index 1b289857ab..0000000000
--- a/StdLib/LibC/StdLib/Xabs.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/** @file
- The abs, labs, and llabs functions compute the absolute value of an integer j.
- If the result cannot be represented, the behavior is undefined.
-
- The abs, labs, and llabs, functions return the absolute value of their
- parameter.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-int
-abs(int j)
-{
- return(j < 0 ? -j : j);
-}
-
-long
-labs(long j)
-{
- return(j < 0 ? -j : j);
-}
-
-long long
-llabs(long long j)
-{
- return (j < 0 ? -j : j);
-}
diff --git a/StdLib/LibC/StdLib/Xdiv.c b/StdLib/LibC/StdLib/Xdiv.c
deleted file mode 100644
index 111a0be1a2..0000000000
--- a/StdLib/LibC/StdLib/Xdiv.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/** @file
- The div, ldiv, and lldiv, functions compute numer / denom and
- numer % denom in a single operation.
-
- The div, ldiv, and lldiv functions return a structure of type div_t, ldiv_t,
- and lldiv_t, respectively, comprising both the quotient and the remainder.
- The structures shall contain (in either order) the members quot
- (the quotient) and rem (the remainder), each of which has the same type as
- the arguments numer and denom. If either part of the result cannot be
- represented, the behavior is undefined.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <Library/BaseLib.h>
-#include <stdlib.h> /* div_t, ldiv_t, lldiv_t */
-
-/* DivS64x64Remainder will write the remainder as a 64-bit value, so we store
- it first into bigrem and then into r.rem. This avoids writing the remainder
- beyond the end of the div_t structure.
-*/
-div_t
-div(int num, int denom)
-{
- div_t r;
- INT64 bigrem;
-
- r.quot = (int)DivS64x64Remainder( (INT64)num, (INT64)denom, &bigrem);
- r.rem = (int)bigrem;
-
- return (r);
-}
-
-/* DivS64x64Remainder will write the remainder as a 64-bit value, so we store
- it first into bigrem and then into r.rem. This avoids writing the remainder
- beyond the end of the div_t structure.
-*/
-ldiv_t
-ldiv(long num, long denom)
-{
- ldiv_t r;
- INT64 bigrem;
-
- r.quot = (long)DivS64x64Remainder( (INT64)num, (INT64)denom, &bigrem);
- r.rem = (long)bigrem;
-
- return (r);
-}
-
-/* DivS64x64Remainder will write the remainder as a 64-bit value, so we store
- it first into bigrem and then into r.rem. This avoids writing the remainder
- beyond the end of the div_t structure if r.rem is narrower than 64-bits.
-
- Even though most implementations make long long 64 bits wide, we still go
- through bigrem, just-in-case.
-*/
-lldiv_t
-lldiv(long long num, long long denom)
-{
- lldiv_t r;
- INT64 bigrem;
-
- r.quot = (long long)DivS64x64Remainder( (INT64)num, (INT64)denom, &bigrem);
- r.rem = (long long)bigrem;
-
- return (r);
-}
diff --git a/StdLib/LibC/StdLib/realpath.c b/StdLib/LibC/StdLib/realpath.c
deleted file mode 100644
index 6d75f17a39..0000000000
--- a/StdLib/LibC/StdLib/realpath.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/** @file
- Implement the realpath function.
-
- Copyright (c) 2011 - 2014, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <LibConfig.h>
-#include <Library/BaseLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <errno.h>
-
-/** The realpath() function shall derive, from the pathname pointed to by
- file_name, an absolute pathname that names the same file, whose resolution
- does not involve '.', '..', or symbolic links.
-
- The generated pathname shall be stored as a null-terminated string, up to a
- maximum of {PATH_MAX} bytes, in the buffer pointed to by resolved_name.
-
- If resolved_name is a null pointer, the behavior of realpath() is
- implementation-defined.
-
- @param[in] file_name The filename to convert.
- @param[in,out] resolved_name The resultant name.
-
- @retval NULL An error occured.
- @return resolved_name.
-**/
-char *
-realpath(
- char *file_name,
- char *resolved_name
- )
-{
- CHAR16 *Temp;
- if (file_name == NULL || resolved_name == NULL) {
- errno = EINVAL;
- return (NULL);
- }
- Temp = AllocateZeroPool((1+AsciiStrLen(file_name))*sizeof(CHAR16));
- if (Temp == NULL) {
- errno = ENOMEM;
- return (NULL);
- }
- AsciiStrToUnicodeStr(file_name, Temp);
- PathCleanUpDirectories(Temp);
- UnicodeStrToAsciiStr(Temp, resolved_name);
- return (resolved_name);
-}
diff --git a/StdLib/LibC/StdLib/setprogname.c b/StdLib/LibC/StdLib/setprogname.c
deleted file mode 100644
index 24198cb9bb..0000000000
--- a/StdLib/LibC/StdLib/setprogname.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/** @file setprogname and getprogname
-
- $NetBSD: setprogname.c,v 1.5 2008/04/28 20:24:12 martin Exp $
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Todd Vierling.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include <LibConfig.h>
-
-#ifdef HAVE_SETPROGNAME
-#include <string.h>
-
-static const char *__progname = NULL;
-
-void
-setprogname(const char *progname)
-{
- __progname = strrchr(progname, '/');
- if (__progname == NULL)
- __progname = progname;
- else
- __progname++;
-}
-
-const char *
-getprogname(void)
-{
- return __progname;
-}
-
-#endif
diff --git a/StdLib/LibC/StdLib/strtoimax.c b/StdLib/LibC/StdLib/strtoimax.c
deleted file mode 100644
index c5c40abcb2..0000000000
--- a/StdLib/LibC/StdLib/strtoimax.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/* $NetBSD: strtoimax.c,v 1.4 2005/11/29 03:12:00 christos Exp $ */
-
-/*-
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "from: @(#)strtoq.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: strtoimax.c,v 1.4 2005/11/29 03:12:00 christos Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <inttypes.h>
-#include <stddef.h>
-
-#ifdef __weak_alias
-__weak_alias(strtoimax, _strtoimax)
-#endif
-
-/*
- * Convert a string to an intmax_t.
- *
- * Ignores `locale' stuff. Assumes that the upper and lower case
- * alphabets and digits are each contiguous.
- */
-intmax_t
-_strtoimax(const char *nptr, char **endptr, int base)
-{
- const char *s;
- intmax_t acc, cutoff;
- int c;
- int neg, any, cutlim;
-
- _DIAGASSERT(nptr != NULL);
- /* endptr may be NULL */
-
-#ifdef __GNUC__
- /* This outrageous construct just to shut up a GCC warning. */
- (void) &acc; (void) &cutoff;
-#endif
-
- /*
- * Skip white space and pick up leading +/- sign if any.
- * If base is 0, allow 0x for hex and 0 for octal, else
- * assume decimal; if base is already 16, allow 0x.
- */
- s = nptr;
- do {
- c = (unsigned char) *s++;
- } while (isspace(c));
- if (c == '-') {
- neg = 1;
- c = *s++;
- } else {
- neg = 0;
- if (c == '+')
- c = *s++;
- }
- if ((base == 0 || base == 16) &&
- c == '0' && (*s == 'x' || *s == 'X')) {
- c = s[1];
- s += 2;
- base = 16;
- }
- if (base == 0)
- base = c == '0' ? 8 : 10;
-
- /*
- * Compute the cutoff value between legal numbers and illegal
- * numbers. That is the largest legal value, divided by the
- * base. An input number that is greater than this value, if
- * followed by a legal input character, is too big. One that
- * is equal to this value may be valid or not; the limit
- * between valid and invalid numbers is then based on the last
- * digit. For instance, if the range for intmax_t is
- * [-9223372036854775808..9223372036854775807] and the input base
- * is 10, cutoff will be set to 922337203685477580 and cutlim to
- * either 7 (neg==0) or 8 (neg==1), meaning that if we have
- * accumulated a value > 922337203685477580, or equal but the
- * next digit is > 7 (or 8), the number is too big, and we will
- * return a range error.
- *
- * Set any if any `digits' consumed; make it negative to indicate
- * overflow.
- */
- cutoff = neg ? INTMAX_MIN : INTMAX_MAX;
- cutlim = (int)(cutoff % base);
- cutoff /= base;
- if (neg) {
- if (cutlim > 0) {
- cutlim -= base;
- cutoff += 1;
- }
- cutlim = -cutlim;
- }
- for (acc = 0, any = 0;; c = (unsigned char) *s++) {
- if (isdigit(c))
- c -= '0';
- else if (isalpha(c))
- c -= isupper(c) ? 'A' - 10 : 'a' - 10;
- else
- break;
- if (c >= base)
- break;
- if (any < 0)
- continue;
- if (neg) {
- if (acc < cutoff || (acc == cutoff && c > cutlim)) {
- any = -1;
- acc = INTMAX_MIN;
- errno = ERANGE;
- } else {
- any = 1;
- acc *= base;
- acc -= c;
- }
- } else {
- if (acc > cutoff || (acc == cutoff && c > cutlim)) {
- any = -1;
- acc = INTMAX_MAX;
- errno = ERANGE;
- } else {
- any = 1;
- acc *= base;
- acc += c;
- }
- }
- }
- if (endptr != 0)
- *endptr = (char *)(any ? s - 1 : nptr);
- //*endptr = __UNCONST(any ? s - 1 : nptr);
- return (acc);
-}
diff --git a/StdLib/LibC/StdLib/strtoumax.c b/StdLib/LibC/StdLib/strtoumax.c
deleted file mode 100644
index 15658002a9..0000000000
--- a/StdLib/LibC/StdLib/strtoumax.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/* $NetBSD: strtoumax.c,v 1.1 2006/04/22 15:33:33 thorpej Exp $ */
-
-/*
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#if !defined(_KERNEL) && !defined(_STANDALONE)
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "from: @(#)strtoul.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: strtoumax.c,v 1.1 2006/04/22 15:33:33 thorpej Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <inttypes.h>
-#include <stddef.h>
-
-#include <Library/BaseLib.h>
-
-#ifdef __weak_alias
-__weak_alias(strtoumax, _strtoumax)
-#endif
-
-#else /* !_KERNEL && !_STANDALONE */
-#include <sys/param.h>
-#include <lib/libkern/libkern.h>
-#endif /* !_KERNEL && !_STANDALONE */
-
-/*
- * Convert a string to an uintmax_t.
- *
- * Ignores `locale' stuff. Assumes that the upper and lower case
- * alphabets and digits are each contiguous.
- */
-uintmax_t
-strtoumax(const char *nptr, char **endptr, int base)
-{
- const char *s;
- uintmax_t acc, cutoff;
- int c;
- int neg, any, cutlim;
-
- _DIAGASSERT(nptr != NULL);
- /* endptr may be NULL */
-
- /*
- * See strtol for comments as to the logic used.
- */
- s = nptr;
- do {
- c = (unsigned char) *s++;
- } while (isspace(c));
- if (c == '-') {
- neg = 1;
- c = *s++;
- } else {
- neg = 0;
- if (c == '+')
- c = *s++;
- }
- if ((base == 0 || base == 16) &&
- c == '0' && (*s == 'x' || *s == 'X')) {
- c = s[1];
- s += 2;
- base = 16;
- }
- if (base == 0)
- base = c == '0' ? 8 : 10;
-
- cutoff = DivU64x32 ((UINT64) UINTMAX_MAX, (UINT32) base);
- cutlim = (int) ModU64x32 ((UINT64) UINTMAX_MAX, (UINT32) base);
- for (acc = 0, any = 0;; c = (unsigned char) *s++) {
- if (isdigit(c))
- c -= '0';
- else if (isalpha(c)) {
-#if defined(_KERNEL) || defined(_STANDALONE)
- c = toupper(c) - 'A' + 10;
-#else
- c -= isupper(c) ? 'A' - 10 : 'a' - 10;
-#endif
- } else
- break;
- if (c >= base)
- break;
- if (any < 0)
- continue;
- if (acc > cutoff || (acc == cutoff && c > cutlim)) {
-#if defined(_KERNEL) || defined(_STANDALONE)
- if (endptr)
- *endptr = __UNCONST(nptr);
- return UINTMAX_MAX;
-#else
- any = -1;
- acc = UINTMAX_MAX;
- errno = ERANGE;
-#endif
- } else {
- any = 1;
- acc *= (uintmax_t)base;
- acc += c;
- }
- }
- if (neg && any > 0)
- acc = (uintmax_t)(-((intmax_t)acc));
- if (endptr != 0)
- *endptr = __UNCONST(any ? s - 1 : nptr);
- return (acc);
-}
diff --git a/StdLib/LibC/Stdio/Stdio.inf b/StdLib/LibC/Stdio/Stdio.inf
deleted file mode 100644
index a61a5584bf..0000000000
--- a/StdLib/LibC/Stdio/Stdio.inf
+++ /dev/null
@@ -1,147 +0,0 @@
-## @file
-# Standard C library: Implementation for <stdio.h>.
-#
-# Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LibStdio
- FILE_GUID = 7d2bd134-500d-4f42-aee2-26accfb6cb1d
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibStdio
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- clrerr.c #
- fclose.c #
- fdopen.c #
- feof.c #
- ferror.c #
- fflush.c #
- fgetc.c #
- fgetln.c #
- fgetpos.c #
- fgets.c #
- fopen.c #
- fprintf.c #
- fputc.c #
- fputs.c #
- fread.c #
- freopen.c #
- fscanf.c #
- fseek.c #
- fsetpos.c #
- ftell.c #
- fwrite.c #
- getc.c #
- getchar.c #
- gets.c #
- perror.c #
- printf.c #
- putc.c #
- putchar.c #
- puts.c #
- remove.c #
- rewind.c #
- scanf.c #
- setbuf.c #
- setvbuf.c #
- sprintf.c #
- sscanf.c #
- tempnam.c #
- tmpfile.c #
- tmpnam.c #
- ungetc.c #
- vfprintf.c #
- vfwprintf.c #
- vprintf.c #
- vsprintf.c #
-
- snprintf.c
- vsnprintf.c
- fparseln.c
-
- # Wide character functions
- fgetwc.c #
- fgetws.c #
- fputwc.c #
- fputws.c #
- fwide.c #
- fwprintf.c #
- fwscanf.c #
- getwc.c #
- getwchar.c #
- putwc.c #
- putwchar.c #
- swprintf.c #
- swscanf.c #
- ungetwc.c #
- vfwscanf.c #
- vswprintf.c #
- vswscanf.c #
- vwprintf.c #
- vwscanf.c #
- wprintf.c #
- wscanf.c #
-
-
- # Files internal to the implementation
- fgetstr.c #
- findfp.c #
- flags.c #
- fseeko.c #
- ftello.c #
- fvwrite.c #
- fwalk.c #
- gettemp.c #
- makebuf.c #
- mkstemp.c #
- mktemp.c #
- refill.c #
- rget.c #
- snprintf.c #
- stdio.c #
- vfscanf.c #
- wbuf.c #
- wsetup.c #
-
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
- ShellPkg/ShellPkg.dec
-
-[LibraryClasses]
- LibC
- LibCType
- LibGdtoa
- LibLocale
- LibStdLib
- LibString
- LibTime
- LibUefi
- LibWchar
-
-################################################################
-#
-# The Build Options, below, are only used when building the C library.
-# DO NOT use them when building your application!
-# Nasty things could happen if you do.
-#
-[BuildOptions]
- GCC:*_*_*_CC_FLAGS = -fno-builtin -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -Wno-format
diff --git a/StdLib/LibC/Stdio/clrerr.c b/StdLib/LibC/Stdio/clrerr.c
deleted file mode 100644
index 469dc8c96a..0000000000
--- a/StdLib/LibC/Stdio/clrerr.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/** @file
- Implementation of clearerr as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: clrerr.c,v 1.10 2003/08/07 16:43:21 agc Exp
- clrerr.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <stdio.h>
-#include <errno.h>
-#include "reentrant.h"
-#include "local.h"
-
-#undef clearerr
-
-void
-clearerr(FILE *fp)
-{
- _DIAGASSERT(fp != NULL);
- if(fp != NULL) {
- FLOCKFILE(fp);
- __sclearerr(fp);
- FUNLOCKFILE(fp);
- }
-}
diff --git a/StdLib/LibC/Stdio/fclose.c b/StdLib/LibC/Stdio/fclose.c
deleted file mode 100644
index 1ce28bcab4..0000000000
--- a/StdLib/LibC/Stdio/fclose.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/** @file
- Implementation of fclose as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: fclose.c,v 1.16 2003/08/07 16:43:22 agc Exp
- fclose.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include "reentrant.h"
-#include "local.h"
-
-int
-fclose(FILE *fp)
-{
- int r;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- if (fp->_flags == 0) { /* not open! */
- errno = EBADF;
- return (EOF);
- }
- FLOCKFILE(fp);
- WCIO_FREE(fp);
- r = fp->_flags & __SWR ? __sflush(fp) : 0;
- if (fp->_close != NULL && (*fp->_close)(fp->_cookie) < 0)
- r = EOF;
- if (fp->_flags & __SMBF)
- free((char *)fp->_bf._base);
- if (HASUB(fp))
- FREEUB(fp);
- if (HASLB(fp))
- FREELB(fp);
- FUNLOCKFILE(fp);
- fp->_file = -1;
- fp->_flags = 0; /* Release this FILE for reuse. */
- fp->_r = fp->_w = 0; /* Mess up if reaccessed. */
- return (r);
-}
diff --git a/StdLib/LibC/Stdio/fdopen.c b/StdLib/LibC/Stdio/fdopen.c
deleted file mode 100644
index 4c6902396e..0000000000
--- a/StdLib/LibC/Stdio/fdopen.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/** @file
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: fdopen.c,v 1.14 2003/08/07 16:43:22 agc Exp
- fdopen.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include "namespace.h"
-#include <sys/types.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include "reentrant.h"
-#include "local.h"
-
-#ifdef __weak_alias
-__weak_alias(fdopen,_fdopen)
-#endif
-
-FILE *
-fdopen(int fd, const char *mode)
-{
- FILE *fp;
- int flags, oflags, fdflags, tmp;
-
- _DIAGASSERT(fd != -1);
-
- if ((flags = __sflags(mode, &oflags)) == 0)
- return (NULL);
-
- /* Make sure the mode the user wants is a subset of the actual mode. */
- if ((fdflags = fcntl(fd, F_GETFL, 0)) < 0)
- return (NULL);
- tmp = fdflags & O_ACCMODE;
- if (tmp != O_RDWR && (tmp != (oflags & O_ACCMODE))) {
- errno = EINVAL;
- return (NULL);
- }
-
- if (oflags & O_NONBLOCK) {
- struct stat st;
- if (fstat(fd, &st) == -1) {
- return (NULL);
- }
- if (!S_ISREG(st.st_mode)) {
- errno = EFTYPE;
- return (NULL);
- }
- }
-
- if ((fp = __sfp()) == NULL)
- return (NULL);
- fp->_flags = (unsigned short)flags;
- /*
- * If opened for appending, but underlying descriptor does not have
- * O_APPEND bit set, assert __SAPP so that __swrite() will lseek to
- * end before each write.
- */
- if ((oflags & O_APPEND) && !(fdflags & O_APPEND))
- fp->_flags |= __SAPP;
- fp->_file = (short)fd;
- fp->_cookie = fp;
- fp->_read = __sread;
- fp->_write = __swrite;
- fp->_seek = __sseek;
- fp->_close = __sclose;
- return (fp);
-}
diff --git a/StdLib/LibC/Stdio/feof.c b/StdLib/LibC/Stdio/feof.c
deleted file mode 100644
index 7850e39268..0000000000
--- a/StdLib/LibC/Stdio/feof.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/** @file
- Implementation of a subroutine version of the macro feof,
- as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: feof.c,v 1.11 2003/08/07 16:43:22 agc Exp
- feof.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <stdio.h>
-#include <errno.h>
-#include "reentrant.h"
-#include "local.h"
-
-#undef feof
-
-int
-feof(FILE *fp)
-{
- int r;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- FLOCKFILE(fp);
- r = __sfeof(fp);
- FUNLOCKFILE(fp);
- return r;
-}
diff --git a/StdLib/LibC/Stdio/ferror.c b/StdLib/LibC/Stdio/ferror.c
deleted file mode 100644
index 4a3996fadd..0000000000
--- a/StdLib/LibC/Stdio/ferror.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/** @file
- Implementation of a subroutine version of the macro ferror,
- as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: ferror.c,v 1.11 2003/08/07 16:43:22 agc Exp
- ferror.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <stdio.h>
-#include <errno.h>
-#include "reentrant.h"
-#include "local.h"
-
-#undef ferror
-
-int
-ferror(FILE *fp)
-{
- int r;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- FLOCKFILE(fp);
- r = __sferror(fp);
- FUNLOCKFILE(fp);
- return r;
-}
diff --git a/StdLib/LibC/Stdio/fflush.c b/StdLib/LibC/Stdio/fflush.c
deleted file mode 100644
index 5a4d62468e..0000000000
--- a/StdLib/LibC/Stdio/fflush.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/** @file
- Implementation of fflush as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: fflush.c,v 1.15 2003/08/07 16:43:22 agc Exp
- fflush.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-#ifdef _REENTRANT
-extern rwlock_t __sfp_lock;
-#endif
-
-/* Flush a single file, or (if fp is NULL) all files. */
-int
-fflush(FILE *fp)
-{
- int r;
-
- if (fp == NULL) {
- rwlock_rdlock(&__sfp_lock);
- r = _fwalk(__sflush);
- rwlock_unlock(&__sfp_lock);
- return r;
- }
-
- FLOCKFILE(fp);
- if ((fp->_flags & (__SWR | __SRW)) == 0) {
- errno = EBADF;
- r = EOF;
- } else {
- r = __sflush(fp);
- }
- FUNLOCKFILE(fp);
- return r;
-}
-
-int
-__sflush(FILE *fp)
-{
- unsigned char *p;
- INT64 n;
- int t;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- t = fp->_flags;
- if ((t & __SWR) == 0)
- return (0);
-
- if ((p = fp->_bf._base) == NULL)
- return (0);
-
- n = fp->_p - p; /* write this much */
-
- /*
- * Set these immediately to avoid problems with longjmp and to allow
- * exchange buffering (via setvbuf) in user write function.
- */
- fp->_p = p;
- fp->_w = t & (__SLBF|__SNBF) ? 0 : fp->_bf._size;
-
- for (; n > 0; n -= t, p += t) {
- t = (*fp->_write)(fp->_cookie, (char *)p, (int)n);
- if (t <= 0) {
- fp->_flags |= __SERR;
- return (EOF);
- }
- }
- return (0);
-}
diff --git a/StdLib/LibC/Stdio/fgetc.c b/StdLib/LibC/Stdio/fgetc.c
deleted file mode 100644
index aee896fea5..0000000000
--- a/StdLib/LibC/Stdio/fgetc.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/** @file
- Implementation of fgetc as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: fgetc.c,v 1.11 2003/08/07 16:43:22 agc Exp
- fgetc.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-int
-fgetc(FILE *fp)
-{
- int r;
-
- _DIAGASSERT(fp != NULL);
-
- if(fp != NULL) {
- FLOCKFILE(fp);
- r = __sgetc(fp);
- FUNLOCKFILE(fp);
- }
- else {
- r = EOF;
- errno = ENOSTR;
- }
- return r;
-}
diff --git a/StdLib/LibC/Stdio/fgetln.c b/StdLib/LibC/Stdio/fgetln.c
deleted file mode 100644
index b18c7b66c0..0000000000
--- a/StdLib/LibC/Stdio/fgetln.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* $NetBSD: fgetln.c,v 1.14 2004/05/10 16:47:11 drochner Exp $ */
-
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)fgetline.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: fgetln.c,v 1.14 2004/05/10 16:47:11 drochner Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <stdio.h>
-
-#include "reentrant.h"
-#include "local.h"
-
-#ifdef __weak_alias
-__weak_alias(fgetln,_fgetln)
-#endif
-
-/*
- * Get an input line. The returned pointer often (but not always)
- * points into a stdio buffer. Fgetline does not alter the text of
- * the returned line (which is thus not a C string because it will
- * not necessarily end with '\0'), but does allow callers to modify
- * it if they wish. Thus, we set __SMOD in case the caller does.
- */
-char *
-fgetln(FILE *fp, size_t *lenp)
-{
- char *cp;
-
- FLOCKFILE(fp);
- cp = __fgetstr(fp, lenp, '\n');
- FUNLOCKFILE(fp);
- return cp;
-}
diff --git a/StdLib/LibC/Stdio/fgetpos.c b/StdLib/LibC/Stdio/fgetpos.c
deleted file mode 100644
index 8dd0fd68a2..0000000000
--- a/StdLib/LibC/Stdio/fgetpos.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/** @file
- Implementation of fgetpos as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: fgetpos.c,v 1.11 2003/08/07 16:43:23 agc Exp
- fgetpos.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include "namespace.h"
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-
-int
-fgetpos(FILE *fp, fpos_t *pos)
-{
- _DIAGASSERT(fp != NULL);
- _DIAGASSERT(pos != NULL);
-
- if((fp == NULL) || (pos == NULL)) {
- errno = EINVAL;
- return (EOF);
- }
-
- return((*pos = (off_t)ftello(fp)) == (off_t)-1);
-}
diff --git a/StdLib/LibC/Stdio/fgets.c b/StdLib/LibC/Stdio/fgets.c
deleted file mode 100644
index cb07154ada..0000000000
--- a/StdLib/LibC/Stdio/fgets.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/** @file
- Implementation of fgets as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: fgets.c,v 1.20 2003/12/14 23:56:28 lukem Exp
- fgets.c 8.2 (Berkeley) 12/22/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include "reentrant.h"
-#include "local.h"
-
-/*
- * Read at most n-1 characters from the given file.
- * Stop when a newline has been read, or the count runs out.
- * Return first argument, or NULL if no characters were read.
- */
-char *
-fgets(char *buf, int n, FILE *fp)
-{
- size_t len;
- char *s;
- unsigned char *p, *t;
-
- _DIAGASSERT(buf != NULL);
- _DIAGASSERT(fp != NULL);
- if ((fp == NULL) || (n <= 0)) { /* sanity check */
- errno = EINVAL;
- return (NULL);
- }
-
- FLOCKFILE(fp);
- _SET_ORIENTATION(fp, -1);
- s = buf;
- n--; /* leave space for NUL */
- while (n != 0) {
- /*
- * If the buffer is empty, refill it.
- */
- if (fp->_r <= 0) {
- if (__srefill(fp)) {
- /* EOF/error: stop with partial or no line */
- if (s == buf) {
- FUNLOCKFILE(fp);
- return (NULL);
- }
- break;
- }
- }
- len = fp->_r;
- p = fp->_p;
-
- /*
- * Scan through at most n bytes of the current buffer,
- * looking for '\n'. If found, copy up to and including
- * newline, and stop. Otherwise, copy entire chunk
- * and loop.
- */
- if (len > (size_t)n)
- len = n;
- t = memchr((void *)p, '\n', len);
- if (t != NULL) {
- len = ++t - p;
- fp->_r -= (int)len;
- fp->_p = t;
- (void)memcpy((void *)s, (void *)p, len);
- s[len] = 0;
- FUNLOCKFILE(fp);
- return (buf);
- }
- fp->_r -= (int)len;
- fp->_p += len;
- (void)memcpy((void *)s, (void *)p, len);
- s += len;
- n -= (int)len;
- }
- *s = 0;
- FUNLOCKFILE(fp);
- return (buf);
-}
diff --git a/StdLib/LibC/Stdio/fgetstr.c b/StdLib/LibC/Stdio/fgetstr.c
deleted file mode 100644
index 9e898f3263..0000000000
--- a/StdLib/LibC/Stdio/fgetstr.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- $NetBSD: fgetstr.c,v 1.4 2006/11/24 19:46:58 christos Exp $
- fgetline.c 8.1 (Berkeley) 6/4/93
-*/
-
-/*-
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include "namespace.h"
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "reentrant.h"
-#include "local.h"
-
-/*
- * Expand the line buffer. Return -1 on error.
-#ifdef notdef
- * The `new size' does not account for a terminating '\0',
- * so we add 1 here.
-#endif
- */
-int
-__slbexpand(FILE *fp, size_t newsize)
-{
- void *p;
-
-#ifdef notdef
- ++newsize;
-#endif
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (-1);
- }
-
- if ((size_t)fp->_lb._size >= newsize)
- return (0);
- if ((p = realloc(fp->_lb._base, newsize)) == NULL)
- return (-1);
- fp->_lb._base = p;
- fp->_lb._size = (int)newsize;
- return (0);
-}
-
-/*
- * Get an input line. The returned pointer often (but not always)
- * points into a stdio buffer. Fgetline does not alter the text of
- * the returned line (which is thus not a C string because it will
- * not necessarily end with '\0'), but does allow callers to modify
- * it if they wish. Thus, we set __SMOD in case the caller does.
- */
-char *
-__fgetstr(FILE *fp, size_t *lenp, int sep)
-{
- unsigned char *p;
- size_t len;
- size_t off;
-
- _DIAGASSERT(fp != NULL);
- _DIAGASSERT(lenp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (NULL);
- }
-
- /* make sure there is input */
- if (fp->_r <= 0 && __srefill(fp)) {
- *lenp = 0;
- return (NULL);
- }
-
- /* look for a newline in the input */
- if ((p = memchr((void *)fp->_p, sep, (size_t)fp->_r)) != NULL) {
- char *ret;
-
- /*
- * Found one. Flag buffer as modified to keep fseek from
- * `optimising' a backward seek, in case the user stomps on
- * the text.
- */
- p++; /* advance over it */
- ret = (char *)fp->_p;
- *lenp = len = p - fp->_p;
- fp->_flags |= __SMOD;
- fp->_r -= (int)len;
- fp->_p = p;
- return (ret);
- }
-
- /*
- * We have to copy the current buffered data to the line buffer.
- * As a bonus, though, we can leave off the __SMOD.
- *
- * OPTIMISTIC is length that we (optimistically) expect will
- * accommodate the `rest' of the string, on each trip through the
- * loop below.
- */
-#define OPTIMISTIC 80
-
- for (len = fp->_r, off = 0;; len += fp->_r) {
- size_t diff;
-
- /*
- * Make sure there is room for more bytes. Copy data from
- * file buffer to line buffer, refill file and look for
- * newline. The loop stops only when we find a newline.
- */
- if (__slbexpand(fp, len + OPTIMISTIC))
- goto error;
- (void)memcpy((void *)(fp->_lb._base + off), (void *)fp->_p,
- len - off);
- off = len;
- if (__srefill(fp))
- break; /* EOF or error: return partial line */
- if ((p = memchr((void *)fp->_p, sep, (size_t)fp->_r)) == NULL)
- continue;
-
- /* got it: finish up the line (like code above) */
- p++;
- diff = p - fp->_p;
- len += diff;
- if (__slbexpand(fp, len))
- goto error;
- (void)memcpy((void *)(fp->_lb._base + off), (void *)fp->_p,
- diff);
- fp->_r -= (int)diff;
- fp->_p = p;
- break;
- }
- *lenp = len;
-#ifdef notdef
- fp->_lb._base[len] = 0;
-#endif
- return ((char *)fp->_lb._base);
-
-error:
- *lenp = 0; /* ??? */
- return (NULL); /* ??? */
-}
diff --git a/StdLib/LibC/Stdio/fgetwc.c b/StdLib/LibC/Stdio/fgetwc.c
deleted file mode 100644
index f2159d7e41..0000000000
--- a/StdLib/LibC/Stdio/fgetwc.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c)2001 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Citrus$
-
- NetBSD: fgetwc.c,v 1.5 2006/07/03 17:06:36 tnozaki Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <wchar.h>
-#include "reentrant.h"
-#include "local.h"
-
-wint_t
-__fgetwc_unlock(FILE *fp)
-{
- struct wchar_io_data *wcio;
- mbstate_t *st;
- wchar_t wc;
- size_t size;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = ENOSTR;
- return WEOF;
- }
-
- _SET_ORIENTATION(fp, 1);
- wcio = WCIO_GET(fp);
- if (wcio == 0) {
- errno = ENOMEM;
- return WEOF;
- }
-
- /* if there're ungetwc'ed wchars, use them */
- if (wcio->wcio_ungetwc_inbuf) {
- wc = wcio->wcio_ungetwc_buf[--wcio->wcio_ungetwc_inbuf];
-
- return wc;
- }
-
- st = &wcio->wcio_mbstate_in;
-
- do {
- char c;
- int ch = __sgetc(fp);
-
- if (ch == EOF) {
- return WEOF;
- }
-
- c = (char)ch;
- size = mbrtowc(&wc, &c, 1, st);
- if (size == (size_t)-1) {
- errno = EILSEQ;
- fp->_flags |= __SERR;
- return WEOF;
- }
- } while (size == (size_t)-2);
-
- _DIAGASSERT(size == 1);
-
- return wc;
-}
-
-wint_t
-fgetwc(FILE *fp)
-{
- wint_t r;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (WEOF);
- }
-
- FLOCKFILE(fp);
- r = __fgetwc_unlock(fp);
- FUNLOCKFILE(fp);
-
- return (r);
-}
diff --git a/StdLib/LibC/Stdio/fgetws.c b/StdLib/LibC/Stdio/fgetws.c
deleted file mode 100644
index 44a885ac54..0000000000
--- a/StdLib/LibC/Stdio/fgetws.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 2002 Tim J. Robbins.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * Original version ID:
- * FreeBSD: src/lib/libc/stdio/fgetws.c,v 1.4 2002/09/20 13:25:40 tjr Exp
-
- $NetBSD: fgetws.c,v 1.2 2006/07/03 17:06:36 tnozaki Exp $
-*/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <wchar.h>
-#include "reentrant.h"
-#include "local.h"
-
-wchar_t *
-fgetws(
- wchar_t * __restrict ws,
- int n,
- FILE * __restrict fp
- )
-{
- wchar_t *wsp;
- wint_t wc;
-
- _DIAGASSERT(fp != NULL);
- _DIAGASSERT(ws != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (NULL);
- }
-
- FLOCKFILE(fp);
- _SET_ORIENTATION(fp, 1);
-
- if (n <= 0) {
- errno = EINVAL;
- goto error;
- }
-
- wsp = ws;
- while (n-- > 1) {
- wc = __fgetwc_unlock(fp);
- if (__sferror(fp) != 0)
- goto error;
- if (__sfeof(fp) != 0) {
- if (wsp == ws) {
- /* EOF/error, no characters read yet. */
- goto error;
- }
- break;
- }
- *wsp++ = (wchar_t)wc;
- if (wc == L'\n') {
- break;
- }
- }
-
- *wsp++ = L'\0';
- FUNLOCKFILE(fp);
-
- return (ws);
-
-error:
- FUNLOCKFILE(fp);
- return (NULL);
-}
diff --git a/StdLib/LibC/Stdio/fileext.h b/StdLib/LibC/Stdio/fileext.h
deleted file mode 100644
index 0ad78468b9..0000000000
--- a/StdLib/LibC/Stdio/fileext.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* $NetBSD: fileext.h,v 1.5 2003/07/18 21:46:41 nathanw Exp $ */
-
-/*-
- * Copyright (c)2001 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Citrus$
- */
-
-/*
- * file extension
- */
-struct __sfileext {
- struct __sbuf _ub; /* ungetc buffer */
- struct wchar_io_data _wcio; /* wide char i/o status */
-#ifdef _REENTRANT
- mutex_t _lock; /* Lock for FLOCKFILE/FUNLOCKFILE */
- cond_t _lockcond; /* Condition variable for signalling lock releases */
- thr_t _lockowner; /* The thread currently holding the lock */
- int _lockcount; /* Count of recursive locks */
- int _lockinternal; /* Flag of whether the lock is held inside stdio */
- int _lockcancelstate; /* Stashed cancellation state on internal lock */
-#endif
-};
-
-#define _EXT(fp) ((struct __sfileext *)(void *)((fp)->_ext._base))
-#define _UB(fp) _EXT(fp)->_ub
-#ifdef _REENTRANT
-#define _LOCK(fp) (_EXT(fp)->_lock)
-#define _LOCKCOND(fp) (_EXT(fp)->_lockcond)
-#define _LOCKOWNER(fp) (_EXT(fp)->_lockowner)
-#define _LOCKCOUNT(fp) (_EXT(fp)->_lockcount)
-#define _LOCKINTERNAL(fp) (_EXT(fp)->_lockinternal)
-#define _LOCKCANCELSTATE(fp) (_EXT(fp)->_lockcancelstate)
-#define _FILEEXT_SETUP(f, fext) do { \
- /* LINTED */(f)->_ext._base = (unsigned char *)(fext); \
- mutex_init(&_LOCK(f), NULL); \
- cond_init(&_LOCKCOND(f), 0, NULL); \
- _LOCKOWNER(f) = NULL; \
- _LOCKCOUNT(f) = 0; \
- _LOCKINTERNAL(f) = 0; \
- } while (/* LINTED */ 0)
-#else
-#define _FILEEXT_SETUP(f, fext) /* LINTED */(f)->_ext._base = (unsigned char *)(fext)
-#endif
diff --git a/StdLib/LibC/Stdio/fileno.c b/StdLib/LibC/Stdio/fileno.c
deleted file mode 100644
index 779cbd8682..0000000000
--- a/StdLib/LibC/Stdio/fileno.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: fileno.c,v 1.12 2004/05/09 17:27:53 kleink Exp
- fileno.c 8.1 (Berkeley) 6/4/93
-*/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include "namespace.h"
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-/*
- * A subroutine version of the macro fileno.
- */
-#undef fileno
-int _fileno __P((FILE *)); /* XXX */
-
-__weak_alias(fileno,_fileno)
-
-int
-_fileno(fp)
- FILE *fp;
-{
- int r;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- FLOCKFILE(fp);
- r = __sfileno(fp);
- FUNLOCKFILE(fp);
- return r;
-}
diff --git a/StdLib/LibC/Stdio/findfp.c b/StdLib/LibC/Stdio/findfp.c
deleted file mode 100644
index bc8bfe3d29..0000000000
--- a/StdLib/LibC/Stdio/findfp.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/** @file
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: findfp.c,v 1.23 2006/10/07 21:40:46 thorpej Exp
- findfp.c 8.2 (Berkeley) 1/4/94
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include "namespace.h"
-#include <sys/param.h>
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include "reentrant.h"
-#include "local.h"
-#include "glue.h"
-#include <MainData.h>
-
-int __sdidinit;
-
-#define NDYNAMIC 10 /* add ten more whenever necessary */
-
-#define std(flags, file) \
-/* p r w flags file bf lfbsize cookie close */ \
- { NULL, 0, 0, flags, file, { NULL, 0 }, 0, __sF + file, __sclose, \
-/* read seek write ext up */ \
- __sread, __sseek, __swrite, { (void *)(__sFext + file), 0 }, NULL, \
-/* ur ubuf, nbuf lb blksize offset */ \
- 0, { '\0', '\0', '\0' }, { '\0' }, { NULL, 0 }, 0, (fpos_t)0 }
-
- /* the usual - (stdin + stdout + stderr) */
-static FILE usual[FOPEN_MAX - 3];
-static struct __sfileext usualext[FOPEN_MAX - 3];
-static struct glue uglue = { 0, FOPEN_MAX - 3, usual };
-
-#if defined(_REENTRANT) && !defined(__lint__) /* XXX lint is busted */
-#define STDEXT { ._lock = MUTEX_INITIALIZER, ._lockcond = COND_INITIALIZER }
-struct __sfileext __sFext[3] = { STDEXT,
- STDEXT,
- STDEXT};
-#else
-struct __sfileext __sFext[3];
-#endif
-
-FILE __sF[3] = {
- std(__SRD, STDIN_FILENO), /* stdin */
- std(__SWR, STDOUT_FILENO), /* stdout */
- std(__SWR|__SNBF, STDERR_FILENO) /* stderr */
-};
-struct glue __sglue = { &uglue, 3, __sF };
-
-static struct glue *moreglue(int);
-void f_prealloc(void);
-
-#ifdef _REENTRANT
-rwlock_t __sfp_lock = RWLOCK_INITIALIZER;
-#endif
-
-static struct glue *
-moreglue(int n)
-{
- struct glue *g;
- FILE *p;
- struct __sfileext *pext;
- static FILE empty;
-
- g = (struct glue *)malloc(sizeof(*g) + ALIGNBYTES + n * sizeof(FILE)
- + n * sizeof(struct __sfileext));
- if (g == NULL)
- return (NULL);
- p = (FILE *)ALIGN((g + 1));
- g->next = NULL;
- g->niobs = n;
- g->iobs = p;
- pext = (void *)(p + n);
- while (--n >= 0) {
- *p = empty;
- _FILEEXT_SETUP(p, pext);
- p++;
- pext++;
- }
- return (g);
-}
-
-/*
- * Find a free FILE for fopen et al.
- */
-FILE *
-__sfp()
-{
- FILE *fp;
- int n;
- struct glue *g;
-
- if (!__sdidinit)
- __sinit();
-
- rwlock_wrlock(&__sfp_lock);
- for (g = &__sglue;; g = g->next) {
- for (fp = g->iobs, n = g->niobs; --n >= 0; fp++)
- if (fp->_flags == 0)
- goto found;
- if (g->next == NULL && (g->next = moreglue(NDYNAMIC)) == NULL)
- break;
- }
- rwlock_unlock(&__sfp_lock);
- return (NULL);
-found:
- fp->_flags = 1; /* reserve this slot; caller sets real flags */
- fp->_p = NULL; /* no current pointer */
- fp->_w = 0; /* nothing to read or write */
- fp->_r = 0;
- fp->_bf._base = NULL; /* no buffer */
- fp->_bf._size = 0;
- fp->_lbfsize = 0; /* not line buffered */
- fp->_file = -1; /* no file */
-/* fp->_cookie = <any>; */ /* caller sets cookie, _read/_write etc */
- _UB(fp)._base = NULL; /* no ungetc buffer */
- _UB(fp)._size = 0;
- fp->_lb._base = NULL; /* no line buffer */
- fp->_lb._size = 0;
- memset(WCIO_GET(fp), 0, sizeof(struct wchar_io_data));
- rwlock_unlock(&__sfp_lock);
- return (fp);
-}
-
-#if 0
-/*
- * XXX. Force immediate allocation of internal memory. Not used by stdio,
- * but documented historically for certain applications. Bad applications.
- */
-void
-f_prealloc()
-{
- struct glue *g;
- int n;
-
- n = (int)sysconf(_SC_OPEN_MAX) - FOPEN_MAX + 20; /* 20 for slop. */
- for (g = &__sglue; (n -= g->niobs) > 0 && g->next; g = g->next)
- /* void */;
- if (n > 0)
- g->next = moreglue(n);
-}
-#endif
-
-/*
- * exit() calls _cleanup() through *gMD->cleanup, set whenever we
- * open or buffer a file. This chicanery is done so that programs
- * that do not use stdio need not link it all in.
- *
- * The name `_cleanup' is, alas, fairly well known outside stdio.
- */
-void
-_cleanup( void )
-{
- /* (void) _fwalk(fclose); */
- (void) fflush(NULL); /* `cheating' */
-}
-
-/*
- * __sinit() is called whenever stdio's internal variables must be set up.
- */
-void
-__sinit( void )
-{
- int i;
-
- for (i = 0; i < FOPEN_MAX - 3; i++)
- _FILEEXT_SETUP(&usual[i], &usualext[i]);
-
- /* make sure we clean up on exit */
- gMD->cleanup = _cleanup; /* conservative */
- __sdidinit = 1;
-}
diff --git a/StdLib/LibC/Stdio/flags.c b/StdLib/LibC/Stdio/flags.c
deleted file mode 100644
index 59ce8e30d6..0000000000
--- a/StdLib/LibC/Stdio/flags.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/** @file
- Implementation of internal function to return the (stdio) flags for a given mode.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: flags.c,v 1.14 2003/08/07 16:43:23 agc Exp
- flags.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <sys/types.h>
-#include <assert.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <errno.h>
-#include "reentrant.h"
-#include "local.h"
-
-/*
- * Return the (stdio) flags for a given mode. Store the flags
- * to be passed to an open() syscall through *optr.
- * Return 0 on error.
- */
-int
-__sflags(const char *mode, int *optr)
-{
- int ret, m, o;
-
- _DIAGASSERT(mode != NULL);
-
- switch (*mode++) {
-
- case 'r': /* open for reading */
- ret = __SRD;
- m = O_RDONLY;
- o = 0;
- break;
-
- case 'w': /* open for writing */
- ret = __SWR;
- m = O_WRONLY;
- o = O_CREAT | O_TRUNC;
- break;
-
- case 'a': /* open for appending */
- ret = __SWR;
- m = O_WRONLY;
- o = O_CREAT | O_APPEND;
- break;
-
- default: /* illegal mode */
- errno = EINVAL;
- return (0);
- }
-
- /*
- * [rwa]\+ or [rwa]b\+ means read and write
- * f means open only plain files.
- */
- for (; *mode; mode++)
- switch (*mode) {
- case '+':
- ret = __SRW;
- m = O_RDWR;
- break;
- case 'f':
- o |= O_NONBLOCK;
- break;
- case 'b':
- break;
- default: /* We could produce a warning here */
- break;
- }
-
- *optr = m | o;
- return (ret);
-}
diff --git a/StdLib/LibC/Stdio/floatio.h b/StdLib/LibC/Stdio/floatio.h
deleted file mode 100644
index 1cb0bad181..0000000000
--- a/StdLib/LibC/Stdio/floatio.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* $NetBSD: floatio.h,v 1.5 2005/05/14 23:51:02 christos Exp $ */
-
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)floatio.h 8.1 (Berkeley) 6/4/93
- */
-
-/*
- * Floating point scanf/printf (input/output) definitions.
- */
-
-/* 11-bit exponent (VAX G floating point) is 308 decimal digits */
-#define MAXEXP 308
-/* 128 bit fraction takes up 39 decimal digits; max reasonable precision */
-#define MAXFRACT 39
-/*
- * MAXEXPDIG is the maximum number of decimal digits needed to store a
- * floating point exponent in the largest supported format. It should
- * be ceil(log10(LDBL_MAX_10_EXP)) or, if hexadecimal floating point
- * conversions are supported, ceil(log10(LDBL_MAX_EXP)). But since it
- * is presently never greater than 5 in practice, we fudge it.
- */
-#define MAXEXPDIG 6
-#if LDBL_MAX_EXP > 999999
-#error "floating point buffers too small"
-#endif
diff --git a/StdLib/LibC/Stdio/flockfile.c b/StdLib/LibC/Stdio/flockfile.c
deleted file mode 100644
index 386164e89f..0000000000
--- a/StdLib/LibC/Stdio/flockfile.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/* $NetBSD: flockfile.c,v 1.8 2003/07/22 00:56:25 nathanw Exp $ */
-
-/*-
- * Copyright (c) 2002 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Nathan J. Williams.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: flockfile.c,v 1.8 2003/07/22 00:56:25 nathanw Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include "reentrant.h"
-#include "local.h"
-
-#ifdef __weak_alias
-__weak_alias(flockfile,_flockfile)
-__weak_alias(ftrylockfile,_ftrylockfile)
-__weak_alias(funlockfile,_funlockfile)
-#endif
-
-#ifdef _REENTRANT
-/*
- * XXX This code makes the assumption that a thr_t (pthread_t) is a
- * XXX pointer.
- */
-
-extern int __isthreaded;
-
-void
-flockfile(FILE *fp)
-{
-
- __flockfile_internal(fp, 0);
-}
-
-int
-ftrylockfile(FILE *fp)
-{
- int retval;
-
- if (__isthreaded == 0)
- return 0;
-
- retval = 0;
- mutex_lock(&_LOCK(fp));
-
- if (_LOCKOWNER(fp) == thr_self()) {
- _LOCKCOUNT(fp)++;
- } else if (_LOCKOWNER(fp) == NULL) {
- _LOCKOWNER(fp) = thr_self();
- _LOCKCOUNT(fp) = 1;
- } else
- retval = -1;
-
- mutex_unlock(&_LOCK(fp));
-
- return retval;
-}
-
-void
-funlockfile(FILE *fp)
-{
-
- __funlockfile_internal(fp, 0);
-}
-
-void
-__flockfile_internal(FILE *fp, int internal)
-{
-
- if (__isthreaded == 0)
- return;
-
- mutex_lock(&_LOCK(fp));
-
- if (_LOCKOWNER(fp) == thr_self()) {
- _LOCKCOUNT(fp)++;
- if (internal)
- _LOCKINTERNAL(fp)++;
- } else {
- /* danger! cond_wait() is a cancellation point. */
- int oldstate;
- thr_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldstate);
- while (_LOCKOWNER(fp) != NULL)
- cond_wait(&_LOCKCOND(fp), &_LOCK(fp));
- thr_setcancelstate(oldstate, NULL);
- _LOCKOWNER(fp) = thr_self();
- _LOCKCOUNT(fp) = 1;
- if (internal)
- _LOCKINTERNAL(fp) = 1;
- }
-
- if (_LOCKINTERNAL(fp) == 1)
- /* stash cancellation state and disable */
- thr_setcancelstate(PTHREAD_CANCEL_DISABLE,
- &_LOCKCANCELSTATE(fp));
-
- mutex_unlock(&_LOCK(fp));
-}
-
-void
-__funlockfile_internal(FILE *fp, int internal)
-{
-
- if (__isthreaded == 0)
- return;
-
- mutex_lock(&_LOCK(fp));
-
- if (internal) {
- _LOCKINTERNAL(fp)--;
- if (_LOCKINTERNAL(fp) == 0)
- thr_setcancelstate(_LOCKCANCELSTATE(fp), NULL);
- }
-
- _LOCKCOUNT(fp)--;
- if (_LOCKCOUNT(fp) == 0) {
- _LOCKOWNER(fp) = NULL;
- cond_signal(&_LOCKCOND(fp));
- }
-
- mutex_unlock(&_LOCK(fp));
-}
-
-#else /* _REENTRANT */
-
-void
-flockfile(FILE *fp)
-{
- /* LINTED deliberate lack of effect */
- (void)fp;
-
- return;
-}
-
-int
-ftrylockfile(FILE *fp)
-{
- /* LINTED deliberate lack of effect */
- (void)fp;
-
- return (0);
-}
-
-void
-funlockfile(FILE *fp)
-{
- /* LINTED deliberate lack of effect */
- (void)fp;
-
- return;
-}
-
-#endif /* _REENTRANT */
diff --git a/StdLib/LibC/Stdio/fopen.c b/StdLib/LibC/Stdio/fopen.c
deleted file mode 100644
index 9fc0f6dd4c..0000000000
--- a/StdLib/LibC/Stdio/fopen.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/** @file
- Implementation of fopen as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: fopen.c,v 1.12 2003/08/07 16:43:24 agc Exp
- fopen.c 8.1 (Berkeley) 6/4/93"
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <assert.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include "reentrant.h"
-#include "local.h"
-
-FILE *
-fopen(const char *file, const char *mode)
-{
- FILE *fp;
- int f;
- int flags, oflags;
-
- _DIAGASSERT(file != NULL);
- if ((flags = __sflags(mode, &oflags)) == 0)
- return (NULL);
- if ((fp = __sfp()) == NULL)
- return (NULL);
- if ((f = open(file, oflags, DEFFILEMODE)) < 0)
- goto release;
- if (oflags & O_NONBLOCK) {
- struct stat st;
- if (fstat(f, &st) == -1) {
- int sverrno = errno;
- (void)close(f);
- errno = sverrno;
- goto release;
- }
- if (!S_ISREG(st.st_mode)) {
- (void)close(f);
- errno = EFTYPE;
- goto release;
- }
- }
- fp->_file = (short)f;
- fp->_flags = (unsigned short)flags;
- fp->_cookie = fp;
- fp->_read = __sread;
- fp->_write = __swrite;
- fp->_seek = __sseek;
- fp->_close = __sclose;
-
- /*
- * When opening in append mode, even though we use O_APPEND,
- * we need to seek to the end so that ftell() gets the right
- * answer. If the user then alters the seek pointer, or
- * the file extends, this will fail, but there is not much
- * we can do about this. (We could set __SAPP and check in
- * fseek and ftell.)
- */
- if (oflags & O_APPEND)
- (void) __sseek((void *)fp, (fpos_t)0, SEEK_END);
- return (fp);
-release:
- fp->_flags = 0; /* release */
- return (NULL);
-}
diff --git a/StdLib/LibC/Stdio/fparseln.c b/StdLib/LibC/Stdio/fparseln.c
deleted file mode 100644
index be1a42fb6b..0000000000
--- a/StdLib/LibC/Stdio/fparseln.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1997 Christos Zoulas. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Christos Zoulas.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: fparseln.c,v 1.5 2004/06/20 22:20:15 jmc Exp
-*/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include "namespace.h"
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#ifdef __weak_alias
-__weak_alias(fparseln,_fparseln)
-#endif
-
-#if ! HAVE_FPARSELN
-
-#ifndef HAVE_NBTOOL_CONFIG_H
-#include "reentrant.h"
-#include "local.h"
-#else
-#define FLOCKFILE(fp)
-#define FUNLOCKFILE(fp)
-#endif
-
-#if defined(_REENTRANT) && !HAVE_NBTOOL_CONFIG_H
-#define __fgetln(f, l) __fgetstr(f, l, '\n')
-#else
-#define __fgetln(f, l) fgetln(f, l)
-#endif
-
-static int isescaped(const char *, const char *, int);
-
-/* isescaped():
- * Return true if the character in *p that belongs to a string
- * that starts in *sp, is escaped by the escape character esc.
- */
-static int
-isescaped(const char *sp, const char *p, int esc)
-{
- const char *cp;
- size_t ne;
-
- _DIAGASSERT(sp != NULL);
- _DIAGASSERT(p != NULL);
-
- /* No escape character */
- if (esc == '\0')
- return 1;
-
- /* Count the number of escape characters that precede ours */
- for (ne = 0, cp = p; --cp >= sp && *cp == esc; ne++)
- continue;
-
- /* Return true if odd number of escape characters */
- return (ne & 1) != 0;
-}
-
-
-/* fparseln():
- * Read a line from a file parsing continuations ending in \
- * and eliminating trailing newlines, or comments starting with
- * the comment char.
- */
-char *
-fparseln(FILE *fp, size_t *size, size_t *lineno, const char str[3], int flags)
-{
- static const char dstr[3] = { '\\', '\\', '#' };
-
- size_t s, len;
- char *buf;
- char *ptr, *cp;
- int cnt;
- char esc, con, nl, com;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (NULL);
- }
-
- len = 0;
- buf = NULL;
- cnt = 1;
-
- if (str == NULL)
- str = dstr;
-
- esc = str[0];
- con = str[1];
- com = str[2];
- /*
- * XXX: it would be cool to be able to specify the newline character,
- * but unfortunately, fgetln does not let us
- */
- nl = '\n';
-
- FLOCKFILE(fp);
-
- while (cnt) {
- cnt = 0;
-
- if (lineno)
- (*lineno)++;
-
- if ((ptr = __fgetln(fp, &s)) == NULL)
- break;
-
- if (s && com) { /* Check and eliminate comments */
- for (cp = ptr; cp < ptr + s; cp++)
- if (*cp == com && !isescaped(ptr, cp, esc)) {
- s = cp - ptr;
- cnt = s == 0 && buf == NULL;
- break;
- }
- }
-
- if (s && nl) { /* Check and eliminate newlines */
- cp = &ptr[s - 1];
-
- if (*cp == nl)
- s--; /* forget newline */
- }
-
- if (s && con) { /* Check and eliminate continuations */
- cp = &ptr[s - 1];
-
- if (*cp == con && !isescaped(ptr, cp, esc)) {
- s--; /* forget escape */
- cnt = 1;
- }
- }
-
- if (s == 0 && buf != NULL)
- continue;
-
- if ((cp = realloc(buf, len + s + 1)) == NULL) {
- FUNLOCKFILE(fp);
- free(buf);
- return NULL;
- }
- buf = cp;
-
- (void) memcpy(buf + len, ptr, s);
- len += s;
- buf[len] = '\0';
- }
-
- FUNLOCKFILE(fp);
-
- if ((flags & FPARSELN_UNESCALL) != 0 && esc && buf != NULL &&
- strchr(buf, esc) != NULL) {
- ptr = cp = buf;
- while (cp[0] != '\0') {
- int skipesc;
-
- while (cp[0] != '\0' && cp[0] != esc)
- *ptr++ = *cp++;
- if (cp[0] == '\0' || cp[1] == '\0')
- break;
-
- skipesc = 0;
- if (cp[1] == com)
- skipesc += (flags & FPARSELN_UNESCCOMM);
- if (cp[1] == con)
- skipesc += (flags & FPARSELN_UNESCCONT);
- if (cp[1] == esc)
- skipesc += (flags & FPARSELN_UNESCESC);
- if (cp[1] != com && cp[1] != con && cp[1] != esc)
- skipesc = (flags & FPARSELN_UNESCREST);
-
- if (skipesc)
- cp++;
- else
- *ptr++ = *cp++;
- *ptr++ = *cp++;
- }
- *ptr = '\0';
- len = strlen(buf);
- }
-
- if (size)
- *size = len;
- return buf;
-}
-
-#ifdef TEST
-
-int main(int, char **);
-
-int
-main(int argc, char **argv)
-{
- char *ptr;
- size_t size, line;
-
- line = 0;
- while ((ptr = fparseln(stdin, &size, &line, NULL,
- FPARSELN_UNESCALL)) != NULL)
- printf("line %d (%d) |%s|\n", line, size, ptr);
- return 0;
-}
-
-/*
-
-# This is a test
-line 1
-line 2 \
-line 3 # Comment
-line 4 \# Not comment \\\\
-
-# And a comment \
-line 5 \\\
-line 6
-
-*/
-
-#endif /* TEST */
-#endif /* ! HAVE_FPARSELN */
diff --git a/StdLib/LibC/Stdio/fprintf.c b/StdLib/LibC/Stdio/fprintf.c
deleted file mode 100644
index 7134c5c5e6..0000000000
--- a/StdLib/LibC/Stdio/fprintf.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/** @file
- Implementation of fprintf as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: fprintf.c,v 1.11 2003/08/07 16:43:24 agc Exp
- fprintf.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-int
-fprintf(FILE *fp, const char *fmt, ...)
-{
- int ret;
- va_list ap;
-
- _DIAGASSERT(fp != NULL);
- _DIAGASSERT(fmt != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- va_start(ap, fmt);
- ret = vfprintf(fp, fmt, ap);
- va_end(ap);
- return (ret);
-}
diff --git a/StdLib/LibC/Stdio/fpurge.c b/StdLib/LibC/Stdio/fpurge.c
deleted file mode 100644
index 48c5482a7c..0000000000
--- a/StdLib/LibC/Stdio/fpurge.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: fpurge.c,v 1.13 2003/08/07 16:43:24 agc Exp
- fpurge.c 8.1 (Berkeley) 6/4/93
-*/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include "reentrant.h"
-#include "local.h"
-
-/*
- * fpurge: like fflush, but without writing anything: leave the
- * given FILE's buffer empty.
- */
-int
-fpurge(fp)
- FILE *fp;
-{
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- if (fp->_flags == 0) {
- errno = EBADF;
- return (EOF);
- }
- FLOCKFILE(fp);
- if (HASUB(fp))
- FREEUB(fp);
- WCIO_FREE(fp);
- fp->_p = fp->_bf._base;
- fp->_r = 0;
- fp->_w = fp->_flags & (__SLBF|__SNBF) ? 0 : fp->_bf._size;
- FUNLOCKFILE(fp);
- return (0);
-}
diff --git a/StdLib/LibC/Stdio/fputc.c b/StdLib/LibC/Stdio/fputc.c
deleted file mode 100644
index a7dfdef485..0000000000
--- a/StdLib/LibC/Stdio/fputc.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/** @file
- Implementation of fputc as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: fputc.c,v 1.12 2003/08/07 16:43:24 agc Exp
- fputc.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-int
-fputc(int c, FILE *fp)
-{
- int r;
-
- _DIAGASSERT(fp != NULL);
-
- if(fp != NULL) {
- FLOCKFILE(fp);
- r = __sputc(c, fp);
- FUNLOCKFILE(fp);
- }
- else {
- r = EOF;
- errno = ENOSTR;
- }
- return r;
-}
diff --git a/StdLib/LibC/Stdio/fputs.c b/StdLib/LibC/Stdio/fputs.c
deleted file mode 100644
index 56e622276a..0000000000
--- a/StdLib/LibC/Stdio/fputs.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/** @file
- Implementation of fputs as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: fputs.c,v 1.14 2005/06/22 19:45:22 christos Exp
- fputs.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include "reentrant.h"
-#include "local.h"
-#include "fvwrite.h"
-
-/*
- * Write the given string to the given file.
- */
-int
-fputs(const char *s, FILE *fp)
-{
- struct __suio uio;
- struct __siov iov;
- int r;
-
- _DIAGASSERT(s != NULL);
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- if (s == NULL)
- s = "(null)";
-
- iov.iov_base = __UNCONST(s);
- uio.uio_resid = (int)(iov.iov_len = strlen(s));
- uio.uio_iov = &iov;
- uio.uio_iovcnt = 1;
- FLOCKFILE(fp);
- _SET_ORIENTATION(fp, -1);
- r = __sfvwrite(fp, &uio);
- FUNLOCKFILE(fp);
- return r;
-}
diff --git a/StdLib/LibC/Stdio/fputwc.c b/StdLib/LibC/Stdio/fputwc.c
deleted file mode 100644
index 76ed839203..0000000000
--- a/StdLib/LibC/Stdio/fputwc.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c)2001 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Citrus$
-
-NetBSD: fputwc.c,v 1.4 2005/06/12 05:21:27 lukem Exp
-*/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdio.h>
-#include <wchar.h>
-#include "reentrant.h"
-#include "local.h"
-#include "fvwrite.h"
-
-wint_t
-__fputwc_unlock(wchar_t wc, FILE *fp)
-{
- struct wchar_io_data *wcio;
- mbstate_t *st;
- size_t size;
- char buf[MB_LEN_MAX];
- struct __suio uio;
- struct __siov iov;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (WEOF);
- }
-
- /* LINTED we don't play with buf */
- iov.iov_base = (void *)buf;
- uio.uio_iov = &iov;
- uio.uio_iovcnt = 1;
-
- _SET_ORIENTATION(fp, 1);
- wcio = WCIO_GET(fp);
- if (wcio == 0) {
- errno = ENOMEM;
- return WEOF;
- }
-
- wcio->wcio_ungetwc_inbuf = 0;
- st = &wcio->wcio_mbstate_out;
-
- size = wcrtomb(buf, wc, st);
- if (size == (size_t)-1) {
- return WEOF;
- }
-
- _DIAGASSERT(size != 0);
-
- uio.uio_resid = (int)(iov.iov_len = size);
- if (__sfvwrite(fp, &uio)) {
- return WEOF;
- }
-
- return (wint_t)wc;
-}
-
-wint_t
-fputwc(wchar_t wc, FILE *fp)
-{
- wint_t r;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (WEOF);
- }
-
- FLOCKFILE(fp);
- r = __fputwc_unlock(wc, fp);
- FUNLOCKFILE(fp);
-
- return (r);
-}
diff --git a/StdLib/LibC/Stdio/fputws.c b/StdLib/LibC/Stdio/fputws.c
deleted file mode 100644
index ddfc5ddd30..0000000000
--- a/StdLib/LibC/Stdio/fputws.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 2002 Tim J. Robbins.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * Original version ID:
- * FreeBSD: src/lib/libc/stdio/fputws.c,v 1.4 2002/09/20 13:25:40 tjr Exp
- NetBSD: fputws.c,v 1.1 2003/03/07 07:11:37 tshiozak Exp
-*/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <wchar.h>
-#include "reentrant.h"
-#include "local.h"
-
-int
-fputws(
- const wchar_t * __restrict ws,
- FILE * __restrict fp
- )
-{
- _DIAGASSERT(fp != NULL);
- _DIAGASSERT(ws != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- FLOCKFILE(fp);
- _SET_ORIENTATION(fp, 1);
-
- while (*ws != '\0') {
- if (__fputwc_unlock(*ws++, fp) == WEOF) {
- FUNLOCKFILE(fp);
- return (-1);
- }
- }
- FUNLOCKFILE(fp);
-
- return (0);
-}
diff --git a/StdLib/LibC/Stdio/fread.c b/StdLib/LibC/Stdio/fread.c
deleted file mode 100644
index 7693ab3c06..0000000000
--- a/StdLib/LibC/Stdio/fread.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/** @file
- Implementation of fread as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: fread.c,v 1.16 2003/08/07 16:43:25 agc Exp
- fread.c 8.2 (Berkeley) 12/11/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include "reentrant.h"
-#include "local.h"
-
-size_t
-fread(void *buf, size_t size, size_t count, FILE *fp)
-{
- size_t resid;
- char *p;
- int r;
- size_t total;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (0);
- }
- /*
- * The ANSI standard requires a return value of 0 for a count
- * or a size of 0. Whilst ANSI imposes no such requirements on
- * fwrite, the SUSv2 does.
- */
- if ((resid = count * size) == 0)
- return (0);
-
- _DIAGASSERT(buf != NULL);
-
- FLOCKFILE(fp);
- if (fp->_r < 0)
- fp->_r = 0;
- total = resid;
- p = buf;
- while (resid > (size_t)(r = fp->_r)) {
- (void)memcpy((void *)p, (void *)fp->_p, (size_t)r);
- fp->_p += r;
- /* fp->_r = 0 ... done in __srefill */
- p += r;
- resid -= r;
- if (__srefill(fp)) {
- /* no more input: return partial result */
- FUNLOCKFILE(fp);
- return ((total - resid) / size);
- }
- }
- (void)memcpy((void *)p, (void *)fp->_p, resid);
- fp->_r -= (int)resid;
- fp->_p += resid;
- FUNLOCKFILE(fp);
- return (count);
-}
diff --git a/StdLib/LibC/Stdio/freopen.c b/StdLib/LibC/Stdio/freopen.c
deleted file mode 100644
index 58381e6d19..0000000000
--- a/StdLib/LibC/Stdio/freopen.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/** @file
- Implementation of freopen as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: freopen.c,v 1.14 2003/08/07 16:43:25 agc Exp
- freopen.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <unistd.h>
-#include "reentrant.h"
-#include "local.h"
-
-/*
- * Re-direct an existing, open (probably) file to some other file.
- * ANSI is written such that the original file gets closed if at
- * all possible, no matter what.
- */
-FILE *
-freopen(const char *file, const char *mode, FILE *fp)
-{
- int f;
- int flags, isopen, oflags, sverrno, wantfd;
-
- _DIAGASSERT(file != NULL);
- _DIAGASSERT(mode != NULL);
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (NULL);
- }
-
- if ((flags = __sflags(mode, &oflags)) == 0) {
- (void) fclose(fp);
- return (NULL);
- }
-
- if (!__sdidinit)
- __sinit();
-
- /*
- * There are actually programs that depend on being able to "freopen"
- * descriptors that weren't originally open. Keep this from breaking.
- * Remember whether the stream was open to begin with, and which file
- * descriptor (if any) was associated with it. If it was attached to
- * a descriptor, defer closing it; freopen("/dev/stdin", "r", stdin)
- * should work. This is unnecessary if it was not a Unix file.
- */
- if (fp->_flags == 0) {
- fp->_flags = __SEOF; /* hold on to it */
- isopen = 0;
- wantfd = -1;
- } else {
- /* flush the stream; ANSI doesn't require this. */
- if (fp->_flags & __SWR)
- (void) __sflush(fp);
- /* if close is NULL, closing is a no-op, hence pointless */
- isopen = fp->_close != NULL;
- if (((wantfd = fp->_file) >= 0) && isopen) {
- (void) (*fp->_close)(fp->_cookie);
- isopen = 0;
- }
- }
-
- /* Get a new descriptor to refer to the new file. */
- f = open(file, oflags, DEFFILEMODE);
- if (f < 0 && isopen) {
- /* If out of fd's close the old one and try again. */
- if (errno == ENFILE || errno == EMFILE) {
- (void) (*fp->_close)(fp->_cookie);
- isopen = 0;
- f = open(file, oflags, DEFFILEMODE);
- }
- }
- sverrno = errno;
-
- /*
- * Finish closing fp. Even if the open succeeded above, we cannot
- * keep fp->_base: it may be the wrong size. This loses the effect
- * of any setbuffer calls, but stdio has always done this before.
- */
- if (isopen && (f != wantfd))
- (void) (*fp->_close)(fp->_cookie);
- if (fp->_flags & __SMBF)
- free((char *)fp->_bf._base);
- fp->_w = 0;
- fp->_r = 0;
- fp->_p = NULL;
- fp->_bf._base = NULL;
- fp->_bf._size = 0;
- fp->_lbfsize = 0;
- if (HASUB(fp))
- FREEUB(fp);
- WCIO_FREE(fp);
- _UB(fp)._size = 0;
- if (HASLB(fp))
- FREELB(fp);
- fp->_lb._size = 0;
-
- if (f < 0) { /* did not get it after all */
- fp->_flags = 0; /* set it free */
- errno = sverrno; /* restore in case _close clobbered */
- return (NULL);
- }
-
- if (oflags & O_NONBLOCK) {
- struct stat st;
- if (fstat(f, &st) == -1) {
- sverrno = errno;
- (void)close(f);
- errno = sverrno;
- return (NULL);
- }
- if (!S_ISREG(st.st_mode)) {
- (void)close(f);
- errno = EFTYPE;
- return (NULL);
- }
- }
-
- /*
- * If reopening something that was open before on a real file, try
- * to maintain the descriptor. Various C library routines (perror)
- * assume stderr is always fd STDERR_FILENO, even if being freopen'd.
- */
- if (wantfd >= 0 && f != wantfd) {
- if (dup2(f, wantfd) >= 0) {
- (void) close(f);
- f = wantfd;
- }
- }
-
- fp->_flags = (unsigned short)flags;
- fp->_file = (short)f;
- fp->_cookie = fp;
- fp->_read = __sread;
- fp->_write = __swrite;
- fp->_seek = __sseek;
- fp->_close = __sclose;
-
- /*
- * When reopening in append mode, even though we use O_APPEND,
- * we need to seek to the end so that ftell() gets the right
- * answer. If the user then alters the seek pointer, or
- * the file extends, this will fail, but there is not much
- * we can do about this. (We could set __SAPP and check in
- * fseek and ftell.)
- */
- if (oflags & O_APPEND)
- (void) __sseek((void *)fp, (fpos_t)0, SEEK_END);
- return (fp);
-}
diff --git a/StdLib/LibC/Stdio/fscanf.c b/StdLib/LibC/Stdio/fscanf.c
deleted file mode 100644
index 72d55e50cd..0000000000
--- a/StdLib/LibC/Stdio/fscanf.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/** @file
- Implementation of fscanf as declared in <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: fscanf.c,v 1.12 2003/08/07 16:43:25 agc Exp
- fscanf.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-#include "reentrant.h"
-#include "local.h"
-
-int
-fscanf(FILE *fp, char const *fmt, ...)
-{
- int ret;
- va_list ap;
-
- va_start(ap, fmt);
- ret = __svfscanf(fp, fmt, ap);
- va_end(ap);
- return (ret);
-}
diff --git a/StdLib/LibC/Stdio/fseek.c b/StdLib/LibC/Stdio/fseek.c
deleted file mode 100644
index ac06f29fcb..0000000000
--- a/StdLib/LibC/Stdio/fseek.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/** @file
- Implementation of fseek as declared in <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to The NetBSD Foundation
- by David Laight.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: fseek.c,v 1.22 2006/01/26 10:48:18 kleink Exp
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "namespace.h"
-#include <assert.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "reentrant.h"
-#include "local.h"
-
-/*
- * Seek the given file to the given offset.
- * Zero extend the offset if SEEK_SET to allow access to 4GB files
- */
-int
-fseek(FILE *fp, long l_offset, int whence)
-{
- off_t offset;
-
- if (whence == SEEK_SET)
- offset = (off_t)((UINT64)l_offset); // Coerce to unsigned to prevent sign extension
- else
- offset = (off_t)l_offset; // OK for this one to be negative
- return fseeko(fp, offset, whence);
-}
diff --git a/StdLib/LibC/Stdio/fseeko.c b/StdLib/LibC/Stdio/fseeko.c
deleted file mode 100644
index 662d25f91a..0000000000
--- a/StdLib/LibC/Stdio/fseeko.c
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: fseeko.c,v 1.5 2005/03/04 16:04:58 dsl Exp
- */
-//#include <Uefi.h> // REMOVE, For DEBUG only
-//#include <Library/UefiLib.h> // REMOVE, For DEBUG only
-
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include "namespace.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "reentrant.h"
-#include "local.h"
-
-#ifdef __weak_alias
-__weak_alias(fseeko, _fseeko)
-#endif
-
-#define POS_ERR (-(fpos_t)1)
-
-/*
- * Seek the given file to the given offset.
- * `Whence' must be one of the three SEEK_* macros.
- */
-int
-fseeko(FILE *fp, off_t offset, int whence)
-{
- fpos_t (*seekfn)(void *, fpos_t, int);
- fpos_t target, curoff;
- size_t n;
- struct stat st;
- int havepos;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return -1;
- }
-
-#ifdef __GNUC__
- /* This outrageous construct just to shut up a GCC warning. */
- (void) &curoff;
-#endif
-
- /* make sure stdio is set up */
- if (!__sdidinit)
- __sinit();
-
-//Print(L"%a( %d, %Ld, %d)\n", __func__, fp->_file, offset, whence);
- FLOCKFILE(fp);
-
- /*
- * Have to be able to seek.
- */
- if ((seekfn = fp->_seek) == NULL) {
- errno = ESPIPE; /* historic practice */
- FUNLOCKFILE(fp);
-//Print(L"%a: %d\n", __func__, __LINE__);
- return (-1);
- }
-
- /*
- * Change any SEEK_CUR to SEEK_SET, and check `whence' argument.
- * After this, whence is either SEEK_SET or SEEK_END.
- */
- switch (whence) {
-
- case SEEK_CUR:
- /*
- * In order to seek relative to the current stream offset,
- * we have to first find the current stream offset a la
- * ftell (see ftell for details).
- */
- __sflush(fp); /* may adjust seek offset on append stream */
- if (fp->_flags & __SOFF)
- curoff = fp->_offset;
- else {
- curoff = (*seekfn)(fp->_cookie, (fpos_t)0, SEEK_CUR);
- if (curoff == POS_ERR) {
- FUNLOCKFILE(fp);
-//Print(L"%a: %d\n", __func__, __LINE__);
- return (-1);
- }
- }
- if (fp->_flags & __SRD) {
- curoff -= fp->_r;
- if (HASUB(fp))
- curoff -= fp->_ur;
- } else if (fp->_flags & __SWR && fp->_p != NULL)
- curoff += fp->_p - fp->_bf._base;
-
- offset += curoff;
- whence = SEEK_SET;
- havepos = 1;
- break;
-
- case SEEK_SET:
- case SEEK_END:
- curoff = 0; /* XXX just to keep gcc quiet */
- havepos = 0;
- break;
-
- default:
- errno = EINVAL;
- FUNLOCKFILE(fp);
-//Print(L"%a: %d\n", __func__, __LINE__);
- return (-1);
- }
-
- /*
- * Can only optimise if:
- * reading (and not reading-and-writing);
- * not unbuffered; and
- * this is a `regular' Unix file (and hence seekfn==__sseek).
- * We must check __NBF first, because it is possible to have __NBF
- * and __SOPT both set.
- */
- if (fp->_bf._base == NULL)
- __smakebuf(fp);
- if (fp->_flags & (__SWR | __SRW | __SNBF | __SNPT))
- goto dumb;
- if ((fp->_flags & __SOPT) == 0) {
- if (seekfn != __sseek ||
- fp->_file < 0 || fstat(fp->_file, &st) ||
- !S_ISREG(st.st_mode)) {
- fp->_flags |= __SNPT;
- goto dumb;
- }
- fp->_blksize = st.st_blksize;
- fp->_flags |= __SOPT;
- }
-
- /*
- * We are reading; we can try to optimise.
- * Figure out where we are going and where we are now.
- */
- if (whence == SEEK_SET)
- target = offset;
- else {
- if (fstat(fp->_file, &st))
- {
-//Print(L"%a: %d\n", __func__, __LINE__);
- goto dumb;
- }
- target = st.st_size + offset;
- }
-
- if (!havepos) {
- if (fp->_flags & __SOFF)
- curoff = fp->_offset;
- else {
- curoff = (*seekfn)(fp->_cookie, (fpos_t)0, SEEK_CUR);
- if (curoff == POS_ERR)
- {
-//Print(L"%a: %d\n", __func__, __LINE__);
- goto dumb;
- }
- }
- curoff -= fp->_r;
- if (HASUB(fp))
- curoff -= fp->_ur;
- }
-
- /*
- * Compute the number of bytes in the input buffer (pretending
- * that any ungetc() input has been discarded). Adjust current
- * offset backwards by this count so that it represents the
- * file offset for the first byte in the current input buffer.
- */
- if (HASUB(fp)) {
- curoff += fp->_r; /* kill off ungetc */
- n = fp->_up - fp->_bf._base;
- curoff -= n;
- n += fp->_ur;
- } else {
- n = fp->_p - fp->_bf._base;
- curoff -= n;
- n += fp->_r;
- }
-
- /*
- * If the target offset is within the current buffer,
- * simply adjust the pointers, clear EOF, undo ungetc(),
- * and return. (If the buffer was modified, we have to
- * skip this; see fgetln.c.)
- */
- if ((fp->_flags & __SMOD) == 0 &&
- target >= curoff && target < (fpos_t)(curoff + n)) {
- int o = (int)(target - curoff);
-
- fp->_p = fp->_bf._base + o;
- fp->_r = (int)(n - o);
- if (HASUB(fp))
- FREEUB(fp);
- WCIO_FREE(fp); /* Should this really be unconditional??? */
- fp->_flags &= ~__SEOF;
- FUNLOCKFILE(fp);
- return (0);
- }
-
- /*
- * The place we want to get to is not within the current buffer,
- * but we can still be kind to the kernel copyout mechanism.
- * By aligning the file offset to a block boundary, we can let
- * the kernel use the VM hardware to map pages instead of
- * copying bytes laboriously. Using a block boundary also
- * ensures that we only read one block, rather than two.
- */
- curoff = target & ~(fp->_blksize - 1);
- if ((*seekfn)(fp->_cookie, curoff, SEEK_SET) == POS_ERR)
- {
-//Print(L"%a: %d\n", __func__, __LINE__);
- goto dumb;
- }
- fp->_r = 0;
- fp->_p = fp->_bf._base;
- if (HASUB(fp))
- FREEUB(fp);
- WCIO_FREE(fp); /* Should this really be unconditional??? */
- fp->_flags &= ~__SEOF;
- n = (int)(target - curoff);
- if (n) {
- if (__srefill(fp) || fp->_r < (int)n)
- {
-//Print(L"%a: %d\n", __func__, __LINE__);
- goto dumb;
- }
- fp->_p += n;
- fp->_r -= (int)n;
- }
- FUNLOCKFILE(fp);
- return (0);
-
- /*
- * We get here if we cannot optimise the seek ... just
- * do it. Allow the seek function to change fp->_bf._base.
- */
-dumb:
-//Print(L"%a: %d\n", __func__, __LINE__);
- if (__sflush(fp) ||
- (*seekfn)(fp->_cookie, (fpos_t)offset, whence) == POS_ERR) {
- FUNLOCKFILE(fp);
-//Print(L"%a: %d\n", __func__, __LINE__);
- return (-1);
- }
- /* success: clear EOF indicator and discard ungetc() data */
- if (HASUB(fp))
- FREEUB(fp);
- WCIO_FREE(fp); /* Should this really be unconditional??? */
- fp->_p = fp->_bf._base;
- fp->_r = 0;
- fp->_w = 0;
- fp->_flags &= ~__SEOF;
- FUNLOCKFILE(fp);
-//Print(L"%a: %d\n", __func__, __LINE__);
- return (0);
-}
diff --git a/StdLib/LibC/Stdio/fsetpos.c b/StdLib/LibC/Stdio/fsetpos.c
deleted file mode 100644
index c8c12f4e83..0000000000
--- a/StdLib/LibC/Stdio/fsetpos.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/** @file
- Implementation of fsetpos as declared in <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: fsetpos.c,v 1.10 2003/08/07 16:43:25 agc Exp
- fsetpos.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include "namespace.h"
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-
-/*
- * fsetpos: like fseek.
- */
-int
-fsetpos(FILE *iop, const fpos_t *pos)
-{
- _DIAGASSERT(iop != NULL);
- _DIAGASSERT(pos != NULL);
-
- return (fseeko(iop, (off_t)*pos, SEEK_SET));
-}
diff --git a/StdLib/LibC/Stdio/ftell.c b/StdLib/LibC/Stdio/ftell.c
deleted file mode 100644
index 1d325e90f9..0000000000
--- a/StdLib/LibC/Stdio/ftell.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/** @file
- Implementation of ftell as declared in <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: ftell.c,v 1.15 2003/08/07 16:43:25 agc Exp
- ftell.c 8.2 (Berkeley) 5/4/95
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-/*
- * ftell: return current offset.
- */
-long
-ftell(FILE *fp)
-{
- fpos_t pos;
-
- FLOCKFILE(fp);
-
- if (fp->_seek == NULL) {
- FUNLOCKFILE(fp);
- errno = ESPIPE; /* historic practice */
- return (-1L);
- }
-
- /*
- * Find offset of underlying I/O object, then
- * adjust for buffered bytes.
- */
- __sflush(fp); /* may adjust seek offset on append stream */
- if (fp->_flags & __SOFF)
- pos = fp->_offset;
- else {
- pos = (*fp->_seek)(fp->_cookie, (fpos_t)0, SEEK_CUR);
- if (pos == -1L) {
- FUNLOCKFILE(fp);
- return (long)(pos);
- }
- }
- if (fp->_flags & __SRD) {
- /*
- * Reading. Any unread characters (including
- * those from ungetc) cause the position to be
- * smaller than that in the underlying object.
- */
- pos -= fp->_r;
- if (HASUB(fp))
- pos -= fp->_ur;
- } else if (fp->_flags & __SWR && fp->_p != NULL) {
- /*
- * Writing. Any buffered characters cause the
- * position to be greater than that in the
- * underlying object.
- */
- pos += fp->_p - fp->_bf._base;
- }
- FUNLOCKFILE(fp);
- return (long)(pos);
-}
diff --git a/StdLib/LibC/Stdio/ftello.c b/StdLib/LibC/Stdio/ftello.c
deleted file mode 100644
index 0677d1a355..0000000000
--- a/StdLib/LibC/Stdio/ftello.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/* $NetBSD: ftello.c,v 1.4 2003/08/07 16:43:26 agc Exp $ */
-
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: ftello.c,v 1.4 2003/08/07 16:43:26 agc Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-#ifdef __weak_alias
-__weak_alias(ftello, _ftello)
-#endif
-
-/*
- * ftell: return current offset.
- */
-off_t
-ftello(FILE *fp)
-{
- fpos_t pos;
-
- FLOCKFILE(fp);
-
- if (fp->_seek == NULL) {
- FUNLOCKFILE(fp);
- errno = ESPIPE; /* historic practice */
- return ((off_t)-1);
- }
-
- /*
- * Find offset of underlying I/O object, then
- * adjust for buffered bytes.
- */
- __sflush(fp); /* may adjust seek offset on append stream */
- if (fp->_flags & __SOFF)
- pos = fp->_offset;
- else {
- pos = (*fp->_seek)(fp->_cookie, (fpos_t)0, SEEK_CUR);
- if (pos == (fpos_t)-1) {
- FUNLOCKFILE(fp);
- return (pos);
- }
- }
- if (fp->_flags & __SRD) {
- /*
- * Reading. Any unread characters (including
- * those from ungetc) cause the position to be
- * smaller than that in the underlying object.
- */
- pos -= fp->_r;
- if (HASUB(fp))
- pos -= fp->_ur;
- } else if (fp->_flags & __SWR && fp->_p != NULL) {
- /*
- * Writing. Any buffered characters cause the
- * position to be greater than that in the
- * underlying object.
- */
- pos += fp->_p - fp->_bf._base;
- }
- FUNLOCKFILE(fp);
- return (pos);
-}
diff --git a/StdLib/LibC/Stdio/funopen.c b/StdLib/LibC/Stdio/funopen.c
deleted file mode 100644
index 313af4da08..0000000000
--- a/StdLib/LibC/Stdio/funopen.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* $NetBSD: funopen.c,v 1.10 2005/11/29 03:12:00 christos Exp $ */
-
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)funopen.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: funopen.c,v 1.10 2005/11/29 03:12:00 christos Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <stdio.h>
-#include <errno.h>
-#include "reentrant.h"
-#include "local.h"
-
-FILE *
-funopen(cookie, readfn, writefn, seekfn, closefn)
- const void *cookie;
- int (*readfn) __P((void *, char *, int));
- int (*writefn) __P((void *, const char *, int));
- fpos_t (*seekfn) __P((void *, fpos_t, int));
- int (*closefn) __P((void *));
-{
- FILE *fp;
- int flags;
-
- if (readfn == NULL) {
- if (writefn == NULL) { /* illegal */
- errno = EINVAL;
- return (NULL);
- } else
- flags = __SWR; /* write only */
- } else {
- if (writefn == NULL)
- flags = __SRD; /* read only */
- else
- flags = __SRW; /* read-write */
- }
- if ((fp = __sfp()) == NULL)
- return (NULL);
- fp->_flags = flags;
- fp->_file = -1;
- fp->_cookie = __UNCONST(cookie);
- fp->_read = readfn;
- fp->_write = writefn;
- fp->_seek = seekfn;
- fp->_close = closefn;
- return (fp);
-}
diff --git a/StdLib/LibC/Stdio/fvwrite.c b/StdLib/LibC/Stdio/fvwrite.c
deleted file mode 100644
index feddc348c1..0000000000
--- a/StdLib/LibC/Stdio/fvwrite.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: fvwrite.c,v 1.16.2.1 2007/05/07 19:49:09 pavel Exp
- fvwrite.c 8.1 (Berkeley) 6/4/93
-*/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "reentrant.h"
-#include "local.h"
-#include "fvwrite.h"
-
-/*
- * Write some memory regions. Return zero on success, EOF on error.
- *
- * This routine is large and unsightly, but most of the ugliness due
- * to the three different kinds of output buffering is handled here.
- */
-int
-__sfvwrite(FILE *fp, struct __suio *uio)
-{
- size_t len;
- char *p;
- struct __siov *iov;
- int w, s;
- char *nl;
- int nlknown, nldist;
-
- _DIAGASSERT(fp != NULL);
- _DIAGASSERT(uio != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- if ((len = uio->uio_resid) == 0)
- return (0);
- /* make sure we can write */
- if (cantwrite(fp)) {
- errno = EBADF;
- return (EOF);
- }
-
-//#define MIN(a, b) ((a) < (b) ? (a) : (b))
-#define COPY(n) (void)memcpy((void *)fp->_p, (void *)p, (size_t)(n))
-
- iov = uio->uio_iov;
- p = iov->iov_base;
- len = iov->iov_len;
- iov++;
-#define GETIOV(extra_work) \
- while (len == 0) { \
- extra_work; \
- p = iov->iov_base; \
- len = iov->iov_len; \
- iov++; \
- }
- if (fp->_flags & __SNBF) {
- /*
- * Unbuffered: write up to BUFSIZ bytes at a time.
- */
- do {
- GETIOV(;);
- w = (*fp->_write)(fp->_cookie, p,
- (int)MIN(len, BUFSIZ));
- if (w < 0)
- goto err;
- p += w;
- len -= w;
- } while ((uio->uio_resid -= w) > 0);
- uio->uio_resid = 0; // Just in case it went negative such as when NL is expanded to CR NL
- } else if ((fp->_flags & __SLBF) == 0) {
- /*
- * Fully buffered: fill partially full buffer, if any,
- * and then flush. If there is no partial buffer, write
- * one _bf._size byte chunk directly (without copying).
- *
- * String output is a special case: write as many bytes
- * as fit, but pretend we wrote everything. This makes
- * snprintf() return the number of bytes needed, rather
- * than the number used, and avoids its write function
- * (so that the write function can be invalid).
- */
- do {
- GETIOV(;);
- if ((fp->_flags & (__SALC | __SSTR)) ==
- (__SALC | __SSTR) && fp->_w < (int)len) {
- size_t blen = fp->_p - fp->_bf._base;
- unsigned char *_base;
- int _size;
-
- /* Allocate space exponentially. */
- _size = fp->_bf._size;
- do {
- _size = (_size << 1) + 1;
- } while (_size < (int)(blen + len));
- _base = realloc(fp->_bf._base,
- (size_t)(_size + 1));
- if (_base == NULL)
- goto err;
- fp->_w += _size - fp->_bf._size;
- fp->_bf._base = _base;
- fp->_bf._size = _size;
- fp->_p = _base + blen;
- }
- w = fp->_w;
- if (fp->_flags & __SSTR) {
- if (len < (size_t)w)
- w = (int)len;
- COPY(w); /* copy MIN(fp->_w,len), */
- fp->_w -= w;
- fp->_p += w;
- w = (int)len; /* but pretend copied all */
- } else if (fp->_p > fp->_bf._base && len > (size_t)w) {
- /* fill and flush */
- COPY(w);
- /* fp->_w -= w; */ /* unneeded */
- fp->_p += w;
- if (fflush(fp))
- goto err;
- } else if (len >= (size_t)(w = fp->_bf._size)) {
- /* write directly */
- w = (*fp->_write)(fp->_cookie, p, w);
- if (w <= 0)
- goto err;
- } else {
- /* fill and done */
- w = (int)len;
- COPY(w);
- fp->_w -= w;
- fp->_p += w;
- }
- p += w;
- len -= w;
- } while ((uio->uio_resid -= w) != 0);
- } else {
- /*
- * Line buffered: like fully buffered, but we
- * must check for newlines. Compute the distance
- * to the first newline (including the newline),
- * or `infinity' if there is none, then pretend
- * that the amount to write is MIN(len,nldist).
- */
- nlknown = 0;
- nldist = 0; /* XXX just to keep gcc happy */
- do {
- GETIOV(nlknown = 0);
- if (!nlknown) {
- nl = memchr((void *)p, '\n', len); // Divide the string at the first '\n'
- nldist = (int)(nl ? nl + 1 - p : len + 1);
- nlknown = 1;
- }
- s = (int)(MIN((int)len, nldist));
- w = fp->_w + fp->_bf._size;
- if (fp->_p > fp->_bf._base && s > w) {
- COPY(w);
- /* fp->_w -= w; */
- fp->_p += w;
- if (fflush(fp))
- goto err;
- } else if (s >= (w = fp->_bf._size)) {
- w = (*fp->_write)(fp->_cookie, p, w);
- if (w <= 0)
- goto err;
- } else {
- w = s;
- COPY(w);
- fp->_w -= w;
- fp->_p += w;
- }
- if ((nldist -= w) == 0) {
- /* copied the newline: flush and forget */
- if (fflush(fp))
- goto err;
- nlknown = 0;
- }
- p += w;
- len -= w;
- } while ((uio->uio_resid -= w) != 0);
- }
- return (0);
-
-err:
- fp->_flags |= __SERR;
- return (EOF);
-}
diff --git a/StdLib/LibC/Stdio/fvwrite.h b/StdLib/LibC/Stdio/fvwrite.h
deleted file mode 100644
index bde2b4bc50..0000000000
--- a/StdLib/LibC/Stdio/fvwrite.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* $NetBSD: fvwrite.h,v 1.7 2003/08/07 16:43:26 agc Exp $ */
-
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)fvwrite.h 8.1 (Berkeley) 6/4/93
- */
-
-/*
- * I/O descriptors for __sfvwrite().
- */
-struct __siov {
- void *iov_base;
- size_t iov_len;
-};
-struct __suio {
- struct __siov *uio_iov;
- int uio_iovcnt;
- int uio_resid;
-};
-
-extern int __sfvwrite(FILE *, struct __suio *);
diff --git a/StdLib/LibC/Stdio/fwalk.c b/StdLib/LibC/Stdio/fwalk.c
deleted file mode 100644
index fcc3ef3bdf..0000000000
--- a/StdLib/LibC/Stdio/fwalk.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/** @file
- Implementation of the internal fwalk function for <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: fwalk.c,v 1.11 2003/08/07 16:43:26 agc Exp
- fwalk.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-#include "glue.h"
-
-int
-_fwalk(int (*function)(FILE *))
-{
- FILE *fp;
- int n, ret;
- struct glue *g;
-
- _DIAGASSERT(function != NULL);
-
- ret = 0;
- for (g = &__sglue; g != NULL; g = g->next)
- for (fp = g->iobs, n = g->niobs; --n >= 0; fp++)
- if (fp->_flags != 0)
- ret |= (*function)(fp);
- return (ret);
-}
diff --git a/StdLib/LibC/Stdio/fwide.c b/StdLib/LibC/Stdio/fwide.c
deleted file mode 100644
index 4ba1423eb2..0000000000
--- a/StdLib/LibC/Stdio/fwide.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c)2001 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Citrus$
-
- NetBSD: fwide.c,v 1.3 2005/06/12 05:21:27 lukem Exp
-*/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <wchar.h>
-#include "reentrant.h"
-#include "local.h"
-
-int
-fwide(FILE *fp, int mode)
-{
- struct wchar_io_data *wcio;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (0);
- }
-
- /*
- * this implementation use only -1, 0, 1
- * for mode value.
- * (we don't need to do this, but
- * this can make things simpler.)
- */
- if (mode > 0)
- mode = 1;
- else if (mode < 0)
- mode = -1;
-
- FLOCKFILE(fp);
- wcio = WCIO_GET(fp);
- if (!wcio)
- return 0; /* XXX */
-
- if (wcio->wcio_mode == 0 && mode != 0)
- wcio->wcio_mode = mode;
- else
- mode = wcio->wcio_mode;
- FUNLOCKFILE(fp);
-
- return mode;
-}
diff --git a/StdLib/LibC/Stdio/fwprintf.c b/StdLib/LibC/Stdio/fwprintf.c
deleted file mode 100644
index 8f65916fa3..0000000000
--- a/StdLib/LibC/Stdio/fwprintf.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* $NetBSD: fwprintf.c,v 1.1 2005/05/14 23:51:02 christos Exp $ */
-
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-__FBSDID("$FreeBSD: src/lib/libc/stdio/fwprintf.c,v 1.1 2002/09/21 13:00:30 tjr Exp $");
-#else
-__RCSID("$NetBSD: fwprintf.c,v 1.1 2005/05/14 23:51:02 christos Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <wchar.h>
-
-int
-fwprintf(FILE * __restrict fp, const wchar_t * __restrict fmt, ...)
-{
- int ret;
- va_list ap;
-
- va_start(ap, fmt);
- ret = vfwprintf(fp, fmt, ap);
- va_end(ap);
-
- return (ret);
-}
diff --git a/StdLib/LibC/Stdio/fwrite.c b/StdLib/LibC/Stdio/fwrite.c
deleted file mode 100644
index c998e272b6..0000000000
--- a/StdLib/LibC/Stdio/fwrite.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/** @file
- Implementation of fwrite as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: fwrite.c,v 1.16 2005/11/29 03:12:00 christos Exp
- fwrite.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-#include "fvwrite.h"
-
-/*
- * Write `count' objects (each size `size') from memory to the given file.
- * Return the number of whole objects written.
- */
-size_t
-fwrite(const void *buf, size_t size, size_t count, FILE *fp)
-{
- size_t n;
- struct __suio uio;
- struct __siov iov;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (0);
- }
-
- /*
- * SUSv2 requires a return value of 0 for a count or a size of 0.
- */
- if ((n = count * size) == 0)
- return (0);
- _DIAGASSERT(buf != NULL);
-
- iov.iov_base = __UNCONST(buf);
- uio.uio_resid = (int)(iov.iov_len = n);
- uio.uio_iov = &iov;
- uio.uio_iovcnt = 1;
-
- /*
- * The usual case is success (__sfvwrite returns 0);
- * skip the divide if this happens, since divides are
- * generally slow and since this occurs whenever size==0.
- */
- FLOCKFILE(fp);
- if (__sfvwrite(fp, &uio) != 0)
- count = ((n - uio.uio_resid) / size);
- FUNLOCKFILE(fp);
- return (count);
-}
diff --git a/StdLib/LibC/Stdio/fwscanf.c b/StdLib/LibC/Stdio/fwscanf.c
deleted file mode 100644
index 462f7d0fff..0000000000
--- a/StdLib/LibC/Stdio/fwscanf.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* $NetBSD: fwscanf.c,v 1.1 2005/05/14 23:51:02 christos Exp $ */
-
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-__FBSDID("$FreeBSD: src/lib/libc/stdio/fwscanf.c,v 1.1 2002/09/23 12:40:06 tjr Exp $");
-#else
-__RCSID("$NetBSD: fwscanf.c,v 1.1 2005/05/14 23:51:02 christos Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <wchar.h>
-
-int
-fwscanf(FILE * __restrict fp, const wchar_t * __restrict fmt, ...)
-{
- va_list ap;
- int r;
-
- va_start(ap, fmt);
- r = vfwscanf(fp, fmt, ap);
- va_end(ap);
-
- return (r);
-}
diff --git a/StdLib/LibC/Stdio/getc.c b/StdLib/LibC/Stdio/getc.c
deleted file mode 100644
index 755251eef7..0000000000
--- a/StdLib/LibC/Stdio/getc.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/** @file
- Implementation of getc as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: getc.c,v 1.11 2003/08/07 16:43:26 agc Exp
- getc.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-/*
- * A subroutine version of the macro getc.
- */
-#undef getc
-#undef getc_unlocked
-
-int
-getc(FILE *fp)
-{
- int r;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = ENOSTR;
- return (EOF);
- }
-
- FLOCKFILE(fp);
- r = __sgetc(fp);
- FUNLOCKFILE(fp);
- return r;
-}
-
-int
-getc_unlocked(FILE *fp)
-{
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = ENOSTR;
- return EOF;
- }
-
- return (__sgetc(fp));
-}
diff --git a/StdLib/LibC/Stdio/getchar.c b/StdLib/LibC/Stdio/getchar.c
deleted file mode 100644
index d074e03924..0000000000
--- a/StdLib/LibC/Stdio/getchar.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/** @file
- Implementation of a subroutine version of the macro getchar,
- as declared in <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: getchar.c,v 1.9 2003/08/07 16:43:27 agc Exp
- getchar.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-#undef getchar
-#undef getchar_unlocked
-
-int
-getchar( void )
-{
- FILE *fp = stdin;
- int r;
-
- FLOCKFILE(fp);
- r = __sgetc(fp);
- FUNLOCKFILE(fp);
- return r;
-}
-
-int
-getchar_unlocked( void )
-{
- return (__sgetc(stdin));
-}
diff --git a/StdLib/LibC/Stdio/gets.c b/StdLib/LibC/Stdio/gets.c
deleted file mode 100644
index 093fb3f743..0000000000
--- a/StdLib/LibC/Stdio/gets.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/** @file
- Implementation of gets as declared in <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: gets.c,v 1.15 2003/08/07 16:43:27 agc Exp
- gets.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-__warn_references(gets, "warning: this program uses gets(), which is unsafe.")
-
-char *
-gets(char *buf)
-{
- int c;
- char *s;
-
- _DIAGASSERT(buf != NULL);
-
- FLOCKFILE(stdin);
- for (s = buf; (c = getchar_unlocked()) != '\n'; ) {
- if (c == EOF) {
- if (s == buf) {
- FUNLOCKFILE(stdin);
- return (NULL);
- } else {
- break;
- }
- } else {
- *s++ = (char)c;
- }
- }
- *s = 0;
- FUNLOCKFILE(stdin);
- return (buf);
-}
diff --git a/StdLib/LibC/Stdio/gettemp.c b/StdLib/LibC/Stdio/gettemp.c
deleted file mode 100644
index 0773340ad8..0000000000
--- a/StdLib/LibC/Stdio/gettemp.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/** @file
- Internal function to generate temporary file name for tmpnam.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1987, 1993
- The Regents of the University of California. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- mktemp.c 8.1 (Berkeley) 6/4/93
- NetBSD: gettemp.c,v 1.13 2003/12/05 00:57:36 uebayasi Exp
-**/
-#include <LibConfig.h>
-
-#if HAVE_NBTOOL_CONFIG_H
-#include "nbtool_config.h"
-#endif
-
-#if !defined(HAVE_NBTOOL_CONFIG_H) || !defined(HAVE_MKSTEMP) || !defined(HAVE_MKDTEMP)
-
-#include <sys/EfiCdefs.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#if HAVE_NBTOOL_CONFIG_H
-#define GETTEMP gettemp
-#else
-#include "reentrant.h"
-#include "local.h"
-#define GETTEMP __gettemp
-#endif
-
-int
-GETTEMP(
- char *path,
- int *doopen,
- int domkdir
- )
-{
- char *start, *trv;
- struct stat sbuf;
-
- /* To guarantee multiple calls generate unique names even if
- the file is not created. 676 different possibilities with 7
- or more X's, 26 with 6 or less. */
- static char xtra[] = "aa";
- int xcnt = 0;
-
- _DIAGASSERT(path != NULL);
- /* doopen may be NULL */
-
- /* Move to end of path and count trailing X's. */
- for (trv = path; *trv; ++trv) {
- if (*trv == 'X') {
- xcnt++;
- }
- else {
- xcnt = 0;
- }
- }
-
- /* Use at least one from xtra. Use 2 if more than 6 X's. */
- if (*(trv - 1) == 'X')
- *--trv = xtra[0];
- if (xcnt > 6 && *(trv - 1) == 'X')
- *--trv = xtra[1];
-
- /* Set remaining X's to 0's. */
- while (*--trv == 'X') {
- *trv = '0';
- }
-
- /* update xtra for next call. */
- if (xtra[0] != 'z')
- xtra[0]++;
- else {
- xtra[0] = 'a';
- if (xtra[1] != 'z')
- xtra[1]++;
- else
- xtra[1] = 'a';
- }
-
- /*
- * check the target directory; if you have six X's and it
- * doesn't exist this runs for a *very* long time.
- */
- for (start = trv + 1;; --trv) {
- if (trv <= path)
- break;
- if (*trv == '/') {
- *trv = '\0';
- if (stat(path, &sbuf))
- return (0);
- if (!S_ISDIR(sbuf.st_mode)) {
- errno = ENOTDIR;
- return (0);
- }
- *trv = '/';
- break;
- }
- }
-
- for (;;) {
- if (doopen) {
- if ((*doopen =
- open(path, O_CREAT | O_EXCL | O_RDWR, 0600)) >= 0)
- return (1);
- if (errno != EEXIST)
- return (0);
- } else if (domkdir) {
- if (mkdir(path, 0700) >= 0)
- return (1);
- if (errno != EEXIST)
- return (0);
- } else if (lstat(path, &sbuf))
- return (errno == ENOENT ? 1 : 0);
-
- /* tricky little algorithm for backward compatibility */
- for (trv = start;;) {
- if (!*trv)
- return (0);
- if (*trv == 'z') {
- *trv++ = 'a';
- }
- else {
- if (isdigit((unsigned char)*trv))
- *trv = 'a';
- else
- ++*trv;
- break;
- }
- }
- }
- /*NOTREACHED*/
-}
-
-#endif /* !HAVE_NBTOOL_CONFIG_H || !HAVE_MKSTEMP || !HAVE_MKDTEMP */
diff --git a/StdLib/LibC/Stdio/getwc.c b/StdLib/LibC/Stdio/getwc.c
deleted file mode 100644
index 128ff692bc..0000000000
--- a/StdLib/LibC/Stdio/getwc.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* $NetBSD: getwc.c,v 1.3 2005/06/12 05:21:27 lukem Exp $ */
-
-/*-
- * Copyright (c)2001 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Citrus$
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: getwc.c,v 1.3 2005/06/12 05:21:27 lukem Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <stdio.h>
-#include <wchar.h>
-
-/*
- * A subroutine version of the macro getwc.
- */
-#undef getwc
-
-wint_t
-getwc(FILE *fp)
-{
-
- return fgetwc(fp);
-}
diff --git a/StdLib/LibC/Stdio/getwchar.c b/StdLib/LibC/Stdio/getwchar.c
deleted file mode 100644
index df9e86bdc1..0000000000
--- a/StdLib/LibC/Stdio/getwchar.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* $NetBSD: getwchar.c,v 1.3 2005/06/12 05:21:27 lukem Exp $ */
-
-/*-
- * Copyright (c)2001 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Citrus$
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: getwchar.c,v 1.3 2005/06/12 05:21:27 lukem Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <stdio.h>
-#include <wchar.h>
-
-/*
- * A subroutine version of the macro getwchar.
- */
-#undef getwchar
-
-wint_t
-getwchar()
-{
-
- return fgetwc(stdin);
-}
diff --git a/StdLib/LibC/Stdio/glue.h b/StdLib/LibC/Stdio/glue.h
deleted file mode 100644
index f2e8fc0db3..0000000000
--- a/StdLib/LibC/Stdio/glue.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* $NetBSD: glue.h,v 1.5 2003/08/07 16:43:27 agc Exp $ */
-
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)glue.h 8.1 (Berkeley) 6/4/93
- */
-
-/*
- * The first few FILEs are statically allocated; others are dynamically
- * allocated and linked in via this glue structure.
- */
-struct glue {
- struct glue *next;
- int niobs;
- FILE *iobs;
-};
-
-extern struct glue __sglue;
diff --git a/StdLib/LibC/Stdio/local.h b/StdLib/LibC/Stdio/local.h
deleted file mode 100644
index 262deb3611..0000000000
--- a/StdLib/LibC/Stdio/local.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/** @file
- Information local to this implementation of stdio,
- in particular, function declarations and macros.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: local.h,v 1.20 2005/05/14 23:51:02 christos Exp
- local.h 8.3 (Berkeley) 7/3/94
-**/
-
-#include "wcio.h"
-#include "fileext.h"
-
-extern int __sflush(FILE *);
-extern FILE *__sfp(void);
-extern int __srefill(FILE *);
-extern int __sread(void *, char *, int);
-extern int __swrite(void *, char const *, int);
-extern fpos_t __sseek(void *, fpos_t, int);
-extern int __sclose(void *);
-extern void __sinit(void);
-extern void _cleanup(void);
-//extern void (*__cleanup)(void); // Now in MainData.h. Ref. as gMD->cleanup
-extern void __smakebuf(FILE *);
-extern int __swhatbuf(FILE *, size_t *, int *);
-extern int _fwalk(int (*)(FILE *));
-extern char *_mktemp(char *);
-extern int __swsetup(FILE *);
-extern int __sflags(const char *, int *);
-extern int __svfscanf(FILE * __restrict, const char * __restrict, va_list)
- __attribute__((__format__(__scanf__, 2, 0)));
-extern int __svfscanf_unlocked(FILE * __restrict, const char * __restrict, va_list)
- __attribute__((__format__(__scanf__, 2, 0)));
-extern int __vfprintf_unlocked(FILE * __restrict, const char * __restrict, va_list);
-
-
-extern int __sdidinit;
-
-extern int __gettemp(char *, int *, int);
-
-extern wint_t __fgetwc_unlock(FILE *);
-extern wint_t __fputwc_unlock(wchar_t, FILE *);
-
-extern char *__fgetstr(FILE * __restrict, size_t * __restrict, int);
-extern int __slbexpand(FILE *, size_t);
-extern int __vfwprintf_unlocked(FILE *, const wchar_t *, va_list);
-extern int __vfwscanf_unlocked(FILE * __restrict, const wchar_t * __restrict, va_list);
-
-/*
- * Return true iff the given FILE cannot be written now.
- */
-#define cantwrite(fp) \
- ((((fp)->_flags & __SWR) == 0 || (fp)->_bf._base == NULL) && __swsetup(fp))
-
-/*
- * Test whether the given stdio file has an active ungetc buffer;
- * release such a buffer, without restoring ordinary unread data.
- */
-#define HASUB(fp) (_UB(fp)._base != NULL)
-#define FREEUB(fp) { \
- if (_UB(fp)._base != (fp)->_ubuf) \
- free((char *)_UB(fp)._base); \
- _UB(fp)._base = NULL; \
- }
-
-/*
- * test for an fgetln() buffer.
- */
-#define HASLB(fp) ((fp)->_lb._base != NULL)
-#define FREELB(fp) { \
- free((char *)(fp)->_lb._base); \
- (fp)->_lb._base = NULL; \
- }
-
-extern void __flockfile_internal (FILE *, int);
-extern void __funlockfile_internal(FILE *, int);
diff --git a/StdLib/LibC/Stdio/makebuf.c b/StdLib/LibC/Stdio/makebuf.c
deleted file mode 100644
index 684f0eebc1..0000000000
--- a/StdLib/LibC/Stdio/makebuf.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/** @file
- Implementation of internal file buffer allocation functions.
-
- Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: makebuf.c,v 1.14 2003/08/07 16:43:28 agc Exp
- makebuf.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include "namespace.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include "reentrant.h"
-#include "local.h"
-#include <MainData.h>
-
-/*
- * Allocate a file buffer, or switch to unbuffered I/O.
- * Per the ANSI C standard, ALL tty devices default to line buffered.
- *
- * As a side effect, we set __SOPT or __SNPT (en/dis-able fseek
- * optimisation) right after the fstat() that finds the buffer size.
- */
-void
-__smakebuf(FILE *fp)
-{
- void *p;
- int flags;
- size_t size;
- int couldbetty;
-
- _DIAGASSERT(fp != NULL);
-
- if (fp != NULL) {
- if (fp->_flags & __SNBF) {
- fp->_bf._base = fp->_p = fp->_nbuf;
- fp->_bf._size = MB_LEN_MAX;
- return;
- }
- flags = __swhatbuf(fp, &size, &couldbetty);
- if ((p = malloc(size)) == NULL) {
- // malloc failed, act unbuffered.
- fp->_flags |= __SNBF;
- fp->_bf._base = fp->_p = fp->_nbuf;
- fp->_bf._size = 1;
- return;
- }
- gMD->cleanup = _cleanup;
- flags |= __SMBF;
- fp->_bf._base = fp->_p = p;
- fp->_bf._size = (int)size;
- if (couldbetty || isatty(fp->_file))
- flags |= __SLBF;
- fp->_flags |= flags;
- }
-}
-
-/*
- * Internal routine to determine `proper' buffering for a file.
- */
-int
-__swhatbuf(FILE *fp, size_t *bufsize, int *couldbetty)
-{
- struct stat st;
-
- _DIAGASSERT(fp != NULL);
- _DIAGASSERT(bufsize != NULL);
- _DIAGASSERT(couldbetty != NULL);
- if(fp == NULL) {
- return (__SNPT);
- }
-
- if (fp->_file < 0 || fstat(fp->_file, &st) < 0) {
- *couldbetty = 0;
- *bufsize = BUFSIZ;
- return (__SNPT);
- }
-
- /* could be a tty iff it is a character device */
- *couldbetty = S_ISCHR(st.st_mode);
- if (st.st_blksize == 0) {
- *bufsize = BUFSIZ;
- return (__SNPT);
- }
-
- /*
- * Optimise fseek() only if it is a regular file. (The test for
- * __sseek is mainly paranoia.) It is safe to set _blksize
- * unconditionally; it will only be used if __SOPT is also set.
- */
- *bufsize = st.st_blksize;
- fp->_blksize = st.st_blksize;
- return ((st.st_mode & S_IFMT) == S_IFREG && fp->_seek == __sseek ?
- __SOPT : __SNPT);
-}
diff --git a/StdLib/LibC/Stdio/mkdtemp.c b/StdLib/LibC/Stdio/mkdtemp.c
deleted file mode 100644
index e30c2f55e0..0000000000
--- a/StdLib/LibC/Stdio/mkdtemp.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* $NetBSD: mkdtemp.c,v 1.9 2003/10/27 00:12:42 lukem Exp $ */
-
-/*
- * Copyright (c) 1987, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-
-#if HAVE_NBTOOL_CONFIG_H
-#include "nbtool_config.h"
-#endif
-
-#if !HAVE_NBTOOL_CONFIG_H || !HAVE_MKDTEMP
-
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)mktemp.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: mkdtemp.c,v 1.9 2003/10/27 00:12:42 lukem Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#if HAVE_NBTOOL_CONFIG_H
-#define GETTEMP gettemp
-#else
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "reentrant.h"
-#include "local.h"
-#define GETTEMP __gettemp
-#endif
-
-char *
-mkdtemp(path)
- char *path;
-{
- _DIAGASSERT(path != NULL);
-
- return (GETTEMP(path, (int *)NULL, 1) ? path : (char *)NULL);
-}
-
-#endif /* !HAVE_NBTOOL_CONFIG_H || !HAVE_MKDTEMP */
diff --git a/StdLib/LibC/Stdio/mkstemp.c b/StdLib/LibC/Stdio/mkstemp.c
deleted file mode 100644
index d2962214dd..0000000000
--- a/StdLib/LibC/Stdio/mkstemp.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* $NetBSD: mkstemp.c,v 1.9 2005/02/09 21:35:47 kleink Exp $ */
-
-/*
- * Copyright (c) 1987, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-
-#if HAVE_NBTOOL_CONFIG_H
-#include "nbtool_config.h"
-#endif
-
-#if !defined(HAVE_NBTOOL_CONFIG_H) || !defined(HAVE_MKSTEMP)
-
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)mktemp.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: mkstemp.c,v 1.9 2005/02/09 21:35:47 kleink Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#if HAVE_NBTOOL_CONFIG_H
-#define GETTEMP gettemp
-#else
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "reentrant.h"
-#include "local.h"
-#define GETTEMP __gettemp
-#endif
-
-#ifdef __weak_alias
-__weak_alias(mkstemp,_mkstemp)
-#endif
-
-int
-mkstemp(char *path)
-{
- int fd;
-
- _DIAGASSERT(path != NULL);
-
- return (GETTEMP(path, &fd, 0) ? fd : -1);
-}
-
-#endif /* !HAVE_NBTOOL_CONFIG_H || !HAVE_MKSTEMP */
diff --git a/StdLib/LibC/Stdio/mktemp.c b/StdLib/LibC/Stdio/mktemp.c
deleted file mode 100644
index a20eddaf99..0000000000
--- a/StdLib/LibC/Stdio/mktemp.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/** @file
- Internal function for tmpnam.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
-NetBSD: mktemp.c,v 1.19 2003/08/07 16:43:28 agc Exp
-mktemp.c 8.1 (Berkeley) 6/4/93
- **/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include "reentrant.h"
-#include "local.h"
-
-char *
-_mktemp(char *path)
-{
- _DIAGASSERT(path != NULL);
-
- return (__gettemp(path, (int *)NULL, 0) ? path : (char *)NULL);
-}
-
-__warn_references(mktemp,
- "warning: mktemp() possibly used unsafely, use mkstemp() or mkdtemp()")
-
-char *
-mktemp(char *path)
-{
-
- _DIAGASSERT(path != NULL);
-
- return (__gettemp(path, (int *)NULL, 0) ? path : (char *)NULL);
-}
diff --git a/StdLib/LibC/Stdio/perror.c b/StdLib/LibC/Stdio/perror.c
deleted file mode 100644
index b34cd4c479..0000000000
--- a/StdLib/LibC/Stdio/perror.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/** @file
- Implementation of perror as declared in <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Portions Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: perror.c,v 1.24 2006/01/26 11:13:42 kleink Exp
- perror.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include "namespace.h"
-#include <errno.h>
-#include <limits.h>
-#include <stdio.h>
-#include <string.h>
-#include "extern.h"
-
-/*
- * Since perror() is not allowed to change the contents of strerror()'s
- * static buffer, both functions supply their own buffers to strerror_r().
- */
-
-void
-perror(const char *s)
-{
- static char buf[ASCII_STRING_MAX];
- const char *separator;
-
- if (s == NULL)
- s = "";
- if (*s == '\0')
- separator = "";
- else
- separator = ": ";
-
- (void)strerror_r(errno, buf, sizeof(buf));
- (void)fprintf(stderr, "%s%s%s\n", s, separator, buf);
-}
diff --git a/StdLib/LibC/Stdio/printf.c b/StdLib/LibC/Stdio/printf.c
deleted file mode 100644
index 2a36757b08..0000000000
--- a/StdLib/LibC/Stdio/printf.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/** @file
- Implementation of printf as declared in <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: printf.c,v 1.11 2003/08/07 16:43:29 agc Exp
- printf.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-int
-printf(char const *fmt, ...)
-{
- int ret;
- va_list ap;
-
- va_start(ap, fmt);
- ret = vfprintf(stdout, fmt, ap);
- va_end(ap);
- return (ret);
-}
diff --git a/StdLib/LibC/Stdio/putc.c b/StdLib/LibC/Stdio/putc.c
deleted file mode 100644
index 25f49f8646..0000000000
--- a/StdLib/LibC/Stdio/putc.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/** @file
- Implementation of a subroutine version of the macro putc,
- as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: putc.c,v 1.11 2003/08/07 16:43:29 agc Exp
- putc.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-/*
- * putc.
- */
-#undef putc
-#undef putc_unlocked
-
-int
-putc(int c, FILE *fp)
-{
- int r;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- FLOCKFILE(fp);
- r = __sputc(c, fp);
- FUNLOCKFILE(fp);
- return r;
-}
-
-int
-putc_unlocked(int c, FILE *fp)
-{
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- return (__sputc(c, fp));
-}
diff --git a/StdLib/LibC/Stdio/putchar.c b/StdLib/LibC/Stdio/putchar.c
deleted file mode 100644
index ac6edc888b..0000000000
--- a/StdLib/LibC/Stdio/putchar.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/** @file
- Implementation of a subroutine version of the macro putchar,
- as declared in <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: putchar.c,v 1.9 2003/08/07 16:43:29 agc Exp
- putchar.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-#undef putchar
-#undef putchar_unlocked
-
-/*
- * putchar
- */
-int
-putchar(int c)
-{
- FILE *fp = stdout;
- int r;
-
- FLOCKFILE(fp);
- r = __sputc(c, fp);
- FUNLOCKFILE(fp);
- return r;
-}
-
-int
-putchar_unlocked(int c)
-{
- return (__sputc(c, stdout));
-}
diff --git a/StdLib/LibC/Stdio/puts.c b/StdLib/LibC/Stdio/puts.c
deleted file mode 100644
index 3585bb7f06..0000000000
--- a/StdLib/LibC/Stdio/puts.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/** @file
- Implementation of puts as declared in <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: puts.c,v 1.15 2006/03/17 02:25:23 chris Exp
- puts.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include "fvwrite.h"
-#include "reentrant.h"
-#include "local.h"
-
-/*
- * Write the given string to stdout, appending a newline.
- */
-int
-puts(char const *s)
-{
- size_t c;
- struct __suio uio;
- struct __siov iov[2];
- int r;
-
- _DIAGASSERT(s != NULL);
-
- if (s == NULL)
- s = "(null)";
-
- c = strlen(s);
-
- iov[0].iov_base = __UNCONST(s);
- iov[0].iov_len = c;
- iov[1].iov_base = __UNCONST("\n");
- iov[1].iov_len = 1;
- uio.uio_resid = (int)(c + 1);
- uio.uio_iov = &iov[0];
- uio.uio_iovcnt = 2;
- FLOCKFILE(stdout);
- r = __sfvwrite(stdout, &uio);
- FUNLOCKFILE(stdout);
- return (r ? EOF : '\n');
-}
diff --git a/StdLib/LibC/Stdio/putwc.c b/StdLib/LibC/Stdio/putwc.c
deleted file mode 100644
index 84354f1d92..0000000000
--- a/StdLib/LibC/Stdio/putwc.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* $NetBSD: putwc.c,v 1.4 2005/06/12 05:21:27 lukem Exp $ */
-
-/*-
- * Copyright (c)2001 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Citrus$
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: putwc.c,v 1.4 2005/06/12 05:21:27 lukem Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <stdio.h>
-#include <wchar.h>
-
-/*
- * A subroutine version of the macro putwc.
- */
-#undef putwc
-
-wint_t
-putwc(wchar_t wc, FILE *fp)
-{
-
- return fputwc(wc, fp);
-}
diff --git a/StdLib/LibC/Stdio/putwchar.c b/StdLib/LibC/Stdio/putwchar.c
deleted file mode 100644
index 8bf91c5a88..0000000000
--- a/StdLib/LibC/Stdio/putwchar.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* $NetBSD: putwchar.c,v 1.4 2005/06/12 05:21:27 lukem Exp $ */
-
-/*-
- * Copyright (c)2001 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Citrus$
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: putwchar.c,v 1.4 2005/06/12 05:21:27 lukem Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <stdio.h>
-#include <wchar.h>
-
-/*
- * A subroutine version of the macro putwchar.
- */
-#undef putwchar
-
-wint_t
-putwchar(wchar_t wc)
-{
-
- return fputwc(wc, stdout);
-}
diff --git a/StdLib/LibC/Stdio/refill.c b/StdLib/LibC/Stdio/refill.c
deleted file mode 100644
index a69f022dee..0000000000
--- a/StdLib/LibC/Stdio/refill.c
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: refill.c,v 1.13 2003/08/07 16:43:30 agc Exp
- refill.c 8.1 (Berkeley) 6/4/93
-*/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "reentrant.h"
-#include "local.h"
-
-#ifdef _REENTRANT
-extern rwlock_t __sfp_lock;
-#endif
-
-static int lflush(FILE *);
-
-static int
-lflush(FILE *fp)
-{
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- if ((fp->_flags & (__SLBF|__SWR)) == (__SLBF|__SWR))
- return (__sflush(fp));
- return (0);
-}
-
-/*
- * Refill a stdio buffer.
- * Return EOF on eof or error, 0 otherwise.
- */
-int
-__srefill(FILE *fp)
-{
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- /* make sure stdio is set up */
- if (!__sdidinit)
- __sinit();
-
- fp->_r = 0; /* largely a convenience for callers */
-
- /* SysV does not make this test; take it out for compatibility */
- if (fp->_flags & __SEOF) {
- return (EOF);
- }
-
- /* if not already reading, have to be reading and writing */
- if ((fp->_flags & __SRD) == 0) {
- if ((fp->_flags & __SRW) == 0) {
- errno = EBADF;
- fp->_flags |= __SERR; //<dvm> Allows differentiation between errors and EOF
- return (EOF);
- }
- /* switch to reading */
- if (fp->_flags & __SWR) {
- if (__sflush(fp)) {
- return (EOF);
- }
- fp->_flags &= ~__SWR;
- fp->_w = 0;
- fp->_lbfsize = 0;
- }
- fp->_flags |= __SRD;
- } else {
- /*
- * We were reading. If there is an ungetc buffer,
- * we must have been reading from that. Drop it,
- * restoring the previous buffer (if any). If there
- * is anything in that buffer, return.
- */
- if (HASUB(fp)) {
- FREEUB(fp);
- if ((fp->_r = fp->_ur) != 0) {
- fp->_p = fp->_up;
- return (0);
- }
- }
- }
-
- if (fp->_bf._base == NULL)
- __smakebuf(fp);
-
- /*
- * Before reading from a line buffered or unbuffered file,
- * flush all line buffered output files, per the ANSI C
- * standard.
- */
- if (fp->_flags & (__SLBF|__SNBF)) {
- rwlock_rdlock(&__sfp_lock);
- (void) _fwalk(lflush);
- rwlock_unlock(&__sfp_lock);
- }
- fp->_p = fp->_bf._base;
- fp->_r = (*fp->_read)(fp->_cookie, (char *)fp->_p, fp->_bf._size);
- fp->_flags &= ~__SMOD; /* buffer contents are again pristine */
- if (fp->_r <= 0) {
- if (fp->_r == 0)
- fp->_flags |= __SEOF;
- else {
- fp->_r = 0;
- fp->_flags |= __SERR;
- }
- return (EOF);
- }
- return (0);
-}
diff --git a/StdLib/LibC/Stdio/remove.c b/StdLib/LibC/Stdio/remove.c
deleted file mode 100644
index 7f53f95be1..0000000000
--- a/StdLib/LibC/Stdio/remove.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/** @file
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- remove.c 8.1 (Berkeley) 6/4/93
- NetBSD: remove.c,v 1.13 2003/08/07 16:43:30 agc Exp
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <unistd.h>
-
-int
-remove(const char *file)
-{
- struct stat sb;
-
- _DIAGASSERT(file != NULL);
-
- if (lstat(file, &sb) < 0)
- return (-1);
-
- /*
- * The file system may prohibit using unlink(2) on directories,
- * so always use rmdir(2) in that case.
- */
- if (S_ISDIR(sb.st_mode))
- return (rmdir(file));
- else
- return (unlink(file));
-}
diff --git a/StdLib/LibC/Stdio/rewind.c b/StdLib/LibC/Stdio/rewind.c
deleted file mode 100644
index 5d1042152b..0000000000
--- a/StdLib/LibC/Stdio/rewind.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/** @file
- Implementation of rewind as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: rewind.c,v 1.13 2003/08/07 16:43:30 agc Exp
- rewind.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-void
-rewind(FILE *fp)
-{
- _DIAGASSERT(fp != NULL);
-
- if(fp != NULL) {
- FLOCKFILE(fp);
- (void) fseek(fp, 0L, SEEK_SET);
- __sclearerr(fp);
- FUNLOCKFILE(fp);
- }
-}
diff --git a/StdLib/LibC/Stdio/rget.c b/StdLib/LibC/Stdio/rget.c
deleted file mode 100644
index 74f73dcac4..0000000000
--- a/StdLib/LibC/Stdio/rget.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/** @file
- Internal function to refill the buffer when getc() empties it.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: rget.c,v 1.12 2003/08/07 16:43:30 agc Exp
- rget.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-/*
- * Handle getc() when the buffer ran out:
- * Refill, then return the first character
- * in the newly-filled buffer.
- */
-int
-__srget(FILE *fp)
-{
- _DIAGASSERT(fp != NULL);
-
- if(fp != NULL) {
- _SET_ORIENTATION(fp, -1);
- if (__srefill(fp) == 0) {
- fp->_r--;
- return (*fp->_p++);
- }
- }
- return (EOF);
-}
diff --git a/StdLib/LibC/Stdio/scanf.c b/StdLib/LibC/Stdio/scanf.c
deleted file mode 100644
index 1962fbaf74..0000000000
--- a/StdLib/LibC/Stdio/scanf.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* $NetBSD: scanf.c,v 1.12 2003/08/07 16:43:31 agc Exp $ */
-
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)scanf.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: scanf.c,v 1.12 2003/08/07 16:43:31 agc Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <assert.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-#include "reentrant.h"
-#include "local.h"
-
-int
-scanf(char const *fmt, ...)
-{
- int ret;
- va_list ap;
-
- _DIAGASSERT(fmt != NULL);
-
- va_start(ap, fmt);
- ret = __svfscanf(stdin, fmt, ap);
- va_end(ap);
- return (ret);
-}
diff --git a/StdLib/LibC/Stdio/setbuf.c b/StdLib/LibC/Stdio/setbuf.c
deleted file mode 100644
index 7484832d50..0000000000
--- a/StdLib/LibC/Stdio/setbuf.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/** @file
- Implementation of setbuf as declared in <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: setbuf.c,v 1.9 2003/08/07 16:43:31 agc Exp
- setbuf.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-void
-setbuf(FILE *fp, char *buf)
-{
-
- _DIAGASSERT(fp != NULL);
- /* buf may be NULL */
-
- (void) setvbuf(fp, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
-}
diff --git a/StdLib/LibC/Stdio/setbuffer.c b/StdLib/LibC/Stdio/setbuffer.c
deleted file mode 100644
index 761f67f88c..0000000000
--- a/StdLib/LibC/Stdio/setbuffer.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: setbuffer.c,v 1.10 2003/08/07 16:43:31 agc Exp
- setbuffer.c 8.1 (Berkeley) 6/4/93
-*/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-
-void
-setbuffer(fp, buf, size)
- FILE *fp;
- char *buf;
- int size;
-{
-
- _DIAGASSERT(fp != NULL);
- /* buf may be NULL */
-
- (void)setvbuf(fp, buf, buf ? _IOFBF : _IONBF, (size_t)size);
-}
-
-/*
- * set line buffering
- */
-int
-setlinebuf(fp)
- FILE *fp;
-{
-
- _DIAGASSERT(fp != NULL);
-
- return (setvbuf(fp, (char *)NULL, _IOLBF, (size_t)0));
-}
diff --git a/StdLib/LibC/Stdio/setvbuf.c b/StdLib/LibC/Stdio/setvbuf.c
deleted file mode 100644
index 9e01ea9dc1..0000000000
--- a/StdLib/LibC/Stdio/setvbuf.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/** @file
- Implementation of setvbuf as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: setvbuf.c,v 1.17 2003/08/07 16:43:31 agc Exp
- setvbuf.c 8.2 (Berkeley) 11/16/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include "reentrant.h"
-#include "local.h"
-#include <MainData.h>
-
-/*
- * Set one of the three kinds of buffering, optionally including
- * a buffer.
- */
-int
-setvbuf(FILE *fp, char *buf, int mode, size_t size)
-{
- int ret, flags;
- size_t iosize;
- int ttyflag;
-
- _DIAGASSERT(fp != NULL);
- /* buf may be NULL */
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- /*
- * Verify arguments. The `int' limit on `size' is due to this
- * particular implementation. Note, buf and size are ignored
- * when setting _IONBF.
- */
- if (mode != _IONBF)
- if ((mode != _IOFBF && mode != _IOLBF) || (int)size < 0)
- return (-1);
-
- FLOCKFILE(fp);
- /*
- * Write current buffer, if any. Discard unread input (including
- * ungetc data), cancel line buffering, and free old buffer if
- * malloc()ed. We also clear any eof condition, as if this were
- * a seek.
- */
- ret = 0;
- (void)__sflush(fp);
- if (HASUB(fp))
- FREEUB(fp);
- WCIO_FREE(fp);
- fp->_r = fp->_lbfsize = 0;
- flags = fp->_flags;
- if (flags & __SMBF)
- free((void *)fp->_bf._base);
- flags &= ~(__SLBF | __SNBF | __SMBF | __SOPT | __SNPT | __SEOF);
-
- /* If setting unbuffered mode, skip all the hard work. */
- if (mode == _IONBF)
- goto nbf;
-
- /*
- * Find optimal I/O size for seek optimization. This also returns
- * a `tty flag' to suggest that we check isatty(fd), but we do not
- * care since our caller told us how to buffer.
- */
- flags |= __swhatbuf(fp, &iosize, &ttyflag);
- if (size == 0) {
- buf = NULL; /* force local allocation */
- size = iosize;
- }
-
- /* Allocate buffer if needed. */
- if (buf == NULL) {
- if ((buf = malloc(size)) == NULL) {
- /*
- * Unable to honor user's request. We will return
- * failure, but try again with file system size.
- */
- ret = -1;
- if (size != iosize) {
- size = iosize;
- buf = malloc(size);
- }
- }
- if (buf == NULL) {
- /* No luck; switch to unbuffered I/O. */
-nbf:
- fp->_flags = (unsigned short)(flags | __SNBF);
- fp->_w = 0;
- fp->_bf._base = fp->_p = fp->_nbuf;
- fp->_bf._size = 1;
- FUNLOCKFILE(fp);
- return (ret);
- }
- flags |= __SMBF;
- }
-
- /*
- * Kill any seek optimization if the buffer is not the
- * right size.
- *
- * SHOULD WE ALLOW MULTIPLES HERE (i.e., ok iff (size % iosize) == 0)?
- */
- if (size != iosize)
- flags |= __SNPT;
-
- /*
- * Fix up the FILE fields, and set gMD->cleanup for output flush on
- * exit (since we are buffered in some way).
- */
- if (mode == _IOLBF)
- flags |= __SLBF;
- fp->_flags = (unsigned short)flags;
- fp->_bf._base = fp->_p = (unsigned char *)buf;
- fp->_bf._size = (int)size;
- /* fp->_lbfsize is still 0 */
- if (flags & __SWR) {
- /*
- * Begin or continue writing: see __swsetup(). Note
- * that __SNBF is impossible (it was handled earlier).
- */
- if (flags & __SLBF) {
- fp->_w = 0;
- fp->_lbfsize = -fp->_bf._size;
- } else
- fp->_w = (int)size;
- } else {
- /* begin/continue reading, or stay in intermediate state */
- fp->_w = 0;
- }
- gMD->cleanup = _cleanup;
-
- FUNLOCKFILE(fp);
- return (ret);
-}
diff --git a/StdLib/LibC/Stdio/snprintf.c b/StdLib/LibC/Stdio/snprintf.c
deleted file mode 100644
index c92641508c..0000000000
--- a/StdLib/LibC/Stdio/snprintf.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/** @file
- Implementation of internal snprintf function for <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: snprintf.c,v 1.20 2005/02/09 21:35:47 kleink Exp
- snprintf.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include "namespace.h"
-
-#include <assert.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-#include "reentrant.h"
-#include "local.h"
-
-#ifdef __weak_alias
-__weak_alias(snprintf,_snprintf)
-#endif
-
-int
-snprintf(char *str, size_t n, char const *fmt, ...)
-{
- int ret;
- va_list ap;
- FILE f;
- struct __sfileext fext;
- unsigned char dummy[1];
-
- _DIAGASSERT(n == 0 || str != NULL);
- _DIAGASSERT(fmt != NULL);
-
- if ((int)n < 0) {
- errno = EINVAL;
- return (-1);
- }
- va_start(ap, fmt);
- _FILEEXT_SETUP(&f, &fext);
- f._file = -1;
- f._flags = __SWR | __SSTR;
- if (n == 0) {
- f._bf._base = f._p = dummy;
- f._bf._size = f._w = 0;
- } else {
- f._bf._base = f._p = (unsigned char *)str;
- f._bf._size = f._w = (int)(n - 1);
- }
- ret = __vfprintf_unlocked(&f, fmt, ap);
- *f._p = 0;
- va_end(ap);
- return (ret);
-}
diff --git a/StdLib/LibC/Stdio/snprintf_ss.c b/StdLib/LibC/Stdio/snprintf_ss.c
deleted file mode 100644
index e5047b15ab..0000000000
--- a/StdLib/LibC/Stdio/snprintf_ss.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* $NetBSD: snprintf_ss.c,v 1.3.2.1 2007/05/07 19:49:08 pavel Exp $ */
-
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)snprintf.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: snprintf_ss.c,v 1.3.2.1 2007/05/07 19:49:08 pavel Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <assert.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-#include "reentrant.h"
-#include "extern.h"
-#include "local.h"
-
-#ifdef __weak_alias
-__weak_alias(snprintf_ss,_snprintf_ss)
-#endif
-
-int
-snprintf_ss(char *str, size_t n, char const *fmt, ...)
-{
- va_list ap;
- int ret;
-
- va_start(ap, fmt);
- ret = vsnprintf_ss(str, n, fmt, ap);
- va_end(ap);
- return ret;
-}
diff --git a/StdLib/LibC/Stdio/sprintf.c b/StdLib/LibC/Stdio/sprintf.c
deleted file mode 100644
index 6861b4355e..0000000000
--- a/StdLib/LibC/Stdio/sprintf.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/** @file
- Implementation of sprintf as declared in <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: sprintf.c,v 1.14 2005/02/09 21:35:47 kleink Exp
- sprintf.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-#include "reentrant.h"
-#include "local.h"
-
-int
-sprintf(char *str, char const *fmt, ...)
-{
- int ret;
- va_list ap;
- FILE f;
- struct __sfileext fext;
-
- _DIAGASSERT(str != NULL);
- _DIAGASSERT(fmt != NULL);
-
- _FILEEXT_SETUP(&f, &fext);
- f._file = -1;
- f._flags = __SWR | __SSTR;
- f._bf._base = f._p = (unsigned char *)str;
- f._bf._size = f._w = INT_MAX;
- va_start(ap, fmt);
- ret = __vfprintf_unlocked(&f, fmt, ap);
- va_end(ap);
- *f._p = 0;
- return (ret);
-}
diff --git a/StdLib/LibC/Stdio/sscanf.c b/StdLib/LibC/Stdio/sscanf.c
deleted file mode 100644
index c9fb87aaa5..0000000000
--- a/StdLib/LibC/Stdio/sscanf.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/** @file
- Implementation of sscanf as declared in <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: sscanf.c,v 1.16 2005/11/29 03:12:00 christos Exp
- sscanf.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "reentrant.h"
-#include "local.h"
-
-static int eofread(void *, char *, int);
-
-/* ARGSUSED */
-static int
-eofread(void *cookie, char *buf, int len)
-{
-
- return (0);
-}
-
-int
-sscanf(const char *str, char const *fmt, ...)
-{
- int ret;
- va_list ap;
- FILE f;
- struct __sfileext fext;
-
- _DIAGASSERT(str != NULL);
- _DIAGASSERT(fmt != NULL);
-
- _FILEEXT_SETUP(&f, &fext);
- f._flags = __SRD;
- f._bf._base = f._p = __UNCONST(str);
- f._bf._size = f._r = (int)strlen(str);
- f._read = eofread;
- _UB(&f)._base = NULL;
- f._lb._base = NULL;
- va_start(ap, fmt);
- ret = __svfscanf_unlocked(&f, fmt, ap);
- va_end(ap);
- return (ret);
-}
diff --git a/StdLib/LibC/Stdio/stdio.c b/StdLib/LibC/Stdio/stdio.c
deleted file mode 100644
index 7b5cc3862d..0000000000
--- a/StdLib/LibC/Stdio/stdio.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/** @file
- Small standard I/O/seek/close functions.
- These maintain the `known seek offset' for seek optimisation.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: stdio.c,v 1.13 2003/08/07 16:43:33 agc Exp
- stdio.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include "namespace.h"
-
-#include <assert.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include "reentrant.h"
-#include "local.h"
-
-int
-__sread(void *cookie, char *buf, int n)
-{
- FILE *fp = cookie;
- int ret;
-
- _DIAGASSERT(fp != NULL);
- _DIAGASSERT(buf != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- ret = (int)read(fp->_file, buf, (size_t)n);
- /* if the read succeeded, update the current offset */
- if (ret >= 0)
- fp->_offset += ret;
- else
- fp->_flags &= ~__SOFF; /* paranoia */
- return (ret);
-}
-
-int
-__swrite(void *cookie, char const *buf, int n)
-{
- FILE *fp = cookie;
-
- _DIAGASSERT(cookie != NULL);
- _DIAGASSERT(buf != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- if (fp->_flags & __SAPP)
- (void) lseek(fp->_file, (off_t)0, SEEK_END);
- fp->_flags &= ~__SOFF; /* in case FAPPEND mode is set */
- return (int)(write(fp->_file, (char *)buf, (size_t)n));
-}
-
-fpos_t
-__sseek(void *cookie, fpos_t offset, int whence)
-{
- FILE *fp = cookie;
- off_t ret;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- ret = lseek(fp->_file, (off_t)offset, whence);
- if (ret == -1L)
- fp->_flags &= ~__SOFF;
- else {
- fp->_flags |= __SOFF;
- fp->_offset = ret;
- }
- return (ret);
-}
-
-int
-__sclose(void *cookie)
-{
-
- _DIAGASSERT(cookie != NULL);
- if(cookie == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- return (close(((FILE *)cookie)->_file));
-}
diff --git a/StdLib/LibC/Stdio/swprintf.c b/StdLib/LibC/Stdio/swprintf.c
deleted file mode 100644
index d0f05612f6..0000000000
--- a/StdLib/LibC/Stdio/swprintf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- FreeBSD: src/lib/libc/stdio/swprintf.c,v 1.1 2002/09/21 13:00:30 tjr Exp
- NetBSD: swprintf.c,v 1.1 2005/05/14 23:51:02 christos Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <wchar.h>
-
-int
-swprintf(wchar_t * __restrict s, size_t n, const wchar_t * __restrict fmt, ...)
-{
- int ret;
- va_list ap;
-
- va_start(ap, fmt);
- ret = vswprintf(s, n, fmt, ap);
- va_end(ap);
-
- return (ret);
-}
diff --git a/StdLib/LibC/Stdio/swscanf.c b/StdLib/LibC/Stdio/swscanf.c
deleted file mode 100644
index 03b90e827a..0000000000
--- a/StdLib/LibC/Stdio/swscanf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- FreeBSD: src/lib/libc/stdio/swscanf.c,v 1.1 2002/09/23 12:40:06 tjr Exp
- NetBSD: swscanf.c,v 1.1 2005/05/14 23:51:02 christos Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <wchar.h>
-
-int
-swscanf(const wchar_t * __restrict str, const wchar_t * __restrict fmt, ...)
-{
- va_list ap;
- int r;
-
- va_start(ap, fmt);
- r = vswscanf(str, fmt, ap);
- va_end(ap);
-
- return (r);
-}
diff --git a/StdLib/LibC/Stdio/tempnam.c b/StdLib/LibC/Stdio/tempnam.c
deleted file mode 100644
index 94d2655c8a..0000000000
--- a/StdLib/LibC/Stdio/tempnam.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/** @file
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1988, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- tempnam.c 8.1 (Berkeley) 6/4/93
- NetBSD: tempnam.c,v 1.19 2005/07/27 13:23:07 drochner Exp
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include "namespace.h"
-#include <sys/param.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <paths.h>
-#include "reentrant.h"
-#include "local.h"
-
-__warn_references(tempnam,
- "warning: tempnam() possibly used unsafely, use mkstemp() or mkdtemp()")
-
-static const char *
-trailsl(const char *f)
-{
- const char *s = f;
- while (*s)
- s++;
- return (f != s && s[-1] == '/') ? "" : "/";
-}
-
-static char *
-gentemp(char *name, size_t len, const char *tmp, const char *pfx)
-{
- (void)snprintf(name, len, "%s%s%sXXXX", tmp, trailsl(tmp), pfx);
- return _mktemp(name);
-}
-
-char *
-tempnam(const char *dir, const char *pfx)
-{
- int sverrno;
- char *name, *f;
- const char *tmp;
-
- if ((name = malloc((size_t)MAXPATHLEN)) == NULL)
- return NULL;
-
- if (!pfx)
- pfx = "tmp.";
-
- if ((tmp = getenv("TMPDIR")) != NULL &&
- (f = gentemp(name, (size_t)MAXPATHLEN, tmp, pfx)) != NULL)
- return f;
-
- if (dir != NULL &&
- (f = gentemp(name, (size_t)MAXPATHLEN, dir, pfx)) != NULL)
- return f;
-
- //if ((f = gentemp(name, (size_t)MAXPATHLEN, P_tmpdir, pfx)) != NULL)
- // return f;
-
- if ((f = gentemp(name, (size_t)MAXPATHLEN, _PATH_TMP, pfx)) != NULL)
- return f;
-
- sverrno = errno;
- free(name);
- errno = sverrno;
- return(NULL);
-}
diff --git a/StdLib/LibC/Stdio/tmpfile.c b/StdLib/LibC/Stdio/tmpfile.c
deleted file mode 100644
index d93787684b..0000000000
--- a/StdLib/LibC/Stdio/tmpfile.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/** @file
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- tmpfile.c 8.1 (Berkeley) 6/4/93
- NetBSD: tmpfile.c,v 1.11 2003/08/07 16:43:33 agc Exp
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include "namespace.h"
-#include <sys/types.h>
-#include <signal.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <paths.h>
-#include <unistd.h>
-
-#define TRAILER "tmp.XXXX"
-
-FILE *
-tmpfile()
-{
- //sigset_t set, oset;
- FILE *fp;
- int fd, sverrno;
- char buf[sizeof(_PATH_TMP) + sizeof(TRAILER)];
-
- (void)memcpy(buf, _PATH_TMP, sizeof(_PATH_TMP) - 1);
- (void)memcpy(buf + sizeof(_PATH_TMP) - 1, TRAILER, sizeof(TRAILER));
-
- //sigfillset(&set);
- //(void)sigprocmask(SIG_BLOCK, &set, &oset);
-
- fd = mkstemp(buf);
- if (fd != -1) {
- /* Changed from unlink(buf) because of differences between the behavior
- of Unix and UEFI file systems.
- */
- (void)DeleteOnClose(fd);
- }
-
- //(void)sigprocmask(SIG_SETMASK, &oset, NULL);
-
- if (fd == -1)
- return (NULL);
-
- if ((fp = fdopen(fd, "w+")) == NULL) {
- sverrno = errno;
- (void)close(fd);
- errno = sverrno;
- return (NULL);
- }
- return (fp);
-}
diff --git a/StdLib/LibC/Stdio/tmpnam.c b/StdLib/LibC/Stdio/tmpnam.c
deleted file mode 100644
index 95c6edd04b..0000000000
--- a/StdLib/LibC/Stdio/tmpnam.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/** @file
- Implementation of tmpnam as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: tmpnam.c,v 1.14 2003/08/07 16:43:33 agc Exp
- tmpnam.c 8.3 (Berkeley) 3/28/94
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include "namespace.h"
-#include <sys/types.h>
-#include <paths.h>
-#include <stdio.h>
-#include <unistd.h>
-#include "reentrant.h"
-#include "local.h"
-
-__warn_references(tmpnam,"warning: tmpnam() possibly used unsafely, use mkstemp() or mkdtemp()")
-
-char *
-tmpnam(char *s)
-{
- static long unsigned int tmpcount = 0; // Must be long to satisfy the %lu in snprintf below.
- static char buf[L_tmpnam];
-
- if (s == NULL)
- s = buf;
- (void)snprintf(s, L_tmpnam, "%stmp_%lu_XXXX", _PATH_TMP, tmpcount);
- ++tmpcount;
- return (_mktemp(s));
-}
diff --git a/StdLib/LibC/Stdio/ungetc.c b/StdLib/LibC/Stdio/ungetc.c
deleted file mode 100644
index d8e1f3afc6..0000000000
--- a/StdLib/LibC/Stdio/ungetc.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/** @file
- Implementation of ungetc as declared in <stdio.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: ungetc.c,v 1.14 2003/08/07 16:43:34 agc Exp
- ungetc.c 8.2 (Berkeley) 11/3/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "reentrant.h"
-#include "local.h"
-
-static int __submore(FILE *);
-/*
- * Expand the ungetc buffer `in place'. That is, adjust fp->_p when
- * the buffer moves, so that it points the same distance from the end,
- * and move the bytes in the buffer around as necessary so that they
- * are all at the end (stack-style).
- */
-static int
-__submore(FILE *fp)
-{
- int i;
- unsigned char *p;
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- if (_UB(fp)._base == fp->_ubuf) {
- /*
- * Get a new buffer (rather than expanding the old one).
- */
- if ((p = malloc((size_t)BUFSIZ)) == NULL)
- return (EOF);
- _UB(fp)._base = p;
- _UB(fp)._size = BUFSIZ;
- p += BUFSIZ - sizeof(fp->_ubuf);
- for (i = sizeof(fp->_ubuf); --i >= 0;)
- p[i] = fp->_ubuf[i];
- fp->_p = p;
- return (0);
- }
- i = _UB(fp)._size;
- p = realloc(_UB(fp)._base, (size_t)(i << 1));
- if (p == NULL)
- return (EOF);
- /* no overlap (hence can use memcpy) because we doubled the size */
- (void)memcpy((void *)(p + i), (void *)p, (size_t)i);
- fp->_p = p + i;
- _UB(fp)._base = p;
- _UB(fp)._size = i << 1;
- return (0);
-}
-
-int
-ungetc(int c, FILE *fp)
-{
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- if (c == EOF)
- return (EOF);
- if (!__sdidinit)
- __sinit();
- FLOCKFILE(fp);
- _SET_ORIENTATION(fp, -1);
- if ((fp->_flags & __SRD) == 0) {
- /*
- * Not already reading: no good unless reading-and-writing.
- * Otherwise, flush any current write stuff.
- */
- if ((fp->_flags & __SRW) == 0) {
- FUNLOCKFILE(fp);
- return (EOF);
- }
- if (fp->_flags & __SWR) {
- if (__sflush(fp)) {
- FUNLOCKFILE(fp);
- return (EOF);
- }
- fp->_flags &= ~__SWR;
- fp->_w = 0;
- fp->_lbfsize = 0;
- }
- fp->_flags |= __SRD;
- }
- c = (unsigned char)c;
-
- /*
- * If we are in the middle of ungetc'ing, just continue.
- * This may require expanding the current ungetc buffer.
- */
- if (HASUB(fp)) {
- if (fp->_r >= _UB(fp)._size && __submore(fp)) {
- FUNLOCKFILE(fp);
- return (EOF);
- }
- *--fp->_p = (unsigned char)c;
- fp->_r++;
- FUNLOCKFILE(fp);
- return (c);
- }
- fp->_flags &= ~__SEOF;
-
- /*
- * If we can handle this by simply backing up, do so,
- * but never replace the original character.
- * (This makes sscanf() work when scanning `const' data.)
- */
- if (fp->_bf._base != NULL && fp->_p > fp->_bf._base &&
- fp->_p[-1] == c) {
- fp->_p--;
- fp->_r++;
- FUNLOCKFILE(fp);
- return (c);
- }
-
- /*
- * Create an ungetc buffer.
- * Initially, we will use the `reserve' buffer.
- */
- fp->_ur = fp->_r;
- fp->_up = fp->_p;
- _UB(fp)._base = fp->_ubuf;
- _UB(fp)._size = sizeof(fp->_ubuf);
- fp->_ubuf[sizeof(fp->_ubuf) - 1] = (unsigned char)c;
- fp->_p = &fp->_ubuf[sizeof(fp->_ubuf) - 1];
- fp->_r = 1;
- FUNLOCKFILE(fp);
- return (c);
-}
diff --git a/StdLib/LibC/Stdio/ungetwc.c b/StdLib/LibC/Stdio/ungetwc.c
deleted file mode 100644
index 8155043cf7..0000000000
--- a/StdLib/LibC/Stdio/ungetwc.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*-
- * Copyright (c)2001 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Citrus$
-
- NetBSD: ungetwc.c,v 1.3 2005/06/12 05:21:27 lukem Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <wchar.h>
-#include "reentrant.h"
-#include "local.h"
-
-wint_t
-ungetwc(wint_t wc, FILE *fp)
-{
- struct wchar_io_data *wcio;
-
- _DIAGASSERT(fp);
-
- if (wc == WEOF)
- return WEOF;
-
- FLOCKFILE(fp);
- _SET_ORIENTATION(fp, 1);
- /*
- * XXX since we have no way to transform a wchar string to
- * a char string in reverse order, we can't use ungetc.
- */
- /* XXX should we flush ungetc buffer? */
-
- wcio = WCIO_GET(fp);
- if (wcio == 0) {
- FUNLOCKFILE(fp);
- errno = ENOMEM; /* XXX */
- return WEOF;
- }
-
- if (wcio->wcio_ungetwc_inbuf >= WCIO_UNGETWC_BUFSIZE) {
- FUNLOCKFILE(fp);
- return WEOF;
- }
-
- wcio->wcio_ungetwc_buf[wcio->wcio_ungetwc_inbuf++] = (wchar_t)wc;
- __sclearerr(fp);
- FUNLOCKFILE(fp);
-
- return wc;
-}
diff --git a/StdLib/LibC/Stdio/vasprintf.c b/StdLib/LibC/Stdio/vasprintf.c
deleted file mode 100644
index 3a36468b49..0000000000
--- a/StdLib/LibC/Stdio/vasprintf.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* $NetBSD: vasprintf.c,v 1.10 2005/02/09 21:35:47 kleink Exp $ */
-
-/*
- * Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: vasprintf.c,v 1.10 2005/02/09 21:35:47 kleink Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "reentrant.h"
-#include "local.h"
-
-int
-vasprintf(str, fmt, ap)
- char **str;
- const char *fmt;
- _BSD_VA_LIST_ ap;
-{
- int ret;
- FILE f;
- struct __sfileext fext;
- unsigned char *_base;
-
- _DIAGASSERT(str != NULL);
- _DIAGASSERT(fmt != NULL);
-
- _FILEEXT_SETUP(&f, &fext);
- f._file = -1;
- f._flags = __SWR | __SSTR | __SALC;
- f._bf._base = f._p = (unsigned char *)malloc(128);
- if (f._bf._base == NULL)
- goto err;
- f._bf._size = f._w = 127; /* Leave room for the NUL */
- ret = __vfprintf_unlocked(&f, fmt, ap);
- if (ret == -1)
- goto err;
- *f._p = '\0';
- _base = realloc(f._bf._base, (size_t)(ret + 1));
- if (_base == NULL)
- goto err;
- *str = (char *)_base;
- return (ret);
-
-err:
- if (f._bf._base)
- free(f._bf._base);
- *str = NULL;
- errno = ENOMEM;
- return (-1);
-}
diff --git a/StdLib/LibC/Stdio/vfprintf.c b/StdLib/LibC/Stdio/vfprintf.c
deleted file mode 100644
index 8f5c649942..0000000000
--- a/StdLib/LibC/Stdio/vfprintf.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#define NARROW
-#include "vfwprintf.c"
diff --git a/StdLib/LibC/Stdio/vfscanf.c b/StdLib/LibC/Stdio/vfscanf.c
deleted file mode 100644
index 1e8c7f920a..0000000000
--- a/StdLib/LibC/Stdio/vfscanf.c
+++ /dev/null
@@ -1,1137 +0,0 @@
-/** @file
- Implementation of scanf internals for <stdio.h>.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: vfscanf.c,v 1.37.4.1 2007/05/07 19:49:08 pavel Exp
- FreeBSD: src/lib/libc/stdio/vfscanf.c,v 1.41 2007/01/09 00:28:07 imp Exp
- vfscanf.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include "namespace.h"
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <stdarg.h>
-#include <string.h>
-#include <sys/types.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include "reentrant.h"
-#include "local.h"
-
-#ifndef NO_FLOATING_POINT
-#include <locale.h>
-#endif
-
-/*
- * Provide an external name for vfscanf. Note, EFI uses the normal
- * namespace.h method; stdio routines explicitly use the internal name
- * __svfscanf.
- */
-#ifdef __weak_alias
-__weak_alias(vfscanf,__svfscanf)
-#endif
-
-#define BUF 513 /* Maximum length of numeric string. */
-
-/*
- * Flags used during conversion.
- */
-#define LONG 0x0001 /* l: long or double */
-#define LONGDBL 0x0002 /* L: long double */
-#define SHORT 0x0004 /* h: short */
-#define SUPPRESS 0x0008 /* *: suppress assignment */
-#define POINTER 0x0010 /* p: void * (as hex) */
-#define NOSKIP 0x0020 /* [ or c: do not skip blanks */
-#define LONGLONG 0x0400 /* ll: long long (+ deprecated q: quad) */
-#define INTMAXT 0x0800 /* j: intmax_t */
-#define PTRDIFFT 0x1000 /* t: ptrdiff_t */
-#define SIZET 0x2000 /* z: size_t */
-#define SHORTSHORT 0x4000 /* hh: char */
-#define UNSIGNED 0x8000 /* %[oupxX] conversions */
-
-/*
- * The following are used in integral conversions only:
- * SIGNOK, NDIGITS, PFXOK, and NZDIGITS
- */
-#define SIGNOK 0x00040 /* +/- is (still) legal */
-#define NDIGITS 0x00080 /* no digits detected */
-#define PFXOK 0x00100 /* 0x prefix is (still) legal */
-#define NZDIGITS 0x00200 /* no zero digits detected */
-#define HAVESIGN 0x10000 /* sign detected */
-
-/*
- * Conversion types.
- */
-#define CT_CHAR 0 /* %c conversion */
-#define CT_CCL 1 /* %[...] conversion */
-#define CT_STRING 2 /* %s conversion */
-#define CT_INT 3 /* %[dioupxX] conversion */
-#define CT_FLOAT 4 /* %[efgEFG] conversion */
-
-static const u_char *__sccl(char *, const u_char *);
-#ifndef NO_FLOATING_POINT
- static int parsefloat(FILE *, char *, char *);
-#endif
-
-int __scanfdebug = 0;
-
-#define __collate_load_error /*CONSTCOND*/0
-static int
-__collate_range_cmp(int c1, int c2)
-{
- static char s1[2] = { 0 };
- static char s2[2] = { 0 };
-
- s1[0] = (char)c1;
- s2[0] = (char)c2;
- return strcoll(s1, s2);
-}
-
-
-/*
- * __svfscanf - MT-safe version
- */
-int
-__svfscanf(FILE *fp, char const *fmt0, va_list ap)
-{
- int ret;
-
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
- FLOCKFILE(fp);
- ret = __svfscanf_unlocked(fp, fmt0, ap);
- FUNLOCKFILE(fp);
- return (ret);
-}
-
-/*
- * __svfscanf_unlocked - non-MT-safe version of __svfscanf
- */
-int
-__svfscanf_unlocked(FILE *fp, const char *fmt0, va_list ap)
-{
- const u_char *fmt = (const u_char *)fmt0;
- int c; /* character from format, or conversion */
- size_t width; /* field width, or 0 */
- char *p; /* points into all kinds of strings */
- size_t n; /* handy size_t */
- int flags; /* flags as defined above */
- char *p0; /* saves original value of p when necessary */
- int nassigned; /* number of fields assigned */
- int nconversions; /* number of conversions */
- int nread; /* number of characters consumed from fp */
- int base; /* base argument to conversion function */
- char ccltab[256]; /* character class table for %[...] */
- char buf[BUF]; /* buffer for numeric and mb conversions */
- wchar_t *wcp; /* handy wide character pointer */
- size_t nconv; /* length of multibyte sequence converted */
- static const mbstate_t initial = { 0 };
- mbstate_t mbs;
-
- /* `basefix' is used to avoid `if' tests in the integer scanner */
- static const short basefix[17] =
- { 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
-
- _DIAGASSERT(fp != NULL);
- _DIAGASSERT(fmt0 != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- _SET_ORIENTATION(fp, -1);
-
-//Print(L"%a( %d, \"%a\", ...)\n", __func__, fp->_file, fmt0);
- nassigned = 0;
- nconversions = 0;
- nread = 0;
- base = 0;
- for (;;) {
- c = (unsigned char)*fmt++;
- if (c == 0)
- return (nassigned);
- if (isspace(c)) {
- while ((fp->_r > 0 || __srefill(fp) == 0) &&
- isspace(*fp->_p))
- nread++, fp->_r--, fp->_p++;
- continue;
- }
-//Print(L"%a: %d\n", __func__, __LINE__);
- if (c != '%')
- goto literal;
- width = 0;
- flags = 0;
- /*
- * switch on the format. continue if done;
- * break once format type is derived.
- */
-again: c = *fmt++;
-//Print(L"%a: %d\n", __func__, __LINE__);
- switch (c) {
- case '%':
-literal:
-//Print(L"%a: %d\n", __func__, __LINE__);
- if (fp->_r <= 0 && __srefill(fp))
- goto input_failure;
- if (*fp->_p != c)
- goto match_failure;
- fp->_r--, fp->_p++;
- nread++;
- continue;
-
- case '*':
- flags |= SUPPRESS;
- goto again;
- case 'j':
- flags |= INTMAXT;
- goto again;
- case 'l':
- if (flags & LONG) {
- flags &= ~LONG;
- flags |= LONGLONG;
- } else
- flags |= LONG;
- goto again;
- case 'q':
- flags |= LONGLONG; /* not quite */
- goto again;
- case 't':
- flags |= PTRDIFFT;
- goto again;
- case 'z':
- flags |= SIZET;
- goto again;
- case 'L':
- flags |= LONGDBL;
- goto again;
- case 'h':
- if (flags & SHORT) {
- flags &= ~SHORT;
- flags |= SHORTSHORT;
- } else
- flags |= SHORT;
- goto again;
-
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- width = width * 10 + c - '0';
- goto again;
-
- /*
- * Conversions.
- */
- case 'd':
- c = CT_INT;
- base = 10;
- break;
-
- case 'i':
- c = CT_INT;
- base = 0;
- break;
-
- case 'o':
- c = CT_INT;
- flags |= UNSIGNED;
- base = 8;
- break;
-
- case 'u':
- c = CT_INT;
- flags |= UNSIGNED;
- base = 10;
- break;
-
- case 'X':
- case 'x':
- flags |= PFXOK; /* enable 0x prefixing */
- c = CT_INT;
- flags |= UNSIGNED;
- base = 16;
- break;
-
-#ifndef NO_FLOATING_POINT
- case 'A': case 'E': case 'F': case 'G':
- case 'a': case 'e': case 'f': case 'g':
- c = CT_FLOAT;
- break;
-#endif
-
- case 'S':
- flags |= LONG;
- /* FALLTHROUGH */
- case 's':
- c = CT_STRING;
- break;
-
- case '[':
- fmt = __sccl(ccltab, fmt);
- flags |= NOSKIP;
- c = CT_CCL;
- break;
-
- case 'C':
- flags |= LONG;
- /* FALLTHROUGH */
- case 'c':
- flags |= NOSKIP;
- c = CT_CHAR;
- break;
-
- case 'p': /* pointer format is like hex */
- flags |= POINTER | PFXOK;
- c = CT_INT; /* assumes sizeof(uintmax_t) */
- flags |= UNSIGNED; /* >= sizeof(uintptr_t) */
- base = 16;
- break;
-
- case 'n':
- nconversions++;
- if (flags & SUPPRESS) /* ??? */
- continue;
- if (flags & SHORTSHORT)
- *va_arg(ap, char *) = (char)nread;
- else if (flags & SHORT)
- *va_arg(ap, short *) = (short)nread;
- else if (flags & LONG)
- *va_arg(ap, long *) = nread;
- else if (flags & LONGLONG)
- *va_arg(ap, long long *) = nread;
- else if (flags & INTMAXT)
- *va_arg(ap, intmax_t *) = nread;
- else if (flags & SIZET)
- *va_arg(ap, size_t *) = nread;
- else if (flags & PTRDIFFT)
- *va_arg(ap, ptrdiff_t *) = nread;
- else
- *va_arg(ap, int *) = nread;
- continue;
-
- default:
- goto match_failure;
-
- /*
- * Disgusting backwards compatibility hack. XXX
- */
- case '\0': /* compat */
- return (EOF);
- }
-//Print(L"%a: %d\n", __func__, __LINE__);
-
- /*
- * We have a conversion that requires input.
- */
- if (fp->_r <= 0 && __srefill(fp))
- {
-//Print(L"%a: %d\n", __func__, __LINE__);
- goto input_failure;
- }
-
- /*
- * Consume leading white space, except for formats
- * that suppress this.
- */
- if ((flags & NOSKIP) == 0) {
- while (isspace(*fp->_p)) {
- nread++;
- if (--fp->_r > 0)
- fp->_p++;
- else if (__srefill(fp))
- {
-//Print(L"%a: %d\n", __func__, __LINE__);
- goto input_failure;
- }
- }
- /*
- * Note that there is at least one character in
- * the buffer, so conversions that do not set NOSKIP
- * ca no longer result in an input failure.
- */
- }
-
- /*
- * Do the conversion.
- */
-//Print(L"%a: %d\n", __func__, __LINE__);
- switch (c) {
-
- case CT_CHAR:
- /* scan arbitrary characters (sets NOSKIP) */
- if (width == 0)
- width = 1;
- if (flags & LONG) {
- if ((flags & SUPPRESS) == 0)
- wcp = va_arg(ap, wchar_t *);
- else
- wcp = NULL;
- n = 0;
- while (width != 0) {
- if (n == MB_CUR_MAX) {
- fp->_flags |= __SERR;
- goto input_failure;
- }
- buf[n++] = *fp->_p;
- fp->_p++;
- fp->_r--;
- mbs = initial;
- nconv = mbrtowc(wcp, buf, n, &mbs);
- if (nconv == (size_t)-1) {
- fp->_flags |= __SERR;
- goto input_failure;
- }
- if (nconv == 0 && !(flags & SUPPRESS))
- *wcp = L'\0';
- if (nconv != (size_t)-2) {
- nread += (int)n;
- width--;
- if (!(flags & SUPPRESS))
- wcp++;
- n = 0;
- }
- if (fp->_r <= 0 && __srefill(fp)) {
- if (n != 0) {
- fp->_flags |= __SERR;
- goto input_failure;
- }
- break;
- }
- }
- if (!(flags & SUPPRESS))
- nassigned++;
- } else if (flags & SUPPRESS) {
- size_t sum = 0;
- for (;;) {
- if ((n = fp->_r) < width) {
- sum += n;
- width -= n;
- fp->_p += n;
- if (__srefill(fp)) {
- if (sum == 0)
- goto input_failure;
- break;
- }
- } else {
- sum += width;
- fp->_r -= (int)width;
- fp->_p += width;
- break;
- }
- }
- nread += (int)sum;
- } else {
- size_t r = fread(va_arg(ap, char *), 1,
- width, fp);
-
- if (r == 0)
- goto input_failure;
- nread += (int)r;
- nassigned++;
- }
- nconversions++;
- break;
-
- case CT_CCL:
- /* scan a (nonempty) character class (sets NOSKIP) */
- if (width == 0)
- width = (size_t)~0; /* `infinity' */
- /* take only those things in the class */
- if (flags & LONG) {
- wchar_t twc;
- int nchars;
-
- if ((flags & SUPPRESS) == 0)
- wcp = va_arg(ap, wchar_t *);
- else
- wcp = &twc;
- n = 0;
- nchars = 0;
- while (width != 0) {
- if (n == MB_CUR_MAX) {
- fp->_flags |= __SERR;
- goto input_failure;
- }
- buf[n++] = *fp->_p;
- fp->_p++;
- fp->_r--;
- mbs = initial;
- nconv = mbrtowc(wcp, buf, n, &mbs);
- if (nconv == (size_t)-1) {
- fp->_flags |= __SERR;
- goto input_failure;
- }
- if (nconv == 0)
- *wcp = L'\0';
- if (nconv != (size_t)-2) {
- if (wctob(*wcp) != EOF &&
- !ccltab[wctob(*wcp)]) {
- while (n != 0) {
- n--;
- (void)ungetc(buf[n],
- fp);
- }
- break;
- }
- nread += (int)n;
- width--;
- if (!(flags & SUPPRESS))
- wcp++;
- nchars++;
- n = 0;
- }
- if (fp->_r <= 0 && __srefill(fp)) {
- if (n != 0) {
- fp->_flags |= __SERR;
- goto input_failure;
- }
- break;
- }
- }
- if (n != 0) {
- fp->_flags |= __SERR;
- goto input_failure;
- }
- n = nchars;
- if (n == 0)
- goto match_failure;
- if (!(flags & SUPPRESS)) {
- *wcp = L'\0';
- nassigned++;
- }
- } else if (flags & SUPPRESS) {
- n = 0;
- while (ccltab[*fp->_p]) {
- n++, fp->_r--, fp->_p++;
- if (--width == 0)
- break;
- if (fp->_r <= 0 && __srefill(fp)) {
- if (n == 0)
- goto input_failure;
- break;
- }
- }
- if (n == 0)
- goto match_failure;
- } else {
- p0 = p = va_arg(ap, char *);
- while (ccltab[*fp->_p]) {
- fp->_r--;
- *p++ = *fp->_p++;
- if (--width == 0)
- break;
- if (fp->_r <= 0 && __srefill(fp)) {
- if (p == p0)
- goto input_failure;
- break;
- }
- }
- n = p - p0;
- if (n == 0)
- goto match_failure;
- *p = 0;
- nassigned++;
- }
- nread += (int)n;
- nconversions++;
- break;
-
- case CT_STRING:
- /* like CCL, but zero-length string OK, & no NOSKIP */
- if (width == 0)
- width = (size_t)~0;
- if (flags & LONG) {
- wchar_t twc;
-
- if ((flags & SUPPRESS) == 0)
- wcp = va_arg(ap, wchar_t *);
- else
- wcp = &twc;
- n = 0;
- while (!isspace(*fp->_p) && width != 0) {
- if (n == MB_CUR_MAX) {
- fp->_flags |= __SERR;
- goto input_failure;
- }
- buf[n++] = *fp->_p;
- fp->_p++;
- fp->_r--;
- mbs = initial;
- nconv = mbrtowc(wcp, buf, n, &mbs);
- if (nconv == (size_t)-1) {
- fp->_flags |= __SERR;
- goto input_failure;
- }
- if (nconv == 0)
- *wcp = L'\0';
- if (nconv != (size_t)-2) {
- if (iswspace(*wcp)) {
- while (n != 0) {
- n--;
- (void)ungetc(buf[n],
- fp);
- }
- break;
- }
- nread += (int)n;
- width--;
- if (!(flags & SUPPRESS))
- wcp++;
- n = 0;
- }
- if (fp->_r <= 0 && __srefill(fp)) {
- if (n != 0) {
- fp->_flags |= __SERR;
- goto input_failure;
- }
- break;
- }
- }
- if (!(flags & SUPPRESS)) {
- *wcp = L'\0';
- nassigned++;
- }
- } else if (flags & SUPPRESS) {
- n = 0;
- while (!isspace(*fp->_p)) {
- n++, fp->_r--, fp->_p++;
- if (--width == 0)
- break;
- if (fp->_r <= 0 && __srefill(fp))
- break;
- }
- nread += (int)n;
- } else {
- p0 = p = va_arg(ap, char *);
- while (!isspace(*fp->_p)) {
- fp->_r--;
- *p++ = *fp->_p++;
- if (--width == 0)
- break;
- if (fp->_r <= 0 && __srefill(fp))
- break;
- }
- *p = 0;
- nread += (int)(p - p0);
- nassigned++;
- }
- nconversions++;
- continue;
-
- case CT_INT:
-//Print(L"%a: %d\n", __func__, __LINE__);
- /* scan an integer as if by the conversion function */
-#ifdef hardway
- if (width == 0 || width > sizeof(buf) - 1)
- width = sizeof(buf) - 1;
-#else
- /* size_t is unsigned, hence this optimisation */
- if (--width > sizeof(buf) - 2)
- width = sizeof(buf) - 2;
- width++;
-#endif
- flags |= SIGNOK | NDIGITS | NZDIGITS;
- for (p = buf; width; width--) {
- c = *fp->_p;
- /*
- * Switch on the character; `goto ok'
- * if we accept it as a part of number.
- */
- switch (c) {
-
- /*
- * The digit 0 is always legal, but is
- * special. For %i conversions, if no
- * digits (zero or nonzero) have been
- * scanned (only signs), we will have
- * base==0. In that case, we should set
- * it to 8 and enable 0x prefixing.
- * Also, if we have not scanned zero digits
- * before this, do not turn off prefixing
- * (someone else will turn it off if we
- * have scanned any nonzero digits).
- */
- case '0':
- if (base == 0) {
- base = 8;
- flags |= PFXOK;
- }
- if (flags & NZDIGITS)
- flags &= ~(SIGNOK|NZDIGITS|NDIGITS);
- else
- flags &= ~(SIGNOK|PFXOK|NDIGITS);
- goto ok;
-
- /* 1 through 7 always legal */
- case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- base = basefix[base];
- flags &= ~(SIGNOK | PFXOK | NDIGITS);
- goto ok;
-
- /* digits 8 and 9 ok iff decimal or hex */
- case '8': case '9':
- base = basefix[base];
- if (base <= 8)
- break; /* not legal here */
- flags &= ~(SIGNOK | PFXOK | NDIGITS);
- goto ok;
-
- /* letters ok iff hex */
- case 'A': case 'B': case 'C':
- case 'D': case 'E': case 'F':
- case 'a': case 'b': case 'c':
- case 'd': case 'e': case 'f':
- /* no need to fix base here */
- if (base <= 10)
- break; /* not legal here */
- flags &= ~(SIGNOK | PFXOK | NDIGITS);
- goto ok;
-
- /* sign ok only as first character */
- case '+': case '-':
- if (flags & SIGNOK) {
- flags &= ~SIGNOK;
- flags |= HAVESIGN;
- goto ok;
- }
- break;
-
- /*
- * x ok iff flag still set & 2nd char (or
- * 3rd char if we have a sign).
- */
- case 'x': case 'X':
- if (flags & PFXOK && p ==
- buf + 1 + !!(flags & HAVESIGN)) {
- base = 16; /* if %i */
- flags &= ~PFXOK;
- goto ok;
- }
- break;
- }
-
- /*
- * If we got here, c is not a legal character
- * for a number. Stop accumulating digits.
- */
- break;
- ok:
- /*
- * c is legal: store it and look at the next.
- */
- *p++ = (char)c;
- if (--fp->_r > 0)
- fp->_p++;
- else if (__srefill(fp))
- break; /* EOF */
- }
- /*
- * If we had only a sign, it is no good; push
- * back the sign. If the number ends in `x',
- * it was [sign] '0' 'x', so push back the x
- * and treat it as [sign] '0'.
- */
- if (flags & NDIGITS) {
- if (p > buf)
- (void)ungetc(*(u_char *)--p, fp);
- goto match_failure;
- }
- c = ((u_char *)p)[-1];
- if (c == 'x' || c == 'X') {
- --p;
- (void)ungetc(c, fp);
- }
- if ((flags & SUPPRESS) == 0) {
- //uintmax_t res;
- // Use a union to get around the truncation warnings.
- union {
- uintmax_t umax;
- intmax_t imax;
- void *vp;
- ptrdiff_t pdt;
- size_t sz;
- long long ll;
- long lo;
- int in;
- short hw;
- char ch;
- } res;
-
- *p = 0;
- if ((flags & UNSIGNED) == 0)
- res.imax = strtoimax(buf, (char **)NULL, base);
- else
- res.umax = strtoumax(buf, (char **)NULL, base);
- if (flags & POINTER)
- *va_arg(ap, void **) = res.vp;
- //(void *)((uintptr_t)res);
- else if (flags & SHORTSHORT)
- *va_arg(ap, char *) = res.ch;
- else if (flags & SHORT)
- *va_arg(ap, short *) = res.hw;
- else if (flags & LONG)
- *va_arg(ap, long *) = res.lo;
- else if (flags & LONGLONG)
- *va_arg(ap, long long *) = res.ll;
- else if (flags & INTMAXT)
- *va_arg(ap, intmax_t *) = res.imax;
- else if (flags & PTRDIFFT)
- *va_arg(ap, ptrdiff_t *) = res.pdt;
- //(ptrdiff_t)res;
- else if (flags & SIZET)
- *va_arg(ap, size_t *) = res.sz;
- else
- *va_arg(ap, int *) = res.in;
- nassigned++;
- }
- nread += (int)(p - buf);
- nconversions++;
-//Print(L"%a: %d\n", __func__, __LINE__);
- break;
-
-#ifndef NO_FLOATING_POINT
- case CT_FLOAT:
- /* scan a floating point number as if by strtod */
- if (width == 0 || width > sizeof(buf) - 1)
- width = sizeof(buf) - 1;
- if ((width = parsefloat(fp, buf, buf + width)) == 0)
- goto match_failure;
- if ((flags & SUPPRESS) == 0) {
- if (flags & LONGDBL) {
- long double res = strtold(buf, &p);
- *va_arg(ap, long double *) = res;
- } else if (flags & LONG) {
- double res = strtod(buf, &p);
- *va_arg(ap, double *) = res;
- } else {
- float res = strtof(buf, &p);
- *va_arg(ap, float *) = res;
- }
- if (__scanfdebug && p - buf != (ptrdiff_t)width)
- abort();
- nassigned++;
- }
- nread += (int)width;
- nconversions++;
- break;
-#endif /* !NO_FLOATING_POINT */
- }
- }
-input_failure:
-//Print(L"%a: %d\n", __func__, __LINE__);
- return (nconversions != 0 ? nassigned : EOF);
-match_failure:
- return (nassigned);
-}
-
-/*
- * Fill in the given table from the scanset at the given format
- * (just after `['). Return a pointer to the character past the
- * closing `]'. The table has a 1 wherever characters should be
- * considered part of the scanset.
- */
-static const u_char *
-__sccl(char *tab, const u_char *fmt)
-{
- int c, n, v, i;
-
- _DIAGASSERT(tab != NULL);
- _DIAGASSERT(fmt != NULL);
- /* first `clear' the whole table */
- c = *fmt++; /* first char hat => negated scanset */
- if (c == '^') {
- v = 1; /* default => accept */
- c = *fmt++; /* get new first char */
- } else
- v = 0; /* default => reject */
-
- /* XXX: Will not work if sizeof(tab*) > sizeof(char) */
- (void)memset(tab, v, 256);
-
- if (c == 0)
- return (fmt - 1);/* format ended before closing ] */
-
- /*
- * Now set the entries corresponding to the actual scanset
- * to the opposite of the above.
- *
- * The first character may be ']' (or '-') without being special;
- * the last character may be '-'.
- */
- v = 1 - v;
- for (;;) {
- tab[c] = (char)v; /* take character c */
-doswitch:
- n = *fmt++; /* and examine the next */
- switch (n) {
-
- case 0: /* format ended too soon */
- return (fmt - 1);
-
- case '-':
- /*
- * A scanset of the form
- * [01+-]
- * is defined as `the digit 0, the digit 1,
- * the character +, the character -', but
- * the effect of a scanset such as
- * [a-zA-Z0-9]
- * is implementation defined. The V7 Unix
- * scanf treats `a-z' as `the letters a through
- * z', but treats `a-a' as `the letter a, the
- * character -, and the letter a'.
- *
- * For compatibility, the `-' is not considerd
- * to define a range if the character following
- * it is either a close bracket (required by ANSI)
- * or is not numerically greater than the character
- * we just stored in the table (c).
- */
- n = *fmt;
- if (n == ']' || (__collate_load_error ? n < c :
- __collate_range_cmp(n, c) < 0)) {
- c = '-';
- break; /* resume the for(;;) */
- }
- fmt++;
- /* fill in the range */
- if (__collate_load_error) {
- do
- tab[++c] = (char)v;
- while (c < n);
- } else {
- for (i = 0; i < 256; i ++)
- if (__collate_range_cmp(c, i) < 0 &&
- __collate_range_cmp(i, n) <= 0)
- tab[i] = (char)v;
- }
-#if 1 /* XXX another disgusting compatibility hack */
- c = n;
- /*
- * Alas, the V7 Unix scanf also treats formats
- * such as [a-c-e] as `the letters a through e'.
- * This too is permitted by the standard....
- */
- goto doswitch;
-#else
- c = *fmt++;
- if (c == 0)
- return (fmt - 1);
- if (c == ']')
- return (fmt);
-#endif
-
- case ']': /* end of scanset */
- return (fmt);
-
- default: /* just another character */
- c = n;
- break;
- }
- }
- /* NOTREACHED */
-}
-
-#ifndef NO_FLOATING_POINT
-static int
-parsefloat(FILE *fp, char *buf, char *end)
-{
- char *commit, *p;
- int infnanpos = 0;
- enum {
- S_START, S_GOTSIGN, S_INF, S_NAN, S_MAYBEHEX,
- S_DIGITS, S_FRAC, S_EXP, S_EXPDIGITS
- } state = S_START;
- unsigned char c;
- char decpt = *localeconv()->decimal_point;
- _Bool gotmantdig = 0, ishex = 0;
-
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- /*
- * We set commit = p whenever the string we have read so far
- * constitutes a valid representation of a floating point
- * number by itself. At some point, the parse will complete
- * or fail, and we will ungetc() back to the last commit point.
- * To ensure that the file offset gets updated properly, it is
- * always necessary to read at least one character that doesn't
- * match; thus, we can't short-circuit "infinity" or "nan(...)".
- */
- commit = buf - 1;
- for (p = buf; p < end; ) {
- c = *fp->_p;
-reswitch:
- switch (state) {
- case S_START:
- state = S_GOTSIGN;
- if (c == '-' || c == '+')
- break;
- else
- goto reswitch;
- case S_GOTSIGN:
- switch (c) {
- case '0':
- state = S_MAYBEHEX;
- commit = p;
- break;
- case 'I':
- case 'i':
- state = S_INF;
- break;
- case 'N':
- case 'n':
- state = S_NAN;
- break;
- default:
- state = S_DIGITS;
- goto reswitch;
- }
- break;
- case S_INF:
- if (infnanpos > 6 ||
- (c != "nfinity"[infnanpos] &&
- c != "NFINITY"[infnanpos]))
- goto parsedone;
- if (infnanpos == 1 || infnanpos == 6)
- commit = p; /* inf or infinity */
- infnanpos++;
- break;
- case S_NAN:
- switch (infnanpos) {
- case -1: /* XXX kludge to deal with nan(...) */
- goto parsedone;
- case 0:
- if (c != 'A' && c != 'a')
- goto parsedone;
- break;
- case 1:
- if (c != 'N' && c != 'n')
- goto parsedone;
- else
- commit = p;
- break;
- case 2:
- if (c != '(')
- goto parsedone;
- break;
- default:
- if (c == ')') {
- commit = p;
- infnanpos = -2;
- } else if (!isalnum(c) && c != '_')
- goto parsedone;
- break;
- }
- infnanpos++;
- break;
- case S_MAYBEHEX:
- state = S_DIGITS;
- if (c == 'X' || c == 'x') {
- ishex = 1;
- break;
- } else { /* we saw a '0', but no 'x' */
- gotmantdig = 1;
- goto reswitch;
- }
- case S_DIGITS:
- if ((ishex && isxdigit(c)) || isdigit(c))
- gotmantdig = 1;
- else {
- state = S_FRAC;
- if (c != decpt)
- goto reswitch;
- }
- if (gotmantdig)
- commit = p;
- break;
- case S_FRAC:
- if (((c == 'E' || c == 'e') && !ishex) ||
- ((c == 'P' || c == 'p') && ishex)) {
- if (!gotmantdig)
- goto parsedone;
- else
- state = S_EXP;
- } else if ((ishex && isxdigit(c)) || isdigit(c)) {
- commit = p;
- gotmantdig = 1;
- } else
- goto parsedone;
- break;
- case S_EXP:
- state = S_EXPDIGITS;
- if (c == '-' || c == '+')
- break;
- else
- goto reswitch;
- case S_EXPDIGITS:
- if (isdigit(c))
- commit = p;
- else
- goto parsedone;
- break;
- default:
- abort();
- }
- *p++ = c;
- if (--fp->_r > 0)
- fp->_p++;
- else if (__srefill(fp))
- break; /* EOF */
- }
-
-parsedone:
- while (commit < --p)
- (void)ungetc(*(u_char *)p, fp);
- *++commit = '\0';
- return (int)(commit - buf);
-}
-#endif
diff --git a/StdLib/LibC/Stdio/vfwprintf.c b/StdLib/LibC/Stdio/vfwprintf.c
deleted file mode 100644
index f5cf3940f9..0000000000
--- a/StdLib/LibC/Stdio/vfwprintf.c
+++ /dev/null
@@ -1,2053 +0,0 @@
-/** @file
- Implementation of internals for printf and wprintf.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: vfwprintf.c,v 1.9.2.1.4.1 2008/04/08 21:10:55 jdc Exp
- vfprintf.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include "namespace.h"
-#include <sys/types.h>
-
-#include <assert.h>
-#include <ctype.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include "reentrant.h"
-#include "local.h"
-#include "extern.h"
-#include "fvwrite.h"
-
-#ifdef _MSC_VER
- // Keep compiler quiet about conversions from larger to smaller types.
- #pragma warning ( disable : 4244 )
-#endif
-
-#ifndef NARROW
-#define MCHAR_T char
-#define CHAR_T wchar_t
-#define STRLEN(a) wcslen(a)
-#define MEMCHR(a, b, c) wmemchr(a, b, c)
-#define SCONV(a, b) __mbsconv(a, b)
-#define STRCONST(a) L ## a
-#define WDECL(a, b) a ## w ## b
-#define END_OF_FILE WEOF
-#define MULTI 0
-#else
-#define MCHAR_T wchar_t
-#define CHAR_T char
-#define STRLEN(a) strlen(a)
-#define MEMCHR(a, b, c) memchr(a, b, c)
-#define SCONV(a, b) __wcsconv(a, b)
-#define STRCONST(a) a
-#define WDECL(a, b) a ## b
-#define END_OF_FILE EOF
-#define MULTI 1
-#endif
-
-union arg {
- int intarg;
- u_int uintarg;
- long longarg;
- unsigned long ulongarg;
- long long longlongarg;
- unsigned long long ulonglongarg;
- ptrdiff_t ptrdiffarg;
- size_t sizearg;
- intmax_t intmaxarg;
- uintmax_t uintmaxarg;
- void *pvoidarg;
- char *pchararg;
- signed char *pschararg;
- short *pshortarg;
- int *pintarg;
- long *plongarg;
- long long *plonglongarg;
- ptrdiff_t *pptrdiffarg;
- size_t *psizearg;
- intmax_t *pintmaxarg;
-#ifndef NO_FLOATING_POINT
- double doublearg;
- long double longdoublearg;
-#endif
- wint_t wintarg;
- wchar_t *pwchararg;
-};
-
-/*
- * Type ids for argument type table.
- */
-enum typeid {
- T_UNUSED, TP_SHORT, T_INT, T_U_INT, TP_INT,
- T_LONG, T_U_LONG, TP_LONG, T_LLONG, T_U_LLONG,
- TP_LLONG, T_PTRDIFFT, TP_PTRDIFFT, T_SIZET, TP_SIZET,
- T_INTMAXT, T_UINTMAXT, TP_INTMAXT, TP_VOID, TP_CHAR,
- TP_SCHAR, T_DOUBLE, T_LONG_DOUBLE, T_WINT, TP_WCHAR
-};
-
-static int __sbprintf(FILE *, const CHAR_T *, va_list);
-static CHAR_T *__ujtoa(uintmax_t, CHAR_T *, int, int, const char *, int,
- char, const char *);
-static CHAR_T *__ultoa(u_long, CHAR_T *, int, int, const char *, int,
- char, const char *);
-#ifndef NARROW
-static CHAR_T *__mbsconv(char *, int);
-static wint_t __xfputwc(CHAR_T, FILE *);
-#else
-static char *__wcsconv(wchar_t *, int);
-static int __sprint(FILE *, struct __suio *);
-#endif
-static int __find_arguments(const CHAR_T *, va_list, union arg **);
-static int __grow_type_table(int, enum typeid **, int *);
-
-/*
- * Helper function for `fprintf to unbuffered unix file': creates a
- * temporary buffer. We only work on write-only files; this avoids
- * worries about ungetc buffers and so forth.
- */
-static int
-__sbprintf(FILE *fp, const CHAR_T *fmt, va_list ap)
-{
- int ret;
- FILE fake;
- struct __sfileext fakeext;
- unsigned char buf[BUFSIZ];
-
- _DIAGASSERT(fp != NULL);
- _DIAGASSERT(fmt != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- _FILEEXT_SETUP(&fake, &fakeext);
-
- /* copy the important variables */
- fake._flags = fp->_flags & ~__SNBF;
- fake._file = fp->_file;
- fake._cookie = fp->_cookie;
- fake._write = fp->_write;
-
- /* set up the buffer */
- fake._bf._base = fake._p = buf;
- fake._bf._size = fake._w = sizeof(buf);
- fake._lbfsize = 0; /* not actually used, but Just In Case */
-
- /* do the work, then copy any error status */
- ret = WDECL(__vf,printf_unlocked)(&fake, fmt, ap);
- if (ret >= 0 && fflush(&fake))
- ret = END_OF_FILE;
- if (fake._flags & __SERR)
- fp->_flags |= __SERR;
- return (ret);
-}
-
-#ifndef NARROW
-/*
- * Like __fputwc, but handles fake string (__SSTR) files properly.
- * File must already be locked.
- */
-static wint_t
-__xfputwc(wchar_t wc, FILE *fp)
-{
- static const mbstate_t initial = { 0 };
- mbstate_t mbs;
- char buf[MB_LEN_MAX];
- struct __suio uio;
- struct __siov iov;
- size_t len;
-
- if ((fp->_flags & __SSTR) == 0)
- return (__fputwc_unlock(wc, fp));
-
- mbs = initial;
- if ((len = wcrtomb(buf, wc, &mbs)) == (size_t)-1) {
- fp->_flags |= __SERR;
- return (END_OF_FILE);
- }
- uio.uio_iov = &iov;
- uio.uio_resid = (int)len;
- uio.uio_iovcnt = 1;
- iov.iov_base = buf;
- iov.iov_len = len;
- return (__sfvwrite(fp, &uio) != EOF ? (wint_t)wc : END_OF_FILE);
-}
-#else
-/*
- * Flush out all the vectors defined by the given uio,
- * then reset it so that it can be reused.
- */
-static int
-__sprint(FILE *fp, struct __suio *uio)
-{
- int err;
-
- _DIAGASSERT(fp != NULL);
- _DIAGASSERT(uio != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- if (uio->uio_resid == 0) {
- uio->uio_iovcnt = 0;
- return (0);
- }
- err = __sfvwrite(fp, uio);
- uio->uio_resid = 0;
- uio->uio_iovcnt = 0;
- return (err);
-}
-#endif
-
-/*
- * Macros for converting digits to letters and vice versa
- */
-#define to_digit(c) ((c) - '0')
-#define is_digit(c) ((unsigned)to_digit(c) <= 9)
-#define to_char(n) (CHAR_T)((n) + '0')
-
-/*
- * Convert an unsigned long to ASCII for printf purposes, returning
- * a pointer to the first character of the string representation.
- * Octal numbers can be forced to have a leading zero; hex numbers
- * use the given digits.
- */
-static CHAR_T *
-__ultoa(u_long val, CHAR_T *endp, int base, int octzero, const char *xdigs,
- int needgrp, char thousep, const char *grp)
-{
- CHAR_T *cp = endp;
- LONGN sval;
- int ndig;
-
- /*
- * Handle the three cases separately, in the hope of getting
- * better/faster code.
- */
- switch (base) {
- case 10:
- if (val < 10) { /* many numbers are 1 digit */
- *--cp = to_char(val);
- return (cp);
- }
- ndig = 0;
- /*
- * On many machines, unsigned arithmetic is harder than
- * signed arithmetic, so we do at most one unsigned mod and
- * divide; this is sufficient to reduce the range of
- * the incoming value to where signed arithmetic works.
- */
- if (val > LONG_MAX) {
- *--cp = to_char(val % 10);
- ndig++;
- sval = (LONGN)(val / 10);
- } else
- sval = (LONGN)val;
- do {
- *--cp = to_char(sval % 10);
- ndig++;
- /*
- * If (*grp == CHAR_MAX) then no more grouping
- * should be performed.
- */
- if (needgrp && ndig == *grp && *grp != CHAR_MAX
- && sval > 9) {
- *--cp = thousep;
- ndig = 0;
- /*
- * If (*(grp+1) == '\0') then we have to
- * use *grp character (last grouping rule)
- * for all next cases
- */
- if (*(grp+1) != '\0')
- grp++;
- }
- sval /= 10;
- } while (sval != 0);
- break;
-
- case 8:
- do {
- *--cp = to_char(val & 7);
- val >>= 3;
- } while (val);
- if (octzero && *cp != '0')
- *--cp = '0';
- break;
-
- case 16:
- do {
- *--cp = xdigs[(size_t)val & 15];
- val >>= 4;
- } while (val);
- break;
-
- default: /* oops */
- abort();
- }
- return (cp);
-}
-
-/* Identical to __ultoa, but for intmax_t. */
-static CHAR_T *
-__ujtoa(uintmax_t val, CHAR_T *endp, int base, int octzero,
- const char *xdigs, int needgrp, char thousep, const char *grp)
-{
- CHAR_T *cp = endp;
- intmax_t sval;
- int ndig;
-
- /* quick test for small values; __ultoa is typically much faster */
- /* (perhaps instead we should run until small, then call __ultoa?) */
- if (val <= ULONG_MAX)
- return (__ultoa((u_long)val, endp, base, octzero, xdigs,
- needgrp, thousep, grp));
- switch (base) {
- case 10:
- if (val < 10) {
- *--cp = to_char(val % 10);
- return (cp);
- }
- ndig = 0;
- if (val > INTMAX_MAX) {
- *--cp = to_char(val % 10);
- ndig++;
- sval = val / 10;
- } else
- sval = val;
- do {
- *--cp = to_char(sval % 10);
- ndig++;
- /*
- * If (*grp == CHAR_MAX) then no more grouping
- * should be performed.
- */
- if (needgrp && *grp != CHAR_MAX && ndig == *grp
- && sval > 9) {
- *--cp = thousep;
- ndig = 0;
- /*
- * If (*(grp+1) == '\0') then we have to
- * use *grp character (last grouping rule)
- * for all next cases
- */
- if (*(grp+1) != '\0')
- grp++;
- }
- sval /= 10;
- } while (sval != 0);
- break;
-
- case 8:
- do {
- *--cp = to_char(val & 7);
- val >>= 3;
- } while (val);
- if (octzero && *cp != '0')
- *--cp = '0';
- break;
-
- case 16:
- do {
- *--cp = xdigs[(size_t)val & 15];
- val >>= 4;
- } while (val);
- break;
-
- default:
- abort();
- }
- return (cp);
-}
-
-#ifndef NARROW
-/*
- * Convert a multibyte character string argument for the %s format to a wide
- * string representation. ``prec'' specifies the maximum number of bytes
- * to output. If ``prec'' is greater than or equal to zero, we can't assume
- * that the multibyte char. string ends in a null character.
- */
-static wchar_t *
-__mbsconv(char *mbsarg, int prec)
-{
- static const mbstate_t initial = { 0 };
- mbstate_t mbs;
- wchar_t *convbuf, *wcp;
- const char *p;
- size_t insize, nchars, nconv;
-
- if (mbsarg == NULL)
- return (NULL);
-
- /*
- * Supplied argument is a multibyte string; convert it to wide
- * characters first.
- */
- if (prec >= 0) {
- /*
- * String is not guaranteed to be NUL-terminated. Find the
- * number of characters to print.
- */
- p = mbsarg;
- insize = nchars = nconv = 0;
- mbs = initial;
- while (nchars != (size_t)prec) {
- nconv = mbrlen(p, MB_CUR_MAX, &mbs);
- if (nconv == 0 || nconv == (size_t)-1 ||
- nconv == (size_t)-2)
- break;
- p += nconv;
- nchars++;
- insize += nconv;
- }
- if (nconv == (size_t)-1 || nconv == (size_t)-2)
- return (NULL);
- } else
- insize = strlen(mbsarg);
-
- /*
- * Allocate buffer for the result and perform the conversion,
- * converting at most `size' bytes of the input multibyte string to
- * wide characters for printing.
- */
- convbuf = malloc((insize + 1) * sizeof(*convbuf));
- if (convbuf == NULL)
- return (NULL);
- wcp = convbuf;
- p = mbsarg;
- mbs = initial;
- nconv = 0;
- while (insize != 0) {
- nconv = mbrtowc(wcp, p, insize, &mbs);
- if (nconv == 0 || nconv == (size_t)-1 || nconv == (size_t)-2)
- break;
- wcp++;
- p += nconv;
- insize -= nconv;
- }
- if (nconv == (size_t)-1 || nconv == (size_t)-2) {
- free(convbuf);
- return (NULL);
- }
- *wcp = L'\0';
-
- return (convbuf);
-}
-#else
-/*
- * Convert a wide character string argument for the %ls format to a multibyte
- * string representation. If not -1, prec specifies the maximum number of
- * bytes to output, and also means that we can't assume that the wide char.
- * string ends is null-terminated.
- */
-static char *
-__wcsconv(wchar_t *wcsarg, int prec)
-{
- static const mbstate_t initial = { 0 };
- mbstate_t mbs;
- char buf[MB_LEN_MAX];
- wchar_t *p;
- char *convbuf;
- size_t clen, nbytes;
-
- /* Allocate space for the maximum number of bytes we could output. */
- if (prec < 0) {
- p = wcsarg;
- mbs = initial;
- nbytes = wcsrtombs(NULL, (const wchar_t **)&p, 0, &mbs);
- if (nbytes == (size_t)-1)
- return (NULL);
- } else {
- /*
- * Optimisation: if the output precision is small enough,
- * just allocate enough memory for the maximum instead of
- * scanning the string.
- */
- if (prec < 128)
- nbytes = prec;
- else {
- nbytes = 0;
- p = wcsarg;
- mbs = initial;
- for (;;) {
- clen = wcrtomb(buf, *p++, &mbs);
- if (clen == 0 || clen == (size_t)-1 ||
- nbytes + clen > (size_t)prec)
- break;
- nbytes += clen;
- }
- }
- }
- if ((convbuf = malloc(nbytes + 1)) == NULL)
- return (NULL);
-
- /* Fill the output buffer. */
- p = wcsarg;
- mbs = initial;
- if ((nbytes = wcsrtombs(convbuf, (const wchar_t **)&p,
- nbytes, &mbs)) == (size_t)-1) {
- free(convbuf);
- return (NULL);
- }
- convbuf[nbytes] = '\0';
- return (convbuf);
-}
-#endif
-
-/*
- * MT-safe version
- */
-int
-WDECL(vf,printf)(FILE * __restrict fp, const CHAR_T * __restrict fmt0, va_list ap)
-{
- int ret;
-
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
- FLOCKFILE(fp);
- ret = WDECL(__vf,printf_unlocked)(fp, fmt0, ap);
- FUNLOCKFILE(fp);
- return (ret);
-}
-
-#ifndef NO_FLOATING_POINT
-
-#include <float.h>
-#include <math.h>
-#include "floatio.h"
-
-#define DEFPREC 6
-
-static int exponent(CHAR_T *, int, int);
-#ifndef WIDE_DOUBLE
-static char *cvt(double, int, int, char *, int *, int, int *);
-#endif
-
-#endif /* !NO_FLOATING_POINT */
-
-/*
- * The size of the buffer we use as scratch space for integer
- * conversions, among other things. Technically, we would need the
- * most space for base 10 conversions with thousands' grouping
- * characters between each pair of digits. 100 bytes is a
- * conservative overestimate even for a 128-bit uintmax_t.
- */
-#define BUF 100
-
-#define STATIC_ARG_TBL_SIZE 8 /* Size of static argument table. */
-
-/*
- * Flags used during conversion.
- */
-#define ALT 0x001 /* alternate form */
-#define LADJUST 0x004 /* left adjustment */
-#define LONGDBL 0x008 /* long double */
-#define LONGINT 0x010 /* long integer */
-#define LLONGINT 0x020 /* long long integer */
-#define SHORTINT 0x040 /* short integer */
-#define ZEROPAD 0x080 /* zero (as opposed to blank) pad */
-#define FPT 0x100 /* Floating point number */
-#define GROUPING 0x200 /* use grouping ("'" flag) */
- /* C99 additional size modifiers: */
-#define SIZET 0x400 /* size_t */
-#define PTRDIFFT 0x800 /* ptrdiff_t */
-#define INTMAXT 0x1000 /* intmax_t */
-#define CHARINT 0x2000 /* print char using int format */
-
-/*
- * Non-MT-safe version
- */
-int
-WDECL(__vf,printf_unlocked)(FILE *fp, const CHAR_T *fmt0, va_list ap)
-{
- CHAR_T *fmt; /* format string */
- int ch; /* character from fmt */
- int n, n2; /* handy integer (short term usage) */
- CHAR_T *cp; /* handy char pointer (short term usage) */
- int flags; /* flags as above */
- int ret; /* return value accumulator (number of items converted)*/
- int width; /* width from format (%8d), or 0 */
- int prec; /* precision from format; <0 for N/A */
- CHAR_T sign; /* sign prefix (' ', '+', '-', or \0) */
- char thousands_sep; /* locale specific thousands separator */
- const char *grouping; /* locale specific numeric grouping rules */
-#ifndef NO_FLOATING_POINT
- /*
- * We can decompose the printed representation of floating
- * point numbers into several parts, some of which may be empty:
- *
- * [+|-| ] [0x|0X] MMM . NNN [e|E|p|P] [+|-] ZZ
- * A B ---C--- D E F
- *
- * A: 'sign' holds this value if present; '\0' otherwise
- * B: ox[1] holds the 'x' or 'X'; '\0' if not hexadecimal
- * C: cp points to the string MMMNNN. Leading and trailing
- * zeros are not in the string and must be added.
- * D: expchar holds this character; '\0' if no exponent, e.g. %f
- * F: at least two digits for decimal, at least one digit for hex
- */
- char *decimal_point; /* locale specific decimal point */
-#ifdef WIDE_DOUBLE
- int signflag; /* true if float is negative */
- union { /* floating point arguments %[aAeEfFgG] */
- double dbl;
- long double ldbl;
- } fparg;
- char *dtoaend; /* pointer to end of converted digits */
-#else
- double _double; /* double precision arguments %[eEfgG] */
- char softsign; /* temporary negative sign for floats */
-#endif
- char *dtoaresult; /* buffer allocated by dtoa */
- int expt = 0; /* integer value of exponent */
- char expchar; /* exponent character: [eEpP\0] */
- int expsize; /* character count for expstr */
- int lead; /* sig figs before decimal or group sep */
- int ndig; /* actual number of digits returned by dtoa */
- CHAR_T expstr[MAXEXPDIG+2]; /* buffer for exponent string: e+ZZZ */
- int nseps; /* number of group separators with ' */
- int nrepeats; /* number of repeats of the last group */
-#endif
- u_long ulval; /* integer arguments %[diouxX] */
- uintmax_t ujval; /* %j, %ll, %q, %t, %z integers */
- int base; /* base for [diouxX] conversion */
- int dprec; /* a copy of prec if [diouxX], 0 otherwise */
- int realsz; /* field size expanded by dprec, sign, etc */
- int size; /* size of converted field or string */
- int prsize; /* max size of printed field */
- const char *xdigs; /* digits for %[xX] conversion */
-#ifdef NARROW
-#define NIOV 8
- struct __siov *iovp; /* for PRINT macro */
- struct __suio uio; /* output information: summary */
- struct __siov iov[NIOV];/* ... and individual io vectors */
-#else
- int n3;
-#endif
- CHAR_T buf[BUF]; /* buffer with space for digits of uintmax_t */
- CHAR_T ox[2]; /* space for 0x hex-prefix */
- union arg *argtable; /* args, built due to positional arg */
- union arg statargtable [STATIC_ARG_TBL_SIZE];
- int nextarg; /* 1-based argument index */
- va_list orgap; /* original argument pointer */
- CHAR_T *convbuf; /* multibyte to wide conversion result */
-
- /*
- * Choose PADSIZE to trade efficiency vs. size. If larger printf
- * fields occur frequently, increase PADSIZE and make the initialisers
- * below longer.
- */
-#define PADSIZE 16 /* pad chunk size */
- static CHAR_T blanks[PADSIZE] =
- {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
- static CHAR_T zeroes[PADSIZE] =
- {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};
-
- static const char xdigs_lower[17] = "0123456789abcdef";
- static const char xdigs_upper[17] = "0123456789ABCDEF";
-
- /*
- * BEWARE, these `goto error' on error, PRINT uses `n2' and
- * PAD uses `n'.
- */
-#ifndef NARROW
-#define PRINT(ptr, len) do { \
- for (n3 = 0; n3 < (len); n3++) \
- __xfputwc((ptr)[n3], fp); \
-} while (/*CONSTCOND*/0)
-#define FLUSH()
-#else
-#define PRINT(ptr, len) do { \
- iovp->iov_base = __UNCONST(ptr); \
- iovp->iov_len = (len); \
- uio.uio_resid += (len); \
- iovp++; \
- if (++uio.uio_iovcnt >= NIOV) { \
- if (__sprint(fp, &uio)) \
- goto error; \
- iovp = iov; \
- } \
-} while (/*CONSTCOND*/0)
-#define FLUSH() do { \
- if (uio.uio_resid && __sprint(fp, &uio)) \
- goto error; \
- uio.uio_iovcnt = 0; \
- iovp = iov; \
-} while (/*CONSTCOND*/0)
-#endif /* NARROW */
-
-#define PAD(howmany, with) do { \
- if ((n = (howmany)) > 0) { \
- while (n > PADSIZE) { \
- PRINT(with, PADSIZE); \
- n -= PADSIZE; \
- } \
- PRINT(with, n); \
- } \
-} while (/*CONSTCOND*/0)
-#define PRINTANDPAD(p, ep, len, with) do { \
- n2 = (ep) - (p); \
- if (n2 > (len)) \
- n2 = (len); \
- if (n2 > 0) \
- PRINT((p), n2); \
- PAD((len) - (n2 > 0 ? n2 : 0), (with)); \
-} while(/*CONSTCOND*/0)
-
- /*
- * Get the argument indexed by nextarg. If the argument table is
- * built, use it to get the argument. If its not, get the next
- * argument (and arguments must be gotten sequentially).
- */
-#define GETARG(type) \
- ((/*CONSTCOND*/argtable != NULL) ? *((type*)(void*)(&argtable[nextarg++])) : \
- (nextarg++, va_arg(ap, type)))
-
- /*
- * To extend shorts properly, we need both signed and unsigned
- * argument extraction methods.
- */
-#define SARG() \
- ((long)(flags&LONGINT ? GETARG(long) : \
- flags&SHORTINT ? (short)GETARG(int) : \
- flags&CHARINT ? (signed char)GETARG(int) : \
- GETARG(int)))
-
-#define UARG() \
- ((u_long)(flags&LONGINT ? GETARG(u_long) : \
- flags&SHORTINT ? (u_long)(u_short)GETARG(int) : \
- flags&CHARINT ? (u_long)(u_char)GETARG(int) : \
- (u_long)GETARG(u_int)))
-
-#define INTMAX_SIZE (INTMAXT|SIZET|PTRDIFFT|LLONGINT)
-
-#define SJARG() \
- (flags&INTMAXT ? GETARG(intmax_t) : \
- flags&SIZET ? (intmax_t)GETARG(size_t) : \
- flags&PTRDIFFT ? (intmax_t)GETARG(ptrdiff_t) : \
- (intmax_t)GETARG(long long))
-
-#define UJARG() \
- (flags&INTMAXT ? GETARG(uintmax_t) : \
- flags&SIZET ? (uintmax_t)GETARG(size_t) : \
- flags&PTRDIFFT ? (uintmax_t)GETARG(ptrdiff_t) : \
- (uintmax_t)GETARG(unsigned long long))
-
- /*
- * Get * arguments, including the form *nn$. Preserve the nextarg
- * that the argument can be gotten once the type is determined.
- */
-#define GETASTER(val) \
- n2 = 0; \
- cp = fmt; \
- while (is_digit(*cp)) { \
- n2 = 10 * n2 + to_digit(*cp); \
- cp++; \
- } \
- if (*cp == '$') { \
- int hold = nextarg; \
- if (argtable == NULL) { \
- argtable = statargtable; \
- if (__find_arguments(fmt0, orgap, &argtable) == -1) \
- goto oomem; \
- } \
- nextarg = n2; \
- val = GETARG (int); \
- nextarg = hold; \
- fmt = ++cp; \
- } else { \
- val = GETARG (int); \
- }
-
- _DIAGASSERT(fp != NULL);
- _DIAGASSERT(fmt0 != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- _SET_ORIENTATION(fp, -1);
-
- ndig = -1; /* XXX gcc */
-
- thousands_sep = '\0';
- grouping = NULL;
-#ifndef NO_FLOATING_POINT
- decimal_point = localeconv()->decimal_point;
- expsize = 0; /* XXXGCC -Wuninitialized [sh3,m68000] */
-#endif
- convbuf = NULL;
- /* sorry, f{w,}printf(read_only_file, L"") returns {W,}EOF, not 0 */
- if (cantwrite(fp)) {
- errno = EBADF;
- return (END_OF_FILE);
- }
-
- /* optimise fprintf(stderr) (and other unbuffered Unix files) */
- if ((fp->_flags & (__SNBF|__SWR|__SRW)) == (__SNBF|__SWR) &&
- fp->_file >= 0)
- return (__sbprintf(fp, fmt0, ap));
-
- fmt = (CHAR_T *)__UNCONST(fmt0);
- argtable = NULL;
- nextarg = 1;
- va_copy(orgap, ap);
-#ifdef NARROW
- uio.uio_iov = iovp = iov;
- uio.uio_resid = 0;
- uio.uio_iovcnt = 0;
-#endif
- ret = 0;
-
- /*
- * Scan the format for conversions (`%' character).
- */
- for (;;)
- {
- const CHAR_T *result;
-
- for (cp = fmt; (ch = *fmt) != '\0' && ch != '%'; fmt++)
- continue;
- if ((n = (int)(fmt - cp)) != 0) {
- if ((unsigned)ret + n > INT_MAX) {
- ret = END_OF_FILE;
- goto error;
- }
- PRINT(cp, n);
- ret += n;
- }
- if (ch == '\0')
- goto done;
- fmt++; /* skip over '%' */
-
- flags = 0;
- dprec = 0;
- width = 0;
- prec = -1;
- sign = '\0';
- ox[1] = '\0';
- expchar = '\0';
- lead = 0;
- nseps = nrepeats = 0;
- ulval = 0;
- ujval = 0;
- xdigs = NULL;
-
-rflag: ch = *fmt++;
-reswitch: switch (ch) {
- case ' ':
- /*-
- * ``If the space and + flags both appear, the space
- * flag will be ignored.''
- * -- ANSI X3J11
- */
- if (!sign)
- sign = ' ';
- goto rflag;
- case '#':
- flags |= ALT;
- goto rflag;
- case '*':
- /*-
- * ``A negative field width argument is taken as a
- * - flag followed by a positive field width.''
- * -- ANSI X3J11
- * They don't exclude field widths read from args.
- */
- GETASTER (width);
- if (width >= 0)
- goto rflag;
- width = -width;
- /* FALLTHROUGH */
- case '-':
- flags |= LADJUST;
- goto rflag;
- case '+':
- sign = '+';
- goto rflag;
- case '\'':
- flags |= GROUPING;
- thousands_sep = *(localeconv()->thousands_sep);
- grouping = localeconv()->grouping;
- goto rflag;
- case '.':
- if ((ch = *fmt++) == '*') {
- GETASTER (prec);
- goto rflag;
- }
- prec = 0;
- while (is_digit(ch)) {
- prec = 10 * prec + to_digit(ch);
- ch = *fmt++;
- }
- goto reswitch;
- case '0':
- /*-
- * ``Note that 0 is taken as a flag, not as the
- * beginning of a field width.''
- * -- ANSI X3J11
- */
- flags |= ZEROPAD;
- goto rflag;
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- n = 0;
- do {
- n = 10 * n + to_digit(ch);
- ch = *fmt++;
- } while (is_digit(ch));
- if (ch == '$') {
- nextarg = n;
- if (argtable == NULL) {
- argtable = statargtable;
- if (__find_arguments(fmt0, orgap,
- &argtable) == -1)
- goto oomem;
- }
- goto rflag;
- }
- width = n;
- goto reswitch;
-#ifndef NO_FLOATING_POINT
- case 'L':
- flags |= LONGDBL;
- goto rflag;
-#endif
- case 'h':
- if (flags & SHORTINT) {
- flags &= ~SHORTINT;
- flags |= CHARINT;
- } else
- flags |= SHORTINT;
- goto rflag;
- case 'j':
- flags |= INTMAXT;
- goto rflag;
- case 'l':
- if (flags & LONGINT) {
- flags &= ~LONGINT;
- flags |= LLONGINT;
- } else
- flags |= LONGINT;
- goto rflag;
- case 'q':
- flags |= LLONGINT; /* not necessarily */
- goto rflag;
- case 't':
- flags |= PTRDIFFT;
- goto rflag;
- case 'z':
- flags |= SIZET;
- goto rflag;
- case 'C':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'c':
-#ifdef NARROW
- if (flags & LONGINT) {
- static const mbstate_t initial = { 0 };
- mbstate_t mbs;
- size_t mbseqlen;
-
- mbs = initial;
- mbseqlen = wcrtomb(buf,
- /* The compiler "knows" that wint_t may be smaller than an int so
- it warns about it when used as the type argument to va_arg().
- Since any type of parameter smaller than an int is promoted to an int on a
- function call, we must call GETARG with type int instead of wint_t.
- */
- (wchar_t)GETARG(int), &mbs);
- if (mbseqlen == (size_t)-1) {
- fp->_flags |= __SERR;
- goto error;
- }
- size = (int)mbseqlen;
- } else {
- *buf = (char)(GETARG(int));
- size = 1;
- }
-#else
- if (flags & LONGINT)
- *buf = (wchar_t)GETARG(int);
- else
- *buf = (wchar_t)btowc(GETARG(int));
- size = 1;
-#endif
- result = buf;
- sign = '\0';
- break;
- case 'D':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'd':
- case 'i':
- if (flags & INTMAX_SIZE) {
- ujval = SJARG();
- if ((intmax_t)ujval < 0) {
- ujval = (uintmax_t)(-((intmax_t)ujval));
- sign = '-';
- }
- } else {
- ulval = SARG();
- if ((long)ulval < 0) {
- ulval = (u_long)(-((long)ulval));
- sign = '-';
- }
- }
- base = 10;
- goto number;
-#ifndef NO_FLOATING_POINT
-#ifdef WIDE_DOUBLE
- case 'a':
- case 'A':
- if (ch == 'a') {
- ox[1] = 'x';
- xdigs = xdigs_lower;
- expchar = 'p';
- } else {
- ox[1] = 'X';
- xdigs = xdigs_upper;
- expchar = 'P';
- }
- if (flags & LONGDBL) {
- fparg.ldbl = GETARG(long double);
- dtoaresult =
- __hldtoa(fparg.ldbl, xdigs, prec,
- &expt, &signflag, &dtoaend);
- } else {
- fparg.dbl = GETARG(double);
- dtoaresult =
- __hdtoa(fparg.dbl, xdigs, prec,
- &expt, &signflag, &dtoaend);
- }
- if (dtoaresult == NULL)
- goto oomem;
-
- if (prec < 0)
- prec = dtoaend - dtoaresult;
- if (expt == INT_MAX)
- ox[1] = '\0';
- ndig = dtoaend - dtoaresult;
- if (convbuf != NULL)
- free(convbuf);
-#ifndef NARROW
- result = convbuf = __mbsconv(dtoaresult, -1);
-#else
- /*XXX inefficient*/
- result = convbuf = strdup(dtoaresult);
-#endif
- if (result == NULL)
- goto oomem;
- __freedtoa(dtoaresult);
- goto fp_common;
- case 'e':
- case 'E':
- expchar = ch;
- if (prec < 0)
- prec = DEFPREC;
- goto fp_begin;
- case 'f':
- case 'F':
- expchar = '\0';
- goto fp_begin;
- case 'g':
- case 'G':
- expchar = ch - ('g' - 'e');
- if (prec == 0)
- prec = 1;
-fp_begin:
- if (prec < 0)
- prec = DEFPREC;
- if (flags & LONGDBL) {
- fparg.ldbl = GETARG(long double);
- dtoaresult =
- __ldtoa(&fparg.ldbl, expchar ? 2 : 3, prec,
- &expt, &signflag, &dtoaend);
- } else {
- fparg.dbl = GETARG(double);
- dtoaresult =
- __dtoa(fparg.dbl, expchar ? 2 : 3, prec,
- &expt, &signflag, &dtoaend);
- if (expt == 9999)
- expt = INT_MAX;
- }
- if (dtoaresult == NULL)
- goto oomem;
- ndig = dtoaend - dtoaresult;
- if (convbuf != NULL)
- free(convbuf);
-#ifndef NARROW
- result = convbuf = __mbsconv(dtoaresult, -1);
-#else
- /*XXX inefficient*/
- result = convbuf = strdup(dtoaresult);
-#endif
- if (result == NULL)
- goto oomem;
- __freedtoa(dtoaresult);
-fp_common:
- if (signflag)
- sign = '-';
- if (expt == INT_MAX) { /* inf or nan */
- if (*result == 'N') {
- result = (ch >= 'a') ? STRCONST("nan") :
- STRCONST("NAN");
- sign = '\0';
- } else
- result = (ch >= 'a') ? STRCONST("inf") :
- STRCONST("INF");
- size = 3;
- break;
- }
-#else
- //case 'e':
- //case 'E':
- //case 'f':
- //case 'F':
- //case 'g':
- //case 'G':
- // if (prec == -1) {
- // prec = DEFPREC;
- // } else if ((ch == 'g' || ch == 'G') && prec == 0) {
- // prec = 1;
- // }
- case 'e':
- case 'E':
- expchar = ch;
- if (prec < 0)
- prec = DEFPREC;
- goto fp_begin;
- case 'f':
- case 'F':
- expchar = '\0';
- goto fp_begin;
- case 'g':
- case 'G':
- expchar = ch - ('g' - 'e');
- if (prec == 0)
- prec = 1;
-fp_begin:
- if (prec < 0)
- prec = DEFPREC;
-
- if (flags & LONGDBL) {
- _double = (double) GETARG(long double);
- } else {
- _double = GETARG(double);
- }
-
- /* do this before tricky precision changes */
- if (isinf(_double)) {
- if (_double < 0)
- sign = '-';
- if (ch == 'E' || ch == 'F' || ch == 'G')
- result = STRCONST("INF");
- else
- result = STRCONST("inf");
- size = 3;
- break;
- }
- if (isnan(_double)) {
- if (ch == 'E' || ch == 'F' || ch == 'G')
- result = STRCONST("NAN");
- else
- result = STRCONST("nan");
- size = 3;
- break;
- }
-
- flags |= FPT;
- dtoaresult = cvt(_double, prec, flags, &softsign, &expt, ch, &ndig);
- if (dtoaresult == NULL)
- goto oomem;
- if (convbuf != NULL)
- free(convbuf);
-#ifndef NARROW
- result = convbuf = __mbsconv(dtoaresult, -1);
-#else
- /*XXX inefficient*/
- result = convbuf = strdup(dtoaresult);
-#endif
- if (result == NULL)
- goto oomem;
- __freedtoa(dtoaresult);
- if (softsign)
- sign = '-';
-#endif
- flags |= FPT;
- if (ch == 'g' || ch == 'G') {
- if (expt > -4 && expt <= prec) {
- /* Make %[gG] smell like %[fF] */
- expchar = '\0';
- if (flags & ALT)
- prec -= expt;
- else
- prec = ndig - expt;
- if (prec < 0)
- prec = 0;
- } else {
- /*
- * Make %[gG] smell like %[eE], but
- * trim trailing zeroes if no # flag.
- *
- * Note: The precision field used with [gG] is the number significant
- * digits to print. When converting to [eE] the digit before the
- * decimal must not be included in the precision value.
- */
- if (!(flags & ALT))
- prec = ndig - 1;
- }
- }
- if (expchar) {
- dprec = prec; /* In some cases dprec will not be set. Make sure it is set now */
- expsize = exponent(expstr, expt - 1, expchar);
- size = expsize + prec + 1; /* Leading digit + exponent string + precision */
- if (prec >= 1 || flags & ALT)
- ++size; /* Decimal point is added to character count */
- } else {
- /* space for digits before decimal point */
- if (expt > 0)
- size = expt;
- else /* "0" */
- size = 1;
- /* space for decimal pt and following digits */
- if (prec || flags & ALT)
- size += prec + 1;
- if (grouping && expt > 0) {
- /* space for thousands' grouping */
- nseps = nrepeats = 0;
- lead = expt;
- while (*grouping != CHAR_MAX) {
- if (lead <= *grouping)
- break;
- lead -= *grouping;
- if (*(grouping+1)) {
- nseps++;
- grouping++;
- } else
- nrepeats++;
- }
- size += nseps + nrepeats;
- } else
- lead = expt;
- }
- break;
-#endif /* !NO_FLOATING_POINT */
- case 'n':
- /*
- * Assignment-like behavior is specified if the
- * value overflows or is otherwise unrepresentable.
- * C99 says to use `signed char' for %hhn conversions.
- */
- if (flags & LLONGINT)
- *GETARG(long long *) = ret;
- else if (flags & SIZET)
- *GETARG(ssize_t *) = (ssize_t)ret;
- else if (flags & PTRDIFFT)
- *GETARG(ptrdiff_t *) = ret;
- else if (flags & INTMAXT)
- *GETARG(intmax_t *) = ret;
- else if (flags & LONGINT)
- *GETARG(long *) = ret;
- else if (flags & SHORTINT)
- *GETARG(short *) = ret;
- else if (flags & CHARINT)
- *GETARG(signed char *) = ret;
- else
- *GETARG(int *) = ret;
- continue; /* no output */
- case 'O':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'o':
- if (flags & INTMAX_SIZE)
- ujval = UJARG();
- else
- ulval = UARG();
- base = 8;
- goto nosign;
- case 'p':
- /*-
- * ``The argument shall be a pointer to void. The
- * value of the pointer is converted to a sequence
- * of printable characters, in an implementation-
- * defined manner.''
- * -- ANSI X3J11
- */
- ujval = (uintmax_t) (UINTN) GETARG(void *);
- base = 16;
- xdigs = xdigs_lower;
- flags = flags | INTMAXT;
- ox[1] = 'x';
- goto nosign;
- case 'S':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 's':
- if (((flags & LONGINT) ? 1:0) != MULTI) {
- if ((result = GETARG(CHAR_T *)) == NULL)
- result = STRCONST("(null)");
- } else {
- MCHAR_T *mc;
-
- if (convbuf != NULL)
- free(convbuf);
- if ((mc = GETARG(MCHAR_T *)) == NULL)
- result = STRCONST("(null)");
- else {
- convbuf = SCONV(mc, prec);
- if (convbuf == NULL) {
- fp->_flags |= __SERR;
- goto error;
- }
- result = convbuf;
- }
- }
-
- if (prec >= 0) {
- /*
- * can't use STRLEN; can only look for the
- * NUL in the first `prec' characters, and
- * STRLEN() will go further.
- */
- CHAR_T *p = MEMCHR(result, 0, (size_t)prec);
-
- if (p != NULL) {
- size = p - result;
- if (size > prec)
- size = prec;
- } else
- size = prec;
- } else
- size = (int)STRLEN(result);
- sign = '\0';
- break;
- case 'U':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'u':
- if (flags & INTMAX_SIZE)
- ujval = UJARG();
- else
- ulval = UARG();
- base = 10;
- goto nosign;
- case 'X':
- xdigs = xdigs_upper;
- goto hex;
- case 'x':
- xdigs = xdigs_lower;
-hex:
- if (flags & INTMAX_SIZE)
- ujval = UJARG();
- else
- ulval = UARG();
- base = 16;
- /* leading 0x/X only if non-zero */
- if (flags & ALT &&
- (flags & INTMAX_SIZE ? ujval != 0 : ulval != 0))
- ox[1] = ch;
-
- flags &= ~GROUPING;
- /* unsigned conversions */
-nosign: sign = '\0';
- /*-
- * ``... diouXx conversions ... if a precision is
- * specified, the 0 flag will be ignored.''
- * -- ANSI X3J11
- */
-number: if ((dprec = prec) >= 0)
- flags &= ~ZEROPAD;
-
- /*-
- * ``The result of converting a zero value with an
- * explicit precision of zero is no characters.''
- * -- ANSI X3J11
- *
- * ``The C Standard is clear enough as is. The call
- * printf("%#.0o", 0) should print 0.''
- * -- Defect Report #151
- */
- result = cp = buf + BUF;
- if (flags & INTMAX_SIZE) {
- if (ujval != 0 || prec != 0 ||
- (flags & ALT && base == 8))
- {
- result = __ujtoa(ujval, cp, base,
- flags & ALT, xdigs,
- flags & GROUPING, thousands_sep,
- grouping);
- }
- } else {
- if (ulval != 0 || prec != 0 ||
- (flags & ALT && base == 8))
- result = __ultoa(ulval, cp, base,
- flags & ALT, xdigs,
- flags & GROUPING, thousands_sep,
- grouping);
- }
- size = buf + BUF - result;
- if (size > BUF) /* should never happen */
- abort();
- break;
- default: /* "%?" prints ?, unless ? is NUL */
- if (ch == '\0')
- goto done;
- /* pretend it was %c with argument ch */
- *buf = ch;
- result = buf;
- size = 1;
- sign = '\0';
- break;
- }
-
- /*
- * All reasonable formats wind up here. At this point, `result'
- * points to a string which (if not flags&LADJUST) should be
- * padded out to `width' places. If flags&ZEROPAD, it should
- * first be prefixed by any sign or other prefix; otherwise,
- * it should be blank padded before the prefix is emitted.
- * After any left-hand padding and prefixing, emit zeroes
- * required by a decimal [diouxX] precision, then print the
- * string proper, then emit zeroes required by any leftover
- * floating precision; finally, if LADJUST, pad with blanks.
- *
- * Compute actual size, so we know how much to pad.
- * size excludes decimal prec; realsz includes it.
- */
- realsz = dprec > size ? dprec : size;
- if (sign)
- realsz++;
- if (ox[1])
- realsz += 2;
-
- prsize = width > realsz ? width : realsz;
- if ((unsigned)ret + prsize > INT_MAX) {
- ret = END_OF_FILE;
- goto error;
- }
-
- /* right-adjusting blank padding */
- if ((flags & (LADJUST|ZEROPAD)) == 0)
- PAD(width - realsz, blanks);
-
- /* prefix */
- if (sign)
- PRINT(&sign, 1);
-
- if (ox[1]) { /* ox[1] is either x, X, or \0 */
- ox[0] = '0';
- PRINT(ox, 2);
- }
-
- /* right-adjusting zero padding */
- if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
- PAD(width - realsz, zeroes);
-
- /* leading zeroes from decimal precision */
- PAD(dprec - size, zeroes);
-
- /* the string or number proper */
-#ifndef NO_FLOATING_POINT
- if ((flags & FPT) == 0) {
- PRINT(result, size);
- } else { /* glue together f_p fragments */
- if (!expchar) { /* %[fF] or sufficiently short %[gG] */
- if (expt <= 0) {
- PRINT(zeroes, 1);
- if (prec || flags & ALT)
- PRINT(decimal_point, 1);
- PAD(-expt, zeroes);
- /* already handled initial 0's */
- prec += expt;
- } else {
- PRINTANDPAD(result, convbuf + ndig,
- lead, zeroes);
- result += lead;
- if (grouping) {
- while (nseps>0 || nrepeats>0) {
- if (nrepeats > 0)
- nrepeats--;
- else {
- grouping--;
- nseps--;
- }
- PRINT(&thousands_sep,
- 1);
- PRINTANDPAD(result,
- convbuf + ndig,
- *grouping, zeroes);
- result += *grouping;
- }
- if (result > convbuf + ndig)
- result = convbuf + ndig;
- }
- if (prec || flags & ALT) {
- buf[0] = *decimal_point;
- PRINT(buf, 1);
- }
- }
- PRINTANDPAD(result, convbuf + ndig, prec,
- zeroes);
- } else { /* %[eE] or sufficiently long %[gG] */
- if (prec >= 1 || flags & ALT) {
- buf[0] = *result++;
- buf[1] = *decimal_point;
- PRINT(buf, 2);
- PRINT(result, ndig-1);
- PAD(prec - ndig, zeroes);
- } else /* XeYYY */
- PRINT(result, 1);
- PRINT(expstr, expsize);
- }
- }
-#else
- PRINT(result, size);
-#endif
- /* left-adjusting padding (always blank) */
- if (flags & LADJUST)
- PAD(width - realsz, blanks);
-
- /* finally, adjust ret */
- ret += prsize;
- FLUSH();
- }
-done:
- FLUSH();
-error:
- va_end(orgap);
- if (convbuf != NULL)
- free(convbuf);
- if (__sferror(fp))
- ret = END_OF_FILE;
- if ((argtable != NULL) && (argtable != statargtable))
- free (argtable);
- return (ret);
- /* NOTREACHED */
-oomem:
- errno = ENOMEM;
- ret = END_OF_FILE;
- goto error;
-}
-
-/*
- * Find all arguments when a positional parameter is encountered. Returns a
- * table, indexed by argument number, of pointers to each arguments. The
- * initial argument table should be an array of STATIC_ARG_TBL_SIZE entries.
- * It will be replaces with a malloc-ed one if it overflows.
- */
-static int
-__find_arguments(const CHAR_T *fmt0, va_list ap, union arg **argtable)
-{
- CHAR_T *fmt; /* format string */
- int ch; /* character from fmt */
- int n, n2; /* handy integer (short term usage) */
- CHAR_T *cp; /* handy char pointer (short term usage) */
- int flags; /* flags as above */
- enum typeid *typetable; /* table of types */
- enum typeid stattypetable [STATIC_ARG_TBL_SIZE];
- int tablesize; /* current size of type table */
- int tablemax; /* largest used index in table */
- int nextarg; /* 1-based argument index */
-
- /*
- * Add an argument type to the table, expanding if necessary.
- */
-#define ADDTYPE(type) \
- do { \
- if (nextarg >= tablesize) \
- if (__grow_type_table(nextarg, &typetable, \
- &tablesize) == -1) \
- return -1; \
- if (nextarg > tablemax) \
- tablemax = nextarg; \
- typetable[nextarg++] = type; \
- } while (/*CONSTCOND*/0)
-
-#define ADDSARG() \
- do { \
- if (flags & INTMAXT) \
- ADDTYPE(T_INTMAXT); \
- else if (flags & SIZET) \
- ADDTYPE(T_SIZET); \
- else if (flags & PTRDIFFT) \
- ADDTYPE(T_PTRDIFFT); \
- else if (flags & LLONGINT) \
- ADDTYPE(T_LLONG); \
- else if (flags & LONGINT) \
- ADDTYPE(T_LONG); \
- else \
- ADDTYPE(T_INT); \
- } while (/*CONSTCOND*/0)
-
-#define ADDUARG() \
- do { \
- if (flags & INTMAXT) \
- ADDTYPE(T_UINTMAXT); \
- else if (flags & SIZET) \
- ADDTYPE(T_SIZET); \
- else if (flags & PTRDIFFT) \
- ADDTYPE(T_PTRDIFFT); \
- else if (flags & LLONGINT) \
- ADDTYPE(T_U_LLONG); \
- else if (flags & LONGINT) \
- ADDTYPE(T_U_LONG); \
- else \
- ADDTYPE(T_U_INT); \
- } while (/*CONSTCOND*/0)
- /*
- * Add * arguments to the type array.
- */
-#define ADDASTER() \
- n2 = 0; \
- cp = fmt; \
- while (is_digit(*cp)) { \
- n2 = 10 * n2 + to_digit(*cp); \
- cp++; \
- } \
- if (*cp == '$') { \
- int hold = nextarg; \
- nextarg = n2; \
- ADDTYPE(T_INT); \
- nextarg = hold; \
- fmt = ++cp; \
- } else { \
- ADDTYPE(T_INT); \
- }
- fmt = (CHAR_T *)__UNCONST(fmt0);
- typetable = stattypetable;
- tablesize = STATIC_ARG_TBL_SIZE;
- tablemax = 0;
- nextarg = 1;
- for (n = 0; n < STATIC_ARG_TBL_SIZE; n++)
- typetable[n] = T_UNUSED;
-
- /*
- * Scan the format for conversions (`%' character).
- */
- for (;;) {
- for (cp = fmt; (ch = *fmt) != '\0' && ch != '%'; fmt++)
- /* void */;
- if (ch == '\0')
- goto done;
- fmt++; /* skip over '%' */
-
- flags = 0;
-
-rflag: ch = *fmt++;
-reswitch: switch (ch) {
- case ' ':
- case '#':
- goto rflag;
- case '*':
- ADDASTER ();
- goto rflag;
- case '-':
- case '+':
- case '\'':
- goto rflag;
- case '.':
- if ((ch = *fmt++) == '*') {
- ADDASTER ();
- goto rflag;
- }
- while (is_digit(ch)) {
- ch = *fmt++;
- }
- goto reswitch;
- case '0':
- goto rflag;
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- n = 0;
- do {
- n = 10 * n + to_digit(ch);
- ch = *fmt++;
- } while (is_digit(ch));
- if (ch == '$') {
- nextarg = n;
- goto rflag;
- }
- goto reswitch;
-#ifndef NO_FLOATING_POINT
- case 'L':
- flags |= LONGDBL;
- goto rflag;
-#endif
- case 'h':
- if (flags & SHORTINT) {
- flags &= ~SHORTINT;
- flags |= CHARINT;
- } else
- flags |= SHORTINT;
- goto rflag;
- case 'j':
- flags |= INTMAXT;
- goto rflag;
- case 'l':
- if (flags & LONGINT) {
- flags &= ~LONGINT;
- flags |= LLONGINT;
- } else
- flags |= LONGINT;
- goto rflag;
- case 'q':
- flags |= LLONGINT; /* not necessarily */
- goto rflag;
- case 't':
- flags |= PTRDIFFT;
- goto rflag;
- case 'z':
- flags |= SIZET;
- goto rflag;
- case 'C':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'c':
- if (flags & LONGINT)
- ADDTYPE(T_WINT);
- else
- ADDTYPE(T_INT);
- break;
- case 'D':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'd':
- case 'i':
- ADDSARG();
- break;
-#ifndef NO_FLOATING_POINT
- case 'a':
- case 'A':
- case 'e':
- case 'E':
- case 'f':
- case 'g':
- case 'G':
- if (flags & LONGDBL)
- ADDTYPE(T_LONG_DOUBLE);
- else
- ADDTYPE(T_DOUBLE);
- break;
-#endif /* !NO_FLOATING_POINT */
- case 'n':
- if (flags & INTMAXT)
- ADDTYPE(TP_INTMAXT);
- else if (flags & PTRDIFFT)
- ADDTYPE(TP_PTRDIFFT);
- else if (flags & SIZET)
- ADDTYPE(TP_SIZET);
- else if (flags & LLONGINT)
- ADDTYPE(TP_LLONG);
- else if (flags & LONGINT)
- ADDTYPE(TP_LONG);
- else if (flags & SHORTINT)
- ADDTYPE(TP_SHORT);
- else if (flags & CHARINT)
- ADDTYPE(TP_SCHAR);
- else
- ADDTYPE(TP_INT);
- continue; /* no output */
- case 'O':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'o':
- ADDUARG();
- break;
- case 'p':
- ADDTYPE(TP_VOID);
- break;
- case 'S':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 's':
- if (flags & LONGINT)
- ADDTYPE(TP_WCHAR);
- else
- ADDTYPE(TP_CHAR);
- break;
- case 'U':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'u':
- case 'X':
- case 'x':
- ADDUARG();
- break;
- default: /* "%?" prints ?, unless ? is NUL */
- if (ch == '\0')
- goto done;
- break;
- }
- }
-done:
- /*
- * Build the argument table.
- */
- if (tablemax >= STATIC_ARG_TBL_SIZE) {
- *argtable = (union arg *)
- malloc (sizeof (union arg) * (tablemax + 1));
- if (*argtable == NULL)
- return -1;
- }
-
- (*argtable) [0].intarg = 0;
- for (n = 1; n <= tablemax; n++) {
- switch (typetable [n]) {
- case T_UNUSED: /* whoops! */
- (*argtable) [n].intarg = va_arg (ap, int);
- break;
- case TP_SCHAR:
- (*argtable) [n].pschararg = va_arg (ap, signed char *);
- break;
- case TP_SHORT:
- (*argtable) [n].pshortarg = va_arg (ap, short *);
- break;
- case T_INT:
- (*argtable) [n].intarg = va_arg (ap, int);
- break;
- case T_U_INT:
- (*argtable) [n].uintarg = va_arg (ap, unsigned int);
- break;
- case TP_INT:
- (*argtable) [n].pintarg = va_arg (ap, int *);
- break;
- case T_LONG:
- (*argtable) [n].longarg = va_arg (ap, long);
- break;
- case T_U_LONG:
- (*argtable) [n].ulongarg = va_arg (ap, unsigned long);
- break;
- case TP_LONG:
- (*argtable) [n].plongarg = va_arg (ap, long *);
- break;
- case T_LLONG:
- (*argtable) [n].longlongarg = va_arg (ap, long long);
- break;
- case T_U_LLONG:
- (*argtable) [n].ulonglongarg = va_arg (ap, unsigned long long);
- break;
- case TP_LLONG:
- (*argtable) [n].plonglongarg = va_arg (ap, long long *);
- break;
- case T_PTRDIFFT:
- (*argtable) [n].ptrdiffarg = va_arg (ap, ptrdiff_t);
- break;
- case TP_PTRDIFFT:
- (*argtable) [n].pptrdiffarg = va_arg (ap, ptrdiff_t *);
- break;
- case T_SIZET:
- (*argtable) [n].sizearg = va_arg (ap, size_t);
- break;
- case TP_SIZET:
- (*argtable) [n].psizearg = va_arg (ap, size_t *);
- break;
- case T_INTMAXT:
- (*argtable) [n].intmaxarg = va_arg (ap, intmax_t);
- break;
- case T_UINTMAXT:
- (*argtable) [n].uintmaxarg = va_arg (ap, uintmax_t);
- break;
- case TP_INTMAXT:
- (*argtable) [n].pintmaxarg = va_arg (ap, intmax_t *);
- break;
- case T_DOUBLE:
-#ifndef NO_FLOATING_POINT
- (*argtable) [n].doublearg = va_arg (ap, double);
-#endif
- break;
- case T_LONG_DOUBLE:
-#ifndef NO_FLOATING_POINT
- (*argtable) [n].longdoublearg = va_arg (ap, long double);
-#endif
- break;
- case TP_CHAR:
- (*argtable) [n].pchararg = va_arg (ap, char *);
- break;
- case TP_VOID:
- (*argtable) [n].pvoidarg = va_arg (ap, void *);
- break;
- case T_WINT:
- (*argtable) [n].wintarg = va_arg (ap, int);
- break;
- case TP_WCHAR:
- (*argtable) [n].pwchararg = va_arg (ap, wchar_t *);
- break;
- }
- }
-
- if ((typetable != NULL) && (typetable != stattypetable))
- free (typetable);
- return 0;
-}
-
-/*
- * Increase the size of the type table.
- */
-static int
-__grow_type_table (int nextarg, enum typeid **typetable, int *tablesize)
-{
- enum typeid *const oldtable = *typetable;
- const int oldsize = *tablesize;
- enum typeid *newtable;
- int n, newsize = oldsize * 2;
-
- if (newsize < nextarg + 1)
- newsize = nextarg + 1;
- if (oldsize == STATIC_ARG_TBL_SIZE) {
- if ((newtable = malloc(newsize * sizeof(enum typeid))) == NULL)
- return -1;
- memcpy(newtable, oldtable, oldsize * sizeof(enum typeid));
- } else {
- newtable = realloc(oldtable, newsize * sizeof(enum typeid));
- if (newtable == NULL) {
- free(oldtable);
- return -1;
- }
- }
- for (n = oldsize; n < newsize; n++)
- newtable[n] = T_UNUSED;
-
- *typetable = newtable;
- *tablesize = newsize;
- return 0;
-}
-
-
-#ifndef NO_FLOATING_POINT
-#ifndef WIDE_DOUBLE
-static char *
-cvt(double value, int ndigits, int flags, char *sign, int *decpt, int ch,
- int *length)
-{
- int mode, dsgn;
- char *digits, *bp, *rve;
-
- _DIAGASSERT(decpt != NULL);
- _DIAGASSERT(length != NULL);
- _DIAGASSERT(sign != NULL);
-
- if (ch == 'f') {
- mode = 3; /* ndigits after the decimal point */
- } else {
- /* To obtain ndigits after the decimal point for the 'e'
- * and 'E' formats, round to ndigits + 1 significant
- * figures.
- */
- if (ch == 'e' || ch == 'E') {
- ndigits++;
- }
- mode = 2; /* ndigits significant digits */
- }
-
- digits = __dtoa(value, mode, ndigits, decpt, &dsgn, &rve);
- if (digits == NULL)
- return NULL;
- if (dsgn) {
- value = -value;
- *sign = '-';
- } else
- *sign = '\000';
- if ((ch != 'g' && ch != 'G') || flags & ALT) { /* Print trailing zeros */
- bp = digits + ndigits;
- if (ch == 'f') {
- if (*digits == '0' && value)
- *decpt = -ndigits + 1;
- bp += *decpt;
- }
- while (rve < bp)
- *rve++ = '0';
- }
- *length = rve - digits;
- return digits;
-}
-#endif
-
-static int
-exponent(CHAR_T *p0, int expo, int fmtch)
-{
- CHAR_T *p, *t;
- CHAR_T expbuf[MAXEXPDIG];
-
- p = p0;
- *p++ = fmtch;
- if (expo < 0) {
- expo = -expo;
- *p++ = '-';
- }
- else
- *p++ = '+';
- t = expbuf + MAXEXPDIG;
- if (expo > 9) {
- do {
- *--t = to_char(expo % 10);
- } while ((expo /= 10) > 9);
- *--t = to_char(expo);
- for (; t < expbuf + MAXEXPDIG; *p++ = *t++);
- }
- else {
- /*
- * Exponents for decimal floating point conversions
- * (%[eEgG]) must be at least two characters long,
- * whereas exponents for hexadecimal conversions can
- * be only one character long.
- */
- if (fmtch == 'e' || fmtch == 'E')
- *p++ = '0';
- *p++ = to_char(expo);
- }
- return (p - p0);
-}
-#endif /* !NO_FLOATING_POINT */
diff --git a/StdLib/LibC/Stdio/vfwscanf.c b/StdLib/LibC/Stdio/vfwscanf.c
deleted file mode 100644
index ae149c3602..0000000000
--- a/StdLib/LibC/Stdio/vfwscanf.c
+++ /dev/null
@@ -1,912 +0,0 @@
-/** @file
- valist worker function for the wide-character fscanf.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- FreeBSD: src/lib/libc/stdio/vfwscanf.c,v 1.12 2004/05/02 20:13:29 obrien Exp
- NetBSD: vfwscanf.c,v 1.2 2005/06/12 05:48:41 lukem Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include "namespace.h"
-#include <ctype.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <stdarg.h>
-#include <string.h>
-#include <limits.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include "reentrant.h"
-#include "local.h"
-
-#ifndef NO_FLOATING_POINT
-#include <locale.h>
-#endif
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
- #pragma warning ( disable : 4244 ) // Allow wint_t to wchar_t conversions
- #pragma warning ( disable : 4305 ) // Allow truncation from UINT64 to void*
- #pragma warning ( disable : 4701 ) // Disable false warning for local variable p near line 375
-#endif
-
-
-#define BUF 513 /* Maximum length of numeric string. */
-
-/*
- * Flags used during conversion.
- */
-#define LONG 0x01 /* l: long or double */
-#define LONGDBL 0x02 /* L: long double */
-#define SHORT 0x04 /* h: short */
-#define SUPPRESS 0x08 /* *: suppress assignment */
-#define POINTER 0x10 /* p: void * (as hex) */
-#define NOSKIP 0x20 /* [ or c: do not skip blanks */
-#define LONGLONG 0x400 /* ll: quad_t (+ deprecated q: quad) */
-#define INTMAXT 0x800 /* j: intmax_t */
-#define PTRDIFFT 0x1000 /* t: ptrdiff_t */
-#define SIZET 0x2000 /* z: size_t */
-#define SHORTSHORT 0x4000 /* hh: char */
-#define UNSIGNED 0x8000 /* %[oupxX] conversions */
-
-/*
- * The following are used in integral conversions only:
- * SIGNOK, NDIGITS, PFXOK, and NZDIGITS
- */
-#define SIGNOK 0x40 /* +/- is (still) legal */
-#define NDIGITS 0x80 /* no digits detected */
-#define PFXOK 0x100 /* 0x prefix is (still) legal */
-#define NZDIGITS 0x200 /* no zero digits detected */
-#define HAVESIGN 0x10000 /* sign detected */
-
-/*
- * Conversion types.
- */
-#define CT_CHAR 0 /* %c conversion */
-#define CT_CCL 1 /* %[...] conversion */
-#define CT_STRING 2 /* %s conversion */
-#define CT_INT 3 /* %[dioupxX] conversion */
-#define CT_FLOAT 4 /* %[efgEFG] conversion */
-
-static int parsefloat(FILE *, wchar_t *, wchar_t *);
-
-#define INCCL(_c) \
- (cclcompl ? (wmemchr(ccls, (_c), (size_t)(ccle - ccls)) == NULL) : \
- (wmemchr(ccls, (_c), (size_t)(ccle - ccls)) != NULL))
-
-/*
- * MT-safe version.
- */
-int
-vfwscanf(FILE * __restrict fp, const wchar_t * __restrict fmt, va_list ap)
-{
- int ret;
-
- FLOCKFILE(fp);
- _SET_ORIENTATION(fp, 1);
- ret = __vfwscanf_unlocked(fp, fmt, ap);
- FUNLOCKFILE(fp);
- return (ret);
-}
-
-/*
- * Non-MT-safe version.
- */
-int
-__vfwscanf_unlocked(FILE * __restrict fp, const wchar_t * __restrict fmt, va_list ap)
-{
- wint_t c; /* character from format, or conversion */
- size_t width; /* field width, or 0 */
- wchar_t *p = NULL; /* points into all kinds of strings */
- int n; /* handy integer */
- int flags; /* flags as defined above */
- wchar_t *p0; /* saves original value of p when necessary */
- int nassigned; /* number of fields assigned */
- int nconversions; /* number of conversions */
- int nread; /* number of characters consumed from fp */
- int base; /* base argument to conversion function */
- wchar_t buf[BUF]; /* buffer for numeric conversions */
- const wchar_t *ccls; /* character class start */
- const wchar_t *ccle; /* character class end */
- int cclcompl; /* ccl is complemented? */
- wint_t wi; /* handy wint_t */
- char *mbp; /* multibyte string pointer for %c %s %[ */
- size_t nconv; /* number of bytes in mb. conversion */
- char mbbuf[MB_LEN_MAX]; /* temporary mb. character buffer */
- mbstate_t mbs;
-
- static const mbstate_t initial = { 0 };
- /* `basefix' is used to avoid `if' tests in the integer scanner */
- static short basefix[17] =
- { 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
-
- nassigned = 0;
- nconversions = 0;
- nread = 0;
- ccls = NULL;
- ccle = NULL;
- base = 0;
- cclcompl = 0;
- mbp = NULL;
-
- for (;;) {
- c = *fmt++;
- if (c == 0)
- return (nassigned);
- if (iswspace(c)) {
- while ((c = __fgetwc_unlock(fp)) != WEOF &&
- iswspace(c))
- ;
- if (c != WEOF)
- ungetwc(c, fp);
- continue;
- }
- if (c != '%')
- goto literal;
- width = 0;
- flags = 0;
- /*
- * switch on the format. continue if done;
- * break once format type is derived.
- */
-again: c = *fmt++;
- switch (c) {
- case '%':
-literal:
- if ((wi = __fgetwc_unlock(fp)) == WEOF)
- goto input_failure;
- if (wi != c) {
- ungetwc(wi, fp);
- goto match_failure;
- }
- nread++;
- continue;
-
- case '*':
- flags |= SUPPRESS;
- goto again;
- case 'j':
- flags |= INTMAXT;
- goto again;
- case 'l':
- if (flags & LONG) {
- flags &= ~LONG;
- flags |= LONGLONG;
- } else
- flags |= LONG;
- goto again;
- case 'q':
- flags |= LONGLONG; /* not quite */
- goto again;
- case 't':
- flags |= PTRDIFFT;
- goto again;
- case 'z':
- flags |= SIZET;
- goto again;
- case 'L':
- flags |= LONGDBL;
- goto again;
- case 'h':
- if (flags & SHORT) {
- flags &= ~SHORT;
- flags |= SHORTSHORT;
- } else
- flags |= SHORT;
- goto again;
-
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- width = width * 10 + c - '0';
- goto again;
-
- /*
- * Conversions.
- */
- case 'd':
- c = CT_INT;
- base = 10;
- break;
-
- case 'i':
- c = CT_INT;
- base = 0;
- break;
-
- case 'o':
- c = CT_INT;
- flags |= UNSIGNED;
- base = 8;
- break;
-
- case 'u':
- c = CT_INT;
- flags |= UNSIGNED;
- base = 10;
- break;
-
- case 'X':
- case 'x':
- flags |= PFXOK; /* enable 0x prefixing */
- c = CT_INT;
- flags |= UNSIGNED;
- base = 16;
- break;
-
-#ifndef NO_FLOATING_POINT
- //case 'A':
- case 'E': case 'F': case 'G':
- //case 'a':
- case 'e': case 'f': case 'g':
- c = CT_FLOAT;
- break;
-#endif
-
- case 'S':
- flags |= LONG;
- /* FALLTHROUGH */
- case 's':
- c = CT_STRING;
- break;
-
- case '[':
- ccls = fmt;
- if (*fmt == '^') {
- cclcompl = 1;
- fmt++;
- } else
- cclcompl = 0;
- if (*fmt == ']')
- fmt++;
- while (*fmt != '\0' && *fmt != ']')
- fmt++;
- ccle = fmt;
- fmt++;
- flags |= NOSKIP;
- c = CT_CCL;
- break;
-
- case 'C':
- flags |= LONG;
- /* FALLTHROUGH */
- case 'c':
- flags |= NOSKIP;
- c = CT_CHAR;
- break;
-
- case 'p': /* pointer format is like hex */
- flags |= POINTER | PFXOK;
- c = CT_INT; /* assumes sizeof(uintmax_t) */
- flags |= UNSIGNED; /* >= sizeof(uintptr_t) */
- base = 16;
- break;
-
- case 'n':
- nconversions++;
- if (flags & SUPPRESS) /* ??? */
- continue;
- if (flags & SHORTSHORT)
- *va_arg(ap, char *) = (char)nread;
- else if (flags & SHORT)
- *va_arg(ap, short *) = (short)nread;
- else if (flags & LONG)
- *va_arg(ap, long *) = (long)nread;
- else if (flags & LONGLONG)
- *va_arg(ap, INT64 *) = (INT64)nread; // was quad_t
- else if (flags & INTMAXT)
- *va_arg(ap, intmax_t *) = (intmax_t)nread;
- else if (flags & SIZET)
- *va_arg(ap, size_t *) = (size_t)nread;
- else if (flags & PTRDIFFT)
- *va_arg(ap, ptrdiff_t *) = (ptrdiff_t)nread;
- else
- *va_arg(ap, int *) = nread;
- continue;
-
- default:
- goto match_failure;
-
- /*
- * Disgusting backwards compatibility hack. XXX
- */
- case '\0': /* compat */
- return (EOF);
- }
-
- /*
- * Consume leading white space, except for formats
- * that suppress this.
- */
- if ((flags & NOSKIP) == 0) {
- while ((wi = __fgetwc_unlock(fp)) != WEOF && iswspace(wi))
- nread++;
- if (wi == WEOF)
- goto input_failure;
- ungetwc(wi, fp);
- }
-
- /*
- * Do the conversion.
- */
- switch (c) {
-
- case CT_CHAR:
- /* scan arbitrary characters (sets NOSKIP) */
- if (width == 0)
- width = 1;
- if (flags & LONG) {
- if (!(flags & SUPPRESS))
- p = va_arg(ap, wchar_t *);
- n = 0;
- while (width-- != 0 &&
- (wi = __fgetwc_unlock(fp)) != WEOF) {
- if (!(flags & SUPPRESS))
- *p++ = (wchar_t)wi;
- n++;
- }
- if (n == 0)
- goto input_failure;
- nread += n;
- if (!(flags & SUPPRESS))
- nassigned++;
- } else {
- if (!(flags & SUPPRESS))
- mbp = va_arg(ap, char *);
- n = 0;
- mbs = initial;
- while (width != 0 &&
- (wi = __fgetwc_unlock(fp)) != WEOF) {
- if (width >= MB_CUR_MAX &&
- !(flags & SUPPRESS)) {
- nconv = wcrtomb(mbp, (wchar_t)wi, &mbs);
- if (nconv == (size_t)-1)
- goto input_failure;
- } else {
- nconv = wcrtomb(mbbuf, (wchar_t)wi,
- &mbs);
- if (nconv == (size_t)-1)
- goto input_failure;
- if (nconv > width) {
- ungetwc(wi, fp);
- break;
- }
- if (!(flags & SUPPRESS))
- memcpy(mbp, mbbuf,
- nconv);
- }
- if (!(flags & SUPPRESS))
- mbp += nconv;
- width -= nconv;
- n++;
- }
- if (n == 0)
- goto input_failure;
- nread += n;
- if (!(flags & SUPPRESS))
- nassigned++;
- }
- nconversions++;
- break;
-
- case CT_CCL:
- /* scan a (nonempty) character class (sets NOSKIP) */
- if (width == 0)
- width = (size_t)~0; /* `infinity' */
- /* take only those things in the class */
- if ((flags & SUPPRESS) && (flags & LONG)) {
- n = 0;
- while ((wi = __fgetwc_unlock(fp)) != WEOF &&
- width-- != 0 && INCCL(wi))
- n++;
- if (wi != WEOF)
- ungetwc(wi, fp);
- if (n == 0)
- goto match_failure;
- } else if (flags & LONG) {
- p0 = p = va_arg(ap, wchar_t *);
- while ((wi = __fgetwc_unlock(fp)) != WEOF &&
- width-- != 0 && INCCL(wi))
- *p++ = (wchar_t)wi;
- if (wi != WEOF)
- ungetwc(wi, fp);
- n = p - p0;
- if (n == 0)
- goto match_failure;
- *p = 0;
- nassigned++;
- } else {
- if (!(flags & SUPPRESS))
- mbp = va_arg(ap, char *);
- n = 0;
- mbs = initial;
- while ((wi = __fgetwc_unlock(fp)) != WEOF &&
- width != 0 && INCCL(wi)) {
- if (width >= MB_CUR_MAX &&
- !(flags & SUPPRESS)) {
- nconv = wcrtomb(mbp, wi, &mbs);
- if (nconv == (size_t)-1)
- goto input_failure;
- } else {
- nconv = wcrtomb(mbbuf, wi,
- &mbs);
- if (nconv == (size_t)-1)
- goto input_failure;
- if (nconv > width)
- break;
- if (!(flags & SUPPRESS))
- memcpy(mbp, mbbuf,
- nconv);
- }
- if (!(flags & SUPPRESS))
- mbp += nconv;
- width -= nconv;
- n++;
- }
- if (wi != WEOF)
- ungetwc(wi, fp);
- if (!(flags & SUPPRESS)) {
- *mbp = 0;
- nassigned++;
- }
- }
- nread += n;
- nconversions++;
- break;
-
- case CT_STRING:
- /* like CCL, but zero-length string OK, & no NOSKIP */
- if (width == 0)
- width = (size_t)~0;
- if ((flags & SUPPRESS) && (flags & LONG)) {
- while ((wi = __fgetwc_unlock(fp)) != WEOF &&
- width-- != 0 &&
- !iswspace(wi))
- nread++;
- if (wi != WEOF)
- ungetwc(wi, fp);
- } else if (flags & LONG) {
- p0 = p = va_arg(ap, wchar_t *);
- while ((wi = __fgetwc_unlock(fp)) != WEOF &&
- width-- != 0 &&
- !iswspace(wi)) {
- *p++ = (wchar_t)wi;
- nread++;
- }
- if (wi != WEOF)
- ungetwc(wi, fp);
- *p = '\0';
- nassigned++;
- } else {
- if (!(flags & SUPPRESS))
- mbp = va_arg(ap, char *);
- mbs = initial;
- while ((wi = __fgetwc_unlock(fp)) != WEOF &&
- width != 0 &&
- !iswspace(wi)) {
- if (width >= MB_CUR_MAX &&
- !(flags & SUPPRESS)) {
- nconv = wcrtomb(mbp, wi, &mbs);
- if (nconv == (size_t)-1)
- goto input_failure;
- } else {
- nconv = wcrtomb(mbbuf, wi,
- &mbs);
- if (nconv == (size_t)-1)
- goto input_failure;
- if (nconv > width)
- break;
- if (!(flags & SUPPRESS))
- memcpy(mbp, mbbuf,
- nconv);
- }
- if (!(flags & SUPPRESS))
- mbp += nconv;
- width -= nconv;
- nread++;
- }
- if (wi != WEOF)
- ungetwc(wi, fp);
- if (!(flags & SUPPRESS)) {
- *mbp = 0;
- nassigned++;
- }
- }
- nconversions++;
- continue;
-
- case CT_INT:
- /* scan an integer as if by the conversion function */
- if (width == 0 || width > sizeof(buf) /
- sizeof(*buf) - 1)
- width = sizeof(buf) / sizeof(*buf) - 1;
- flags |= SIGNOK | NDIGITS | NZDIGITS;
- for (p = buf; width; width--) {
- c = __fgetwc_unlock(fp);
- /*
- * Switch on the character; `goto ok'
- * if we accept it as a part of number.
- */
- switch (c) {
-
- /*
- * The digit 0 is always legal, but is
- * special. For %i conversions, if no
- * digits (zero or nonzero) have been
- * scanned (only signs), we will have
- * base==0. In that case, we should set
- * it to 8 and enable 0x prefixing.
- * Also, if we have not scanned zero digits
- * before this, do not turn off prefixing
- * (someone else will turn it off if we
- * have scanned any nonzero digits).
- */
- case '0':
- if (base == 0) {
- base = 8;
- flags |= PFXOK;
- }
- if (flags & NZDIGITS)
- flags &= ~(SIGNOK|NZDIGITS|NDIGITS);
- else
- flags &= ~(SIGNOK|PFXOK|NDIGITS);
- goto ok;
-
- /* 1 through 7 always legal */
- case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- base = basefix[base];
- flags &= ~(SIGNOK | PFXOK | NDIGITS);
- goto ok;
-
- /* digits 8 and 9 ok iff decimal or hex */
- case '8': case '9':
- base = basefix[base];
- if (base <= 8)
- break; /* not legal here */
- flags &= ~(SIGNOK | PFXOK | NDIGITS);
- goto ok;
-
- /* letters ok iff hex */
- case 'A': case 'B': case 'C':
- case 'D': case 'E': case 'F':
- case 'a': case 'b': case 'c':
- case 'd': case 'e': case 'f':
- /* no need to fix base here */
- if (base <= 10)
- break; /* not legal here */
- flags &= ~(SIGNOK | PFXOK | NDIGITS);
- goto ok;
-
- /* sign ok only as first character */
- case '+': case '-':
- if (flags & SIGNOK) {
- flags &= ~SIGNOK;
- flags |= HAVESIGN;
- goto ok;
- }
- break;
-
- /*
- * x ok iff flag still set & 2nd char (or
- * 3rd char if we have a sign).
- */
- case 'x': case 'X':
- if (flags & PFXOK && p ==
- buf + 1 + !!(flags & HAVESIGN)) {
- base = 16; /* if %i */
- flags &= ~PFXOK;
- goto ok;
- }
- break;
- }
-
- /*
- * If we got here, c is not a legal character
- * for a number. Stop accumulating digits.
- */
- if (c != WEOF)
- ungetwc(c, fp);
- break;
- ok:
- /*
- * c is legal: store it and look at the next.
- */
- *p++ = (wchar_t)c;
- }
- /*
- * If we had only a sign, it is no good; push
- * back the sign. If the number ends in `x',
- * it was [sign] '0' 'x', so push back the x
- * and treat it as [sign] '0'.
- */
- if (flags & NDIGITS) {
- if (p > buf)
- ungetwc(*--p, fp);
- goto match_failure;
- }
- c = p[-1];
- if (c == 'x' || c == 'X') {
- --p;
- ungetwc(c, fp);
- }
- if ((flags & SUPPRESS) == 0) {
- uintmax_t res;
-
- *p = 0;
- if ((flags & UNSIGNED) == 0)
- res = wcstoimax(buf, NULL, base);
- else
- res = wcstoumax(buf, NULL, base);
-
- if (flags & POINTER) {
- *va_arg(ap, void **) = (void *)res;
- }
- else if (flags & SHORTSHORT) {
- *va_arg(ap, char *) = (char)res;
- }
- else if (flags & SHORT) {
- *va_arg(ap, short *) = (short)res;
- }
- else if (flags & LONG) {
- *va_arg(ap, long *) = (long)res;
- }
- else if (flags & LONGLONG) {
- *va_arg(ap, INT64 *) = res; // was quad_t
- }
- else if (flags & INTMAXT) {
- *va_arg(ap, intmax_t *) = res;
- }
- else if (flags & PTRDIFFT) {
- *va_arg(ap, ptrdiff_t *) = (ptrdiff_t)res;
- }
- else if (flags & SIZET) {
- *va_arg(ap, size_t *) = (size_t)res;
- }
- else {
- *va_arg(ap, int *) = (int)res;
- }
- nassigned++;
- }
- nread += p - buf;
- nconversions++;
- break;
-
-#ifndef NO_FLOATING_POINT
- case CT_FLOAT:
- /* scan a floating point number as if by strtod */
- if (width == 0 || width > sizeof(buf) /
- sizeof(*buf) - 1)
- width = sizeof(buf) / sizeof(*buf) - 1;
- if ((width = parsefloat(fp, buf, buf + width)) == 0)
- goto match_failure;
- if ((flags & SUPPRESS) == 0) {
-#ifdef REAL_LONG_DOUBLE_SUPPORT
- if (flags & LONGDBL) {
- long double res = wcstold(buf, &p);
- *va_arg(ap, long double *) = res;
- } else
-#endif
- if (flags & (LONG | LONGDBL)) {
- double res = wcstod(buf, &p);
- *va_arg(ap, double *) = res;
- }
- else {
- float res = wcstof(buf, &p);
- *va_arg(ap, float *) = res;
- }
-#ifdef DEBUG
- if (p - buf != width)
- abort();
-#endif
- nassigned++;
- }
- nread += (int)width;
- nconversions++;
- break;
-#endif /* !NO_FLOATING_POINT */
- }
- }
-input_failure:
- return (nconversions != 0 ? nassigned : EOF);
-match_failure:
- return (nassigned);
-}
-
-#ifndef NO_FLOATING_POINT
-static int
-parsefloat(FILE *fp, wchar_t *buf, wchar_t *end)
-{
- wchar_t *commit, *p;
- int infnanpos = 0;
- enum {
- S_START, S_GOTSIGN, S_INF, S_NAN, S_MAYBEHEX,
- S_DIGITS, S_FRAC, S_EXP, S_EXPDIGITS
- } state = S_START;
- wchar_t c;
- wchar_t decpt = (wchar_t)(unsigned char)*localeconv()->decimal_point;
- int gotmantdig = 0, ishex = 0;
-
- /*
- * We set commit = p whenever the string we have read so far
- * constitutes a valid representation of a floating point
- * number by itself. At some point, the parse will complete
- * or fail, and we will ungetc() back to the last commit point.
- * To ensure that the file offset gets updated properly, it is
- * always necessary to read at least one character that doesn't
- * match; thus, we can't short-circuit "infinity" or "nan(...)".
- */
- commit = buf - 1;
- c = (wchar_t)WEOF;
- for (p = buf; p < end; ) {
- if ((wint_t)(c = __fgetwc_unlock(fp)) == WEOF)
- break;
-reswitch:
- switch (state) {
- case S_START:
- state = S_GOTSIGN;
- if (c == '-' || c == '+')
- break;
- else
- goto reswitch;
- case S_GOTSIGN:
- switch (c) {
- case '0':
- state = S_MAYBEHEX;
- commit = p;
- break;
- case 'I':
- case 'i':
- state = S_INF;
- break;
- case 'N':
- case 'n':
- state = S_NAN;
- break;
- default:
- state = S_DIGITS;
- goto reswitch;
- }
- break;
- case S_INF:
- if (infnanpos > 6 ||
- (c != "nfinity"[infnanpos] &&
- c != "NFINITY"[infnanpos]))
- goto parsedone;
- if (infnanpos == 1 || infnanpos == 6)
- commit = p; /* inf or infinity */
- infnanpos++;
- break;
- case S_NAN:
- switch (infnanpos) {
- case -1: /* XXX kludge to deal with nan(...) */
- goto parsedone;
- case 0:
- if (c != 'A' && c != 'a')
- goto parsedone;
- break;
- case 1:
- if (c != 'N' && c != 'n')
- goto parsedone;
- else
- commit = p;
- break;
- case 2:
- if (c != '(')
- goto parsedone;
- break;
- default:
- if (c == ')') {
- commit = p;
- infnanpos = -2;
- } else if (!iswalnum(c) && c != '_')
- goto parsedone;
- break;
- }
- infnanpos++;
- break;
- case S_MAYBEHEX:
- state = S_DIGITS;
- if (c == 'X' || c == 'x') {
- ishex = 1;
- break;
- } else { /* we saw a '0', but no 'x' */
- gotmantdig = 1;
- goto reswitch;
- }
- case S_DIGITS:
- if ((ishex && iswxdigit(c)) || iswdigit(c))
- gotmantdig = 1;
- else {
- state = S_FRAC;
- if (c != decpt)
- goto reswitch;
- }
- if (gotmantdig)
- commit = p;
- break;
- case S_FRAC:
- if (((c == 'E' || c == 'e') && !ishex) ||
- ((c == 'P' || c == 'p') && ishex)) {
- if (!gotmantdig)
- goto parsedone;
- else
- state = S_EXP;
- } else if ((ishex && iswxdigit(c)) || iswdigit(c)) {
- commit = p;
- gotmantdig = 1;
- } else
- goto parsedone;
- break;
- case S_EXP:
- state = S_EXPDIGITS;
- if (c == '-' || c == '+')
- break;
- else
- goto reswitch;
- case S_EXPDIGITS:
- if (iswdigit(c))
- commit = p;
- else
- goto parsedone;
- break;
- default:
- abort();
- }
- *p++ = c;
- c = (wchar_t)WEOF;
- }
-
-parsedone:
- if ((wint_t)c != WEOF)
- ungetwc(c, fp);
- while (commit < --p)
- ungetwc(*p, fp);
- *++commit = '\0';
- return (commit - buf);
-}
-#endif
diff --git a/StdLib/LibC/Stdio/vprintf.c b/StdLib/LibC/Stdio/vprintf.c
deleted file mode 100644
index 46ebf32970..0000000000
--- a/StdLib/LibC/Stdio/vprintf.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/** @file
- Implementation of vprintf as declared in <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: vprintf.c,v 1.10 2003/08/07 16:43:34 agc Exp
- vprintf.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-
-int
-vprintf(char const *fmt, va_list ap)
-{
- _DIAGASSERT(fmt != NULL);
-
- return (vfprintf(stdout, fmt, ap));
-}
diff --git a/StdLib/LibC/Stdio/vscanf.c b/StdLib/LibC/Stdio/vscanf.c
deleted file mode 100644
index 518a8010da..0000000000
--- a/StdLib/LibC/Stdio/vscanf.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* $NetBSD: vscanf.c,v 1.12 2003/08/07 16:43:35 agc Exp $ */
-
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Donn Seeley at UUNET Technologies, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)vscanf.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: vscanf.c,v 1.12 2003/08/07 16:43:35 agc Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-
-#include "reentrant.h"
-#include "local.h"
-
-int
-vscanf(fmt, ap)
- const char *fmt;
- _BSD_VA_LIST_ ap;
-{
-
- _DIAGASSERT(fmt != NULL);
-
- return (__svfscanf(stdin, fmt, ap));
-}
diff --git a/StdLib/LibC/Stdio/vsnprintf.c b/StdLib/LibC/Stdio/vsnprintf.c
deleted file mode 100644
index 16e06667bc..0000000000
--- a/StdLib/LibC/Stdio/vsnprintf.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* $NetBSD: vsnprintf.c,v 1.20 2005/02/09 21:35:47 kleink Exp $ */
-
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)vsnprintf.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: vsnprintf.c,v 1.20 2005/02/09 21:35:47 kleink Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-#ifdef __weak_alias
-__weak_alias(vsnprintf,_vsnprintf)
-#endif
-
-int
-vsnprintf(char *str, size_t n, const char *fmt, va_list ap)
-{
- int ret;
- FILE f;
- struct __sfileext fext;
- unsigned char dummy[1];
-
- _DIAGASSERT(n == 0 || str != NULL);
- _DIAGASSERT(fmt != NULL);
-
- if ((int)n < 0) {
- errno = EINVAL;
- return (-1);
- }
-
- _FILEEXT_SETUP(&f, &fext);
- f._file = -1;
- f._flags = __SWR | __SSTR;
- if (n == 0) {
- f._bf._base = f._p = dummy;
- f._bf._size = f._w = 0;
- } else {
- f._bf._base = f._p = (unsigned char *)str;
- f._bf._size = f._w = (int)(n - 1);
- }
- ret = __vfprintf_unlocked(&f, fmt, ap);
- *f._p = 0;
- return (ret);
-}
diff --git a/StdLib/LibC/Stdio/vsnprintf_ss.c b/StdLib/LibC/Stdio/vsnprintf_ss.c
deleted file mode 100644
index a71dd6d3e5..0000000000
--- a/StdLib/LibC/Stdio/vsnprintf_ss.c
+++ /dev/null
@@ -1,494 +0,0 @@
-/* $NetBSD: vsnprintf_ss.c,v 1.2.2.1 2007/05/07 19:49:09 pavel Exp $ */
-
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)vsnprintf.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: vsnprintf_ss.c,v 1.2.2.1 2007/05/07 19:49:09 pavel Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include "namespace.h"
-
-#include <sys/types.h>
-#include <inttypes.h>
-#include <assert.h>
-#include <stdio.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <string.h>
-#include "reentrant.h"
-#include "extern.h"
-#include "local.h"
-
-#ifdef __weak_alias
-__weak_alias(vsnprintf_ss,_vsnprintf_ss)
-#endif
-
-/*
- * vsnprintf_ss: scaled down version of printf(3).
- *
- * this version based on vfprintf() from libc which was derived from
- * software contributed to Berkeley by Chris Torek.
- *
- */
-
-/*
- * macros for converting digits to letters and vice versa
- */
-#define to_digit(c) ((c) - '0')
-#define is_digit(c) ((unsigned)to_digit(c) <= 9)
-#define to_char(n) (char)((n) + '0')
-
-/*
- * flags used during conversion.
- */
-#define ALT 0x001 /* alternate form */
-#define HEXPREFIX 0x002 /* add 0x or 0X prefix */
-#define LADJUST 0x004 /* left adjustment */
-#define LONGDBL 0x008 /* long double; unimplemented */
-#define LONGINT 0x010 /* long integer */
-#define QUADINT 0x020 /* quad integer */
-#define SHORTINT 0x040 /* short integer */
-#define MAXINT 0x080 /* intmax_t */
-#define PTRINT 0x100 /* intptr_t */
-#define SIZEINT 0x200 /* size_t */
-#define ZEROPAD 0x400 /* zero (as opposed to blank) pad */
-#define FPT 0x800 /* Floating point number */
-
- /*
- * To extend shorts properly, we need both signed and unsigned
- * argument extraction methods.
- */
-#define SARG() \
- ((INT64)(flags&MAXINT ? va_arg(ap, intmax_t) : \
- flags&PTRINT ? va_arg(ap, intptr_t) : \
- flags&SIZEINT ? va_arg(ap, ssize_t) : /* XXX */ \
- flags&QUADINT ? va_arg(ap, quad_t) : \
- flags&LONGINT ? va_arg(ap, long) : \
- flags&SHORTINT ? (short)va_arg(ap, int) : \
- va_arg(ap, int)))
-
-#define UARG() \
- ((UINT64)(flags&MAXINT ? va_arg(ap, uintmax_t) : \
- flags&PTRINT ? va_arg(ap, uintptr_t) : \
- flags&SIZEINT ? va_arg(ap, size_t) : \
- flags&QUADINT ? va_arg(ap, u_quad_t) : \
- flags&LONGINT ? va_arg(ap, unsigned long) : \
- flags&SHORTINT ? (u_short)va_arg(ap, int) : \
- va_arg(ap, u_int)))
-
-#define PUTCHAR(C) do { \
- if (sbuf < tailp) \
- *sbuf++ = (C); \
-} while (/*CONSTCOND*/0)
-
-int
-vsnprintf_ss(char *sbuf, size_t slen, const char *fmt0, va_list ap)
-{
- const char *fmt; /* format string */
- int ch; /* character from fmt */
- int n; /* handy integer (short term usage) */
- char *cp; /* handy char pointer (short term usage) */
- int flags; /* flags as above */
- int ret; /* return value accumulator */
- int width; /* width from format (%8d), or 0 */
- int prec; /* precision from format (%.3d), or -1 */
- char sign; /* sign prefix (' ', '+', '-', or \0) */
-
- u_quad_t _uquad; /* integer arguments %[diouxX] */
- enum { OCT, DEC, HEX } base;/* base for [diouxX] conversion */
- int dprec; /* a copy of prec if [diouxX], 0 otherwise */
- int realsz; /* field size expanded by dprec */
- int size; /* size of converted field or string */
- const char *xdigs; /* digits for [xX] conversion */
- char bf[128]; /* space for %c, %[diouxX] */
- char *tailp; /* tail pointer for snprintf */
-
- static const char xdigs_lower[16] = "0123456789abcdef";
- static const char xdigs_upper[16] = "0123456789ABCDEF";
-
-
- _DIAGASSERT(n == 0 || sbuf != NULL);
- _DIAGASSERT(fmt != NULL);
-
- tailp = sbuf + slen;
-
- cp = NULL; /* XXX: shutup gcc */
- size = 0; /* XXX: shutup gcc */
-
- fmt = fmt0;
- ret = 0;
-
- xdigs = NULL; /* XXX: shut up gcc warning */
-
- /*
- * Scan the format for conversions (`%' character).
- */
- for (;;) {
- while (*fmt != '%' && *fmt) {
- ret++;
- PUTCHAR(*fmt++);
- }
- if (*fmt == 0)
- goto done;
-
- fmt++; /* skip over '%' */
-
- flags = 0;
- dprec = 0;
- width = 0;
- prec = -1;
- sign = '\0';
-
-rflag: ch = *fmt++;
-reswitch: switch (ch) {
- case ' ':
- /*
- * ``If the space and + flags both appear, the space
- * flag will be ignored.''
- * -- ANSI X3J11
- */
- if (!sign)
- sign = ' ';
- goto rflag;
- case '#':
- flags |= ALT;
- goto rflag;
- case '*':
- /*
- * ``A negative field width argument is taken as a
- * - flag followed by a positive field width.''
- * -- ANSI X3J11
- * They don't exclude field widths read from args.
- */
- if ((width = va_arg(ap, int)) >= 0)
- goto rflag;
- width = -width;
- /* FALLTHROUGH */
- case '-':
- flags |= LADJUST;
- goto rflag;
- case '+':
- sign = '+';
- goto rflag;
- case '.':
- if ((ch = *fmt++) == '*') {
- n = va_arg(ap, int);
- prec = n < 0 ? -1 : n;
- goto rflag;
- }
- n = 0;
- while (is_digit(ch)) {
- n = 10 * n + to_digit(ch);
- ch = *fmt++;
- }
- prec = n < 0 ? -1 : n;
- goto reswitch;
- case '0':
- /*
- * ``Note that 0 is taken as a flag, not as the
- * beginning of a field width.''
- * -- ANSI X3J11
- */
- flags |= ZEROPAD;
- goto rflag;
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- n = 0;
- do {
- n = 10 * n + to_digit(ch);
- ch = *fmt++;
- } while (is_digit(ch));
- width = n;
- goto reswitch;
- case 'h':
- flags |= SHORTINT;
- goto rflag;
- case 'j':
- flags |= MAXINT;
- goto rflag;
- case 'l':
- if (*fmt == 'l') {
- fmt++;
- flags |= QUADINT;
- } else {
- flags |= LONGINT;
- }
- goto rflag;
- case 'q':
- flags |= QUADINT;
- goto rflag;
- case 't':
- flags |= PTRINT;
- goto rflag;
- case 'z':
- flags |= SIZEINT;
- goto rflag;
- case 'c':
- *(cp = bf) = va_arg(ap, int);
- size = 1;
- sign = '\0';
- break;
- case 'D':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'd':
- case 'i':
- _uquad = SARG();
- if ((quad_t)_uquad < 0) {
- _uquad = -_uquad;
- sign = '-';
- }
- base = DEC;
- goto number;
- case 'n':
- if (flags & MAXINT)
- *va_arg(ap, intmax_t *) = ret;
- else if (flags & PTRINT)
- *va_arg(ap, intptr_t *) = ret;
- else if (flags & SIZEINT)
- *va_arg(ap, ssize_t *) = ret;
- else if (flags & QUADINT)
- *va_arg(ap, quad_t *) = ret;
- else if (flags & LONGINT)
- *va_arg(ap, long *) = (long)ret;
- else if (flags & SHORTINT)
- *va_arg(ap, short *) = (short)ret;
- else
- *va_arg(ap, int *) = ret;
- continue; /* no output */
- case 'O':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'o':
- _uquad = UARG();
- base = OCT;
- goto nosign;
- case 'p':
- /*
- * ``The argument shall be a pointer to void. The
- * value of the pointer is converted to a sequence
- * of printable characters, in an implementation-
- * defined manner.''
- * -- ANSI X3J11
- */
- /* NOSTRICT */
- _uquad = (u_long)va_arg(ap, void *);
- base = HEX;
- xdigs = xdigs_lower;
- flags |= HEXPREFIX;
- ch = 'x';
- goto nosign;
- case 's':
- if ((cp = va_arg(ap, char *)) == NULL)
- /*XXXUNCONST*/
- cp = __UNCONST("(null)");
- if (prec >= 0) {
- /*
- * can't use strlen; can only look for the
- * NUL in the first `prec' characters, and
- * strlen() will go further.
- */
- char *p = memchr(cp, 0, (size_t)prec);
-
- if (p != NULL) {
- size = p - cp;
- if (size > prec)
- size = prec;
- } else
- size = prec;
- } else
- size = strlen(cp);
- sign = '\0';
- break;
- case 'U':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'u':
- _uquad = UARG();
- base = DEC;
- goto nosign;
- case 'X':
- xdigs = xdigs_upper;
- goto hex;
- case 'x':
- xdigs = xdigs_lower;
-hex: _uquad = UARG();
- base = HEX;
- /* leading 0x/X only if non-zero */
- if (flags & ALT && _uquad != 0)
- flags |= HEXPREFIX;
-
- /* unsigned conversions */
-nosign: sign = '\0';
- /*
- * ``... diouXx conversions ... if a precision is
- * specified, the 0 flag will be ignored.''
- * -- ANSI X3J11
- */
-number: if ((dprec = prec) >= 0)
- flags &= ~ZEROPAD;
-
- /*
- * ``The result of converting a zero value with an
- * explicit precision of zero is no characters.''
- * -- ANSI X3J11
- */
- cp = bf + sizeof(bf);
- if (_uquad != 0 || prec != 0) {
- /*
- * Unsigned mod is hard, and unsigned mod
- * by a constant is easier than that by
- * a variable; hence this switch.
- */
- switch (base) {
- case OCT:
- do {
- *--cp = to_char(_uquad & 7);
- _uquad >>= 3;
- } while (_uquad);
- /* handle octal leading 0 */
- if (flags & ALT && *cp != '0')
- *--cp = '0';
- break;
-
- case DEC:
- /* many numbers are 1 digit */
- while (_uquad >= 10) {
- *--cp = to_char(_uquad % 10);
- _uquad /= 10;
- }
- *--cp = to_char(_uquad);
- break;
-
- case HEX:
- do {
- *--cp = xdigs[(size_t)_uquad & 15];
- _uquad >>= 4;
- } while (_uquad);
- break;
-
- default:
- /*XXXUNCONST*/
- cp = __UNCONST("bug bad base");
- size = strlen(cp);
- goto skipsize;
- }
- }
- size = bf + sizeof(bf) - cp;
- skipsize:
- break;
- default: /* "%?" prints ?, unless ? is NUL */
- if (ch == '\0')
- goto done;
- /* pretend it was %c with argument ch */
- cp = bf;
- *cp = ch;
- size = 1;
- sign = '\0';
- break;
- }
-
- /*
- * All reasonable formats wind up here. At this point, `cp'
- * points to a string which (if not flags&LADJUST) should be
- * padded out to `width' places. If flags&ZEROPAD, it should
- * first be prefixed by any sign or other prefix; otherwise,
- * it should be blank padded before the prefix is emitted.
- * After any left-hand padding and prefixing, emit zeroes
- * required by a decimal [diouxX] precision, then print the
- * string proper, then emit zeroes required by any leftover
- * floating precision; finally, if LADJUST, pad with blanks.
- *
- * Compute actual size, so we know how much to pad.
- * size excludes decimal prec; realsz includes it.
- */
- realsz = dprec > size ? dprec : size;
- if (sign)
- realsz++;
- else if (flags & HEXPREFIX)
- realsz+= 2;
-
- /* adjust ret */
- ret += width > realsz ? width : realsz;
-
- /* right-adjusting blank padding */
- if ((flags & (LADJUST|ZEROPAD)) == 0) {
- n = width - realsz;
- while (n-- > 0)
- PUTCHAR(' ');
- }
-
- /* prefix */
- if (sign) {
- PUTCHAR(sign);
- } else if (flags & HEXPREFIX) {
- PUTCHAR('0');
- PUTCHAR(ch);
- }
-
- /* right-adjusting zero padding */
- if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD) {
- n = width - realsz;
- while (n-- > 0)
- PUTCHAR('0');
- }
-
- /* leading zeroes from decimal precision */
- n = dprec - size;
- while (n-- > 0)
- PUTCHAR('0');
-
- /* the string or number proper */
- while (size--)
- PUTCHAR(*cp++);
- /* left-adjusting padding (always blank) */
- if (flags & LADJUST) {
- n = width - realsz;
- while (n-- > 0)
- PUTCHAR(' ');
- }
- }
-
-done:
- if (sbuf == tailp)
- sbuf[-1] = '\0';
- else
- *sbuf = '\0';
- return (ret);
- /* NOTREACHED */
-}
diff --git a/StdLib/LibC/Stdio/vsprintf.c b/StdLib/LibC/Stdio/vsprintf.c
deleted file mode 100644
index 9534d95e1b..0000000000
--- a/StdLib/LibC/Stdio/vsprintf.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/** @file
- Implementation of vsprintf as declared in <stdio.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Chris Torek.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: vsprintf.c,v 1.14 2005/02/09 21:35:47 kleink Exp
- vsprintf.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-int
-vsprintf(char *str, const char *fmt, va_list ap)
-{
- int ret;
- FILE f;
- struct __sfileext fext;
-
- _DIAGASSERT(str != NULL);
- _DIAGASSERT(fmt != NULL);
-
- _FILEEXT_SETUP(&f, &fext);
- f._file = -1;
- f._flags = __SWR | __SSTR;
- f._bf._base = f._p = (unsigned char *)str;
- f._bf._size = f._w = INT_MAX;
- ret = __vfprintf_unlocked(&f, fmt, ap);
- *f._p = 0;
-
- return (ret);
-}
diff --git a/StdLib/LibC/Stdio/vsscanf.c b/StdLib/LibC/Stdio/vsscanf.c
deleted file mode 100644
index 34b08cc30d..0000000000
--- a/StdLib/LibC/Stdio/vsscanf.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/* $NetBSD: vsscanf.c,v 1.14 2005/11/29 03:12:00 christos Exp $ */
-
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Donn Seeley at UUNET Technologies, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-static char sccsid[] = "@(#)vsscanf.c 8.1 (Berkeley) 6/4/93";
-#else
-__RCSID("$NetBSD: vsscanf.c,v 1.14 2005/11/29 03:12:00 christos Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include "reentrant.h"
-#include "local.h"
-
-static int eofread __P((void *, char *, int));
-
-/* ARGSUSED */
-static int
-eofread(cookie, buf, len)
- void *cookie;
- char *buf;
- int len;
-{
- return (0);
-}
-
-int
-vsscanf(str, fmt, ap)
- const char *str;
- const char *fmt;
- _BSD_VA_LIST_ ap;
-{
- FILE f;
- struct __sfileext fext;
-
- _DIAGASSERT(str != NULL);
- _DIAGASSERT(fmt != NULL);
-
- _FILEEXT_SETUP(&f, &fext);
- f._flags = __SRD;
- f._bf._base = f._p = __UNCONST(str);
- f._bf._size = f._r = strlen(str);
- f._read = eofread;
- _UB(&f)._base = NULL;
- f._lb._base = NULL;
- return (__svfscanf_unlocked(&f, fmt, ap));
-}
diff --git a/StdLib/LibC/Stdio/vswprintf.c b/StdLib/LibC/Stdio/vswprintf.c
deleted file mode 100644
index 6d4cc3e656..0000000000
--- a/StdLib/LibC/Stdio/vswprintf.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- FreeBSD: src/lib/libc/stdio/vswprintf.c,v 1.6 2005/02/21 19:41:44 fjoe Exp
- NetBSD: vswprintf.c,v 1.1 2005/05/14 23:51:02 christos Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <stdarg.h>
-#include "reentrant.h"
-#include "local.h"
-
-int
-vswprintf(wchar_t * __restrict s, size_t n, const wchar_t * __restrict fmt,
- va_list ap)
-{
- static const mbstate_t initial = { 0 };
- mbstate_t mbs;
- FILE f;
- char *mbp;
- int ret, sverrno;
- size_t nwc;
- struct __sfileext fext;
-
- if (n == 0) {
- errno = EINVAL;
- return (-1);
- }
-
- _FILEEXT_SETUP(&f, &fext);
- f._file = -1;
- f._flags = __SWR | __SSTR | __SALC;
- f._bf._base = f._p = (unsigned char *)malloc(128);
- if (f._bf._base == NULL) {
- errno = ENOMEM;
- return (-1);
- }
- f._bf._size = f._w = 127; /* Leave room for the NUL */
- ret = __vfwprintf_unlocked(&f, fmt, ap);
- if (ret < 0) {
- sverrno = errno;
- free(f._bf._base);
- errno = sverrno;
- return (-1);
- }
- *f._p = '\0';
- mbp = (char *)f._bf._base;
- /*
- * XXX Undo the conversion from wide characters to multibyte that
- * fputwc() did in __vfwprintf().
- */
- mbs = initial;
- nwc = mbsrtowcs(s, (const char **)&mbp, n, &mbs);
- free(f._bf._base);
- if (nwc == (size_t)-1) {
- errno = EILSEQ;
- return (-1);
- }
- if (nwc == n) {
- s[n - 1] = L'\0';
- errno = EOVERFLOW;
- return (-1);
- }
-
- return (ret);
-}
diff --git a/StdLib/LibC/Stdio/vswscanf.c b/StdLib/LibC/Stdio/vswscanf.c
deleted file mode 100644
index 254f0b224a..0000000000
--- a/StdLib/LibC/Stdio/vswscanf.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Donn Seeley at UUNET Technologies, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- FreeBSD: src/lib/libc/stdio/vswscanf.c,v 1.3 2004/04/07 09:55:05 tjr Exp
- NetBSD: vswscanf.c,v 1.3 2005/12/02 13:51:22 yamt Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <limits.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-#include <sys/types.h>
-#include "reentrant.h"
-#include "local.h"
-
-static int eofread(void *, char *, int);
-
-static int
-/*ARGSUSED*/
-eofread(void *cookie, char *buf, int len)
-{
- return (0);
-}
-
-int
-vswscanf(
- const wchar_t * __restrict str,
- const wchar_t * __restrict fmt,
- va_list ap
- )
-{
- static const mbstate_t initial = { 0 };
- mbstate_t mbs;
- FILE f;
- char *mbstr;
- size_t mlen;
- int r;
- const wchar_t *rstr = str;
- struct __sfileext fext = { { 0 } };
-
- /*
- * XXX Convert the wide character string to multibyte, which
- * __vfwscanf() will convert back to wide characters.
- */
- if ((mbstr = malloc(wcslen(str) * MB_CUR_MAX + 1)) == NULL)
- return (EOF);
- mbs = initial;
- if ((mlen = wcsrtombs(mbstr, &rstr, SIZE_T_MAX, &mbs)) == (size_t)-1) {
- free(mbstr);
- return (EOF);
- }
- _FILEEXT_SETUP(&f, &fext);
- f._file = -1;
- f._flags = __SRD;
- f._bf._base = f._p = (unsigned char *)mbstr;
- f._bf._size = f._r = (int)mlen;
- f._read = eofread;
- _UB(&f)._base = NULL;
- f._lb._base = NULL;
- r = __vfwscanf_unlocked(&f, fmt, ap);
- free(mbstr);
-
- return (r);
-}
diff --git a/StdLib/LibC/Stdio/vwprintf.c b/StdLib/LibC/Stdio/vwprintf.c
deleted file mode 100644
index ebd42b07d4..0000000000
--- a/StdLib/LibC/Stdio/vwprintf.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- FreeBSD: src/lib/libc/stdio/vwprintf.c,v 1.1 2002/09/21 13:00:30 tjr Exp
- NetBSD: vwprintf.c,v 1.1 2005/05/14 23:51:02 christos Exp
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <wchar.h>
-
-int
-vwprintf(const wchar_t * __restrict fmt, va_list ap)
-{
-
- return (vfwprintf(stdout, fmt, ap));
-}
diff --git a/StdLib/LibC/Stdio/vwscanf.c b/StdLib/LibC/Stdio/vwscanf.c
deleted file mode 100644
index 25f795f157..0000000000
--- a/StdLib/LibC/Stdio/vwscanf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* $NetBSD: vwscanf.c,v 1.1 2005/05/14 23:51:02 christos Exp $ */
-
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-__FBSDID("$FreeBSD: src/lib/libc/stdio/vwscanf.c,v 1.1 2002/09/23 12:40:06 tjr Exp $");
-#else
-__RCSID("$NetBSD: vwscanf.c,v 1.1 2005/05/14 23:51:02 christos Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <wchar.h>
-
-int
-vwscanf(const wchar_t * __restrict fmt, va_list ap)
-{
-
- return (vfwscanf(stdin, fmt, ap));
-}
diff --git a/StdLib/LibC/Stdio/wbuf.c b/StdLib/LibC/Stdio/wbuf.c
deleted file mode 100644
index 888be1ea3b..0000000000
--- a/StdLib/LibC/Stdio/wbuf.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: wbuf.c,v 1.13 2003/08/07 16:43:35 agc Exp
- wbuf.c 8.1 (Berkeley) 6/4/93
-*/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include "reentrant.h"
-#include "local.h"
-
-/*
- * Write the given character into the (probably full) buffer for
- * the given file. Flush the buffer out if it is or becomes full,
- * or if c=='\n' and the file is line buffered.
- */
-int
-__swbuf(int c, FILE *fp)
-{
- int n;
-
- //_DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (EOF);
- }
-
- _SET_ORIENTATION(fp, -1);
-
- /*
- * In case we cannot write, or longjmp takes us out early,
- * make sure _w is 0 (if fully- or un-buffered) or -_bf._size
- * (if line buffered) so that we will get called again.
- * If we did not do this, a sufficient number of putc()
- * calls might wrap _w from negative to positive.
- */
- fp->_w = fp->_lbfsize;
- if (cantwrite(fp)) {
- errno = EBADF;
- return (EOF);
- }
- c = (unsigned char)c;
-
- /*
- * If it is completely full, flush it out. Then, in any case,
- * stuff c into the buffer. If this causes the buffer to fill
- * completely, or if c is '\n' and the file is line buffered,
- * flush it (perhaps a second time). The second flush will always
- * happen on unbuffered streams, where _bf._size==1; fflush()
- * guarantees that putc() will always call wbuf() by setting _w
- * to 0, so we need not do anything else.
- */
- n = (int)(fp->_p - fp->_bf._base);
- if (n >= fp->_bf._size) {
- if (fflush(fp))
- return (EOF);
- n = 0;
- }
- fp->_w--;
- *fp->_p++ = (unsigned char)c;
- if (++n == fp->_bf._size || (fp->_flags & __SLBF && c == '\n'))
- if (fflush(fp))
- return (EOF);
- return (c);
-}
diff --git a/StdLib/LibC/Stdio/wcio.h b/StdLib/LibC/Stdio/wcio.h
deleted file mode 100644
index ab15bb53d5..0000000000
--- a/StdLib/LibC/Stdio/wcio.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* $NetBSD: wcio.h,v 1.3 2003/01/18 11:30:00 thorpej Exp $ */
-
-/*-
- * Copyright (c)2001 Citrus Project,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Citrus$
- */
-
-#ifndef _WCIO_H_
-#define _WCIO_H_
-
-#include <wchar.h> /* for mbstate_t and wchar_t */
-
-/* minimal requirement of SUSv2 */
-#define WCIO_UNGETWC_BUFSIZE 1
-
-#define WCIO_GET(fp) (&(_EXT(fp)->_wcio))
-
-struct wchar_io_data {
- mbstate_t wcio_mbstate_in;
- mbstate_t wcio_mbstate_out;
-
- wchar_t wcio_ungetwc_buf[WCIO_UNGETWC_BUFSIZE];
- size_t wcio_ungetwc_inbuf;
-
- int wcio_mode; /* orientation */
-};
-
-#define _SET_ORIENTATION(fp, mode) \
-do {\
- struct wchar_io_data *_wcio = WCIO_GET(fp);\
- if (_wcio && _wcio->wcio_mode == 0)\
- _wcio->wcio_mode = (mode);\
-} while (/*CONSTCOND*/0)
-
-/*
- * WCIO_FREE should be called by fclose
- */
-#define WCIO_FREE(fp) \
-do {\
- _EXT(fp)->_wcio.wcio_mode = 0;\
- WCIO_FREEUB(fp);\
-} while (/*CONSTCOND*/0)
-
-#define WCIO_FREEUB(fp) \
-do {\
- _EXT(fp)->_wcio.wcio_ungetwc_inbuf = 0;\
-} while (/*CONSTCOND*/0)
-
-#endif /*_WCIO_H_*/
diff --git a/StdLib/LibC/Stdio/wprintf.c b/StdLib/LibC/Stdio/wprintf.c
deleted file mode 100644
index 18b83a7927..0000000000
--- a/StdLib/LibC/Stdio/wprintf.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* $NetBSD: wprintf.c,v 1.1 2005/05/14 23:51:02 christos Exp $ */
-
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-__FBSDID("$FreeBSD: src/lib/libc/stdio/wprintf.c,v 1.1 2002/09/21 13:00:30 tjr Exp $");
-#else
-__RCSID("$NetBSD: wprintf.c,v 1.1 2005/05/14 23:51:02 christos Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <wchar.h>
-
-int
-wprintf(const wchar_t * __restrict fmt, ...)
-{
- int ret;
- va_list ap;
-
- va_start(ap, fmt);
- ret = vfwprintf(stdout, fmt, ap);
- va_end(ap);
-
- return (ret);
-}
diff --git a/StdLib/LibC/Stdio/wscanf.c b/StdLib/LibC/Stdio/wscanf.c
deleted file mode 100644
index 4240c72056..0000000000
--- a/StdLib/LibC/Stdio/wscanf.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* $NetBSD: wscanf.c,v 1.1 2005/05/14 23:51:02 christos Exp $ */
-
-/*-
- * Copyright (c) 2002 Tim J. Robbins
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-#if 0
-__FBSDID("$FreeBSD: src/lib/libc/stdio/wscanf.c,v 1.1 2002/09/23 12:40:06 tjr Exp $");
-#else
-__RCSID("$NetBSD: wscanf.c,v 1.1 2005/05/14 23:51:02 christos Exp $");
-#endif
-#endif /* LIBC_SCCS and not lint */
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <wchar.h>
-
-int
-wscanf(const wchar_t * __restrict fmt, ...)
-{
- va_list ap;
- int r;
-
- va_start(ap, fmt);
- r = vfwscanf(stdin, fmt, ap);
- va_end(ap);
-
- return (r);
-}
diff --git a/StdLib/LibC/Stdio/wsetup.c b/StdLib/LibC/Stdio/wsetup.c
deleted file mode 100644
index b8fc06449e..0000000000
--- a/StdLib/LibC/Stdio/wsetup.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License that accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: wsetup.c,v 1.11 2003/08/07 16:43:35 agc Exp
- wsetup.c 8.1 (Berkeley) 6/4/93
-*/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "reentrant.h"
-#include "local.h"
-
-/*
- * Various output routines call wsetup to be sure it is safe to write,
- * because either _flags does not include __SWR, or _buf is NULL.
- * _wsetup returns 0 if OK to write, nonzero otherwise.
- */
-int
-__swsetup(FILE *fp)
-{
-
- _DIAGASSERT(fp != NULL);
- if(fp == NULL) {
- errno = EINVAL;
- return (-1);
- }
-
- /* make sure stdio is set up */
- if (!__sdidinit)
- __sinit();
-
- /*
- * If we are not writing, we had better be reading and writing.
- */
- if ((fp->_flags & __SWR) == 0) {
- if ((fp->_flags & __SRW) == 0)
- return (EOF);
- if (fp->_flags & __SRD) {
- /* clobber any ungetc data */
- if (HASUB(fp))
- FREEUB(fp);
- fp->_flags &= ~(__SRD|__SEOF);
- fp->_r = 0;
- fp->_p = fp->_bf._base;
- }
- fp->_flags |= __SWR;
- }
-
- /*
- * Make a buffer if necessary, then set _w.
- */
- if (fp->_bf._base == NULL)
- __smakebuf(fp);
- if (fp->_flags & __SLBF) {
- /*
- * It is line buffered, so make _lbfsize be -_bufsize
- * for the putc() macro. We will change _lbfsize back
- * to 0 whenever we turn off __SWR.
- */
- fp->_w = 0;
- fp->_lbfsize = -fp->_bf._size;
- } else
- fp->_w = fp->_flags & __SNBF ? 0 : fp->_bf._size;
- return (0);
-}
diff --git a/StdLib/LibC/String/Comparison.c b/StdLib/LibC/String/Comparison.c
deleted file mode 100644
index 9452ceeb33..0000000000
--- a/StdLib/LibC/String/Comparison.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/** @file
- Comparison Functions for <string.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-
-#include <LibConfig.h>
-
-#include <ctype.h>
-#include <string.h>
-
-/** The memcmp function compares the first n characters of the object pointed
- to by s1 to the first n characters of the object pointed to by s2.
-
- @return The memcmp function returns an integer greater than, equal to, or
- less than zero, accordingly as the object pointed to by s1 is
- greater than, equal to, or less than the object pointed to by s2.
-**/
-int memcmp(const void *s1, const void *s2, size_t n)
-{
- return (int)CompareMem( s1, s2, n);
-}
-
-/** The strcmp function compares the string pointed to by s1 to the string
- pointed to by s2.
-
- @return The strcmp function returns an integer greater than, equal to, or
- less than zero, accordingly as the string pointed to by s1 is
- greater than, equal to, or less than the string pointed to by s2.
-**/
-int strcmp(const char *s1, const char *s2)
-{
- return (int)AsciiStrCmp( s1, s2);
-}
-
-/** The strcoll function compares the string pointed to by s1 to the string
- pointed to by s2, both interpreted as appropriate to the LC_COLLATE
- category of the current locale.
-
- @return The strcoll function returns an integer greater than, equal to,
- or less than zero, accordingly as the string pointed to by s1 is
- greater than, equal to, or less than the string pointed to by s2
- when both are interpreted as appropriate to the current locale.
-**/
-int strcoll(const char *s1, const char *s2)
-{
- /* LC_COLLATE is unimplemented, hence always "C" */
- return (strcmp(s1, s2));
-}
-
-/** The strncmp function compares not more than n characters (characters that
- follow a null character are not compared) from the array pointed to by s1
- to the array pointed to by s2.
-
- @return The strncmp function returns an integer greater than, equal to,
- or less than zero, accordingly as the possibly null-terminated
- array pointed to by s1 is greater than, equal to, or less than
- the possibly null-terminated array pointed to by s2.
-**/
-int strncmp(const char *s1, const char *s2, size_t n)
-{
- return (int)AsciiStrnCmp( s1, s2, n);
-}
-
-/** The strxfrm function transforms the string pointed to by Src and places the
- resulting string into the array pointed to by Dest. The transformation is
- such that if the strcmp function is applied to two transformed strings, it
- returns a value greater than, equal to, or less than zero, corresponding to
- the result of the strcoll function applied to the same two original
- strings. No more than Len characters are placed into the resulting array
- pointed to by Dest, including the terminating null character. If Len is zero,
- Dest is permitted to be a null pointer. If copying takes place between
- objects that overlap, the behavior is undefined.
-
- @return The strxfrm function returns the length of the transformed string
- (not including the terminating null character). If the value
- returned is Len or more, the contents of the array pointed to by Dest
- are indeterminate.
-**/
-size_t strxfrm(char * __restrict Dest, const char * __restrict Src, size_t Len)
-{
- size_t srclen, copysize;
-
- /*
- * Since locales are unimplemented, this is just a copy.
- */
- srclen = strlen(Src);
- if (Len != 0) {
- copysize = srclen < Len ? srclen : Len - 1;
- (void)memcpy(Dest, Src, copysize);
- Dest[copysize] = 0;
- }
- return (srclen);
-}
-
-/** Case agnostic string comparison for NetBSD compatibility. **/
-int
-strcasecmp(const char *s1, const char *s2)
-{
- return (int)AsciiStriCmp( s1, s2);
-}
diff --git a/StdLib/LibC/String/Concatenation.c b/StdLib/LibC/String/Concatenation.c
deleted file mode 100644
index e76bea0bf8..0000000000
--- a/StdLib/LibC/String/Concatenation.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/** @file
- Concatenation Functions for <string.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/BaseLib.h>
-
-#include <LibConfig.h>
-
-#include <string.h>
-
-/** The strcat function appends a copy of the string pointed to by s2
- (including the terminating null character) to the end of the string pointed
- to by s1. The initial character of s2 overwrites the null character at the
- end of s1. If copying takes place between objects that overlap, the
- behavior is undefined.
-
- @return The strcat function returns the value of s1.
-**/
-char *
-strcat(char * __restrict s1, const char * __restrict s2)
-{
- return AsciiStrCat( s1, s2);
-}
-
-/** The strncat function appends not more than n characters (a null character
- and characters that follow it are not appended) from the array pointed to
- by s2 to the end of the string pointed to by s1. The initial character of
- s2 overwrites the null character at the end of s1. A terminating null
- character is always appended to the result. If copying takes place
- between objects that overlap, the behavior is undefined.
-
- @return The strncat function returns the value of s1.
-**/
-char *
-strncat(char * __restrict s1, const char * __restrict s2, size_t n)
-{
- return AsciiStrnCat( s1, s2, n);
-}
-
-/** The strncatX function appends not more than n characters (a null character
- and characters that follow it are not appended) from the array pointed to
- by s2 to the end of the string pointed to by s1. The initial character of
- s2 overwrites the null character at the end of s1. The result is always
- terminated with a null character. If copying takes place between objects
- that overlap, the behavior is undefined.
-
- strncatX exists because normal strncat does not indicate if the operation
- was terminated because of exhausting n or reaching the end of s2.
-
- @return The strncatX function returns 0 if the operation was terminated
- because it reached the end of s1. Otherwise, a non-zero value is
- returned indicating how many characters remain in s1.
-**/
-int
-strncatX(char * __restrict s1, const char * __restrict s2, size_t n)
-{
- int NumLeft;
-
- // Find s1's terminating NUL
- for( ; n != 0; --n) {
- if( *s1++ == '\0') break;
- }
-
- // Now copy *s2 into s1, overwriting s1's terminating NUL
- for( --s1; n != 0; --n) {
- if((*s1++ = *s2++) == '\0') break;
- }
- NumLeft = (int)n;
-
- // Guarantee that s1 is NUL terminated.
- *--s1 = '\0';
-
- return NumLeft; // Zero if we ran out of buffer ( strlen(s1) < strlen(s2) )
-}
diff --git a/StdLib/LibC/String/Copying.c b/StdLib/LibC/String/Copying.c
deleted file mode 100644
index 96be24b9a9..0000000000
--- a/StdLib/LibC/String/Copying.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/** @file
- Copying Functions for <string.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-
-#include <LibConfig.h>
-
-#include <stdlib.h>
-#include <string.h>
-
-/** Do not define memcpy for IPF+GCC or ARM/AARCH64+GCC builds.
- For IPF, using a GCC compiler, the memcpy function is converted to
- CopyMem by objcpy during build.
- For ARM/AARCH64, the memcpy function is provided by the CompilerIntrinsics library.
-**/
-#if !((defined(MDE_CPU_IPF) || defined(MDE_CPU_ARM) || defined(MDE_CPU_AARCH64)) && defined(__GNUC__))
-/** The memcpy function copies n characters from the object pointed to by s2
- into the object pointed to by s1.
-
- The implementation is reentrant and handles the case where s2 overlaps s1.
-
- @return The memcpy function returns the value of s1.
-**/
-void *
-memcpy(void * __restrict s1, const void * __restrict s2, size_t n)
-{
- return CopyMem( s1, s2, n);
-}
-#endif /* !(defined(MDE_CPU_IPF) && defined(__GCC)) */
-
-/** The memmove function copies n characters from the object pointed to by s2
- into the object pointed to by s1. Copying takes place as if the n
- characters from the object pointed to by s2 are first copied into a
- temporary array of n characters that does not overlap the objects pointed
- to by s1 and s2, and then the n characters from the temporary array are
- copied into the object pointed to by s1.
-
- This is a version of memcpy that is guaranteed to work when s1 and s2
- overlap. Since our implementation of memcpy already handles overlap,
- memmove can be identical to memcpy.
-
- @return The memmove function returns the value of s1.
-**/
-void *
-memmove(void *s1, const void *s2, size_t n)
-{
- return CopyMem( s1, s2, n);
-}
-
-/** The strcpy function copies the string pointed to by s2 (including the
- terminating null character) into the array pointed to by s1. If copying
- takes place between objects that overlap, the behavior is undefined.
-
- @return The strcpy function returns the value of s1.
-**/
-char *
-strcpy(char * __restrict s1, const char * __restrict s2)
-{
- //char *s1ret = s1;
-
- //while ( *s1++ = *s2++) /* Empty Body */;
- //return(s1ret);
- return AsciiStrCpy( s1, s2);
-}
-
-/** The strncpy function copies not more than n characters (characters that
- follow a null character are not copied) from the array pointed to by s2 to
- the array pointed to by s1. If copying takes place between objects that
- overlap, the behavior is undefined.
-
- If the array pointed to by s2 is a string that is shorter than n
- characters, null characters are appended to the copy in the array pointed
- to by s1, until n characters in all have been written.
-
- @return The strncpy function returns the value of s1.
-**/
-char *strncpy(char * __restrict s1, const char * __restrict s2, size_t n)
-{
- return AsciiStrnCpy( s1, s2, n);
- //char *dest = s1;
-
- //while(n != 0) {
- // --n;
- // if((*dest++ = *s2++) == '\0') break;
- //}
- //while(n != 0) {
- // *dest++ = '\0';
- // --n;
- //}
- //return (s1);
-}
-
-/** The strncpyX function copies not more than n-1 characters (characters that
- follow a null character are not copied) from the array pointed to by s2 to
- the array pointed to by s1. Array s1 is guaranteed to be NULL terminated.
- If copying takes place between objects that overlap,
- the behavior is undefined.
-
- strncpyX exists because normal strncpy does not indicate if the copy was
- terminated because of exhausting the buffer or reaching the end of s2.
-
- @return The strncpyX function returns 0 if the copy operation was
- terminated because it reached the end of s1. Otherwise,
- a non-zero value is returned indicating how many characters
- remain in s1.
-**/
-int strncpyX(char * __restrict s1, const char * __restrict s2, size_t n)
-{
- int NumLeft;
-
- for( ; n != 0; --n) {
- if((*s1++ = *s2++) == '\0') break;
- }
- NumLeft = (int)n;
-
- for( --s1; n != 0; --n) {
- *s1++ = '\0';
- }
-
- return NumLeft; // Zero if we ran out of buffer ( strlen(s1) < strlen(s2) )
-}
-
-/** NetBSD Compatibility Function strdup creates a duplicate copy of a string. **/
-char *
-strdup(const char *str)
-{
- size_t len;
- char *copy;
-
- len = strlen(str) + 1;
- if ((copy = malloc(len)) == NULL)
- return (NULL);
- memcpy(copy, str, len);
- return (copy);
-}
diff --git a/StdLib/LibC/String/ErrorList.c b/StdLib/LibC/String/ErrorList.c
deleted file mode 100644
index 56c286011f..0000000000
--- a/StdLib/LibC/String/ErrorList.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/** @file
- This header defines the human readable descriptions of the errors declared
- in errno.h.
-
- The string literals defined in this file must be kept in sync with the
- error numbers declared in <errno.h>. This is because the error numbers are
- used to index into the sys_errlist array to retrieve its associated
- string literal.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-/* Describe the error numbers, sequentially, beginning at 0. */
-const char *const
-sys_errlist[] = {
- "No Error Detected", /* 0 errno reset or no error yet detected */
- "Operation not permitted", /* 1 EPERM */
- "No such file or directory", /* 2 ENOENT */
- "No such process", /* 3 ESRCH */
- "Interrupted system call", /* 4 EINTR */
- "Input/output error", /* 5 EIO */
- "Device not configured", /* 6 ENXIO */
- "Argument list too long", /* 7 E2BIG */
- "Exec format error", /* 8 ENOEXEC */
- "Bad file descriptor", /* 9 EBADF */
- "No child processes", /* 10 ECHILD */
- "Resource deadlock avoided", /* 11 EDEADLK */
- "Cannot allocate memory", /* 12 ENOMEM */
- "Permission denied", /* 13 EACCES */
- "Bad address", /* 14 EFAULT */
- "Block device required", /* 15 ENOTBLK */
- "Device busy", /* 16 EBUSY */
- "File exists", /* 17 EEXIST */
- "Cross-device link", /* 18 EXDEV */
- "Operation not supported by device", /* 19 ENODEV */
- "Not a directory", /* 20 ENOTDIR */
- "Is a directory", /* 21 EISDIR */
- "Invalid argument", /* 22 EINVAL */
- "Too many open files in system", /* 23 ENFILE */
- "Too many open files", /* 24 EMFILE */
- "Inappropriate ioctl for device", /* 25 ENOTTY */
- "Text file busy", /* 26 ETXTBSY */
- "File too large", /* 27 EFBIG */
- "No space left on device", /* 28 ENOSPC */
- "Illegal seek", /* 29 ESPIPE */
- "Read-only filesystem", /* 30 EROFS */
- "Too many links", /* 31 EMLINK */
- "Broken pipe", /* 32 EPIPE */
-
- /* math software -- these are the only two values required by the C Standard */
- "Numerical argument out of domain", /* 33 EDOM */
- "Result too large", /* 34 ERANGE */
-
- /* non-blocking and interrupt i/o */
- "Resource temporarily unavailable", /* 35 EAGAIN or EWOULDBLOCK */
- "Operation now in progress", /* 36 EINPROGRESS */
- "Operation already in progress", /* 37 EALREADY */
-
- /* ipc/network software -- argument errors */
- "Socket operation on non-socket", /* 38 ENOTSOCK */
- "Destination address required", /* 39 EDESTADDRREQ */
- "Message too long", /* 40 EMSGSIZE */
- "Protocol wrong type for socket", /* 41 EPROTOTYPE */
- "Protocol not available", /* 42 ENOPROTOOPT */
- "Protocol not supported", /* 43 EPROTONOSUPPORT */
- "Socket type not supported", /* 44 ESOCKTNOSUPPORT */
- "Operation not supported", /* 45 EOPNOTSUPP or ENOTSUP */
- "Protocol family not supported", /* 46 EPFNOSUPPORT */
- "Address family not supported by protocol family", /* 47 EAFNOSUPPORT */
- "Address already in use", /* 48 EADDRINUSE */
- "Can't assign requested address", /* 49 EADDRNOTAVAIL */
-
- /* ipc/network software -- operational errors */
- "Network is down", /* 50 ENETDOWN */
- "Network is unreachable", /* 51 ENETUNREACH */
- "Network dropped connection on reset", /* 52 ENETRESET */
- "Software caused connection abort", /* 53 ECONNABORTED */
- "Connection reset by peer", /* 54 ECONNRESET */
- "No buffer space available", /* 55 ENOBUFS */
- "Socket is already connected", /* 56 EISCONN */
- "Socket is not connected", /* 57 ENOTCONN */
- "Can't send after socket shutdown", /* 58 ESHUTDOWN */
- "Too many references: can't splice", /* 59 ETOOMANYREFS */
- "Operation timed out", /* 60 ETIMEDOUT */
- "Connection refused", /* 61 ECONNREFUSED */
- "Too many levels of symbolic links", /* 62 ELOOP */
- "File name too long", /* 63 ENAMETOOLONG */
- "Host is down", /* 64 EHOSTDOWN */
- "No route to host", /* 65 EHOSTUNREACH */
- "Directory not empty", /* 66 ENOTEMPTY */
-
- /* quotas, etc. */
- "Too many processes", /* 67 EPROCLIM */
- "Too many users", /* 68 EUSERS */
- "Disc quota exceeded", /* 69 EDQUOT */
-
- /* Network File System */
- "Stale NFS file handle", /* 70 ESTALE */
- "Too many levels of remote in path", /* 71 EREMOTE */
- "RPC struct is bad", /* 72 EBADRPC */
- "RPC version wrong", /* 73 ERPCMISMATCH */
- "RPC prog. not avail", /* 74 EPROGUNAVAIL */
- "Program version wrong", /* 75 EPROGMISMATCH */
- "Bad procedure for program", /* 76 EPROCUNAVAIL */
- "No locks available", /* 77 ENOLCK */
- "Function not implemented", /* 78 ENOSYS */
- "Inappropriate file type or format", /* 79 EFTYPE */
- "Authentication error", /* 80 EAUTH */
- "Need authenticator", /* 81 ENEEDAUTH */
- "Identifier removed", /* 82 EIDRM */
- "No message of desired type", /* 83 ENOMSG */
- "Value too large to be stored in data type", /* 84 EOVERFLOW */
- "Illegal byte sequence", /* 85 EILSEQ */
- "Bad errno 86", /* 86 ENOTHING_1 */
- "Operation canceled", /* 87 ECANCELED */
-
- "Bad message", /* 88 EBADMSG */
- "No message available", /* 89 ENODATA */
- "No STREAM resources", /* 90 ENOSR */
- "Not a STREAM", /* 91 ENOSTR */
- "STREAM ioctl timeout", /* 92 ETIME */
-
- "Attribute not found", /* 93 ENOATTR */
-
- "Programming error", /* 94 EDOOFUS */
-
- "Multihop attempted", /* 95 EMULTIHOP */
- "Link has been severed", /* 96 ENOLINK */
- "Protocol error", /* 97 EPROTO */
-
- "Buffer too small to hold result", /* 98 EBUFSIZE */
-
- "System Error list and errno.h are out-of-sync" /* EMAXERRORVAL - Should always be last. */
-};
diff --git a/StdLib/LibC/String/Misc.c b/StdLib/LibC/String/Misc.c
deleted file mode 100644
index 99328252ed..0000000000
--- a/StdLib/LibC/String/Misc.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/** @file
- Miscellaneous Functions for <string.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-//#include <sys/EfiCdefs.h>
-
-#include <Uefi.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/PcdLib.h>
-#include <Library/PrintLib.h>
-
-#include <LibConfig.h>
-
-#include <errno.h>
-#include <limits.h>
-#include <string.h>
-
-extern char *sys_errlist[];
-
-/** The memset function copies the value of c (converted to an unsigned char)
- into each of the first n characters of the object pointed to by s.
-
- @return The memset function returns the value of s.
-**/
-void *
-memset(void *s, int c, size_t n)
-{
- return SetMem( s, (UINTN)n, (UINT8)c);
-}
-
-int
-strerror_r(int errnum, char *buf, size_t buflen)
-{
- const char *estring;
- INTN i;
- int retval = 0;
-
- if( (errnum < 0) || (errnum >= EMAXERRORVAL)) {
- (void) AsciiSPrint( buf, ASCII_STRING_MAX, "Unknown Error: %d.", errnum);
- retval = EINVAL;
- }
- else {
- estring = sys_errlist[errnum];
- for( i = buflen; i > 0; --i) {
- if( (*buf++ = *estring++) == '\0') {
- break;
- }
- }
- if(i == 0) {
- retval = ERANGE;
- }
- }
- return retval;
-}
-
-/** The strerror function maps the number in errnum to a message string.
- Typically, the values for errnum come from errno, but strerror shall map
- any value of type int to a message.
-
- The implementation shall behave as if no library function calls the
- strerror function.
-
- @return The strerror function returns a pointer to the string, the
- contents of which are locale specific. The array pointed to
- shall not be modified by the program, but may be overwritten by
- a subsequent call to the strerror function.
-**/
-char *
-strerror(int errnum)
-{
- static char errorbuf[ASCII_STRING_MAX];
- int status;
-
- status = strerror_r(errnum, errorbuf, sizeof(errorbuf));
- if(status != 0) {
- errno = status;
- }
- return errorbuf;
-}
-
-/** The strlen function computes the length of the string pointed to by s.
-
- @return The strlen function returns the number of characters that
- precede the terminating null character.
-**/
-size_t
-strlen(const char *s)
-{
- return (size_t)AsciiStrLen( s);
-}
diff --git a/StdLib/LibC/String/Searching.c b/StdLib/LibC/String/Searching.c
deleted file mode 100644
index e22655621c..0000000000
--- a/StdLib/LibC/String/Searching.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/** @file
- Search Functions for <string.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-
-#include <LibConfig.h>
-#include <limits.h>
-#include <string.h>
-
-/** The memchr function locates the first occurrence of c (converted to an
- unsigned char) in the initial n characters (each interpreted as
- unsigned char) of the object pointed to by s.
-
- @return The memchr function returns a pointer to the located character,
- or a null pointer if the character does not occur in the object.
-**/
-void *
-memchr(const void *s, int c, size_t n)
-{
- return ScanMem8( s, (UINTN)n, (UINT8)c);
-}
-
-/** The strchr function locates the first occurrence of c (converted to a char)
- in the string pointed to by s. The terminating null character is considered
- to be part of the string.
-
- @return The strchr function returns a pointer to the located character,
- or a null pointer if the character does not occur in the string.
-**/
-char *
-strchr(const char *s, int c)
-{
- char tgt = (char)c;
-
- do {
- if( *s == tgt) {
- return (char *)s;
- }
- } while(*s++ != '\0');
- return NULL;
-}
-
-static UINT8 BitMask[] = {
- 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
- };
-
-#define WHICH8(c) ((unsigned char)(c) >> 3)
-#define WHICH_BIT(c) (BitMask[((c) & 0x7)])
-#define BITMAP64 ((UINT64 *)bitmap)
-
-static
-void
-BuildBitmap(unsigned char * bitmap, const char *s2, int n)
-{
- unsigned char bit;
- int index;
-
- // Initialize bitmap. Bit 0 is always 1 which corresponds to '\0'
- for (BITMAP64[0] = index = 1; index < n; index++)
- BITMAP64[index] = 0;
-
- // Set bits in bitmap corresponding to the characters in s2
- for (; *s2 != '\0'; s2++) {
- index = WHICH8(*s2);
- bit = WHICH_BIT(*s2);
- bitmap[index] = bitmap[index] | bit;
- }
-}
-
-/** The strcspn function computes the length of the maximum initial segment of
- the string pointed to by s1 which consists entirely of characters not from
- the string pointed to by s2.
-
- @return The strcspn function returns the length of the segment.
-**/
-size_t
-strcspn(const char *s1, const char *s2)
-{
- UINT8 bitmap[ (((UCHAR_MAX + 1) / CHAR_BIT) + (CHAR_BIT - 1)) & ~7U];
- const char *str;
- UINT8 bit;
- int index;
-
- if(*s1 == '\0') return 0;
-
- BuildBitmap( bitmap, s2, sizeof(bitmap) / sizeof(UINT64));
-
- for(str = s1; ; str++) {
- index = WHICH8(*str);
- bit = WHICH_BIT(*str);
- if ((bitmap[index] & bit) != 0)
- break;
- }
- return (str - s1);
-}
-
-/** The strpbrk function locates the first occurrence in the string pointed to
- by s1 of any character from the string pointed to by s2.
-
- @return The strpbrk function returns a pointer to the character, or a
- null pointer if no character from s2 occurs in s1.
-**/
-char *
-strpbrk(const char *s1, const char *s2)
-{
- UINT8 bitmap[ (((UCHAR_MAX + 1) / CHAR_BIT) + (CHAR_BIT - 1)) & ~7U];
- UINT8 bit;
- int index;
-
- BuildBitmap( bitmap, s2, sizeof(bitmap) / sizeof(UINT64));
-
- for( ; *s1 != '\0'; ++s1) {
- index = WHICH8(*s1);
- bit = WHICH_BIT(*s1);
- if( (bitmap[index] & bit) != 0) {
- return (char *)s1;
- }
- }
- return NULL;
-}
-
-/** The strrchr function locates the last occurrence of c (converted to a char)
- in the string pointed to by s. The terminating null character is considered
- to be part of the string.
-
- @return The strrchr function returns a pointer to the character, or a
- null pointer if c does not occur in the string.
-**/
-char *
-strrchr(const char *s, int c)
-{
- char *found = NULL;
- char tgt = (char)c;
-
- do {
- if( *s == tgt) found = (char *)s;
- } while( *s++ != '\0');
-
- return found;
-}
-
-/** The strspn function computes the length of the maximum initial segment of
- the string pointed to by s1 which consists entirely of characters from the
- string pointed to by s2.
-
- @return The strspn function returns the length of the segment.
-**/
-size_t
-strspn(const char *s1 , const char *s2)
-{
- UINT8 bitmap[ (((UCHAR_MAX + 1) / CHAR_BIT) + (CHAR_BIT - 1)) & ~7U];
- size_t length = 0;
- int index;
- UINT8 bit;
-
- BuildBitmap( bitmap, s2, sizeof(bitmap) / sizeof(UINT64));
-
- for( ; *s1 != '\0'; ++s1) {
- index = WHICH8(*s1);
- bit = WHICH_BIT(*s1);
- if( (bitmap[index] & bit) == 0) break;
- ++length;
- }
- return length;
-}
-
-/** The strstr function locates the first occurrence in the string pointed to
- by s1 of the sequence of characters (excluding the terminating null
- character) in the string pointed to by s2.
-
- @return The strstr function returns a pointer to the located string, or a
- null pointer if the string is not found. If s2 points to a string
- with zero length, the function returns s1.
-**/
-char *
-strstr(const char *s1 , const char *s2)
-{
- return AsciiStrStr( s1, s2);
-}
-
-/** A sequence of calls to the strtok function breaks the string pointed to by
- s1 into a sequence of tokens, each of which is delimited by a character
- from the string pointed to by s2. The first call in the sequence has a
- non-null first argument; subsequent calls in the sequence have a null first
- argument. The separator string pointed to by s2 may be different from call
- to call.
-
- The first call in the sequence searches the string pointed to by s1 for the
- first character that is not contained in the current separator string
- pointed to by s2. If no such character is found, then there are no tokens
- in the string pointed to by s1 and the strtok function returns a null
- pointer. If such a character is found, it is the start of the first token.
-
- The strtok function then searches from there for a character that is
- contained in the current separator string. If no such character is found,
- the current token extends to the end of the string pointed to by s1, and
- subsequent searches for a token will return a null pointer. If such a
- character is found, it is overwritten by a null character, which terminates
- the current token. The strtok function saves a pointer to the following
- character, from which the next search for a token will start.
-
- Each subsequent call, with a null pointer as the value of the first
- argument, starts searching from the saved pointer and behaves as
- described above.
-
- @return The strtok function returns a pointer to the first character of a
- token, or a null pointer if there is no token.
-**/
-char *
-strtok(char * __restrict s1, const char * __restrict s2)
-{
- static char *Next = NULL;
- UINT8 bitmap[ (((UCHAR_MAX + 1) / CHAR_BIT) + (CHAR_BIT - 1)) & ~7U];
- char *Token = NULL;
- int index;
- UINT8 bit;
-
- if( (s1 == NULL)
- && ((s1 = Next) == NULL))
- {
- return NULL;
- }
-
- // s2 can be different on each call, so build the bitmap each time.
- BuildBitmap( bitmap, s2, sizeof(bitmap) / sizeof(UINT64));
-
- // skip leading delimiters: all chars in s2
- for( ; *s1 != '\0'; ++s1) {
- index = WHICH8(*s1);
- bit = WHICH_BIT(*s1);
- if( (bitmap[index] & bit) == 0) break;
- }
- if( *s1 != 0)
- {
- // Remember this point, it is the start of the token
- Token = s1++;
-
- // find the next delimiter and replace it with a '\0'
- for( ; *s1 != '\0'; ++s1) {
- index = WHICH8(*s1);
- bit = WHICH_BIT(*s1);
- if( (bitmap[index] & bit) != 0) {
- *s1++ = '\0';
- Next = s1;
- return Token;
- }
- }
- }
- Next = NULL;
- return Token;
-}
diff --git a/StdLib/LibC/String/String.inf b/StdLib/LibC/String/String.inf
deleted file mode 100644
index 62db60e6a5..0000000000
--- a/StdLib/LibC/String/String.inf
+++ /dev/null
@@ -1,66 +0,0 @@
-## @file
-# Standard C library: Miscelaneous implementations.
-#
-# Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LibString
- FILE_GUID = caee2f3b-3191-4da0-ad10-a5c07e636cd1
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibString
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- Misc.c
- Copying.c
- Concatenation.c
- Comparison.c
- Searching.c
- ErrorList.c
- strncasecmp.c
- strlcpy.c
- strlcat.c
- strsep.c
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
-
-[LibraryClasses]
- BaseLib
- BaseMemoryLib
- PrintLib # Used for strerror()
- PcdLib
- LibC
- LibCType
- LibStdLib
-
-################################################################
-#
-# The Build Options, below, are only used when building the C library.
-# DO NOT use them when building your application!
-# Nasty things could happen if you do.
-#
-# /Oi- is required for Microsoft VC++ to allow "intrinsic" functions to be
-# defined in this library.
-# /GL- is required so that LTCG generated references to functions in this library,
-# such as memcpy(), can be resolved.
-#
-[BuildOptions]
- MSFT:*_*_*_CC_FLAGS = /Oi- /GL-
diff --git a/StdLib/LibC/String/strlcat.c b/StdLib/LibC/String/strlcat.c
deleted file mode 100644
index fc9aba7b12..0000000000
--- a/StdLib/LibC/String/strlcat.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* $NetBSD: strlcat.c,v 1.3 2007/06/04 18:19:27 christos Exp $ */
-/* $OpenBSD: strlcat.c,v 1.10 2003/04/12 21:56:39 millert Exp $ */
-
-/*
- * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND TODD C. MILLER DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER BE LIABLE
- * FOR ANY SPECIAL, DIRECT, 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 <LibConfig.h>
-
-#if !defined(_KERNEL) && !defined(_STANDALONE)
-#if HAVE_NBTOOL_CONFIG_H
-#include "nbtool_config.h"
-#endif
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: strlcat.c,v 1.3 2007/06/04 18:19:27 christos Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#ifdef _LIBC
-#include "namespace.h"
-#endif
-#include <sys/types.h>
-#include <assert.h>
-#include <string.h>
-
-#ifdef _LIBC
-# ifdef __weak_alias
-__weak_alias(strlcat, _strlcat)
-# endif
-#endif
-
-#else
-#include <lib/libkern/libkern.h>
-#endif /* !_KERNEL && !_STANDALONE */
-
-#ifndef HAVE_STRLCAT
-/*
- * Appends src to string dst of size siz (unlike strncat, siz is the
- * full size of dst, not space left). At most siz-1 characters
- * will be copied. Always NUL terminates (unless siz <= strlen(dst)).
- * Returns strlen(src) + MIN(siz, strlen(initial dst)).
- * If retval >= siz, truncation occurred.
- */
-size_t
-strlcat(char *dst, const char *src, size_t siz)
-{
- char *d = dst;
- const char *s = src;
- size_t n = siz;
- size_t dlen;
-
- _DIAGASSERT(dst != NULL);
- _DIAGASSERT(src != NULL);
-
- /* Find the end of dst and adjust bytes left but don't go past end */
- while (n-- != 0 && *d != '\0')
- d++;
- dlen = d - dst;
- n = siz - dlen;
-
- if (n == 0)
- return(dlen + strlen(s));
- while (*s != '\0') {
- if (n != 1) {
- *d++ = *s;
- n--;
- }
- s++;
- }
- *d = '\0';
-
- return(dlen + (s - src)); /* count does not include NUL */
-}
-#endif
diff --git a/StdLib/LibC/String/strlcpy.c b/StdLib/LibC/String/strlcpy.c
deleted file mode 100644
index 5631e255d5..0000000000
--- a/StdLib/LibC/String/strlcpy.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* $NetBSD: strlcpy.c,v 1.3 2007/06/04 18:19:27 christos Exp $ */
-/* $OpenBSD: strlcpy.c,v 1.7 2003/04/12 21:56:39 millert Exp $ */
-
-/*
- * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND TODD C. MILLER DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER BE LIABLE
- * FOR ANY SPECIAL, DIRECT, 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 <LibConfig.h>
-
-#if !defined(_KERNEL) && !defined(_STANDALONE)
-#if HAVE_NBTOOL_CONFIG_H
-#include "nbtool_config.h"
-#endif
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: strlcpy.c,v 1.3 2007/06/04 18:19:27 christos Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#ifdef _LIBC
-#include "namespace.h"
-#endif
-#include <sys/types.h>
-#include <assert.h>
-#include <string.h>
-
-#ifdef _LIBC
-# ifdef __weak_alias
-__weak_alias(strlcpy, _strlcpy)
-# endif
-#endif
-#else
-#include <lib/libkern/libkern.h>
-#endif /* !_KERNEL && !_STANDALONE */
-
-
-#if !HAVE_STRLCPY
-/*
- * Copy src to string dst of size siz. At most siz-1 characters
- * will be copied. Always NUL terminates (unless siz == 0).
- * Returns strlen(src); if retval >= siz, truncation occurred.
- */
-size_t
-strlcpy(char *dst, const char *src, size_t siz)
-{
- char *d = dst;
- const char *s = src;
- size_t n = siz;
-
- _DIAGASSERT(dst != NULL);
- _DIAGASSERT(src != NULL);
-
- /* Copy as many bytes as will fit */
- if (n != 0 && --n != 0) {
- do {
- if ((*d++ = *s++) == 0)
- break;
- } while (--n != 0);
- }
-
- /* Not enough room in dst, add NUL and traverse rest of src */
- if (n == 0) {
- if (siz != 0)
- *d = '\0'; /* NUL-terminate dst */
- while (*s++)
- ;
- }
-
- return(s - src - 1); /* count does not include NUL */
-}
-#endif
diff --git a/StdLib/LibC/String/strncasecmp.c b/StdLib/LibC/String/strncasecmp.c
deleted file mode 100644
index 9cc1851ee2..0000000000
--- a/StdLib/LibC/String/strncasecmp.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/** @file
- strncasecmp implementation
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1987, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- $NetBSD: strncasecmp.c,v 1.2 2007/06/04 18:19:27 christos Exp $
- strcasecmp.c 8.1 (Berkeley) 6/4/93
-**/
-#include <LibConfig.h>
-#include <sys/cdefs.h>
-
-#if !defined(_KERNEL) && !defined(_STANDALONE)
-#include "namespace.h"
-#include <assert.h>
-#include <ctype.h>
-#include <string.h>
-#ifdef __weak_alias
-__weak_alias(strcasecmp,_strcasecmp)
-__weak_alias(strncasecmp,_strncasecmp)
-#endif
-#else
-#include <lib/libkern/libkern.h>
-#include <machine/limits.h>
-#endif
-
-int
-strncasecmp(const char *s1, const char *s2, size_t n)
-{
- int CompareVal;
-
- _DIAGASSERT(s1 != NULL);
- _DIAGASSERT(s2 != NULL);
-
- if (n != 0) {
- do {
- CompareVal = tolower(*s1) - tolower(*s2);
- if (CompareVal != 0) {
- return (CompareVal);
- }
- ++s1;
- ++s2;
- if (*s1 == '\0') {
- break;
- }
- } while (--n != 0);
- }
- return (0);
-}
diff --git a/StdLib/LibC/String/strsep.c b/StdLib/LibC/String/strsep.c
deleted file mode 100644
index 234b0cabd6..0000000000
--- a/StdLib/LibC/String/strsep.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-
-#include <sys/cdefs.h>
-#include <string.h>
-#include <stdio.h>
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)strsep.c 8.1 (Berkeley) 6/4/93";
-#endif /* LIBC_SCCS and not lint */
-
-/*
- * Get next token from string *stringp, where tokens are possibly-empty
- * strings separated by characters from delim.
- *
- * Writes NULs into the string at *stringp to end tokens.
- * delim need not remain constant from call to call.
- * On return, *stringp points past the last NUL written (if there might
- * be further tokens), or is NULL (if there are definitely no more tokens).
- *
- * If *stringp is NULL, strsep returns NULL.
- */
-char *
-strsep(
- register char **stringp,
- register const char *delim
- )
-{
- register char *s;
- register const char *spanp;
- register int c, sc;
- char *tok;
-
- if ((s = *stringp) == NULL)
- return (NULL);
- for (tok = s;;) {
- c = *s++;
- spanp = delim;
- do {
- if ((sc = *spanp++) == c) {
- if (c == 0)
- s = NULL;
- else
- s[-1] = 0;
- *stringp = s;
- return (tok);
- }
- } while (sc != 0);
- }
- /* NOTREACHED */
-}
diff --git a/StdLib/LibC/Time/Theory.txt b/StdLib/LibC/Time/Theory.txt
deleted file mode 100644
index f8e77adbdf..0000000000
--- a/StdLib/LibC/Time/Theory.txt
+++ /dev/null
@@ -1,553 +0,0 @@
-# $NetBSD: Theory,v 1.8 2004/05/27 20:39:49 kleink Exp $
-@(#)Theory 7.15
-
-
------ Outline -----
-
- Time and date functions
- Names of time zone regions
- Time zone abbreviations
- Calendrical issues
- Time and time zones on Mars
-
-
------ Time and date functions -----
-
-These time and date functions are upwards compatible with POSIX.1,
-an international standard for UNIX-like systems.
-As of this writing, the current edition of POSIX.1 is:
-
- Information technology --Portable Operating System Interface (POSIX (R))
- -- Part 1: System Application Program Interface (API) [C Language]
- ISO/IEC 9945-1:1996
- ANSI/IEEE Std 1003.1, 1996 Edition
- 1996-07-12
-
-POSIX.1 has the following properties and limitations.
-
-* In POSIX.1, time display in a process is controlled by the
- environment variable TZ. Unfortunately, the POSIX.1 TZ string takes
- a form that is hard to describe and is error-prone in practice.
- Also, POSIX.1 TZ strings can't deal with other (for example, Israeli)
- daylight saving time rules, or situations where more than two
- time zone abbreviations are used in an area.
-
- The POSIX.1 TZ string takes the following form:
-
- stdoffset[dst[offset],date[/time],date[/time]]
-
- where:
-
- std and dst
- are 3 or more characters specifying the standard
- and daylight saving time (DST) zone names.
- offset
- is of the form `[-]hh:[mm[:ss]]' and specifies the
- offset west of UTC. The default DST offset is one hour
- ahead of standard time.
- date[/time],date[/time]
- specifies the beginning and end of DST. If this is absent,
- the system supplies its own rules for DST, and these can
- differ from year to year; typically US DST rules are used.
- time
- takes the form `hh:[mm[:ss]]' and defaults to 02:00.
- date
- takes one of the following forms:
- Jn (1<=n<=365)
- origin-1 day number not counting February 29
- n (0<=n<=365)
- origin-0 day number counting February 29 if present
- Mm.n.d (0[Sunday]<=d<=6[Saturday], 1<=n<=5, 1<=m<=12)
- for the dth day of week n of month m of the year,
- where week 1 is the first week in which day d appears,
- and `5' stands for the last week in which day d appears
- (which may be either the 4th or 5th week).
-
-* In POSIX.1, when a TZ value like "EST5EDT" is parsed,
- typically the current US DST rules are used,
- but this means that the US DST rules are compiled into each program
- that does time conversion. This means that when US time conversion
- rules change (as in the United States in 1987), all programs that
- do time conversion must be recompiled to ensure proper results.
-
-* In POSIX.1, there's no tamper-proof way for a process to learn the
- system's best idea of local wall clock. (This is important for
- applications that an administrator wants used only at certain times--
- without regard to whether the user has fiddled the "TZ" environment
- variable. While an administrator can "do everything in UTC" to get
- around the problem, doing so is inconvenient and precludes handling
- daylight saving time shifts--as might be required to limit phone
- calls to off-peak hours.)
-
-* POSIX.1 requires that systems ignore leap seconds.
-
-These are the extensions that have been made to the POSIX.1 functions:
-
-* The "TZ" environment variable is used in generating the name of a file
- from which time zone information is read (or is interpreted a la
- POSIX); "TZ" is no longer constrained to be a three-letter time zone
- name followed by a number of hours and an optional three-letter
- daylight time zone name. The daylight saving time rules to be used
- for a particular time zone are encoded in the time zone file;
- the format of the file allows U.S., Australian, and other rules to be
- encoded, and allows for situations where more than two time zone
- abbreviations are used.
-
- It was recognized that allowing the "TZ" environment variable to
- take on values such as "America/New_York" might cause "old" programs
- (that expect "TZ" to have a certain form) to operate incorrectly;
- consideration was given to using some other environment variable
- (for example, "TIMEZONE") to hold the string used to generate the
- time zone information file name. In the end, however, it was decided
- to continue using "TZ": it is widely used for time zone purposes;
- separately maintaining both "TZ" and "TIMEZONE" seemed a nuisance;
- and systems where "new" forms of "TZ" might cause problems can simply
- use TZ values such as "EST5EDT" which can be used both by
- "new" programs (a la POSIX) and "old" programs (as zone names and
- offsets).
-
-* To handle places where more than two time zone abbreviations are used,
- the functions "localtime" and "gmtime" set tzname[tmp->tm_isdst]
- (where "tmp" is the value the function returns) to the time zone
- abbreviation to be used. This differs from POSIX.1, where the elements
- of tzname are only changed as a result of calls to tzset.
-
-* Since the "TZ" environment variable can now be used to control time
- conversion, the "daylight" and "timezone" variables are no longer
- needed. (These variables are defined and set by "tzset"; however, their
- values will not be used by "localtime.")
-
-* The "localtime" function has been set up to deliver correct results
- for near-minimum or near-maximum time_t values. (A comment in the
- source code tells how to get compatibly wrong results).
-
-* A function "tzsetwall" has been added to arrange for the system's
- best approximation to local wall clock time to be delivered by
- subsequent calls to "localtime." Source code for portable
- applications that "must" run on local wall clock time should call
- "tzsetwall();" if such code is moved to "old" systems that don't
- provide tzsetwall, you won't be able to generate an executable program.
- (These time zone functions also arrange for local wall clock time to be
- used if tzset is called--directly or indirectly--and there's no "TZ"
- environment variable; portable applications should not, however, rely
- on this behavior since it's not the way SVR2 systems behave.)
-
-* These functions can account for leap seconds, thanks to Bradley White
- (bww@k.cs.cmu.edu).
-
-Points of interest to folks with other systems:
-
-* This package is already part of many POSIX-compliant hosts,
- including BSD, HP, Linux, Network Appliance, SCO, SGI, and Sun.
- On such hosts, the primary use of this package
- is to update obsolete time zone rule tables.
- To do this, you may need to compile the time zone compiler
- `zic' supplied with this package instead of using the system `zic',
- since the format of zic's input changed slightly in late 1994,
- and many vendors still do not support the new input format.
-
-* The UNIX Version 7 "timezone" function is not present in this package;
- it's impossible to reliably map timezone's arguments (a "minutes west
- of GMT" value and a "daylight saving time in effect" flag) to a
- time zone abbreviation, and we refuse to guess.
- Programs that in the past used the timezone function may now examine
- tzname[localtime(&clock)->tm_isdst] to learn the correct time
- zone abbreviation to use. Alternatively, use
- localtime(&clock)->tm_zone if this has been enabled.
-
-* The 4.2BSD gettimeofday function is not used in this package.
- This formerly let users obtain the current UTC offset and DST flag,
- but this functionality was removed in later versions of BSD.
-
-* In SVR2, time conversion fails for near-minimum or near-maximum
- time_t values when doing conversions for places that don't use UTC.
- This package takes care to do these conversions correctly.
-
-The functions that are conditionally compiled if STD_INSPIRED is defined
-should, at this point, be looked on primarily as food for thought. They are
-not in any sense "standard compatible"--some are not, in fact, specified in
-*any* standard. They do, however, represent responses of various authors to
-standardization proposals.
-
-Other time conversion proposals, in particular the one developed by folks at
-Hewlett Packard, offer a wider selection of functions that provide capabilities
-beyond those provided here. The absence of such functions from this package
-is not meant to discourage the development, standardization, or use of such
-functions. Rather, their absence reflects the decision to make this package
-contain valid extensions to POSIX.1, to ensure its broad
-acceptability. If more powerful time conversion functions can be standardized,
-so much the better.
-
-
------ Names of time zone rule files -----
-
-The time zone rule file naming conventions attempt to strike a balance
-among the following goals:
-
- * Uniquely identify every national region where clocks have all
- agreed since 1970. This is essential for the intended use: static
- clocks keeping local civil time.
-
- * Indicate to humans as to where that region is. This simplifes use.
-
- * Be robust in the presence of political changes. This reduces the
- number of updates and backward-compatibility hacks. For example,
- names of countries are ordinarily not used, to avoid
- incompatibilities when countries change their name
- (e.g. Zaire->Congo) or when locations change countries
- (e.g. Hong Kong from UK colony to China).
-
- * Be portable to a wide variety of implementations.
- This promotes use of the technology.
-
- * Use a consistent naming convention over the entire world.
- This simplifies both use and maintenance.
-
-This naming convention is not intended for use by inexperienced users
-to select TZ values by themselves (though they can of course examine
-and reuse existing settings). Distributors should provide
-documentation and/or a simple selection interface that explains the
-names; see the 'tzselect' program supplied with this distribution for
-one example.
-
-Names normally have the form AREA/LOCATION, where AREA is the name
-of a continent or ocean, and LOCATION is the name of a specific
-location within that region. North and South America share the same
-area, `America'. Typical names are `Africa/Cairo', `America/New_York',
-and `Pacific/Honolulu'.
-
-Here are the general rules used for choosing location names,
-in decreasing order of importance:
-
- Use only valid POSIX file name components (i.e., the parts of
- names other than `/'). Within a file name component,
- use only ASCII letters, `.', `-' and `_'. Do not use
- digits, as that might create an ambiguity with POSIX
- TZ strings. A file name component must not exceed 14
- characters or start with `-'. E.g., prefer `Brunei'
- to `Bandar_Seri_Begawan'.
- Include at least one location per time zone rule set per country.
- One such location is enough. Use ISO 3166 (see the file
- iso3166.tab) to help decide whether something is a country.
- If all the clocks in a country's region have agreed since 1970,
- don't bother to include more than one location
- even if subregions' clocks disagreed before 1970.
- Otherwise these tables would become annoyingly large.
- If a name is ambiguous, use a less ambiguous alternative;
- e.g. many cities are named San Jose and Georgetown, so
- prefer `Costa_Rica' to `San_Jose' and `Guyana' to `Georgetown'.
- Keep locations compact. Use cities or small islands, not countries
- or regions, so that any future time zone changes do not split
- locations into different time zones. E.g. prefer `Paris'
- to `France', since France has had multiple time zones.
- Use mainstream English spelling, e.g. prefer `Rome' to `Roma', and
- prefer `Athens' to the true name (which uses Greek letters).
- The POSIX file name restrictions encourage this rule.
- Use the most populous among locations in a country's time zone,
- e.g. prefer `Shanghai' to `Beijing'. Among locations with
- similar populations, pick the best-known location,
- e.g. prefer `Rome' to `Milan'.
- Use the singular form, e.g. prefer `Canary' to `Canaries'.
- Omit common suffixes like `_Islands' and `_City', unless that
- would lead to ambiguity. E.g. prefer `Cayman' to
- `Cayman_Islands' and `Guatemala' to `Guatemala_City',
- but prefer `Mexico_City' to `Mexico' because the country
- of Mexico has several time zones.
- Use `_' to represent a space.
- Omit `.' from abbreviations in names, e.g. prefer `St_Helena'
- to `St._Helena'.
- Do not change established names if they only marginally
- violate the above rules. For example, don't change
- the existing name `Rome' to `Milan' merely because
- Milan's population has grown to be somewhat greater
- than Rome's.
- If a name is changed, put its old spelling in the `backward' file.
-
-The file `zone.tab' lists the geographical locations used to name
-time zone rule files.
-
-Older versions of this package used a different naming scheme,
-and these older names are still supported.
-See the file `backward' for most of these older names
-(e.g. `US/Eastern' instead of `America/New_York').
-The other old-fashioned names still supported are
-`WET', `CET', `MET', `EET' (see the file `europe'),
-and `Factory' (see the file `factory').
-
-
------ Time zone abbreviations -----
-
-When this package is installed, it generates time zone abbreviations
-like `EST' to be compatible with human tradition and POSIX.1.
-Here are the general rules used for choosing time zone abbreviations,
-in decreasing order of importance:
-
- Use abbreviations that consist of three or more ASCII letters.
- Previous editions of this database also used characters like
- ' ' and '?', but these characters have a special meaning to
- the shell and cause commands like
- set `date`
- to have unexpected effects.
- Previous editions of this rule required upper-case letters,
- but the Congressman who introduced Chamorro Standard Time
- preferred "ChST", so the rule has been relaxed.
-
- This rule guarantees that all abbreviations could have
- been specified by a POSIX.1 TZ string. POSIX.1
- requires at least three characters for an
- abbreviation. POSIX.1-1996 says that an abbreviation
- cannot start with ':', and cannot contain ',', '-',
- '+', NUL, or a digit. Draft 7 of POSIX 1003.1-200x
- changes this rule to say that an abbreviation can
- contain only '-', '+', and alphanumeric characters in
- the current locale. To be portable to both sets of
- rules, an abbreviation must therefore use only ASCII
- letters, as these are the only letters that are
- alphabetic in all locales.
-
- Use abbreviations that are in common use among English-speakers,
- e.g. `EST' for Eastern Standard Time in North America.
- We assume that applications translate them to other languages
- as part of the normal localization process; for example,
- a French application might translate `EST' to `HNE'.
-
- For zones whose times are taken from a city's longitude, use the
- traditional xMT notation, e.g. `PMT' for Paris Mean Time.
- The only name like this in current use is `GMT'.
-
- If there is no common English abbreviation, abbreviate the English
- translation of the usual phrase used by native speakers.
- If this is not available or is a phrase mentioning the country
- (e.g. ``Cape Verde Time''), then:
-
- When a country has a single or principal time zone region,
- append `T' to the country's ISO code, e.g. `CVT' for
- Cape Verde Time. For summer time append `ST';
- for double summer time append `DST'; etc.
- When a country has multiple time zones, take the first three
- letters of an English place name identifying each zone
- and then append `T', `ST', etc. as before;
- e.g. `VLAST' for VLAdivostok Summer Time.
-
- Use "zzz" for locations while uninhabited. The mnemonic is that
- these locations are, in some sense, asleep.
-
-Application writers should note that these abbreviations are ambiguous
-in practice: e.g. `EST' has a different meaning in Australia than
-it does in the United States. In new applications, it's often better
-to use numeric UTC offsets like `-0500' instead of time zone
-abbreviations like `EST'; this avoids the ambiguity.
-
-
------ Calendrical issues -----
-
-Calendrical issues are a bit out of scope for a time zone database,
-but they indicate the sort of problems that we would run into if we
-extended the time zone database further into the past. An excellent
-resource in this area is Nachum Dershowitz and Edward M. Reingold,
-<a href="http://emr.cs.uiuc.edu/home/reingold/calendar-book/index.shtml">
-Calendrical Calculations
-</a>, Cambridge University Press (1997). Other information and
-sources are given below. They sometimes disagree.
-
-
-France
-
-Gregorian calendar adopted 1582-12-20.
-French Revolutionary calendar used 1793-11-24 through 1805-12-31,
-and (in Paris only) 1871-05-06 through 1871-05-23.
-
-
-Russia
-
-From Chris Carrier <72157.3334@CompuServe.COM> (1996-12-02):
-On 1929-10-01 the Soviet Union instituted an ``Eternal Calendar''
-with 30-day months plus 5 holidays, with a 5-day week.
-On 1931-12-01 it changed to a 6-day week; in 1934 it reverted to the
-Gregorian calendar while retaining the 6-day week; on 1940-06-27 it
-reverted to the 7-day week. With the 6-day week the usual days
-off were the 6th, 12th, 18th, 24th and 30th of the month.
-(Source: Evitiar Zerubavel, _The Seven Day Circle_)
-
-
-Mark Brader reported a similar story in "The Book of Calendars", edited
-by Frank Parise (1982, Facts on File, ISBN 0-8719-6467-8), page 377. But:
-
-From: Petteri Sulonen (via Usenet)
-Date: 14 Jan 1999 00:00:00 GMT
-Message-ID: <Petteri.Sulonen-1401991626030001@lapin-kulta.in.helsinki.fi>
-
-If your source is correct, how come documents between 1929 -- 1940 were
-still dated using the conventional, Gregorian calendar?
-
-I can post a scan of a document dated December 1, 1934, signed by
-Yenukidze, the secretary, on behalf of Kalinin, the President of the
-Executive Committee of the Supreme Soviet, if you like.
-
-
-
-Sweden (and Finland)
-
-From: msb@sq.com (Mark Brader)
-<a href="news:1996Jul6.012937.29190@sq.com">
-Subject: Re: Gregorian reform -- a part of locale?
-</a>
-Date: 1996-07-06
-
-In 1700, Denmark made the transition from Julian to Gregorian. Sweden
-decided to *start* a transition in 1700 as well, but rather than have one of
-those unsightly calendar gaps :-), they simply decreed that the next leap
-year after 1696 would be in 1744 -- putting the whole country on a calendar
-different from both Julian and Gregorian for a period of 40 years.
-
-However, in 1704 something went wrong and the plan was not carried through;
-they did, after all, have a leap year that year. And one in 1708. In 1712
-they gave it up and went back to Julian, putting 30 days in February that
-year!...
-
-Then in 1753, Sweden made the transition to Gregorian in the usual manner,
-getting there only 13 years behind the original schedule.
-
-(A previous posting of this story was challenged, and Swedish readers
-produced the following references to support it: "Tiderakning och historia"
-by Natanael Beckman (1924) and "Tid, en bok om tiderakning och
-kalendervasen" by Lars-Olof Lode'n (no date was given).)
-
-
-Grotefend's data
-
-From: "Michael Palmer" <mpalmer@netcom.com> [with one obvious typo fixed]
-Subject: Re: Gregorian Calendar (was Re: Another FHC related question
-Newsgroups: soc.genealogy.german
-Date: Tue, 9 Feb 1999 02:32:48 -800
-Message-ID: <199902091032.CAA09644@netcom10.netcom.com>
-
-The following is a(n incomplete) listing, arranged chronologically, of
-European states, with the date they converted from the Julian to the
-Gregorian calendar:
-
-04/15 Oct 1582 - Italy (with exceptions), Spain, Portugal, Poland (Roman
- Catholics and Danzig only)
-09/20 Dec 1582 - France, Lorraine
-
-21 Dec 1582/
- 01 Jan 1583 - Holland, Brabant, Flanders, Hennegau
-10/21 Feb 1583 - bishopric of Liege (L"uttich)
-13/24 Feb 1583 - bishopric of Augsburg
-04/15 Oct 1583 - electorate of Trier
-05/16 Oct 1583 - Bavaria, bishoprics of Freising, Eichstedt, Regensburg,
- Salzburg, Brixen
-13/24 Oct 1583 - Austrian Oberelsass and Breisgau
-20/31 Oct 1583 - bishopric of Basel
-02/13 Nov 1583 - duchy of J"ulich-Berg
-02/13 Nov 1583 - electorate and city of K"oln
-04/15 Nov 1583 - bishopric of W"urzburg
-11/22 Nov 1583 - electorate of Mainz
-16/27 Nov 1583 - bishopric of Strassburg and the margraviate of Baden
-17/28 Nov 1583 - bishopric of M"unster and duchy of Cleve
-14/25 Dec 1583 - Steiermark
-
-06/17 Jan 1584 - Austria and Bohemia
-11/22 Jan 1584 - Luzern, Uri, Schwyz, Zug, Freiburg, Solothurn
-12/23 Jan 1584 - Silesia and the Lausitz
-22 Jan/
- 02 Feb 1584 - Hungary (legally on 21 Oct 1587)
- Jun 1584 - Unterwalden
-01/12 Jul 1584 - duchy of Westfalen
-
-16/27 Jun 1585 - bishopric of Paderborn
-
-14/25 Dec 1590 - Transylvania
-
-22 Aug/
- 02 Sep 1612 - duchy of Prussia
-
-13/24 Dec 1614 - Pfalz-Neuburg
-
- 1617 - duchy of Kurland (reverted to the Julian calendar in
- 1796)
-
- 1624 - bishopric of Osnabr"uck
-
- 1630 - bishopric of Minden
-
-15/26 Mar 1631 - bishopric of Hildesheim
-
- 1655 - Kanton Wallis
-
-05/16 Feb 1682 - city of Strassburg
-
-18 Feb/
- 01 Mar 1700 - Protestant Germany (including Swedish possessions in
- Germany), Denmark, Norway
-30 Jun/
- 12 Jul 1700 - Gelderland, Zutphen
-10 Nov/
- 12 Dec 1700 - Utrecht, Overijssel
-
-31 Dec 1700/
- 12 Jan 1701 - Friesland, Groningen, Z"urich, Bern, Basel, Geneva,
- Turgau, and Schaffhausen
-
- 1724 - Glarus, Appenzell, and the city of St. Gallen
-
-01 Jan 1750 - Pisa and Florence
-
-02/14 Sep 1752 - Great Britain
-
-17 Feb/
- 01 Mar 1753 - Sweden
-
-1760-1812 - Graub"unden
-
-The Russian empire (including Finland and the Baltic states) did not
-convert to the Gregorian calendar until the Soviet revolution of 1917.
-
-Source: H. Grotefend, _Taschenbuch der Zeitrechnung des deutschen
-Mittelalters und der Neuzeit_, herausgegeben von Dr. O. Grotefend
-(Hannover: Hahnsche Buchhandlung, 1941), pp. 26-28.
-
-
------ Time and time zones on Mars -----
-
-Some people have adjusted their work schedules to fit Mars time.
-Dozens of special Mars watches were built for Jet Propulsion
-Laboratory workers who kept Mars time during the Mars Exploration
-Rovers mission (2004). These timepieces look like normal Seikos and
-Citizens but use Mars seconds rather than terrestrial seconds.
-
-A Mars solar day is called a "sol" and has a mean period equal to
-about 24 hours 39 minutes 35.244 seconds in terrestrial time. It is
-divided into a conventional 24-hour clock, so each Mars second equals
-about 1.02749125 terrestrial seconds.
-
-The prime meridian of Mars goes through the center of the crater
-Airy-0, named in honor of the British astronomer who built the
-Greenwich telescope that defines Earth's prime meridian. Mean solar
-time on the Mars prime meridian is called Mars Coordinated Time (MTC).
-
-Each landed mission on Mars has adopted a different reference for
-solar time keeping, so there is no real standard for Mars time zones.
-For example, the Mars Exploration Rover project (2004) defined two
-time zones "Local Solar Time A" and "Local Solar Time B" for its two
-missions, each zone designed so that its time equals local true solar
-time at approximately the middle of the nominal mission. Such a "time
-zone" is not particularly suited for any application other than the
-mission itself.
-
-Many calendars have been proposed for Mars, but none have achieved
-wide acceptance. Astronomers often use Mars Sol Date (MSD) which is a
-sequential count of Mars solar days elapsed since about 1873-12-29
-12:00 GMT.
-
-The tz database does not currently support Mars time, but it is
-documented here in the hopes that support will be added eventually.
-
-Sources:
-
-Michael Allison and Robert Schmunk,
-"Technical Notes on Mars Solar Time as Adopted by the Mars24 Sunclock"
-<http://www.giss.nasa.gov/tools/mars24/help/notes.html> (2004-03-15).
-
-Jia-Rui Chong, "Workdays Fit for a Martian", Los Angeles Times
-(2004-01-14), pp A1, A20-A21.
diff --git a/StdLib/LibC/Time/Time.c b/StdLib/LibC/Time/Time.c
deleted file mode 100644
index 0296a5dc93..0000000000
--- a/StdLib/LibC/Time/Time.c
+++ /dev/null
@@ -1,765 +0,0 @@
-/**
- Definitions and Implementation for <time.h>.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Portions derived from the NIH time zone package file, localtime.c,
- which contains the following notice:
-
- This file is in the public domain, so clarified as of
- 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
-
- NetBSD: localtime.c,v 1.39 2006/03/22 14:01:30 christos Exp
-**/
-#include <Uefi.h>
-#include <Library/UefiLib.h>
-#include <Library/TimerLib.h>
-#include <Library/BaseLib.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-//#include <Library/UefiRuntimeLib.h>
-
-#include <LibConfig.h>
-
-#include <errno.h>
-#include <limits.h>
-#include <time.h>
-#include <reentrant.h>
-#include "tzfile.h"
-#include "TimeVals.h"
-#include <MainData.h>
-#include <extern.h> // Library/include/extern.h: Private to implementation
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
-// Keep compiler quiet about casting from function to data pointers
-#pragma warning ( disable : 4054 )
-#endif /* defined(_MSC_VER) */
-
-/* ####################### Private Data ################################# */
-
-#if 0
-static EFI_TIME TimeBuffer;
-
- static UINT16 MonthOffs[12] = {
- 00,
- 31, 59, 90, 120,
- 151, 181, 212, 243,
- 273, 304, 334
- };
- static clock_t y2kOffs = 730485;
-#endif
-
-const int mon_lengths[2][MONSPERYEAR] = {
- { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
- { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
-};
-
-const int year_lengths[2] = {
- DAYSPERNYEAR, DAYSPERLYEAR
-};
-
-
-static const char *wday_name[7] = {
- "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
-};
-
-static const char *mon_name[12] = {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
-};
-
-static int gmt_is_set;
-
-/* ############### Implementation Functions ############################ */
-// Forward reference
-static void
-localsub(const time_t * const timep, const long offset, struct tm * const tmp);
-
-clock_t
-__getCPS(void)
-{
- return gMD->ClocksPerSecond;
-}
-
-static void
-timesub(
- const time_t * const timep,
- const long offset,
- const struct state * const sp,
- struct tm * const tmp
- )
-{
- const struct lsinfo * lp;
- time_t /*INTN*/ days;
- time_t /*INTN*/ rem;
- time_t /*INTN*/ y;
- int yleap;
- const int * ip;
- time_t /*INTN*/ corr;
- int hit;
- int i;
-
- corr = 0;
- hit = 0;
-#ifdef ALL_STATE
- i = (sp == NULL) ? 0 : sp->leapcnt;
-#endif /* defined ALL_STATE */
-#ifndef ALL_STATE
- i = sp->leapcnt;
-#endif /* State Farm */
- while (--i >= 0) {
- lp = &sp->lsis[i];
- if (*timep >= lp->ls_trans) {
- if (*timep == lp->ls_trans) {
- hit = ((i == 0 && lp->ls_corr > 0) ||
- lp->ls_corr > sp->lsis[i - 1].ls_corr);
- if (hit)
- while (i > 0 &&
- sp->lsis[i].ls_trans == sp->lsis[i - 1].ls_trans + 1 &&
- sp->lsis[i].ls_corr == sp->lsis[i - 1].ls_corr + 1 )
- {
- ++hit;
- --i;
- }
- }
- corr = lp->ls_corr;
- break;
- }
- }
- days = *timep / SECSPERDAY;
- rem = *timep % SECSPERDAY;
- rem += (offset - corr);
- while (rem < 0) {
- rem += SECSPERDAY;
- --days;
- }
- while (rem >= SECSPERDAY) {
- rem -= SECSPERDAY;
- ++days;
- }
- tmp->tm_hour = (int) (rem / SECSPERHOUR);
- rem = rem % SECSPERHOUR;
- tmp->tm_min = (int) (rem / SECSPERMIN);
- /*
- ** A positive leap second requires a special
- ** representation. This uses "... ??:59:60" et seq.
- */
- tmp->tm_sec = (int) (rem % SECSPERMIN) + hit;
- tmp->tm_wday = (int) ((EPOCH_WDAY + days) % DAYSPERWEEK);
- if (tmp->tm_wday < 0)
- tmp->tm_wday += DAYSPERWEEK;
- y = EPOCH_YEAR;
- while (days < 0 || days >= (LONG32) year_lengths[yleap = isleap(y)]) {
- time_t /*INTN*/ newy;
-
- newy = (y + days / DAYSPERNYEAR);
- if (days < 0)
- --newy;
- days -= (newy - y) * DAYSPERNYEAR +
- LEAPS_THRU_END_OF(newy - 1) -
- LEAPS_THRU_END_OF(y - 1);
- y = newy;
- }
- tmp->tm_year = (int)(y - TM_YEAR_BASE);
- tmp->tm_yday = (int) days;
- ip = mon_lengths[yleap];
- for (tmp->tm_mon = 0; days >= (LONG32) ip[tmp->tm_mon]; ++(tmp->tm_mon))
- days = days - (LONG32) ip[tmp->tm_mon];
- tmp->tm_mday = (int) (days + 1);
- tmp->tm_isdst = 0;
-#ifdef TM_GMTOFF
- tmp->TM_GMTOFF = offset;
-#endif /* defined TM_GMTOFF */
-}
-
-/* ############### Time Manipulation Functions ########################## */
-
-/**
-**/
-double
-difftime(time_t time1, time_t time0)
-{
- return (double)(time1 - time0);
-}
-
-/*
-** Adapted from code provided by Robert Elz, who writes:
-** The "best" way to do mktime I think is based on an idea of Bob
-** Kridle's (so its said...) from a long time ago.
-** [kridle@xinet.com as of 1996-01-16.]
-** It does a binary search of the time_t space. Since time_t's are
-** just 32 bits, its a max of 32 iterations (even at 64 bits it
-** would still be very reasonable).
-*/
-
-#ifndef WRONG
-#define WRONG (-1)
-#endif /* !defined WRONG */
-
-/*
-** Simplified normalize logic courtesy Paul Eggert (eggert@twinsun.com).
-*/
-
-static int
-increment_overflow(int * number, int delta)
-{
- int number0;
-
- number0 = *number;
- *number += delta;
- return (*number < number0) != (delta < 0);
-}
-
-static int
-normalize_overflow(int * const tensptr, int * const unitsptr, const int base)
-{
- register int tensdelta;
-
- tensdelta = (*unitsptr >= 0) ?
- (*unitsptr / base) : (-1 - (-1 - *unitsptr) / base);
- *unitsptr -= tensdelta * base;
- return increment_overflow(tensptr, tensdelta);
-}
-
-static int
-tmcomp(const struct tm * const atmp, const struct tm * const btmp)
-{
- register int result;
-
- if ((result = (atmp->tm_year - btmp->tm_year)) == 0 &&
- (result = (atmp->tm_mon - btmp->tm_mon)) == 0 &&
- (result = (atmp->tm_mday - btmp->tm_mday)) == 0 &&
- (result = (atmp->tm_hour - btmp->tm_hour)) == 0 &&
- (result = (atmp->tm_min - btmp->tm_min)) == 0)
- result = atmp->tm_sec - btmp->tm_sec;
- return result;
-}
-
-static time_t
-time2sub(
- struct tm * const tmp,
- void (* const funcp)(const time_t*, long, struct tm*),
- const long offset,
- int * const okayp,
- const int do_norm_secs
- )
-{
- register const struct state * sp;
- register int dir;
- register int bits;
- register int i, j ;
- register int saved_seconds;
- time_t newt;
- time_t t;
- struct tm yourtm, mytm;
-
- *okayp = FALSE;
- yourtm = *tmp; // Create a copy of tmp
- if (do_norm_secs) {
- if (normalize_overflow(&yourtm.tm_min, &yourtm.tm_sec,
- SECSPERMIN))
- return WRONG;
- }
- if (normalize_overflow(&yourtm.tm_hour, &yourtm.tm_min, MINSPERHOUR))
- return WRONG;
- if (normalize_overflow(&yourtm.tm_mday, &yourtm.tm_hour, HOURSPERDAY))
- return WRONG;
- if (normalize_overflow(&yourtm.tm_year, &yourtm.tm_mon, MONSPERYEAR))
- return WRONG;
- /*
- ** Turn yourtm.tm_year into an actual year number for now.
- ** It is converted back to an offset from TM_YEAR_BASE later.
- */
- if (increment_overflow(&yourtm.tm_year, TM_YEAR_BASE))
- return WRONG;
- while (yourtm.tm_mday <= 0) {
- if (increment_overflow(&yourtm.tm_year, -1))
- return WRONG;
- i = yourtm.tm_year + (1 < yourtm.tm_mon);
- yourtm.tm_mday += year_lengths[isleap(i)];
- }
- while (yourtm.tm_mday > DAYSPERLYEAR) {
- i = yourtm.tm_year + (1 < yourtm.tm_mon);
- yourtm.tm_mday -= year_lengths[isleap(i)];
- if (increment_overflow(&yourtm.tm_year, 1))
- return WRONG;
- }
- for ( ; ; ) {
- i = mon_lengths[isleap(yourtm.tm_year)][yourtm.tm_mon];
- if (yourtm.tm_mday <= i)
- break;
- yourtm.tm_mday -= i;
- if (++yourtm.tm_mon >= MONSPERYEAR) {
- yourtm.tm_mon = 0;
- if (increment_overflow(&yourtm.tm_year, 1))
- return WRONG;
- }
- }
- if (increment_overflow(&yourtm.tm_year, -TM_YEAR_BASE))
- return WRONG;
- if (yourtm.tm_sec >= 0 && yourtm.tm_sec < SECSPERMIN)
- saved_seconds = 0;
- else if (yourtm.tm_year + TM_YEAR_BASE < EPOCH_YEAR) {
- /*
- ** We can't set tm_sec to 0, because that might push the
- ** time below the minimum representable time.
- ** Set tm_sec to 59 instead.
- ** This assumes that the minimum representable time is
- ** not in the same minute that a leap second was deleted from,
- ** which is a safer assumption than using 58 would be.
- */
- if (increment_overflow(&yourtm.tm_sec, 1 - SECSPERMIN))
- return WRONG;
- saved_seconds = yourtm.tm_sec;
- yourtm.tm_sec = SECSPERMIN - 1;
- } else {
- saved_seconds = yourtm.tm_sec;
- yourtm.tm_sec = 0;
- }
- /*
- ** Divide the search space in half
- ** (this works whether time_t is signed or unsigned).
- */
- bits = TYPE_BIT(time_t) - 1;
- /*
- ** Set t to the midpoint of our binary search.
- **
- ** If time_t is signed, then 0 is just above the median,
- ** assuming two's complement arithmetic.
- ** If time_t is unsigned, then (1 << bits) is just above the median.
- */
- t = TYPE_SIGNED(time_t) ? 0 : (((time_t) 1) << bits);
- for ( ; ; ) {
- (*funcp)(&t, offset, &mytm); // Convert t to broken-down time in mytm
- dir = tmcomp(&mytm, &yourtm); // Is mytm larger, equal, or less than yourtm?
- if (dir != 0) { // If mytm != yourtm...
- if (bits-- < 0) // If we have exhausted all the bits..
- return WRONG; // Return that we failed
- if (bits < 0) // If on the last bit...
- --t; /* may be needed if new t is minimal */
- else if (dir > 0) // else if mytm > yourtm...
- t -= ((time_t) 1) << bits; // subtract half the remaining time-space
- else t += ((time_t) 1) << bits; // otherwise add half the remaining time-space
- continue; // Repeat for the next half
- }
- if (yourtm.tm_isdst < 0 || mytm.tm_isdst == yourtm.tm_isdst)
- break;
- /*
- ** Right time, wrong type.
- ** Hunt for right time, right type.
- ** It's okay to guess wrong since the guess
- ** gets checked.
- */
- /*
- ** The (void *) casts are the benefit of SunOS 3.3 on Sun 2's.
- */
- sp = (const struct state *)
- (((void *) funcp == (void *) localsub) ?
- lclptr : gmtptr);
-#ifdef ALL_STATE
- if (sp == NULL)
- return WRONG;
-#endif /* defined ALL_STATE */
- for (i = sp->typecnt - 1; i >= 0; --i) {
- if (sp->ttis[i].tt_isdst != yourtm.tm_isdst)
- continue;
- for (j = sp->typecnt - 1; j >= 0; --j) {
- if (sp->ttis[j].tt_isdst == yourtm.tm_isdst)
- continue;
- newt = t + sp->ttis[j].tt_gmtoff -
- sp->ttis[i].tt_gmtoff;
- (*funcp)(&newt, offset, &mytm);
- if (tmcomp(&mytm, &yourtm) != 0)
- continue;
- if (mytm.tm_isdst != yourtm.tm_isdst)
- continue;
- /*
- ** We have a match.
- */
- t = newt;
- goto label;
- }
- }
- return WRONG;
- }
- label:
- newt = t + saved_seconds;
- if ((newt < t) != (saved_seconds < 0))
- return WRONG;
- t = newt;
- (*funcp)(&t, offset, tmp);
- *okayp = TRUE;
- return t;
-}
-
-time_t
-time2(struct tm * const tmp, void (* const funcp)(const time_t*, long, struct tm*),
- const long offset, int * const okayp)
-{
- time_t t;
-
- /*
- ** First try without normalization of seconds
- ** (in case tm_sec contains a value associated with a leap second).
- ** If that fails, try with normalization of seconds.
- */
- t = time2sub(tmp, funcp, offset, okayp, FALSE);
- return *okayp ? t : time2sub(tmp, funcp, offset, okayp, TRUE);
-}
-
-static time_t
-time1(
- struct tm * const tmp,
- void (* const funcp)(const time_t *, long, struct tm *),
- const long offset
- )
-{
- register time_t t;
- register const struct state * sp;
- register int samei, otheri;
- register int sameind, otherind;
- register int i;
- register int nseen;
- int seen[TZ_MAX_TYPES];
- int types[TZ_MAX_TYPES];
- int okay;
-
- if (tmp->tm_isdst > 1)
- tmp->tm_isdst = 1;
- t = time2(tmp, funcp, offset, &okay);
-#ifdef PCTS
- /*
- ** PCTS code courtesy Grant Sullivan (grant@osf.org).
- */
- if (okay)
- return t;
- if (tmp->tm_isdst < 0)
- tmp->tm_isdst = 0; /* reset to std and try again */
-#endif /* defined PCTS */
-#ifndef PCTS
- if (okay || tmp->tm_isdst < 0)
- return t;
-#endif /* !defined PCTS */
- /*
- ** We're supposed to assume that somebody took a time of one type
- ** and did some math on it that yielded a "struct tm" that's bad.
- ** We try to divine the type they started from and adjust to the
- ** type they need.
- */
- /*
- ** The (void *) casts are the benefit of SunOS 3.3 on Sun 2's.
- */
- sp = (const struct state *) (((void *) funcp == (void *) localsub) ?
- lclptr : gmtptr);
-#ifdef ALL_STATE
- if (sp == NULL)
- return WRONG;
-#endif /* defined ALL_STATE */
- for (i = 0; i < sp->typecnt; ++i)
- seen[i] = FALSE;
- nseen = 0;
- for (i = sp->timecnt - 1; i >= 0; --i)
- if (!seen[sp->types[i]]) {
- seen[sp->types[i]] = TRUE;
- types[nseen++] = sp->types[i];
- }
- for (sameind = 0; sameind < nseen; ++sameind) {
- samei = types[sameind];
- if (sp->ttis[samei].tt_isdst != tmp->tm_isdst)
- continue;
- for (otherind = 0; otherind < nseen; ++otherind) {
- otheri = types[otherind];
- if (sp->ttis[otheri].tt_isdst == tmp->tm_isdst)
- continue;
- tmp->tm_sec += (int)(sp->ttis[otheri].tt_gmtoff -
- sp->ttis[samei].tt_gmtoff);
- tmp->tm_isdst = !tmp->tm_isdst;
- t = time2(tmp, funcp, offset, &okay);
- if (okay)
- return t;
- tmp->tm_sec -= (int)(sp->ttis[otheri].tt_gmtoff -
- sp->ttis[samei].tt_gmtoff);
- tmp->tm_isdst = !tmp->tm_isdst;
- }
- }
- return WRONG;
-}
-
-/** The mktime function converts the broken-down time, expressed as local time,
- in the structure pointed to by timeptr into a calendar time value with the
- same encoding as that of the values returned by the time function. The
- original values of the tm_wday and tm_yday components of the structure are
- ignored, and the original values of the other components are not restricted
- to the ranges indicated above. Thus, a positive or zero value for tm_isdst
- causes the mktime function to presume initially that Daylight Saving Time,
- respectively, is or is not in effect for the specified time. A negative
- value causes it to attempt to determine whether Daylight Saving Time is in
- effect for the specified time. On successful completion, the values of the
- tm_wday and tm_yday components of the structure are set appropriately, and
- the other components are set to represent the specified calendar time, but
- with their values forced to the ranges indicated above; the final value of
- tm_mday is not set until tm_mon and tm_year are determined.
-
- @return The mktime function returns the specified calendar time encoded
- as a value of type time_t. If the calendar time cannot be
- represented, the function returns the value (time_t)(-1).
-**/
-time_t
-mktime(struct tm *timeptr)
-{
- /* From NetBSD */
- time_t result;
-
- rwlock_wrlock(&lcl_lock);
- tzset();
- result = time1(timeptr, &localsub, 0L);
- rwlock_unlock(&lcl_lock);
- return (result);
-}
-
-/** The time function determines the current calendar time. The encoding of
- the value is unspecified.
-
- @return The time function returns the implementation's best approximation
- to the current calendar time. The value (time_t)(-1) is returned
- if the calendar time is not available. If timer is not a null
- pointer, the return value is also assigned to the object it
- points to.
-**/
-time_t
-time(time_t *timer)
-{
- time_t CalTime;
- EFI_STATUS Status;
- EFI_TIME *ET;
- struct tm *BT;
-
- ET = &gMD->TimeBuffer;
- BT = &gMD->BDTime;
-
- // Get EFI Time
- Status = gRT->GetTime( ET, NULL);
-// Status = EfiGetTime( ET, NULL);
- EFIerrno = Status;
- if( Status != RETURN_SUCCESS) {
- return (time_t)-1;
- }
-
- // Convert EFI time to broken-down time.
- Efi2Tm( ET, BT);
-
- // Convert to time_t
- CalTime = mktime(&gMD->BDTime);
-
- if( timer != NULL) {
- *timer = CalTime;
- }
- return CalTime; // Return calendar time in microseconds
-}
-
-/** The clock function determines the processor time used.
-
- @return The clock function returns the implementation's best
- approximation to the processor time used by the program since the
- beginning of an implementation-defined era related only to the
- program invocation. To determine the time in seconds, the value
- returned by the clock function should be divided by the value of
- the macro CLOCKS_PER_SEC. If the processor time used is not
- available or its value cannot be represented, the function
- returns the value (clock_t)(-1).
-**/
-clock_t
-clock(void)
-{
- clock_t retval;
- time_t temp;
-
- temp = time(NULL);
- retval = ((clock_t)((UINT32)temp)) - gMD->AppStartTime;
- return retval;
-}
-
-/* ################# Time Conversion Functions ########################## */
-/*
- Except for the strftime function, these functions each return a pointer to
- one of two types of static objects: a broken-down time structure or an
- array of char. Execution of any of the functions that return a pointer to
- one of these object types may overwrite the information in any object of
- the same type pointed to by the value returned from any previous call to
- any of them. The implementation shall behave as if no other library
- functions call these functions.
-*/
-
-/** The asctime function converts the broken-down time in the structure pointed
- to by timeptr into a string in the form
- Sun Sep 16 01:03:52 1973\n\0
- using the equivalent of the following algorithm.
-
- char *asctime(const struct tm *timeptr)
- {
- static const char wday_name[7][3] = {
- "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
- };
- static const char mon_name[12][3] = {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
- };
- static char result[26];
- sprintf(result, "%.3s %.3s%3d %.2d:%.2d:%.2d %d\n",
- wday_name[timeptr->tm_wday],
- mon_name[timeptr->tm_mon],
- timeptr->tm_mday, timeptr->tm_hour,
- timeptr->tm_min, timeptr->tm_sec,
- 1900 + timeptr->tm_year);
- return result;
- }
- @return The asctime function returns a pointer to the string.
-**/
-char *
-asctime(const struct tm *timeptr)
-{
- register const char * wn;
- register const char * mn;
-
- if (timeptr->tm_wday < 0 || timeptr->tm_wday >= DAYSPERWEEK)
- wn = "???";
- else wn = wday_name[timeptr->tm_wday];
- if (timeptr->tm_mon < 0 || timeptr->tm_mon >= MONSPERYEAR)
- mn = "???";
- else mn = mon_name[timeptr->tm_mon];
- /*
- ** The X3J11-suggested format is
- ** "%.3s %.3s%3d %02.2d:%02.2d:%02.2d %d\n"
- ** Since the .2 in 02.2d is ignored, we drop it.
- */
- (void)snprintf(gMD->ASasctime,
- sizeof (char[ASCTIME_BUFLEN]),
- "%.3s %.3s%3d %02d:%02d:%02d %d\r\n", // explicit CRLF for EFI
- wn, mn,
- timeptr->tm_mday, timeptr->tm_hour,
- timeptr->tm_min, timeptr->tm_sec,
- TM_YEAR_BASE + timeptr->tm_year);
- return gMD->ASasctime;
-}
-
-/**
-**/
-char *
-ctime(const time_t *timer)
-{
- return asctime(localtime(timer));
-}
-
-/*
-** gmtsub is to gmtime as localsub is to localtime.
-*/
-void
-gmtsub(
- const time_t * const timep,
- const long offset,
- struct tm * const tmp
- )
-{
-#ifdef _REENTRANT
- static mutex_t gmt_mutex = MUTEX_INITIALIZER;
-#endif
-
- mutex_lock(&gmt_mutex);
- if (!gmt_is_set) {
- gmt_is_set = TRUE;
-#ifdef ALL_STATE
- gmtptr = (struct state *) malloc(sizeof *gmtptr);
- if (gmtptr != NULL)
-#endif /* defined ALL_STATE */
- gmtload(gmtptr);
- }
- mutex_unlock(&gmt_mutex);
- timesub(timep, offset, gmtptr, tmp);
-#ifdef TM_ZONE
- /*
- ** Could get fancy here and deliver something such as
- ** "UTC+xxxx" or "UTC-xxxx" if offset is non-zero,
- ** but this is no time for a treasure hunt.
- */
- if (offset != 0)
- tmp->TM_ZONE = (__aconst char *)__UNCONST(wildabbr);
- else {
-#ifdef ALL_STATE
- if (gmtptr == NULL)
- tmp->TM_ZONE = (__aconst char *)__UNCONST(gmt);
- else tmp->TM_ZONE = gmtptr->chars;
-#endif /* defined ALL_STATE */
-#ifndef ALL_STATE
- tmp->TM_ZONE = gmtptr->chars;
-#endif /* State Farm */
- }
-#endif /* defined TM_ZONE */
-}
-
-/**
-**/
-struct tm *
-gmtime(const time_t *timer)
-{
- gmtsub(timer, 0L, &gMD->BDTime);
- return &gMD->BDTime;
-}
-
-static void
-localsub(const time_t * const timep, const long offset, struct tm * const tmp)
-{
- register struct state * sp;
- register const struct ttinfo * ttisp;
- register int i;
- const time_t t = *timep;
-
- sp = lclptr;
-#ifdef ALL_STATE
- if (sp == NULL) {
- gmtsub(timep, offset, tmp);
- return;
- }
-#endif /* defined ALL_STATE */
- if (sp->timecnt == 0 || t < sp->ats[0]) {
- i = 0;
- while (sp->ttis[i].tt_isdst)
- if (++i >= sp->typecnt) {
- i = 0;
- break;
- }
- } else {
- for (i = 1; i < sp->timecnt; ++i)
- if (t < sp->ats[i])
- break;
- i = sp->types[i - 1];
- }
- ttisp = &sp->ttis[i];
- /*
- ** To get (wrong) behavior that's compatible with System V Release 2.0
- ** you'd replace the statement below with
- ** t += ttisp->tt_gmtoff;
- ** timesub(&t, 0L, sp, tmp);
- */
- timesub(&t, ttisp->tt_gmtoff, sp, tmp);
- tmp->tm_isdst = ttisp->tt_isdst;
- tzname[tmp->tm_isdst] = &sp->chars[ttisp->tt_abbrind];
-#ifdef TM_ZONE
- tmp->TM_ZONE = &sp->chars[ttisp->tt_abbrind];
-#endif /* defined TM_ZONE */
-}
-
-/**
-**/
-struct tm *
-localtime(const time_t *timer)
-{
- tzset();
- localsub(timer, 0L, &gMD->BDTime);
- return &gMD->BDTime;
-}
diff --git a/StdLib/LibC/Time/Time.inf b/StdLib/LibC/Time/Time.inf
deleted file mode 100644
index 84a47048e4..0000000000
--- a/StdLib/LibC/Time/Time.inf
+++ /dev/null
@@ -1,56 +0,0 @@
-## @file
-# Standard C library: Time implementations.
-#
-# Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LibTime
- FILE_GUID = c5847038-ff75-4074-9e4c-c36a2eb398a5
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibTime
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- Time.c
- ZoneProc.c
- strftime.c
- strptime.c
- TimeEfi.c
- gettimeofday.c
- timegm.c
- itimer.c
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
- ShellPkg/ShellPkg.dec
-
-[LibraryClasses]
- UefiLib
- BaseLib
- UefiRuntimeServicesTableLib
-
-################################################################
-#
-# The Build Options, below, are only used when building the C library.
-# DO NOT use them when building your application!
-# Nasty things could happen if you do.
-#
-[BuildOptions]
- GCC:*_*_*_CC_FLAGS = -fno-strict-overflow -fno-builtin-strftime
diff --git a/StdLib/LibC/Time/TimeEfi.c b/StdLib/LibC/Time/TimeEfi.c
deleted file mode 100644
index 50f2deec05..0000000000
--- a/StdLib/LibC/Time/TimeEfi.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/** @file
- Transformations between the EFI_TIME structure and struct tm or time_t.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#include <Uefi.h>
-
-#include <LibConfig.h>
-
-#include <time.h>
-#include "tzfile.h"
-#include <MainData.h>
-
-/** Convert an EFI_TIME structure into a C Standard tm structure.
-
- @param[in] ET Pointer to the EFI_TIME structure to convert.
- @param[out] BT Pointer to the tm structure to receive the converted time.
-*/
-void
-Efi2Tm(
- IN EFI_TIME *ET,
- OUT struct tm *BT
- )
-{
- // Convert EFI time to broken-down time.
- BT->tm_year = ET->Year - TM_YEAR_BASE;
- BT->tm_mon = ET->Month - 1; // BD time is zero based, EFI is 1 based
- BT->tm_mday = ET->Day;
- BT->tm_hour = ET->Hour;
- BT->tm_min = ET->Minute;
- BT->tm_sec = ET->Second;
- BT->tm_isdst = -1;
- BT->tm_zoneoff = ET->TimeZone;
- BT->tm_daylight = ET->Daylight;
- BT->tm_Nano = ET->Nanosecond;
-}
-
-/** Convert an EFI_TIME structure into a time_t value.
-
- @param[in] EfiBDtime Pointer to the EFI_TIME structure to convert.
-
- @return The EFI_TIME converted into a time_t value.
-*/
-time_t
-Efi2Time(
- IN EFI_TIME *EfiBDtime
- )
-{
- Efi2Tm( EfiBDtime, &gMD->BDTime);
-
- return mktime( &gMD->BDTime);
-}
-
-/** Convert a C Standard tm structure into an EFI_TIME structure.
-
- @param[in] BT Pointer to the tm structure to convert.
- @param[out] ET Pointer to an EFI_TIME structure to receive the converted time.
-*/
-void
-Tm2Efi(
- IN struct tm *BT,
- OUT EFI_TIME *ET
- )
-{
- ET->Year = (UINT16)BT->tm_year + TM_YEAR_BASE;
- ET->Month = (UINT8)BT->tm_mon + 1;
- ET->Day = (UINT8)BT->tm_mday;
- ET->Hour = (UINT8)BT->tm_hour;
- ET->Minute = (UINT8)BT->tm_min;
- ET->Second = (UINT8)BT->tm_sec;
- ET->Nanosecond = (UINT32)BT->tm_Nano;
- ET->TimeZone = (INT16)BT->tm_zoneoff;
- ET->Daylight = (UINT8)BT->tm_daylight;
-}
-
-/** Convert a time_t value into an EFI_TIME structure.
-
- @param[in] CalTime Calendar time as a time_t value.
-
- @return Returns a newly malloced EFI_TIME structure containing
- the converted calendar time.
-
- @post It is the responsibility of the caller to free the
- returned structure before the application exits.
-*/
-EFI_TIME*
-Time2Efi(
- IN time_t CalTime
- )
-{
- struct tm *IT;
- EFI_TIME *ET = NULL;
-
- IT = gmtime(&CalTime);
- if(IT != NULL) {
- ET = malloc(sizeof(EFI_TIME));
- if(ET != NULL) {
- Tm2Efi(IT, ET);
- }
- }
- return ET;
-}
diff --git a/StdLib/LibC/Time/TimeVals.h b/StdLib/LibC/Time/TimeVals.h
deleted file mode 100644
index f84f4f612a..0000000000
--- a/StdLib/LibC/Time/TimeVals.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/** @file
- Definitions private to the Implementation of <time.h>.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Portions derived from the NIH time zone package files,
- which contain the following notice:
-
- This file is in the public domain, so clarified as of
- 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
-**/
-#ifndef _TIMEVAL_H
-#define _TIMEVAL_H
-
-extern struct state * lclptr;
-extern struct state * gmtptr;
-extern char * tzname[2];
-extern const char gmt[4];
-extern const char wildabbr[9];
-extern const int year_lengths[2];
-extern const int mon_lengths[2][MONSPERYEAR];
-extern long int timezone;
-extern int daylight;
-
-#define EFI_UNSPECIFIED_TIMEZONE 0x07FF
-
-/*
-** The DST rules to use if TZ has no rules and we can't load TZDEFRULES.
-** We default to US rules as of 1999-08-17.
-** POSIX 1003.1 section 8.1.1 says that the default DST rules are
-** implementation dependent; for historical reasons, US rules are a
-** common default.
-*/
-#ifndef TZDEFRULESTRING
-#define TZDEFRULESTRING ",M4.1.0,M10.5.0"
-#endif
-
-// Facilities for external time-zone definition files do not currently exist
-#define NO_ZONEINFO_FILES
-
-#define EPOCH_DAY 5
-#define DAY_TO_uSEC 86400000000
-
-/* Rule type values for the r_type member of a rule structure */
-#define JULIAN_DAY 0 /* Jn - Julian day */
-#define DAY_OF_YEAR 1 /* n - day of year */
-#define MONTH_NTH_DAY_OF_WEEK 2 /* Mm.n.d - month, week, day of week */
-
-#ifdef TZNAME_MAX
- #define MY_TZNAME_MAX TZNAME_MAX
-#endif /* defined TZNAME_MAX */
-
-#ifndef TZNAME_MAX
- #define MY_TZNAME_MAX 255
-#endif /* !defined TZNAME_MAX */
-
-/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */
-#define is_digit(c) ((unsigned)(c) - '0' <= 9)
-
-#define LEAPS_THRU_END_OF(y) ((y) / 4 - (y) / 100 + (y) / 400)
-
-#define BIGGEST(a, b) (((a) > (b)) ? (a) : (b))
-
-#ifndef INITIALIZE
-#define INITIALIZE(x) ((x) = 0)
-#endif /* !defined INITIALIZE */
-
-struct ttinfo { /* time type information */
- LONG32 tt_gmtoff; /* UTC offset in seconds */
- int tt_isdst; /* used to set tm_isdst */
- int tt_abbrind; /* abbreviation list index */
- int tt_ttisstd; /* TRUE if transition is std time */
- int tt_ttisgmt; /* TRUE if transition is UTC */
-};
-
-struct lsinfo { /* leap second information */
- time_t ls_trans; /* transition time */
- LONG32 ls_corr; /* correction to apply */
-};
-
-struct state {
- int leapcnt;
- int timecnt;
- int typecnt;
- int charcnt;
- time_t ats[TZ_MAX_TIMES];
- unsigned char types[TZ_MAX_TIMES];
- struct ttinfo ttis[TZ_MAX_TYPES];
- char chars[BIGGEST(BIGGEST(TZ_MAX_CHARS + 1, sizeof gmt), (2 * (MY_TZNAME_MAX + 1)))];
- struct lsinfo lsis[TZ_MAX_LEAPS];
-};
-
-struct rule {
- int r_type; /* type of rule--see below */
- int r_day; /* day number of rule */
- int r_week; /* week number of rule */
- int r_mon; /* month number of rule */
- LONG32 r_time; /* transition time of rule */
-};
-
-#define JULIAN_DAY 0 /* Jn - Julian day */
-#define DAY_OF_YEAR 1 /* n - day of year */
-#define MONTH_NTH_DAY_OF_WEEK 2 /* Mm.n.d - month, week, day of week */
-
-__BEGIN_DECLS
-extern void gmtload(struct state * const sp);
-extern void tzset(void);
-__END_DECLS
-
-#endif /* _TIMEVAL_H */
diff --git a/StdLib/LibC/Time/ZoneProc.c b/StdLib/LibC/Time/ZoneProc.c
deleted file mode 100644
index 309d7b3527..0000000000
--- a/StdLib/LibC/Time/ZoneProc.c
+++ /dev/null
@@ -1,828 +0,0 @@
-/** @file
- Time Zone processing.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Portions derived from the NIH time zone package file, localtime.c,
- which contains the following notice:
-
- This file is in the public domain, so clarified as of
- 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
-
- NetBSD: localtime.c,v 1.39 2006/03/22 14:01:30 christos Exp
-**/
-#include <LibConfig.h>
-
-#include <ctype.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include "tzfile.h"
-#include "TimeVals.h"
-
-#ifndef WILDABBR
-/*
-** Someone might make incorrect use of a time zone abbreviation:
-** 1. They might reference tzname[0] before calling tzset (explicitly
-** or implicitly).
-** 2. They might reference tzname[1] before calling tzset (explicitly
-** or implicitly).
-** 3. They might reference tzname[1] after setting to a time zone
-** in which Daylight Saving Time is never observed.
-** 4. They might reference tzname[0] after setting to a time zone
-** in which Standard Time is never observed.
-** 5. They might reference tm.TM_ZONE after calling offtime.
-** What's best to do in the above cases is open to debate;
-** for now, we just set things up so that in any of the five cases
-** WILDABBR is used. Another possibility: initialize tzname[0] to the
-** string "tzname[0] used before set", and similarly for the other cases.
-** And another: initialize tzname[0] to "ERA", with an explanation in the
-** manual page of what this "time zone abbreviation" means (doing this so
-** that tzname[0] has the "normal" length of three characters).
-*/
-#define WILDABBR " "
-#endif /* !defined WILDABBR */
-
-const char wildabbr[9] = "WILDABBR";
-const char gmt[4] = "GMT";
-
-struct state * lclptr = NULL;
-struct state * gmtptr = NULL;
-
-#ifndef TZ_STRLEN_MAX
-#define TZ_STRLEN_MAX 255
-#endif /* !defined TZ_STRLEN_MAX */
-
-static char lcl_TZname[TZ_STRLEN_MAX + 1];
-static int lcl_is_set = 0;
-//static int gmt_is_set = 0;
-
-char * tzname[2] = {
- (char *)__UNCONST(wildabbr),
- (char *)__UNCONST(wildabbr)
-};
-
-long int timezone = 0;
-int daylight = 0;
-
-#ifndef NO_ZONEINFO_FILES
-/** Get first 4 characters of codep as a 32-bit integer.
-
- The first character of codep becomes the MSB of the resultant integer.
-**/
-static INT32
-detzcode(const char * const codep)
-{
- register INT32 result;
-
- /*
- ** The first character must be sign extended on systems with >32bit
- ** longs. This was solved differently in the master tzcode sources
- ** (the fix first appeared in tzcode95c.tar.gz). But I believe
- ** that this implementation is superior.
- */
-#define SIGN_EXTEND_CHAR(x) ((signed char) x)
-
- result = (SIGN_EXTEND_CHAR(codep[0]) << 24) \
- | (codep[1] & 0xff) << 16 \
- | (codep[2] & 0xff) << 8
- | (codep[3] & 0xff);
- return result;
-}
-#endif /* NO_ZONEINFO_FILES */
-
-static void
-settzname (void)
-{
- register struct state * const sp = lclptr;
- register int i;
-
- tzname[0] = (char *)__UNCONST(wildabbr);
- tzname[1] = (char *)__UNCONST(wildabbr);
- daylight = 0;
- timezone = 0;
- if (sp == NULL) {
- tzname[0] = tzname[1] = (char *)__UNCONST(gmt);
- return;
- }
- for (i = 0; i < sp->typecnt; ++i) {
- register const struct ttinfo * const ttisp = &sp->ttis[i];
-
- tzname[ttisp->tt_isdst] =
- &sp->chars[ttisp->tt_abbrind];
- if (ttisp->tt_isdst)
- daylight = 1;
- if (i == 0 || !ttisp->tt_isdst)
- timezone = -(ttisp->tt_gmtoff);
- }
- /*
- ** And to get the latest zone names into tzname. . .
- */
- for (i = 0; i < sp->timecnt; ++i) {
- register const struct ttinfo * const ttisp =
- &sp->ttis[ sp->types[i] ];
-
- tzname[ttisp->tt_isdst] =
- &sp->chars[ttisp->tt_abbrind];
- }
-}
-
-/*
-** Given a pointer into a time zone string, scan until a character that is not
-** a valid character in a zone name is found. Return a pointer to that
-** character.
-*/
-static const char *
-getzname(register const char *strp)
-{
- register char c;
-
- while ((c = *strp) != '\0' && !is_digit(c) && c != ',' && c != '-' &&
- c != '+')
- ++strp;
- return strp;
-}
-
-/*
-** Given a pointer into a time zone string, extract a number from that string.
-** Check that the number is within a specified range; if it is not, return
-** NULL.
-** Otherwise, return a pointer to the first character not part of the number.
-*/
-static const char *
-getnum(
- register const char *strp,
- int * const nump,
- const int min,
- const int max
- )
-{
- register char c;
- register int num;
-
- if (strp == NULL || !is_digit(c = *strp))
- return NULL;
- num = 0;
- do {
- num = num * 10 + (c - '0');
- if (num > max)
- return NULL; /* illegal value */
- c = *++strp;
- } while (is_digit(c));
- if (num < min)
- return NULL; /* illegal value */
- *nump = num;
- return strp;
-}
-
-/*
-** Given a pointer into a time zone string, extract a number of seconds,
-** in hh[:mm[:ss]] form, from the string.
-** If any error occurs, return NULL.
-** Otherwise, return a pointer to the first character not part of the number
-** of seconds.
-*/
-static const char *
-getsecs(
- register const char *strp,
- LONG32 * const secsp
- )
-{
- int num;
-
- /*
- ** `HOURSPERDAY * DAYSPERWEEK - 1' allows quasi-Posix rules like
- ** "M10.4.6/26", which does not conform to Posix,
- ** but which specifies the equivalent of
- ** ``02:00 on the first Sunday on or after 23 Oct''.
- */
- strp = getnum(strp, &num, 0, HOURSPERDAY * DAYSPERWEEK - 1);
- if (strp == NULL)
- return NULL;
- *secsp = (long)(num * SECSPERHOUR);
- if (*strp == ':') {
- ++strp;
- strp = getnum(strp, &num, 0, MINSPERHOUR - 1);
- if (strp == NULL)
- return NULL;
- *secsp += num * SECSPERMIN;
- if (*strp == ':') {
- ++strp;
- /* `SECSPERMIN' allows for leap seconds. */
- strp = getnum(strp, &num, 0, SECSPERMIN);
- if (strp == NULL)
- return NULL;
- *secsp += num;
- }
- }
- return strp;
-}
-
-/*
-** Given a pointer into a time zone string, extract an offset, in
-** [+-]hh[:mm[:ss]] form, from the string.
-** If any error occurs, return NULL.
-** Otherwise, return a pointer to the first character not part of the time.
-*/
-static const char *
-getoffset(
- register const char *strp,
- LONG32 * const offsetp
- )
-{
- register int neg = 0;
-
- if (*strp == '-') {
- neg = 1;
- ++strp;
- } else if (*strp == '+')
- ++strp;
- strp = getsecs(strp, offsetp);
- if (strp == NULL)
- return NULL; /* illegal time */
- if (neg)
- *offsetp = -*offsetp;
- return strp;
-}
-
-/*
-** Given a pointer into a time zone string, extract a rule in the form
-** date[/time]. See POSIX section 8 for the format of "date" and "time".
-** If a valid rule is not found, return NULL.
-** Otherwise, return a pointer to the first character not part of the rule.
-*/
-static const char *
-getrule(
- const char *strp,
- register struct rule * const rulep
- )
-{
- if (*strp == 'J') {
- /*
- ** Julian day.
- */
- rulep->r_type = JULIAN_DAY;
- ++strp;
- strp = getnum(strp, &rulep->r_day, 1, DAYSPERNYEAR);
- } else if (*strp == 'M') {
- /*
- ** Month, week, day.
- */
- rulep->r_type = MONTH_NTH_DAY_OF_WEEK;
- ++strp;
- strp = getnum(strp, &rulep->r_mon, 1, MONSPERYEAR);
- if (strp == NULL)
- return NULL;
- if (*strp++ != '.')
- return NULL;
- strp = getnum(strp, &rulep->r_week, 1, 5);
- if (strp == NULL)
- return NULL;
- if (*strp++ != '.')
- return NULL;
- strp = getnum(strp, &rulep->r_day, 0, DAYSPERWEEK - 1);
- } else if (is_digit(*strp)) {
- /*
- ** Day of year.
- */
- rulep->r_type = DAY_OF_YEAR;
- strp = getnum(strp, &rulep->r_day, 0, DAYSPERLYEAR - 1);
- } else return NULL; /* invalid format */
- if (strp == NULL)
- return NULL;
- if (*strp == '/') {
- /*
- ** Time specified.
- */
- ++strp;
- strp = getsecs(strp, &rulep->r_time);
- } else rulep->r_time = 2 * SECSPERHOUR; /* default = 2:00:00 */
- return strp;
-}
-
-static int
-tzload(register const char *name, register struct state * const sp)
-{
-#ifndef NO_ZONEINFO_FILES
- register const char * p;
- register int i;
- register int fid;
-
- if (name == NULL && (name = TZDEFAULT) == NULL)
- return -1;
-
- {
- register int doaccess;
- /*
- ** Section 4.9.1 of the C standard says that
- ** "FILENAME_MAX expands to an integral constant expression
- ** that is the size needed for an array of char large enough
- ** to hold the longest file name string that the implementation
- ** guarantees can be opened."
- */
- char fullname[FILENAME_MAX + 1];
-
- if (name[0] == ':')
- ++name;
- doaccess = name[0] == '/';
- if (!doaccess) {
- if ((p = TZDIR) == NULL)
- return -1;
- if ((strlen(p) + strlen(name) + 1) >= sizeof fullname)
- return -1;
- (void) strcpy(fullname, p); /* XXX strcpy is safe */
- (void) strcat(fullname, "/"); /* XXX strcat is safe */
- (void) strcat(fullname, name); /* XXX strcat is safe */
- /*
- ** Set doaccess if '.' (as in "../") shows up in name.
- */
- if (strchr(name, '.') != NULL)
- doaccess = TRUE;
- name = fullname;
- }
- if (doaccess && access(name, R_OK) != 0)
- return -1;
- /*
- * XXX potential security problem here if user of a set-id
- * program has set TZ (which is passed in as name) here,
- * and uses a race condition trick to defeat the access(2)
- * above.
- */
- if ((fid = open(name, OPEN_MODE)) == -1)
- return -1;
- }
- {
- struct tzhead * tzhp;
- union {
- struct tzhead tzhead;
- char buf[sizeof *sp + sizeof *tzhp];
- } u;
- int ttisstdcnt;
- int ttisgmtcnt;
-
- i = read(fid, u.buf, sizeof u.buf);
- if (close(fid) != 0)
- return -1;
- ttisstdcnt = (int) detzcode(u.tzhead.tzh_ttisstdcnt);
- ttisgmtcnt = (int) detzcode(u.tzhead.tzh_ttisgmtcnt);
- sp->leapcnt = (int) detzcode(u.tzhead.tzh_leapcnt);
- sp->timecnt = (int) detzcode(u.tzhead.tzh_timecnt);
- sp->typecnt = (int) detzcode(u.tzhead.tzh_typecnt);
- sp->charcnt = (int) detzcode(u.tzhead.tzh_charcnt);
- p = u.tzhead.tzh_charcnt + sizeof u.tzhead.tzh_charcnt;
- if (sp->leapcnt < 0 || sp->leapcnt > TZ_MAX_LEAPS ||
- sp->typecnt <= 0 || sp->typecnt > TZ_MAX_TYPES ||
- sp->timecnt < 0 || sp->timecnt > TZ_MAX_TIMES ||
- sp->charcnt < 0 || sp->charcnt > TZ_MAX_CHARS ||
- (ttisstdcnt != sp->typecnt && ttisstdcnt != 0) ||
- (ttisgmtcnt != sp->typecnt && ttisgmtcnt != 0))
- return -1;
- if (i - (p - u.buf) < sp->timecnt * 4 + /* ats */
- sp->timecnt + /* types */
- sp->typecnt * (4 + 2) + /* ttinfos */
- sp->charcnt + /* chars */
- sp->leapcnt * (4 + 4) + /* lsinfos */
- ttisstdcnt + /* ttisstds */
- ttisgmtcnt) /* ttisgmts */
- return -1;
- for (i = 0; i < sp->timecnt; ++i) {
- sp->ats[i] = detzcode(p);
- p += 4;
- }
- for (i = 0; i < sp->timecnt; ++i) {
- sp->types[i] = (unsigned char) *p++;
- if (sp->types[i] >= sp->typecnt)
- return -1;
- }
- for (i = 0; i < sp->typecnt; ++i) {
- register struct ttinfo * ttisp;
-
- ttisp = &sp->ttis[i];
- ttisp->tt_gmtoff = detzcode(p);
- p += 4;
- ttisp->tt_isdst = (unsigned char) *p++;
- if (ttisp->tt_isdst != 0 && ttisp->tt_isdst != 1)
- return -1;
- ttisp->tt_abbrind = (unsigned char) *p++;
- if (ttisp->tt_abbrind < 0 ||
- ttisp->tt_abbrind > sp->charcnt)
- return -1;
- }
- for (i = 0; i < sp->charcnt; ++i)
- sp->chars[i] = *p++;
- sp->chars[i] = '\0'; /* ensure '\0' at end */
- for (i = 0; i < sp->leapcnt; ++i) {
- register struct lsinfo * lsisp;
-
- lsisp = &sp->lsis[i];
- lsisp->ls_trans = detzcode(p);
- p += 4;
- lsisp->ls_corr = detzcode(p);
- p += 4;
- }
- for (i = 0; i < sp->typecnt; ++i) {
- register struct ttinfo * ttisp;
-
- ttisp = &sp->ttis[i];
- if (ttisstdcnt == 0)
- ttisp->tt_ttisstd = FALSE;
- else {
- ttisp->tt_ttisstd = *p++;
- if (ttisp->tt_ttisstd != TRUE &&
- ttisp->tt_ttisstd != FALSE)
- return -1;
- }
- }
- for (i = 0; i < sp->typecnt; ++i) {
- register struct ttinfo * ttisp;
-
- ttisp = &sp->ttis[i];
- if (ttisgmtcnt == 0)
- ttisp->tt_ttisgmt = FALSE;
- else {
- ttisp->tt_ttisgmt = *p++;
- if (ttisp->tt_ttisgmt != TRUE &&
- ttisp->tt_ttisgmt != FALSE)
- return -1;
- }
- }
- }
- return 0;
-#else /* ! NO_ZONEINFO_FILES */
- return -1;
-#endif
-}
-
-/*
-** Given the Epoch-relative time of January 1, 00:00:00 UTC, in a year, the
-** year, a rule, and the offset from UTC at the time that rule takes effect,
-** calculate the Epoch-relative time that rule takes effect.
-*/
-static
-time_t
-transtime(
- const time_t janfirst,
- const int year,
- const struct rule * const rulep,
- const LONG32 offset
- )
-{
- register int leapyear;
- register time_t value;
- register int i;
- int d, m1, yy0, yy1, yy2, dow;
-
- INITIALIZE(value);
- leapyear = isleap(year);
- switch (rulep->r_type) {
-
- case JULIAN_DAY:
- /*
- ** Jn - Julian day, 1 == January 1, 60 == March 1 even in leap
- ** years.
- ** In non-leap years, or if the day number is 59 or less, just
- ** add SECSPERDAY times the day number-1 to the time of
- ** January 1, midnight, to get the day.
- */
- value = janfirst + (rulep->r_day - 1) * SECSPERDAY;
- if (leapyear && rulep->r_day >= 60)
- value += SECSPERDAY;
- break;
-
- case DAY_OF_YEAR:
- /*
- ** n - day of year.
- ** Just add SECSPERDAY times the day number to the time of
- ** January 1, midnight, to get the day.
- */
- value = janfirst + rulep->r_day * SECSPERDAY;
- break;
-
- case MONTH_NTH_DAY_OF_WEEK:
- /*
- ** Mm.n.d - nth "dth day" of month m.
- */
- value = janfirst;
- for (i = 0; i < rulep->r_mon - 1; ++i)
- value += mon_lengths[leapyear][i] * SECSPERDAY;
-
- /*
- ** Use Zeller's Congruence to get day-of-week of first day of
- ** month.
- */
- m1 = (rulep->r_mon + 9) % 12 + 1;
- yy0 = (rulep->r_mon <= 2) ? (year - 1) : year;
- yy1 = yy0 / 100;
- yy2 = yy0 % 100;
- dow = ((26 * m1 - 2) / 10 +
- 1 + yy2 + yy2 / 4 + yy1 / 4 - 2 * yy1) % 7;
- if (dow < 0)
- dow += DAYSPERWEEK;
-
- /*
- ** "dow" is the day-of-week of the first day of the month. Get
- ** the day-of-month (zero-origin) of the first "dow" day of the
- ** month.
- */
- d = rulep->r_day - dow;
- if (d < 0)
- d += DAYSPERWEEK;
- for (i = 1; i < rulep->r_week; ++i) {
- if (d + DAYSPERWEEK >=
- mon_lengths[leapyear][rulep->r_mon - 1])
- break;
- d += DAYSPERWEEK;
- }
-
- /*
- ** "d" is the day-of-month (zero-origin) of the day we want.
- */
- value += d * SECSPERDAY;
- break;
- }
-
- /*
- ** "value" is the Epoch-relative time of 00:00:00 UTC on the day in
- ** question. To get the Epoch-relative time of the specified local
- ** time on that day, add the transition time and the current offset
- ** from UTC.
- */
- return value + rulep->r_time + offset;
-}
-
-/*
-** Given a POSIX section 8-style TZ string, fill in the rule tables as
-** appropriate.
-*/
-static int
-tzparse(
- const char * name,
- struct state * const sp,
- const int lastditch
- )
-{
- const char *stdname;
- const char *dstname;
- size_t stdlen;
- size_t dstlen;
- LONG32 stdoffset;
- LONG32 dstoffset;
- time_t *atp;
- unsigned char *typep;
- char *cp;
- int load_result;
-
- dstname = NULL;
- stdname = name;
- if (lastditch) {
- stdlen = strlen(name); /* length of standard zone name */
- name += stdlen;
- if (stdlen >= sizeof sp->chars)
- stdlen = (sizeof sp->chars) - 1;
- stdoffset = 0;
- } else {
- name = getzname(name);
- stdlen = name - stdname;
- if (stdlen < 3)
- return -1;
- if (*name == '\0')
- return -1;
- name = getoffset(name, &stdoffset);
- if (name == NULL)
- return -1;
- }
- load_result = tzload(TZDEFRULES, sp);
- if (load_result != 0)
- sp->leapcnt = 0; /* so, we're off a little */
- if (*name != '\0') {
- dstname = name;
- name = getzname(name);
- dstlen = name - dstname; /* length of DST zone name */
- if (dstlen < 3)
- return -1;
- if (*name != '\0' && *name != ',' && *name != ';') {
- name = getoffset(name, &dstoffset);
- if (name == NULL)
- return -1;
- } else dstoffset = stdoffset - SECSPERHOUR;
- if (*name == '\0' && load_result != 0)
- name = TZDEFRULESTRING;
- if (*name == ',' || *name == ';') {
- struct rule start;
- struct rule end;
- register int year;
- register time_t janfirst;
- time_t starttime;
- time_t endtime;
-
- ++name;
- if ((name = getrule(name, &start)) == NULL)
- return -1;
- if (*name++ != ',')
- return -1;
- if ((name = getrule(name, &end)) == NULL)
- return -1;
- if (*name != '\0')
- return -1;
- sp->typecnt = 2; /* standard time and DST */
- /*
- ** Two transitions per year, from EPOCH_YEAR to 2037.
- */
- sp->timecnt = 2 * (2037 - EPOCH_YEAR + 1);
- if (sp->timecnt > TZ_MAX_TIMES)
- return -1;
- sp->ttis[0].tt_gmtoff = -dstoffset;
- sp->ttis[0].tt_isdst = 1;
- sp->ttis[0].tt_abbrind = (int)stdlen + 1;
- sp->ttis[1].tt_gmtoff = -stdoffset;
- sp->ttis[1].tt_isdst = 0;
- sp->ttis[1].tt_abbrind = 0;
- atp = sp->ats;
- typep = sp->types;
- janfirst = 0;
- for (year = EPOCH_YEAR; year <= 2037; ++year) {
- starttime = transtime(janfirst, year, &start,
- stdoffset);
- endtime = transtime(janfirst, year, &end,
- dstoffset);
- if (starttime > endtime) {
- *atp++ = endtime;
- *typep++ = 1; /* DST ends */
- *atp++ = starttime;
- *typep++ = 0; /* DST begins */
- } else {
- *atp++ = starttime;
- *typep++ = 0; /* DST begins */
- *atp++ = endtime;
- *typep++ = 1; /* DST ends */
- }
- janfirst += year_lengths[isleap(year)] *
- SECSPERDAY;
- }
- } else {
- register LONG32 theirstdoffset;
- register LONG32 theiroffset;
- register int i;
- register int j;
-
- if (*name != '\0')
- return -1;
- /*
- ** Initial values of theirstdoffset
- */
- theirstdoffset = 0;
- for (i = 0; i < sp->timecnt; ++i) {
- j = sp->types[i];
- if (!sp->ttis[j].tt_isdst) {
- theirstdoffset =
- -sp->ttis[j].tt_gmtoff;
- break;
- }
- }
- /*
- ** Initially we're assumed to be in standard time.
- */
- theiroffset = theirstdoffset;
- /*
- ** Now juggle transition times and types
- ** tracking offsets as you do.
- */
- for (i = 0; i < sp->timecnt; ++i) {
- j = sp->types[i];
- sp->types[i] = (unsigned char)sp->ttis[j].tt_isdst;
- if (sp->ttis[j].tt_ttisgmt) {
- /* No adjustment to transition time */
- } else {
- /*
- ** If summer time is in effect, and the
- ** transition time was not specified as
- ** standard time, add the summer time
- ** offset to the transition time;
- ** otherwise, add the standard time
- ** offset to the transition time.
- */
- /*
- ** Transitions from DST to DDST
- ** will effectively disappear since
- ** POSIX provides for only one DST
- ** offset.
- */
- sp->ats[i] += stdoffset -
- theirstdoffset;
- }
- theiroffset = -sp->ttis[j].tt_gmtoff;
- if (!sp->ttis[j].tt_isdst)
- theirstdoffset = theiroffset;
- }
- /*
- ** Finally, fill in ttis.
- ** ttisstd and ttisgmt need not be handled.
- */
- sp->ttis[0].tt_gmtoff = -stdoffset;
- sp->ttis[0].tt_isdst = FALSE;
- sp->ttis[0].tt_abbrind = 0;
- sp->ttis[1].tt_gmtoff = -dstoffset;
- sp->ttis[1].tt_isdst = TRUE;
- sp->ttis[1].tt_abbrind = (int)stdlen + 1;
- sp->typecnt = 2;
- }
- } else {
- dstlen = 0;
- sp->typecnt = 1; /* only standard time */
- sp->timecnt = 0;
- sp->ttis[0].tt_gmtoff = -stdoffset;
- sp->ttis[0].tt_isdst = 0;
- sp->ttis[0].tt_abbrind = 0;
- }
- sp->charcnt = (int)stdlen + 1;
- if (dstlen != 0)
- sp->charcnt += (int)dstlen + 1;
- if ((size_t) sp->charcnt > sizeof sp->chars)
- return -1;
- cp = sp->chars;
- (void) strncpy(cp, stdname, stdlen);
- cp += stdlen;
- *cp++ = '\0';
- if (dstlen != 0) {
- (void) strncpy(cp, dstname, dstlen);
- *(cp + dstlen) = '\0';
- }
- return 0;
-}
-
-void
-gmtload(struct state * const sp)
-{
- if (tzload(gmt, sp) != 0)
- (void) tzparse(gmt, sp, TRUE);
-}
-
-static void
-tzsetwall(void)
-{
- if (lcl_is_set < 0)
- return;
- lcl_is_set = -1;
-
- if (lclptr == NULL) {
- lclptr = (struct state *) malloc(sizeof *lclptr);
- if (lclptr == NULL) {
- settzname(); /* all we can do */
- return;
- }
- }
- if (tzload((char *) NULL, lclptr) != 0)
- gmtload(lclptr);
- settzname();
-}
-
-void
-tzset(void)
-{
- register const char * name;
-
- name = getenv("TZ");
- if (name == NULL) {
- tzsetwall();
- return;
- }
-
- if (lcl_is_set > 0 && strcmp(lcl_TZname, name) == 0)
- return;
- lcl_is_set = strlen(name) < sizeof lcl_TZname;
- if (lcl_is_set)
- (void)strncpyX(lcl_TZname, name, sizeof(lcl_TZname));
-
- if (lclptr == NULL) {
- lclptr = (struct state *) malloc(sizeof *lclptr);
- if (lclptr == NULL) {
- settzname(); /* all we can do */
- return;
- }
- }
- if (*name == '\0') {
- /*
- ** User wants it fast rather than right.
- */
- lclptr->leapcnt = 0; /* so, we're off a little */
- lclptr->timecnt = 0;
- lclptr->typecnt = 0;
- lclptr->ttis[0].tt_isdst = 0;
- lclptr->ttis[0].tt_gmtoff = 0;
- lclptr->ttis[0].tt_abbrind = 0;
- (void)strncpyX(lclptr->chars, gmt, sizeof(lclptr->chars));
- } else if (tzload(name, lclptr) != 0)
- if (name[0] == ':' || tzparse(name, lclptr, FALSE) != 0)
- (void) gmtload(lclptr);
- settzname();
-}
diff --git a/StdLib/LibC/Time/gettimeofday.c b/StdLib/LibC/Time/gettimeofday.c
deleted file mode 100644
index d54b7bcf7c..0000000000
--- a/StdLib/LibC/Time/gettimeofday.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/** @file
- gettimeofday implementation
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1995, 1996, 1997 Kungliga Tekniska Hogskolan
- * (Royal Institute of Technology, Stockholm, Sweden).
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of the Institute nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- Heimdal: gettimeofday.c 14773 2005-04-12 11:29:18Z lha $
- NetBSD: gettimeofday.c,v 1.2 2008/03/22 08:37:21 mlelstv Exp $
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#include <sys/time.h>
-#include <time.h>
-
-
-#ifdef HAVE_GETTIMEOFDAY
-/*
- * Simple gettimeofday that only returns seconds.
- */
-int
-gettimeofday (struct timeval *tp, void *ignore)
-{
- time_t t;
-
- t = time(NULL);
- tp->tv_sec = t;
- tp->tv_usec = 0;
- return 0;
-}
-#endif
diff --git a/StdLib/LibC/Time/itimer.c b/StdLib/LibC/Time/itimer.c
deleted file mode 100644
index 00712b8247..0000000000
--- a/StdLib/LibC/Time/itimer.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/** @file
- setitimer and getitimer functions.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <LibConfig.h>
-#include <sys/time.h>
-#include <time.h>
-#include <errno.h>
-#include <sys/signal.h>
-#include <signal.h>
-#include <unistd.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/UefiLib.h>
-
-STATIC EFI_EVENT RealTimer = NULL;
-STATIC EFI_EVENT VirtualTimer = NULL;
-STATIC EFI_EVENT ProfTimer = NULL;
-
-STATIC struct itimerval RealTimerInfo = {{0,0},{0,0}};
-STATIC struct itimerval VirtualTimerInfo = {{0,0},{0,0}};
-STATIC struct itimerval ProfTimerInfo = {{0,0},{0,0}};
-
-/**
- Function to queue the next iteration of the timer.
-
- This will copy the interval part of the struct into the value and (if
- non-zero), then queue the next timer event.
-
- @param[in] TimerInfo The timer info structure.
- @param[in] Event The EFI timer event.
-**/
-VOID
-EFIAPI
-SetNext (
- IN struct itimerval *TimerInfo,
- IN EFI_EVENT Event
- )
-{
- EFI_STATUS Status;
-
- CopyMem(&(TimerInfo->it_value), &(TimerInfo->it_interval), sizeof(struct timeval));
-
- //
- // If now zero then close and be done.
- //
- if (TimerInfo->it_value.tv_sec+TimerInfo->it_value.tv_usec == 0) {
- if (Event != NULL) {
- gBS->CloseEvent(Event);
- Event = NULL;
- }
- return;
- }
-
- //
- // Set up for the next loop.
- //
- Status = gBS->SetTimer (
- Event,
- TimerRelative,
- TimerInfo->it_value.tv_sec*10000000+TimerInfo->it_value.tv_usec*1000);
-
- if (EFI_ERROR(Status)) {
- gBS->CloseEvent(Event);
- Event = NULL;
- }
-}
-
-/**
- Notification function for real timer.
-
- @param[in] Event The event.
- @param[in] Context Ignored.
-**/
-VOID
-EFIAPI
-iTimerRealNotifyFunction (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- raise(SIGALRM);
- SetNext(&RealTimerInfo, RealTimer);
-}
-
-/**
- Notification function for virtual timer.
-
- @param[in] Event The event.
- @param[in] Context Ignored.
-**/
-VOID
-EFIAPI
-iTimerVirtualNotifyFunction (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- raise(SIGVTALRM);
- SetNext(&VirtualTimerInfo, VirtualTimer);
-}
-
-/**
- Notification function for prof timer.
-
- @param[in] Event The event.
- @param[in] Context Ignored.
-**/
-VOID
-EFIAPI
-iTimerProfNotifyFunction (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- raise(SIGPROF);
- SetNext(&ProfTimerInfo, ProfTimer);
-}
-
-/**
- The setitimer() function sets the timer specified by which to the value
- specified in the structure pointed to by value, and if ovalue is not a null
- pointer, stores the previous value of the timer in the structure pointed to
- by ovalue.
-
- A timer value is defined by the itimerval structure. If it_value is non-zero,
- it indicates the time to the next timer expiration. If it_interval is
- non-zero, it specifies a value to be used in reloading it_value when the
- timer expires. Setting it_value to 0 disables a timer, regardless of the
- value of it_interval. Setting it_interval to 0 disables a timer after its
- next expiration (assuming it_value is non-zero).
-
- ITIMER_REAL
- Decrements in real time. A SIGALRM signal is delivered when this timer
- expires.
-
- ITIMER_VIRTUAL
- Decrements in process virtual time. It runs only when the process is
- executing. A SIGVTALRM signal is delivered when it expires.
-
- ITIMER_PROF
- Decrements both in process virtual time and when the system is running on
- behalf of the process. It is designed to be used by interpreters in
- statistically profiling the execution of interpreted programs. Each time
- the ITIMER_PROF timer expires, the SIGPROF signal is delivered.
-
- @param[in] which Which timer to set. Possible values are described above.
- @param[in] value The new value for this timer.
- @param[out] ovalue The old value for this timer.
-
- @retval 0 The operation was successful.
- @retval -1 The operation failed. see errno for more details.
-**/
-
-int setitimer(
- int which,
- const struct itimerval *value,
- struct itimerval *ovalue
- )
-{
- EFI_EVENT *EventPointer;
- EFI_EVENT_NOTIFY NotifyFunction;
- EFI_STATUS Status;
-
- if (value == NULL) {
- errno = EINVAL;
- return (-1);
- }
-
- if (which == ITIMER_REAL) {
- EventPointer = &RealTimer;
- NotifyFunction = iTimerRealNotifyFunction;
- if (ovalue != NULL) {
- CopyMem(ovalue, &RealTimerInfo, sizeof(struct itimerval));
- }
- CopyMem(&RealTimerInfo, value, sizeof(struct itimerval));
- } else if (which == ITIMER_VIRTUAL) {
- EventPointer = &VirtualTimer;
- NotifyFunction = iTimerVirtualNotifyFunction;
- if (ovalue != NULL) {
- CopyMem(ovalue, &VirtualTimerInfo, sizeof(struct itimerval));
- }
- CopyMem(&VirtualTimerInfo, value, sizeof(struct itimerval));
- } else if (which == ITIMER_PROF) {
- EventPointer = &ProfTimer;
- NotifyFunction = iTimerProfNotifyFunction;
- if (ovalue != NULL) {
- CopyMem(ovalue, &ProfTimerInfo, sizeof(struct itimerval));
- }
- CopyMem(&ProfTimerInfo, value, sizeof(struct itimerval));
- } else {
- errno = EINVAL;
- return (-1);
- }
-
- if (*EventPointer != NULL) {
- gBS->CloseEvent(*EventPointer);
- *EventPointer = NULL;
- }
-
- //
- // This was a 'please cancel me' request.
- //
- if (value->it_value.tv_sec+value->it_value.tv_usec == 0) {
- return 0;
- }
-
- Status = gBS->CreateEvent (
- EVT_TIMER|EVT_NOTIFY_SIGNAL,
- EfiGetCurrentTpl(),
- NotifyFunction,
- NULL, // no context
- EventPointer);
-
- if (EFI_ERROR(Status)) {
- errno = EINVAL;
- return (-1);
- }
-
- Status = gBS->SetTimer (
- *EventPointer,
- TimerRelative,
- value->it_value.tv_sec*10000000+value->it_value.tv_usec*1000);
-
- if (EFI_ERROR(Status)) {
- gBS->CloseEvent(*EventPointer);
- *EventPointer = NULL;
- errno = EINVAL;
- return (-1);
- }
-
- return 0;
-}
-
-/**
- Function to get the current state of a timer.
-
- @param[in] which The identifier of the timer to get. See setitimer for
- details.
- @param[in] value The pointer to populate. must be pre-allocated to size.
-
- @return 0 The operation was successful.
- @return -1 The operation failed.
- This means that value or which had an invalid value.
-**/
-int getitimer(
- int which,
- struct itimerval *value
- )
-{
-
- if (value == NULL) {
- errno = EINVAL;
- return (-1);
- }
-
- if (which == ITIMER_REAL) {
- CopyMem(value, &RealTimerInfo, sizeof(struct itimerval));
- } else if (which == ITIMER_VIRTUAL) {
- CopyMem(value, &VirtualTimerInfo, sizeof(struct itimerval));
- } else if (which == ITIMER_PROF) {
- CopyMem(value, &ProfTimerInfo, sizeof(struct itimerval));
- } else {
- errno = EINVAL;
- return (-1);
- }
-
- return 0;
-}
diff --git a/StdLib/LibC/Time/strftime.c b/StdLib/LibC/Time/strftime.c
deleted file mode 100644
index 11757b6129..0000000000
--- a/StdLib/LibC/Time/strftime.c
+++ /dev/null
@@ -1,598 +0,0 @@
-/** @file
- Implementation of the strftime function for <time.h>.
-
- Based on the UCB version with the ID appearing below.
- This is ANSIish only when "multibyte character == plain character".
-
- Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1989, 1993
- The Regents of the University of California. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. All advertising materials mentioning features or use of this software
- must display the following acknowledgement:
- This product includes software developed by the University of
- California, Berkeley and its contributors.
- 4. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- NetBSD: strftime.c,v 1.17.4.1 2007/08/21 20:08:21 liamjfoy Exp
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include "namespace.h"
-#include <time.h>
-#include "tzfile.h"
-#include "TimeVals.h"
-#include "fcntl.h"
-#include "locale.h"
-
-#include "sys/localedef.h"
-#include <MainData.h>
-
-/*
-** We don't use these extensions in strftime operation even when
-** supported by the local tzcode configuration. A strictly
-** conforming C application may leave them in undefined state.
-*/
-
-#ifdef _LIBC
-#undef TM_ZONE
-#undef TM_GMTOFF
-#endif
-
-#define Locale _CurrentTimeLocale
-
-static char * _add(const char *, char *, const char * const);
-static char * _conv(const int, const char * const, char * const, const char * const);
-static char * _fmt(const char *, const struct tm * const, char *, const char * const, int *);
-
-#define NO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU
-
-#ifndef YEAR_2000_NAME
-#define YEAR_2000_NAME "CHECK_STRFTIME_FORMATS_FOR_TWO_DIGIT_YEARS"
-#endif /* !defined YEAR_2000_NAME */
-
-
-#define IN_NONE 0
-#define IN_SOME 1
-#define IN_THIS 2
-#define IN_ALL 3
-
-size_t
-strftime(
- char * __restrict s,
- size_t maxsize,
- const char * __restrict format,
- const struct tm * __restrict timeptr
- )
-{
- char * p;
- int warn;
-
- tzset();
- warn = IN_NONE;
- p = _fmt(((format == NULL) ? "%c" : format), timeptr, s, s + maxsize, &warn);
-
-#ifndef NO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU
- if (warn != IN_NONE && getenv(YEAR_2000_NAME) != NULL) {
- (void) fprintf(stderr, "\n");
- if (format == NULL)
- (void) fprintf(stderr, "NULL strftime format ");
- else (void) fprintf(stderr, "strftime format \"%s\" ",
- format);
- (void) fprintf(stderr, "yields only two digits of years in ");
- if (warn == IN_SOME)
- (void) fprintf(stderr, "some locales");
- else if (warn == IN_THIS)
- (void) fprintf(stderr, "the current locale");
- else (void) fprintf(stderr, "all locales");
- (void) fprintf(stderr, "\n");
- }
-#endif /* !defined NO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU */
-
- if (p == s + maxsize)
- return 0;
- *p = '\0';
- return p - s;
-}
-
-static char *
-_fmt(
- const char * format,
- const struct tm * const t,
- char * pt,
- const char * const ptlim,
- int * warnp
- )
-{
- for ( ; *format; ++format) {
- if (*format == '%') {
-label:
- switch (*++format) {
- case '\0':
- --format;
- break;
- case 'A':
- pt = _add((t->tm_wday < 0 ||
- t->tm_wday >= DAYSPERWEEK) ?
- "?" : Locale->day[t->tm_wday],
- pt, ptlim);
- continue;
- case 'a':
- pt = _add((t->tm_wday < 0 ||
- t->tm_wday >= DAYSPERWEEK) ?
- "?" : Locale->abday[t->tm_wday],
- pt, ptlim);
- continue;
- case 'B':
- pt = _add((t->tm_mon < 0 ||
- t->tm_mon >= MONSPERYEAR) ?
- "?" : Locale->mon[t->tm_mon],
- pt, ptlim);
- continue;
- case 'b':
- case 'h':
- pt = _add((t->tm_mon < 0 ||
- t->tm_mon >= MONSPERYEAR) ?
- "?" : Locale->abmon[t->tm_mon],
- pt, ptlim);
- continue;
- case 'C':
- /*
- ** %C used to do a...
- ** _fmt("%a %b %e %X %Y", t);
- ** ...whereas now POSIX 1003.2 calls for
- ** something completely different.
- ** (ado, 1993-05-24)
- */
- pt = _conv((t->tm_year + TM_YEAR_BASE) / 100,
- "%02d", pt, ptlim);
- continue;
- case 'c':
- {
- int warn2 = IN_SOME;
-
- pt = _fmt(Locale->d_t_fmt, t, pt, ptlim, &warn2);
- if (warn2 == IN_ALL)
- warn2 = IN_THIS;
- if (warn2 > *warnp)
- *warnp = warn2;
- }
- continue;
- case 'D':
- pt = _fmt("%m/%d/%y", t, pt, ptlim, warnp);
- continue;
- case 'd':
- pt = _conv(t->tm_mday, "%02d", pt, ptlim);
- continue;
- case 'E':
- case 'O':
- /*
- ** C99 locale modifiers.
- ** The sequences
- ** %Ec %EC %Ex %EX %Ey %EY
- ** %Od %oe %OH %OI %Om %OM
- ** %OS %Ou %OU %OV %Ow %OW %Oy
- ** are supposed to provide alternate
- ** representations.
- */
- goto label;
- case 'e':
- pt = _conv(t->tm_mday, "%2d", pt, ptlim);
- continue;
- case 'F':
- pt = _fmt("%Y-%m-%d", t, pt, ptlim, warnp);
- continue;
- case 'H':
- pt = _conv(t->tm_hour, "%02d", pt, ptlim);
- continue;
- case 'I':
- pt = _conv((t->tm_hour % 12) ?
- (t->tm_hour % 12) : 12,
- "%02d", pt, ptlim);
- continue;
- case 'j':
- pt = _conv(t->tm_yday + 1, "%03d", pt, ptlim);
- continue;
- case 'k':
- /*
- ** This used to be...
- ** _conv(t->tm_hour % 12 ?
- ** t->tm_hour % 12 : 12, 2, ' ');
- ** ...and has been changed to the below to
- ** match SunOS 4.1.1 and Arnold Robbins'
- ** strftime version 3.0. That is, "%k" and
- ** "%l" have been swapped.
- ** (ado, 1993-05-24)
- */
- pt = _conv(t->tm_hour, "%2d", pt, ptlim);
- continue;
-#ifdef KITCHEN_SINK
- case 'K':
- /*
- ** After all this time, still unclaimed!
- */
- pt = _add("kitchen sink", pt, ptlim);
- continue;
-#endif /* defined KITCHEN_SINK */
- case 'l':
- /*
- ** This used to be...
- ** _conv(t->tm_hour, 2, ' ');
- ** ...and has been changed to the below to
- ** match SunOS 4.1.1 and Arnold Robbin's
- ** strftime version 3.0. That is, "%k" and
- ** "%l" have been swapped.
- ** (ado, 1993-05-24)
- */
- pt = _conv((t->tm_hour % 12) ?
- (t->tm_hour % 12) : 12,
- "%2d", pt, ptlim);
- continue;
- case 'M':
- pt = _conv(t->tm_min, "%02d", pt, ptlim);
- continue;
- case 'm':
- pt = _conv(t->tm_mon + 1, "%02d", pt, ptlim);
- continue;
- case 'n':
- pt = _add("\n", pt, ptlim);
- continue;
- case 'p':
- pt = _add((t->tm_hour >= (HOURSPERDAY / 2)) ?
- Locale->am_pm[1] :
- Locale->am_pm[0],
- pt, ptlim);
- continue;
- case 'R':
- pt = _fmt("%H:%M", t, pt, ptlim, warnp);
- continue;
- case 'r':
- pt = _fmt(Locale->t_fmt_ampm, t, pt, ptlim,
- warnp);
- continue;
- case 'S':
- pt = _conv(t->tm_sec, "%02d", pt, ptlim);
- continue;
- case 's':
- {
- struct tm tm;
- char buf[INT_STRLEN_MAXIMUM(
- time_t) + 1];
- time_t mkt;
-
- tm = *t;
- mkt = mktime(&tm);
- /* CONSTCOND */
- if (TYPE_SIGNED(time_t))
- (void) sprintf(buf, "%ld",
- (long) mkt);
- else (void) sprintf(buf, "%lu",
- (unsigned long) mkt);
- pt = _add(buf, pt, ptlim);
- }
- continue;
- case 'T':
- pt = _fmt("%H:%M:%S", t, pt, ptlim, warnp);
- continue;
- case 't':
- pt = _add("\t", pt, ptlim);
- continue;
- case 'U':
- pt = _conv((t->tm_yday + DAYSPERWEEK -
- t->tm_wday) / DAYSPERWEEK,
- "%02d", pt, ptlim);
- continue;
- case 'u':
- /*
- ** From Arnold Robbins' strftime version 3.0:
- ** "ISO 8601: Weekday as a decimal number
- ** [1 (Monday) - 7]"
- ** (ado, 1993-05-24)
- */
- pt = _conv((t->tm_wday == 0) ?
- DAYSPERWEEK : t->tm_wday,
- "%d", pt, ptlim);
- continue;
- case 'V': /* ISO 8601 week number */
- case 'G': /* ISO 8601 year (four digits) */
- case 'g': /* ISO 8601 year (two digits) */
-/*
-** From Arnold Robbins' strftime version 3.0: "the week number of the
-** year (the first Monday as the first day of week 1) as a decimal number
-** (01-53)."
-** (ado, 1993-05-24)
-**
-** From "http://www.ft.uni-erlangen.de/~mskuhn/iso-time.html" by Markus Kuhn:
-** "Week 01 of a year is per definition the first week which has the
-** Thursday in this year, which is equivalent to the week which contains
-** the fourth day of January. In other words, the first week of a new year
-** is the week which has the majority of its days in the new year. Week 01
-** might also contain days from the previous year and the week before week
-** 01 of a year is the last week (52 or 53) of the previous year even if
-** it contains days from the new year. A week starts with Monday (day 1)
-** and ends with Sunday (day 7). For example, the first week of the year
-** 1997 lasts from 1996-12-30 to 1997-01-05..."
-** (ado, 1996-01-02)
-*/
- {
- int year;
- int yday;
- int wday;
- int w;
-
- year = t->tm_year + TM_YEAR_BASE;
- yday = t->tm_yday;
- wday = t->tm_wday;
- for ( ; ; ) {
- int len;
- int bot;
- int top;
-
- len = isleap(year) ?
- DAYSPERLYEAR :
- DAYSPERNYEAR;
- /*
- ** What yday (-3 ... 3) does
- ** the ISO year begin on?
- */
- bot = ((yday + 11 - wday) %
- DAYSPERWEEK) - 3;
- /*
- ** What yday does the NEXT
- ** ISO year begin on?
- */
- top = bot -
- (len % DAYSPERWEEK);
- if (top < -3)
- top += DAYSPERWEEK;
- top += len;
- if (yday >= top) {
- ++year;
- w = 1;
- break;
- }
- if (yday >= bot) {
- w = 1 + ((yday - bot) /
- DAYSPERWEEK);
- break;
- }
- --year;
- yday += isleap(year) ?
- DAYSPERLYEAR :
- DAYSPERNYEAR;
- }
-#ifdef XPG4_1994_04_09
- if ((w == 52
- && t->tm_mon == TM_JANUARY)
- || (w == 1
- && t->tm_mon == TM_DECEMBER))
- w = 53;
-#endif /* defined XPG4_1994_04_09 */
- if (*format == 'V')
- pt = _conv(w, "%02d",
- pt, ptlim);
- else if (*format == 'g') {
- *warnp = IN_ALL;
- pt = _conv(year % 100, "%02d",
- pt, ptlim);
- } else pt = _conv(year, "%04d",
- pt, ptlim);
- }
- continue;
- case 'v':
- /*
- ** From Arnold Robbins' strftime version 3.0:
- ** "date as dd-bbb-YYYY"
- ** (ado, 1993-05-24)
- */
- pt = _fmt("%e-%b-%Y", t, pt, ptlim, warnp);
- continue;
- case 'W':
- pt = _conv((t->tm_yday + DAYSPERWEEK -
- (t->tm_wday ?
- (t->tm_wday - 1) :
- (DAYSPERWEEK - 1))) / DAYSPERWEEK,
- "%02d", pt, ptlim);
- continue;
- case 'w':
- pt = _conv(t->tm_wday, "%d", pt, ptlim);
- continue;
- case 'X':
- pt = _fmt(Locale->t_fmt, t, pt, ptlim, warnp);
- continue;
- case 'x':
- {
- int warn2 = IN_SOME;
-
- pt = _fmt(Locale->d_fmt, t, pt, ptlim, &warn2);
- if (warn2 == IN_ALL)
- warn2 = IN_THIS;
- if (warn2 > *warnp)
- *warnp = warn2;
- }
- continue;
- case 'y':
- *warnp = IN_ALL;
- pt = _conv((t->tm_year + TM_YEAR_BASE) % 100,
- "%02d", pt, ptlim);
- continue;
- case 'Y':
- pt = _conv(t->tm_year + TM_YEAR_BASE, "%04d",
- pt, ptlim);
- continue;
- case 'Z':
-#ifdef TM_ZONE
- if (t->TM_ZONE != NULL)
- pt = _add(t->TM_ZONE, pt, ptlim);
- else
-#endif /* defined TM_ZONE */
- if (t->tm_isdst >= 0)
- pt = _add(tzname[t->tm_isdst != 0],
- pt, ptlim);
- /*
- ** C99 says that %Z must be replaced by the
- ** empty string if the time zone is not
- ** determinable.
- */
- continue;
- case 'z':
- {
- int diff;
- char const * sign;
-
- if (t->tm_isdst < 0)
- continue;
-#ifdef TM_GMTOFF
- diff = (int)t->TM_GMTOFF;
-#else /* !defined TM_GMTOFF */
- /*
- ** C99 says that the UTC offset must
- ** be computed by looking only at
- ** tm_isdst. This requirement is
- ** incorrect, since it means the code
- ** must rely on magic (in this case
- ** altzone and timezone), and the
- ** magic might not have the correct
- ** offset. Doing things correctly is
- ** tricky and requires disobeying C99;
- ** see GNU C strftime for details.
- ** For now, punt and conform to the
- ** standard, even though it's incorrect.
- **
- ** C99 says that %z must be replaced by the
- ** empty string if the time zone is not
- ** determinable, so output nothing if the
- ** appropriate variables are not available.
- */
-#ifndef STD_INSPIRED
- if (t->tm_isdst == 0)
-#ifdef USG_COMPAT
- diff = -timezone;
-#else /* !defined USG_COMPAT */
- continue;
-#endif /* !defined USG_COMPAT */
- else
-#ifdef ALTZONE
- diff = -altzone;
-#else /* !defined ALTZONE */
- continue;
-#endif /* !defined ALTZONE */
-#else /* defined STD_INSPIRED */
- {
- struct tm tmp;
- time_t lct, gct;
-
- /*
- ** Get calendar time from t
- ** being treated as local.
- */
- tmp = *t; /* mktime discards const */
- lct = mktime(&tmp);
-
- if (lct == (time_t)-1)
- continue;
-
- /*
- ** Get calendar time from t
- ** being treated as GMT.
- **/
- tmp = *t; /* mktime discards const */
- gct = timegm(&tmp);
-
- if (gct == (time_t)-1)
- continue;
-
- /* LINTED difference will fit int */
- diff = (intmax_t)gct - (intmax_t)lct;
- }
-#endif /* defined STD_INSPIRED */
-#endif /* !defined TM_GMTOFF */
- if (diff < 0) {
- sign = "-";
- diff = -diff;
- } else sign = "+";
- pt = _add(sign, pt, ptlim);
- diff /= 60;
- pt = _conv((diff/60)*100 + diff%60,
- "%04d", pt, ptlim);
- }
- continue;
-#if 0
- case '+':
- pt = _fmt(Locale->date_fmt, t, pt, ptlim,
- warnp);
- continue;
-#endif
- case '%':
- /*
- ** X311J/88-090 (4.12.3.5): if conversion char is
- ** undefined, behavior is undefined. Print out the
- ** character itself as printf(3) also does.
- */
- default:
- break;
- }
- }
- if (pt == ptlim)
- break;
- *pt++ = *format;
- }
- return pt;
-}
-
-static char *
-_conv(
- const int n,
- const char * const format,
- char * const pt,
- const char * const ptlim
-)
-{
- char buf[INT_STRLEN_MAXIMUM(int) + 1];
-
- (void) sprintf(buf, format, n);
- return _add(buf, pt, ptlim);
-}
-
-static char *
-_add(
- const char * str,
- char * pt,
- const char * const ptlim
-)
-{
- while (pt < ptlim && (*pt = *str++) != '\0')
- ++pt;
- return pt;
-}
diff --git a/StdLib/LibC/Time/strptime.c b/StdLib/LibC/Time/strptime.c
deleted file mode 100644
index 98ca5c6376..0000000000
--- a/StdLib/LibC/Time/strptime.c
+++ /dev/null
@@ -1,400 +0,0 @@
-/** @file
- strptime implementation
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1997, 1998, 2005, 2008 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code was contributed to The NetBSD Foundation by Klaus Klein.
- * Heavily optimised by David Laight
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
-
- $NetBSD: strptime.c,v 1.28 2008/04/28 20:23:01 martin Exp $
-
-**/
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
- #pragma warning ( disable : 4244 )
- #pragma warning ( disable : 4018 )
-#endif
-
-#include <LibConfig.h>
-
-#include <sys/cdefs.h>
-
-#include "namespace.h"
-#include <time.h>
-#include "tzfile.h"
-#include <TimeVals.h>
-#include <fcntl.h>
-
-#include <sys/localedef.h>
-
-#include <ctype.h>
-#include <locale.h>
-#include <string.h>
-
-#ifdef __weak_alias
-__weak_alias(strptime,_strptime)
-#endif
-
-#define _ctloc(x) (_CurrentTimeLocale->x)
-
-/*
- * We do not implement alternate representations. However, we always
- * check whether a given modifier is allowed for a certain conversion.
- */
-#define ALT_E 0x01
-#define ALT_O 0x02
-#define LEGAL_ALT(x) { if (alt_format & ~(x)) return NULL; }
-
-static const unsigned char *conv_num(const unsigned char *, int *, unsigned int, unsigned int);
-static const unsigned char *find_string(const unsigned char *, int *, const char * const *,
- const char * const *, int);
-
-
-char *
-strptime(const char *buf, const char *fmt, struct tm *tm)
-{
- unsigned char c;
- const unsigned char *bp;
- int alt_format, i, split_year = 0;
- const char *new_fmt;
-
- bp = (const unsigned char *)buf;
-
- while (bp != NULL && (c = *fmt++) != '\0') {
- /* Clear `alternate' modifier prior to new conversion. */
- alt_format = 0;
- i = 0;
-
- /* Eat up white-space. */
- if (isspace(c)) {
- while (isspace(*bp))
- bp++;
- continue;
- }
-
- if (c != '%')
- goto literal;
-
-
-again: switch (c = *fmt++) {
- case '%': /* "%%" is converted to "%". */
-literal:
- if (c != *bp++)
- return NULL;
- LEGAL_ALT(0);
- continue;
-
- /*
- * "Alternative" modifiers. Just set the appropriate flag
- * and start over again.
- */
- case 'E': /* "%E?" alternative conversion modifier. */
- LEGAL_ALT(0);
- alt_format |= ALT_E;
- goto again;
-
- case 'O': /* "%O?" alternative conversion modifier. */
- LEGAL_ALT(0);
- alt_format |= ALT_O;
- goto again;
-
- /*
- * "Complex" conversion rules, implemented through recursion.
- */
- case 'c': /* Date and time, using the locale's format. */
- new_fmt = _ctloc(d_t_fmt);
- goto recurse;
-
- case 'D': /* The date as "%m/%d/%y". */
- new_fmt = "%m/%d/%y";
- LEGAL_ALT(0);
- goto recurse;
-
- case 'F': /* The date as "%Y-%m-%d". */
- new_fmt = "%Y-%m-%d";
- LEGAL_ALT(0);
- goto recurse;
-
- case 'R': /* The time as "%H:%M". */
- new_fmt = "%H:%M";
- LEGAL_ALT(0);
- goto recurse;
-
- case 'r': /* The time in 12-hour clock representation. */
- new_fmt =_ctloc(t_fmt_ampm);
- LEGAL_ALT(0);
- goto recurse;
-
- case 'T': /* The time as "%H:%M:%S". */
- new_fmt = "%H:%M:%S";
- LEGAL_ALT(0);
- goto recurse;
-
- case 'X': /* The time, using the locale's format. */
- new_fmt =_ctloc(t_fmt);
- goto recurse;
-
- case 'x': /* The date, using the locale's format. */
- new_fmt =_ctloc(d_fmt);
- recurse:
- bp = (const unsigned char *)strptime((const char *)bp,
- new_fmt, tm);
- LEGAL_ALT(ALT_E);
- continue;
-
- /*
- * "Elementary" conversion rules.
- */
- case 'A': /* The day of week, using the locale's form. */
- case 'a':
- bp = find_string(bp, &tm->tm_wday, _ctloc(day),
- _ctloc(abday), 7);
- LEGAL_ALT(0);
- continue;
-
- case 'B': /* The month, using the locale's form. */
- case 'b':
- case 'h':
- bp = find_string(bp, &tm->tm_mon, _ctloc(mon),
- _ctloc(abmon), 12);
- LEGAL_ALT(0);
- continue;
-
- case 'C': /* The century number. */
- i = 20;
- bp = conv_num(bp, &i, 0, 99);
-
- i = i * 100 - TM_YEAR_BASE;
- if (split_year)
- i += tm->tm_year % 100;
- split_year = 1;
- tm->tm_year = i;
- LEGAL_ALT(ALT_E);
- continue;
-
- case 'd': /* The day of month. */
- case 'e':
- bp = conv_num(bp, &tm->tm_mday, 1, 31);
- LEGAL_ALT(ALT_O);
- continue;
-
- case 'k': /* The hour (24-hour clock representation). */
- LEGAL_ALT(0);
- /* FALLTHROUGH */
- case 'H':
- bp = conv_num(bp, &tm->tm_hour, 0, 23);
- LEGAL_ALT(ALT_O);
- continue;
-
- case 'l': /* The hour (12-hour clock representation). */
- LEGAL_ALT(0);
- /* FALLTHROUGH */
- case 'I':
- bp = conv_num(bp, &tm->tm_hour, 1, 12);
- if (tm->tm_hour == 12)
- tm->tm_hour = 0;
- LEGAL_ALT(ALT_O);
- continue;
-
- case 'j': /* The day of year. */
- i = 1;
- bp = conv_num(bp, &i, 1, 366);
- tm->tm_yday = i - 1;
- LEGAL_ALT(0);
- continue;
-
- case 'M': /* The minute. */
- bp = conv_num(bp, &tm->tm_min, 0, 59);
- LEGAL_ALT(ALT_O);
- continue;
-
- case 'm': /* The month. */
- i = 1;
- bp = conv_num(bp, &i, 1, 12);
- tm->tm_mon = i - 1;
- LEGAL_ALT(ALT_O);
- continue;
-
- case 'p': /* The locale's equivalent of AM/PM. */
- bp = find_string(bp, &i, _ctloc(am_pm), NULL, 2);
- if (tm->tm_hour > 11)
- return NULL;
- tm->tm_hour += i * 12;
- LEGAL_ALT(0);
- continue;
-
- case 'S': /* The seconds. */
- bp = conv_num(bp, &tm->tm_sec, 0, 61);
- LEGAL_ALT(ALT_O);
- continue;
-
- case 'U': /* The week of year, beginning on sunday. */
- case 'W': /* The week of year, beginning on monday. */
- /*
- * XXX This is bogus, as we can not assume any valid
- * information present in the tm structure at this
- * point to calculate a real value, so just check the
- * range for now.
- */
- bp = conv_num(bp, &i, 0, 53);
- LEGAL_ALT(ALT_O);
- continue;
-
- case 'w': /* The day of week, beginning on sunday. */
- bp = conv_num(bp, &tm->tm_wday, 0, 6);
- LEGAL_ALT(ALT_O);
- continue;
-
- case 'Y': /* The year. */
- i = TM_YEAR_BASE; /* just for data sanity... */
- bp = conv_num(bp, &i, 0, 9999);
- tm->tm_year = i - TM_YEAR_BASE;
- LEGAL_ALT(ALT_E);
- continue;
-
- case 'y': /* The year within 100 years of the epoch. */
- /* LEGAL_ALT(ALT_E | ALT_O); */
- bp = conv_num(bp, &i, 0, 99);
-
- if (split_year)
- /* preserve century */
- i += (tm->tm_year / 100) * 100;
- else {
- split_year = 1;
- if (i <= 68)
- i = i + 2000 - TM_YEAR_BASE;
- else
- i = i + 1900 - TM_YEAR_BASE;
- }
- tm->tm_year = i;
- continue;
-
- case 'Z':
- tzset();
- if (strncmp((const char *)bp, gmt, 3) == 0) {
- tm->tm_isdst = 0;
-#ifdef TM_GMTOFF
- tm->TM_GMTOFF = 0;
-#endif
-#ifdef TM_ZONE
- tm->TM_ZONE = gmt;
-#endif
- bp += 3;
- } else {
- const unsigned char *ep;
-
- ep = find_string(bp, &i,
- (const char * const *)tzname,
- NULL, 2);
- if (ep != NULL) {
- tm->tm_isdst = i;
-#ifdef TM_GMTOFF
- tm->TM_GMTOFF = -(timezone);
-#endif
-#ifdef TM_ZONE
- tm->TM_ZONE = tzname[i];
-#endif
- }
- bp = ep;
- }
- continue;
-
- /*
- * Miscellaneous conversions.
- */
- case 'n': /* Any kind of white-space. */
- case 't':
- while (isspace(*bp))
- bp++;
- LEGAL_ALT(0);
- continue;
-
-
- default: /* Unknown/unsupported conversion. */
- return NULL;
- }
- }
-
- return __UNCONST(bp);
-}
-
-
-static const unsigned char *
-conv_num(const unsigned char *buf, int *dest, unsigned int llim, unsigned int ulim)
-{
- unsigned int result = 0;
- unsigned char ch;
-
- /* The limit also determines the number of valid digits. */
- unsigned int rulim = ulim;
-
- ch = *buf;
- if (ch < '0' || ch > '9')
- return NULL;
-
- do {
- result *= 10;
- result += ch - '0';
- rulim /= 10;
- ch = *++buf;
- } while ((result * 10 <= ulim) && rulim && ch >= '0' && ch <= '9');
-
- if (result < llim || result > ulim)
- return NULL;
-
- *dest = result;
- return buf;
-}
-
-static const unsigned char *
-find_string(const unsigned char *bp, int *tgt, const char * const *n1,
- const char * const *n2, int c)
-{
- int i;
- size_t len;
-
- /* check full name - then abbreviated ones */
- for (; n1 != NULL; n1 = n2, n2 = NULL) {
- for (i = 0; i < c; i++, n1++) {
- len = strlen(*n1);
- if (strncasecmp(*n1, (const char *)bp, len) == 0) {
- *tgt = i;
- return bp + len;
- }
- }
- }
-
- /* Nothing matched */
- return NULL;
-}
diff --git a/StdLib/LibC/Time/timegm.c b/StdLib/LibC/Time/timegm.c
deleted file mode 100644
index a672dc8da1..0000000000
--- a/StdLib/LibC/Time/timegm.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/** @file
- timegm implementation
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1987, 1989 Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Arthur David Olson of the National Cancer Institute.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
-static char *sccsid = "from: @(#)ctime.c 5.26 (Berkeley) 2/23/91";
-
-
- * This implementation of mktime is lifted straight from the NetBSD (BSD 4.4)
- * version. I modified it slightly to divorce it from the internals of the
- * ctime library. Thus this version can't use details of the internal
- * timezone state file to figure out strange unnormalized struct tm values,
- * as might result from someone doing date math on the tm struct then passing
- * it to mktime.
- *
- * It just does as well as it can at normalizing the tm input, then does a
- * binary search of the time space using the system's localtime() function.
- *
- * The original binary search was defective in that it didn't consider the
- * setting of tm_isdst when comparing tm values, causing the search to be
- * flubbed for times near the dst/standard time changeover. The original
- * code seems to make up for this by grubbing through the timezone info
- * whenever the binary search barfed. Since I don't have that luxury in
- * portable code, I have to take care of tm_isdst in the comparison routine.
- * This requires knowing how many minutes offset dst is from standard time.
- *
- * So, if you live somewhere in the world where dst is not 60 minutes offset,
- * and your vendor doesn't supply mktime(), you'll have to edit this variable
- * by hand. Sorry about that.
-
- $NetBSD: mktime.c,v 1.4 2006/06/11 19:34:10 kardel Exp $
-**/
-
-#include <LibConfig.h>
-#include <time.h>
-
-/*
- This funciton is in Time.c, which has a different license than timegm.
-*/
-time_t
-time2(struct tm * const tmp, void (* const funcp)(const time_t*, long, struct tm*),
- const long offset, int * const okayp);
-
-/*
- This funciton is in Time.c, which has a different license than timegm.
-*/
-void
-gmtsub(
- const time_t * const timep,
- const long offset,
- struct tm * const tmp
- );
-
-#ifndef WRONG
-#define WRONG (-1)
-#endif /* !defined WRONG */
-
-/*
- Convert a tm structure to a GMT based time_t.
-*/
-time_t timegm( struct tm * tmp )
-{
- register time_t t;
- int okay;
-
- tmp->tm_isdst = 0;
- t = time2(tmp, gmtsub, 0, &okay);
- if (okay || tmp->tm_isdst < 0)
- return t;
-
- return WRONG;
-} \ No newline at end of file
diff --git a/StdLib/LibC/Time/tzfile.h b/StdLib/LibC/Time/tzfile.h
deleted file mode 100644
index f50ab669d2..0000000000
--- a/StdLib/LibC/Time/tzfile.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/** @file
- Time Zone processing, declarations and macros.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Derived from the NIH time zone package file, tzfile.h, which contains the following notice:
-
- This file is in the public domain, so clarified as of
- 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
-
- This header is for use ONLY with the time conversion code.
- There is no guarantee that it will remain unchanged,
- or that it will remain at all.
- Do NOT copy it to any system include directory.
- Thank you!
-
- NetBSD: tzfile.h,v 1.8 1998/01/22 07:06:59 jtc Exp
-**/
-#ifndef TZFILE_H
-#define TZFILE_H
-
-/*
-** Information about time zone files.
-*/
-
-#ifndef TZDIR /* Time zone object file directory */
-#define TZDIR "/usr/share/zoneinfo"
-#endif /* !defined TZDIR */
-
-#ifndef TZDEFAULT
-#define TZDEFAULT "/etc/localtime"
-#endif /* !defined TZDEFAULT */
-
-#ifndef TZDEFRULES
-#define TZDEFRULES "posixrules"
-#endif /* !defined TZDEFRULES */
-
-/*
-** Each file begins with. . .
-*/
-
-#define TZ_MAGIC "TZif"
-
-struct tzhead {
- char tzh_magic[4]; /* TZ_MAGIC */
- char tzh_reserved[16]; /* reserved for future use */
- char tzh_ttisgmtcnt[4]; /* coded number of trans. time flags */
- char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */
- char tzh_leapcnt[4]; /* coded number of leap seconds */
- char tzh_timecnt[4]; /* coded number of transition times */
- char tzh_typecnt[4]; /* coded number of local time types */
- char tzh_charcnt[4]; /* coded number of abbr. chars */
-};
-
-/*
-** . . .followed by. . .
-**
-** tzh_timecnt (char [4])s coded transition times a la time(2)
-** tzh_timecnt (unsigned char)s types of local time starting at above
-** tzh_typecnt repetitions of
-** one (char [4]) coded UTC offset in seconds
-** one (unsigned char) used to set tm_isdst
-** one (unsigned char) that's an abbreviation list index
-** tzh_charcnt (char)s '\0'-terminated zone abbreviations
-** tzh_leapcnt repetitions of
-** one (char [4]) coded leap second transition times
-** one (char [4]) total correction after above
-** tzh_ttisstdcnt (char)s indexed by type; if TRUE, transition
-** time is standard time, if FALSE,
-** transition time is wall clock time
-** if absent, transition times are
-** assumed to be wall clock time
-** tzh_ttisgmtcnt (char)s indexed by type; if TRUE, transition
-** time is UTC, if FALSE,
-** transition time is local time
-** if absent, transition times are
-** assumed to be local time
-*/
-
-/*
-** In the current implementation, "tzset()" refuses to deal with files that
-** exceed any of the limits below.
-*/
-
-#ifndef TZ_MAX_TIMES
-/*
-** The TZ_MAX_TIMES value below is enough to handle a bit more than a
-** year's worth of solar time (corrected daily to the nearest second) or
-** 138 years of Pacific Presidential Election time
-** (where there are three time zone transitions every fourth year).
-*/
-#define TZ_MAX_TIMES 370
-#endif /* !defined TZ_MAX_TIMES */
-
-#ifndef TZ_MAX_TYPES
-#ifndef NOSOLAR
-#define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */
-#endif /* !defined NOSOLAR */
-#ifdef NOSOLAR
-/*
-** Must be at least 14 for Europe/Riga as of Jan 12 1995,
-** as noted by Earl Chew <earl@hpato.aus.hp.com>.
-*/
-#define TZ_MAX_TYPES 20 /* Maximum number of local time types */
-#endif /* !defined NOSOLAR */
-#endif /* !defined TZ_MAX_TYPES */
-
-#ifndef TZ_MAX_CHARS
-#define TZ_MAX_CHARS 50 /* Maximum number of abbreviation characters */
- /* (limited by what unsigned chars can hold) */
-#endif /* !defined TZ_MAX_CHARS */
-
-#ifndef TZ_MAX_LEAPS
-#define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */
-#endif /* !defined TZ_MAX_LEAPS */
-
-#define SECSPERMIN 60
-#define MINSPERHOUR 60
-#define HOURSPERDAY 24
-#define DAYSPERWEEK 7
-#define DAYSPERNYEAR 365
-#define DAYSPERLYEAR 366
-#define SECSPERHOUR (SECSPERMIN * MINSPERHOUR)
-#define SECSPERDAY ((LONG32)(SECSPERHOUR * HOURSPERDAY))
-#define MONSPERYEAR 12
-
-#define EPOCH_YEAR 1970
-#define EPOCH_WDAY TM_THURSDAY // Use this for 32-bit time_t
-//#define EPOCH_WDAY TM_SUNDAY // Use this for 64-bit time_t
-
-/*
-** Accurate only for the past couple of centuries;
-** that will probably do.
-*/
-
-#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
-
-#endif /* !defined TZFILE_H */
diff --git a/StdLib/LibC/Uefi/Devices/Console/daConsole.c b/StdLib/LibC/Uefi/Devices/Console/daConsole.c
deleted file mode 100644
index d926a0c56e..0000000000
--- a/StdLib/LibC/Uefi/Devices/Console/daConsole.c
+++ /dev/null
@@ -1,765 +0,0 @@
-/** @file
- Abstract device driver for the UEFI Console.
-
- Manipulates abstractions for stdin, stdout, stderr.
-
- This device is a WIDE device and this driver returns WIDE
- characters. It this the responsibility of the caller to convert between
- narrow and wide characters in order to perform the desired operations.
-
- The devices status as a wide device is indicatd by _S_IWTTY being set in
- f_iflags.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#include <Uefi.h>
-#include <Library/BaseLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/DebugLib.h>
-#include <Protocol/SimpleTextIn.h>
-#include <Protocol/SimpleTextOut.h>
-
-#include <LibConfig.h>
-
-#include <errno.h>
-#include <wctype.h>
-#include <wchar.h>
-#include <stdarg.h>
-#include <sys/fcntl.h>
-#include <unistd.h>
-#include <sys/termios.h>
-#include <kfile.h>
-#include <Device/Device.h>
-#include <Device/IIO.h>
-#include <MainData.h>
-
-static const CHAR16* const
-stdioNames[NUM_SPECIAL] = {
- L"stdin:", L"stdout:", L"stderr:"
-};
-
-static const int stdioFlags[NUM_SPECIAL] = {
- O_RDONLY, // stdin
- O_WRONLY, // stdout
- O_WRONLY // stderr
-};
-
-static DeviceNode *ConNode[NUM_SPECIAL];
-static ConInstance *ConInstanceList;
-
-static cIIO *IIO;
-
-/* Flags settable by Ioctl */
-static BOOLEAN TtyCooked;
-static BOOLEAN TtyEcho;
-
-/** Convert string from MBCS to WCS and translate \n to \r\n.
-
- It is the caller's responsibility to ensure that dest is
- large enough to hold the converted results. It is guaranteed
- that there will be fewer than n characters placed in dest.
-
- @param[out] dest WCS buffer to receive the converted string.
- @param[in] buf MBCS string to convert to WCS.
- @param[in] n Number of BYTES contained in buf.
- @param[in,out] Cs Pointer to the character state object for this stream
-
- @return The number of BYTES consumed from buf.
-**/
-ssize_t
-WideTtyCvt( CHAR16 *dest, const char *buf, ssize_t n, mbstate_t *Cs)
-{
- ssize_t i = 0;
- int numB = 0;
- wchar_t wc[2];
-
- while(n > 0) {
- numB = (int)mbrtowc(wc, buf, MIN(MB_LEN_MAX,n), Cs);
- if( numB == 0) {
- break;
- };
- if(numB < 0) { // If an unconvertable character, replace it.
- wc[0] = BLOCKELEMENT_LIGHT_SHADE;
- numB = 1;
- }
- if(wc[0] == L'\n') {
- *dest++ = L'\r';
- ++i;
- }
- *dest++ = (CHAR16)wc[0];
- i += numB;
- n -= numB;
- buf += numB;
- }
- *dest = 0;
- return i;
-}
-
-/** Close an open file.
-
- @param[in] filp Pointer to the file descriptor structure for this file.
-
- @retval 0 The file has been successfully closed.
- @retval -1 filp does not point to a valid console descriptor.
-**/
-static
-int
-EFIAPI
-da_ConClose(
- IN struct __filedes *filp
-)
-{
- ConInstance *Stream;
-
- Stream = BASE_CR(filp->f_ops, ConInstance, Abstraction);
- // Quick check to see if Stream looks reasonable
- if(Stream->Cookie != CON_COOKIE) { // Cookie == 'IoAb'
- errno = EINVAL;
- EFIerrno = RETURN_INVALID_PARAMETER;
- return -1; // Looks like a bad File Descriptor pointer
- }
- gMD->StdIo[Stream->InstanceNum] = NULL; // Mark the stream as closed
- return 0;
-}
-
-/** Position the console cursor to the coordinates specified by Position.
-
- @param[in] filp Pointer to the file descriptor structure for this file.
- @param[in] Position A value containing the target X and Y coordinates.
- @param[in] whence Ignored by the Console device.
-
- @retval Position Success. Returns a copy of the Position argument.
- @retval -1 filp is not associated with a valid console stream.
- @retval -1 This console stream is attached to stdin.
- @retval -1 The SetCursorPosition operation failed.
-**/
-static
-off_t
-EFIAPI
-da_ConSeek(
- struct __filedes *filp,
- off_t Position,
- int whence ///< Ignored by Console
-)
-{
- ConInstance *Stream;
- EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *Proto;
- XY_OFFSET CursorPos;
-
- Stream = BASE_CR(filp->f_ops, ConInstance, Abstraction);
- // Quick check to see if Stream looks reasonable
- if(Stream->Cookie != CON_COOKIE) { // Cookie == 'IoAb'
- EFIerrno = RETURN_INVALID_PARAMETER;
- return -1; // Looks like a bad This pointer
- }
- if(Stream->InstanceNum == STDIN_FILENO) {
- // Seek is not valid for stdin
- EFIerrno = RETURN_UNSUPPORTED;
- return -1;
- }
- // Everything is OK to do the final verification and "seek".
- Proto = (EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *)Stream->Dev;
- CursorPos.Offset = Position;
-
- EFIerrno = Proto->SetCursorPosition(Proto,
- (INTN)CursorPos.XYpos.Column,
- (INTN)CursorPos.XYpos.Row);
-
- if(RETURN_ERROR(EFIerrno)) {
- return -1;
- }
- else {
- return Position;
- }
-}
-
-/* Write a NULL terminated WCS to the EFI console.
-
- NOTE: The UEFI Console is a wide device, _S_IWTTY, so characters received
- by da_ConWrite are WIDE characters. It is the responsibility of the
- higher-level function(s) to perform any necessary conversions.
-
- @param[in,out] BufferSize Number of characters in Buffer.
- @param[in] Buffer The WCS string to be displayed
-
- @return The number of Characters written.
-*/
-static
-ssize_t
-EFIAPI
-da_ConWrite(
- IN struct __filedes *filp,
- IN off_t *Position,
- IN size_t BufferSize,
- IN const void *Buffer
- )
-{
- EFI_STATUS Status;
- EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *Proto;
- ConInstance *Stream;
- ssize_t NumChar;
- XY_OFFSET CursorPos;
-
- NumChar = -1;
- Stream = BASE_CR(filp->f_ops, ConInstance, Abstraction);
- // Quick check to see if Stream looks reasonable
- if(Stream->Cookie != CON_COOKIE) { // Cookie == 'IoAb'
- EFIerrno = RETURN_INVALID_PARAMETER;
- return -1; // Looks like a bad This pointer
- }
- if(Stream->InstanceNum == STDIN_FILENO) {
- // Write is not valid for stdin
- EFIerrno = RETURN_UNSUPPORTED;
- return -1;
- }
- // Everything is OK to do the write.
- Proto = (EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *)Stream->Dev;
-
- Status = EFI_SUCCESS;
- if(Position != NULL) {
- CursorPos.Offset = *Position;
-
- Status = Proto->SetCursorPosition(Proto,
- (INTN)CursorPos.XYpos.Column,
- (INTN)CursorPos.XYpos.Row);
-
- }
- if(!RETURN_ERROR(Status)) {
- // Send the Unicode buffer to the console
- Status = Proto->OutputString( Proto, (CHAR16 *)Buffer);
- }
-
- // Depending on status, update BufferSize and return
- if(!RETURN_ERROR(Status)) {
- NumChar = BufferSize;
- Stream->NumWritten += NumChar;
- }
- EFIerrno = Status; // Make error reason available to caller
- return NumChar;
-}
-
-/** Read a wide character from the console input device.
-
- Returns NUL or a translated input character.
-
- @param[in] filp Pointer to file descriptor for this file.
- @param[out] Buffer Buffer in which to place the read character.
-
- @retval EFI_DEVICE_ERROR A hardware error has occurred.
- @retval EFI_NOT_READY No data is available. Try again later.
- @retval EFI_SUCCESS One wide character has been placed in Character
- - 0x0000 NUL, ignore this
- - Otherwise, should be a good wide character in Character
-**/
-static
-EFI_STATUS
-da_ConRawRead (
- IN OUT struct __filedes *filp,
- OUT wchar_t *Character
-)
-{
- EFI_SIMPLE_TEXT_INPUT_PROTOCOL *Proto;
- ConInstance *Stream;
- cIIO *Self;
- EFI_STATUS Status;
- EFI_INPUT_KEY Key = {0,0};
- wchar_t RetChar;
-
- Self = (cIIO *)filp->devdata;
- Stream = BASE_CR(filp->f_ops, ConInstance, Abstraction);
- Proto = (EFI_SIMPLE_TEXT_INPUT_PROTOCOL *)Stream->Dev;
-
- if(Stream->UnGetKey == CHAR_NULL) {
- Status = Proto->ReadKeyStroke(Proto, &Key);
- }
- else {
- Status = EFI_SUCCESS;
- // Use the data in the Un-get buffer
- // Guaranteed that ScanCode and UnicodeChar are not both NUL
- Key.ScanCode = SCAN_NULL;
- Key.UnicodeChar = Stream->UnGetKey;
- Stream->UnGetKey = CHAR_NULL;
- }
- if(Status == EFI_SUCCESS) {
- // Translate the Escape Scan Code to an ESC character
- if (Key.ScanCode != 0) {
- if (Key.ScanCode == SCAN_ESC) {
- RetChar = CHAR_ESC;
- }
- else if((Self->Termio.c_iflag & IGNSPEC) != 0) {
- // If we are ignoring special characters, return a NUL
- RetChar = 0;
- }
- else {
- // Must be a control, function, or other non-printable key.
- // Map it into the Platform portion of the Unicode private use area
- RetChar = TtyFunKeyMax - Key.ScanCode;
- }
- }
- else {
- RetChar = Key.UnicodeChar;
- }
- *Character = RetChar;
- }
- else {
- *Character = 0;
- }
- return Status;
-}
-
-/** Read a wide character from the console input device.
-
- NOTE: The UEFI Console is a wide device, _S_IWTTY, so characters returned
- by da_ConRead are WIDE characters. It is the responsibility of the
- higher-level function(s) to perform any necessary conversions.
-
- A NUL character, 0x0000, is never returned. In the event that such a character
- is encountered, the read is either retried or -1 is returned with errno set
- to EAGAIN.
-
- @param[in] filp Pointer to file descriptor for this file.
- @param[in] offset Ignored.
- @param[in] BufferSize Buffer size, in bytes.
- @param[out] Buffer Buffer in which to place the read characters.
-
- @retval -1 An error has occurred. Reason in errno and EFIerrno.
- @retval -1 No data is available. errno is set to EAGAIN
- @retval 1 One wide character has been placed in Buffer
-**/
-static
-ssize_t
-EFIAPI
-da_ConRead(
- IN OUT struct __filedes *filp,
- IN OUT off_t *offset, // Console ignores this
- IN size_t BufferSize,
- OUT VOID *Buffer
-)
-{
- EFI_SIMPLE_TEXT_INPUT_PROTOCOL *Proto;
- ConInstance *Stream;
- //cIIO *Self;
- EFI_STATUS Status;
- UINTN Edex;
- ssize_t NumRead;
- BOOLEAN BlockingMode;
- wchar_t RetChar;
-
- NumRead = -1;
- if(BufferSize < sizeof(wchar_t)) {
- errno = EINVAL; // Buffer is too small to hold one character
- }
- else {
- Stream = BASE_CR(filp->f_ops, ConInstance, Abstraction);
- Proto = (EFI_SIMPLE_TEXT_INPUT_PROTOCOL *)Stream->Dev;
- BlockingMode = (BOOLEAN)((filp->Oflags & O_NONBLOCK) == 0);
-
- do {
- Status = EFI_SUCCESS;
- if(BlockingMode) {
- // Read a byte in Blocking mode
- Status = gBS->WaitForEvent( 1, &Proto->WaitForKey, &Edex);
- }
-
- /* WaitForEvent should not be able to fail since
- NumberOfEvents is set to constant 1 so is never 0
- Event is set by the Simple Text Input protocol so should never be EVT_NOTIFY_SIGNAL
- Current TPL should be TPL_APPLICATION.
- ASSERT so that we catch any problems during development.
- */
- ASSERT(Status == EFI_SUCCESS);
-
- Status = da_ConRawRead (filp, &RetChar);
- } while ( BlockingMode &&
- (RetChar == 0) &&
- (Status != EFI_DEVICE_ERROR));
-
- EFIerrno = Status;
- if(Status == EFI_SUCCESS) {
- // Got a keystroke.
- NumRead = 1; // Indicate that Key holds the data
- }
- else if(Status == EFI_NOT_READY) {
- // Keystroke data is not available
- errno = EAGAIN;
- }
- else {
- // Hardware error
- errno = EIO;
- }
- if (RetChar == 0) {
- NumRead = -1;
- errno = EAGAIN;
- }
- else {
- *((wchar_t *)Buffer) = RetChar;
- }
- }
- return NumRead;
-}
-
-/** Console-specific helper function for the fstat() function.
-
- st_size Set to number of characters read for stdin and number written for stdout and stderr.
- st_physsize 1 for stdin, 0 if QueryMode error, else max X and Y coordinates for the current mode.
- st_curpos 0 for stdin, current X & Y coordinates for stdout and stderr
- st_blksize Set to 1 since this is a character device
-
- All other members of the stat structure are left unchanged.
-
- @param[in] filp Pointer to file descriptor for this file.
- @param[out] Buffer Pointer to a stat structure to receive the information.
- @param[in,out] Something Ignored.
-
- @retval 0 Successful completion.
- @retval -1 Either filp is not associated with a console stream, or
- Buffer is NULL. errno is set to EINVAL.
-**/
-static
-int
-EFIAPI
-da_ConStat(
- struct __filedes *filp,
- struct stat *Buffer,
- void *Something
- )
-{
- ConInstance *Stream;
- EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *Proto;
- XY_OFFSET CursorPos;
- INT32 OutMode;
- UINTN ModeCol;
- UINTN ModeRow;
-
-// ConGetInfo
- Stream = BASE_CR(filp->f_ops, ConInstance, Abstraction);
- // Quick check to see if Stream looks reasonable
- if ((Stream->Cookie != CON_COOKIE) || // Cookie == 'IoAb'
- (Buffer == NULL))
- {
- errno = EINVAL;
- EFIerrno = RETURN_INVALID_PARAMETER;
- return -1;
- }
- // All of our parameters are correct, so fill in the information.
- Buffer->st_blksize = 0; // Character device, not a block device
- Buffer->st_mode = filp->f_iflags;
-
-// ConGetPosition
- if(Stream->InstanceNum == STDIN_FILENO) {
- // This is stdin
- Buffer->st_curpos = 0;
- Buffer->st_size = (off_t)Stream->NumRead;
- Buffer->st_physsize = 1;
- }
- else {
- Proto = (EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *)Stream->Dev;
- CursorPos.XYpos.Column = (UINT32)Proto->Mode->CursorColumn;
- CursorPos.XYpos.Row = (UINT32)Proto->Mode->CursorRow;
- Buffer->st_curpos = (off_t)CursorPos.Offset;
- Buffer->st_size = (off_t)Stream->NumWritten;
-
- OutMode = Proto->Mode->Mode;
- EFIerrno = Proto->QueryMode(Proto, (UINTN)OutMode, &ModeCol, &ModeRow);
- if(RETURN_ERROR(EFIerrno)) {
- Buffer->st_physsize = 0;
- }
- else {
- CursorPos.XYpos.Column = (UINT32)ModeCol;
- CursorPos.XYpos.Row = (UINT32)ModeRow;
- Buffer->st_physsize = (off_t)CursorPos.Offset;
- }
- }
- return 0;
-}
-
-/** Console-specific helper for the ioctl system call.
-
- The console device does not directly participate in ioctl operations.
- This function completes the device abstraction and returns an error value
- to indicate that the function is not supported for this device.
-
- @retval -1 Function is not supported for this device.
-**/
-static
-int
-EFIAPI
-da_ConIoctl(
- struct __filedes *filp,
- ULONGN cmd,
- va_list argp
- )
-{
- errno = ENODEV;
- return -1;
-}
-
-/** Open an abstract Console Device.
-
- @param[in] DevNode Pointer to the Device control structure for this stream.
- @param[in] filp Pointer to the new file control structure for this stream.
- @param[in] DevInstance Not used for the console device.
- @param[in] Path Not used for the console device.
- @param[in] MPath Not used for the console device.
-
- @retval 0 This console stream has been successfully opened.
- @retval -1 The DevNode or filp pointer is NULL.
- @retval -1 DevNode does not point to a valid console stream device.
-**/
-int
-EFIAPI
-da_ConOpen(
- DeviceNode *DevNode,
- struct __filedes *filp,
- int DevInstance, // Not used for console devices
- wchar_t *Path, // Not used for console devices
- wchar_t *MPath // Not used for console devices
- )
-{
- ConInstance *Stream;
- UINT32 Instance;
- int RetVal = -1;
-
- if((filp != NULL) &&
- (DevNode != NULL))
- {
- Stream = (ConInstance *)DevNode->InstanceList;
- // Quick check to see if Stream looks reasonable
- if(Stream->Cookie == CON_COOKIE)
- {
- Instance = Stream->InstanceNum;
- if(Instance < NUM_SPECIAL) {
- gMD->StdIo[Instance] = Stream;
- filp->f_iflags |= (_S_IFCHR | _S_ITTY | _S_IWTTY | _S_ICONSOLE);
- filp->f_offset = 0;
- filp->f_ops = &Stream->Abstraction;
- filp->devdata = (void *)IIO;
- RetVal = 0;
- }
- }
- }
- if (RetVal < 0) {
- EFIerrno = RETURN_INVALID_PARAMETER;
- errno = EINVAL;
- }
- return RetVal;
-
-}
-
-#include <sys/poll.h>
-/* Returns a bit mask describing which operations could be completed immediately.
-
- Testable Events for this device are:
- (POLLIN | POLLRDNORM) A Unicode character is available to read
- (POLLIN) A ScanCode is ready.
- (POLLOUT) The device is ready for output - always set on stdout and stderr.
-
- Non-testable Events which are only valid in return values are:
- POLLERR The specified device is not one of stdin, stdout, or stderr.
- POLLHUP The specified stream has been disconnected
- POLLNVAL da_ConPoll was called with an invalid parameter.
-
- NOTE: The "Events" handled by this function are not UEFI events.
-
- @param[in] filp Pointer to the file control structure for this stream.
- @param[in] events A bit mask identifying the events to be examined
- for this device.
-
- @return Returns a bit mask comprised of both testable and non-testable
- event codes indicating both the state of the operation and the
- status of the device.
-*/
-static
-short
-EFIAPI
-da_ConPoll(
- struct __filedes *filp,
- short events
- )
-{
- ConInstance *Stream;
- EFI_STATUS Status = RETURN_SUCCESS;
- short RdyMask = 0;
-
- Stream = BASE_CR(filp->f_ops, ConInstance, Abstraction);
- // Quick check to see if Stream looks reasonable
- if(Stream->Cookie != CON_COOKIE) { // Cookie == 'IoAb'
- errno = EINVAL;
- EFIerrno = RETURN_INVALID_PARAMETER;
- return POLLNVAL; // Looks like a bad filp pointer
- }
- if(Stream->InstanceNum == 0) {
- // STDIN: Only input is supported for this device
- Status = da_ConRawRead (filp, &Stream->UnGetKey);
- if(Status == RETURN_SUCCESS) {
- RdyMask = POLLIN;
- if ((Stream->UnGetKey < TtyFunKeyMin) ||
- (Stream->UnGetKey >= TtyFunKeyMax))
- {
- RdyMask |= POLLRDNORM;
- }
- }
- else {
- Stream->UnGetKey = CHAR_NULL;
- }
- }
- else if(Stream->InstanceNum < NUM_SPECIAL) { // Not 0, is it 1 or 2?
- // (STDOUT || STDERR): Only output is supported for this device
- RdyMask = POLLOUT;
- }
- else {
- RdyMask = POLLERR; // Not one of the standard streams
- }
- EFIerrno = Status;
-
- return (RdyMask & (events | POLL_RETONLY));
-}
-
-/** Construct the Console stream devices: stdin, stdout, stderr.
-
- Allocate the instance structure and populate it with the information for
- each stream device.
-**/
-RETURN_STATUS
-EFIAPI
-__Cons_construct(
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
-)
-{
- ConInstance *Stream;
- RETURN_STATUS Status;
- int i;
-
- Status = RETURN_OUT_OF_RESOURCES;
- ConInstanceList = (ConInstance *)AllocateZeroPool(NUM_SPECIAL * sizeof(ConInstance));
- if(ConInstanceList != NULL) {
- IIO = New_cIIO();
- if(IIO == NULL) {
- FreePool(ConInstanceList);
- }
- else {
- Status = RETURN_SUCCESS;
- for( i = 0; i < NUM_SPECIAL; ++i) {
- // Get pointer to instance.
- Stream = &ConInstanceList[i];
-
- Stream->Cookie = CON_COOKIE;
- Stream->InstanceNum = i;
- Stream->CharState.A = 0; // Start in the initial state
-
- switch(i) {
- case STDIN_FILENO:
- Stream->Dev = SystemTable->ConIn;
- break;
- case STDOUT_FILENO:
- Stream->Dev = SystemTable->ConOut;
- break;
- case STDERR_FILENO:
- if(SystemTable->StdErr == NULL) {
- Stream->Dev = SystemTable->ConOut;
- }
- else {
- Stream->Dev = SystemTable->StdErr;
- }
- break;
- default:
- return RETURN_VOLUME_CORRUPTED; // This is a "should never happen" case.
- }
-
- Stream->Abstraction.fo_close = &da_ConClose;
- Stream->Abstraction.fo_read = &da_ConRead;
- Stream->Abstraction.fo_write = &da_ConWrite;
- Stream->Abstraction.fo_stat = &da_ConStat;
- Stream->Abstraction.fo_lseek = &da_ConSeek;
- Stream->Abstraction.fo_fcntl = &fnullop_fcntl;
- Stream->Abstraction.fo_ioctl = &da_ConIoctl;
- Stream->Abstraction.fo_poll = &da_ConPoll;
- Stream->Abstraction.fo_flush = &fnullop_flush;
- Stream->Abstraction.fo_delete = &fbadop_delete;
- Stream->Abstraction.fo_mkdir = &fbadop_mkdir;
- Stream->Abstraction.fo_rmdir = &fbadop_rmdir;
- Stream->Abstraction.fo_rename = &fbadop_rename;
-
- Stream->NumRead = 0;
- Stream->NumWritten = 0;
- Stream->UnGetKey = CHAR_NULL;
-
- if(Stream->Dev == NULL) {
- continue; // No device for this stream.
- }
- ConNode[i] = __DevRegister(stdioNames[i], NULL, &da_ConOpen, Stream,
- 1, sizeof(ConInstance), stdioFlags[i]);
- if(ConNode[i] == NULL) {
- Status = EFIerrno; // Grab error code that DevRegister produced.
- break;
- }
- Stream->Parent = ConNode[i];
- }
- /* Initialize Ioctl flags until Ioctl is really implemented. */
- TtyCooked = TRUE;
- TtyEcho = TRUE;
- }
- }
- return Status;
-}
-
-RETURN_STATUS
-EFIAPI
-__Cons_deconstruct(
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
-)
-{
- int i;
-
- for(i = 0; i < NUM_SPECIAL; ++i) {
- if(ConNode[i] != NULL) {
- FreePool(ConNode[i]);
- }
- }
- if(ConInstanceList != NULL) {
- FreePool(ConInstanceList);
- }
- if(IIO != NULL) {
- IIO->Delete(IIO);
- IIO = NULL;
- }
-
- return RETURN_SUCCESS;
-}
-
-/* ######################################################################### */
-#if 0 /* Not implemented (yet?) for Console */
-
-static
-int
-EFIAPI
-da_ConCntl(
- struct __filedes *filp,
- UINT32,
- void *,
- void *
- )
-{
-}
-
-static
-int
-EFIAPI
-da_ConFlush(
- struct __filedes *filp
- )
-{
- return 0;
-}
-#endif /* Not implemented for Console */
diff --git a/StdLib/LibC/Uefi/Devices/UefiShell/daShell.c b/StdLib/LibC/Uefi/Devices/UefiShell/daShell.c
deleted file mode 100644
index 861765e6bc..0000000000
--- a/StdLib/LibC/Uefi/Devices/UefiShell/daShell.c
+++ /dev/null
@@ -1,856 +0,0 @@
-/** @file
- Abstract device driver for the UEFI Shell-hosted environment.
-
- In a Shell-hosted environment, this is the driver that is called
- when no other driver matches.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#include <Uefi.h>
-#include <Library/BaseLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/ShellLib.h>
-
-#include <LibConfig.h>
-
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <wctype.h>
-#include <wchar.h>
-#include <sys/fcntl.h>
-#include <sys/filio.h>
-#include <sys/syslimits.h>
-#include <unistd.h>
-#include <kfile.h>
-#include <Device/Device.h>
-#include <MainData.h>
-#include <Efi/SysEfi.h>
-
-/** EFI Shell specific operations for close().
-
- @param[in] Fp Pointer to a file descriptor structure.
-
- @retval 0 Successful completion.
- @retval -1 Operation failed. Further information is specified by errno.
-**/
-static
-int
-EFIAPI
-da_ShellClose(
- IN struct __filedes *Fp
-)
-{
- EFIerrno = ShellCloseFile( (SHELL_FILE_HANDLE *)&Fp->devdata);
- if(RETURN_ERROR(EFIerrno)) {
- return -1;
- }
- return 0;
-}
-
-/** EFI Shell specific operations for deleting a file or directory.
-
- @param[in] filp Pointer to a file descriptor structure.
-
- @retval 0 Successful completion.
- @retval -1 Operation failed. Further information is specified by errno.
-**/
-static
-int
-EFIAPI
-da_ShellDelete(
- struct __filedes *filp
- )
-{
- RETURN_STATUS Status;
-
- Status = ShellDeleteFile( (SHELL_FILE_HANDLE *)&filp->devdata);
- if(Status != RETURN_SUCCESS) {
- errno = EFI2errno(Status);
- EFIerrno = Status;
- return -1;
- }
- return 0;
-}
-
-/** EFI Shell specific operations for setting the position within a file.
-
- @param[in] filp Pointer to a file descriptor structure.
- @param[in] offset Relative position to move to.
- @param[in] whence Specifies the location offset is relative to: Beginning, Current, End.
-
- @return Returns the new file position or EOF if the seek failed.
-**/
-static
-off_t
-EFIAPI
-da_ShellSeek(
- struct __filedes *filp,
- off_t offset,
- int whence
-)
-{
- __off_t CurPos = -1;
- RETURN_STATUS Status = RETURN_SUCCESS;
- SHELL_FILE_HANDLE FileHandle;
-
- FileHandle = (SHELL_FILE_HANDLE)filp->devdata;
-
- if(whence != SEEK_SET) {
- // We are doing a relative seek
- if(whence == SEEK_END) {
- // seeking relative to EOF, so position there first.
- Status = ShellSetFilePosition( FileHandle, 0xFFFFFFFFFFFFFFFFULL);
- }
- if(Status == RETURN_SUCCESS) {
- // Now, determine our current position.
- Status = ShellGetFilePosition( FileHandle, (UINT64 *)&CurPos);
- }
- }
- else {
- CurPos = 0; // offset is an absolute position for SEEK_SET
- if(offset < 0) {
- Status = RETURN_INVALID_PARAMETER;
- }
- }
- if(Status == RETURN_SUCCESS) {
- /* CurPos now indicates the point we are seeking from, so seek... */
- Status = ShellSetFilePosition( FileHandle, (UINT64)(CurPos + offset));
- if(Status == RETURN_SUCCESS) {
- // Now, determine our final position.
- Status = ShellGetFilePosition( FileHandle, (UINT64 *)&CurPos);
- }
- }
- if(Status != RETURN_SUCCESS) {
- if(Status == EFI_UNSUPPORTED) {
- errno = EISDIR;
- }
- else {
- errno = EFI2errno(Status);
- }
- EFIerrno = Status;
- CurPos = EOF;
- }
- return CurPos;
-}
-
-/** The directory path is created with the access permissions specified by
- perms.
-
- The directory is closed after it is created.
-
- @param[in] path The directory to be created.
- @param[in] perms Access permissions for the new directory.
-
- @retval 0 The directory was created successfully.
- @retval -1 An error occurred and an error code is stored in errno.
-**/
-static
-int
-EFIAPI
-da_ShellMkdir(
- const char *path,
- __mode_t perms
- )
-{
- UINT64 TempAttr;
- SHELL_FILE_HANDLE FileHandle;
- RETURN_STATUS Status;
- EFI_FILE_INFO *FileInfo;
- wchar_t *NewPath;
- int retval = -1;
-
- // Convert name from MBCS to WCS and change '/' to '\\'
- NewPath = NormalizePath( path);
-
- if(NewPath != NULL) {
- Status = ShellCreateDirectory( NewPath, &FileHandle);
- if(Status == RETURN_SUCCESS) {
- FileInfo = ShellGetFileInfo( FileHandle);
- Status = RETURN_ABORTED; // In case ShellGetFileInfo() failed
- if(FileInfo != NULL) {
- TempAttr = FileInfo->Attribute & (EFI_FILE_RESERVED | EFI_FILE_DIRECTORY);
- FileInfo->Attribute = TempAttr | Omode2EFI(perms);
- Status = ShellSetFileInfo( FileHandle, FileInfo);
- FreePool(FileInfo);
- if(Status == RETURN_SUCCESS) {
- (void)ShellCloseFile(&FileHandle);
- retval = 0;
- }
- }
- }
- errno = EFI2errno(Status);
- EFIerrno = Status;
- free(NewPath);
- }
- return retval;
-}
-
-/** EFI Shell specific operations for reading from a file.
-
- @param[in] filp Pointer to a file descriptor structure.
- @param[in] offset Offset into the file to begin reading at, or NULL.
- @param[in] BufferSize Number of bytes in Buffer. Max number of bytes to read.
- @param[in] Buffer Pointer to a buffer to receive the read data.
-
- @return Returns the number of bytes successfully read,
- or -1 if the operation failed. Further information is specified by errno.
-**/
-static
-ssize_t
-EFIAPI
-da_ShellRead(
- IN OUT struct __filedes *filp,
- IN OUT off_t *offset,
- IN size_t BufferSize,
- OUT VOID *Buffer
-)
-{
- ssize_t BufSize;
- SHELL_FILE_HANDLE FileHandle;
- RETURN_STATUS Status;
-
- if(offset != NULL) {
- BufSize = (ssize_t)da_ShellSeek(filp, *offset, SEEK_SET);
- if(BufSize >= 0) {
- filp->f_offset = BufSize;
- }
- }
-
- BufSize = (ssize_t)BufferSize;
- FileHandle = (SHELL_FILE_HANDLE)filp->devdata;
-
- Status = ShellReadFile( FileHandle, (UINTN *)&BufSize, Buffer);
- if(Status != RETURN_SUCCESS) {
- EFIerrno = Status;
- errno = EFI2errno(Status);
- if(Status == RETURN_BUFFER_TOO_SMALL) {
- BufSize = -BufSize;
- }
- else {
- BufSize = -1;
- }
- }
- else {
- filp->f_offset += BufSize; // Advance to where we want to read next.
- }
- return BufSize;
-}
-
-/** EFI Shell specific operations for writing to a file.
-
- @param[in] filp Pointer to a file descriptor structure.
- @param[in] offset Offset into the file to begin writing at, or NULL.
- @param[in] BufferSize Number of bytes in Buffer. Max number of bytes to write.
- @param[in] Buffer Pointer to a buffer containing the data to be written.
-
- @return Returns the number of bytes successfully written,
- or -1 if the operation failed. Further information is specified by errno.
-**/
-static
-ssize_t
-EFIAPI
-da_ShellWrite(
- IN struct __filedes *filp,
- IN off_t *offset,
- IN size_t BufferSize,
- IN const void *Buffer
- )
-{
- ssize_t BufSize;
- SHELL_FILE_HANDLE FileHandle;
- RETURN_STATUS Status;
- off_t Position = 0;
- int How = SEEK_SET;
-
-
- if((offset != NULL) || (filp->Oflags & O_APPEND)) {
- if(filp->Oflags & O_APPEND) {
- Position = 0;
- How = SEEK_END;
- }
- else {
- Position = *offset;
- How = SEEK_SET;
- }
- BufSize = (ssize_t)da_ShellSeek(filp, Position, How);
- if(BufSize >= 0) {
- filp->f_offset = BufSize;
- }
- }
-
- BufSize = (ssize_t)BufferSize;
- FileHandle = (SHELL_FILE_HANDLE)filp->devdata;
-
- Status = ShellWriteFile( FileHandle, (UINTN *)&BufSize, (void *)Buffer);
-
- if(Status != RETURN_SUCCESS) {
- EFIerrno = Status;
- errno = EFI2errno(Status);
- if(Status == EFI_UNSUPPORTED) {
- errno = EISDIR;
- }
- BufSize = -1;
- }
- else {
- filp->f_offset += BufSize; // Advance to where we want to write next.
- }
-
- return BufSize;
-}
-
-/** EFI Shell specific operations for getting information about an open file.
-
- @param[in] filp Pointer to a file descriptor structure.
- @param[out] statbuf Buffer in which to store the file status.
- @param[in] Something This parameter is not used by this device.
-
- @retval 0 Successful completion.
- @retval -1 Operation failed. Further information is specified by errno.
-**/
-static
-int
-EFIAPI
-da_ShellStat(
- struct __filedes *filp,
- struct stat *statbuf,
- void *Something
- )
-{
- SHELL_FILE_HANDLE FileHandle;
- EFI_FILE_INFO *FileInfo = NULL;
- UINT64 Attributes;
- RETURN_STATUS Status;
- mode_t newmode;
-
- FileHandle = (SHELL_FILE_HANDLE)filp->devdata;
-
- FileInfo = ShellGetFileInfo( FileHandle);
-
- if(FileInfo != NULL) {
- // Got the info, now populate statbuf with it
- statbuf->st_blksize = S_BLKSIZE;
- statbuf->st_size = FileInfo->FileSize;
- statbuf->st_physsize = FileInfo->PhysicalSize;
- statbuf->st_birthtime = Efi2Time( &FileInfo->CreateTime);
- statbuf->st_atime = Efi2Time( &FileInfo->LastAccessTime);
- statbuf->st_mtime = Efi2Time( &FileInfo->ModificationTime);
- Attributes = FileInfo->Attribute;
- newmode = (mode_t)(Attributes << S_EFISHIFT) | S_ACC_READ;
- if((Attributes & EFI_FILE_DIRECTORY) == 0) {
- newmode |= _S_IFREG;
- if((Attributes & EFI_FILE_READ_ONLY) == 0) {
- newmode |= S_ACC_WRITE;
- }
- }
- else {
- newmode |= _S_IFDIR;
- }
- statbuf->st_mode = newmode;
- Status = RETURN_SUCCESS;
- }
- else {
- Status = RETURN_DEVICE_ERROR;
- errno = EIO;
- }
- EFIerrno = Status;
-
- if(FileInfo != NULL) {
- FreePool(FileInfo); // Release the buffer allocated by the GetInfo function
- }
- return (Status == RETURN_SUCCESS)? 0 : -1;
-}
-
-/** EFI Shell specific operations for low-level control of a file or device.
-
- @param[in] filp Pointer to a file descriptor structure.
- @param[in] cmd The command this ioctl is to perform.
- @param[in,out] argp Zero or more arguments as needed by the command.
-
- @retval 0 Successful completion.
- @retval -1 Operation failed. Further information is specified by errno.
-**/
-static
-int
-EFIAPI
-da_ShellIoctl(
- struct __filedes *filp,
- ULONGN cmd,
- va_list argp
- )
-{
- EFI_FILE_INFO *FileInfo = NULL;
- SHELL_FILE_HANDLE FileHandle;
- RETURN_STATUS Status = RETURN_SUCCESS;
- int retval = 0;
-
- FileHandle = (SHELL_FILE_HANDLE)filp->devdata;
-
- FileInfo = ShellGetFileInfo( FileHandle);
-
- if(FileInfo != NULL) {
- if( cmd == (ULONGN)FIOSETIME) {
- struct timeval *TV;
- EFI_TIME *ET;
- int mod = 0;
-
- TV = va_arg(argp, struct timeval*);
- if(TV[0].tv_sec != 0) {
- ET = Time2Efi(TV[0].tv_sec);
- if(ET != NULL) {
- (void) memcpy(&FileInfo->LastAccessTime, ET, sizeof(EFI_TIME));
- FileInfo->LastAccessTime.Nanosecond = TV[0].tv_usec * 1000;
- free(ET);
- ++mod;
- }
- }
- if(TV[1].tv_sec != 0) {
- ET = Time2Efi(TV[1].tv_sec);
- if(ET != NULL) {
- (void) memcpy(&FileInfo->ModificationTime, ET, sizeof(EFI_TIME));
- FileInfo->ModificationTime.Nanosecond = TV[1].tv_usec * 1000;
- free(ET);
- ++mod;
- }
- }
- /* Set access and modification times */
- Status = ShellSetFileInfo(FileHandle, FileInfo);
- errno = EFI2errno(Status);
- }
- }
- else {
- Status = RETURN_DEVICE_ERROR;
- errno = EIO;
- }
- if(RETURN_ERROR(Status)) {
- retval = -1;
- }
- EFIerrno = Status;
-
- if(FileInfo != NULL) {
- FreePool(FileInfo); // Release the buffer allocated by the GetInfo function
- }
- return retval;
-}
-
-/** EFI Shell specific operations for opening a file or directory.
-
- @param[in] DevNode Pointer to a device descriptor
- @param[in] filp Pointer to a file descriptor structure.
- @param[in] DevInstance Not used by this device.
- @param[in] Path File-system path to the file or directory.
- @param[in] MPath Device or Map name on which Path resides.
-
- @return Returns a file descriptor for the newly opened file,
- or -1 if the Operation failed. Further information is specified by errno.
-**/
-int
-EFIAPI
-da_ShellOpen(
- DeviceNode *DevNode,
- struct __filedes *filp,
- int DevInstance, /* Not used by Shell */
- wchar_t *Path,
- wchar_t *MPath
- )
-{
- UINT64 OpenMode;
- UINT64 Attributes;
- SHELL_FILE_HANDLE FileHandle;
- GenericInstance *Gip;
- char *NPath;
- wchar_t *WPath;
- RETURN_STATUS Status;
- int oflags;
- int retval;
-
- EFIerrno = RETURN_SUCCESS;
-
- //Attributes = Omode2EFI(mode);
- Attributes = 0;
-
- // Convert oflags to Attributes
- oflags = filp->Oflags;
- OpenMode = Oflags2EFI(oflags);
- if(OpenMode == 0) {
- errno = EINVAL;
- return -1;
- }
-
- /* Re-create the full mapped path for the shell. */
- if(MPath != NULL) {
- WPath = AllocateZeroPool(PATH_MAX * sizeof(wchar_t) + 1);
- if(WPath == NULL) {
- errno = ENOMEM;
- EFIerrno = RETURN_OUT_OF_RESOURCES;
- return -1;
- }
- wcsncpy(WPath, MPath, NAME_MAX); /* Get the Map Name */
- wcsncat(WPath, Path, (PATH_MAX - NAME_MAX)); /* Append the path */
- }
- else {
- WPath = Path;
- }
-
- retval = -1; /* Initially assume failure. */
-
- /* Do we care if the file already exists?
- If O_TRUNC, then delete the file. It will be created anew subsequently.
- If O_EXCL, then error if the file exists and O_CREAT is set.
-
- !!!!!!!!! Change this to use ShellSetFileInfo() to actually truncate the file
- !!!!!!!!! instead of deleting and re-creating it.
- */
- do { /* Do fake exception handling */
- if((oflags & O_TRUNC) || ((oflags & (O_EXCL | O_CREAT)) == (O_EXCL | O_CREAT))) {
- Status = ShellIsFile( WPath );
- if(Status == RETURN_SUCCESS) {
- // The file exists
- if(oflags & O_TRUNC) {
- NPath = AllocateZeroPool(PATH_MAX);
- if(NPath == NULL) {
- errno = ENOMEM;
- EFIerrno = RETURN_OUT_OF_RESOURCES;
- break;
- }
- wcstombs(NPath, WPath, PATH_MAX);
- // We do a truncate by deleting the existing file and creating a new one.
- if(unlink(NPath) != 0) {
- filp->f_iflags = 0; // Release our reservation on this FD
- FreePool(NPath);
- break;
- }
- FreePool(NPath);
- }
- else if((oflags & (O_EXCL | O_CREAT)) == (O_EXCL | O_CREAT)) {
- errno = EEXIST;
- EFIerrno = RETURN_ACCESS_DENIED;
- filp->f_iflags = 0; // Release our reservation on this FD
- break;
- }
- }
- }
-
- // Call the EFI Shell's Open function
- Status = ShellOpenFileByName( WPath, &FileHandle, OpenMode, Attributes);
- if(RETURN_ERROR(Status)) {
- filp->f_iflags = 0; // Release our reservation on this FD
- // Set errno based upon Status
- errno = EFI2errno(Status);
- EFIerrno = Status;
- break;
- }
- retval = 0;
- // Successfully got a regular File
- filp->f_iflags |= S_IFREG;
-
- // Update the info in the fd
- filp->devdata = (void *)FileHandle;
-
- Gip = (GenericInstance *)DevNode->InstanceList;
- filp->f_offset = 0;
- filp->f_ops = &Gip->Abstraction;
- // filp->devdata = FileHandle;
- } while(FALSE);
-
- /* If we get this far, WPath is not NULL.
- If MPath is not NULL, then WPath was allocated so we need to free it.
- */
- if(MPath != NULL) {
- FreePool(WPath);
- }
- return retval;
-}
-
-#include <sys/poll.h>
-/** Returns a bit mask describing which operations could be completed immediately.
-
- For now, assume the file system, via the shell, is always ready.
-
- (POLLIN | POLLRDNORM) The file system is ready to be read.
- (POLLOUT) The file system is ready for output.
-
- @param[in] filp Pointer to a file descriptor structure.
- @param[in] events Bit mask describing which operations to check.
-
- @return The returned value is a bit mask describing which operations
- could be completed immediately, without blocking.
-**/
-static
-short
-EFIAPI
-da_ShellPoll(
- struct __filedes *filp,
- short events
- )
-{
- UINT32 RdyMask;
- short retval = 0;
-
- RdyMask = (UINT32)filp->Oflags;
-
- switch(RdyMask & O_ACCMODE) {
- case O_RDONLY:
- retval = (POLLIN | POLLRDNORM);
- break;
-
- case O_WRONLY:
- retval = POLLOUT;
- break;
-
- case O_RDWR:
- retval = (POLLIN | POLLRDNORM | POLLOUT);
- break;
-
- default:
- retval = POLLERR;
- break;
- }
- return (retval & (events | POLL_RETONLY));
-}
-
-/** EFI Shell specific operations for renaming a file.
-
- @param[in] from Name of the file to be renamed.
- @param[in] to New name for the file.
-
- @retval 0 Successful completion.
- @retval -1 Operation failed. Further information is specified by errno.
-**/
-static
-int
-EFIAPI
-da_ShellRename(
- const char *from,
- const char *to
- )
-{
- RETURN_STATUS Status;
- EFI_FILE_INFO *NewFileInfo;
- EFI_FILE_INFO *OldFileInfo;
- wchar_t *NewFn;
- int OldFd;
- SHELL_FILE_HANDLE FileHandle;
- wchar_t *NormalizedPath;
-
- // Open old file
- OldFd = open(from, O_RDWR, 0);
- if(OldFd >= 0) {
- FileHandle = (SHELL_FILE_HANDLE)gMD->fdarray[OldFd].devdata;
-
- NewFileInfo = malloc(sizeof(EFI_FILE_INFO) + PATH_MAX);
- if(NewFileInfo != NULL) {
- OldFileInfo = ShellGetFileInfo( FileHandle);
- if(OldFileInfo != NULL) {
- // Copy the Old file info into our new buffer, and free the old.
- memcpy(NewFileInfo, OldFileInfo, sizeof(EFI_FILE_INFO));
- FreePool(OldFileInfo);
- // Normalize path and convert to WCS.
- NormalizedPath = NormalizePath(to);
- if (NormalizedPath != NULL) {
- // Strip off all but the file name portion of new
- NewFn = GetFileNameFromPath(NormalizedPath);
- // Copy the new file name into our new file info buffer
- wcsncpy(NewFileInfo->FileName, NewFn, wcslen(NewFn) + 1);
- // Update the size of the structure.
- NewFileInfo->Size = sizeof(EFI_FILE_INFO) + StrSize(NewFn);
- // Apply the new file name
- Status = ShellSetFileInfo(FileHandle, NewFileInfo);
- free(NormalizedPath);
- free(NewFileInfo);
- if(Status == EFI_SUCCESS) {
- // File has been successfully renamed. We are DONE!
- return 0;
- }
- errno = EFI2errno( Status );
- EFIerrno = Status;
- }
- else {
- free(NewFileInfo);
- errno = ENOMEM;
- }
- }
- else {
- free(NewFileInfo);
- errno = EIO;
- }
- }
- else {
- errno = ENOMEM;
- }
- }
- return -1;
-}
-
-/** EFI Shell specific operations for deleting directories.
-
- @param[in] filp Pointer to a file descriptor structure.
-
- @retval 0 Successful completion.
- @retval -1 Operation failed. Further information is specified by errno.
-**/
-static
-int
-EFIAPI
-da_ShellRmdir(
- struct __filedes *filp
- )
-{
- SHELL_FILE_HANDLE FileHandle;
- RETURN_STATUS Status = RETURN_SUCCESS;
- EFI_FILE_INFO *FileInfo;
- int OldErrno;
- int Count = 0;
- BOOLEAN NoFile = FALSE;
-
- OldErrno = errno; // Save the original value
- errno = 0; // Make it easier to see if we have an error later
-
- FileHandle = (SHELL_FILE_HANDLE)filp->devdata;
-
- FileInfo = ShellGetFileInfo(FileHandle);
- if(FileInfo != NULL) {
- if((FileInfo->Attribute & EFI_FILE_DIRECTORY) == 0) {
- errno = ENOTDIR;
- }
- else {
- FreePool(FileInfo); // Free up the buffer from ShellGetFileInfo()
- // See if the directory has any entries other than ".." and ".".
- Status = ShellFindFirstFile( FileHandle, &FileInfo);
- if(Status == RETURN_SUCCESS) {
- ++Count;
- while(Count < 3) {
- Status = ShellFindNextFile( FileHandle, FileInfo, &NoFile);
- if(Status == RETURN_SUCCESS) {
- if(NoFile) {
- break;
- }
- ++Count;
- }
- else {
- Count = 99;
- }
- }
- /* Count == 99 and FileInfo is allocated if ShellFindNextFile failed.
- ShellFindNextFile has freed FileInfo itself if it sets NoFile TRUE.
- */
- if((! NoFile) || (Count == 99)) {
- free(FileInfo); // Free buffer from ShellFindFirstFile()
- }
- if(Count < 3) {
- // Directory is empty
- Status = ShellDeleteFile( &FileHandle);
- if(Status == RETURN_SUCCESS) {
- EFIerrno = RETURN_SUCCESS;
- errno = OldErrno; // Restore the original value
- return 0;
- /* ######## SUCCESSFUL RETURN ######## */
- }
- /* FileInfo is freed and FileHandle closed. */
- }
- else {
- if(Count == 99) {
- errno = EIO;
- }
- else {
- errno = ENOTEMPTY;
- }
- }
- }
- }
- }
- else {
- errno = EIO;
- }
- ShellCloseFile( &FileHandle);
- EFIerrno = Status;
- if(errno == 0) {
- errno = EFI2errno( Status );
- }
- return -1;
-}
-
-/** Construct an instance of the abstract Shell device.
-
- Allocate the instance structure and populate it with the information for
- the device.
-
- @param[in] ImageHandle This application's image handle.
- @param[in] SystemTable Pointer to the UEFI System Table.
-
- @retval RETURN_SUCCESS Successful completion.
- @retval RETURN_OUT_OF_RESOURCES Failed to allocate memory for new device.
- @retval RETURN_INVALID_PARAMETER A default device has already been created.
-**/
-RETURN_STATUS
-EFIAPI
-__ctor_DevShell(
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
-)
-{
- GenericInstance *Stream;
- DeviceNode *Node;
- RETURN_STATUS Status;
-
- Stream = (GenericInstance *)AllocateZeroPool(sizeof(GenericInstance));
- if(Stream == NULL) {
- return RETURN_OUT_OF_RESOURCES;
- }
-
- Stream->Cookie = CON_COOKIE;
- Stream->InstanceNum = 1;
- Stream->Dev = NULL;
- Stream->Abstraction.fo_close = &da_ShellClose;
- Stream->Abstraction.fo_read = &da_ShellRead;
- Stream->Abstraction.fo_write = &da_ShellWrite;
- Stream->Abstraction.fo_fcntl = &fnullop_fcntl;
- Stream->Abstraction.fo_poll = &da_ShellPoll;
- Stream->Abstraction.fo_flush = &fnullop_flush;
- Stream->Abstraction.fo_stat = &da_ShellStat;
- Stream->Abstraction.fo_ioctl = &da_ShellIoctl;
- Stream->Abstraction.fo_delete = &da_ShellDelete;
- Stream->Abstraction.fo_rmdir = &da_ShellRmdir;
- Stream->Abstraction.fo_mkdir = &da_ShellMkdir;
- Stream->Abstraction.fo_rename = &da_ShellRename;
- Stream->Abstraction.fo_lseek = &da_ShellSeek;
-
- Node = __DevRegister(NULL, NULL, &da_ShellOpen, Stream, 1, sizeof(GenericInstance), O_RDWR);
- Status = EFIerrno;
- Stream->Parent = Node;
-
- return Status;
-}
-
-/** Destructor for previously constructed EFI Shell device instances.
-
- @param[in] ImageHandle This application's image handle.
- @param[in] SystemTable Pointer to the UEFI System Table.
-
- @retval 0 Successful completion is always returned.
-**/
-RETURN_STATUS
-EFIAPI
-__dtor_DevShell(
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
-)
-{
- if(daDefaultDevice != NULL) {
- if(daDefaultDevice->InstanceList != NULL) {
- FreePool(daDefaultDevice->InstanceList);
- }
- FreePool(daDefaultDevice);
- }
- return RETURN_SUCCESS;
-}
diff --git a/StdLib/LibC/Uefi/Devices/Utility/DevGenisis.c b/StdLib/LibC/Uefi/Devices/Utility/DevGenisis.c
deleted file mode 100644
index 8d95fbad5e..0000000000
--- a/StdLib/LibC/Uefi/Devices/Utility/DevGenisis.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/** @file
- Device Abstraction: device creation utility functions.
-
- Copyright (c) 2011 - 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/BaseLib.h>
-#include <Library/MemoryAllocationLib.h>
-
-#include <LibConfig.h>
-
-#include <errno.h>
-#include <stdarg.h>
-#include <sys/poll.h>
-#include <kfile.h>
-#include <Device/Device.h>
-#include <MainData.h>
-
-LIST_ENTRY daDeviceList = INITIALIZE_LIST_HEAD_VARIABLE(daDeviceList);
-DeviceNode *daDefaultDevice = NULL; ///< Device to use if nothing else found
-DeviceNode *daRootDevice = NULL; ///< Device containing the root file system
-DeviceNode *daCurrentDevice = NULL; ///< Device currently being accessed
-
-/* Commonly used fileops
- fnullop_* Does nothing and returns success.
- fbadop_* Does nothing and returns EPERM
-*/
-int EFIAPI fnullop_fcntl (struct __filedes *filp, UINT32 Cmd, void *p3, void *p4)
-{ return 0; }
-
-short EFIAPI fnullop_poll (struct __filedes *filp, short Events)
-{
- return ((POLLIN | POLLRDNORM | POLLOUT) & Events);
-}
-
-int EFIAPI fnullop_flush (struct __filedes *filp)
-{ return 0; }
-
-int EFIAPI fbadop_stat (struct __filedes *filp, struct stat *StatBuf, void *Buf)
-{
- errno = EPERM;
- return -1;
-}
-
-int EFIAPI fbadop_ioctl (struct __filedes *filp, ULONGN Cmd, va_list argp)
-{
- errno = EPERM;
- return -1;
-}
-
-int EFIAPI fbadop_delete (struct __filedes *filp)
-{
- errno = EPERM;
- return -1;
-}
-
-int EFIAPI fbadop_mkdir (const char *path, __mode_t perms)
-{
- errno = EPERM;
- return -1;
-}
-
-int EFIAPI fbadop_rename (const char *from, const char *to)
-{
- errno = EPERM;
- return -1;
-}
-
-int EFIAPI fbadop_rmdir (struct __filedes *filp)
-{
- errno = EPERM;
- return -1;
-}
-
-/** Add a new device to the device list.
- If both DevName and DevProto are NULL, register this as the Default device.
-
- @param DevName Name of the device to add.
- @param DevProto Pointer to the GUID identifying the protocol associated with this device.
- If DevProto is NULL, startup code will not try to find instances
- of this device.
- @param OpenFunc Pointer to the device's Open function.
- @param InstanceList Optional pointer to the device's initialized instance list.
- If InstanceList is NULL, the application startup code will
- scan for instances of the protocol identified by DevProto and
- populate the InstanceList in the order those protocols are found.
- @param NumInstance Number of instances in InstanceList.
- @param Modes Bit-mapped flags indicating operations (R, W, RW, ...) permitted to this device.
-
-**/
-DeviceNode *
-EFIAPI
-__DevRegister(
- IN const CHAR16 *DevName,
- IN GUID *DevProto,
- IN FO_OPEN OpenFunc,
- IN void *InstanceList,
- IN int NumInstance,
- IN UINT32 InstanceSize,
- IN UINT32 Modes
- )
-{
- DeviceNode *Node;
- GenericInstance *GIp;
- char *GenPtr;
- int i;
-
- /* Validate parameters */
- if(((DevName == NULL) && (DevProto != NULL)) ||
- (OpenFunc == NULL)) {
- EFIerrno = RETURN_INVALID_PARAMETER;
- return NULL;
- }
- Node = (DeviceNode *)AllocateZeroPool(sizeof(DeviceNode));
- if(Node == NULL) {
- EFIerrno = RETURN_OUT_OF_RESOURCES;
- return NULL;
- }
-
- Node->DevName = DevName;
- Node->DevProto = DevProto;
- Node->InstanceList = InstanceList;
- Node->OpenFunc = OpenFunc;
- Node->InstanceSize = InstanceSize;
- Node->NumInstances = NumInstance;
- Node->OpModes = Modes;
-
- /* Update the Parent member of each element of the InstanceList */
- if(InstanceList != NULL) {
- GenPtr = InstanceList;
-
- for(i = 0; i < NumInstance; ++i) { // Iterate through each element of InstanceList
- GIp = (GenericInstance *)GenPtr;
- GIp->Parent = Node; // Initializing the Parent member & InstanceNum
- //GIp->InstanceNum = i;
- GenPtr += InstanceSize;
- }
- }
- if(DevName == NULL) {
- if(daDefaultDevice != NULL) {
- EFIerrno = RETURN_INVALID_PARAMETER;
- return NULL;
- }
- daDefaultDevice = Node;
- }
- else {
- (void) InsertTailList(&daDeviceList, &Node->DevList);
- }
- EFIerrno = RETURN_SUCCESS;
- return Node;
-}
diff --git a/StdLib/LibC/Uefi/Devices/Utility/DevSearch.c b/StdLib/LibC/Uefi/Devices/Utility/DevSearch.c
deleted file mode 100644
index b0fc7bacd1..0000000000
--- a/StdLib/LibC/Uefi/Devices/Utility/DevSearch.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/** @file
- Device Abstraction: Search device list for a matching device.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-
-#include <LibConfig.h>
-
-#include <errno.h>
-#include <kfile.h>
-#include <Device/Device.h>
-#include <MainData.h>
-
-/** Find a DeviceNode matching DevName or DevProto, or both.
-
- If DevName is NULL, then the device name is not used in the search.
- If DevProto is NULL, then the protocol GUID is not used in the search.
- If both are NULL, then INVALID_PARAMETER is returned.
- If both DevName and DevProto are specified, then both must match.
- If both are specified but only one matches, then DEVICE_ERROR is returned.
-
- @param DevName Name of the Device Abstraction to find.
- @param DevProto GUID of the Protocol associated with the Device Abstraction.
- @param Node Pointer to the pointer to receive the found Device Node's address.
-
- @retval RETURN_SUCCESS The desired Device Node was found.
- @retval RETURN_INVALID_PARAMETER Both DevName and DevProto are NULL or Node is NULL.
- @retval RETURN_DEVICE_ERROR DevName matched but DevProto did not.
- @retval RETURN_NOT_FOUND The desired device was not found.
-**/
-EFI_STATUS
-EFIAPI
-__DevSearch(
- IN CHAR16 *DevName,
- IN GUID *DevProto,
- OUT DeviceNode **Node
- )
-{
- RETURN_STATUS Status = RETURN_NOT_FOUND;
- DeviceNode *WorkNode;
- INT32 DevMatched;
-
- if(((DevName == NULL) && (DevProto == NULL)) || (Node == NULL)) {
- Status = RETURN_INVALID_PARAMETER;
- }
- else {
- if(IsListEmpty((LIST_ENTRY *)&daDeviceList)) {
- Status = RETURN_NOT_FOUND;
- }
- else {
- /* Traverse the list of Device Nodes hunting for a match */
- WorkNode = (DeviceNode *)GetFirstNode((LIST_ENTRY *)&daDeviceList);
- do {
- /* Use DevMatched to keep track of the three match conditions. */
- DevMatched = 0;
- if(DevName != NULL) {
- ++DevMatched;
- if(wcsncmp(DevName, WorkNode->DevName, wcslen(WorkNode->DevName)) == 0) {
- ++DevMatched;
- }
- }
- /* At this point, DevMatched has one of the following values:
- 0 DevName == NULL, no name comparison
- 1 DevName did not match WorkNode's name
- 2 DevName MATCHED
- */
- if((DevMatched != 1) && (DevProto != NULL) && (WorkNode->DevProto != NULL)) {
- /* Only bother with the GUID comparison if:
- * There was NOT a name mismatch
- * DevProto is NOT NULL -- there is a GUID to compare
- * WorkNode->DevProto is NOT NULL
- */
- if(CompareGuid(DevProto, WorkNode->DevProto)) {
- // GUIDs matched, we found it
- Status = RETURN_SUCCESS;
- *Node = WorkNode;
- break;
- }
- else {
- // GUIDs did not match
- if(DevMatched == 2) {
- // Name matched, GUID did not!
- Status = RETURN_DEVICE_ERROR;
- break; // Don't try any more, we have an internal problem
- }
- }
- }
- else {
- if(DevMatched == 2) {
- // Device Name matched, GUIDs skipped
- Status = RETURN_SUCCESS;
- *Node = WorkNode;
- break;
- }
- }
- // Check the next device in the list
- WorkNode = (DeviceNode *)GetNextNode(&daDeviceList, (LIST_ENTRY *)WorkNode);
- } while(&daDeviceList != (LIST_ENTRY *)WorkNode);
- }
- }
- return Status;
-}
diff --git a/StdLib/LibC/Uefi/Devices/Utility/Path.c b/StdLib/LibC/Uefi/Devices/Utility/Path.c
deleted file mode 100644
index 96392e018d..0000000000
--- a/StdLib/LibC/Uefi/Devices/Utility/Path.c
+++ /dev/null
@@ -1,431 +0,0 @@
-/** @file
- Device Abstraction: Path manipulation utilities.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Library/BaseLib.h>
-
-#include <LibConfig.h>
-
-#include <errno.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <wctype.h>
-#include <kfile.h>
-#include <Device/Device.h>
-#include <MainData.h>
-
-/** Identify the type of path pointed to by Path.
-
- Paths are classified based upon their initial character sequences.
- ^\\ Absolute Path
- ^\. Relative Path
- ^[^:\\]: Mapping Path
- .* Relative Path
-
- Mapping paths are broken into two parts at the ':'. The part to the left of the ':'
- is the Map Name, pointed to by Path, and the part to the right of the ':' is pointed
- to by NewPath.
-
- If Path was not a Mapping Path, then NewPath is set to Path.
-
- @param[in] Path Pointer to the path to be classified.
- @param[out] NewPath Pointer to the path portion of a mapping path.
- @param[out] Length Length of the Map Name portion of the path.
-
- @retval PathAbsolute Path is an absolute path. NewPath points to the first '\'.
- @retval PathRelative Path is a relative path. NewPath = Path.
- @retval PathMapping Path is a mapping path. NewPath points to the character following ':'.
- @retval PathError Path is NULL.
-**/
-PATH_CLASS
-EFIAPI
-ClassifyPath(
- IN wchar_t * Path,
- OUT wchar_t ** NewPath,
- OUT int * const Length
- )
-{
- size_t MapLen;
-
- if(Path == NULL) {
- return PathError; // Bad parameter
- }
- if(NewPath != NULL) {
- *NewPath = Path; // Setup default condition
- }
- if((*Path == L'\\') || (*Path == L'\0')) {
- return PathAbsolute;
- }
- if(*Path == L'.') {
- return PathRelative;
- }
- /* The easy stuff has been done, now see if this is a mapping path.
- See if there is a ':' in Path that isn't the first character and is before
- any '\\' characters.
- */
- MapLen = wcscspn(Path, L"\\:");
- if(Length != NULL) {
- *Length = (int)MapLen;
- }
- /* MapLen == 0 means that the first character is a ':'
- == PathLen means that there are no '\\' or ':'
- Otherwise, Path[MapLen] == ':' for a mapping path
- or '\\' for a relative path.
- */
- if(MapLen == 0) {
- return PathError;
- }
- if(Path[MapLen] == L':') {
- if(NewPath != NULL) {
- *NewPath = &Path[MapLen + 1]; // Point to character after then ':'. Might be '\0'.
- }
- return PathMapping;
- }
- return PathRelative;
-}
-
-/* Normalize a narrow-character path and produce a wide-character path
- that has forward slashes replaced with backslashes.
- Backslashes are directory separators in UEFI File Paths.
-
- It is the caller's responsibility to eventually free() the returned buffer.
-
- @param[in] path A pointer to the narrow-character path to be normalized.
-
- @return A pointer to a buffer containing the normalized, wide-character, path.
-*/
-wchar_t *
-NormalizePath( const char *path)
-{
- wchar_t *temp;
- wchar_t *OldPath;
- wchar_t *NewPath;
- size_t Length;
-
- OldPath = AsciiStrToUnicodeStr(path, gMD->UString);
- Length = wcslen(OldPath) + 1;
-
- NewPath = calloc(Length, sizeof(wchar_t));
- if(NewPath != NULL) {
- temp = NewPath;
- for( ; *OldPath; ++OldPath) {
- if(*OldPath == L'/') {
- *temp = L'\\';
- }
- else {
- *temp = *OldPath;
- }
- ++temp;
- }
- }
- else {
- errno = ENOMEM;
- EFIerrno = RETURN_OUT_OF_RESOURCES;
- }
- return NewPath;
-}
-
-/** Process a wide character string representing a Mapping Path and extract the instance number.
-
- The instance number is the sequence of decimal digits immediately to the left
- of the ":" in the Map Name portion of a Mapping Path.
-
- This function is called with a pointer to beginning of the Map Name.
- Thus Path[Length] must be a ':' and Path[Length - 1] must be a decimal digit.
- If either of these are not true, an instance value of 0 is returned.
-
- If Path is NULL, an instance value of 0 is returned.
-
- @param[in] Path Points to the beginning of a Mapping Path
- @param[in] Length Number of valid characters to the left of the ':'
-
- @return Returns either 0 or the value of the contiguous digits to the left of the ':'.
-**/
-int
-EFIAPI
-PathInstance(
- const wchar_t *Path,
- int Length
- )
-{
- wchar_t *temp;
- int instance = 0;
-
- if((Path != NULL) && (Path[Length] == L':') && (Length > 0)) {
- for(temp = __UNCONST(&Path[Length - 1]); Length > 0; --Length) {
- if(!iswdigit(*temp)) {
- break;
- }
- --temp;
- }
- instance = (int)wcstol(temp+1, NULL, 10);
- }
- return instance;
-}
-
-/** Transform a relative path into an absolute path.
-
- If Path is NULL, return NULL.
- Otherwise, pre-pend the CWD to Path then process the resulting path to:
- - Replace "/./" with "/"
- - Replace "/<dirname>/../" with "/"
- - Do not allow one to back up past the root, "/"
-
- Also sets the Current Working Device to the Root Device.
-
- Path must be a previously allocated buffer. PathAdjust will
- allocate a new buffer to hold the results of the transformation
- and free Path. A pointer to the newly allocated buffer is returned.
-
- @param[in] Path A pointer to the path to be transformed. This buffer
- will always be freed.
-
- @return A pointer to a buffer containing the transformed path.
-**/
-wchar_t *
-EFIAPI
-PathAdjust(
- wchar_t *Path
- )
-{
- wchar_t *NewPath;
-
- NewPath = calloc(PATH_MAX, sizeof(wchar_t));
- if(NewPath != NULL) {
- wmemcpy(NewPath, Path, PATH_MAX);
- }
- else {
- errno = ENOMEM;
- }
- free(Path);
- return NewPath;
-}
-
-/** Replace the leading portion of Path with any aliases.
-
- Aliases are read from /etc/fstab. If there is an associated device, the
- Current Working Device is set to that device.
-
- Path must be a previously allocated buffer. PathAlias will
- allocate a new buffer to hold the results of the transformation
- then free Path. A pointer to the newly allocated buffer is returned.
-
- @param[in] Path A pointer to the original, unaliased, path. This
- buffer is always freed.
- @param[out] Node Filled in with a pointer to the Device Node describing
- the device abstraction associated with this path.
-
- @return A pointer to a buffer containing the aliased path.
-**/
-wchar_t *
-EFIAPI
-PathAlias(
- wchar_t *Path,
- DeviceNode **Node
- )
-{
- wchar_t *NewPath;
-
- NewPath = calloc(PATH_MAX, sizeof(wchar_t));
- if(NewPath != NULL) {
- wmemcpy(NewPath, Path, PATH_MAX);
- }
- else {
- errno = ENOMEM;
- }
- free(Path);
- *Node = NULL;
- return NewPath;
-}
-
-/** Parse a path producing the target device, device instance, and file path.
-
- It is the caller's responsibility to free() FullPath and MapPath when they
- are no longer needed.
-
- @param[in] path
- @param[out] FullPath
- @param[out] DevNode
- @param[out] Which
- @param[out] MapPath OPTIONAL. If not NULL, it points to the place to save a pointer
- to the extracted map name. If the path didn't have a map name,
- then *MapPath is set to NULL.
-
- @retval RETURN_SUCCESS The path was parsed successfully.
- @retval RETURN_NOT_FOUND The path does not map to a valid device.
- @retval RETURN_OUT_OF_RESOURCES Insufficient memory to calloc a MapName buffer.
- The errno variable is set to ENOMEM.
- @retval RETURN_INVALID_PARAMETER The path parameter is not valid.
- The errno variable is set to EINVAL.
-**/
-RETURN_STATUS
-EFIAPI
-ParsePath(
- IN const char *path,
- OUT wchar_t **FullPath,
- OUT DeviceNode **DevNode,
- OUT int *Which,
- OUT wchar_t **MapPath
- )
-{
- int MapLen;
- PATH_CLASS PathClass;
- wchar_t *NewPath;
- wchar_t *WPath = NULL;
- wchar_t *MPath = NULL;
- DeviceNode *Node = NULL;
- RETURN_STATUS Status = RETURN_NOT_FOUND;
- int Instance = 0;
- BOOLEAN ReMapped;
-
- ReMapped = FALSE;
-
- // Convert name from MBCS to WCS and change '/' to '\\'
- WPath = NormalizePath( path);
- PathClass = ClassifyPath(WPath, &NewPath, &MapLen);
-
-reclassify:
- switch(PathClass) {
- case PathMapping:
- if(!ReMapped) {
- if((NewPath == NULL) || (*NewPath == L'\0')) { /* Nothing after the ':' */
- PathClass = PathAbsolute;
- }
- else {
- Instance = PathInstance(WPath, MapLen);
- PathClass = ClassifyPath(NewPath, NULL, NULL);
- }
- ReMapped = TRUE;
- if(WPath[MapLen] == L':') {
- // Get the Map Name, including the trailing ':'. */
- MPath = calloc(MapLen+2, sizeof(wchar_t));
- if(MPath != NULL) {
- wmemcpy(MPath, WPath, MapLen+1);
- }
- else {
- errno = ENOMEM;
- Status = RETURN_OUT_OF_RESOURCES;
- break; // Exit the switch(PathClass) statement.
- }
- }
- if(WPath != NewPath) {
- /* Shift the RHS of the path down to the start of the buffer. */
- wmemmove(WPath, NewPath, wcslen(NewPath)+1);
- NewPath = WPath;
- }
- goto reclassify;
- }
- /* Fall through to PathError if Remapped.
- This means that the path looked like "foo:bar:something".
- */
-
- case PathError:
- errno = EINVAL;
- Status = RETURN_INVALID_PARAMETER;
- break;
-
- case PathRelative:
- /* Transform a relative path into an Absolute path.
- Prepends CWD and handles ./ and ../ entries.
- It is the caller's responsibility to free the space
- allocated to WPath.
- */
- WPath = PathAdjust(NewPath); // WPath was malloc()ed by PathAdjust
-
- case PathAbsolute:
- /* Perform any path aliasing. For example: /dev/foo -> { node.foo, "" }
- The current volume and directory are updated in the path as needed.
- It is the caller's responsibility to free the space
- allocated to WPath.
- */
- Status = RETURN_SUCCESS;
- WPath = PathAlias(WPath, &Node); // PathAlias frees its argument and malloc()s a new one.
- break;
- }
- if(!RETURN_ERROR(Status)) {
- *FullPath = WPath;
- *Which = Instance;
- if(MapPath != NULL) {
- *MapPath = MPath;
- }
- else if(MPath != NULL) {
- free(MPath); /* Caller doesn't want it so let MPath go free */
- }
-
- /* At this point, WPath is an absolute path,
- MPath is either NULL or points to the Map Name,
- and Instance is the instance number.
- */
- if(MPath == NULL) {
- /* This is NOT a mapped path. */
- if(Node == NULL) {
- Node = daDefaultDevice;
- }
- if(Node != NULL) {
- Status = RETURN_SUCCESS;
- }
- else {
- Status = RETURN_NOT_FOUND;
- }
- }
- else {
- /* This is a mapped path. */
- Status = __DevSearch( MPath, NULL, &Node);
- if(Status == RETURN_NOT_FOUND) {
- Node = daDefaultDevice;
-
- if(Node != NULL) {
- Status = RETURN_SUCCESS;
- }
- }
- }
- if(DevNode != NULL) {
- *DevNode = Node;
- }
- }
- return Status;
-}
-
-/**
- Parses a normalized wide character path and returns a pointer to the entry
- following the last \. If a \ is not found in the path the return value will
- be the same as the input value. All error conditions return NULL.
-
- The behavior when passing in a path that has not been normalized is undefined.
-
- @param Path - A pointer to a wide character string containing a path to a
- directory or a file.
-
- @return Pointer to the file name or terminal directory. NULL if an error is
- detected.
-**/
-wchar_t *
-EFIAPI
-GetFileNameFromPath (
- const wchar_t *Path
- )
-{
- wchar_t *Tail;
-
- if (Path == NULL) {
- return NULL;
- }
-
- Tail = wcsrchr(Path, L'\\');
- if(Tail == NULL) {
- Tail = (wchar_t *) Path;
- } else {
- // Move to the next character after the '\\' to get the file name.
- Tail++;
- }
-
- return Tail;
-}
diff --git a/StdLib/LibC/Uefi/Devices/daConsole.inf b/StdLib/LibC/Uefi/Devices/daConsole.inf
deleted file mode 100644
index e23193f4e2..0000000000
--- a/StdLib/LibC/Uefi/Devices/daConsole.inf
+++ /dev/null
@@ -1,52 +0,0 @@
-## @file
-# Standard C library: Console Device Abstraction.
-#
-# Copyright (c) 2011 - 2012, Intel Corporation. All rights reserved.<BR>
-# This program and the accompanying materials are licensed and made available
-# under the terms and conditions of the BSD License which accompanies this
-# distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = DevConsole
- FILE_GUID = f6937495-1f44-4a8a-8a1b-5a669f9396f6
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = DevConsole
- CONSTRUCTOR = __Cons_construct
- DESTRUCTOR = __Cons_deconstruct
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- Console/daConsole.c
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
- ShellPkg/ShellPkg.dec
-
-[LibraryClasses]
- BaseLib
- BaseMemoryLib
- MemoryAllocationLib
- UefiBootServicesTableLib
- LibC
- LibWchar
- LibUefi
- LibIIO
- DevUtility
-
-[Protocols]
- gEfiSimpleTextInProtocolGuid ## CONSUMED
- gEfiSimpleTextOutProtocolGuid ## CONSUMED
diff --git a/StdLib/LibC/Uefi/Devices/daShell.inf b/StdLib/LibC/Uefi/Devices/daShell.inf
deleted file mode 100644
index 7c456cb652..0000000000
--- a/StdLib/LibC/Uefi/Devices/daShell.inf
+++ /dev/null
@@ -1,52 +0,0 @@
-## @file
-# Standard C library: Shell-Hosted Device Abstraction.
-#
-# When this library is included in an application, it creates the default device.
-# This allows every device type not recognized to be passed to the shell for processing.
-#
-# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
-# This program and the accompanying materials are licensed and made available
-# under the terms and conditions of the BSD License which accompanies this
-# distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = DevShell
- FILE_GUID = 0a1d4fd8-4704-4501-85eb-93399492cbed
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = DevShell
- LIBRARY_CLASS = DevMedia
- CONSTRUCTOR = __ctor_DevShell
- DESTRUCTOR = __dtor_DevShell
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- UefiShell/daShell.c
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
- ShellPkg/ShellPkg.dec
-
-[LibraryClasses]
- BaseLib
- MemoryAllocationLib
- UefiBootServicesTableLib
- LibC
- LibString
- LibStdLib
- LibWchar
- LibUefi
- DevUtility
diff --git a/StdLib/LibC/Uefi/Devices/daUtility.inf b/StdLib/LibC/Uefi/Devices/daUtility.inf
deleted file mode 100644
index 6bdc1eead9..0000000000
--- a/StdLib/LibC/Uefi/Devices/daUtility.inf
+++ /dev/null
@@ -1,44 +0,0 @@
-## @file
-# Standard C library: Console Device Abstraction.
-#
-# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
-# This program and the accompanying materials are licensed and made available
-# under the terms and conditions of the BSD License which accompanies this
-# distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = DevUtility
- FILE_GUID = d6a9928c-3397-4dd1-818f-c664ba6dcaaf
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = DevUtility
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- Utility/DevGenisis.c
- Utility/DevSearch.c
- Utility/Path.c
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
- ShellPkg/ShellPkg.dec
-
-[LibraryClasses]
- BaseLib
- BaseMemoryLib
- MemoryAllocationLib
- LibC
- LibWchar
- LibUefi
diff --git a/StdLib/LibC/Uefi/InteractiveIO/CanonRead.c b/StdLib/LibC/Uefi/InteractiveIO/CanonRead.c
deleted file mode 100644
index 8c8e076d80..0000000000
--- a/StdLib/LibC/Uefi/InteractiveIO/CanonRead.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/** @file
- Canonical Interactive Input Function.
-
- The functions assume that isatty() is TRUE at the time they are called.
-
- Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-
-#include <LibConfig.h>
-
-#include <errno.h>
-#include <sys/syslimits.h>
-#include <sys/termios.h>
-#include <Device/IIO.h>
-#include <MainData.h>
-#include "IIOutilities.h"
-#include "IIOechoCtrl.h"
-
-/** Read a line from the input file in canonical mode.
- Perform echoing and input processing as directed by the termios flags.
-
- @param[in] filp A pointer to a file descriptor structure.
-
- @return The number of characters in the input buffer, or -1 if there
- was an error.
-**/
-ssize_t
-IIO_CanonRead (
- struct __filedes *filp
- )
-{
- cIIO *This;
- cFIFO *InBuf;
- struct termios *Termio;
- struct __filedes *fpOut;
- size_t NumRead;
- wint_t InChar;
- tcflag_t IFlag;
- tcflag_t LFlag;
- BOOLEAN EchoIsOK;
- BOOLEAN Activate;
- BOOLEAN FirstRead;
- int OutMode;
- UINTN MaxColumn;
- UINTN MaxRow;
-
- NumRead = MAX_INPUT; // Workaround "potentially uninitialized" warning
- EchoIsOK = FALSE;
- FirstRead = TRUE;
- This = filp->devdata;
- Termio = &This->Termio;
- InBuf = This->InBuf;
-
- // Get a copy of the flags we are going to use
- IFlag = Termio->c_iflag;
- LFlag = Termio->c_lflag;
-
- /* Determine what the current screen size is. Also validates the output device. */
- OutMode = IIO_GetOutputSize(STDOUT_FILENO, &MaxColumn, &MaxRow);
- if(OutMode >= 0) {
- /* Set the maximum screen dimensions. */
- This->MaxColumn = MaxColumn;
- This->MaxRow = MaxRow;
-
- /* Record where the cursor is at the beginning of this Input operation.
- The currently set stdout device is used to determine this. If there is
- no stdout, or stdout is not an interactive device, nothing is recorded.
- */
- if (IIO_GetCursorPosition(STDOUT_FILENO, &This->InitialXY.Column, &This->InitialXY.Row) >= 0) {
- This->CurrentXY.Column = This->InitialXY.Column;
- This->CurrentXY.Row = This->InitialXY.Row;
- EchoIsOK = TRUE; // Can only echo to stdout
- }
- }
-
- // For now, we only echo to stdout.
- fpOut = &gMD->fdarray[STDOUT_FILENO];
-
- // Input and process characters until BufferSize is exhausted.
- do {
- InChar = IIO_GetInChar(filp, FirstRead);
- if (InChar == WEOF) {
- NumRead = 0;
- break;
- }
- FirstRead = FALSE;
- Activate = TRUE;
- if(InChar == CHAR_CARRIAGE_RETURN) {
- if((IFlag & IGNCR) != 0) {
- continue; // Restart the do loop, discarding the CR
- }
- else if((IFlag & ICRNL) != 0) {
- InChar = L'\n';
- }
- }
- else if(InChar == CHAR_LINEFEED) {
- if((IFlag & INLCR) != 0) {
- InChar = L'\r';
- }
- }
- else if(CCEQ(Termio->c_cc[VINTR], InChar)) {
- if((LFlag & ISIG) != 0) {
- // Raise Signal
- // Flush Input Buffer
- // Return to caller
- InChar = IIO_ECHO_DISCARD;
- errno = EINTR;
- }
- else {
- Activate = FALSE;
- }
- }
- else if(CCEQ(Termio->c_cc[VQUIT], InChar)) {
- if((LFlag & ISIG) != 0) {
- // Raise Signal
- // Flush Input Buffer
- // Return to caller
- InChar = IIO_ECHO_DISCARD;
- errno = EINTR;
- }
- else {
- Activate = FALSE;
- }
- }
- else if(CCEQ(Termio->c_cc[VEOF], InChar)) {
- InChar = WEOF;
- NumRead = 0;
- EchoIsOK = FALSE; // Buffer, but don't echo this character
- }
- else if(CCEQ(Termio->c_cc[VEOL], InChar)) {
- EchoIsOK = FALSE; // Buffer, but don't echo this character
- }
- else if(CCEQ(Termio->c_cc[VERASE], InChar)) {
- InChar = IIO_ECHO_ERASE;
- Activate = FALSE;
- }
- else if(CCEQ(Termio->c_cc[VKILL], InChar)) {
- InChar = IIO_ECHO_KILL;
- Activate = FALSE;
- }
- else {
- if((InChar < TtySpecKeyMin) || (InChar >= TtyFunKeyMax)) {
- Activate = FALSE;
- }
- }
- /** The Echo function is responsible for:
- * Adding the character to the input buffer, if appropriate.
- * Removing characters from the input buffer for ERASE and KILL processing.
- * Visually removing characters from the screen if ECHOE is set.
- * Ensuring one can not backspace beyond the beginning of the input text.
- * Sending final echo strings to output.
- **/
- (void)This->Echo(fpOut, (wchar_t)InChar, EchoIsOK);
- NumRead = InBuf->Count(InBuf, AsElements);
- } while((NumRead < MAX_INPUT) &&
- (Activate == FALSE));
-
- return (ssize_t)NumRead;
-}
diff --git a/StdLib/LibC/Uefi/InteractiveIO/IIO.c b/StdLib/LibC/Uefi/InteractiveIO/IIO.c
deleted file mode 100644
index 65b61d9bcc..0000000000
--- a/StdLib/LibC/Uefi/InteractiveIO/IIO.c
+++ /dev/null
@@ -1,373 +0,0 @@
-/** @file
- Definitions for the Interactive IO library.
-
- The functions assume that isatty() is TRUE at the time they are called.
-
- Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/MemoryAllocationLib.h>
-
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <sys/syslimits.h>
-#include <sys/termios.h>
-#include <Device/IIO.h>
-#include <MainData.h>
-#include "IIOutilities.h"
-#include "IIOechoCtrl.h"
-
-/** Read from an Interactive IO device.
-
- NOTE: If _S_IWTTY is set, the internal buffer contains WIDE characters.
- They will need to be converted to MBCS when returned.
-
- Input is line buffered if ICANON is set,
- otherwise MIN determines how many characters to input.
- Currently MIN is always zero, meaning 0 or 1 character is input in
- noncanonical mode.
-
- @param[in] filp Pointer to the descriptor of the device (file) to be read.
- @param[in] BufferSize Maximum number of bytes to be returned to the caller.
- @param[out] Buffer Pointer to the buffer where the input is to be stored.
-
- @retval -1 An error occurred. No data is available.
- @retval 0 No data was available. Try again later.
- @retval >0 The number of bytes consumed by the returned data.
-**/
-static
-ssize_t
-EFIAPI
-IIO_Read(
- struct __filedes *filp,
- size_t BufferSize,
- VOID *Buffer
- )
-{
- cIIO *This;
- ssize_t NumRead;
- tcflag_t Flags;
- size_t XlateSz;
- size_t Needed;
-
- NumRead = -1;
- This = filp->devdata;
- if(This != NULL) {
- Flags = This->Termio.c_lflag;
- if(Flags & ICANON) {
- NumRead = IIO_CanonRead(filp);
- }
- else {
- NumRead = IIO_NonCanonRead(filp);
- }
- // At this point, the input has been accumulated in the input buffer.
- if(filp->f_iflags & _S_IWTTY) {
- // Data in InBuf is wide characters. Convert to MBCS
- // First, convert into a linear buffer
- NumRead = This->InBuf->Copy(This->InBuf, gMD->UString2, (INT32)UNICODE_STRING_MAX-1);
- gMD->UString2[NumRead] = 0; // Ensure that the buffer is terminated
- // Determine the needed space
- XlateSz = EstimateWtoM((const wchar_t *)gMD->UString2, BufferSize, &Needed);
-
- // Now translate this into MBCS in Buffer
- NumRead = wcstombs((char *)Buffer, (const wchar_t *)gMD->UString2, XlateSz);
-
- // Consume the translated characters
- (void)This->InBuf->Flush(This->InBuf, Needed);
- }
- else {
- // Data in InBuf is narrow characters. Use verbatim.
- NumRead = This->InBuf->Read(This->InBuf, Buffer, (INT32)BufferSize);
- }
- }
- return NumRead;
-}
-
-/** Process characters from buffer buf and write them to the output device
- specified by filp.
-
- @param[in] filp Pointer to a file descriptor structure.
- @param[in] buf Pointer to the MBCS string to be output.
- @param[in] N Number of bytes in buf.
-
- @retval >=0 Number of bytes sent to the output device.
-**/
-static
-ssize_t
-EFIAPI
-IIO_Write(
- struct __filedes *filp,
- const char *buf,
- ssize_t N
- )
-{
- cIIO *This;
- cFIFO *OutBuf;
- mbstate_t *OutState;
- char *MbcsPtr;
- ssize_t NumWritten;
- ssize_t NumProc;
- size_t CharLen;
- UINTN MaxColumn;
- UINTN MaxRow;
- wchar_t OutChar[2]; // Just in case we run into 4-byte MBCS character
- int OutMode;
-
- errno = 0; // indicate no error as default
- NumWritten = -1;
-
- /* Determine what the current screen size is. Also validates the output device. */
- OutMode = IIO_GetOutputSize(filp->MyFD, &MaxColumn, &MaxRow);
-
- This = filp->devdata;
- if((This != NULL) && (OutMode >= 0)) {
- if(filp->MyFD == STDERR_FILENO) {
- OutBuf = This->ErrBuf;
- OutState = &This->ErrState;
- }
- else {
- OutBuf = This->OutBuf;
- OutState = &This->OutState;
- }
-
- /* Set the maximum screen dimensions. */
- This->MaxColumn = MaxColumn;
- This->MaxRow = MaxRow;
-
- /* Record where the cursor is at the beginning of the Output operation. */
- (void)IIO_GetCursorPosition(filp->MyFD, &This->InitialXY.Column, &This->InitialXY.Row);
- This->CurrentXY.Column = This->InitialXY.Column;
- This->CurrentXY.Row = This->InitialXY.Row;
-
-
- NumWritten = 0;
- OutChar[0] = (wchar_t)buf[0];
- while((OutChar[0] != 0) && (NumWritten < N)) {
- CharLen = mbrtowc(OutChar, (const char *)&buf[NumWritten], MB_CUR_MAX, OutState);
- NumProc = IIO_WriteOne(filp, OutBuf, OutChar[0]);
- if(NumProc > 0) {
- // Successfully processed and buffered one character
- NumWritten += CharLen; // Index of start of next character
- }
- else if(NumProc == -1) {
- // Encoding Error
- (void)mbrtowc(NULL, NULL, 1, OutState); // Re-Initialize the conversion state
- errno = EILSEQ;
- break;
- }
- else {
- // Last character was incomplete
- break;
- }
- }
- // At this point, the characters to write are in OutBuf
- // First, linearize the buffer
- NumWritten = OutBuf->Copy(OutBuf, gMD->UString, UNICODE_STRING_MAX-1);
- gMD->UString[NumWritten] = 0; // Ensure that the buffer is terminated
-
- if(filp->f_iflags & _S_IWTTY) {
- // Output device expects wide characters, Output what we have
- NumWritten = filp->f_ops->fo_write(filp, NULL, NumWritten, gMD->UString);
- }
- else {
- // Output device expects narrow characters, convert to MBCS
- MbcsPtr = (char *)gMD->UString2;
- // Determine the needed space
- NumProc = (ssize_t)EstimateWtoM((const wchar_t *)gMD->UString, UNICODE_STRING_MAX * sizeof(wchar_t), &CharLen);
-
- // Now translate this into MBCS in Buffer
- NumWritten = wcstombs(MbcsPtr, (const wchar_t *)gMD->UString, NumProc);
- MbcsPtr[NumWritten] = 0; // Ensure the buffer is terminated
-
- // Send the MBCS buffer to Output
- NumWritten = filp->f_ops->fo_write(filp, NULL, NumWritten, MbcsPtr);
- }
- // Consume the translated characters
- (void)OutBuf->Flush(OutBuf, NumWritten);
- }
- else {
- if(This == NULL) {
- errno = EINVAL;
- }
- // Otherwise, errno is already set.
- }
- return NumWritten;
-}
-
-/** Echo a character to an output device.
- Performs translation and edit processing depending upon termios flags.
-
- @param[in] filp A pointer to a file descriptor structure.
- @param[in] EChar The character to echo.
- @param[in] EchoIsOK TRUE if the caller has determined that characters
- should be echoed. Otherwise, just buffer.
-
- @return Returns the number of characters actually output.
-**/
-static
-ssize_t
-EFIAPI
-IIO_Echo(
- struct __filedes *filp,
- wchar_t EChar,
- BOOLEAN EchoIsOK
- )
-{
- cIIO *This;
- ssize_t NumWritten;
- cFIFO *OutBuf;
- char *MbcsPtr;
- ssize_t NumProc;
- tcflag_t LFlags;
-
- NumWritten = -1;
- This = filp->devdata;
- if(This != NULL) {
- OutBuf = This->OutBuf;
- LFlags = This->Termio.c_lflag & (ECHOK | ECHOE);
-
- if((EChar >= TtyFunKeyMin) && (EChar < TtyFunKeyMax)) {
- // A special function key was pressed, buffer it, don't echo, and activate.
- // Process and buffer the character. May produce multiple characters.
- NumProc = IIO_EchoOne(filp, EChar, FALSE); // Don't echo this character
- EChar = CHAR_LINEFEED; // Every line must end with '\n' (legacy)
- }
- // Process and buffer the character. May produce multiple characters.
- NumProc = IIO_EchoOne(filp, EChar, EchoIsOK);
-
- // At this point, the character(s) to write are in OutBuf
- // First, linearize the buffer
- NumWritten = OutBuf->Copy(OutBuf, gMD->UString, UNICODE_STRING_MAX-1);
- gMD->UString[NumWritten] = 0; // Ensure that the buffer is terminated
-
- if((EChar == IIO_ECHO_KILL) && (LFlags & ECHOE) && EchoIsOK) {
- // Position the cursor to the start of input.
- (void)IIO_SetCursorPosition(filp, &This->InitialXY);
- }
- // Output the buffer
- if(filp->f_iflags & _S_IWTTY) {
- // Output device expects wide characters, Output what we have
- NumWritten = filp->f_ops->fo_write(filp, NULL, NumWritten, gMD->UString);
- }
- else {
- // Output device expects narrow characters, convert to MBCS
- MbcsPtr = (char *)gMD->UString2;
- // Determine the needed space
- NumProc = (ssize_t)EstimateWtoM((const wchar_t *)gMD->UString, UNICODE_STRING_MAX * sizeof(wchar_t), NULL);
-
- // Now translate this into MBCS in Buffer
- NumWritten = wcstombs(MbcsPtr, (const wchar_t *)gMD->UString, NumProc);
- MbcsPtr[NumWritten] = 0; // Ensure the buffer is terminated
-
- // Send the MBCS buffer to Output
- NumWritten = filp->f_ops->fo_write(filp, NULL, NumWritten, MbcsPtr);
- }
- // Consume the echoed characters
- (void)OutBuf->Flush(OutBuf, NumWritten);
-
- if(EChar == IIO_ECHO_KILL) {
- if(LFlags == ECHOK) {
- NumWritten = IIO_WriteOne(filp, OutBuf, CHAR_LINEFEED);
- }
- else if((LFlags & ECHOE) && EchoIsOK) {
- // Position the cursor to the start of input.
- (void)IIO_SetCursorPosition(filp, &This->InitialXY);
- }
- NumWritten = 0;
- }
- }
- else {
- errno = EINVAL;
- }
-
- return NumWritten;
-}
-
-static
-void
-FifoDelete(cFIFO *Member)
-{
- if(Member != NULL) {
- Member->Delete(Member);
- }
-}
-
-/** Destructor for an IIO instance.
-
- Releases all resources used by a particular IIO instance.
-**/
-static
-void
-EFIAPI
-IIO_Delete(
- cIIO *Self
- )
-{
- if(Self != NULL) {
- FifoDelete(Self->ErrBuf);
- FifoDelete(Self->OutBuf);
- FifoDelete(Self->InBuf);
- if(Self->AttrBuf != NULL) {
- FreePool(Self->AttrBuf);
- }
- FreePool(Self);
- }
-}
-
-/** Constructor for new IIO instances.
-
- @return Returns NULL or a pointer to a new IIO instance.
-**/
-cIIO *
-EFIAPI
-New_cIIO(void)
-{
- cIIO *IIO;
- cc_t *TempBuf;
- int i;
-
- IIO = (cIIO *)AllocateZeroPool(sizeof(cIIO));
- if(IIO != NULL) {
- IIO->InBuf = New_cFIFO(MAX_INPUT, sizeof(wchar_t));
- IIO->OutBuf = New_cFIFO(MAX_OUTPUT, sizeof(wchar_t));
- IIO->ErrBuf = New_cFIFO(MAX_OUTPUT, sizeof(wchar_t));
- IIO->AttrBuf = (UINT8 *)AllocateZeroPool(MAX_OUTPUT);
-
- if((IIO->InBuf == NULL) || (IIO->OutBuf == NULL) ||
- (IIO->ErrBuf == NULL) || (IIO->AttrBuf == NULL))
- {
- IIO_Delete(IIO);
- IIO = NULL;
- }
- else {
- IIO->Delete = IIO_Delete;
- IIO->Read = IIO_Read;
- IIO->Write = IIO_Write;
- IIO->Echo = IIO_Echo;
- }
- // Initialize Termio member
- TempBuf = &IIO->Termio.c_cc[0];
- TempBuf[0] = 8; // Default length for TABs
- for(i=1; i < NCCS; ++i) {
- TempBuf[i] = _POSIX_VDISABLE;
- }
- TempBuf[VMIN] = 0;
- TempBuf[VTIME] = 0;
- IIO->Termio.c_ispeed = B115200;
- IIO->Termio.c_ospeed = B115200;
- IIO->Termio.c_iflag = ICRNL;
- IIO->Termio.c_oflag = OPOST | ONLCR | ONOCR | ONLRET;
- IIO->Termio.c_cflag = 0;
- IIO->Termio.c_lflag = ECHO | ECHONL;
- }
- return IIO;
-}
diff --git a/StdLib/LibC/Uefi/InteractiveIO/IIO.inf b/StdLib/LibC/Uefi/InteractiveIO/IIO.inf
deleted file mode 100644
index dd21e85b13..0000000000
--- a/StdLib/LibC/Uefi/InteractiveIO/IIO.inf
+++ /dev/null
@@ -1,51 +0,0 @@
-## @file
-# Interactive I/O Library.
-#
-# Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
-# This program and the accompanying materials are licensed and made available
-# under the terms and conditions of the BSD License which accompanies this
-# distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LibIIO
- FILE_GUID = c1e9fffb-5557-4cb5-a5f5-1fbd902a74ed
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibIIO
-
-#
-# VALID_ARCHITECTURES = IA32 X64
-#
-
-[Sources]
- IIO.c
- NonCanonRead.c
- CanonRead.c
- TerminalFunctions.c
- IIOutilities.c
- IIOwrite.c
- IIOecho.c
-
-[Packages]
- MdePkg/MdePkg.dec
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
-
-[LibraryClasses]
- BaseLib
- BaseMemoryLib
- MemoryAllocationLib
- LibC
- LibWchar
- LibContainer
-
-[Protocols]
- gEfiSimpleTextInProtocolGuid ## CONSUMES
- gEfiSimpleTextOutProtocolGuid ## CONSUMES
diff --git a/StdLib/LibC/Uefi/InteractiveIO/IIOecho.c b/StdLib/LibC/Uefi/InteractiveIO/IIOecho.c
deleted file mode 100644
index 14369de95b..0000000000
--- a/StdLib/LibC/Uefi/InteractiveIO/IIOecho.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/** @file
- Echo characters to an Interactive I/O Output device.
-
- The functions assume that isatty() is TRUE at the time they are called.
- Since the UEFI console is a WIDE character device, these functions do all
- processing using wide characters.
-
- It is the responsibility of the caller, or higher level function, to perform
- any necessary translation between wide and narrow characters.
-
- Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <sys/termios.h>
-#include <Device/IIO.h>
-#include "IIOutilities.h"
-#include "IIOechoCtrl.h"
-
-/** Echo one character to an IIO file.
-
- If character InCh is a special "echo control" character, process it and output
- the resultant character(s), if any. Otherwise pass the character on to the
- IIO_WriteOne() function which performs generic output processing, if needed.
-
- @param[in] filp Pointer to an open IIO file's file descriptor structure.
- @param[in] InCh The wide character to be echoed.
- @param[in] EchoIsOK A flag indicating whether echoing is appropriate for this
- device or not.
-
- @retval -1 The filp argument does not refer to an IIO device.
- Global value errno is set to EINVAL.
- @retval >=0 The number of characters actually output.
-
- @sa IIO_WriteOne
-**/
-ssize_t
-IIO_EchoOne (
- struct __filedes *filp,
- wchar_t InCh,
- BOOLEAN EchoIsOK
- )
-{
- cIIO *This;
- cFIFO *OutBuf;
- cFIFO *InBuf;
- UINT8 *AttrBuf;
- ssize_t NumEcho;
- tcflag_t LFlags;
- UINT32 AttrDex;
- int i;
-
- NumEcho = -1;
- This = filp->devdata;
-
- if(This != NULL) {
- LFlags = This->Termio.c_lflag;
- OutBuf = This->OutBuf;
- InBuf = This->InBuf;
- AttrBuf = This->AttrBuf;
- AttrDex = InBuf->GetWDex(InBuf);
-
- switch(InCh) {
- case IIO_ECHO_DISCARD:
- // Do not buffer or otherwise process
- NumEcho = 0;
- break;
-
- case IIO_ECHO_ERASE:
- // Delete last character from InBuf
- if(!InBuf->IsEmpty(InBuf)) {
- (void)InBuf->Truncate(InBuf);
-
- // Erase screen character(s) based on Attrib value
- if(LFlags & ECHO) {
- AttrDex = (UINT32)ModuloDecrement(AttrDex, InBuf->NumElements);
- NumEcho = AttrBuf[AttrDex];
- for(i = 0; i < NumEcho; ++i) {
- (void)IIO_WriteOne(filp, OutBuf, CHAR_BACKSPACE);
- }
- if(LFlags & ECHOE) {
- for(i = 0; i < NumEcho; ++i) {
- (void)IIO_WriteOne(filp, OutBuf, L' ');
- }
- for(i = 0; i < NumEcho; ++i) {
- (void)IIO_WriteOne(filp, OutBuf, CHAR_BACKSPACE);
- }
- }
- }
- else {
- NumEcho = 0;
- }
- }
- break;
-
- case IIO_ECHO_KILL:
- // Flush contents of InBuf and OutBuf
- InBuf->Flush(InBuf, (size_t)-1);
- OutBuf->Flush(OutBuf, (size_t)-1);
-
- // Erase characters from screen.
- if(LFlags & ECHOE) {
- NumEcho = IIO_CursorDelta(This, &This->InitialXY, &This->CurrentXY);
- for(i = 0; i < NumEcho; ++i) {
- (void)IIO_WriteOne(filp, OutBuf, L' ');
- }
- }
- break;
-
- default:
- // Add character to input buffer
- (void)InBuf->Write(InBuf, &InCh, 1);
-
- NumEcho = 0; // In case echoing is not enabled or OK
- // If echoing is OK and enabled, "echo" character using IIO_WriteOne
- if( EchoIsOK &&
- ( (LFlags & ECHO) ||
- ((LFlags & ECHONL) && (InCh == CHAR_LINEFEED))))
- {
- NumEcho = IIO_WriteOne(filp, OutBuf, InCh);
- }
- AttrBuf[AttrDex] = (UINT8)NumEcho;
- break;
- }
- }
- else {
- errno = EINVAL;
- }
- return NumEcho;
-}
diff --git a/StdLib/LibC/Uefi/InteractiveIO/IIOechoCtrl.h b/StdLib/LibC/Uefi/InteractiveIO/IIOechoCtrl.h
deleted file mode 100644
index 068a7203ef..0000000000
--- a/StdLib/LibC/Uefi/InteractiveIO/IIOechoCtrl.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/** @file
- Constants and declarations for the Echo function.
-
- Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _IIO_ECHO_CTRL_H
-#define _IIO_ECHO_CTRL_H
-#include <sys/termios.h>
-
-__BEGIN_DECLS
-
-/* These constants are assigned values within the Unicode Private Use range.
- The value of IIO_ECHO_MIN must be adjusted to ensure that IIO_ECHO_MAX
- never exceeds the value of (TtyFunKeyMin - 1).
-*/
-typedef enum {
- IIO_ECHO_MIN = (TtySpecKeyMin),
- IIO_ECHO_DISCARD = IIO_ECHO_MIN, // Ignore this character completely
- IIO_ECHO_ERASE, // Erase previous character
- IIO_ECHO_KILL, // Kill the entire line
- IIO_ECHO_MAX
-} IioEchoCtrl;
-
-__END_DECLS
-
-#endif /* _IIO_ECHO_CTRL_H */
diff --git a/StdLib/LibC/Uefi/InteractiveIO/IIOutilities.c b/StdLib/LibC/Uefi/InteractiveIO/IIOutilities.c
deleted file mode 100644
index 2e61cd1e80..0000000000
--- a/StdLib/LibC/Uefi/InteractiveIO/IIOutilities.c
+++ /dev/null
@@ -1,290 +0,0 @@
-/** @file
- Utilities for Interactive I/O Functions.
-
- The functions assume that isatty() is TRUE at the time they are called.
-
- Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Protocol/SimpleTextOut.h>
-
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <sys/syslimits.h>
-#include <sys/termios.h>
-#include <Device/IIO.h>
-#include <MainData.h>
-#include "IIOutilities.h"
-
-/** Get the low-level UEFI protocol associated with an open file.
-
- @param[in] fd File descriptor for an open file.
- @param[out] filp NULL, or a pointer to where a pointer to the file's
- file descriptor structure is to be stored.
-
- @return Returns NULL if fd is not a valid file descriptor, otherwise
- a pointer to the file's associated UEFI protocol is returned.
-**/
-void *
-EFIAPI
-IIO_GetDeviceProto (
- int fd,
- struct __filedes **filp
- )
-{
- void *Proto;
- ConInstance *Stream;
- struct __filedes *pfil;
-
- Proto = NULL;
- if(ValidateFD( fd, VALID_OPEN)) {
- pfil = &gMD->fdarray[fd];
- Stream = BASE_CR(pfil->f_ops, ConInstance, Abstraction);
- Proto = (void *)Stream->Dev;
- if(filp != NULL) {
- *filp = pfil;
- }
- }
- return Proto;
-}
-
-/** Get a character either from the input buffer or from hardware.
-
- @param[in] filp Pointer to a file descriptor structure.
- @param[in] First Set to TRUE to identify the initial read.
-
- @return Returns a character read from either the input buffer
- or from the open file (device) identified by filp.
- A return value of WEOF indicates an error has occurred.
-**/
-wint_t
-EFIAPI
-IIO_GetInChar (
- struct __filedes *filp,
- BOOLEAN First
-)
-{
- cIIO *This;
- cFIFO *InBuf;
- size_t Status;
- ssize_t NumRead;
- wint_t RetVal;
- wchar_t InChar;
-
- static size_t BufCnt;
-
- This = filp->devdata;
- InBuf = This->InBuf;
-
- NumRead = -1;
- InChar = 0;
- if(First) {
- BufCnt = InBuf->Count(InBuf, AsElements);
- }
- if(BufCnt > 0) {
- Status = InBuf->Read(InBuf, &InChar, 1);
- if (Status > 0) {
- --BufCnt;
- NumRead = 1;
- }
- }
- else {
- NumRead = filp->f_ops->fo_read(filp, &filp->f_offset, sizeof(wchar_t), &InChar);
- }
- if(NumRead <= 0) {
- RetVal = WEOF;
- }
- else {
- RetVal = (wint_t)InChar;
- }
- return RetVal;
-}
-
-/** Get the current cursor position.
-
- @param[in] fd File descriptor for an open file.
- @param[out] Column Pointer to where the current cursor column is to be stored.
- @param[out] Row Pointer to where the current cursor row is to be stored.
-
- @retval -1 fd is not an IIO output device.
- @retval 0 Cursor position retrieved, Cursor is Not Visible.
- @retval 1 Cursor position retrieved, Cursor is Visible.
-**/
-int
-EFIAPI
-IIO_GetCursorPosition (
- int fd,
- UINT32 *Column,
- UINT32 *Row
- )
-{
- EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *Proto;
- struct __filedes *pStdOut;
- int RetVal;
-
- RetVal = -1;
-
- Proto = (EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *)IIO_GetDeviceProto(fd, &pStdOut);
- if(Proto != NULL) {
- if(((pStdOut->f_iflags & _S_ITTY) != 0) && // file is a TTY
- ((pStdOut->Oflags & O_ACCMODE) != 0)) // and it is open for output
- {
- // fd is for a TTY or "Interactive IO" device
- *Column = Proto->Mode->CursorColumn;
- *Row = Proto->Mode->CursorRow;
- if(Proto->Mode->CursorVisible) {
- RetVal = 1;
- }
- else {
- RetVal = 0;
- }
- }
- }
- return RetVal;
-}
-
-/** Set the cursor position.
-
- @param[in] filp Pointer to the output device's file descriptor structure.
- @param[in] StartXY Pointer to a cursor coordinate (XY) structure indicating
- the desired coordinate to move the cursor to.
-
- @retval -1 fd is not an IIO output device
- @retval 0 Cursor position set successfully.
-**/
-int
-EFIAPI
-IIO_SetCursorPosition (
- struct __filedes *filp,
- CURSOR_XY *CursorXY
- )
-{
- EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *Proto;
- cIIO *This;
- EFI_STATUS Status;
- int RetVal;
-
- RetVal = -1;
-
- This = filp->devdata;
- Proto = (EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *)IIO_GetDeviceProto(filp->MyFD, NULL);
- if(Proto != NULL) {
- if(((filp->f_iflags & _S_ITTY) != 0) && // file is a TTY
- ((filp->Oflags & O_ACCMODE) != 0)) // and it is open for output
- {
- // fd is for a TTY or "Interactive IO" device
- Status = Proto->SetCursorPosition(Proto, CursorXY->Column, CursorXY->Row);
- if(Status == EFI_SUCCESS) {
- This->CurrentXY.Column = CursorXY->Column;
- This->CurrentXY.Row = CursorXY->Row;
- RetVal = 0;
- }
- }
- }
- return RetVal;
-}
-
-/** Get Output screen size and mode.
-
- @param[in] fd File descriptor of the output device.
- @param[out] Col Pointer to where to store the MAX Column, or NULL.
- @param[out] Row Pointer to where to store the MAX Row, or NULL.
-
- @retval <0 An error occurred. The reason is in errno and EFIerrno.
- * EIO UEFI QueryMode failed
- * ENOTTY fd does not refer to an interactive output device
- @retval >=0 Current output mode
-**/
-int
-EFIAPI
-IIO_GetOutputSize (
- int fd,
- UINTN *Col,
- UINTN *Row
-)
-{
- EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *Proto;
- struct __filedes *pStdOut;
- EFI_STATUS Status;
- UINTN TempCol;
- UINTN TempRow;
- UINTN TempMode;
- int RetVal;
-
- RetVal = -1;
-
- Proto = (EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *)IIO_GetDeviceProto(fd, &pStdOut);
- if(Proto != NULL) {
- if(((pStdOut->f_iflags & _S_ITTY) != 0) && // file is a TTY
- ((pStdOut->Oflags & O_ACCMODE) != 0)) // and it is open for output
- {
- // fd is for a TTY or "Interactive IO" device
- TempMode = Proto->Mode->Mode;
- Status = Proto->QueryMode(Proto, TempMode, &TempCol, &TempRow);
- if(EFI_ERROR(Status)) {
- EFIerrno = Status;
- errno = EIO;
- }
- else {
- *Col = TempCol;
- *Row = TempRow;
- RetVal = (int)TempMode;
- }
- }
- else {
- errno = ENOTTY;
- }
- }
- return RetVal;
-}
-
-/** Calculate the number of character positions between two X/Y coordinate pairs.
-
- Using the current output device characteristics, calculate the number of
- characters between two coordinates. It is assumed that EndXY points to
- an output location that occurs after StartXY.
-
- RowDelta is the computed difference between the ending and starting rows.
- If RowDelta < 0, then EndXY is NOT after StartXY, so assert.
-
- ColumnDelta is the computed number of character positions (columns) between
- the starting position and the ending position. If ColumnDelta is < 0,
- then EndXY is NOT after StartXY, so assert.
-
- @param[in] This Pointer to the IIO instance to be examined.
- @param[in] StartXY Pointer to the starting coordinate pair.
- @param[in] EndXY Pointer to the ending coordinate pair.
-
- @return Returns the difference between the starting and ending coordinates.
- The return value is positive if the coordinates contained in EndXY
- are larger than StartXY, otherwise the return value is negative.
-**/
-int
-EFIAPI
-IIO_CursorDelta (
- cIIO *This,
- CURSOR_XY *StartXY,
- CURSOR_XY *EndXY
-)
-{
- int ColumnDelta;
- int RowDelta;
-
- RowDelta = (int)EndXY->Row - (int)StartXY->Row;
-
- assert(RowDelta >= 0); // assert if EndXY is NOT after StartXY
-
- ColumnDelta = (int)((This->MaxColumn * RowDelta) + EndXY->Column);
- ColumnDelta -= (int)StartXY->Column;
-
- return ColumnDelta;
-}
diff --git a/StdLib/LibC/Uefi/InteractiveIO/IIOutilities.h b/StdLib/LibC/Uefi/InteractiveIO/IIOutilities.h
deleted file mode 100644
index 778b612ea5..0000000000
--- a/StdLib/LibC/Uefi/InteractiveIO/IIOutilities.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/** @file
- Utilities for Interactive I/O Functions.
-
- The functions assume that isatty() is TRUE at the time they are called.
-
- Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#ifndef _IIO_UTILITIES_H
-#define _IIO_UTILITIES_H
-
-#include <sys/EfiSysCall.h>
-
-__BEGIN_DECLS
-
-/** Get the low-level UEFI protocol associated with an open file.
-
- @param[in] fd File descriptor for an open file.
- @param[out] filp NULL, or a pointer to where a pointer to the file's
- file descriptor structure is to be stored.
-
- @return Returns NULL if fd is not a valid file descriptor, otherwise
- a pointer to the file's associated UEFI protocol is returned.
-**/
-void *
-EFIAPI
-IIO_GetDeviceProto (
- int fd,
- struct __filedes **filp // Optional - filp == NULL if unused
- );
-
-/** Get a character either from the input buffer or from hardware.
-
- @param[in] filp Pointer to a file descriptor structure.
- @param[in] First Set to TRUE to identify the initial read.
-
- @return Returns a character read from either the input buffer
- or from the open file (device) identified by filp.
- A return value of WEOF indicates an error has occurred.
-**/
-wint_t
-EFIAPI
-IIO_GetInChar (
- struct __filedes *filp,
- BOOLEAN First
- );
-
-/** Get the current cursor position.
-
- @param[in] fd File descriptor for an open file.
- @param[out] Column Pointer to where the current cursor column is to be stored.
- @param[out] Row Pointer to where the current cursor row is to be stored.
-
- @retval -1 fd is not an IIO output device.
- @retval 0 Cursor position retrieved, Cursor is Not Visible.
- @retval 1 Cursor position retrieved, Cursor is Visible.
-**/
-int
-EFIAPI
-IIO_GetCursorPosition (
- int fd,
- UINT32 *Column,
- UINT32 *Row
- );
-
-/** Set the cursor position.
-
- @param[in] filp Pointer to the output device's file descriptor structure.
- @param[in] StartXY Pointer to a cursor coordinate (XY) structure indicating
- the desired coordinate to move the cursor to.
-
- @retval -1 fd is not an IIO output device
- @retval 0 Cursor position set successfully.
-**/
-int
-EFIAPI
-IIO_SetCursorPosition (
- struct __filedes *filp,
- CURSOR_XY *StartXY
- );
-
-/** Get Output screen size and mode.
-
- @param[in] fd File descriptor of the output device.
- @param[out] Col Pointer to where to store the MAX Column, or NULL.
- @param[out] Row Pointer to where to store the MAX Row, or NULL.
-
- @retval <0 An error occurred. The reason is in errno and EFIerrno.
- * EIO UEFI QueryMode failed
- * ENOTTY fd does not refer to an interactive output device
- @retval >=0 Current output mode
-**/
-int
-EFIAPI
-IIO_GetOutputSize (
- int fd,
- UINTN *Col,
- UINTN *Row
-);
-
-/** Calculate the number of character positions between two X/Y coordinate pairs.
-
- Using the current output device characteristics, calculate the number of
- characters between two coordinates.
-
- @param[in] This Pointer to the IIO instance to be examined.
- @param[in] StartXY Pointer to the starting coordinate pair.
- @param[in] EndXY Pointer to the ending coordinate pair.
-
- @return Returns the difference between the starting and ending coordinates.
- The return value is positive if the coordinates contained in EndXY
- are larger than StartXY, otherwise the return value is negative.
-**/
-int
-EFIAPI
-IIO_CursorDelta (
- cIIO *This,
- CURSOR_XY *StartXY,
- CURSOR_XY *EndXY
- );
-
-__END_DECLS
-#endif /* _IIO_UTILITIES_H */
diff --git a/StdLib/LibC/Uefi/InteractiveIO/IIOwrite.c b/StdLib/LibC/Uefi/InteractiveIO/IIOwrite.c
deleted file mode 100644
index ef52cc890e..0000000000
--- a/StdLib/LibC/Uefi/InteractiveIO/IIOwrite.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/** @file
- Write to an Interactive I/O Output device.
-
- The functions assume that isatty() is TRUE at the time they are called.
- Since the UEFI console is a WIDE character device, these functions do all
- processing using wide characters.
-
- It is the responsibility of the caller, or higher level function, to perform
- any necessary translation between wide and narrow characters.
-
- Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-
-#include <LibConfig.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <sys/termios.h>
-#include <Device/IIO.h>
-
-static wchar_t Spaces[] = L" "; // Spaces for expanding TABs
-
-#define MAX_TAB_WIDTH ((int)(sizeof(Spaces) / sizeof(wchar_t)) - 1)
-
-#define MAX_EXPANSION 3
-
-/** Process and buffer one character for output.
-
- @param[in] filp Pointer to a file descriptor structure.
- @param[out] OBuf Pointer to the Output Buffer FIFO.
- @param[in] InCh The wide character to process.
-
- @retval <0 An error occurred. Reason is in errno.
- * EINVAL The pointer to the IIO object is NULL.
- * ENOSPC The OBuf FIFO is full.
-
- @retval 0 A character was input but not placed in the output buffer.
-
- @retval >0 The number of characters buffered. Normally 1, or 2.
- If a character is discarded because of flag settings, a
- 1 will be returned.
-**/
-ssize_t
-IIO_WriteOne(struct __filedes *filp, cFIFO *OBuf, wchar_t InCh)
-{
- cIIO *This;
- struct termios *Termio;
- tcflag_t OFlag;
- ssize_t RetVal;
- wchar_t wc[MAX_EXPANSION]; // Sub-buffer for conversions
- wchar_t *wcb; // Pointer to either wc or spaces
- int numW = 0; // Wide characters placed in OBuf
- INT32 TabWidth; // Each TAB expands into this number of spaces
- UINT32 CurColumn; // Current cursor column on the screen
- UINT32 CurRow; // Current cursor row on the screen
- UINT32 PrevColumn; // Previous column. Used to detect wrapping.
- UINT32 AdjColumn; // Current cursor column on the screen
-
- RetVal = -1;
- wcb = wc;
- This = filp->devdata;
- if((This != NULL) && (OBuf->FreeSpace(OBuf, AsElements) >= MAX_EXPANSION)) {
- Termio = &This->Termio;
- OFlag = Termio->c_oflag;
- TabWidth = (INT32)This->Termio.c_cc[VTABLEN];
- if(TabWidth > MAX_TAB_WIDTH) {
- TabWidth = MAX_TAB_WIDTH;
- }
- CurColumn = This->CurrentXY.Column;
- CurRow = This->CurrentXY.Row;
-
- numW = 1; // The majority of characters buffer one character
- AdjColumn = 0;
- if(OFlag & OPOST) {
- /* Perform output processing */
- switch(InCh) {
- case CHAR_TAB: //{{
- if(OFlag & OXTABS) {
- if(TabWidth > 0) {
- int SpaceIndex;
-
- SpaceIndex = CurColumn % TabWidth; // Number of spaces after a Tab Stop
- numW = TabWidth - SpaceIndex; // Number of spaces to the next Tab Stop
- SpaceIndex = MAX_TAB_WIDTH - numW; // Index into the Spaces array
- wcb = &Spaces[SpaceIndex]; // Point to the appropriate number of spaces
- }
- else {
- wc[0] = L' ';
- }
- AdjColumn = numW;
- }
- else {
- wc[0] = InCh; // Send the TAB itself - assumes that it does not move cursor.
- }
- break; //}}
-
- case CHAR_CARRIAGE_RETURN: //{{
- if((OFlag & OCRNL) == 0) {
- if((OFlag & ONLRET) == 0) {
- numW = 0; /* Discard the CR */
- // Cursor doesn't move
- }
- else {
- wc[0] = CHAR_CARRIAGE_RETURN;
- CurColumn = 0;
- }
- break;
- }
- else {
- InCh = CHAR_LINEFEED;
- } //}}
- // Fall through to the NL case
- case CHAR_LINEFEED: //{{
- if(OFlag & ONLCR) {
- wc[0] = CHAR_CARRIAGE_RETURN;
- wc[1] = CHAR_LINEFEED;
- numW = 2;
- CurColumn = 0;
- }
- break; //}}
-
- case CHAR_BACKSPACE: //{{
- if(CurColumn > 0) {
- wc[0] = CHAR_BACKSPACE;
- CurColumn = (UINT32)ModuloDecrement(CurColumn, (UINT32)This->MaxColumn);
- }
- else {
- numW = 0; // Discard the backspace if in column 0
- }
- break; //}}
-
- case CHAR_EOT: //{{
- if(OFlag & ONOEOT) {
- numW = 0; // Discard the EOT character
- // Cursor doesn't move
- break;
- } //}}
- // Fall through to default in order to potentially output "^D"
- default: //{{
- if((InCh >= 0) && (InCh < L' ')) {
- // InCh contains a control character
- if(OFlag & OCTRL) {
- wc[1] = InCh + L'@';
- wc[0] = L'^';
- numW = 2;
- AdjColumn = 2;
- }
- else {
- numW = 0; // Discard. Not a UEFI supported control character.
- }
- }
- else {
- // Regular printing character
- wc[0] = InCh;
- AdjColumn = 1;
- }
- break; //}}
- }
- if(numW < MAX_EXPANSION) {
- wc[numW] = 0; // Terminate the sub-buffer
- }
- if(AdjColumn != 0) {
- // Adjust the cursor position
- PrevColumn = CurColumn;
- CurColumn = ModuloAdd(PrevColumn, AdjColumn, (UINT32)This->MaxColumn);
- if(CurColumn < PrevColumn) {
- // We must have wrapped, so we are on the next Row
- ++CurRow;
- if(CurRow >= This->MaxRow) {
- // The screen has scrolled so need to adjust Initial location.
- --This->InitialXY.Row; // Initial row has moved up one
- CurRow = (UINT32)(This->MaxRow - 1); // We stay on the bottom row
- }
- }
- }
- This->CurrentXY.Column = CurColumn;
- This->CurrentXY.Row = CurRow;
- }
- else {
- // Output processing disabled -- RAW output mode
- wc[0] = InCh;
- wc[1] = 0;
- }
- // Put the character(s) into the output buffer
- if(numW > 0) {
- (void)OBuf->Write(OBuf, (const void *)wcb, (size_t)numW);
- }
- RetVal = numW;
- }
- else {
- if(This == NULL) {
- errno = EINVAL;
- }
- else {
- errno = ENOSPC;
- }
- }
- return RetVal;
-}
diff --git a/StdLib/LibC/Uefi/InteractiveIO/NonCanonRead.c b/StdLib/LibC/Uefi/InteractiveIO/NonCanonRead.c
deleted file mode 100644
index aab81cdaa8..0000000000
--- a/StdLib/LibC/Uefi/InteractiveIO/NonCanonRead.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/** @file
- NonCanonical Interactive Input Function.
-
- The functions assume that isatty() is TRUE at the time they are called.
- If _S_IWTTY is set, the device returns WIDE characters.
-
- Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <LibConfig.h>
-
-#include <sys/syslimits.h>
-#include <sys/termios.h>
-#include <Containers/Fifo.h>
-#include <Device/IIO.h>
-
-/** Perform a noncanonical read of input.
-
- @param[in] filp Pointer to a file descriptor structure.
- @param[in] BufferSize Maximum number of bytes to return.
-
- @retval -1 An error has occurred. Reason in errno.
- @retval -1 No data returned. None was ready.
- @retval >0 The number of elements returned
-**/
-ssize_t
-IIO_NonCanonRead (
- struct __filedes *filp
- )
-{
- cIIO *This;
- cFIFO *InBuf;
- struct termios *Termio;
- ssize_t NumRead;
- cc_t tioMin;
- cc_t tioTime;
- UINT32 InputType;
- wchar_t InChar; // Intermediate character buffer
-
- NumRead = -1;
- InChar = 0; // Initialize so compilers don't complain.
- This = filp->devdata;
- Termio = &This->Termio;
- InBuf = This->InBuf;
- tioMin = Termio->c_cc[VMIN];
- tioTime = Termio->c_cc[VTIME];
-
- if(tioMin >= MAX_INPUT) {
- tioMin = MAX_INPUT;
- }
- /* There are four types of processing that may be done, based on
- the values of tioMin and tioTime.
- Min Time Type
- --- ---- ----
- 0 0 0 Return buffer contents or 1 new char
- 0 >0 1 Return 0 or 1 character depending on timeout
- >0 0 2 Buffer Min chars. Return BufferSize chars.
- >0 >0 3 Return up to Min chars. Unless the inter-byte timer expires.
-
- Currently, only type 0 is implemented.
- */
- InputType = 0;
- if(tioMin != 0) InputType = 2;
- if(tioTime != 0) ++InputType;
- //switch(InputType) {
- // case 0:
- if(InBuf->IsEmpty(InBuf)) {
- NumRead = filp->f_ops->fo_read(filp, &filp->f_offset, sizeof(wchar_t), &InChar);
- if(NumRead > 0) {
- (void) InBuf->Write(InBuf, &InChar, 1); // Buffer the character
- }
- }
- // break;
- // case 1:
- // break;
- // case 2:
- // break;
- // case 3:
- // break;
- //}
- return NumRead;
-}
diff --git a/StdLib/LibC/Uefi/InteractiveIO/TerminalFunctions.c b/StdLib/LibC/Uefi/InteractiveIO/TerminalFunctions.c
deleted file mode 100644
index 807ab1fd4c..0000000000
--- a/StdLib/LibC/Uefi/InteractiveIO/TerminalFunctions.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/** @file
- "Terminal" Control functions for Interactive IO.
-
- Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/BaseMemoryLib.h>
-
-#include <LibConfig.h>
-
-#include <errno.h>
-#include <sys/termios.h>
-#include <Device/IIO.h>
-#include <MainData.h>
-
-/** Get input baud rate.
-
- Extracts the input baud rate from the termios structure pointed to by the
- pTermios argument.
-
- @param[in] pTermios A pointer to the termios structure from which to extract
- the input baud rate.
-
- @return The value of the input speed is returned exactly as it is contained
- in the termios structure, without interpretation.
-**/
-speed_t
-cfgetispeed (
- const struct termios *pTermios
- )
-{
- return pTermios->c_ispeed;
-}
-
-/** Get output baud rate.
-
- Extracts the output baud rate from the termios structure pointed to by the
- pTermios argument.
-
- @param[in] pTermios A pointer to the termios structure from which to extract
- the output baud rate.
-
- @return The value of the output speed is returned exactly as it is contained
- in the termios structure, without interpretation.
-**/
-speed_t
-cfgetospeed (
- const struct termios *pTermios
- )
-{
- return pTermios->c_ospeed;
-}
-
-/** Set input baud rate.
-
- Replaces the input baud rate, in the termios structure pointed to by the
- pTermios argument, with the value of NewSpeed.
-
- @param[out] pTermios A pointer to the termios structure into which to set
- the input baud rate.
- @param[in] NewSpeed The new input baud rate.
-
- @retval 0 The operation completed successfully.
- @retval -1 An error occured and errno is set to indicate the error.
- * EINVAL - The value of NewSpeed is outside the range of
- possible speed values as specified in <sys/termios.h>.
-**/
-int
-cfsetispeed (
- struct termios *pTermios,
- speed_t NewSpeed
- )
-{
- int RetVal;
-
- if(NewSpeed < B921600) {
- pTermios->c_ispeed = NewSpeed;
- RetVal = 0;
- }
- else {
- RetVal = -1;
- errno = EINVAL;
- }
- return RetVal;
-}
-
-/** Set output baud rate.
-
- Replaces the output baud rate, in the termios structure pointed to by the
- pTermios argument, with the value of NewSpeed.
-
- @param[out] pTermios A pointer to the termios structure into which to set
- the output baud rate.
- @param[in] NewSpeed The new output baud rate.
-
- @retval 0 The operation completed successfully.
- @retval -1 An error occured and errno is set to indicate the error.
- * EINVAL - The value of NewSpeed is outside the range of
- possible speed values as specified in <sys/termios.h>.
-**/
-int
-cfsetospeed (
- struct termios *pTermios,
- speed_t NewSpeed
- )
-{
- int RetVal;
-
- if(NewSpeed < B921600) {
- pTermios->c_ospeed = NewSpeed;
- RetVal = 0;
- }
- else {
- RetVal = -1;
- errno = EINVAL;
- }
- return RetVal;
-}
-
-/** Get the parameters associated with an interactive IO device.
-
- Get the parameters associated with the device referred to by
- fd and store them into the termios structure referenced by pTermios.
-
- @param[in] fd The file descriptor for an open interactive IO device.
- @param[out] pTermios A pointer to a termios structure into which to store
- attributes of the interactive IO device.
-
- @retval 0 The operation completed successfully.
- @retval -1 An error occured and errno is set to indicate the error.
- * EBADF - The fd argument is not a valid file descriptor.
- * ENOTTY - The file associated with fd is not an interactive IO device.
-**/
-int
-tcgetattr (
- int fd,
- struct termios *pTermios
- )
-{
- cIIO *IIO;
- int RetVal;
- struct __filedes *filp;
- struct termios *Termio;
-
- RetVal = 0;
- if(ValidateFD( fd, VALID_OPEN)) {
- filp = &gMD->fdarray[fd];
-
- if((filp->f_iflags & _S_ITTY) != 0) {
- // fd is for a TTY or "Interactive IO" device
- IIO = (cIIO *)filp->devdata;
- Termio = &IIO->Termio;
- (void)CopyMem((void *)pTermios, (const void *)Termio, sizeof(struct termios));
- }
- else {
- errno = ENOTTY;
- RetVal = -1;
- }
- }
- else {
- errno = EBADF;
- RetVal = -1;
- }
- return RetVal;
-}
-
-/** Set the parameters associated with an interactive IO device.
-
- Set the parameters associated with the device referred to by
- fd to the values in the termios structure referenced by pTermios.
-
- Behavior is modified by the value of the OptAct parameter:
- * TCSANOW: The change shall occur immediately.
- * TCSADRAIN: The change shall occur after all output written to fd is
- transmitted. This action should be used when changing parameters which
- affect output.
- * TCSAFLUSH: The change shall occur after all output written to fd is
- transmitted, and all input so far received but not read shall be
- discarded before the change is made.
-
- @param[in] fd The file descriptor for an open interactive IO device.
- @param[in] OptAct Currently has no effect.
- @param[in] pTermios A pointer to a termios structure into which to retrieve
- attributes to set in the interactive IO device.
-
- @retval 0 The operation completed successfully.
- @retval -1 An error occured and errno is set to indicate the error.
- * EBADF - The fd argument is not a valid file descriptor.
- * ENOTTY - The file associated with fd is not an interactive IO device.
-**/
-int
-tcsetattr (
- int fd,
- int OptAct, // Currently ignored
- const struct termios *pTermios
- )
-{
- cIIO *IIO;
- int RetVal;
- struct __filedes *filp;
- struct termios *Termio;
-
- RetVal = 0;
- if(ValidateFD( fd, VALID_OPEN)) {
- filp = &gMD->fdarray[fd];
-
- if((filp->f_iflags & _S_ITTY) != 0) {
- // fd is for a TTY or "Interactive IO" device
- IIO = (cIIO *)filp->devdata;
- Termio = &IIO->Termio;
- (void)CopyMem((void *)Termio, (const void *)pTermios, sizeof(struct termios));
- }
- else {
- errno = ENOTTY;
- RetVal = -1;
- }
- }
- else {
- errno = EBADF;
- RetVal = -1;
- }
- return RetVal;
-}
-
-/** Transmit pending output.
-
- Function is not yet implemented for UEFI.
-
- @param[in] fd Ignored
-
- @retval -1 This function is not yet supported. errno is set to ENOTSUP.
-**/
-int
-tcdrain (int fd)
-{
- errno = ENOTSUP;
- return -1;
-}
-
-/** Suspend or restart the transmission or reception of data.
-
- This function will suspend or resume transmission or reception of data on
- the file referred to by fd, depending on the value of Action.
-
- Function is not yet implemented for UEFI.
-
- @param[in] fd Ignored
- @param[in] Action Ignored
-
- @retval -1 This function is not yet supported. errno is set to ENOTSUP.
-**/
-int
-tcflow (
- int fd,
- int Action)
-{
- errno = ENOTSUP;
- return -1;
-}
-
-/** Discard non-transmitted output data, non-read input data, or both.
-
- Function is not yet implemented for UEFI.
-
- @param[in] fd Ignored
- @param[in] QueueSelector Ignored
-
- @retval -1 This function is not yet supported. errno is set to ENOTSUP.
-**/
-int
-tcflush (
- int fd,
- int QueueSelector)
-{
- errno = ENOTSUP;
- return -1;
-}
-
diff --git a/StdLib/LibC/Uefi/StubFunctions.c b/StdLib/LibC/Uefi/StubFunctions.c
deleted file mode 100644
index 806cf4ac2b..0000000000
--- a/StdLib/LibC/Uefi/StubFunctions.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/** @file
- Implement the invalid functions to return failures.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-#include <sys/featuretest.h>
-#include <namespace.h>
-#include <stdio.h>
-#include <pwd.h>
-#include <errno.h>
-
-struct passwd *
-getpwuid (uid_t uid)
-{
- errno = EPERM;
- return NULL;
-}
-
-char *
-getlogin (void)
-{
- errno = EPERM;
- return NULL;
-}
-
-struct passwd *
-getpwnam (const char *name)
-{
- errno = EPERM;
- return NULL;
-}
-
-uid_t
-getuid (void)
-{
- return 0;
-}
-
-pid_t
-getpid(void)
-{
- return 0;
-}
-
-pid_t
-fork (void)
-{
- errno = EPERM;
- return (-1);
-}
-
-int
-chmod (const char *c, mode_t m)
-{
- errno = EPERM;
- return (-1);
-}
-
-pid_t
-wait(int *stat_loc) {
- return 0;
-}
-
-FILE *
-popen (const char *cmd, const char *type)
-{
- errno = EPERM;
- return NULL;
-}
-
-int
-pclose (FILE *stream)
-{
- errno = EPERM;
- return -1;
-}
-
-mode_t
-umask(mode_t cmask)
-{
- return (mode_t)0;
-}
diff --git a/StdLib/LibC/Uefi/SysCalls.c b/StdLib/LibC/Uefi/SysCalls.c
deleted file mode 100644
index a2b627bd12..0000000000
--- a/StdLib/LibC/Uefi/SysCalls.c
+++ /dev/null
@@ -1,1437 +0,0 @@
-/** @file
- EFI versions of NetBSD system calls.
-
- Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#include <Uefi.h>
-#include <Library/UefiLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/BaseLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/ShellLib.h>
-
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <sys/ansi.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-#include <sys/poll.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-#include <sys/syslimits.h>
-#include <sys/filio.h>
-#include <Efi/SysEfi.h>
-#include <unistd.h>
-#include <kfile.h>
-#include <Device/Device.h>
-#include <Device/IIO.h>
-#include <MainData.h>
-#include <extern.h>
-
-/* EFI versions of BSD system calls used in stdio */
-
-/* Validate that fd refers to a valid file descriptor.
- IsOpen is interpreted as follows:
- - Positive fd must be OPEN
- - Zero fd must be CLOSED
- - Negative fd may be OPEN or CLOSED
-
- @retval TRUE fd is VALID
- @retval FALSE fd is INVALID
-*/
-BOOLEAN
-ValidateFD( int fd, int IsOpen)
-{
- struct __filedes *filp;
- BOOLEAN retval = FALSE;
-
- if((fd >= 0) && (fd < OPEN_MAX)) {
- filp = &gMD->fdarray[fd];
- retval = TRUE;
- if(IsOpen >= 0) {
- retval = (BOOLEAN)((filp->f_iflags != 0) && // TRUE if OPEN
- FILE_IS_USABLE(filp)); // and Usable (not Larval or Closing)
- if(IsOpen == VALID_CLOSED) {
- retval = (BOOLEAN)!retval; // We want TRUE if CLOSED
- }
- }
- }
- return retval;
-}
-
-/* Find and reserve a free File Descriptor.
-
- Returns the first free File Descriptor greater than or equal to the,
- already validated, fd specified by Minfd.
-
- @return Returns -1 if there are no free FDs. Otherwise returns the
- found fd.
-*/
-int
-FindFreeFD( int MinFd )
-{
- struct __filedes *Mfd;
- int i;
- int fd = -1;
-
- Mfd = gMD->fdarray;
-
- // Get an available fd
- for(i=MinFd; i < OPEN_MAX; ++i) {
- if(Mfd[i].f_iflags == 0) {
- Mfd[i].f_iflags = FIF_LARVAL; // Temporarily mark this fd as reserved
- fd = i;
- break;
- }
- }
- return fd;
-}
-
-/* Mark that an open file is to be deleted when closed. */
-int
-DeleteOnClose(int fd)
-{
- int retval = 0;
-
- if(ValidateFD( fd, VALID_OPEN)) {
- gMD->fdarray[fd].f_iflags |= FIF_DELCLOSE;
- }
- else {
- errno = EBADF;
- retval = -1;
- }
- return retval;
-}
-
-/** The isatty() function tests whether fd, an open file descriptor,
- is associated with a terminal device.
-
- @param[in] fd File Descriptor for the file to be examined.
-
- @retval 1 fd is associated with a terminal.
- @retval 0 fd is not associated with a terminal. errno is set to
- EBADF if fd is not a valid open FD.
-**/
-int
-isatty (int fd)
-{
- int retval = 0;
- struct __filedes *Fp;
-
- if(ValidateFD( fd, VALID_OPEN)) {
- Fp = &gMD->fdarray[fd];
- retval = (Fp->f_iflags & _S_ITTY) ? 1 : 0;
- }
- else {
- errno = EBADF;
- }
- return retval;
-}
-
-/** Determine if file descriptor fd is a duplicate of some other fd.
-
- @param[in] fd The file descriptor to check.
-
- @retval TRUE fd is a duplicate of another fd.
- @retval FALSE fd is unique.
-**/
-static BOOLEAN
-IsDupFd( int fd)
-{
- void * DevData;
- const struct fileops *FileOps;
- int i;
- BOOLEAN Ret = FALSE;
-
- if(ValidateFD( fd, VALID_OPEN )) {
- FileOps = gMD->fdarray[fd].f_ops;
- DevData = gMD->fdarray[fd].devdata;
- for(i=0; i < OPEN_MAX; ++i) {
- if(i == fd) continue;
- if(ValidateFD( i, VALID_OPEN )) { // TRUE if fd is valid and OPEN
- if((gMD->fdarray[i].f_ops == FileOps)
- &&(gMD->fdarray[i].devdata == DevData )) {
- Ret = TRUE;
- break;
- }
- }
- }
- }
- return Ret;
-}
-
-/** Worker function to Close a file and set its fd to the specified state.
-
- @param[in] fd The file descriptor to close.
- @param[in] NewState State to set the fd to after the file is closed.
-
- @retval 0 The operation completed successfully.
- @retval -1 The operation failed. Further information is in errno.
- * EBADF fd is not a valid or open file descriptor.
-**/
-static int
-_closeX (int fd, int NewState)
-{
- struct __filedes *Fp;
- int retval = 0;
-
- // Verify my pointers and get my FD.
- if(ValidateFD( fd, VALID_OPEN )) {
- Fp = &gMD->fdarray[fd];
- // Check if there are other users of this FileHandle
- if(Fp->RefCount == 1) { // There should be no other users
- if(! IsDupFd(fd)) {
- // Only do the close if no one else is using the FileHandle
- if(Fp->f_iflags & FIF_DELCLOSE) {
- /* Handle files marked "Delete on Close". */
- if(Fp->f_ops->fo_delete != NULL) {
- retval = Fp->f_ops->fo_delete(Fp);
- }
- }
- else {
- retval = Fp->f_ops->fo_close( Fp);
- }
- }
- Fp->f_iflags = NewState; // Close this FD or reserve it
- Fp->RefCount = 0; // No one using this FD
- }
- else {
- --Fp->RefCount; /* One less user of this FD */
- }
- }
- else {
- // Bad FD
- retval = -1;
- errno = EBADF;
- }
- return retval;
-}
-
-/** The close() function deallocates the file descriptor indicated by fd.
- To deallocate means to make the file descriptor available for return by
- subsequent calls to open() or other functions that allocate file
- descriptors. All outstanding record locks owned by the process on the file
- associated with the file descriptor are removed (that is, unlocked).
-
- @param[in] fd Descriptor for the File to close.
-
- @retval 0 Successful completion.
- @retval -1 An error occurred and errno is set to identify the error.
-**/
-int
-close (int fd)
-{
- return _closeX(fd, 0);
-}
-
-/** Delete the file specified by path.
-
- @param[in] path The MBCS path of the file to delete.
-
- @retval -1 Unable to open the file specified by path.
- @retval -1 If (errno == EPERM), unlink is not permited for this file.
- @retval -1 Low-level delete filed. Reason is in errno.
- @retval 0 The file was successfully deleted.
-**/
-int
-unlink (const char *path)
-{
- struct __filedes *Fp;
- int fd;
- int retval = -1;
-
- EFIerrno = RETURN_SUCCESS;
-
- fd = open(path, O_WRONLY, 0);
- if(fd >= 0) {
- Fp = &gMD->fdarray[fd];
-
- if(Fp->f_ops->fo_delete != NULL) {
- retval = Fp->f_ops->fo_delete(Fp);
- }
- Fp->f_iflags = 0; // Close this FD
- Fp->RefCount = 0; // No one using this FD
- }
- return retval;
-}
-
-/** The fcntl() function shall perform the operations described below on open
- files. The fildes argument is a file descriptor.
-
- The available values for cmd are defined in <fcntl.h> and are as follows:
- - F_DUPFD - Return a new file descriptor which shall be the lowest
- numbered available (that is, not already open) file
- descriptor greater than or equal to the third argument, arg,
- taken as an integer of type int. The new file descriptor
- shall refer to the same open file description as the original
- file descriptor, and shall share any locks. The FD_CLOEXEC
- flag associated with the new file descriptor shall be cleared
- to keep the file open across calls to one of the exec functions.
- - F_GETFD - Get the file descriptor flags defined in <fcntl.h> that are
- associated with the file descriptor fildes. File descriptor
- flags are associated with a single file descriptor and do not
- affect other file descriptors that refer to the same file.
- - F_SETFD - Set the file descriptor flags defined in <fcntl.h>, that are
- associated with fildes, to the third argument, arg, taken
- as type int. If the FD_CLOEXEC flag in the third argument
- is 0, the file shall remain open across the exec
- functions; otherwise, the file shall be closed upon
- successful execution of one of the exec functions.
- - F_GETFL - Get the file status flags and file access modes, defined in
- <fcntl.h>, for the file description associated with fildes.
- The file access modes can be extracted from the return
- value using the mask O_ACCMODE, which is defined in
- <fcntl.h>. File status flags and file access modes are
- associated with the file description and do not affect
- other file descriptors that refer to the same file with
- different open file descriptions.
- - F_SETFL - Set the file status flags, defined in <fcntl.h>, for the file
- description associated with fildes from the corresponding
- bits in the third argument, arg, taken as type int. Bits
- corresponding to the file access mode and the file creation
- flags, as defined in <fcntl.h>, that are set in arg shall
- be ignored. If any bits in arg other than those mentioned
- here are changed by the application, the result is unspecified.
- - F_GETOWN - If fildes refers to a socket, get the process or process group
- ID specified to receive SIGURG signals when out-of-band
- data is available. Positive values indicate a process ID;
- negative values, other than -1, indicate a process group
- ID. If fildes does not refer to a socket, the results are
- unspecified.
- - F_SETOWN - If fildes refers to a socket, set the process or process
- group ID specified to receive SIGURG signals when
- out-of-band data is available, using the value of the third
- argument, arg, taken as type int. Positive values indicate
- a process ID; negative values, other than -1, indicate a
- process group ID. If fildes does not refer to a socket, the
- results are unspecified.
-
- The fcntl() function shall fail if:
-
- [EBADF] The fildes argument is not a valid open file descriptor.
- [EINVAL] The cmd argument is invalid, or the cmd argument is F_DUPFD
- and arg is negative or greater than or equal to {OPEN_MAX}.
- [EMFILE] The argument cmd is F_DUPFD and {OPEN_MAX} file descriptors
- are currently open in the calling process, or no file
- descriptors greater than or equal to arg are available.
- [EOVERFLOW] One of the values to be returned cannot be represented correctly.
-
- @param[in] fildes Descriptor for the file to be controlled.
- @param[in] cmd Command to be acted upon.
- @param[in,out] ... Optional additional parameters as required by cmd.
-
- @return Upon successful completion, the value returned shall depend on
- cmd as follows:
- - F_DUPFD - A new file descriptor.
- - F_GETFD - Value of flags defined in <fcntl.h>. The return value
- shall not be negative.
- - F_SETFD - Value other than -1.
- - F_GETFL - Value of file status flags and access modes. The return
- value is not negative.
- - F_SETFL - Value other than -1.
- - F_GETOWN - Value of the socket owner process or process group;
- this will not be -1.
- - F_SETOWN - Value other than -1.
- Otherwise, -1 shall be returned and errno set to indicate the error.
-
-**/
-int
-fcntl (int fildes, int cmd, ...)
-{
- va_list p3;
- struct __filedes *MyFd;
- int retval = -1;
- int temp;
-
-//Print(L"%a( %d, %d, ...)\n", __func__, fildes, cmd);
- va_start(p3, cmd);
-
- if(ValidateFD( fildes, VALID_OPEN )) {
- MyFd = &gMD->fdarray[fildes];
-
- switch(cmd) {
- case F_DUPFD:
- temp = va_arg(p3, int);
- if(ValidateFD( temp, VALID_DONT_CARE )) {
- temp = FindFreeFD( temp );
- if(temp < 0) {
- errno = EMFILE;
- break;
- }
- /* temp is now a valid fd reserved for further use
- so copy fd into temp.
- */
- (void)memcpy(&gMD->fdarray[temp], MyFd, sizeof(struct __filedes));
- retval = temp;
- }
- else {
- errno = EINVAL;
- }
- break;
-
- case F_SETFL:
- retval = MyFd->Oflags; // Get original value
- temp = va_arg(p3, int);
- temp &= O_SETMASK; // Only certain bits can be set
- temp |= retval & O_SETMASK;
- MyFd->Oflags = temp; // Set new value
- break;
-
- case F_SETFD:
- retval = MyFd->f_iflags;
- break;
- //case F_SETOWN:
- // retval = MyFd->SocProc;
- // MyFd->SocProc = va_arg(p3, int);
- // break;
- case F_GETFD:
- retval = MyFd->f_iflags;
- break;
- case F_GETFL:
- retval = MyFd->Oflags;
- break;
- //case F_GETOWN:
- // retval = MyFd->SocProc;
- // break;
- default:
- errno = EINVAL;
- break;
- }
- }
- else {
- // Bad FD
- errno = EBADF;
- }
- va_end(p3);
- return retval;;
-}
-
-/** The dup() function provides an alternative interface to the
- service provided by fcntl() using the F_DUPFD command. The call:
- - fid = dup(fildes);
- shall be equivalent to:
- - fid = fcntl(fildes, F_DUPFD, 0);
-
- @param[in] fildes Descriptor for the file to be examined.
-
- @return Upon successful completion a non-negative integer, namely the
- file descriptor, shall be returned; otherwise, -1 shall be
- returned and errno set to indicate the error.
-**/
-int
-dup (int fildes)
-{
- return fcntl(fildes, F_DUPFD, 0);
-}
-
-/** Make fildes2 refer to a duplicate of fildes.
-
- The dup2() function provides an alternative interface to the
- service provided by fcntl() using the F_DUPFD command. The call:
- - fid = dup2(fildes, fildes2);
- shall be equivalent to:
- - close(fildes2);
- - fid = fcntl(fildes, F_DUPFD, fildes2);
- except for the following:
- - If fildes2 is less than 0 or greater than or equal to {OPEN_MAX},
- dup2() shall return -1 with errno set to [EBADF].
- - If fildes is a valid file descriptor and is equal to fildes2, dup2()
- shall return fildes2 without closing it.
- - If fildes is not a valid file descriptor, dup2() shall return -1 and
- shall not close fildes2.
- - The value returned shall be equal to the value of fildes2 upon
- successful completion, or -1 upon failure.
-
- @param[in] fildes File Descriptor to be duplicated.
- @param[in] fildes2 File Descriptor to be made a duplicate of fildes.
-
- @return Upon successful completion a non-negative integer, namely
- fildes2, shall be returned; otherwise, -1 shall be
- returned and errno set to EBADF indicate the error.
-**/
-int
-dup2 (int fildes, int fildes2)
-{
- int retval = -1;
-
- if(ValidateFD( fildes, VALID_OPEN)) {
- retval = fildes2;
- if( fildes != fildes2) {
- if(ValidateFD( fildes2, VALID_DONT_CARE)) {
- gMD->fdarray[fildes2].f_iflags = FIF_LARVAL; // Mark the file closed, but reserved
- (void)memcpy(&gMD->fdarray[fildes2], // Duplicate fildes into fildes2
- &gMD->fdarray[fildes], sizeof(struct __filedes));
- gMD->fdarray[fildes2].MyFD = (UINT16)fildes2;
- }
- else {
- errno = EBADF;
- retval = -1;
- }
- }
- }
- else {
- errno = EBADF;
- }
- return retval;
-}
-
-/** Reposition a file's read/write offset.
-
- The lseek() function repositions the offset of the file descriptor fildes
- to the argument offset according to the directive how. The argument
- fildes must be an open file descriptor. lseek() repositions the file
- pointer fildes as follows:
-
- - If how is SEEK_SET, the offset is set to offset bytes.
-
- - If how is SEEK_CUR, the offset is set to its current location
- plus offset bytes.
-
- - If how is SEEK_END, the offset is set to the size of the file
- plus offset bytes.
-
- The lseek() function allows the file offset to be set beyond the end of
- the existing end-of-file of the file. If data is later written at this
- point, subsequent reads of the data in the gap return bytes of zeros
- (until data is actually written into the gap).
-
- Some devices are incapable of seeking. The value of the pointer associ-
- ated with such a device is undefined.
-
- @param[in] fd Descriptor for the File to be affected.
- @param[in] offset Value to adjust the file position by.
- @param[in] how How the file position is to be adjusted.
-
- @return Upon successful completion, lseek() returns the resulting offset
- location as measured in bytes from the beginning of the file.
- Otherwise, a value of -1 is returned and errno is set to
- indicate the error.
-**/
-__off_t
-lseek (int fd, __off_t offset, int how)
-{
- __off_t CurPos = -1;
-// RETURN_STATUS Status = RETURN_SUCCESS;
- struct __filedes *filp;
-
- EFIerrno = RETURN_SUCCESS; // In case of error without an EFI call
-
- if( how == SEEK_SET || how == SEEK_CUR || how == SEEK_END) {
- if(ValidateFD( fd, VALID_OPEN)) {
- filp = &gMD->fdarray[fd];
- // Both of our parameters have been verified as valid
- CurPos = filp->f_ops->fo_lseek( filp, offset, how);
- if(CurPos >= 0) {
- filp->f_offset = CurPos;
- }
- }
- else {
- errno = EBADF; // Bad File Descriptor
- }
- }
- else {
- errno = EINVAL; // Invalid how argument
- }
- return CurPos;
-}
-
-/** The directory path is created with the access permissions specified by
- perms.
-
- The directory is closed after it is created.
-
- @param[in] path The path to a directory to create.
- @param[in] perms Permissions as defined in <sys/stat.h>
-
- @retval 0 The directory was created successfully.
- @retval -1 An error occurred and error codes are stored in errno and EFIerrno.
-**/
-int
-mkdir (const char *path, __mode_t perms)
-{
- wchar_t *NewPath;
- DeviceNode *Node;
- char *GenI;
- RETURN_STATUS Status;
- int Instance = 0;
- int retval = 0;
-
- Status = ParsePath(path, &NewPath, &Node, &Instance, NULL);
- if(Status == RETURN_SUCCESS) {
- GenI = Node->InstanceList;
- if(GenI == NULL) {
- errno = EPERM;
- retval = -1;
- }
- else {
- //GenI += (Instance * Node->InstanceSize);
- retval = ((GenericInstance *)GenI)->Abstraction.fo_mkdir( path, perms);
- }
- free(NewPath);
- }
- else {
- retval = -1;
- }
- return retval;
-}
-
-/** Open a file.
- The open() function establishes the connection between a file and a file
- descriptor. It creates an open file description that refers to a file
- and a file descriptor that refers to that open file description. The file
- descriptor is used by other I/O functions to refer to that file.
-
- The open() function returns a file descriptor for the named file that is
- the lowest file descriptor not currently open for that process. The open
- file description is new, and therefore the file descriptor shall not
- share it with any other process in the system.
-
- The file offset used to mark the current position within the file is set
- to the beginning of the file.
-
- The EFI ShellOpenFileByName() function is used to perform the low-level
- file open operation. The primary task of open() is to translate from the
- flags used in the <stdio.h> environment to those used by the EFI function.
-
- The file status flags and file access modes of the open file description
- are set according to the value of oflags.
-
- Values for oflags are constructed by a bitwise-inclusive OR of flags from
- the following list, defined in <fcntl.h>. Applications shall specify
- exactly one of { O_RDONLY, O_RDWR, O_WRONLY } in the value of oflags.
- Any combination of { O_NONBLOCK, O_APPEND, O_CREAT, O_TRUNC, O_EXCL } may
- also be specified in oflags.
-
- The only valid flag combinations for ShellOpenFileByName() are:
- - Read
- - Read/Write
- - Create/Read/Write
-
- Values for mode specify the access permissions for newly created files.
- The mode value is saved in the FD to indicate permissions for further operations.
-
- O_RDONLY -- flags = EFI_FILE_MODE_READ -- this is always done
- O_WRONLY -- flags |= EFI_FILE_MODE_WRITE
- O_RDWR -- flags |= EFI_FILE_MODE_WRITE -- READ is already set
-
- O_NONBLOCK -- ignored
- O_APPEND -- Seek to EOF before every write
- O_CREAT -- flags |= EFI_FILE_MODE_CREATE
- O_TRUNC -- delete first then create new
- O_EXCL -- if O_CREAT is also set, open will fail if the file already exists.
-
- @param[in] Path The path argument points to a pathname naming the
- object to be opened.
- @param[in] oflags File status flags and file access modes of the
- open file description.
- @param[in] mode File access permission bits as defined in
- <sys/stat.h>. Only used if a file is created
- as a result of the open.
-
- @return Upon successful completion, open() opens the file and returns
- a non-negative integer representing the lowest numbered
- unused file descriptor. Otherwise, open returns -1 and sets
- errno to indicate the error. If a negative value is
- returned, no files are created or modified.
- - EMFILE - No file descriptors available -- Max number already open.
- - EINVAL - Bad value specified for oflags or mode.
- - ENOMEM - Failure allocating memory for internal buffers.
- - EEXIST - File exists and open attempted with (O_EXCL | O_CREAT) set.
- - EIO - UEFI failure. Check value in EFIerrno.
-**/
-int
-open(
- const char *path,
- int oflags,
- int mode
- )
-{
- wchar_t *NewPath;
- wchar_t *MPath;
- DeviceNode *Node;
- struct __filedes *filp;
- struct termios *Termio;
- int Instance = 0;
- RETURN_STATUS Status;
- UINT32 OpenMode;
- int fd = -1;
- int doresult;
-
- Status = ParsePath(path, &NewPath, &Node, &Instance, &MPath);
- if(Status == RETURN_SUCCESS) {
- if((Node == NULL) ||
- (Node->InstanceList == NULL))
- {
- errno = EPERM;
- }
- else {
- // Could add a test to see if the file name begins with a period.
- // If it does, then add the HIDDEN flag to Attributes.
-
- // Get an available fd
- fd = FindFreeFD( VALID_CLOSED );
-
- if( fd < 0 ) {
- // All available FDs are in use
- errno = EMFILE;
- }
- else {
- filp = &gMD->fdarray[fd];
- // Save the flags and mode in the File Descriptor
- filp->Oflags = oflags;
- filp->Omode = mode;
-
- doresult = Node->OpenFunc(Node, filp, Instance, NewPath, MPath);
- if(doresult < 0) {
- filp->f_iflags = 0; // Release this FD
- fd = -1; // Indicate an error
- }
- else {
- // Build our final f_iflags value
- OpenMode = ( mode & S_ACC_READ ) ? S_ACC_READ : 0;
- OpenMode |= ( mode & S_ACC_WRITE ) ? S_ACC_WRITE : 0;
-
- filp->f_iflags |= OpenMode;
-
- if((oflags & O_TTY_INIT) && (filp->f_iflags & _S_ITTY) && (filp->devdata != NULL)) {
- // Initialize the device's termios flags to a "sane" value
- Termio = &((cIIO *)filp->devdata)->Termio;
- Termio->c_iflag = ICRNL | IGNSPEC;
- Termio->c_oflag = OPOST | ONLCR | OXTABS | ONOEOT | ONOCR | ONLRET | OCTRL;
- Termio->c_lflag = ECHO | ECHOE | ECHONL | ICANON;
- Termio->c_cc[VERASE] = 0x08; // ^H Backspace
- Termio->c_cc[VKILL] = 0x15; // ^U
- Termio->c_cc[VINTR] = 0x03; // ^C Interrupt character
- }
- ++filp->RefCount;
- FILE_SET_MATURE(filp);
- }
- }
- }
- free(NewPath);
- }
- free(MPath); // We don't need this any more.
-
- // return the fd of our now open file
- return fd;
-}
-
-
-/**
- Poll a list of file descriptors.
-
- The ::poll routine waits for up to timeout milliseconds for an event
- to occur on one or more of the file descriptors listed. The event
- types of interested are specified for each file descriptor in the events
- field. The actual event detected is returned in the revents field of
- the array. The
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/poll.html">POSIX</a>
- documentation is available online.
-
- @param[in] pfd Address of an array of pollfd structures.
-
- @param[in] nfds Number of elements in the array of pollfd structures.
-
- @param[in] timeout Length of time in milliseconds to wait for the event
-
- @return The number of file descriptors with detected events. Zero
- indicates that the call timed out and -1 indicates an error.
-
- **/
-int
-poll (
- struct pollfd * pfd,
- nfds_t nfds,
- int timeout
- )
-{
- struct __filedes * pDescriptor;
- struct pollfd * pEnd;
- struct pollfd * pPollFD;
- int SelectedFDs;
- EFI_STATUS Status;
- EFI_EVENT Timer;
- UINT64 TimerTicks;
-
- //
- // Create the timer for the timeout
- //
- Timer = NULL;
- Status = EFI_SUCCESS;
- if ( INFTIM != timeout ) {
- Status = gBS->CreateEvent ( EVT_TIMER,
- TPL_NOTIFY,
- NULL,
- NULL,
- &Timer );
- if ( !EFI_ERROR ( Status )) {
- //
- // Start the timeout timer
- //
- TimerTicks = timeout;
- TimerTicks *= 1000 * 10;
- Status = gBS->SetTimer ( Timer,
- TimerRelative,
- TimerTicks );
- }
- else {
- SelectedFDs = -1;
- errno = ENOMEM;
- }
- }
- if ( !EFI_ERROR ( Status )) {
- //
- // Poll until an event is detected or the timer fires
- //
- SelectedFDs = 0;
- errno = 0;
- do {
- //
- // Poll the list of file descriptors
- //
- pPollFD = pfd;
- pEnd = &pPollFD [ nfds ];
- while ( pEnd > pPollFD ) {
- //
- // Validate the file descriptor
- //
- if ( !ValidateFD ( pPollFD->fd, VALID_OPEN )) {
- errno = EINVAL;
- return -1;
- }
-
- //
- // Poll the device or file
- //
- pDescriptor = &gMD->fdarray [ pPollFD->fd ];
- pPollFD->revents = pDescriptor->f_ops->fo_poll ( pDescriptor,
- pPollFD->events );
-
- //
- // Determine if this file descriptor detected an event
- //
- if ( 0 != pPollFD->revents ) {
- //
- // Select this descriptor
- //
- SelectedFDs += 1;
- }
-
- //
- // Set the next file descriptor
- //
- pPollFD += 1;
- }
-
- //
- // Check for timeout
- //
- if ( NULL != Timer ) {
- Status = gBS->CheckEvent ( Timer );
- if ( EFI_SUCCESS == Status ) {
- //
- // Timeout
- //
- break;
- }
- else if ( EFI_NOT_READY == Status ) {
- Status = EFI_SUCCESS;
- }
- }
- } while (( 0 == SelectedFDs )
- && ( EFI_SUCCESS == Status ));
-
- //
- // Stop the timer
- //
- if ( NULL != Timer ) {
- gBS->SetTimer ( Timer,
- TimerCancel,
- 0 );
- }
- }
- else {
- SelectedFDs = -1;
- errno = EAGAIN;
- }
-
- //
- // Release the timer
- //
- if ( NULL != Timer ) {
- gBS->CloseEvent ( Timer );
- }
-
- //
- // Return the number of selected file system descriptors
- //
- return SelectedFDs;
-}
-
-
-/** The rename() function changes the name of a file.
- The From argument points to the pathname of the file to be renamed. The To
- argument points to the new pathname of the file.
-
- If the From argument points to the pathname of a file that is not a
- directory, the To argument shall not point to the pathname of a
- directory. If the file named by the To argument exists, it shall be
- removed and From renamed to To. Write access permission is required for
- both the directory containing old and the directory containing To.
-
- If the From argument points to the pathname of a directory, the To
- argument shall not point to the pathname of a file that is not a
- directory. If the directory named by the To argument exists, it shall be
- removed and From renamed to To.
-
- The To pathname shall not contain a path prefix that names From. Write
- access permission is required for the directory containing From and the
- directory containing To. If the From argument points to the pathname of a
- directory, write access permission may be required for the directory named
- by From, and, if it exists, the directory named by To.
-
- If the rename() function fails for any reason other than [EIO], any file
- named by To shall be unaffected.
-
- @param[in] From Path to the file to be renamed.
- @param[in] To The new name of From.
-
- @retval 0 Successful completion.
- @retval -1 An error has occured and errno has been set to further specify the error.
- Neither the file named by From nor the file named by To are
- changed or created.
- - ENXIO: Path specified is not supported by any loaded driver.
- - ENOMEM: Insufficient memory to calloc a MapName buffer.
- - EINVAL: The path parameter is not valid.
-**/
-int
-rename(
- const char *From,
- const char *To
- )
-{
- wchar_t *FromPath;
- DeviceNode *FromNode;
- char *GenI;
- int Instance = 0;
- RETURN_STATUS Status;
- int retval = -1;
-
- Status = ParsePath(From, &FromPath, &FromNode, &Instance, NULL);
- if(Status == RETURN_SUCCESS) {
- GenI = FromNode->InstanceList;
- if(GenI == NULL) {
- errno = EPERM;
- retval = -1;
- }
- else {
- //GenI += (Instance * FromNode->InstanceSize);
- retval = ((GenericInstance *)GenI)->Abstraction.fo_rename( From, To);
- }
- free(FromPath);
- }
- return retval;
-}
-
-/** Delete a specified directory.
-
- @param[in] path Path to the directory to delete.
-
- @retval -1 The directory couldn't be opened (doesn't exist).
- @retval -1 The directory wasn't empty or an IO error occured.
-**/
-int
-rmdir(
- const char *path
- )
-{
- struct __filedes *filp;
- int fd;
- int retval = -1;
-
- fd = open(path, O_RDWR, 0);
- if(fd >= 0) {
- filp = &gMD->fdarray[fd];
-
- retval = filp->f_ops->fo_rmdir(filp);
- filp->f_iflags = 0; // Close this FD
- filp->RefCount = 0; // No one using this FD
- }
- return retval;
-}
-
-/** The fstat() function obtains information about an open file associated
- with the file descriptor fd, and writes it to the area pointed to
- by statbuf.
-
- The statbuf argument is a pointer to a stat structure, as defined
- in <sys/stat.h>, into which information is placed concerning the file.
-
- The structure members st_mode, st_ino, st_dev, st_uid, st_gid, st_atime,
- st_ctime, and st_mtime shall have meaningful values. The value of the
- member st_nlink shall be set to the number of links to the file.
-
- The fstat() function shall update any time-related fields before writing
- into the stat structure.
-
- The fstat() function is implemented using the ShellGetFileInfo()
- function.
-
- The stat structure members which don't have direct analogs to EFI file
- information are filled in as follows:
- - st_mode Populated with information from fd
- - st_ino Set to zero. (inode)
- - st_dev Set to zero.
- - st_uid Set to zero.
- - st_gid Set to zero.
- - st_nlink Set to one.
-
- @param[in] fd File descriptor as returned from open().
- @param[out] statbuf Buffer in which the file status is put.
-
- @retval 0 Successful Completion.
- @retval -1 An error has occurred and errno has been set to
- identify the error.
-**/
-int
-fstat (int fd, struct stat *statbuf)
-{
- int retval = -1;
- struct __filedes *filp;
-
- if(ValidateFD( fd, VALID_OPEN)) {
- filp = &gMD->fdarray[fd];
- retval = filp->f_ops->fo_stat(filp, statbuf, NULL);
- }
- else {
- errno = EBADF;
- }
- return retval;
-}
-
-/** Obtains information about the file pointed to by path.
-
- Opens the file pointed to by path, calls _EFI_FileInfo with the file's handle,
- then closes the file.
-
- @param[in] path Path to the file to obtain information about.
- @param[out] statbuf Buffer in which the file status is put.
-
- @retval 0 Successful Completion.
- @retval -1 An error has occurred and errno has been set to
- identify the error.
-**/
-int
-stat (const char *path, struct stat *statbuf)
-{
- int fd;
- int retval = -1;
- struct __filedes *filp;
-
- fd = open(path, O_RDONLY, 0);
- if(fd >= 0) {
- filp = &gMD->fdarray[fd];
- retval = filp->f_ops->fo_stat( filp, statbuf, NULL);
- close(fd);
- }
- return retval;
-}
-
-/** Same as stat since EFI doesn't have symbolic links.
-
- @param[in] path Path to the file to obtain information about.
- @param[out] statbuf Buffer in which the file status is put.
-
- @retval 0 Successful Completion.
- @retval -1 An error has occurred and errno has been set to
- identify the error.
-**/
-int
-lstat (const char *path, struct stat *statbuf)
-{
- return stat(path, statbuf);
-}
-
-/** Control a device.
-
- @param[in] fd Descriptor for the file to be acted upon.
- @param[in] request Specifies the operation to perform.
- @param[in,out] ... Zero or more parameters as required for request.
-
- @retval >=0 The operation completed successfully.
- @retval -1 An error occured. More information is in errno.
-**/
-int
-ioctl(
- int fd,
- unsigned long request,
- ...
- )
-{
- int retval = -1;
- struct __filedes *filp;
- va_list argp;
-
- va_start(argp, request);
-
- if(ValidateFD( fd, VALID_OPEN)) {
- filp = &gMD->fdarray[fd];
-
- if(request == FIODLEX) {
- /* set Delete-on-Close */
- filp->f_iflags |= FIF_DELCLOSE;
- retval = 0;
- }
- else if(request == FIONDLEX) {
- /* clear Delete-on-Close */
- filp->f_iflags &= ~FIF_DELCLOSE;
- retval = 0;
- }
- else {
- /* All other requests. */
- retval = filp->f_ops->fo_ioctl(filp, request, argp);
- }
- }
- else {
- errno = EBADF;
- }
- va_end(argp);
-
- return retval;
-}
-
-/** Read from a file.
-
- The read() function shall attempt to read nbyte bytes from the file
- associated with the open file descriptor, fildes, into the buffer pointed
- to by buf.
-
- Before any action described below is taken, and if nbyte is zero, the
- read() function may detect and return errors as described below. In the
- absence of errors, or if error detection is not performed, the read()
- function shall return zero and have no other results.
-
- On files that support seeking (for example, a regular file), the read()
- shall start at a position in the file given by the file offset associated
- with fildes. The file offset shall be incremented by the number of bytes
- actually read.
-
- Files that do not support seeking - for example, terminals - always read
- from the current position. The value of a file offset associated with
- such a file is undefined.
-
- No data transfer shall occur past the current end-of-file. If the
- starting position is at or after the end-of-file, 0 shall be returned.
-
- The read() function reads data previously written to a file. If any
- portion of a regular file prior to the end-of-file has not been written,
- read() shall return bytes with value 0. For example, lseek() allows the
- file offset to be set beyond the end of existing data in the file. If data
- is later written at this point, subsequent reads in the gap between the
- previous end of data and the newly written data shall return bytes with
- value 0 until data is written into the gap.
-
- Upon successful completion, where nbyte is greater than 0, read() shall
- mark for update the st_atime field of the file, and shall return the
- number of bytes read. This number shall never be greater than nbyte. The
- value returned may be less than nbyte if the number of bytes left in the
- file is less than nbyte, if the read() request was interrupted by a
- signal, or if the file is a pipe or FIFO or special file and has fewer
- than nbyte bytes immediately available for reading. For example, a read()
- from a file associated with a terminal may return one typed line of data.
-
- If fildes does not refer to a directory, the function reads the requested
- number of bytes from the file at the file's current position and returns
- them in buf. If the read goes beyond the end of the file, the read
- length is truncated to the end of the file. The file's current position is
- increased by the number of bytes returned.
-
- If fildes refers to a directory, the function reads the directory entry at
- the file's current position and returns the entry in buf. If buf
- is not large enough to hold the current directory entry, then
- errno is set to EBUFSIZE, EFIerrno is set to EFI_BUFFER_TOO_SMALL, and the
- current file position is not updated. The size of the buffer needed to read
- the entry will be returned as a negative number. On success, the current
- position is updated to the next directory entry. If there are no more
- directory entries, the read returns a zero-length buffer.
- EFI_FILE_INFO is the structure returned as the directory entry.
-
- @param[in] fildes Descriptor of the file to be read.
- @param[out] buf Pointer to location in which to store the read data.
- @param[in] nbyte Maximum number of bytes to be read.
-
- @return Upon successful completion, read() returns a non-negative integer
- indicating the number of bytes actually read. Otherwise, the
- functions return a negative value and sets errno to indicate the
- error. If errno is EBUFSIZE, the absolute value of the
- return value indicates the size of the buffer needed to read
- the directory entry.
-**/
-ssize_t
-read (int fildes, void *buf, size_t nbyte)
-{
- struct __filedes *filp;
- cIIO *IIO;
- ssize_t BufSize;
-
- BufSize = (ssize_t)nbyte;
- if(BufSize > 0) {
- if(ValidateFD( fildes, VALID_OPEN)) {
- filp = &gMD->fdarray[fildes];
-
- IIO = filp->devdata;
- if(isatty(fildes) && (IIO != NULL)) {
- BufSize = IIO->Read(filp, nbyte, buf);
- }
- else {
- BufSize = filp->f_ops->fo_read(filp, &filp->f_offset, nbyte, buf);
- }
- }
- else {
- errno = EBADF;
- BufSize = -1;
- }
- }
- return BufSize;
-}
-
-/** Write data to a file.
-
- This function writes the specified number of bytes to the file at the current
- file position. The current file position is advanced the actual number of bytes
- written, which is returned in BufferSize. Partial writes only occur when there
- has been a data error during the write attempt (such as "volume space full").
- The file is automatically grown to hold the data if required. Direct writes to
- opened directories are not supported.
-
- If fildes refers to a terminal device, isatty() returns TRUE, a partial write
- will occur if a NULL or EOF character is encountered before n characters have
- been written. Characters inserted due to line-end translations will not be
- counted. Unconvertable characters are translated into the UEFI character
- BLOCKELEMENT_LIGHT_SHADE.
-
- Since the UEFI console device works on wide characters, the buffer is assumed
- to contain a single-byte character stream which is then translated to wide
- characters using the mbtowc() functions. The resulting wide character stream
- is what is actually sent to the UEFI console.
-
- @param[in] fd Descriptor of file to be written to.
- @param[in] buf Pointer to data to write to the file.
- @param[in] nbyte Number of bytes to be written to the file.
-
- @retval >=0 Number of bytes actually written to the file.
- @retval <0 An error occurred. More data is provided by errno.
-**/
-ssize_t
-write (int fd, const void *buf, size_t nbyte)
-{
- struct __filedes *filp;
- cIIO *IIO;
- ssize_t BufSize;
-
- BufSize = (ssize_t)nbyte;
-
- if(ValidateFD( fd, VALID_OPEN)) {
- filp = &gMD->fdarray[fd];
- if ((filp->Oflags & O_ACCMODE) != 0) {
- // File is open for writing
- IIO = filp->devdata;
- if(isatty(fd) && (IIO != NULL)) {
- // Output to an Interactive I/O device
- BufSize = IIO->Write(filp, buf, nbyte);
- }
- else {
- // Output to a file, socket, pipe, etc.
- BufSize = filp->f_ops->fo_write(filp, &filp->f_offset, nbyte, buf);
- }
- }
- else {
- // File is NOT open for writing
- errno = EINVAL;
- BufSize = -1;
- }
- }
- else {
- // fd is not for a valid open file
- errno = EBADF;
- BufSize = -1;
- }
- return BufSize;
-}
-
-/** Gets the current working directory.
-
- The getcwd() function shall place an absolute pathname of the current
- working directory in the array pointed to by buf, and return buf.The
- size argument is the size in bytes of the character array pointed to
- by the buf argument.
-
- @param[in,out] buf The buffer to fill.
- @param[in] size The number of bytes in buffer.
-
- @retval NULL The function failed. The value in errno provides
- further information about the cause of the failure.
- Values for errno are:
- - EINVAL: buf is NULL or size is zero.
- - ENOENT: directory does not exist.
- - ERANGE: buf size is too small to hold CWD
-
- @retval buf The function completed successfully.
-**/
-char
-*getcwd (char *buf, size_t size)
-{
- CONST CHAR16 *Cwd;
-
- if (size == 0 || buf == NULL) {
- errno = EINVAL;
- return NULL;
- }
-
- Cwd = ShellGetCurrentDir(NULL);
- if (Cwd == NULL) {
- errno = ENOENT;
- return NULL;
- }
- if (size < ((StrLen (Cwd) + 1) * sizeof (CHAR8))) {
- errno = ERANGE;
- return (NULL);
- }
- return (UnicodeStrToAsciiStr(Cwd, buf));
-}
-
-/** Change the current working directory.
-
- The chdir() function shall cause the directory named by the pathname
- pointed to by the path argument to become the current working directory;
- that is, the starting point for path searches for pathnames not beginning
- with '/'.
-
- @param[in] path The new path to set.
-
- @retval 0 Operation completed successfully.
- @retval -1 Function failed. The value in errno provides more
- information on the cause of failure:
- - EPERM: Operation not supported with this Shell version.
- - ENOMEM: Unable to allocate memory.
- - ENOENT: Target directory does not exist.
-
- @todo Add non-NEW-shell CWD changing.
-**/
-int
-chdir (const char *path)
-{
- CONST CHAR16 *Cwd;
- EFI_STATUS Status;
- CHAR16 *UnicodePath;
-
- /* Old Shell does not support Set Current Dir. */
- if(gEfiShellProtocol != NULL) {
- Cwd = ShellGetCurrentDir(NULL);
- if (Cwd != NULL) {
- /* We have shell support */
- UnicodePath = AllocatePool(((AsciiStrLen (path) + 1) * sizeof (CHAR16)));
- if (UnicodePath == NULL) {
- errno = ENOMEM;
- return -1;
- }
- AsciiStrToUnicodeStr(path, UnicodePath);
- Status = gEfiShellProtocol->SetCurDir(NULL, UnicodePath);
- FreePool(UnicodePath);
- if (EFI_ERROR(Status)) {
- errno = ENOENT;
- return -1;
- } else {
- return 0;
- }
- }
- }
- /* Add here for non-shell */
- errno = EPERM;
- return -1;
-}
-
-/** Get the foreground process group ID associated with a terminal.
-
- Just returns the Image Handle for the requestor since UEFI does not have
- a concept of processes or groups.
-
- @param[in] x Ignored.
-
- @return Returns the Image Handle of the application or driver which
- called this function.
-**/
-pid_t tcgetpgrp (int x)
-{
- return ((pid_t)(UINTN)(gImageHandle));
-}
-
-/** Get the process group ID of the calling process.
-
- Just returns the Image Handle for the requestor since UEFI does not have
- a concept of processes or groups.
-
- @return Returns the Image Handle of the application or driver which
- called this function.
-**/
-pid_t getpgrp(void)
-{
- return ((pid_t)(UINTN)(gImageHandle));
-}
-
-/* Internal worker function for utimes.
- This works around an error produced by GCC when the va_* macros
- are used within a function with a fixed number of arguments.
-*/
-static
-int
-EFIAPI
-va_Utimes(
- const char *path,
- ...
- )
-{
- struct __filedes *filp;
- va_list ap;
- int fd;
- int retval = -1;
-
- va_start(ap, path);
- fd = open(path, O_RDWR, 0);
- if(fd >= 0) {
- filp = &gMD->fdarray[fd];
- retval = filp->f_ops->fo_ioctl( filp, FIOSETIME, ap);
- close(fd);
- }
- va_end(ap);
- return retval;
-}
-
-/** Set file access and modification times.
-
- @param[in] path Path to the file to be modified.
- @param[in] times Pointer to an array of two timeval structures
-
- @retval 0 File times successfully set.
- @retval -1 An error occured. Error type in errno.
-**/
-int
-utimes(
- const char *path,
- const struct timeval *times
- )
-{
- return va_Utimes(path, times);
-}
diff --git a/StdLib/LibC/Uefi/Uefi.inf b/StdLib/LibC/Uefi/Uefi.inf
deleted file mode 100644
index 1982dd9761..0000000000
--- a/StdLib/LibC/Uefi/Uefi.inf
+++ /dev/null
@@ -1,53 +0,0 @@
-## @file
-# Standard C library: UEFI "system calls".
-#
-# Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LibUefi
- FILE_GUID = 1dcff17c-aa53-4b78-b234-864027555035
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.05
- LIBRARY_CLASS = LibUefi
- LIBRARY_DESTRUCTOR = DestructMePlease
-
-#
-# VALID_ARCHITECTURES = IA32 X64
-#
-
-[Sources]
- select.c
- SysCalls.c
- writev.c
- Xform.c
- compat.c
- StubFunctions.c
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
- ShellPkg/ShellPkg.dec
-
-[LibraryClasses]
- UefiLib
- BaseLib
- BaseMemoryLib
- MemoryAllocationLib
- UefiBootServicesTableLib
- ShellLib
- LibC
- LibLocale
- LibString
- LibTime
- LibGen
- DevUtility
diff --git a/StdLib/LibC/Uefi/Xform.c b/StdLib/LibC/Uefi/Xform.c
deleted file mode 100644
index ecf51d6b0f..0000000000
--- a/StdLib/LibC/Uefi/Xform.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/** @file
- Value transformations between stdio and the UEFI environment.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#include <Uefi.h>
-
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <Efi/SysEfi.h>
-
-/** Translate the Open flags into a Uefi Open Modes value.
-
- The Open Flags are:
- O_RDONLY, O_WRONLY, O_RDWR // Pick only one
-
- O_NONBLOCK, O_APPEND, O_CREAT, O_TRUNC, O_EXCL // ORed with one of the previous
-
- The UEFI Open modes are:
- // ******************************************************
- // Open Modes
- // ******************************************************
- #define EFI_FILE_MODE_READ 0x0000000000000001
- #define EFI_FILE_MODE_WRITE 0x0000000000000002
- #define EFI_FILE_MODE_CREATE 0x8000000000000000
-
-
-*/
-UINT64
-Oflags2EFI( int oflags )
-{
- UINT64 flags;
-
- // Build the Open Modes
- flags = (UINT64)((oflags & O_ACCMODE) + 1); // Handle the Read/Write flags
- if(flags & EFI_FILE_MODE_WRITE) { // Asking for write only?
- // EFI says the only two RW modes are read-only and read+write.
- flags = EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE;
- }
- if(oflags & (O_CREAT | O_TRUNC)) { // Now add the Create flag.
- // Also added if O_TRUNC set since we will need to create a new file.
- // We just set the flags here since the only valid EFI mode with create
- // is Read+Write+Create.
- flags = EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE;
- }
- return flags;
-}
-
-/* Transform the permissions flags into their equivalent UEFI File Attribute bits.
- This transformation is most frequently used when translating attributes for use
- by the UEFI EFI_FILE_PROTOCOL.SetInfo() function.
-
- The UEFI File attributes are:
- // ******************************************************
- // File Attributes
- // ******************************************************
- #define EFI_FILE_READ_ONLY 0x0000000000000001
- #define EFI_FILE_HIDDEN 0x0000000000000002
- #define EFI_FILE_SYSTEM 0x0000000000000004
- #define EFI_FILE_RESERVED 0x0000000000000008
- #define EFI_FILE_DIRECTORY 0x0000000000000010
- #define EFI_FILE_ARCHIVE 0x0000000000000020
- #define EFI_FILE_VALID_ATTR 0x0000000000000037
-
- The input permission flags consist of the following flags:
- O_RDONLY -- open for reading only
- O_WRONLY -- open for writing only
- O_RDWR -- open for reading and writing
- O_ACCMODE -- mask for above modes
- O_NONBLOCK -- no delay
- O_APPEND -- set append mode
- O_CREAT -- create if nonexistent
- O_TRUNC -- truncate to zero length
- O_EXCL -- error if already exists
- O_HIDDEN -- Hidden file attribute
- O_SYSTEM -- System file attribute
- O_ARCHIVE -- Archive file attribute
-*/
-UINT64
-Omode2EFI( int mode)
-{
- UINT64 flags = 0;
-
- /* File is Read-Only. */
- if((mode & O_ACCMODE) == 0) {
- flags = EFI_FILE_READ_ONLY;
- }
- /* Set the Hidden attribute. */
- if((mode & O_HIDDEN) != 0) {
- flags |= EFI_FILE_HIDDEN;
- }
- /* Set the System attribute. */
- if((mode & O_SYSTEM) != 0) {
- flags |= EFI_FILE_SYSTEM;
- }
- /* Set the Archive attribute. */
- if((mode & O_ARCHIVE) != 0) {
- flags |= EFI_FILE_ARCHIVE;
- }
- return flags;
-}
-
-/* Converts the first several EFI status values into the appropriate errno value.
-*/
-int
-EFI2errno( RETURN_STATUS Status)
-{
- int retval;
-
- switch(Status) {
- case RETURN_SUCCESS:
- retval = 0;
- break;
- case RETURN_INVALID_PARAMETER:
- retval = EINVAL;
- break;
- case RETURN_UNSUPPORTED:
- retval = ENODEV;
- break;
- case RETURN_BAD_BUFFER_SIZE:
- case RETURN_BUFFER_TOO_SMALL:
- retval = EBUFSIZE;
- break;
- case RETURN_NOT_READY:
- retval = EBUSY;
- break;
- case RETURN_WRITE_PROTECTED:
- retval = EROFS;
- break;
- case RETURN_OUT_OF_RESOURCES: // May be overridden by specific functions
- retval = ENOMEM;
- break;
- case RETURN_VOLUME_FULL:
- retval = ENOSPC;
- break;
- case RETURN_NOT_FOUND:
- case RETURN_NO_MAPPING:
- retval = ENOENT;
- break;
- case RETURN_TIMEOUT:
- retval = ETIMEDOUT;
- break;
- case RETURN_NOT_STARTED:
- retval = EAGAIN;
- break;
- case RETURN_ALREADY_STARTED:
- retval = EALREADY;
- break;
- case RETURN_ABORTED:
- retval = EINTR;
- break;
- case RETURN_ICMP_ERROR:
- case RETURN_TFTP_ERROR:
- case RETURN_PROTOCOL_ERROR:
- retval = EPROTO;
- break;
- case RETURN_INCOMPATIBLE_VERSION:
- retval = EPERM;
- break;
- case RETURN_ACCESS_DENIED:
- case RETURN_SECURITY_VIOLATION:
- retval = EACCES;
- break;
-/* case RETURN_LOAD_ERROR:
- case RETURN_DEVICE_ERROR:
- case RETURN_VOLUME_CORRUPTED:
- case RETURN_NO_MEDIA:
- case RETURN_MEDIA_CHANGED:
- case RETURN_NO_RESPONSE:
- case RETURN_CRC_ERROR:
- case RETURN_END_OF_MEDIA:
- case RETURN_END_OF_FILE:
- case RETURN_INVALID_LANGUAGE:
-*/
- default:
- retval = EIO;
- break;
- }
- return retval;
-}
diff --git a/StdLib/LibC/Uefi/compat.c b/StdLib/LibC/Uefi/compat.c
deleted file mode 100644
index 251863fb14..0000000000
--- a/StdLib/LibC/Uefi/compat.c
+++ /dev/null
@@ -1,843 +0,0 @@
-/*
- * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $Id: compat.c,v 1.1.1.1 2008/08/24 05:33:08 gmcgarry Exp $
-
- * Copyright (c) 1997, 2002 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein and Jason R. Thorpe.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * $NetBSD: compat.c,v 1.1.1.1 2008/08/24 05:33:08 gmcgarry Exp $
-
- * Copyright (c) 1987, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $NetBSD: compat.c,v 1.1.1.1 2008/08/24 05:33:08 gmcgarry Exp $
- */
-#include <LibConfig.h>
-#include <string.h>
-#include <fcntl.h>
-#include <sys/syslimits.h>
-
-#ifndef HAVE_GETOPT
-char *optarg;
-int optind = 1;
-int
-getopt(int argc, char **argv, char *args)
-{
- size_t n;
- size_t nlen = strlen(args);
- char cmd;
- char rv;
-
- if (argv[optind] && *argv[optind] == '-') {
- cmd = *(argv[optind] + 1);
-
- for (n = 0; n < nlen; n++) {
- if (args[n] == ':')
- continue;
- if (args[n] == cmd) {
- rv = *(argv[optind] + 1);
- if (args[n+1] == ':') {
- if (*(argv[optind] + 2) != '\0') {
- optarg = argv[optind] + 2;
- optind += 1;
- } else {
- optarg = argv[optind + 1];
- optind += 2;
- }
- if (!optarg)
- optarg="";
- return rv;
- } else {
- optarg = NULL;
- optind += 1;
- return rv;
- }
- }
- }
- }
- return -1;
-}
-#endif
-
-#define ISPATHSEPARATOR(x) ((x == '/') || (x == '\\'))
-
-#ifdef HAVE_BASENAME
-#ifndef PATH_MAX
- #define PATH_MAX 5000
-#endif
-
-char *
-basename(char *path)
-{
- static char singledot[] = ".";
- static char result[PATH_MAX];
- char *p, *lastp;
- size_t len;
-
- /*
- * If `path' is a null pointer or points to an empty string,
- * return a pointer to the string ".".
- */
- if ((path == NULL) || (*path == '\0'))
- return (singledot);
-
- /* Strip trailing slashes, if any. */
- lastp = path + strlen(path) - 1;
- while (lastp != path && ISPATHSEPARATOR(*lastp))
- lastp--;
-
- /* Now find the beginning of this (final) component. */
- p = lastp;
- while (p != path && !ISPATHSEPARATOR(*(p - 1)))
- p--;
-
- /* ...and copy the result into the result buffer. */
- len = (lastp - p) + 1 /* last char */;
- if (len > (PATH_MAX - 1))
- len = PATH_MAX - 1;
-
- memcpy(result, p, len);
- result[len] = '\0';
-
- return (result);
-}
-#endif
-
-#if !defined(HAVE_MKSTEMP) && !defined(WIN32)
-int
-mkstemp(char *path)
-{
- char *start, *trv;
- unsigned int pid;
-
- /* To guarantee multiple calls generate unique names even if
- the file is not created. 676 different possibilities with 7
- or more X's, 26 with 6 or less. */
- static char xtra[2] = "aa";
- int xcnt = 0;
-
- pid = getpid();
-
- /* Move to end of path and count trailing X's. */
- for (trv = path; *trv; ++trv)
- if (*trv == 'X')
- xcnt++;
- else
- xcnt = 0;
-
- /* Use at least one from xtra. Use 2 if more than 6 X's. */
- if (*(trv - 1) == 'X')
- *--trv = xtra[0];
- if (xcnt > 6 && *(trv - 1) == 'X')
- *--trv = xtra[1];
-
- /* Set remaining X's to pid digits with 0's to the left. */
- while (*--trv == 'X') {
- *trv = (pid % 10) + '0';
- pid /= 10;
- }
-
- /* update xtra for next call. */
- if (xtra[0] != 'z')
- xtra[0]++;
- else {
- xtra[0] = 'a';
- if (xtra[1] != 'z')
- xtra[1]++;
- else
- xtra[1] = 'a';
- }
-
- return open(path, O_CREAT | O_EXCL | O_RDWR, 0600);
-}
-#endif
-
-#ifdef HAVE_FFS
-int
-ffs(int x)
-{
- int r = 1;
- if (!x) return 0;
- if (!(x & 0xffff)) { x >>= 16; r += 16; }
- if (!(x & 0xff)) { x >>= 8; r += 8; }
- if (!(x & 0xf)) { x >>= 4; r += 4; }
- if (!(x & 3)) { x >>= 2; r += 2; }
- if (!(x & 1)) { x >>= 1; r += 1; }
-
- return r;
-}
-#endif
-
-/*
- * Copyright Patrick Powell 1995
- * This code is based on code written by Patrick Powell (papowell@astart.com)
- * It may be used for any purpose as long as this notice remains intact
- * on all source code distributions
- */
-
-#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF)
-
-static void
-dopr(char *buffer, size_t maxlen, const char *format, va_list args);
-
-static void
-fmtstr(char *buffer, size_t *currlen, size_t maxlen, char *value, int flags,
- int min, int max);
-
-static void
-fmtint(char *buffer, size_t *currlen, size_t maxlen, long value, int base,
- int min, int max, int flags);
-
-static void
-fmtfp(char *buffer, size_t *currlen, size_t maxlen, long double fvalue,
- int min, int max, int flags);
-
-static void
-dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c);
-
-/*
- * dopr(): poor man's version of doprintf
- */
-
-/* format read states */
-#define DP_S_DEFAULT 0
-#define DP_S_FLAGS 1
-#define DP_S_MIN 2
-#define DP_S_DOT 3
-#define DP_S_MAX 4
-#define DP_S_MOD 5
-#define DP_S_CONV 6
-#define DP_S_DONE 7
-
-/* format flags - Bits */
-#define DP_F_MINUS (1 << 0)
-#define DP_F_PLUS (1 << 1)
-#define DP_F_SPACE (1 << 2)
-#define DP_F_NUM (1 << 3)
-#define DP_F_ZERO (1 << 4)
-#define DP_F_UP (1 << 5)
-#define DP_F_UNSIGNED (1 << 6)
-
-/* Conversion Flags */
-#define DP_C_SHORT 1
-#define DP_C_LONG 2
-#define DP_C_LDOUBLE 3
-#define DP_C_LONG_LONG 4
-
-#define char_to_int(p) (p - '0')
-#define abs_val(p) (p < 0 ? -p : p)
-
-
-static void
-dopr(char *buffer, size_t maxlen, const char *format, va_list args)
-{
- char *strvalue, ch;
- long value;
- long double fvalue;
- int min = 0, max = -1, state = DP_S_DEFAULT, flags = 0, cflags = 0;
- size_t currlen = 0;
-
- ch = *format++;
-
- while (state != DP_S_DONE) {
- if ((ch == '\0') || (currlen >= maxlen))
- state = DP_S_DONE;
-
- switch(state) {
- case DP_S_DEFAULT:
- if (ch == '%')
- state = DP_S_FLAGS;
- else
- dopr_outch(buffer, &currlen, maxlen, ch);
- ch = *format++;
- break;
- case DP_S_FLAGS:
- switch (ch) {
- case '-':
- flags |= DP_F_MINUS;
- ch = *format++;
- break;
- case '+':
- flags |= DP_F_PLUS;
- ch = *format++;
- break;
- case ' ':
- flags |= DP_F_SPACE;
- ch = *format++;
- break;
- case '#':
- flags |= DP_F_NUM;
- ch = *format++;
- break;
- case '0':
- flags |= DP_F_ZERO;
- ch = *format++;
- break;
- default:
- state = DP_S_MIN;
- break;
- }
- break;
- case DP_S_MIN:
- if (isdigit((unsigned char)ch)) {
- min = 10 * min + char_to_int (ch);
- ch = *format++;
- } else if (ch == '*') {
- min = va_arg (args, int);
- ch = *format++;
- state = DP_S_DOT;
- } else
- state = DP_S_DOT;
- break;
- case DP_S_DOT:
- if (ch == '.') {
- state = DP_S_MAX;
- ch = *format++;
- } else
- state = DP_S_MOD;
- break;
- case DP_S_MAX:
- if (isdigit((unsigned char)ch)) {
- if (max < 0)
- max = 0;
- max = 10 * max + char_to_int(ch);
- ch = *format++;
- } else if (ch == '*') {
- max = va_arg (args, int);
- ch = *format++;
- state = DP_S_MOD;
- } else
- state = DP_S_MOD;
- break;
- case DP_S_MOD:
- switch (ch) {
- case 'h':
- cflags = DP_C_SHORT;
- ch = *format++;
- break;
- case 'l':
- cflags = DP_C_LONG;
- ch = *format++;
- if (ch == 'l') {
- cflags = DP_C_LONG_LONG;
- ch = *format++;
- }
- break;
- case 'q':
- cflags = DP_C_LONG_LONG;
- ch = *format++;
- break;
- case 'L':
- cflags = DP_C_LDOUBLE;
- ch = *format++;
- break;
- default:
- break;
- }
- state = DP_S_CONV;
- break;
- case DP_S_CONV:
- switch (ch) {
- case 'd':
- case 'i':
- if (cflags == DP_C_SHORT)
- value = va_arg(args, int);
- else if (cflags == DP_C_LONG)
- value = va_arg(args, long int);
- else if (cflags == DP_C_LONG_LONG)
- value = va_arg (args, long long);
- else
- value = va_arg (args, int);
- fmtint(buffer, &currlen, maxlen, value, 10, min, max, flags);
- break;
- case 'o':
- flags |= DP_F_UNSIGNED;
- if (cflags == DP_C_SHORT)
- value = va_arg(args, unsigned int);
- else if (cflags == DP_C_LONG)
- value = va_arg(args, unsigned long int);
- else if (cflags == DP_C_LONG_LONG)
- value = va_arg(args, unsigned long long);
- else
- value = va_arg(args, unsigned int);
- fmtint(buffer, &currlen, maxlen, value, 8, min, max, flags);
- break;
- case 'u':
- flags |= DP_F_UNSIGNED;
- if (cflags == DP_C_SHORT)
- value = va_arg(args, unsigned int);
- else if (cflags == DP_C_LONG)
- value = va_arg(args, unsigned long int);
- else if (cflags == DP_C_LONG_LONG)
- value = va_arg(args, unsigned long long);
- else
- value = va_arg(args, unsigned int);
- fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
- break;
- case 'X':
- flags |= DP_F_UP;
- case 'x':
- flags |= DP_F_UNSIGNED;
- if (cflags == DP_C_SHORT)
- value = va_arg(args, unsigned int);
- else if (cflags == DP_C_LONG)
- value = va_arg(args, unsigned long int);
- else if (cflags == DP_C_LONG_LONG)
- value = va_arg(args, unsigned long long);
- else
- value = va_arg(args, unsigned int);
- fmtint(buffer, &currlen, maxlen, value, 16, min, max, flags);
- break;
- case 'f':
- if (cflags == DP_C_LDOUBLE)
- fvalue = va_arg(args, long double);
- else
- fvalue = va_arg(args, double);
- /* um, floating point? */
- fmtfp(buffer, &currlen, maxlen, fvalue, min, max, flags);
- break;
- case 'E':
- flags |= DP_F_UP;
- case 'e':
- if (cflags == DP_C_LDOUBLE)
- fvalue = va_arg(args, long double);
- else
- fvalue = va_arg(args, double);
- break;
- case 'G':
- flags |= DP_F_UP;
- case 'g':
- if (cflags == DP_C_LDOUBLE)
- fvalue = va_arg(args, long double);
- else
- fvalue = va_arg(args, double);
- break;
- case 'c':
- dopr_outch(buffer, &currlen, maxlen, va_arg(args, int));
- break;
- case 's':
- strvalue = va_arg(args, char *);
- if (max < 0)
- max = maxlen; /* ie, no max */
- fmtstr(buffer, &currlen, maxlen, strvalue, flags, min, max);
- break;
- case 'p':
- strvalue = va_arg(args, void *);
- fmtint(buffer, &currlen, maxlen, (long) strvalue, 16, min, max, flags);
- break;
- case 'n':
- if (cflags == DP_C_SHORT) {
- short int *num;
- num = va_arg(args, short int *);
- *num = currlen;
- } else if (cflags == DP_C_LONG) {
- long int *num;
- num = va_arg(args, long int *);
- *num = currlen;
- } else if (cflags == DP_C_LONG_LONG) {
- long long *num;
- num = va_arg(args, long long *);
- *num = currlen;
- } else {
- int *num;
- num = va_arg(args, int *);
- *num = currlen;
- }
- break;
- case '%':
- dopr_outch(buffer, &currlen, maxlen, ch);
- break;
- case 'w': /* not supported yet, treat as next char */
- ch = *format++;
- break;
- default: /* Unknown, skip */
- break;
- }
- ch = *format++;
- state = DP_S_DEFAULT;
- flags = cflags = min = 0;
- max = -1;
- break;
- case DP_S_DONE:
- break;
- default: /* hmm? */
- break; /* some picky compilers need this */
- }
- }
- if (currlen < maxlen - 1)
- buffer[currlen] = '\0';
- else
- buffer[maxlen - 1] = '\0';
-}
-
-static void
-fmtstr(char *buffer, size_t *currlen, size_t maxlen,
- char *value, int flags, int min, int max)
-{
- int cnt = 0, padlen, strln; /* amount to pad */
-
- if (value == 0)
- value = "<NULL>";
-
- for (strln = 0; value[strln]; ++strln); /* strlen */
- padlen = min - strln;
- if (padlen < 0)
- padlen = 0;
- if (flags & DP_F_MINUS)
- padlen = -padlen; /* Left Justify */
-
- while ((padlen > 0) && (cnt < max)) {
- dopr_outch(buffer, currlen, maxlen, ' ');
- --padlen;
- ++cnt;
- }
- while (*value && (cnt < max)) {
- dopr_outch(buffer, currlen, maxlen, *value++);
- ++cnt;
- }
- while ((padlen < 0) && (cnt < max)) {
- dopr_outch(buffer, currlen, maxlen, ' ');
- ++padlen;
- ++cnt;
- }
-}
-
-/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */
-
-static void
-fmtint(char *buffer, size_t *currlen, size_t maxlen,
- long value, int base, int min, int max, int flags)
-{
- unsigned long uvalue;
- char convert[20];
- int signvalue = 0, place = 0, caps = 0;
- int spadlen = 0; /* amount to space pad */
- int zpadlen = 0; /* amount to zero pad */
-
-#define PADMAX(x,y) ((x) > (y) ? (x) : (y))
-
- if (max < 0)
- max = 0;
-
- uvalue = value;
-
- if (!(flags & DP_F_UNSIGNED)) {
- if (value < 0) {
- signvalue = '-';
- uvalue = -value;
- } else if (flags & DP_F_PLUS) /* Do a sign (+/i) */
- signvalue = '+';
- else if (flags & DP_F_SPACE)
- signvalue = ' ';
- }
-
- if (flags & DP_F_UP)
- caps = 1; /* Should characters be upper case? */
- do {
- convert[place++] =
- (caps ? "0123456789ABCDEF" : "0123456789abcdef")
- [uvalue % (unsigned)base];
- uvalue = (uvalue / (unsigned)base );
- } while (uvalue && (place < 20));
- if (place == 20)
- place--;
- convert[place] = 0;
-
- zpadlen = max - place;
- spadlen = min - PADMAX(max, place) - (signvalue ? 1 : 0);
- if (zpadlen < 0)
- zpadlen = 0;
- if (spadlen < 0)
- spadlen = 0;
- if (flags & DP_F_ZERO) {
- zpadlen = PADMAX(zpadlen, spadlen);
- spadlen = 0;
- }
- if (flags & DP_F_MINUS)
- spadlen = -spadlen; /* Left Justifty */
-
- /* Spaces */
- while (spadlen > 0) {
- dopr_outch(buffer, currlen, maxlen, ' ');
- --spadlen;
- }
-
- /* Sign */
- if (signvalue)
- dopr_outch(buffer, currlen, maxlen, signvalue);
-
- /* Zeros */
- if (zpadlen > 0) {
- while (zpadlen > 0) {
- dopr_outch(buffer, currlen, maxlen, '0');
- --zpadlen;
- }
- }
-
- /* Digits */
- while (place > 0)
- dopr_outch(buffer, currlen, maxlen, convert[--place]);
-
- /* Left Justified spaces */
- while (spadlen < 0) {
- dopr_outch (buffer, currlen, maxlen, ' ');
- ++spadlen;
- }
-}
-
-static long double
-pow10(int exp)
-{
- long double result = 1;
-
- while (exp) {
- result *= 10;
- exp--;
- }
-
- return result;
-}
-
-static long
-round(long double value)
-{
- long intpart = value;
-
- value -= intpart;
- if (value >= 0.5)
- intpart++;
-
- return intpart;
-}
-
-static void
-fmtfp(char *buffer, size_t *currlen, size_t maxlen, long double fvalue,
- int min, int max, int flags)
-{
- char iconvert[20], fconvert[20];
- int signvalue = 0, iplace = 0, fplace = 0;
- int padlen = 0; /* amount to pad */
- int zpadlen = 0, caps = 0;
- long intpart, fracpart;
- long double ufvalue;
-
- /*
- * AIX manpage says the default is 0, but Solaris says the default
- * is 6, and sprintf on AIX defaults to 6
- */
- if (max < 0)
- max = 6;
-
- ufvalue = abs_val(fvalue);
-
- if (fvalue < 0)
- signvalue = '-';
- else if (flags & DP_F_PLUS) /* Do a sign (+/i) */
- signvalue = '+';
- else if (flags & DP_F_SPACE)
- signvalue = ' ';
-
- intpart = ufvalue;
-
- /*
- * Sorry, we only support 9 digits past the decimal because of our
- * conversion method
- */
- if (max > 9)
- max = 9;
-
- /* We "cheat" by converting the fractional part to integer by
- * multiplying by a factor of 10
- */
- fracpart = round((pow10 (max)) * (ufvalue - intpart));
-
- if (fracpart >= pow10 (max)) {
- intpart++;
- fracpart -= pow10 (max);
- }
-
- /* Convert integer part */
- do {
- iconvert[iplace++] =
- (caps ? "0123456789ABCDEF" : "0123456789abcdef")
- [intpart % 10];
- intpart = (intpart / 10);
- } while(intpart && (iplace < 20));
- if (iplace == 20)
- iplace--;
- iconvert[iplace] = 0;
-
- /* Convert fractional part */
- do {
- fconvert[fplace++] =
- (caps ? "0123456789ABCDEF" : "0123456789abcdef")
- [fracpart % 10];
- fracpart = (fracpart / 10);
- } while(fracpart && (fplace < 20));
- if (fplace == 20)
- fplace--;
- fconvert[fplace] = 0;
-
- /* -1 for decimal point, another -1 if we are printing a sign */
- padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0);
- zpadlen = max - fplace;
- if (zpadlen < 0)
- zpadlen = 0;
- if (padlen < 0)
- padlen = 0;
- if (flags & DP_F_MINUS)
- padlen = -padlen; /* Left Justifty */
-
- if ((flags & DP_F_ZERO) && (padlen > 0)) {
- if (signvalue) {
- dopr_outch(buffer, currlen, maxlen, signvalue);
- --padlen;
- signvalue = 0;
- }
- while (padlen > 0) {
- dopr_outch(buffer, currlen, maxlen, '0');
- --padlen;
- }
- }
- while (padlen > 0) {
- dopr_outch(buffer, currlen, maxlen, ' ');
- --padlen;
- }
- if (signvalue)
- dopr_outch(buffer, currlen, maxlen, signvalue);
-
- while (iplace > 0)
- dopr_outch(buffer, currlen, maxlen, iconvert[--iplace]);
-
- /*
- * Decimal point. This should probably use locale to find the
- * correct char to print out.
- */
- dopr_outch(buffer, currlen, maxlen, '.');
-
- while (fplace > 0)
- dopr_outch(buffer, currlen, maxlen, fconvert[--fplace]);
-
- while (zpadlen > 0) {
- dopr_outch(buffer, currlen, maxlen, '0');
- --zpadlen;
- }
-
- while (padlen < 0) {
- dopr_outch(buffer, currlen, maxlen, ' ');
- ++padlen;
- }
-}
-
-static void
-dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c)
-{
- if (*currlen < maxlen)
- buffer[(*currlen)++] = c;
-}
-#endif /* !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) */
-
-#ifndef HAVE_VSNPRINTF
-int
-vsnprintf(char *str, size_t count, const char *fmt, va_list args)
-{
- str[0] = 0;
- dopr(str, count, fmt, args);
-
- return(strlen(str));
-}
-#endif /* !HAVE_VSNPRINTF */
-
-#ifndef HAVE_SNPRINTF
-int
-snprintf(char *str,size_t count,const char *fmt,...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- (void) vsnprintf(str, count, fmt, ap);
- va_end(ap);
-
- return(strlen(str));
-}
-
-#endif /* !HAVE_SNPRINTF */
diff --git a/StdLib/LibC/Uefi/select.c b/StdLib/LibC/Uefi/select.c
deleted file mode 100644
index 28951856d1..0000000000
--- a/StdLib/LibC/Uefi/select.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright (c) 1982, 1986, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Portions copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by the University of
- * California, Berkeley, Intel Corporation, and its contributors.
- *
- * 4. Neither the name of University, Intel Corporation, or their respective
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS, INTEL CORPORATION AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS,
- * INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * @(#)sys_generic.c 8.5 (Berkeley) 1/21/94
- * $Id: select.c,v 1.1.1.1 2003/11/19 01:50:30 kyu3 Exp $
- */
-#include <Library/UefiBootServicesTableLib.h>
-
-#include <LibConfig.h>
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <strings.h>
-#include <sys/poll.h>
-#include <sys/param.h>
-#include <sys/time.h>
-#ifndef KERNEL
-#define KERNEL
-#include <errno.h>
-#undef KERNEL
-#else
-#include <errno.h>
-#endif
-
-#ifdef EFI_NT_EMULATOR
-#define _SELECT_DELAY_ 10000
-#else
-#define _SELECT_DELAY_ 1000
-#endif
-
-#define MAX_SLEEP_DELAY 0xfffffffe
-
-/** Sleep for the specified number of Microseconds.
-
- Implements the usleep(3) function.
-
- @param[in] Microseconds Number of microseconds to sleep.
-
- @retval 0 Always returns zero.
-**/
-int
-usleep( useconds_t Microseconds )
-{
- while ( MAX_SLEEP_DELAY < Microseconds ) {
- gBS->Stall ( MAX_SLEEP_DELAY );
- Microseconds -= MAX_SLEEP_DELAY;
- }
- gBS->Stall((UINTN)Microseconds );
- return (0);
-}
-
-unsigned int
-sleep( unsigned int Seconds )
-{
- return (usleep( (useconds_t)(Seconds * 1000000) ));
-}
-
-static int
-selscan(
- fd_mask **ibits,
- fd_mask **obits,
- int nfd,
- int *nselected
- )
-{
- int msk;
- int i;
- int j;
- int fd;
- int n;
- struct pollfd pfd;
- int FdCount;
- fd_mask bits;
- /* Note: backend also returns POLLHUP/POLLERR if appropriate. */
- static int16_t flag[3] = { POLLRDNORM, POLLWRNORM, POLLRDBAND };
-
- for (msk = 0, n = 0; msk < 3; msk++) {
- if (ibits[msk] == NULL)
- continue;
- for (i = 0; i < nfd; i += NFDBITS) {
- bits = ibits[ msk ][ i / NFDBITS ];
- while (( 0 != (j = ffs(bits))) && ((fd = i + --j) < nfd)) {
- bits &= ~(1 << j);
-
- pfd.fd = fd;
- pfd.events = flag[msk];
- pfd.revents = 0;
- FdCount = poll ( &pfd, 1, 0 );
- if ( -1 == FdCount ) {
- return errno;
- }
- if ( 0 != FdCount ) {
- obits[msk][(fd)/NFDBITS] |=
- (1 << ((fd) % NFDBITS));
- n++;
- break;
- }
- }
- }
- }
- *nselected = n;
- return (0);
-}
-
-int
-select(
- int nd,
- fd_set *in,
- fd_set *ou,
- fd_set *ex,
- struct timeval *tv
- )
-{
- fd_mask *ibits[3], *obits[3], *selbits, *sbp;
- int error, forever, nselected;
- u_int nbufbytes, ncpbytes, nfdbits;
- int64_t timo;
-
- if (nd < 0)
- return (EINVAL);
-
- /*
- * Allocate just enough bits for the non-null fd_sets. Use the
- * preallocated auto buffer if possible.
- */
- nfdbits = roundup(nd, NFDBITS);
- ncpbytes = nfdbits / NBBY;
- nbufbytes = 0;
- if (in != NULL)
- nbufbytes += 2 * ncpbytes;
- if (ou != NULL)
- nbufbytes += 2 * ncpbytes;
- if (ex != NULL)
- nbufbytes += 2 * ncpbytes;
- selbits = malloc(nbufbytes);
-
- /*
- * Assign pointers into the bit buffers and fetch the input bits.
- * Put the output buffers together so that they can be bzeroed
- * together.
- */
- sbp = selbits;
-#define getbits(name, x) \
- do { \
- if (name == NULL) \
- ibits[x] = NULL; \
- else { \
- ibits[x] = sbp + nbufbytes / 2 / sizeof *sbp; \
- obits[x] = sbp; \
- sbp += ncpbytes / sizeof *sbp; \
- bcopy(name, ibits[x], ncpbytes); \
- } \
- } while (0)
- getbits(in, 0);
- getbits(ou, 1);
- getbits(ex, 2);
-#undef getbits
- if (nbufbytes != 0)
- memset(selbits, 0, nbufbytes / 2);
-
- if (tv) {
- timo = tv->tv_usec + (tv->tv_sec * 1000000);
- forever = 0;
- } else {
- timo = 0;
- forever = 1;
- }
-
- /*
- * Poll for I/O events
- */
- nselected = 0;
- do {
- /*
- * Scan for pending I/O
- */
- error = selscan(ibits, obits, nd, &nselected);
- if (error || nselected)
- break;
-
- /*
- * Adjust timeout is needed
- */
- if (timo) {
- /*
- * Give it a rest
- */
- usleep( _SELECT_DELAY_ );
- timo -= _SELECT_DELAY_;
- }
-
- } while (timo > 0 || forever);
-
- /* select is not restarted after signals... */
- if (error == ERESTART)
- error = EINTR;
- else if (error == EWOULDBLOCK)
- error = 0;
-
-#define putbits(name, x) if (name) bcopy(obits[x], name, ncpbytes)
- if (error == 0) {
- putbits(in, 0);
- putbits(ou, 1);
- putbits(ex, 2);
-#undef putbits
- } else {
- errno = error;
- nselected = -1;
- }
-
- free( selbits );
- return ( nselected );
-}
diff --git a/StdLib/LibC/Uefi/writev.c b/StdLib/LibC/Uefi/writev.c
deleted file mode 100644
index 31d2acd629..0000000000
--- a/StdLib/LibC/Uefi/writev.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/** @file
- *
- * Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved.<BR>
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software must
- * display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and its
- * contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/*++
-
-Module Name:
-
- writev.c
-
-Abstract:
-
- Functions implementing the standard "writev" system call interface
-
-
-Revision History
-
---*/
-#include <LibConfig.h>
-
-#ifdef foo
-#include <efi_interface.h>
-#include <unistd.h>
-#include <fcntl.h>
-#define KERNEL
-#include <errno.h>
-#undef KERNEL
-#include "./filedesc.h"
-
-#include <libc_debug.h>
-#include <assert.h>
-#endif
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/uio.h>
-#include <string.h>
-#ifndef KERNEL
-#define KERNEL
-#include <errno.h>
-#undef KERNEL
-#else
-#include <errno.h>
-#endif
-
-//
-// Name:
-// writev
-//
-// Description:
-// BSD writev interface for libc
-//
-// Arguments:
-// File Descriptor (index into file descriptor table)
-// iovec pointer
-// size of iovec array
-//
-// Returns:
-// number of bytes written
-//
-
-ssize_t
-writev(
- int fd,
- const struct iovec *iov,
- int iovcnt
- )
-{
- const struct iovec *pVecTmp;
- char *pBuf;
- size_t TotalBytes;
- size_t i;
- size_t ret;
-
- //
- // See how much memory we'll need
- //
-
- for (i = 0, TotalBytes = 0, pVecTmp = iov; i < (size_t)iovcnt; i++, pVecTmp++) {
- TotalBytes += pVecTmp->iov_len;
- }
-
- //
- // Allocate a contiguous buffer
- //
-
- pBuf = (char*)malloc (TotalBytes);
- if (pBuf == NULL) {
- errno = ENOMEM;
- return -1;
- }
-
- //
- // Copy vectors to the buffer
- //
-
- for (; iovcnt; iovcnt--) {
- bcopy(iov->iov_base, pBuf, iov->iov_len);
- pBuf += iov->iov_len;
- iov++;
- }
-
- //
- // Use standard write(2) then free buffer
- //
-
- ret = write (fd, pBuf, TotalBytes);
- free (pBuf);
-
- return (ret);
-}
diff --git a/StdLib/LibC/Wchar/Comparison.c b/StdLib/LibC/Wchar/Comparison.c
deleted file mode 100644
index 17244b4ccb..0000000000
--- a/StdLib/LibC/Wchar/Comparison.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/** @file
- Comparison Functions for <wchar.h>.
-
- Unless explicitly stated otherwise, the functions defined in this file order
- two wide characters the same way as two integers of the underlying integer
- type designated by wchar_t.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-
-#include <LibConfig.h>
-
-#include <wchar.h>
-
-/** The wcscmp function compares the wide string pointed to by s1 to the wide
- string pointed to by s2.
-
- @return The wcscmp function returns an integer greater than, equal to, or
- less than zero, accordingly as the wide string pointed to by s1
- is greater than, equal to, or less than the wide string
- pointed to by s2.
-**/
-int wcscmp(const wchar_t *s1, const wchar_t *s2)
-{
- return (int)StrCmp( (CONST CHAR16 *)s1, (CONST CHAR16 *)s2);
-}
-
-/** The wcscoll function compares the wide string pointed to by s1 to the wide
- string pointed to by s2, both interpreted as appropriate to the LC_COLLATE
- category of the current locale.
-
- @return The wcscoll function returns an integer greater than, equal to,
- or less than zero, accordingly as the wide string pointed to by
- s1 is greater than, equal to, or less than the wide string
- pointed to by s2 when both are interpreted as appropriate to
- the current locale.
-**/
-//int wcscoll(const wchar_t *s1, const wchar_t *s2)
-//{
-// return -1; // STUBB
-//}
-
-/** The wcsncmp function compares not more than n wide characters (those that
- follow a null wide character are not compared) from the array pointed to by
- s1 to the array pointed to by s2.
-
- @return The wcsncmp function returns an integer greater than, equal to,
- or less than zero, accordingly as the possibly null-terminated
- array pointed to by s1 is greater than, equal to, or less than
- the possibly null-terminated array pointed to by s2.
-**/
-int wcsncmp(const wchar_t *s1, const wchar_t *s2, size_t n)
-{
- return (int)StrnCmp( (CONST CHAR16 *)s1, (CONST CHAR16 *)s2, (UINTN)n);
-}
-
-/** The wcsxfrm function transforms the wide string pointed to by s2 and places
- the resulting wide string into the array pointed to by s1. The
- transformation is such that if the wcscmp function is applied to two
- transformed wide strings, it returns a value greater than, equal to, or
- less than zero, corresponding to the result of the wcscoll function applied
- to the same two original wide strings. No more than n wide characters are
- placed into the resulting array pointed to by s1, including the terminating
- null wide character. If n is zero, s1 is permitted to be a null pointer.
-
- @return The wcsxfrm function returns the length of the transformed wide
- string (not including the terminating null wide character). If
- the value returned is n or greater, the contents of the array
- pointed to by s1 are indeterminate.
-**/
-//size_t wcsxfrm(wchar_t * __restrict s1, const wchar_t * __restrict s2, size_t n)
-//{
-// return n; // STUBB
-//}
-
-/** The wmemcmp function compares the first n wide characters of the object
- pointed to by s1 to the first n wide characters of the object pointed to
- by s2.
-
- @return The wmemcmp function returns an integer greater than, equal to,
- or less than zero, accordingly as the object pointed to by s1 is
- greater than, equal to, or less than the object pointed to by s2.
-**/
-int wmemcmp(const wchar_t *s1, const wchar_t *s2, size_t n)
-{
- return (int)CompareMem( s1, s2, (UINTN)(n * sizeof(wchar_t)));
-}
diff --git a/StdLib/LibC/Wchar/Concatenation.c b/StdLib/LibC/Wchar/Concatenation.c
deleted file mode 100644
index cf595a461f..0000000000
--- a/StdLib/LibC/Wchar/Concatenation.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/** @file
- Concatenation Functions for <wchar.h>.
-
- Unless explicitly stated otherwise, if the execution of a function declared
- in this file causes copying to take place between objects that overlap, the
- behavior is undefined.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-
-#include <LibConfig.h>
-
-#include <wchar.h>
-
-/** The wcscat function appends a copy of the wide string pointed to by s2
- (including the terminating null wide character) to the end of the wide
- string pointed to by s1. The initial wide character of s2 overwrites the
- null wide character at the end of s1.
-
- @return The wcscat function returns the value of s1.
-**/
-wchar_t *wcscat(wchar_t * __restrict s1, const wchar_t * __restrict s2)
-{
- return (wchar_t *)StrCat( (CHAR16 *)s1, (CONST CHAR16 *)s2);
-}
-
-/** The wcsncat function appends not more than n wide characters (a null wide
- character and those that follow it are not appended) from the array pointed
- to by s2 to the end of the wide string pointed to by s1. The initial wide
- character of s2 overwrites the null wide character at the end of s1.
- A terminating null wide character is always appended to the result.
-
- @return The wcsncat function returns the value of s1.
-**/
-wchar_t *wcsncat(wchar_t * __restrict s1, const wchar_t * __restrict s2, size_t n)
-{
- return (wchar_t *)StrnCat( (CHAR16 *)s1, (CONST CHAR16 *)s2, (UINTN)n);
-}
diff --git a/StdLib/LibC/Wchar/ConsDecons.c b/StdLib/LibC/Wchar/ConsDecons.c
deleted file mode 100644
index 03815f49c5..0000000000
--- a/StdLib/LibC/Wchar/ConsDecons.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/** @file
- Constructor and Deconstructor functions for <wchar.h>.
-
- Unless explicitly stated otherwise, the functions defined in this file order
- two wide characters the same way as two integers of the underlying integer
- type designated by wchar_t.
-
- Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/DebugLib.h>
-
-#include <LibConfig.h>
-
-#include <wchar.h>
-
-/* Data initialized by the library constructor */
-UINT8 *__wchar_bitmap = NULL;
-UINTN __wchar_bitmap_size;
-UINTN __wchar_bitmap_64;
-
-EFI_STATUS
-EFIAPI
-__wchar_construct(
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status;
-
- if( __wchar_bitmap == NULL) {
- __wchar_bitmap_size = (WCHAR_MAX + 8) / 8U;
-
- Status = SystemTable->BootServices->AllocatePool(
- EfiBootServicesData, __wchar_bitmap_size, (VOID **)&__wchar_bitmap);
- ASSERT(__wchar_bitmap != NULL);
- if (EFI_ERROR (Status)) {
- __wchar_bitmap = NULL;
- return Status;
- }
- return RETURN_SUCCESS;
- }
- return RETURN_ALREADY_STARTED;
-}
-
-EFI_STATUS
-EFIAPI
-__wchar_deconstruct(
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status = RETURN_SUCCESS;
-
- if( __wchar_bitmap != NULL) {
- Status = SystemTable->BootServices->FreePool( __wchar_bitmap);
- ASSERT_EFI_ERROR (Status);
- __wchar_bitmap = NULL;
- }
- return Status;
-}
diff --git a/StdLib/LibC/Wchar/Copying.c b/StdLib/LibC/Wchar/Copying.c
deleted file mode 100644
index 7075437965..0000000000
--- a/StdLib/LibC/Wchar/Copying.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/** @file
- Copying Functions for <wchar.h>.
-
- Unless explicitly stated otherwise, if the execution of a function declared
- in this file causes copying to take place between objects that overlap, the
- behavior is undefined.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-
-#include <LibConfig.h>
-
-#include <wchar.h>
-
-/** The wcscpy function copies the wide string pointed to by s2 (including the
- terminating null wide character) into the array pointed to by s1.
-
- @return The wcscpy function returns the value of s1.
-**/
-wchar_t *wcscpy(wchar_t * __restrict s1, const wchar_t * __restrict s2)
-{
- return (wchar_t *)StrCpy( (CHAR16 *)s1, (CONST CHAR16 *)s2);
-}
-
-/** The wcsncpy function copies not more than n wide characters (those that
- follow a null wide character are not copied) from the array pointed to by
- s2 to the array pointed to by s1.
-
- If the array pointed to by s2 is a wide string that is shorter than n wide
- characters, null wide characters are appended to the copy in the array
- pointed to by s1, until n wide characters in all have been written.
-
- @return The wcsncpy function returns the value of s1.
-**/
-wchar_t *wcsncpy(wchar_t * __restrict s1, const wchar_t * __restrict s2, size_t n)
-{
- return (wchar_t *)StrnCpy( (CHAR16 *)s1, (CONST CHAR16 *)s2, (UINTN)n);
-}
-
-/** The wmemcpy function copies n wide characters from the object pointed to by
- s2 to the object pointed to by s1.
-
- Use this function if you know that s1 and s2 DO NOT Overlap. Otherwise,
- use wmemmove.
-
- @return The wmemcpy function returns the value of s1.
-**/
-wchar_t *wmemcpy(wchar_t * __restrict s1, const wchar_t * __restrict s2, size_t n)
-{
- return (wchar_t *)CopyMem( s1, s2, (UINTN)(n * sizeof(wchar_t)));
-}
-
-/** The wmemmove function copies n wide characters from the object pointed to by
- s2 to the object pointed to by s1. The objects pointed to by s1 and s2 are
- allowed to overlap.
-
- Because the UEFI BaseMemoryLib function CopyMem explicitly handles
- overlapping source and destination objects, this function and wmemcpy are
- implemented identically.
-
- For programming clarity, it is recommended that you use wmemcpy if you know
- that s1 and s2 DO NOT Overlap. If s1 and s2 might possibly overlap, then
- use wmemmove.
-
- @return The wmemmove function returns the value of s1.
-**/
-wchar_t *wmemmove(wchar_t *s1, const wchar_t *s2, size_t n)
-{
- return (wchar_t *)CopyMem( s1, s2, (UINTN)(n * sizeof(wchar_t)));
-}
diff --git a/StdLib/LibC/Wchar/Searching.c b/StdLib/LibC/Wchar/Searching.c
deleted file mode 100644
index 12556bd757..0000000000
--- a/StdLib/LibC/Wchar/Searching.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/** @file
- Search Functions for <wchar.h>.
-
- Unless explicitly stated otherwise, the functions defined in this file order
- two wide characters the same way as two integers of the underlying integer
- type designated by wchar_t.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/MemoryAllocationLib.h>
-
-#include <LibConfig.h>
-
-#include <wchar.h>
-
-/* Data initialized by the library constructor */
-extern UINT8 *__wchar_bitmap;
-extern UINTN __wchar_bitmap_size;
-extern UINTN __wchar_bitmap_64;
-
-/** The wcschr function locates the first occurrence of c in the wide string
- pointed to by s. The terminating null wide character is considered to be
- part of the wide string.
-
- @return The wcschr function returns a pointer to the located wide
- character, or a null pointer if the wide character does not occur
- in the wide string.
-**/
-wchar_t *wcschr(const wchar_t *s, wchar_t c)
-{
- do {
- if( *s == c) {
- return (wchar_t *)s;
- }
- } while(*s++ != 0);
- return NULL;
-}
-
-static UINT8 BitMask[] = {
- 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
- };
-
-#define WHICH8(c) ((unsigned short)(c) >> 3)
-#define WHICH_BIT(c) (BitMask[((c) & 0x7)])
-#define BITMAP64 ((UINT64 *)bitmap)
-
-static
-void
-BuildBitmap(unsigned char * bitmap, const wchar_t *s2, UINTN n)
-{
- UINT8 bit;
- UINTN index;
-
- //// Initialize bitmap. Bit 0 is always 1 which corresponds to '\0'
- //for (BITMAP64[0] = index = 1; index < n; index++)
- // BITMAP64[index] = 0;
- (void)wmemset( (wchar_t *)bitmap, 0, n / sizeof(wchar_t));
- bitmap[0] = 1;
-
- // Set bits in bitmap corresponding to the characters in s2
- for (; *s2 != 0; ++s2) {
- index = WHICH8(*s2);
- bit = WHICH_BIT(*s2);
- bitmap[index] |= bit;
- }
-}
-
-/** The wcscspn function computes the length of the maximum initial segment of
- the wide string pointed to by s1 which consists entirely of wide characters
- not from the wide string pointed to by s2.
-
- @return The wcscspn function returns the length of the segment.
-**/
-size_t wcscspn(const wchar_t *s1, const wchar_t *s2)
-{
- const wchar_t *str;
- UINT8 bit;
- int index;
- size_t s1len;
-
- if(*s1 == 0) return 0;
- s1len = wcslen(s1);
-
- BuildBitmap( __wchar_bitmap, s2, __wchar_bitmap_size);
-
- for(str = s1; str < &s1[s1len] ; str++) {
- index = WHICH8(*str);
- bit = WHICH_BIT(*str);
- if ((__wchar_bitmap[index] & bit) != 0)
- break;
- }
- return (str - s1);
-}
-
-/** The wcspbrk function locates the first occurrence in the wide string
- pointed to by s1 of any wide character from the wide string
- pointed to by s2.
-
- @return The wcspbrk function returns a pointer to the wide character
- in s1, or a null pointer if no wide character from s2 occurs
- in s1.
-**/
-wchar_t *wcspbrk(const wchar_t *s1, const wchar_t *s2)
-{
- UINT8 bit;
- int index;
-
- BuildBitmap( __wchar_bitmap, s2, __wchar_bitmap_size);
-
- for( ; *s1 != 0; ++s1) {
- index = WHICH8(*s1);
- bit = WHICH_BIT(*s1);
- if( (__wchar_bitmap[index] & bit) != 0) {
- return (wchar_t *)s1;
- }
- }
- return NULL;
-}
-
-/** The wcsrchr function locates the last occurrence of c in the wide string
- pointed to by s. The terminating null wide character is considered to be
- part of the wide string.
-
- @return The wcsrchr function returns a pointer to the wide character,
- or a null pointer if c does not occur in the wide string.
-**/
-wchar_t *wcsrchr(const wchar_t *s, wchar_t c)
-{
- wchar_t *found = NULL;
-
- do {
- if( *s == c) found = (wchar_t *)s;
- } while( *s++ != 0);
-
- return found;
-}
-
-/** The wcsspn function computes the length of the maximum initial segment of
- the wide string pointed to by s1 which consists entirely of wide characters
- from the wide string pointed to by s2.
-
- @return The wcsspn function returns the length of the segment.
-**/
-size_t wcsspn(const wchar_t *s1, const wchar_t *s2)
-{
- size_t length = 0;
- int index;
- UINT8 bit;
-
- BuildBitmap( __wchar_bitmap, s2, __wchar_bitmap_size);
-
- for( ; *s1 != 0; ++s1) {
- index = WHICH8(*s1);
- bit = WHICH_BIT(*s1);
- if( (__wchar_bitmap[index] & bit) == 0) break;
- ++length;
- }
- return length;
-}
-
-/** The wcsstr function locates the first occurrence in the wide string pointed
- to by s1 of the sequence of wide characters (excluding the terminating null
- wide character) in the wide string pointed to by s2.
-
- @return The wcsstr function returns a pointer to the located wide string,
- or a null pointer if the wide string is not found. If s2 points
- to a wide string with zero length, the function returns s1.
-**/
-wchar_t *wcsstr(const wchar_t *s1, const wchar_t *s2)
-{
- return (wchar_t *)StrStr( (CONST CHAR16 *)s1, (CONST CHAR16 *)s2);
-}
-
-/** A sequence of calls to the wcstok function breaks the wide string pointed
- to by s1 into a sequence of tokens, each of which is delimited by a wide
- character from the wide string pointed to by s2. The third argument points
- to a caller-provided wchar_t pointer into which the wcstok function stores
- information necessary for it to continue scanning the same wide string.
-
- The first call in a sequence has a non-null first argument and stores an
- initial value in the object pointed to by ptr. Subsequent calls in the
- sequence have a null first argument and the object pointed to by ptr is
- required to have the value stored by the previous call in the sequence,
- which is then updated. The separator wide string pointed to by s2 may be
- different from call to call.
-
- The first call in the sequence searches the wide string pointed to by s1
- for the first wide character that is not contained in the current separator
- wide string pointed to by s2. If no such wide character is found, then
- there are no tokens in the wide string pointed to by s1 and the wcstok
- function returns a null pointer. If such a wide character is found, it is
- the start of the first token.
-
- The wcstok function then searches from there for a wide character that is
- contained in the current separator wide string. If no such wide character
- is found, the current token extends to the end of the wide string pointed
- to by s1, and subsequent searches in the same wide string for a token
- return a null pointer. If such a wide character is found, it is overwritten
- by a null wide character, which terminates the current token.
-
- In all cases, the wcstok function stores sufficient information in the
- pointer pointed to by ptr so that subsequent calls, with a null pointer for
- s1 and the unmodified pointer value for ptr, shall start searching just
- past the element overwritten by a null wide character (if any).
-
- @return The wcstok function returns a pointer to the first wide character
- of a token, or a null pointer if there is no token.
-**/
-wchar_t *wcstok(wchar_t * __restrict s1, const wchar_t * __restrict s2, wchar_t ** __restrict ptr)
-{
- wchar_t *Token = NULL;
- int index;
- UINT8 bit;
-
- if( (s1 == NULL)
- && ((s1 = *ptr) == NULL))
- {
- return NULL;
- }
-
- // s2 can be different on each call, so build the bitmap each time.
- BuildBitmap( __wchar_bitmap, s2, __wchar_bitmap_size);
-
- // skip leading delimiters: all chars in s2
- for( ; *s1 != 0; ++s1) {
- index = WHICH8(*s1);
- bit = WHICH_BIT(*s1);
- if( (__wchar_bitmap[index] & bit) == 0) break;
- }
- if( *s1 != 0)
- {
- // Remember this point, it is the start of the token
- Token = s1++;
-
- // find the next delimiter and replace it with a '\0'
- for( ; *s1 != 0; ++s1) {
- index = WHICH8(*s1);
- bit = WHICH_BIT(*s1);
- if( (__wchar_bitmap[index] & bit) != 0) {
- *s1++ = 0;
- *ptr = s1;
- return Token;
- }
- }
- }
- *ptr = NULL;
- return Token;
-}
-
-/** The wmemchr function locates the first occurrence of c in the initial n
- wide characters of the object pointed to by s.
-
- @return The wmemchr function returns a pointer to the located wide
- character, or a null pointer if the wide character does not occur
- in the object.
-**/
-wchar_t *wmemchr(const wchar_t *s, wchar_t c, size_t n)
-{
- return (wchar_t *)ScanMem16( s, (UINTN)(n * sizeof(wchar_t)), (UINT16)c);
-}
diff --git a/StdLib/LibC/Wchar/String.c b/StdLib/LibC/Wchar/String.c
deleted file mode 100644
index 70f6d9aedf..0000000000
--- a/StdLib/LibC/Wchar/String.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/** @file
- Miscelaneous Functions for <wchar.h>.
-
- Unless explicitly stated otherwise, if the execution of a function declared
- in this file causes copying to take place between objects that overlap, the
- behavior is undefined.
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <Uefi.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-
-#include <LibConfig.h>
-
-#include <wchar.h>
-
-/** The wcslen function computes the length of the wide string pointed to by s.
-
- @return The wcslen function returns the number of wide characters that
- precede the terminating null wide character.
-**/
-size_t wcslen(const wchar_t *s)
-{
- return (size_t)StrLen( (CONST CHAR16 *)s);
-}
-
-/** The wmemset function copies the value of c into each of the first n wide
- characters of the object pointed to by s.
-
- @return The wmemset function returns the value of s.
-**/
-wchar_t *wmemset(wchar_t *s, wchar_t c, size_t n)
-{
- return (wchar_t *)SetMem16( s, (UINTN)(n * sizeof(wchar_t)), (UINT16)c);
-}
diff --git a/StdLib/LibC/Wchar/Wchar.inf b/StdLib/LibC/Wchar/Wchar.inf
deleted file mode 100644
index 9a028da8bf..0000000000
--- a/StdLib/LibC/Wchar/Wchar.inf
+++ /dev/null
@@ -1,56 +0,0 @@
-## @file
-# Standard C library: Miscelaneous implementations.
-#
-# Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved.<BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LibWchar
- FILE_GUID = 42c078ef-14a8-4e30-9329-6f12d796e54a
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibWchar
- CONSTRUCTOR = __wchar_construct
- DESTRUCTOR = __wchar_deconstruct
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- ConsDecons.c
- Copying.c
- Concatenation.c
- Comparison.c
- Searching.c
- String.c
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
-
-[LibraryClasses]
- BaseLib
- BaseMemoryLib
- MemoryAllocationLib
-
-################################################################
-#
-# The Build Options, below, are only used when building the C library.
-# DO NOT use them when building your application!
-# Nasty things could happen if you do.
-#
-# /Oi- is required for Microsoft VC++ to allow "intrinsic" functions to be
-# defined in this library.
-#
-[BuildOptions]
- MSFT:*_*_*_CC_FLAGS = /Oi-
diff --git a/StdLib/LibC/gdtoa/Ipf/strtold.c b/StdLib/LibC/gdtoa/Ipf/strtold.c
deleted file mode 100644
index 0cddae36f4..0000000000
--- a/StdLib/LibC/gdtoa/Ipf/strtold.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/** @file
- Wrapper for strtold so that it just calls strtod(). This is because the IPF implementation doesn't have
- long double. (actually MS VC++ makes long double a distinct type that is identical to double.) VC++
- also doesn't support the {strong, weak}_alias feature so we actually have to have an object.
-
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include "namespace.h"
-#include "../gdtoaimp.h"
-#include "../gdtoa.h"
-
-long double
-strtold(const char * __restrict nptr, char ** __restrict endptr)
-{
- return (long double)strtod( nptr, endptr);
-}
diff --git a/StdLib/LibC/gdtoa/_strtof.c b/StdLib/LibC/gdtoa/_strtof.c
deleted file mode 100644
index 50073350dc..0000000000
--- a/StdLib/LibC/gdtoa/_strtof.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* $NetBSD: _strtof.c,v 1.1 2006/03/15 17:35:18 kleink Exp $ */
-
-/*
- * Copyright (c) 1996 Christos Zoulas. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Christos Zoulas.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#if defined(__indr_reference)
-__indr_reference(_strtof, strtof)
-#else
-
-#include <stdlib.h>
-float _strtof(const char * __restrict, char ** __restrict);
-
-float
-strtof(const char *nptr, char **endptr)
-{
- return _strtof(nptr, endptr);
-}
-#endif
diff --git a/StdLib/LibC/gdtoa/_strtold.c b/StdLib/LibC/gdtoa/_strtold.c
deleted file mode 100644
index f714b4e1ec..0000000000
--- a/StdLib/LibC/gdtoa/_strtold.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/** @file
- *
- * Copyright (c) 1996 Christos Zoulas. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Christos Zoulas.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: _strtold.c,v 1.1 2006/03/15 17:35:18 kleink Exp
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#if defined(__indr_reference)
- __indr_reference(_strtold, strtold)
-#else
-
-#include <stdlib.h>
-long double _strtold(const char * __restrict, char ** __restrict);
-
-long double
-strtold(const char *nptr, char **endptr)
-{
- return _strtold(nptr, endptr);
-}
-#endif
diff --git a/StdLib/LibC/gdtoa/atof.c b/StdLib/LibC/gdtoa/atof.c
deleted file mode 100644
index fe2b7f0889..0000000000
--- a/StdLib/LibC/gdtoa/atof.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/** @file
- Convert a string into a floating-point double value.
-
-
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <LibConfig.h>
-
-#include <stdlib.h>
-
-double
-atof(const char *string)
-{
- return (strtod(string, NULL));
-}
diff --git a/StdLib/LibC/gdtoa/dmisc.c b/StdLib/LibC/gdtoa/dmisc.c
deleted file mode 100644
index ff95b427fc..0000000000
--- a/StdLib/LibC/gdtoa/dmisc.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/* $NetBSD: dmisc.c,v 1.2.4.1.4.1 2008/04/08 21:10:55 jdc Exp $ */
-
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by 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.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-#include <LibConfig.h>
-
-#include "gdtoaimp.h"
-
-#ifndef MULTIPLE_THREADS
- char *dtoa_result;
-#endif
-
- char *
-#ifdef KR_headers
-rv_alloc(i) size_t i;
-#else
-rv_alloc(size_t i)
-#endif
-{
- size_t j;
- int k, *r;
-
- j = sizeof(ULong);
- for(k = 0;
- sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= i;
- j <<= 1)
- k++;
- r = (int*)(void*)Balloc(k);
- if (r == NULL)
- return NULL;
- *r = k;
- return
-#ifndef MULTIPLE_THREADS
- dtoa_result =
-#endif
- (char *)(void *)(r+1);
- }
-
- char *
-#ifdef KR_headers
-nrv_alloc(s, rve, n) CONST char *s; char **rve; size_t n;
-#else
-nrv_alloc(CONST char *s, char **rve, size_t n)
-#endif
-{
- char *rv, *t;
-
- t = rv = rv_alloc(n);
- if (t == NULL)
- return NULL;
- while((*t = *s++) !=0)
- t++;
- if (rve)
- *rve = t;
- return rv;
- }
-
-/* freedtoa(s) must be used to free values s returned by dtoa
- * when MULTIPLE_THREADS is #defined. It should be used in all cases,
- * but for consistency with earlier versions of dtoa, it is optional
- * when MULTIPLE_THREADS is not defined.
- */
-
- void
-#ifdef KR_headers
-freedtoa(s) char *s;
-#else
-freedtoa(char *s)
-#endif
-{
- Bigint *b = (Bigint *)(void *)((int *)(void *)s - 1);
- b->maxwds = 1 << (b->k = *(int*)(void*)b);
- Bfree(b);
-#ifndef MULTIPLE_THREADS
- if (s == dtoa_result)
- dtoa_result = 0;
-#endif
- }
-
- int
-quorem
-#ifdef KR_headers
- (b, S) Bigint *b, *S;
-#else
- (Bigint *b, Bigint *S)
-#endif
-{
- int n;
- ULong *bx, *bxe, q, *sx, *sxe;
-#ifdef ULLong
- ULLong borrow, carry, y, ys;
-#else
- ULong borrow, carry, y, ys;
-#ifdef Pack_32
- ULong si, z, zs;
-#endif
-#endif
-
- n = S->wds;
-#ifdef DEBUG
- /*debug*/ if (b->wds > n)
- /*debug*/ Bug("oversize b in quorem");
-#endif
- if (b->wds < n)
- return 0;
- sx = S->x;
- sxe = sx + --n;
- bx = b->x;
- bxe = bx + n;
- q = *bxe / (*sxe + 1); /* ensure q <= true quotient */
-#ifdef DEBUG
- /*debug*/ if (q > 9)
- /*debug*/ Bug("oversized quotient in quorem");
-#endif
- if (q) {
- borrow = 0;
- carry = 0;
- do {
-#ifdef ULLong
- ys = *sx++ * (ULLong)q + carry;
- carry = ys >> 32;
- /* LINTED conversion */
- y = *bx - (ys & 0xffffffffUL) - borrow;
- borrow = y >> 32 & 1UL;
- /* LINTED conversion */
- *bx++ = (UINT32)(y & 0xffffffffUL);
-#else
-#ifdef Pack_32
- si = *sx++;
- ys = (si & 0xffff) * q + carry;
- zs = (si >> 16) * q + (ys >> 16);
- carry = zs >> 16;
- y = (*bx & 0xffff) - (ys & 0xffff) - borrow;
- borrow = (y & 0x10000) >> 16;
- z = (*bx >> 16) - (zs & 0xffff) - borrow;
- borrow = (z & 0x10000) >> 16;
- Storeinc(bx, z, y);
-#else
- ys = *sx++ * q + carry;
- carry = ys >> 16;
- y = *bx - (ys & 0xffff) - borrow;
- borrow = (y & 0x10000) >> 16;
- *bx++ = y & 0xffff;
-#endif
-#endif
- }
- while(sx <= sxe);
- if (!*bxe) {
- bx = b->x;
- while(--bxe > bx && !*bxe)
- --n;
- b->wds = n;
- }
- }
- if (cmp(b, S) >= 0) {
- q++;
- borrow = 0;
- carry = 0;
- bx = b->x;
- sx = S->x;
- do {
-#ifdef ULLong
- ys = *sx++ + carry;
- carry = ys >> 32;
- /* LINTED conversion */
- y = *bx - (ys & 0xffffffffUL) - borrow;
- borrow = y >> 32 & 1UL;
- /* LINTED conversion */
- *bx++ = (UINT32)(y & 0xffffffffUL);
-#else
-#ifdef Pack_32
- si = *sx++;
- ys = (si & 0xffff) + carry;
- zs = (si >> 16) + (ys >> 16);
- carry = zs >> 16;
- y = (*bx & 0xffff) - (ys & 0xffff) - borrow;
- borrow = (y & 0x10000) >> 16;
- z = (*bx >> 16) - (zs & 0xffff) - borrow;
- borrow = (z & 0x10000) >> 16;
- Storeinc(bx, z, y);
-#else
- ys = *sx++ + carry;
- carry = ys >> 16;
- y = *bx - (ys & 0xffff) - borrow;
- borrow = (y & 0x10000) >> 16;
- *bx++ = y & 0xffff;
-#endif
-#endif
- }
- while(sx <= sxe);
- bx = b->x;
- bxe = bx + n;
- if (!*bxe) {
- while(--bxe > bx && !*bxe)
- --n;
- b->wds = n;
- }
- }
- return (int)q;
- }
diff --git a/StdLib/LibC/gdtoa/dtoa.c b/StdLib/LibC/gdtoa/dtoa.c
deleted file mode 100644
index 42098426fd..0000000000
--- a/StdLib/LibC/gdtoa/dtoa.c
+++ /dev/null
@@ -1,821 +0,0 @@
-/* $NetBSD: dtoa.c,v 1.3.4.1.4.1 2008/04/08 21:10:55 jdc Exp $ */
-
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 1999 by 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.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-#include <LibConfig.h>
-
-#include "gdtoaimp.h"
-
-/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
- *
- * Inspired by "How to Print Floating-Point Numbers Accurately" by
- * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126].
- *
- * Modifications:
- * 1. Rather than iterating, we use a simple numeric overestimate
- * to determine k = floor(log10(d)). We scale relevant
- * quantities using O(log2(k)) rather than O(k) multiplications.
- * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
- * try to generate digits strictly left to right. Instead, we
- * compute with fewer bits and propagate the carry if necessary
- * when rounding the final digit up. This is often faster.
- * 3. Under the assumption that input will be rounded nearest,
- * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
- * That is, we allow equality in stopping tests when the
- * round-nearest rule will give the same floating-point value
- * as would satisfaction of the stopping test with strict
- * inequality.
- * 4. We remove common factors of powers of 2 from relevant
- * quantities.
- * 5. When converting floating-point integers less than 1e16,
- * we use floating-point arithmetic rather than resorting
- * to multiple-precision integers.
- * 6. When asked to produce fewer than 15 digits, we first try
- * to get by with floating-point arithmetic; we resort to
- * multiple-precision integer arithmetic only if we cannot
- * guarantee that the floating-point calculation has given
- * the correctly rounded result. For k requested digits and
- * "uniformly" distributed input, the probability is
- * something like 10^(k-15) that we must resort to the Long
- * calculation.
- */
-
-#ifdef Honor_FLT_ROUNDS
-#define Rounding rounding
-#undef Check_FLT_ROUNDS
-#define Check_FLT_ROUNDS
-#else
-#define Rounding Flt_Rounds
-#endif
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
-// Disable: warning C4700: uninitialized local variable 'xx' used
-#pragma warning ( disable : 4700 )
-#endif /* defined(_MSC_VER) */
-
- char *
-dtoa
-#ifdef KR_headers
- (d, mode, ndigits, decpt, sign, rve)
- double d; int mode, ndigits, *decpt, *sign; char **rve;
-#else
- (double d, int mode, int ndigits, int *decpt, int *sign, char **rve)
-#endif
-{
- /* Arguments ndigits, decpt, sign are similar to those
- of ecvt and fcvt; trailing zeros are suppressed from
- the returned string. If not null, *rve is set to point
- to the end of the return value. If d is +-Infinity or NaN,
- then *decpt is set to 9999.
-
- mode:
- 0 ==> shortest string that yields d when read in
- and rounded to nearest.
- 1 ==> like 0, but with Steele & White stopping rule;
- e.g. with IEEE P754 arithmetic , mode 0 gives
- 1e23 whereas mode 1 gives 9.999999999999999e22.
- 2 ==> max(1,ndigits) significant digits. This gives a
- return value similar to that of ecvt, except
- that trailing zeros are suppressed.
- 3 ==> through ndigits past the decimal point. This
- gives a return value similar to that from fcvt,
- except that trailing zeros are suppressed, and
- ndigits can be negative.
- 4,5 ==> similar to 2 and 3, respectively, but (in
- round-nearest mode) with the tests of mode 0 to
- possibly return a shorter string that rounds to d.
- With IEEE arithmetic and compilation with
- -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same
- as modes 2 and 3 when FLT_ROUNDS != 1.
- 6-9 ==> Debugging modes similar to mode - 4: don't try
- fast floating-point estimate (if applicable).
-
- Values of mode other than 0-9 are treated as mode 0.
-
- Sufficient space is allocated to the return value
- to hold the suppressed trailing zeros.
- */
-
- int bbits, b2, b5, be, dig, i, ieps, ilim0,
- j, jj1, k, k0, k_check, leftright, m2, m5, s2, s5,
- spec_case, try_quick;
- int ilim = 0, ilim1 = 0; /* pacify gcc */
- Long L;
-#ifndef Sudden_Underflow
- int denorm;
- ULong x;
-#endif
- Bigint *b, *b1, *delta, *mhi, *S;
- Bigint *mlo = NULL; /* pacify gcc */
- double d2, ds, eps;
- char *s, *s0;
-#ifdef Honor_FLT_ROUNDS
- int rounding;
-#endif
-#ifdef SET_INEXACT
- int inexact, oldinexact;
-#endif
-
-#ifndef MULTIPLE_THREADS
- if (dtoa_result) {
- freedtoa(dtoa_result);
- dtoa_result = 0;
- }
-#endif
-
- if (word0(d) & Sign_bit) {
- /* set sign for everything, including 0's and NaNs */
- *sign = 1;
- word0(d) &= ~Sign_bit; /* clear sign bit */
- }
- else
- *sign = 0;
-
-#if defined(IEEE_Arith) + defined(VAX)
-#ifdef IEEE_Arith
- if ((word0(d) & Exp_mask) == Exp_mask)
-#else
- if (word0(d) == 0x8000)
-#endif
- {
- /* Infinity or NaN */
- *decpt = 9999;
-#ifdef IEEE_Arith
- if (!word1(d) && !(word0(d) & 0xfffff))
- return nrv_alloc("Infinity", rve, 8);
-#endif
- return nrv_alloc("NaN", rve, 3);
- }
-#endif
-#ifdef IBM
- dval(d) += 0; /* normalize */
-#endif
- if (!dval(d)) {
- *decpt = 1;
- return nrv_alloc("0", rve, 1);
- }
-
-#ifdef SET_INEXACT
- try_quick = oldinexact = get_inexact();
- inexact = 1;
-#endif
-#ifdef Honor_FLT_ROUNDS
- if ((rounding = Flt_Rounds) >= 2) {
- if (*sign)
- rounding = rounding == 2 ? 0 : 2;
- else
- if (rounding != 2)
- rounding = 0;
- }
-#endif
-
- b = d2b(dval(d), &be, &bbits);
- if (b == NULL)
- return NULL;
-#ifdef Sudden_Underflow
- i = (int)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1));
-#else
- if (( i = (int)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1)) )!=0) {
-#endif
- dval(d2) = dval(d);
- word0(d2) &= Frac_mask1;
- word0(d2) |= Exp_11;
-#ifdef IBM
- if (( j = 11 - hi0bits(word0(d2) & Frac_mask) )!=0)
- dval(d2) /= 1 << j;
-#endif
-
- /* log(x) ~=~ log(1.5) + (x-1.5)/1.5
- * log10(x) = log(x) / log(10)
- * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
- * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2)
- *
- * This suggests computing an approximation k to log10(d) by
- *
- * k = (i - Bias)*0.301029995663981
- * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
- *
- * We want k to be too large rather than too small.
- * The error in the first-order Taylor series approximation
- * is in our favor, so we just round up the constant enough
- * to compensate for any error in the multiplication of
- * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
- * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
- * adding 1e-13 to the constant term more than suffices.
- * Hence we adjust the constant term to 0.1760912590558.
- * (We could get a more accurate k by invoking log10,
- * but this is probably not worthwhile.)
- */
-
- i -= Bias;
-#ifdef IBM
- i <<= 2;
- i += j;
-#endif
-#ifndef Sudden_Underflow
- denorm = 0;
- }
- else {
- /* d is denormalized */
-
- i = bbits + be + (Bias + (P-1) - 1);
- x = i > 32 ? word0(d) << (64 - i) | word1(d) >> (i - 32)
- : word1(d) << (32 - i);
- dval(d2) = (double)x;
- word0(d2) -= 31*Exp_msk1; /* adjust exponent */
- i -= (Bias + (P-1) - 1) + 1;
- denorm = 1;
- }
-#endif
- ds = (dval(d2)-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981;
- k = (int)ds;
- if (ds < 0. && ds != k)
- k--; /* want k = floor(ds) */
- k_check = 1;
- if (k >= 0 && k <= Ten_pmax) {
- if (dval(d) < tens[k])
- k--;
- k_check = 0;
- }
- j = bbits - i - 1;
- if (j >= 0) {
- b2 = 0;
- s2 = j;
- }
- else {
- b2 = -j;
- s2 = 0;
- }
- if (k >= 0) {
- b5 = 0;
- s5 = k;
- s2 += k;
- }
- else {
- b2 -= k;
- b5 = -k;
- s5 = 0;
- }
- if (mode < 0 || mode > 9)
- mode = 0;
-
-#ifndef SET_INEXACT
-#ifdef Check_FLT_ROUNDS
- try_quick = Rounding == 1;
-#else
- try_quick = 1;
-#endif
-#endif /*SET_INEXACT*/
-
- if (mode > 5) {
- mode -= 4;
- try_quick = 0;
- }
- leftright = 1;
- switch(mode) {
- case 0:
- case 1:
- ilim = ilim1 = -1;
- i = 18;
- ndigits = 0;
- break;
- case 2:
- leftright = 0;
- /* FALLTHROUGH */
- case 4:
- if (ndigits <= 0)
- ndigits = 1;
- ilim = ilim1 = i = ndigits;
- break;
- case 3:
- leftright = 0;
- /* FALLTHROUGH */
- case 5:
- i = ndigits + k + 1;
- ilim = i;
- ilim1 = i - 1;
- if (i <= 0)
- i = 1;
- }
- s = s0 = rv_alloc((size_t)i);
- if (s == NULL)
- return NULL;
-
-#ifdef Honor_FLT_ROUNDS
- if (mode > 1 && rounding != 1)
- leftright = 0;
-#endif
-
- if (ilim >= 0 && ilim <= Quick_max && try_quick) {
-
- /* Try to get by with floating-point arithmetic. */
-
- i = 0;
- dval(d2) = dval(d);
- k0 = k;
- ilim0 = ilim;
- ieps = 2; /* conservative */
- if (k > 0) {
- ds = tens[k&0xf];
- j = (unsigned int)k >> 4;
- if (j & Bletch) {
- /* prevent overflows */
- j &= Bletch - 1;
- dval(d) /= bigtens[n_bigtens-1];
- ieps++;
- }
- for(; j; j = (unsigned int)j >> 1, i++)
- if (j & 1) {
- ieps++;
- ds *= bigtens[i];
- }
- dval(d) /= ds;
- }
- else if (( jj1 = -k )!=0) {
- dval(d) *= tens[jj1 & 0xf];
- for(j = jj1 >> 4; j; j >>= 1, i++)
- if (j & 1) {
- ieps++;
- dval(d) *= bigtens[i];
- }
- }
- if (k_check && dval(d) < 1. && ilim > 0) {
- if (ilim1 <= 0)
- goto fast_failed;
- ilim = ilim1;
- k--;
- dval(d) *= 10.;
- ieps++;
- }
- dval(eps) = ieps*dval(d) + 7.;
- word0(eps) -= (P-1)*Exp_msk1;
- if (ilim == 0) {
- S = mhi = 0;
- dval(d) -= 5.;
- if (dval(d) > dval(eps))
- goto one_digit;
- if (dval(d) < -dval(eps))
- goto no_digits;
- goto fast_failed;
- }
-#ifndef No_leftright
- if (leftright) {
- /* Use Steele & White method of only
- * generating digits needed.
- */
- dval(eps) = 0.5/tens[ilim-1] - dval(eps);
- for(i = 0;;) {
- L = (INT32)dval(d);
- dval(d) -= L;
- *s++ = (char)('0' + (int)L);
- if (dval(d) < dval(eps))
- goto ret1;
- if (1. - dval(d) < dval(eps))
- goto bump_up;
- if (++i >= ilim)
- break;
- dval(eps) *= 10.;
- dval(d) *= 10.;
- }
- }
- else {
-#endif
- /* Generate ilim digits, then fix them up. */
- dval(eps) *= tens[ilim-1];
- for(i = 1;; i++, dval(d) *= 10.) {
- L = (Long)(dval(d));
- if (!(dval(d) -= L))
- ilim = i;
- *s++ = (char)('0' + (int)L);
- if (i == ilim) {
- if (dval(d) > 0.5 + dval(eps))
- goto bump_up;
- else if (dval(d) < 0.5 - dval(eps)) {
- while(*--s == '0');
- s++;
- goto ret1;
- }
- break;
- }
- }
-#ifndef No_leftright
- }
-#endif
- fast_failed:
- s = s0;
- dval(d) = dval(d2);
- k = k0;
- ilim = ilim0;
- }
-
- /* Do we have a "small" integer? */
-
- if (be >= 0 && k <= Int_max) {
- /* Yes. */
- ds = tens[k];
- if (ndigits < 0 && ilim <= 0) {
- S = mhi = 0;
- if (ilim < 0 || dval(d) <= 5*ds)
- goto no_digits;
- goto one_digit;
- }
- for(i = 1;; i++, dval(d) *= 10.) {
- L = (Long)(dval(d) / ds);
- dval(d) -= L*ds;
-#ifdef Check_FLT_ROUNDS
- /* If FLT_ROUNDS == 2, L will usually be high by 1 */
- if (dval(d) < 0) {
- L--;
- dval(d) += ds;
- }
-#endif
- *s++ = (char)('0' + (int)L);
- if (!dval(d)) {
-#ifdef SET_INEXACT
- inexact = 0;
-#endif
- break;
- }
- if (i == ilim) {
-#ifdef Honor_FLT_ROUNDS
- if (mode > 1)
- switch(rounding) {
- case 0: goto ret1;
- case 2: goto bump_up;
- }
-#endif
- dval(d) += dval(d);
- if (dval(d) > ds || (dval(d) == ds && L & 1)) {
- bump_up:
- while(*--s == '9')
- if (s == s0) {
- k++;
- *s = '0';
- break;
- }
- ++*s++;
- }
- break;
- }
- }
- goto ret1;
- }
-
- m2 = b2;
- m5 = b5;
- mhi = mlo = 0;
- if (leftright) {
- i =
-#ifndef Sudden_Underflow
- denorm ? be + (Bias + (P-1) - 1 + 1) :
-#endif
-#ifdef IBM
- 1 + 4*P - 3 - bbits + ((bbits + be - 1) & 3);
-#else
- 1 + P - bbits;
-#endif
- b2 += i;
- s2 += i;
- mhi = i2b(1);
- if (mhi == NULL)
- return NULL;
- }
- if (m2 > 0 && s2 > 0) {
- i = m2 < s2 ? m2 : s2;
- b2 -= i;
- m2 -= i;
- s2 -= i;
- }
- if (b5 > 0) {
- if (leftright) {
- if (m5 > 0) {
- mhi = pow5mult(mhi, m5);
- if (mhi == NULL)
- return NULL;
- b1 = mult(mhi, b);
- if (b1 == NULL)
- return NULL;
- Bfree(b);
- b = b1;
- }
- if (( j = b5 - m5 )!=0)
- b = pow5mult(b, j);
- if (b == NULL)
- return NULL;
- }
- else
- b = pow5mult(b, b5);
- if (b == NULL)
- return NULL;
- }
- S = i2b(1);
- if (S == NULL)
- return NULL;
- if (s5 > 0) {
- S = pow5mult(S, s5);
- if (S == NULL)
- return NULL;
- }
-
- /* Check for special case that d is a normalized power of 2. */
-
- spec_case = 0;
- if ((mode < 2 || leftright)
-#ifdef Honor_FLT_ROUNDS
- && rounding == 1
-#endif
- ) {
- if (!word1(d) && !(word0(d) & Bndry_mask)
-#ifndef Sudden_Underflow
- && word0(d) & (Exp_mask & ~Exp_msk1)
-#endif
- ) {
- /* The special case */
- b2 += Log2P;
- s2 += Log2P;
- spec_case = 1;
- }
- }
-
- /* Arrange for convenient computation of quotients:
- * shift left if necessary so divisor has 4 leading 0 bits.
- *
- * Perhaps we should just compute leading 28 bits of S once
- * and for all and pass them and a shift to quorem, so it
- * can do shifts and ors to compute the numerator for q.
- */
-#ifdef Pack_32
- if (( i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f )!=0)
- i = 32 - i;
-#else
- if (( i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0xf )!=0)
- i = 16 - i;
-#endif
- if (i > 4) {
- i -= 4;
- b2 += i;
- m2 += i;
- s2 += i;
- }
- else if (i < 4) {
- i += 28;
- b2 += i;
- m2 += i;
- s2 += i;
- }
- if (b2 > 0) {
- b = lshift(b, b2);
- if (b == NULL)
- return NULL;
- }
- if (s2 > 0) {
- S = lshift(S, s2);
- if (S == NULL)
- return NULL;
- }
- if (k_check) {
- if (cmp(b,S) < 0) {
- k--;
- b = multadd(b, 10, 0); /* we botched the k estimate */
- if (b == NULL)
- return NULL;
- if (leftright) {
- mhi = multadd(mhi, 10, 0);
- if (mhi == NULL)
- return NULL;
- }
- ilim = ilim1;
- }
- }
- if (ilim <= 0 && (mode == 3 || mode == 5)) {
- if (ilim < 0 || cmp(b,S = multadd(S,5,0)) <= 0) {
- /* no digits, fcvt style */
- no_digits:
- k = -1 - ndigits;
- goto ret;
- }
- one_digit:
- *s++ = '1';
- k++;
- goto ret;
- }
- if (leftright) {
- if (m2 > 0) {
- mhi = lshift(mhi, m2);
- if (mhi == NULL)
- return NULL;
- }
-
- /* Compute mlo -- check for special case
- * that d is a normalized power of 2.
- */
-
- mlo = mhi;
- if (spec_case) {
- mhi = Balloc(mhi->k);
- if (mhi == NULL)
- return NULL;
- Bcopy(mhi, mlo);
- mhi = lshift(mhi, Log2P);
- if (mhi == NULL)
- return NULL;
- }
-
- for(i = 1;;i++) {
- dig = quorem(b,S) + '0';
- /* Do we yet have the shortest decimal string
- * that will round to d?
- */
- j = cmp(b, mlo);
- delta = diff(S, mhi);
- if (delta == NULL)
- return NULL;
- jj1 = delta->sign ? 1 : cmp(b, delta);
- Bfree(delta);
-#ifndef ROUND_BIASED
- if (jj1 == 0 && mode != 1 && !(word1(d) & 1)
-#ifdef Honor_FLT_ROUNDS
- && rounding >= 1
-#endif
- ) {
- if (dig == '9')
- goto round_9_up;
- if (j > 0)
- dig++;
-#ifdef SET_INEXACT
- else if (!b->x[0] && b->wds <= 1)
- inexact = 0;
-#endif
- *s++ = (char)dig;
- goto ret;
- }
-#endif
- if (j < 0 || (j == 0 && mode != 1
-#ifndef ROUND_BIASED
- && !(word1(d) & 1)
-#endif
- )) {
- if (!b->x[0] && b->wds <= 1) {
-#ifdef SET_INEXACT
- inexact = 0;
-#endif
- goto accept_dig;
- }
-#ifdef Honor_FLT_ROUNDS
- if (mode > 1)
- switch(rounding) {
- case 0: goto accept_dig;
- case 2: goto keep_dig;
- }
-#endif /*Honor_FLT_ROUNDS*/
- if (jj1 > 0) {
- b = lshift(b, 1);
- if (b == NULL)
- return NULL;
- jj1 = cmp(b, S);
- if ((jj1 > 0 || (jj1 == 0 && dig & 1))
- && dig++ == '9')
- goto round_9_up;
- }
- accept_dig:
- *s++ = (char)dig;
- goto ret;
- }
- if (jj1 > 0) {
-#ifdef Honor_FLT_ROUNDS
- if (!rounding)
- goto accept_dig;
-#endif
- if (dig == '9') { /* possible if i == 1 */
- round_9_up:
- *s++ = '9';
- goto roundoff;
- }
- *s++ = (char)(dig + 1);
- goto ret;
- }
-#ifdef Honor_FLT_ROUNDS
- keep_dig:
-#endif
- *s++ = (char)dig;
- if (i == ilim)
- break;
- b = multadd(b, 10, 0);
- if (b == NULL)
- return NULL;
- if (mlo == mhi) {
- mlo = mhi = multadd(mhi, 10, 0);
- if (mlo == NULL)
- return NULL;
- }
- else {
- mlo = multadd(mlo, 10, 0);
- if (mlo == NULL)
- return NULL;
- mhi = multadd(mhi, 10, 0);
- if (mhi == NULL)
- return NULL;
- }
- }
- }
- else
- for(i = 1;; i++) {
- *s++ = (char)(dig = (int)(quorem(b,S) + '0'));
- if (!b->x[0] && b->wds <= 1) {
-#ifdef SET_INEXACT
- inexact = 0;
-#endif
- goto ret;
- }
- if (i >= ilim)
- break;
- b = multadd(b, 10, 0);
- if (b == NULL)
- return NULL;
- }
-
- /* Round off last digit */
-
-#ifdef Honor_FLT_ROUNDS
- switch(rounding) {
- case 0: goto trimzeros;
- case 2: goto roundoff;
- }
-#endif
- b = lshift(b, 1);
- j = cmp(b, S);
- if (j > 0 || (j == 0 && dig & 1)) {
- roundoff:
- while(*--s == '9')
- if (s == s0) {
- k++;
- *s++ = '1';
- goto ret;
- }
- ++*s++;
- }
- else {
-#ifdef Honor_FLT_ROUNDS
- trimzeros:
-#endif
- while(*--s == '0');
- s++;
- }
- ret:
- Bfree(S);
- if (mhi) {
- if (mlo && mlo != mhi)
- Bfree(mlo);
- Bfree(mhi);
- }
- ret1:
-#ifdef SET_INEXACT
- if (inexact) {
- if (!oldinexact) {
- word0(d) = Exp_1 + (70 << Exp_shift);
- word1(d) = 0;
- dval(d) += 1.;
- }
- }
- else if (!oldinexact)
- clear_inexact();
-#endif
- Bfree(b);
- if (s == s0) { /* don't return empty string */
- *s++ = '0';
- k = 0;
- }
- *s = 0;
- *decpt = k + 1;
- if (rve)
- *rve = s;
- return s0;
- }
diff --git a/StdLib/LibC/gdtoa/gdtoa.c b/StdLib/LibC/gdtoa/gdtoa.c
deleted file mode 100644
index f203a30325..0000000000
--- a/StdLib/LibC/gdtoa/gdtoa.c
+++ /dev/null
@@ -1,827 +0,0 @@
-/** @file
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- ***************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 1999 by 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.
-
- Please send bug reports to David M. Gay (dmg at acm dot org,
- with " at " changed at "@" and " dot " changed to ".").
-
- NetBSD: gdtoa.c,v 1.1.1.1.4.1.4.1 2008/04/08 21:10:55 jdc Exp
-**/
-#include <LibConfig.h>
-
-#include "gdtoaimp.h"
-
-#if defined(_MSC_VER)
- /* Disable warnings about conversions to narrower data types. */
- #pragma warning ( disable : 4244 )
- // Squelch bogus warnings about uninitialized variable use.
- #pragma warning ( disable : 4701 )
-#endif
-
-static Bigint *
-bitstob(ULong *bits, int nbits, int *bbits)
-{
- int i, k;
- Bigint *b;
- ULong *be, *x, *x0;
-
- i = ULbits;
- k = 0;
- while(i < nbits) {
- i <<= 1;
- k++;
- }
-#ifndef Pack_32
- if (!k)
- k = 1;
-#endif
- b = Balloc(k);
- if (b == NULL)
- return NULL;
- be = bits + (((unsigned int)nbits - 1) >> kshift);
- x = x0 = b->x;
- do {
- *x++ = *bits & ALL_ON;
-#ifdef Pack_16
- *x++ = (*bits >> 16) & ALL_ON;
-#endif
- } while(++bits <= be);
- i = x - x0;
- while(!x0[--i])
- if (!i) {
- b->wds = 0;
- *bbits = 0;
- goto ret;
- }
- b->wds = i + 1;
- *bbits = i*ULbits + 32 - hi0bits(b->x[i]);
-ret:
- return b;
-}
-
-/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
- *
- * Inspired by "How to Print Floating-Point Numbers Accurately" by
- * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126].
- *
- * Modifications:
- * 1. Rather than iterating, we use a simple numeric overestimate
- * to determine k = floor(log10(d)). We scale relevant
- * quantities using O(log2(k)) rather than O(k) multiplications.
- * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
- * try to generate digits strictly left to right. Instead, we
- * compute with fewer bits and propagate the carry if necessary
- * when rounding the final digit up. This is often faster.
- * 3. Under the assumption that input will be rounded nearest,
- * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
- * That is, we allow equality in stopping tests when the
- * round-nearest rule will give the same floating-point value
- * as would satisfaction of the stopping test with strict
- * inequality.
- * 4. We remove common factors of powers of 2 from relevant
- * quantities.
- * 5. When converting floating-point integers less than 1e16,
- * we use floating-point arithmetic rather than resorting
- * to multiple-precision integers.
- * 6. When asked to produce fewer than 15 digits, we first try
- * to get by with floating-point arithmetic; we resort to
- * multiple-precision integer arithmetic only if we cannot
- * guarantee that the floating-point calculation has given
- * the correctly rounded result. For k requested digits and
- * "uniformly" distributed input, the probability is
- * something like 10^(k-15) that we must resort to the Long
- * calculation.
- */
-
- char *
-gdtoa
- (FPI *fpi, int be, ULong *bits, int *kindp, int mode, int ndigits, int *decpt, char **rve)
-{
- /* Arguments ndigits and decpt are similar to the second and third
- arguments of ecvt and fcvt; trailing zeros are suppressed from
- the returned string. If not null, *rve is set to point
- to the end of the return value. If d is +-Infinity or NaN,
- then *decpt is set to 9999.
-
- mode:
- 0 ==> shortest string that yields d when read in
- and rounded to nearest.
- 1 ==> like 0, but with Steele & White stopping rule;
- e.g. with IEEE P754 arithmetic , mode 0 gives
- 1e23 whereas mode 1 gives 9.999999999999999e22.
- 2 ==> max(1,ndigits) significant digits. This gives a
- return value similar to that of ecvt, except
- that trailing zeros are suppressed.
- 3 ==> through ndigits past the decimal point. This
- gives a return value similar to that from fcvt,
- except that trailing zeros are suppressed, and
- ndigits can be negative.
- 4-9 should give the same return values as 2-3, i.e.,
- 4 <= mode <= 9 ==> same return as mode
- 2 + (mode & 1). These modes are mainly for
- debugging; often they run slower but sometimes
- faster than modes 2-3.
- 4,5,8,9 ==> left-to-right digit generation.
- 6-9 ==> don't try fast floating-point estimate
- (if applicable).
-
- Values of mode other than 0-9 are treated as mode 0.
-
- Sufficient space is allocated to the return value
- to hold the suppressed trailing zeros.
- */
-
- int bbits, b2, b5, be0, dig, i, ieps, ilim = 0, ilim0, ilim1 = 0, inex;
- int j, jj1, k, k0, k_check, kind, leftright, m2, m5, nbits;
- int rdir, s2, s5, spec_case, try_quick;
- Long L;
- Bigint *b, *b1, *delta, *mlo, *mhi, *mhi1, *S;
- double d, d2, ds, eps;
- char *s, *s0;
-
- mlo = NULL;
-
-#ifndef MULTIPLE_THREADS
- if (dtoa_result) {
- freedtoa(dtoa_result);
- dtoa_result = 0;
- }
-#endif
- inex = 0;
- if (*kindp & STRTOG_NoMemory)
- return NULL;
- kind = *kindp &= ~STRTOG_Inexact;
- switch(kind & STRTOG_Retmask) {
- case STRTOG_Zero:
- goto ret_zero;
- case STRTOG_Normal:
- case STRTOG_Denormal:
- break;
- case STRTOG_Infinite:
- *decpt = -32768;
- return nrv_alloc("Infinity", rve, 8);
- case STRTOG_NaN:
- *decpt = -32768;
- return nrv_alloc("NaN", rve, 3);
- default:
- return 0;
- }
- b = bitstob(bits, nbits = fpi->nbits, &bbits);
- if (b == NULL)
- return NULL;
- be0 = be;
- if ( (i = trailz(b)) !=0) {
- rshift(b, i);
- be += i;
- bbits -= i;
- }
- if (!b->wds) {
- Bfree(b);
-ret_zero:
- *decpt = 1;
- return nrv_alloc("0", rve, 1);
- }
-
- dval(d) = b2d(b, &i);
- i = be + bbits - 1;
- word0(d) &= Frac_mask1;
- word0(d) |= Exp_11;
-#ifdef IBM
- if ( (j = 11 - hi0bits(word0(d) & Frac_mask)) !=0)
- dval(d) /= 1 << j;
-#endif
-
- /* log(x) ~=~ log(1.5) + (x-1.5)/1.5
- * log10(x) = log(x) / log(10)
- * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
- * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2)
- *
- * This suggests computing an approximation k to log10(d) by
- *
- * k = (i - Bias)*0.301029995663981
- * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
- *
- * We want k to be too large rather than too small.
- * The error in the first-order Taylor series approximation
- * is in our favor, so we just round up the constant enough
- * to compensate for any error in the multiplication of
- * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
- * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
- * adding 1e-13 to the constant term more than suffices.
- * Hence we adjust the constant term to 0.1760912590558.
- * (We could get a more accurate k by invoking log10,
- * but this is probably not worthwhile.)
- */
-#ifdef IBM
- i <<= 2;
- i += j;
-#endif
- ds = (dval(d)-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981;
-
- /* correct assumption about exponent range */
- if ((j = i) < 0)
- j = -j;
- if ((j -= 1077) > 0)
- ds += j * 7e-17;
-
- k = (int)ds;
- if (ds < 0. && ds != k)
- k--; /* want k = floor(ds) */
- k_check = 1;
-#ifdef IBM
- j = be + bbits - 1;
- if ( (jj1 = j & 3) !=0)
- dval(d) *= 1 << jj1;
- word0(d) += j << Exp_shift - 2 & Exp_mask;
-#else
- word0(d) += (be + bbits - 1) << Exp_shift;
-#endif
- if (k >= 0 && k <= Ten_pmax) {
- if (dval(d) < tens[k])
- k--;
- k_check = 0;
- }
- j = bbits - i - 1;
- if (j >= 0) {
- b2 = 0;
- s2 = j;
- }
- else {
- b2 = -j;
- s2 = 0;
- }
- if (k >= 0) {
- b5 = 0;
- s5 = k;
- s2 += k;
- }
- else {
- b2 -= k;
- b5 = -k;
- s5 = 0;
- }
- if (mode < 0 || mode > 9)
- mode = 0;
- try_quick = 1;
- if (mode > 5) {
- mode -= 4;
- try_quick = 0;
- }
- leftright = 1;
- switch(mode) {
- case 0:
- case 1:
- ilim = ilim1 = -1;
- i = (int)(nbits * .30103) + 3;
- ndigits = 0;
- break;
- case 2:
- leftright = 0;
- /*FALLTHROUGH*/
- case 4:
- if (ndigits <= 0)
- ndigits = 1;
- ilim = ilim1 = i = ndigits;
- break;
- case 3:
- leftright = 0;
- /*FALLTHROUGH*/
- case 5:
- i = ndigits + k + 1;
- ilim = i;
- ilim1 = i - 1;
- if (i <= 0)
- i = 1;
- }
- s = s0 = rv_alloc((size_t)i);
- if (s == NULL)
- return NULL;
-
- if ( (rdir = fpi->rounding - 1) !=0) {
- if (rdir < 0)
- rdir = 2;
- if (kind & STRTOG_Neg)
- rdir = 3 - rdir;
- }
-
- /* Now rdir = 0 ==> round near, 1 ==> round up, 2 ==> round down. */
-
- if (ilim >= 0 && ilim <= Quick_max && try_quick && !rdir
-#ifndef IMPRECISE_INEXACT
- && k == 0
-#endif
- ) {
-
- /* Try to get by with floating-point arithmetic. */
-
- i = 0;
- d2 = dval(d);
-#ifdef IBM
- if ( (j = 11 - hi0bits(word0(d) & Frac_mask)) !=0)
- dval(d) /= 1 << j;
-#endif
- k0 = k;
- ilim0 = ilim;
- ieps = 2; /* conservative */
- if (k > 0) {
- ds = tens[k&0xf];
- j = (unsigned int)k >> 4;
- if (j & Bletch) {
- /* prevent overflows */
- j &= Bletch - 1;
- dval(d) /= bigtens[n_bigtens-1];
- ieps++;
- }
- for(; j; j /= 2, i++)
- if (j & 1) {
- ieps++;
- ds *= bigtens[i];
- }
- }
- else {
- ds = 1.;
- if ( (jj1 = -k) !=0) {
- dval(d) *= tens[jj1 & 0xf];
- for(j = jj1 >> 4; j; j >>= 1, i++)
- if (j & 1) {
- ieps++;
- dval(d) *= bigtens[i];
- }
- }
- }
- if (k_check && dval(d) < 1. && ilim > 0) {
- if (ilim1 <= 0)
- goto fast_failed;
- ilim = ilim1;
- k--;
- dval(d) *= 10.;
- ieps++;
- }
- dval(eps) = ieps*dval(d) + 7.;
- word0(eps) -= (P-1)*Exp_msk1;
- if (ilim == 0) {
- S = mhi = 0;
- dval(d) -= 5.;
- if (dval(d) > dval(eps))
- goto one_digit;
- if (dval(d) < -dval(eps))
- goto no_digits;
- goto fast_failed;
- }
-#ifndef No_leftright
- if (leftright) {
- /* Use Steele & White method of only
- * generating digits needed.
- */
- dval(eps) = ds*0.5/tens[ilim-1] - dval(eps);
- for(i = 0;;) {
- L = (Long)(dval(d)/ds);
- dval(d) -= L*ds;
- *s++ = '0' + (int)L;
- if (dval(d) < dval(eps)) {
- if (dval(d))
- inex = STRTOG_Inexlo;
- goto ret1;
- }
- if (ds - dval(d) < dval(eps))
- goto bump_up;
- if (++i >= ilim)
- break;
- dval(eps) *= 10.;
- dval(d) *= 10.;
- }
- }
- else {
-#endif
- /* Generate ilim digits, then fix them up. */
- dval(eps) *= tens[ilim-1];
- for(i = 1;; i++, dval(d) *= 10.) {
- if ( (L = (Long)(dval(d)/ds)) !=0)
- dval(d) -= L*ds;
- *s++ = '0' + (int)L;
- if (i == ilim) {
- ds *= 0.5;
- if (dval(d) > ds + dval(eps))
- goto bump_up;
- else if (dval(d) < ds - dval(eps)) {
- while(*--s == '0'){}
- s++;
- if (dval(d))
- inex = STRTOG_Inexlo;
- goto ret1;
- }
- break;
- }
- }
-#ifndef No_leftright
- }
-#endif
-fast_failed:
- s = s0;
- dval(d) = d2;
- k = k0;
- ilim = ilim0;
- }
-
- /* Do we have a "small" integer? */
-
- if (be >= 0 && k <= Int_max) {
- /* Yes. */
- ds = tens[k];
- if (ndigits < 0 && ilim <= 0) {
- S = mhi = 0;
- if (ilim < 0 || dval(d) <= 5*ds)
- goto no_digits;
- goto one_digit;
- }
- for(i = 1;; i++, dval(d) *= 10.) {
- L = dval(d) / ds;
- dval(d) -= L*ds;
-#ifdef Check_FLT_ROUNDS
- /* If FLT_ROUNDS == 2, L will usually be high by 1 */
- if (dval(d) < 0) {
- L--;
- dval(d) += ds;
- }
-#endif
- *s++ = '0' + (int)L;
- if (dval(d) == 0.)
- break;
- if (i == ilim) {
- if (rdir) {
- if (rdir == 1)
- goto bump_up;
- inex = STRTOG_Inexlo;
- goto ret1;
- }
- dval(d) += dval(d);
- if (dval(d) > ds || (dval(d) == ds && L & 1)) {
-bump_up:
- inex = STRTOG_Inexhi;
- while(*--s == '9')
- if (s == s0) {
- k++;
- *s = '0';
- break;
- }
- ++*s++;
- }
- else
- inex = STRTOG_Inexlo;
- break;
- }
- }
- goto ret1;
- }
-
- m2 = b2;
- m5 = b5;
- mhi = NULL;
- mlo = NULL;
- if (leftright) {
- if (mode < 2) {
- i = nbits - bbits;
- if (be - i++ < fpi->emin)
- /* denormal */
- i = be - fpi->emin + 1;
- }
- else {
- j = ilim - 1;
- if (m5 >= j)
- m5 -= j;
- else {
- s5 += j -= m5;
- b5 += j;
- m5 = 0;
- }
- if ((i = ilim) < 0) {
- m2 -= i;
- i = 0;
- }
- }
- b2 += i;
- s2 += i;
- mhi = i2b(1);
- }
- if (m2 > 0 && s2 > 0) {
- i = m2 < s2 ? m2 : s2;
- b2 -= i;
- m2 -= i;
- s2 -= i;
- }
- if (b5 > 0) {
- if (leftright) {
- if (m5 > 0) {
- mhi = pow5mult(mhi, m5);
- if (mhi == NULL)
- return NULL;
- b1 = mult(mhi, b);
- if (b1 == NULL)
- return NULL;
- Bfree(b);
- b = b1;
- }
- if ( (j = b5 - m5) !=0) {
- b = pow5mult(b, j);
- if (b == NULL)
- return NULL;
- }
- }
- else {
- b = pow5mult(b, b5);
- if (b == NULL)
- return NULL;
- }
- }
- S = i2b(1);
- if (S == NULL)
- return NULL;
- if (s5 > 0) {
- S = pow5mult(S, s5);
- if (S == NULL)
- return NULL;
- }
-
- /* Check for special case that d is a normalized power of 2. */
-
- spec_case = 0;
- if (mode < 2) {
- if (bbits == 1 && be0 > fpi->emin + 1) {
- /* The special case */
- b2++;
- s2++;
- spec_case = 1;
- }
- }
-
- /* Arrange for convenient computation of quotients:
- * shift left if necessary so divisor has 4 leading 0 bits.
- *
- * Perhaps we should just compute leading 28 bits of S once
- * and for all and pass them and a shift to quorem, so it
- * can do shifts and ors to compute the numerator for q.
- */
-#ifdef Pack_32
- if ( (i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f) !=0)
- i = 32 - i;
-#else
- if ( (i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0xf) !=0)
- i = 16 - i;
-#endif
- if (i > 4) {
- i -= 4;
- b2 += i;
- m2 += i;
- s2 += i;
- }
- else if (i < 4) {
- i += 28;
- b2 += i;
- m2 += i;
- s2 += i;
- }
- if (b2 > 0)
- b = lshift(b, b2);
- if (s2 > 0)
- S = lshift(S, s2);
- if (k_check) {
- if (cmp(b,S) < 0) {
- k--;
- b = multadd(b, 10, 0); /* we botched the k estimate */
- if (b == NULL)
- return NULL;
- if (leftright) {
- mhi = multadd(mhi, 10, 0);
- if (mhi == NULL)
- return NULL;
- }
- ilim = ilim1;
- }
- }
- if (ilim <= 0 && mode > 2) {
- if (ilim < 0 || cmp(b,S = multadd(S,5,0)) <= 0) {
- /* no digits, fcvt style */
-no_digits:
- k = -1 - ndigits;
- inex = STRTOG_Inexlo;
- goto ret;
- }
-one_digit:
- inex = STRTOG_Inexhi;
- *s++ = '1';
- k++;
- goto ret;
- }
- if (leftright) {
- if (m2 > 0) {
- mhi = lshift(mhi, m2);
- if (mhi == NULL)
- return NULL;
- }
-
- /* Compute mlo -- check for special case
- * that d is a normalized power of 2.
- */
-
- mlo = mhi;
- if (spec_case) {
- mhi = Balloc(mhi->k);
- if (mhi == NULL)
- return NULL;
- Bcopy(mhi, mlo);
- mhi = lshift(mhi, 1);
- if (mhi == NULL)
- return NULL;
- }
-
- for(i = 1;;i++) {
- dig = quorem(b,S) + '0';
- /* Do we yet have the shortest decimal string
- * that will round to d?
- */
- j = cmp(b, mlo);
- delta = diff(S, mhi);
- if (delta == NULL)
- return NULL;
- jj1 = delta->sign ? 1 : cmp(b, delta);
- Bfree(delta);
-#ifndef ROUND_BIASED
- if (jj1 == 0 && !mode && !(bits[0] & 1) && !rdir) {
- if (dig == '9')
- goto round_9_up;
- if (j <= 0) {
- if (b->wds > 1 || b->x[0])
- inex = STRTOG_Inexlo;
- }
- else {
- dig++;
- inex = STRTOG_Inexhi;
- }
- *s++ = dig;
- goto ret;
- }
-#endif
- if (j < 0 || (j == 0 && !mode
-#ifndef ROUND_BIASED
- && !(bits[0] & 1)
-#endif
- )) {
- if (rdir && (b->wds > 1 || b->x[0])) {
- if (rdir == 2) {
- inex = STRTOG_Inexlo;
- goto accept;
- }
- while (cmp(S,mhi) > 0) {
- *s++ = dig;
- mhi1 = multadd(mhi, 10, 0);
- if (mhi1 == NULL)
- return NULL;
- if (mlo == mhi)
- mlo = mhi1;
- mhi = mhi1;
- b = multadd(b, 10, 0);
- if (b == NULL)
- return NULL;
- dig = quorem(b,S) + '0';
- }
- if (dig++ == '9')
- goto round_9_up;
- inex = STRTOG_Inexhi;
- goto accept;
- }
- if (jj1 > 0) {
- b = lshift(b, 1);
- if (b == NULL)
- return NULL;
- jj1 = cmp(b, S);
- if ((jj1 > 0 || (jj1 == 0 && dig & 1))
- && dig++ == '9')
- goto round_9_up;
- inex = STRTOG_Inexhi;
- }
- if (b->wds > 1 || b->x[0])
- inex = STRTOG_Inexlo;
-accept:
- *s++ = dig;
- goto ret;
- }
- if (jj1 > 0 && rdir != 2) {
- if (dig == '9') { /* possible if i == 1 */
-round_9_up:
- *s++ = '9';
- inex = STRTOG_Inexhi;
- goto roundoff;
- }
- inex = STRTOG_Inexhi;
- *s++ = dig + 1;
- goto ret;
- }
- *s++ = dig;
- if (i == ilim)
- break;
- b = multadd(b, 10, 0);
- if (b == NULL)
- return NULL;
- if (mlo == mhi) {
- mlo = mhi = multadd(mhi, 10, 0);
- if (mlo == NULL)
- return NULL;
- }
- else {
- mlo = multadd(mlo, 10, 0);
- if (mlo == NULL)
- return NULL;
- mhi = multadd(mhi, 10, 0);
- if (mhi == NULL)
- return NULL;
- }
- }
- }
- else
- for(i = 1;; i++) {
- *s++ = dig = quorem(b,S) + '0';
- if (i >= ilim)
- break;
- b = multadd(b, 10, 0);
- if (b == NULL)
- return NULL;
- }
-
- /* Round off last digit */
-
- if (rdir) {
- if (rdir == 2 || (b->wds <= 1 && !b->x[0]))
- goto chopzeros;
- goto roundoff;
- }
- b = lshift(b, 1);
- if (b == NULL)
- return NULL;
- j = cmp(b, S);
- if (j > 0 || (j == 0 && dig & 1)) {
-roundoff:
- inex = STRTOG_Inexhi;
- while(*--s == '9')
- if (s == s0) {
- k++;
- *s++ = '1';
- goto ret;
- }
- ++*s++;
- }
- else {
-chopzeros:
- if (b->wds > 1 || b->x[0])
- inex = STRTOG_Inexlo;
- while(*--s == '0'){}
- s++;
- }
-ret:
- Bfree(S);
- if (mhi) {
- if (mlo && mlo != mhi)
- Bfree(mlo);
- Bfree(mhi);
- }
-ret1:
- Bfree(b);
- *s = 0;
- *decpt = k + 1;
- if (rve)
- *rve = s;
- *kindp |= inex;
- return s0;
-}
diff --git a/StdLib/LibC/gdtoa/gdtoa.h b/StdLib/LibC/gdtoa/gdtoa.h
deleted file mode 100644
index 8617a57409..0000000000
--- a/StdLib/LibC/gdtoa/gdtoa.h
+++ /dev/null
@@ -1,168 +0,0 @@
-/** @file
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by 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.
-
- $NetBSD: gdtoa.h,v 1.6.4.1.4.1 2008/04/08 21:10:55 jdc Exp
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#ifndef GDTOA_H_INCLUDED
-#define GDTOA_H_INCLUDED
-#include <LibConfig.h>
-
-#include "arith.h"
-
-#ifndef Long
-#define Long int32_t
-#endif
-#ifndef ULong
-#define ULong uint32_t
-#endif
-#ifndef UShort
-#define UShort uint16_t
-#endif
-
-#ifndef ANSI
-#define ANSI(x) x
-#define Void void
-#endif /* ANSI */
-
-#ifndef CONST
-#define CONST const
-#endif /* CONST */
-
-enum { /* return values from strtodg */
- STRTOG_Zero = 0,
- STRTOG_Normal = 1,
- STRTOG_Denormal = 2,
- STRTOG_Infinite = 3,
- STRTOG_NaN = 4,
- STRTOG_NaNbits = 5,
- STRTOG_NoNumber = 6,
- STRTOG_Retmask = 7,
-
- /* The following may be or-ed into one of the above values. */
-
- STRTOG_Neg = 0x08,
- STRTOG_Inexlo = 0x10,
- STRTOG_Inexhi = 0x20,
- STRTOG_Inexact = 0x30,
- STRTOG_Underflow= 0x40,
- STRTOG_Overflow = 0x80,
- STRTOG_NoMemory = 0x100
-};
-
- typedef struct
-FPI {
- int nbits;
- int emin;
- int emax;
- int rounding;
- int sudden_underflow;
-} FPI;
-
-enum { /* FPI.rounding values: same as FLT_ROUNDS */
- FPI_Round_zero = 0,
- FPI_Round_near = 1,
- FPI_Round_up = 2,
- FPI_Round_down = 3
-};
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define dtoa __dtoa
-#define gdtoa __gdtoa
-#define ldtoa __ldtoa
-#define hldtoa __hldtoa
-#define hdtoa __hdtoa
-#define freedtoa __freedtoa
-#define strtodg __strtodg_D2A
-#define strtopQ __strtopQ_D2A
-#define strtopx __strtopx_D2A
-#define strtopxL __strtopxL_D2A
-#define strtord __strtord_D2A
-
-extern char* dtoa ANSI((double d, int mode, int ndigits, int *decpt,
- int *sign, char **rve));
-extern char* hdtoa ANSI((double d, const char *xdigs, int ndigits, int *decpt,
- int *sign, char **rve));
-extern char* ldtoa ANSI((long double *ld, int mode, int ndigits, int *decpt,
- int *sign, char **rve));
-extern char* hldtoa ANSI((long double e, const char *xdigs, int ndigits,
- int *decpt, int *sign, char **rve));
-
-extern char* gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp,
- int mode, int ndigits, int *decpt, char **rve));
-extern void freedtoa ANSI((char*));
-extern float strtof ANSI((CONST char *, char **));
-extern double strtod ANSI((CONST char *, char **));
-extern int strtodg ANSI((CONST char*, char**, CONST FPI*, Long*, ULong*));
-
-extern char* g_ddfmt ANSI((char*, double*, int, unsigned));
-extern char* g_dfmt ANSI((char*, double*, int, unsigned));
-extern char* g_ffmt ANSI((char*, float*, int, unsigned));
-extern char* g_Qfmt ANSI((char*, void*, int, unsigned));
-extern char* g_xfmt ANSI((char*, void*, int, unsigned));
-extern char* g_xLfmt ANSI((char*, void*, int, unsigned));
-
-extern int strtoId ANSI((CONST char*, char**, double*, double*));
-extern int strtoIdd ANSI((CONST char*, char**, double*, double*));
-extern int strtoIf ANSI((CONST char*, char**, float*, float*));
-extern int strtoIQ ANSI((CONST char*, char**, void*, void*));
-extern int strtoIx ANSI((CONST char*, char**, void*, void*));
-extern int strtoIxL ANSI((CONST char*, char**, void*, void*));
-extern int strtord ANSI((CONST char*, char**, int, double*));
-extern int strtordd ANSI((CONST char*, char**, int, double*));
-extern int strtorf ANSI((CONST char*, char**, int, float*));
-extern int strtorQ ANSI((CONST char*, char**, int, void*));
-extern int strtorx ANSI((CONST char*, char**, int, void*));
-extern int strtorxL ANSI((CONST char*, char**, int, void*));
-
-extern int strtodI ANSI((CONST char*, char**, double*));
-extern int strtopd ANSI((CONST char*, char**, double*));
-extern int strtopdd ANSI((CONST char*, char**, double*));
-extern int strtopf ANSI((CONST char*, char**, float*));
-extern int strtopQ ANSI((CONST char*, char**, void*));
-extern int strtopx ANSI((CONST char*, char**, void*));
-extern int strtopxL ANSI((CONST char*, char**, void*));
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* GDTOA_H_INCLUDED */
diff --git a/StdLib/LibC/gdtoa/gdtoa.inf b/StdLib/LibC/gdtoa/gdtoa.inf
deleted file mode 100644
index a23749a8cc..0000000000
--- a/StdLib/LibC/gdtoa/gdtoa.inf
+++ /dev/null
@@ -1,82 +0,0 @@
-## @file
-# This module contains source for a library of binary -> decimal
-# and decimal -> binary conversion routines, for single-, double-,
-# and extended-precision IEEE binary floating-point arithmetic, and
-# other IEEE-like binary floating-point, including "double double".
-#
-# Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php.
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LibGdtoa
- FILE_GUID = 5c98de6e-cb69-465f-b6b9-f661e26e6f9d
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibGdtoa
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources.X64]
- strtof.c
- strtold_px.c
- strtopx.c
-
-[Sources.IPF]
- strtof.c
- Ipf/strtold.c
-
-[Sources.IA32]
- strtof.c
- strtold_px.c
- strtopx.c
-
-[Sources.ARM]
- strtof.c
- Ipf/strtold.c
-
-[Sources.AARCH64]
- strtof.c
- Ipf/strtold.c
-
-[Sources]
- strtod.c # Public interfaces
- atof.c
-
- # Private interfaces interfacing to libc
- dtoa.c
- ldtoa.c
- gdtoa.c
-
- # private interfaces
- dmisc.c
- gmisc.c
- hd_init.c
- hexnan.c
- misc.c
- smisc.c
- strtodg.c
- sum.c
- ulp.c
-
-[Packages]
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- MdePkg/MdePkg.dec
-
-[LibraryClasses]
- LibC
- LibLocale
- LibStdLib
- LibString
diff --git a/StdLib/LibC/gdtoa/gdtoaimp.h b/StdLib/LibC/gdtoa/gdtoaimp.h
deleted file mode 100644
index a5eaa72f41..0000000000
--- a/StdLib/LibC/gdtoa/gdtoaimp.h
+++ /dev/null
@@ -1,634 +0,0 @@
-/** @file
- This is a variation on dtoa.c that converts arbitary binary
- floating-point formats to and from decimal notation. It uses
- double-precision arithmetic internally, so there are still
- various #ifdefs that adapt the calculations to the native
- IEEE double-precision arithmetic.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- *****************************************************************
-
- The author of this software is David M. Gay.
-
- Copyright (C) 1998-2000 by 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.
-
- Please send bug reports to David M. Gay (dmg at acm dot org,
- with " at " changed at "@" and " dot " changed to ".").
-
- *****************************************************************
-
- NetBSD: gdtoaimp.h,v 1.5.4.1 2007/05/07 19:49:06 pavel Exp
-**/
-
-/* On a machine with IEEE extended-precision registers, it is
- * necessary to specify double-precision (53-bit) rounding precision
- * before invoking strtod or dtoa. If the machine uses (the equivalent
- * of) Intel 80x87 arithmetic, the call
- * _control87(PC_53, MCW_PC);
- * does this with many compilers. Whether this or another call is
- * appropriate depends on the compiler; for this to work, it may be
- * necessary to #include "float.h" or another system-dependent header
- * file.
- */
-
-/* strtod for IEEE-, VAX-, and IBM-arithmetic machines.
- *
- * This strtod returns a nearest machine number to the input decimal
- * string (or sets errno to ERANGE). With IEEE arithmetic, ties are
- * broken by the IEEE round-even rule. Otherwise ties are broken by
- * biased rounding (add half and chop).
- *
- * Inspired loosely by William D. Clinger's paper "How to Read Floating
- * Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 112-126].
- *
- * Modifications:
- *
- * 1. We only require IEEE, IBM, or VAX double-precision
- * arithmetic (not IEEE double-extended).
- * 2. We get by with floating-point arithmetic in a case that
- * Clinger missed -- when we're computing d * 10^n
- * for a small integer d and the integer n is not too
- * much larger than 22 (the maximum integer k for which
- * we can represent 10^k exactly), we may be able to
- * compute (d*10^k) * 10^(e-k) with just one roundoff.
- * 3. Rather than a bit-at-a-time adjustment of the binary
- * result in the hard case, we use floating-point
- * arithmetic to determine the adjustment to within
- * one bit; only in really hard cases do we need to
- * compute a second residual.
- * 4. Because of 3., we don't need a large table of powers of 10
- * for ten-to-e (just some small tables, e.g. of 10^k
- * for 0 <= k <= 22).
- */
-
-/*
- * #define IEEE_LITTLE_ENDIAN for IEEE-arithmetic machines where the least
- * significant byte has the lowest address.
- * #define IEEE_BIG_ENDIAN for IEEE-arithmetic machines where the most
- * significant byte has the lowest address.
- * #define Long int on machines with 32-bit ints and 64-bit longs.
- * #define Sudden_Underflow for IEEE-format machines without gradual
- * underflow (i.e., that flush to zero on underflow).
- * #define No_leftright to omit left-right logic in fast floating-point
- * computation of dtoa.
- * #define Check_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3.
- * #define RND_PRODQUOT to use rnd_prod and rnd_quot (assembly routines
- * that use extended-precision instructions to compute rounded
- * products and quotients) with IBM.
- * #define ROUND_BIASED for IEEE-format with biased rounding.
- * #define Inaccurate_Divide for IEEE-format with correctly rounded
- * products but inaccurate quotients, e.g., for Intel i860.
- * #define NO_LONG_LONG on machines that do not have a "long long"
- * integer type (of >= 64 bits). On such machines, you can
- * #define Just_16 to store 16 bits per 32-bit Long when doing
- * high-precision integer arithmetic. Whether this speeds things
- * up or slows things down depends on the machine and the number
- * being converted. If long long is available and the name is
- * something other than "long long", #define Llong to be the name,
- * and if "unsigned Llong" does not work as an unsigned version of
- * Llong, #define #ULLong to be the corresponding unsigned type.
- * #define Bad_float_h if your system lacks a float.h or if it does not
- * define some or all of DBL_DIG, DBL_MAX_10_EXP, DBL_MAX_EXP,
- * FLT_RADIX, FLT_ROUNDS, and DBL_MAX.
- * #define MALLOC your_malloc, where your_malloc(n) acts like malloc(n)
- * if memory is available and otherwise does something you deem
- * appropriate. If MALLOC is undefined, malloc will be invoked
- * directly -- and assumed always to succeed.
- * #define Omit_Private_Memory to omit logic (added Jan. 1998) for making
- * memory allocations from a private pool of memory when possible.
- * When used, the private pool is PRIVATE_MEM bytes long: 2304 bytes,
- * unless #defined to be a different length. This default length
- * suffices to get rid of MALLOC calls except for unusual cases,
- * such as decimal-to-binary conversion of a very long string of
- * digits. When converting IEEE double precision values, the
- * longest string gdtoa can return is about 751 bytes long. For
- * conversions by strtod of strings of 800 digits and all gdtoa
- * conversions of IEEE doubles in single-threaded executions with
- * 8-byte pointers, PRIVATE_MEM >= 7400 appears to suffice; with
- * 4-byte pointers, PRIVATE_MEM >= 7112 appears adequate.
- * #define INFNAN_CHECK on IEEE systems to cause strtod to check for
- * Infinity and NaN (case insensitively).
- * When INFNAN_CHECK is #defined and No_Hex_NaN is not #defined,
- * strtodg also accepts (case insensitively) strings of the form
- * NaN(x), where x is a string of hexadecimal digits and spaces;
- * if there is only one string of hexadecimal digits, it is taken
- * for the fraction bits of the resulting NaN; if there are two or
- * more strings of hexadecimal digits, each string is assigned
- * to the next available sequence of 32-bit words of fractions
- * bits (starting with the most significant), right-aligned in
- * each sequence.
- * #define MULTIPLE_THREADS if the system offers preemptively scheduled
- * multiple threads. In this case, you must provide (or suitably
- * #define) two locks, acquired by ACQUIRE_DTOA_LOCK(n) and freed
- * by FREE_DTOA_LOCK(n) for n = 0 or 1. (The second lock, accessed
- * in pow5mult, ensures lazy evaluation of only one copy of high
- * powers of 5; omitting this lock would introduce a small
- * probability of wasting memory, but would otherwise be harmless.)
- * You must also invoke freedtoa(s) to free the value s returned by
- * dtoa. You may do so whether or not MULTIPLE_THREADS is #defined.
- * #define IMPRECISE_INEXACT if you do not care about the setting of
- * the STRTOG_Inexact bits in the special case of doing IEEE double
- * precision conversions (which could also be done by the strtog in
- * dtoa.c).
- * #define NO_HEX_FP to disable recognition of C9x's hexadecimal
- * floating-point constants.
- * #define -DNO_ERRNO to suppress setting errno (in strtod.c and
- * strtodg.c).
- * #define NO_STRING_H to use private versions of memcpy.
- * On some K&R systems, it may also be necessary to
- * #define DECLARE_SIZE_T in this case.
- * #define YES_ALIAS to permit aliasing certain double values with
- * arrays of ULongs. This leads to slightly better code with
- * some compilers and was always used prior to 19990916, but it
- * is not strictly legal and can cause trouble with aggressively
- * optimizing compilers (e.g., gcc 2.95.1 under -O2).
- * #define USE_LOCALE to use the current locale's decimal_point value.
- */
-
-/* #define IEEE_{BIG,LITTLE}_ENDIAN in ${ARCHDIR}/gdtoa/arith.h */
-#include <LibConfig.h>
-
-#include <stdint.h>
-#define Short int16_t
-#define UShort uint16_t
-#define Long int32_t
-#define ULong uint32_t
-#define LLong int64_t
-#define ULLong uint64_t
-
-#define INFNAN_CHECK
-#ifdef _REENTRANT
-#define MULTIPLE_THREADS
-#endif
-#define USE_LOCALE
-
-#ifndef GDTOAIMP_H_INCLUDED
-#define GDTOAIMP_H_INCLUDED
-#include "gdtoa.h"
-#include "gd_qnan.h"
-
-#ifdef DEBUG
-#include "stdio.h"
-#define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);}
-#endif
-
-#include "stdlib.h"
-#include "string.h"
-
-#define Char void
-
-#ifdef MALLOC
-extern Char *MALLOC ANSI((size_t));
-#else
-#define MALLOC malloc
-#endif
-
-#undef IEEE_Arith
-#undef Avoid_Underflow
-#ifdef IEEE_BIG_ENDIAN
-#define IEEE_Arith
-#endif
-#ifdef IEEE_LITTLE_ENDIAN
-#define IEEE_Arith
-#endif
-
-#include "errno.h"
-#ifdef Bad_float_h
-
-#ifdef IEEE_Arith
-#define DBL_DIG 15
-#define DBL_MAX_10_EXP 308
-#define DBL_MAX_EXP 1024
-#define FLT_RADIX 2
-#define DBL_MAX 1.7976931348623157e+308
-#endif
-
-#ifndef LONG_MAX
-#define LONG_MAX 2147483647
-#endif
-
-#else /* ifndef Bad_float_h */
-#include "float.h"
-#endif /* Bad_float_h */
-
-#ifdef IEEE_Arith
-#define Scale_Bit 0x10
-#define n_bigtens 5
-#endif
-
-#include "math.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if defined(IEEE_LITTLE_ENDIAN) + defined(IEEE_BIG_ENDIAN) != 1
-Exactly one of IEEE_LITTLE_ENDIAN or IEEE_BIG_ENDIAN should be defined.
-#endif
-
-/* This union assumes that:
- sizeof(double) == 8
- sizeof(UINT32) == 4
-
- If this is not the case, the type and dimension of the L member will
- have to be modified.
-*/
-typedef union { double d; UINT32 L[2]; } U;
-
-#ifdef YES_ALIAS
-#define dval(x) x
-#ifdef IEEE_LITTLE_ENDIAN
-#define word0(x) ((ULong *)&x)[1]
-#define word1(x) ((ULong *)&x)[0]
-#else
-#define word0(x) ((ULong *)&x)[0]
-#define word1(x) ((ULong *)&x)[1]
-#endif
-#else /* !YES_ALIAS */
-#ifdef IEEE_LITTLE_ENDIAN
-#define word0(x) ( /* LINTED */ (U*)&x)->L[1]
-#define word1(x) ( /* LINTED */ (U*)&x)->L[0]
-#else
-#define word0(x) ( /* LINTED */ (U*)&x)->L[0]
-#define word1(x) ( /* LINTED */ (U*)&x)->L[1]
-#endif
-#define dval(x) ( /* LINTED */ (U*)&x)->d
-#endif /* YES_ALIAS */
-
-/* The following definition of Storeinc is appropriate for MIPS processors.
- * An alternative that might be better on some machines is
- * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff)
- */
-#if defined(IEEE_LITTLE_ENDIAN)
-#define Storeinc(a,b,c) \
- (((unsigned short *)(void *)a)[1] = (unsigned short)b, \
- ((unsigned short *)(void *)a)[0] = (unsigned short)c, \
- a++)
-#else
-#define Storeinc(a,b,c) \
- (((unsigned short *)(void *)a)[0] = (unsigned short)b, \
- ((unsigned short *)(void *)a)[1] = (unsigned short)c, \
- a++)
-#endif
-
-/* #define P DBL_MANT_DIG */
-/* Ten_pmax = floor(P*log(2)/log(5)) */
-/* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */
-/* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */
-/* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */
-
-#ifdef IEEE_Arith
-#define Exp_shift 20
-#define Exp_shift1 20
-#define Exp_msk1 0x100000
-#define Exp_msk11 0x100000
-#define Exp_mask 0x7ff00000
-#define P 53
-#define Bias 1023
-#define Emin (-1022)
-#define Exp_1 0x3ff00000
-#define Exp_11 0x3ff00000
-#define Ebits 11
-#define Frac_mask 0xfffffU
-#define Frac_mask1 0xfffffU
-#define Ten_pmax 22
-#define Bletch 0x10
-#define Bndry_mask 0xfffffU
-#define Bndry_mask1 0xfffffU
-#define LSB 1
-#define Sign_bit 0x80000000
-#define Log2P 1
-#define Tiny0 0
-#define Tiny1 1
-#define Quick_max 14
-#define Int_max 14
-
-#ifndef Flt_Rounds
-#ifdef FLT_ROUNDS
-#define Flt_Rounds FLT_ROUNDS
-#else
-#define Flt_Rounds 1
-#endif
-#endif /*Flt_Rounds*/
-
-#else /* ifndef IEEE_Arith */
-#undef Sudden_Underflow
-#define Sudden_Underflow
-#ifdef IBM
-#undef Flt_Rounds
-#define Flt_Rounds 0
-#define Exp_shift 24
-#define Exp_shift1 24
-#define Exp_msk1 0x1000000
-#define Exp_msk11 0x1000000
-#define Exp_mask 0x7f000000
-#define P 14
-#define Bias 65
-#define Exp_1 0x41000000
-#define Exp_11 0x41000000
-#define Ebits 8 /* exponent has 7 bits, but 8 is the right value in b2d */
-#define Frac_mask 0xffffff
-#define Frac_mask1 0xffffff
-#define Bletch 4
-#define Ten_pmax 22
-#define Bndry_mask 0xefffff
-#define Bndry_mask1 0xffffff
-#define LSB 1
-#define Sign_bit 0x80000000
-#define Log2P 4
-#define Tiny0 0x100000
-#define Tiny1 0
-#define Quick_max 14
-#define Int_max 15
-#else /* VAX */
-#undef Flt_Rounds
-#define Flt_Rounds 1
-#define Exp_shift 23
-#define Exp_shift1 7
-#define Exp_msk1 0x80
-#define Exp_msk11 0x800000
-#define Exp_mask 0x7f80
-#define P 56
-#define Bias 129
-#define Exp_1 0x40800000
-#define Exp_11 0x4080
-#define Ebits 8
-#define Frac_mask 0x7fffff
-#define Frac_mask1 0xffff007f
-#define Ten_pmax 24
-#define Bletch 2
-#define Bndry_mask 0xffff007f
-#define Bndry_mask1 0xffff007f
-#define LSB 0x10000
-#define Sign_bit 0x8000
-#define Log2P 1
-#define Tiny0 0x80
-#define Tiny1 0
-#define Quick_max 15
-#define Int_max 15
-#endif /* IBM, VAX */
-#endif /* IEEE_Arith */
-
-#ifndef IEEE_Arith
-#define ROUND_BIASED
-#endif
-
-#ifdef RND_PRODQUOT
-#define rounded_product(a,b) a = rnd_prod(a, b)
-#define rounded_quotient(a,b) a = rnd_quot(a, b)
-extern double rnd_prod(double, double), rnd_quot(double, double);
-#else
-#define rounded_product(a,b) a *= b
-#define rounded_quotient(a,b) a /= b
-#endif
-
-#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
-#define Big1 0xffffffffU
-
-#undef Pack_16
-#ifndef Pack_32
-#define Pack_32
-#endif
-
-#ifdef NO_LONG_LONG
-#undef ULLong
-#ifdef Just_16
-#undef Pack_32
-#define Pack_16
-/* When Pack_32 is not defined, we store 16 bits per 32-bit Long.
- * This makes some inner loops simpler and sometimes saves work
- * during multiplications, but it often seems to make things slightly
- * slower. Hence the default is now to store 32 bits per Long.
- */
-#endif
-#else /* long long available */
-#ifndef Llong
-#define Llong long long
-#endif
-#ifndef ULLong
-#define ULLong unsigned Llong
-#endif
-#endif /* NO_LONG_LONG */
-
-#ifdef Pack_32
-#define ULbits 32
-#define kshift 5
-#define kmask 31
-#define ALL_ON 0xffffffff
-#else
-#define ULbits 16
-#define kshift 4
-#define kmask 15
-#define ALL_ON 0xffff
-#endif
-
-#ifndef MULTIPLE_THREADS
-#define ACQUIRE_DTOA_LOCK(n) /*nothing*/
-#define FREE_DTOA_LOCK(n) /*nothing*/
-#else
-#include "reentrant.h"
-
-extern mutex_t __gdtoa_locks[2];
-
-#define ACQUIRE_DTOA_LOCK(n) \
- do { \
- if (__isthreaded) \
- mutex_lock(&__gdtoa_locks[n]); \
- } while (/* CONSTCOND */ 0)
-#define FREE_DTOA_LOCK(n) \
- do { \
- if (__isthreaded) \
- mutex_unlock(&__gdtoa_locks[n]); \
- } while (/* CONSTCOND */ 0)
-#endif
-
-#define Kmax (sizeof(size_t) << 3)
-
- struct
-Bigint {
- struct Bigint *next;
- int k, maxwds, sign, wds;
- ULong x[1];
- };
-
- typedef struct Bigint Bigint;
-
-#ifdef NO_STRING_H
-#ifdef DECLARE_SIZE_T
-typedef unsigned int size_t;
-#endif
-extern void memcpy_D2A ANSI((void*, const void*, size_t));
-#define Bcopy(x,y) memcpy_D2A(&x->sign,&y->sign,y->wds*sizeof(ULong) + 2*sizeof(int))
-#else /* !NO_STRING_H */
-#define Bcopy(x,y) memcpy(&x->sign,&y->sign,y->wds*sizeof(ULong) + 2*sizeof(int))
-#endif /* NO_STRING_H */
-
-#define Balloc __Balloc_D2A
-#define Bfree __Bfree_D2A
-#define ULtoQ __ULtoQ_D2A
-#define ULtof __ULtof_D2A
-#define ULtod __ULtod_D2A
-#define ULtodd __ULtodd_D2A
-#define ULtox __ULtox_D2A
-#define ULtoxL __ULtoxL_D2A
-#define any_on __any_on_D2A
-#define b2d __b2d_D2A
-#define bigtens __bigtens_D2A
-#define cmp __cmp_D2A
-#define copybits __copybits_D2A
-#define d2b __d2b_D2A
-#define decrement __decrement_D2A
-#define diff __diff_D2A
-#define dtoa_result __dtoa_result_D2A
-#define g__fmt __g__fmt_D2A
-#define gethex __gethex_D2A
-#define hexdig __hexdig_D2A
-#define hexdig_init_D2A __hexdig_init_D2A
-#define hexnan __hexnan_D2A
-#define hi0bits __hi0bits_D2A
-#define hi0bits_D2A __hi0bits_D2A
-#define i2b __i2b_D2A
-#define increment __increment_D2A
-#define lo0bits __lo0bits_D2A
-#define lshift __lshift_D2A
-#define match __match_D2A
-#define mult __mult_D2A
-#define multadd __multadd_D2A
-#define nrv_alloc __nrv_alloc_D2A
-#define pow5mult __pow5mult_D2A
-#define quorem __quorem_D2A
-#define ratio __ratio_D2A
-#define rshift __rshift_D2A
-#define rv_alloc __rv_alloc_D2A
-#define s2b __s2b_D2A
-#define set_ones __set_ones_D2A
-#define strcp __strcp_D2A
-#define strcp_D2A __strcp_D2A
-#define strtoIg __strtoIg_D2A
-#define sum __sum_D2A
-#define tens __tens_D2A
-#define tinytens __tinytens_D2A
-#define tinytens __tinytens_D2A
-#define trailz __trailz_D2A
-#define ulp __ulp_D2A
-
-extern char *dtoa_result;
-extern CONST double bigtens[], tens[], tinytens[];
-extern unsigned char hexdig[];
-
-extern Bigint *Balloc (int);
-extern void Bfree (Bigint*);
-extern void ULtof (ULong*, ULong*, Long, int);
-extern void ULtod (ULong*, ULong*, Long, int);
-extern void ULtodd (ULong*, ULong*, Long, int);
-extern void ULtoQ (ULong*, ULong*, Long, int);
-extern void ULtox (UShort*, ULong*, Long, int);
-extern void ULtoxL (ULong*, ULong*, Long, int);
-extern ULong any_on (Bigint*, int);
-extern double b2d (Bigint*, int*);
-extern int cmp (Bigint*, Bigint*);
-extern void copybits (ULong*, int, Bigint*);
-extern Bigint *d2b (double, int*, int*);
-extern int decrement (Bigint*);
-extern Bigint *diff (Bigint*, Bigint*);
-extern char *dtoa (double d, int mode, int ndigits,
- int *decpt, int *sign, char **rve);
-extern char *g__fmt (char*, char*, char*, int, ULong);
-extern int gethex (CONST char**, CONST FPI*, Long*, Bigint**, int);
-extern void hexdig_init_D2A(Void);
-extern int hexnan (CONST char**, CONST FPI*, ULong*);
-extern int hi0bits_D2A (ULong);
-extern Bigint *i2b (int);
-extern Bigint *increment (Bigint*);
-extern int lo0bits (ULong*);
-extern Bigint *lshift (Bigint*, int);
-extern int match (CONST char**, CONST char*);
-extern Bigint *mult (Bigint*, Bigint*);
-extern Bigint *multadd (Bigint*, int, int);
-extern char *nrv_alloc (CONST char*, char **, size_t);
-extern Bigint *pow5mult (Bigint*, int);
-extern int quorem (Bigint*, Bigint*);
-extern double ratio (Bigint*, Bigint*);
-extern void rshift (Bigint*, int);
-extern char *rv_alloc (size_t);
-extern Bigint *s2b (CONST char*, int, int, ULong);
-extern Bigint *set_ones (Bigint*, int);
-extern char *strcp (char*, const char*);
-extern int strtoIg (CONST char*, char**, FPI*, Long*, Bigint**, int*);
-extern double strtod (const char *s00, char **se);
-extern Bigint *sum (Bigint*, Bigint*);
-extern int trailz (CONST Bigint*);
-extern double ulp (double);
-
-#ifdef __cplusplus
-}
-#endif
-/*
- * NAN_WORD0 and NAN_WORD1 are only referenced in strtod.c. Prior to
- * 20050115, they used to be hard-wired here (to 0x7ff80000 and 0,
- * respectively), but now are determined by compiling and running
- * qnan.c to generate gd_qnan.h, which specifies d_QNAN0 and d_QNAN1.
- * Formerly gdtoaimp.h recommended supplying suitable -DNAN_WORD0=...
- * and -DNAN_WORD1=... values if necessary. This should still work.
- * (On HP Series 700/800 machines, -DNAN_WORD0=0x7ff40000 works.)
- */
-#ifdef IEEE_Arith
-#ifdef IEEE_BIG_ENDIAN
-#define _0 0
-#define _1 1
-#ifndef NAN_WORD0
-#define NAN_WORD0 d_QNAN0
-#endif
-#ifndef NAN_WORD1
-#define NAN_WORD1 d_QNAN1
-#endif
-#else
-#define _0 1
-#define _1 0
-#ifndef NAN_WORD0
-#define NAN_WORD0 d_QNAN1
-#endif
-#ifndef NAN_WORD1
-#define NAN_WORD1 d_QNAN0
-#endif
-#endif
-#else
-#undef INFNAN_CHECK
-#endif
-
-#undef SI
-#ifdef Sudden_Underflow
-#define SI 1
-#else
-#define SI 0
-#endif
-
-#endif /* GDTOAIMP_H_INCLUDED */
diff --git a/StdLib/LibC/gdtoa/gethex.c b/StdLib/LibC/gdtoa/gethex.c
deleted file mode 100644
index 02920e748c..0000000000
--- a/StdLib/LibC/gdtoa/gethex.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/* $NetBSD: gethex.c,v 1.3.14.1 2008/04/08 21:10:55 jdc Exp $ */
-
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by 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.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-#include <LibConfig.h>
-
-#include "gdtoaimp.h"
-
-#ifdef USE_LOCALE
-#include "locale.h"
-#endif
-
- int
-gethex( CONST char **sp, CONST FPI *fpi, Long *expt, Bigint **bp, int sign)
-{
- Bigint *b;
- CONST unsigned char *decpt, *s0, *s, *s1;
- int esign, havedig, irv, k, n, nbits, up, zret;
- ULong L, lostbits, *x;
- Long e, e1;
-#ifdef USE_LOCALE
- unsigned char decimalpoint = *localeconv()->decimal_point;
-#else
-#define decimalpoint '.'
-#endif
-
- if (!hexdig['0'])
- hexdig_init_D2A();
- havedig = 0;
- s0 = *(CONST unsigned char **)sp + 2;
- while(s0[havedig] == '0')
- havedig++;
- s0 += havedig;
- s = s0;
- decpt = 0;
- zret = 0;
- e = 0;
- if (!hexdig[*s]) {
- zret = 1;
- if (*s != decimalpoint)
- goto pcheck;
- decpt = ++s;
- if (!hexdig[*s])
- goto pcheck;
- while(*s == '0')
- s++;
- if (hexdig[*s])
- zret = 0;
- havedig = 1;
- s0 = s;
- }
- while(hexdig[*s])
- s++;
- if (*s == decimalpoint && !decpt) {
- decpt = ++s;
- while(hexdig[*s])
- s++;
- }
- if (decpt)
- e = -(((Long)(s-decpt)) << 2);
- pcheck:
- s1 = s;
- switch(*s) {
- case 'p':
- case 'P':
- esign = 0;
- switch(*++s) {
- case '-':
- esign = 1;
- /* FALLTHROUGH */
- case '+':
- s++;
- }
- if ((n = hexdig[*s]) == 0 || n > 0x19) {
- s = s1;
- break;
- }
- e1 = n - 0x10;
- while((n = hexdig[*++s]) !=0 && n <= 0x19)
- e1 = 10*e1 + n - 0x10;
- if (esign)
- e1 = -e1;
- e += e1;
- }
- *sp = __UNCONST(s);
- if (zret)
- return havedig ? STRTOG_Zero : STRTOG_NoNumber;
- n = (int)(s1 - s0 - 1);
- for(k = 0; n > 7; n = (unsigned int)n >> 1)
- k++;
- b = Balloc(k);
- if (b == NULL)
- return STRTOG_NoMemory;
- x = b->x;
- n = 0;
- L = 0;
- while(s1 > s0) {
- if (*--s1 == decimalpoint)
- continue;
- if (n == 32) {
- *x++ = L;
- L = 0;
- n = 0;
- }
- L |= (hexdig[*s1] & 0x0f) << n;
- n += 4;
- }
- *x++ = L;
- b->wds = n = (int)(x - b->x);
- n = 32*n - hi0bits(L);
- nbits = fpi->nbits;
- lostbits = 0;
- x = b->x;
- if (n > nbits) {
- n -= nbits;
- if (any_on(b,n)) {
- lostbits = 1;
- k = n - 1;
- if (x[(unsigned int)k>>kshift] & 1 << (k & kmask)) {
- lostbits = 2;
- if (k > 1 && any_on(b,k-1))
- lostbits = 3;
- }
- }
- rshift(b, n);
- e += n;
- }
- else if (n < nbits) {
- n = nbits - n;
- b = lshift(b, n);
- if (b == NULL)
- return STRTOG_NoMemory;
- e -= n;
- x = b->x;
- }
- if (e > fpi->emax) {
- ovfl:
- Bfree(b);
- *bp = 0;
- return STRTOG_Infinite | STRTOG_Overflow | STRTOG_Inexhi;
- }
- irv = STRTOG_Normal;
- if (e < fpi->emin) {
- irv = STRTOG_Denormal;
- n = fpi->emin - e;
- if (n >= nbits) {
- switch (fpi->rounding) {
- case FPI_Round_near:
- if (n == nbits && (n < 2 || any_on(b,n-1)))
- goto one_bit;
- break;
- case FPI_Round_up:
- if (!sign)
- goto one_bit;
- break;
- case FPI_Round_down:
- if (sign) {
- one_bit:
- *expt = fpi->emin;
- x[0] = b->wds = 1;
- *bp = b;
- return STRTOG_Denormal | STRTOG_Inexhi
- | STRTOG_Underflow;
- }
- }
- Bfree(b);
- *bp = 0;
- return STRTOG_Zero | STRTOG_Inexlo | STRTOG_Underflow;
- }
- k = n - 1;
- if (lostbits)
- lostbits = 1;
- else if (k > 0)
- lostbits = any_on(b,k);
- if (x[(unsigned int)k>>kshift] & 1 << (k & kmask))
- lostbits |= 2;
- nbits -= n;
- rshift(b,n);
- e = fpi->emin;
- }
- if (lostbits) {
- up = 0;
- switch(fpi->rounding) {
- case FPI_Round_zero:
- break;
- case FPI_Round_near:
- if (lostbits & 2
- && (lostbits & 1) | (x[0] & 1))
- up = 1;
- break;
- case FPI_Round_up:
- up = 1 - sign;
- break;
- case FPI_Round_down:
- up = sign;
- }
- if (up) {
- k = b->wds;
- b = increment(b);
- x = b->x;
- if (irv == STRTOG_Denormal) {
- if (nbits == fpi->nbits - 1
- && x[(unsigned int)nbits >> kshift] & 1 << (nbits & kmask))
- irv = STRTOG_Normal;
- }
- else if (b->wds > k
- || ((n = nbits & kmask) !=0
- && hi0bits(x[k-1]) < 32-n)) {
- rshift(b,1);
- if (++e > fpi->emax)
- goto ovfl;
- }
- irv |= STRTOG_Inexhi;
- }
- else
- irv |= STRTOG_Inexlo;
- }
- *bp = b;
- *expt = e;
- return irv;
- }
diff --git a/StdLib/LibC/gdtoa/gmisc.c b/StdLib/LibC/gdtoa/gmisc.c
deleted file mode 100644
index e185940ad8..0000000000
--- a/StdLib/LibC/gdtoa/gmisc.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* $NetBSD: gmisc.c,v 1.3 2006/03/11 18:38:14 kleink Exp $ */
-
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by 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.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-#include <LibConfig.h>
-
-#include "gdtoaimp.h"
-
- void
-rshift(Bigint *b, int k)
-{
- ULong *x, *x1, *xe, y;
- int n;
-
- x = x1 = b->x;
- n = (unsigned int)k >> kshift;
- if (n < b->wds) {
- xe = x + b->wds;
- x += n;
- if (k &= kmask) {
- n = ULbits - k;
- y = *x++ >> k;
- while(x < xe) {
- *x1++ = (y | (*x << n)) & ALL_ON;
- y = *x++ >> k;
- }
- if ((*x1 = y) !=0)
- x1++;
- }
- else
- while(x < xe)
- *x1++ = *x++;
- }
- if ((b->wds = (int)(x1 - b->x)) == 0)
- b->x[0] = 0;
- }
-
- int
-trailz(CONST Bigint *b)
-{
- ULong L;
- CONST ULong *x, *xe;
- int n = 0;
-
- x = b->x;
- xe = x + b->wds;
- for(n = 0; x < xe && !*x; x++)
- n += ULbits;
- if (x < xe) {
- L = *x;
- n += lo0bits(&L);
- }
- return n;
- }
diff --git a/StdLib/LibC/gdtoa/hd_init.c b/StdLib/LibC/gdtoa/hd_init.c
deleted file mode 100644
index bcf76c2468..0000000000
--- a/StdLib/LibC/gdtoa/hd_init.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* $NetBSD: hd_init.c,v 1.2 2006/01/25 15:27:42 kleink Exp $ */
-
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 2000 by 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.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-#include <LibConfig.h>
-
-#include "gdtoaimp.h"
-
- unsigned char hexdig[256];
-
- static void
-#ifdef KR_headers
-htinit(h, s, inc) unsigned char *h; CONST unsigned char *s; int inc;
-#else
-htinit(unsigned char *h, CONST unsigned char *s, int inc)
-#endif
-{
- int i, j;
- for(i = 0; (j = s[i]) !=0; i++)
- h[j] = (unsigned char)(i + inc);
- }
-
- void
-hexdig_init_D2A(Void)
-{
-#define USC (CONST unsigned char *)
- htinit(hexdig, USC "0123456789", 0x10);
- htinit(hexdig, USC "abcdef", 0x10 + 10);
- htinit(hexdig, USC "ABCDEF", 0x10 + 10);
- }
diff --git a/StdLib/LibC/gdtoa/hexnan.c b/StdLib/LibC/gdtoa/hexnan.c
deleted file mode 100644
index 971e217552..0000000000
--- a/StdLib/LibC/gdtoa/hexnan.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/* $NetBSD: hexnan.c,v 1.3 2006/03/11 18:38:14 kleink Exp $ */
-
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 2000 by 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.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-#include <LibConfig.h>
-
-#include "gdtoaimp.h"
-
- static void
-#ifdef KR_headers
-L_shift(x, x1, i) ULong *x; ULong *x1; int i;
-#else
-L_shift(ULong *x, ULong *x1, int i)
-#endif
-{
- int j;
-
- i = 8 - i;
- i <<= 2;
- j = ULbits - i;
- do {
- *x |= x[1] << j;
- x[1] >>= i;
- } while(++x < x1);
- }
-
- int
-#ifdef KR_headers
-hexnan(sp, fpi, x0)
- CONST char **sp; CONST FPI *fpi; ULong *x0;
-#else
-hexnan( CONST char **sp, CONST FPI *fpi, ULong *x0)
-#endif
-{
- ULong c, h, *x, *x1, *xe;
- CONST char *s;
- int havedig, hd0, i, nbits;
-
- if (!hexdig['0'])
- hexdig_init_D2A();
- nbits = fpi->nbits;
- x = x0 + ((unsigned int)nbits >> kshift);
- if (nbits & kmask)
- x++;
- *--x = 0;
- x1 = xe = x;
- havedig = hd0 = i = 0;
- s = *sp;
- while((c = *(CONST unsigned char*)++s) != 0) {
- if ((h = hexdig[c]) == 0) {
- if (c <= ' ') {
- if (hd0 < havedig) {
- if (x < x1 && i < 8)
- L_shift(x, x1, i);
- if (x <= x0) {
- i = 8;
- continue;
- }
- hd0 = havedig;
- *--x = 0;
- x1 = x;
- i = 0;
- }
- continue;
- }
- if (/*(*/ c == ')' && havedig) {
- *sp = s + 1;
- break;
- }
- return STRTOG_NaN;
- }
- havedig++;
- if (++i > 8) {
- if (x <= x0)
- continue;
- i = 1;
- *--x = 0;
- }
- *x = (*x << 4) | (h & 0xf);
- }
- if (!havedig)
- return STRTOG_NaN;
- if (x < x1 && i < 8)
- L_shift(x, x1, i);
- if (x > x0) {
- x1 = x0;
- do *x1++ = *x++;
- while(x <= xe);
- do *x1++ = 0;
- while(x1 <= xe);
- }
- else {
- /* truncate high-order word if necessary */
- if ( (i = nbits & (ULbits-1)) !=0)
- *xe &= ((ULong)0xffffffff) >> (ULbits - i);
- }
- for(x1 = xe;; --x1) {
- if (*x1 != 0)
- break;
- if (x1 == x0) {
- *x1 = 1;
- break;
- }
- }
- return STRTOG_NaNbits;
- }
diff --git a/StdLib/LibC/gdtoa/ldtoa.c b/StdLib/LibC/gdtoa/ldtoa.c
deleted file mode 100644
index 8e38b624e4..0000000000
--- a/StdLib/LibC/gdtoa/ldtoa.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* $NetBSD: ldtoa.c,v 1.4.2.1 2007/05/07 19:49:06 pavel Exp $ */
-
-/*-
- * Copyright (c) 2003 David Schultz <das@FreeBSD.ORG>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <float.h>
-#include <inttypes.h>
-#include <limits.h>
-#include <math.h>
-#include <stdlib.h>
-#include <machine/ieee.h>
-#include "gdtoaimp.h"
-
-#if defined(_MSC_VER)
- /* Disable warnings about conversions to narrower data types,
- primarily for the fpclassify() macro.
- */
- #pragma warning ( disable : 4244 )
- // Squelch bogus warnings about uninitialized variable use.
- #pragma warning ( disable : 4700 )
-#endif
-
-/*
- * ldtoa() is a wrapper for gdtoa() that makes it smell like dtoa(),
- * except that the floating point argument is passed by reference.
- * When dtoa() is passed a NaN or infinity, it sets expt to 9999.
- * However, a long double could have a valid exponent of 9999, so we
- * use INT_MAX in ldtoa() instead.
- */
-char *
-ldtoa(long double *ld, int mode, int ndigits, int *decpt, int *sign, char **rve)
-{
-#ifdef EXT_EXPBITS
- static FPI fpi = {
- LDBL_MANT_DIG, /* nbits */
- LDBL_MIN_EXP - LDBL_MANT_DIG, /* emin */
- LDBL_MAX_EXP - LDBL_MANT_DIG, /* emax */
- FPI_Round_near, /* rounding */
-#ifdef Sudden_Underflow /* unused, but correct anyway */
- 1
-#else
- 0
-#endif
- };
- int be, kind;
- char *ret;
- union ieee_ext_u u;
- uint32_t bits[(LDBL_MANT_DIG + 31) / 32];
-
- u.extu_ld = *ld;
- *sign = (int)(u.extu_ext.ext_sign);
- be = (int)(u.extu_ext.ext_exp - (LDBL_MAX_EXP - 1) - (LDBL_MANT_DIG - 1));
- EXT_TO_ARRAY32(u, bits);
-
- switch (fpclassify(u.extu_ld)) {
- case FP_NORMAL:
- kind = STRTOG_Normal;
-#ifdef LDBL_IMPLICIT_NBIT
- bits[LDBL_MANT_DIG / 32] |= 1 << ((LDBL_MANT_DIG - 1) % 32);
-#endif /* LDBL_IMPLICIT_NBIT */
- break;
- case FP_ZERO:
- kind = STRTOG_Zero;
- break;
- case FP_SUBNORMAL:
- kind = STRTOG_Denormal;
-#ifdef LDBL_IMPLICIT_NBIT
- be++;
-#endif
- break;
- case FP_INFINITE:
- kind = STRTOG_Infinite;
- break;
- case FP_NAN:
- kind = STRTOG_NaN;
- break;
- default:
- abort();
- }
-
- ret = gdtoa(&fpi, be, (ULong *)bits, &kind, mode, ndigits, decpt, rve);
- if (*decpt == -32768)
- *decpt = INT_MAX;
- return ret;
-#else
- return dtoa((double)*ld, mode, ndigits, decpt, sign, rve);
-#endif
-}
diff --git a/StdLib/LibC/gdtoa/misc.c b/StdLib/LibC/gdtoa/misc.c
deleted file mode 100644
index 902074530f..0000000000
--- a/StdLib/LibC/gdtoa/misc.c
+++ /dev/null
@@ -1,909 +0,0 @@
-/* $NetBSD: misc.c,v 1.3.12.1 2008/04/08 21:10:55 jdc Exp $ */
-
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 1999 by 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.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-#include <LibConfig.h>
-
-#include "gdtoaimp.h"
-
-#if defined(_MSC_VER)
- // Disable warnings about assignment within conditional expressions.
- #pragma warning ( disable : 4706 )
-#endif
-
-static Bigint *freelist[Kmax+1];
-#ifndef Omit_Private_Memory
-#ifndef PRIVATE_MEM
-#define PRIVATE_MEM 2304
-#endif
-#define PRIVATE_mem ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double))
-static double private_mem[PRIVATE_mem], *pmem_next = private_mem;
-#endif
-
- Bigint *
-Balloc
-#ifdef KR_headers
- (k) int k;
-#else
- (int k)
-#endif
-{
- int x;
- Bigint *rv;
-#ifndef Omit_Private_Memory
- unsigned int len;
-#endif
-
- ACQUIRE_DTOA_LOCK(0);
- if ( (rv = freelist[k]) !=0) {
- freelist[k] = rv->next;
- }
- else {
- x = 1 << k;
-#ifdef Omit_Private_Memory
- rv = (Bigint *)MALLOC(sizeof(Bigint) + (x-1)*sizeof(ULong));
-#else
- len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1)
- /sizeof(double);
- if (pmem_next - private_mem + len <= PRIVATE_mem) {
- rv = (Bigint*)(void *)pmem_next;
- pmem_next += len;
- }
- else
- rv = (Bigint*)MALLOC(len*sizeof(double));
-#endif
- if (rv == NULL)
- return NULL;
- rv->k = k;
- rv->maxwds = x;
- }
- FREE_DTOA_LOCK(0);
- rv->sign = rv->wds = 0;
- return rv;
- }
-
- void
-Bfree
-#ifdef KR_headers
- (v) Bigint *v;
-#else
- (Bigint *v)
-#endif
-{
- if (v) {
- ACQUIRE_DTOA_LOCK(0);
- v->next = freelist[v->k];
- freelist[v->k] = v;
- FREE_DTOA_LOCK(0);
- }
- }
-
- int
-lo0bits
-#ifdef KR_headers
- (y) ULong *y;
-#else
- (ULong *y)
-#endif
-{
- int k;
- ULong x = *y;
-
- if (x & 7) {
- if (x & 1)
- return 0;
- if (x & 2) {
- *y = x >> 1;
- return 1;
- }
- *y = x >> 2;
- return 2;
- }
- k = 0;
- if (!(x & 0xffff)) {
- k = 16;
- x >>= 16;
- }
- if (!(x & 0xff)) {
- k += 8;
- x >>= 8;
- }
- if (!(x & 0xf)) {
- k += 4;
- x >>= 4;
- }
- if (!(x & 0x3)) {
- k += 2;
- x >>= 2;
- }
- if (!(x & 1)) {
- k++;
- x >>= 1;
- if (!x)
- return 32;
- }
- *y = x;
- return k;
- }
-
- Bigint *
-multadd
-#ifdef KR_headers
- (b, m, a) Bigint *b; int m, a;
-#else
- (Bigint *b, int m, int a) /* multiply by m and add a */
-#endif
-{
- int i, wds;
-#ifdef ULLong
- ULong *x;
- ULLong carry, y;
-#else
- ULong carry, *x, y;
-#ifdef Pack_32
- ULong xi, z;
-#endif
-#endif
- Bigint *b1;
-
- wds = b->wds;
- x = b->x;
- i = 0;
- carry = a;
- do {
-#ifdef ULLong
- y = *x * (ULLong)m + carry;
- carry = y >> 32;
- /* LINTED conversion */
- *x++ = (uint32_t)(y & 0xffffffffUL);
-#else
-#ifdef Pack_32
- xi = *x;
- y = (xi & 0xffff) * m + carry;
- z = (xi >> 16) * m + (y >> 16);
- carry = z >> 16;
- *x++ = (z << 16) + (y & 0xffff);
-#else
- y = *x * m + carry;
- carry = y >> 16;
- *x++ = y & 0xffff;
-#endif
-#endif
- }
- while(++i < wds);
- if (carry) {
- if (wds >= b->maxwds) {
- b1 = Balloc(b->k+1);
- if (b1 == NULL) {
- Bfree(b);
- return NULL;
- }
- Bcopy(b1, b);
- Bfree(b);
- b = b1;
- }
- /* LINTED conversion */
- b->x[wds++] = (uint32_t)carry;
- b->wds = wds;
- }
- return b;
- }
-
- int
-hi0bits_D2A
-#ifdef KR_headers
- (x) ULong x;
-#else
- (ULong x)
-#endif
-{
- int k = 0;
-
- if (!(x & 0xffff0000)) {
- k = 16;
- x <<= 16;
- }
- if (!(x & 0xff000000)) {
- k += 8;
- x <<= 8;
- }
- if (!(x & 0xf0000000)) {
- k += 4;
- x <<= 4;
- }
- if (!(x & 0xc0000000)) {
- k += 2;
- x <<= 2;
- }
- if (!(x & 0x80000000)) {
- k++;
- if (!(x & 0x40000000))
- return 32;
- }
- return k;
- }
-
- Bigint *
-i2b
-#ifdef KR_headers
- (i) int i;
-#else
- (int i)
-#endif
-{
- Bigint *b;
-
- b = Balloc(1);
- if (b == NULL)
- return NULL;
- b->x[0] = i;
- b->wds = 1;
- return b;
- }
-
- Bigint *
-mult
-#ifdef KR_headers
- (a, b) Bigint *a, *b;
-#else
- (Bigint *a, Bigint *b)
-#endif
-{
- Bigint *c;
- int k, wa, wb, wc;
- ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0;
- ULong y;
-#ifdef ULLong
- ULLong carry, z;
-#else
- ULong carry, z;
-#ifdef Pack_32
- ULong z2;
-#endif
-#endif
-
- if (a->wds < b->wds) {
- c = a;
- a = b;
- b = c;
- }
- k = a->k;
- wa = a->wds;
- wb = b->wds;
- wc = wa + wb;
- if (wc > a->maxwds)
- k++;
- c = Balloc(k);
- if (c == NULL)
- return NULL;
- for(x = c->x, xa = x + wc; x < xa; x++)
- *x = 0;
- xa = a->x;
- xae = xa + wa;
- xb = b->x;
- xbe = xb + wb;
- xc0 = c->x;
-#ifdef ULLong
- for(; xb < xbe; xc0++) {
- if ( (y = *xb++) !=0) {
- x = xa;
- xc = xc0;
- carry = 0;
- do {
- z = *x++ * (ULLong)y + *xc + carry;
- carry = z >> 32;
- /* LINTED conversion */
- *xc++ = (uint32_t)(z & 0xffffffffUL);
- }
- while(x < xae);
- /* LINTED conversion */
- *xc = (uint32_t)carry;
- }
- }
-#else
-#ifdef Pack_32
- for(; xb < xbe; xb++, xc0++) {
- if ( (y = *xb & 0xffff) !=0) {
- x = xa;
- xc = xc0;
- carry = 0;
- do {
- z = (*x & 0xffff) * y + (*xc & 0xffff) + carry;
- carry = z >> 16;
- z2 = (*x++ >> 16) * y + (*xc >> 16) + carry;
- carry = z2 >> 16;
- Storeinc(xc, z2, z);
- }
- while(x < xae);
- *xc = carry;
- }
- if ( (y = *xb >> 16) !=0) {
- x = xa;
- xc = xc0;
- carry = 0;
- z2 = *xc;
- do {
- z = (*x & 0xffff) * y + (*xc >> 16) + carry;
- carry = z >> 16;
- Storeinc(xc, z, z2);
- z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry;
- carry = z2 >> 16;
- }
- while(x < xae);
- *xc = z2;
- }
- }
-#else
- for(; xb < xbe; xc0++) {
- if ( (y = *xb++) !=0) {
- x = xa;
- xc = xc0;
- carry = 0;
- do {
- z = *x++ * y + *xc + carry;
- carry = z >> 16;
- *xc++ = z & 0xffff;
- }
- while(x < xae);
- *xc = carry;
- }
- }
-#endif
-#endif
- for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ;
- c->wds = wc;
- return c;
- }
-
- static Bigint *p5s;
-
- Bigint *
-pow5mult
-#ifdef KR_headers
- (b, k) Bigint *b; int k;
-#else
- (Bigint *b, int k)
-#endif
-{
- Bigint *b1, *p5, *p51;
- int i;
- static CONST int p05[3] = { 5, 25, 125 };
-
- if ( (i = k & 3) !=0) {
- b = multadd(b, p05[i-1], 0);
- if (b == NULL)
- return NULL;
- }
-
- if ((k = (unsigned int)k >> 2) == 0)
- return b;
- if ((p5 = p5s) == 0) {
- /* first time */
-#ifdef MULTIPLE_THREADS
- ACQUIRE_DTOA_LOCK(1);
- if (!(p5 = p5s)) {
- p5 = p5s = i2b(625);
- if (p5 == NULL)
- return NULL;
- p5->next = 0;
- }
- FREE_DTOA_LOCK(1);
-#else
- p5 = p5s = i2b(625);
- if (p5 == NULL)
- return NULL;
- p5->next = 0;
-#endif
- }
- for(;;) {
- if (k & 1) {
- b1 = mult(b, p5);
- if (b1 == NULL)
- return NULL;
- b = b1;
- }
- if ((k = (unsigned int)k >> 1) == 0)
- break;
- if ((p51 = p5->next) == 0) {
-#ifdef MULTIPLE_THREADS
- ACQUIRE_DTOA_LOCK(1);
- if (!(p51 = p5->next)) {
- p51 = p5->next = mult(p5,p5);
- if (p51 == NULL)
- return NULL;
- p51->next = 0;
- }
- FREE_DTOA_LOCK(1);
-#else
- p51 = p5->next = mult(p5,p5);
- if (p51 == NULL)
- return NULL;
- p51->next = 0;
-#endif
- }
- p5 = p51;
- }
- return b;
- }
-
- Bigint *
-lshift
-#ifdef KR_headers
- (b, k) Bigint *b; int k;
-#else
- (Bigint *b, int k)
-#endif
-{
- int i, k1, n, n1;
- Bigint *b1;
- ULong *x, *x1, *xe, z;
-
- n = (unsigned int)k >> kshift;
- k1 = b->k;
- n1 = n + b->wds + 1;
- for(i = b->maxwds; n1 > i; i <<= 1)
- k1++;
- b1 = Balloc(k1);
- if (b1 == NULL)
- return NULL;
- x1 = b1->x;
- for(i = 0; i < n; i++)
- *x1++ = 0;
- x = b->x;
- xe = x + b->wds;
- if (k &= kmask) {
-#ifdef Pack_32
- k1 = 32 - k;
- z = 0;
- do {
- *x1++ = *x << k | z;
- z = *x++ >> k1;
- }
- while(x < xe);
- if ((*x1 = z) !=0)
- ++n1;
-#else
- k1 = 16 - k;
- z = 0;
- do {
- *x1++ = *x << k & 0xffff | z;
- z = *x++ >> k1;
- }
- while(x < xe);
- if (*x1 = z)
- ++n1;
-#endif
- }
- else do
- *x1++ = *x++;
- while(x < xe);
- b1->wds = n1 - 1;
- Bfree(b);
- return b1;
- }
-
- int
-cmp
-#ifdef KR_headers
- (a, b) Bigint *a, *b;
-#else
- (Bigint *a, Bigint *b)
-#endif
-{
- ULong *xa, *xa0, *xb, *xb0;
- int i, j;
-
- i = a->wds;
- j = b->wds;
-#ifdef DEBUG
- if (i > 1 && !a->x[i-1])
- Bug("cmp called with a->x[a->wds-1] == 0");
- if (j > 1 && !b->x[j-1])
- Bug("cmp called with b->x[b->wds-1] == 0");
-#endif
- if (i -= j)
- return i;
- xa0 = a->x;
- xa = xa0 + j;
- xb0 = b->x;
- xb = xb0 + j;
- for(;;) {
- if (*--xa != *--xb)
- return *xa < *xb ? -1 : 1;
- if (xa <= xa0)
- break;
- }
- return 0;
- }
-
- Bigint *
-diff
-#ifdef KR_headers
- (a, b) Bigint *a, *b;
-#else
- (Bigint *a, Bigint *b)
-#endif
-{
- Bigint *c;
- int i, wa, wb;
- ULong *xa, *xae, *xb, *xbe, *xc;
-#ifdef ULLong
- ULLong borrow, y;
-#else
- ULong borrow, y;
-#ifdef Pack_32
- ULong z;
-#endif
-#endif
-
- i = cmp(a,b);
- if (!i) {
- c = Balloc(0);
- if (c == NULL)
- return NULL;
- c->wds = 1;
- c->x[0] = 0;
- return c;
- }
- if (i < 0) {
- c = a;
- a = b;
- b = c;
- i = 1;
- }
- else
- i = 0;
- c = Balloc(a->k);
- if (c == NULL)
- return NULL;
- c->sign = i;
- wa = a->wds;
- xa = a->x;
- xae = xa + wa;
- wb = b->wds;
- xb = b->x;
- xbe = xb + wb;
- xc = c->x;
- borrow = 0;
-#ifdef ULLong
- do {
- y = (ULLong)*xa++ - *xb++ - borrow;
- borrow = y >> 32 & 1UL;
- /* LINTED conversion */
- *xc++ = (uint32_t)(y & 0xffffffffUL);
- }
- while(xb < xbe);
- while(xa < xae) {
- y = *xa++ - borrow;
- borrow = y >> 32 & 1UL;
- /* LINTED conversion */
- *xc++ = (uint32_t)(y & 0xffffffffUL);
- }
-#else
-#ifdef Pack_32
- do {
- y = (*xa & 0xffff) - (*xb & 0xffff) - borrow;
- borrow = (y & 0x10000) >> 16;
- z = (*xa++ >> 16) - (*xb++ >> 16) - borrow;
- borrow = (z & 0x10000) >> 16;
- Storeinc(xc, z, y);
- }
- while(xb < xbe);
- while(xa < xae) {
- y = (*xa & 0xffff) - borrow;
- borrow = (y & 0x10000) >> 16;
- z = (*xa++ >> 16) - borrow;
- borrow = (z & 0x10000) >> 16;
- Storeinc(xc, z, y);
- }
-#else
- do {
- y = *xa++ - *xb++ - borrow;
- borrow = (y & 0x10000) >> 16;
- *xc++ = y & 0xffff;
- }
- while(xb < xbe);
- while(xa < xae) {
- y = *xa++ - borrow;
- borrow = (y & 0x10000) >> 16;
- *xc++ = y & 0xffff;
- }
-#endif
-#endif
- while(!*--xc)
- wa--;
- c->wds = wa;
- return c;
- }
-
- double
-b2d
-#ifdef KR_headers
- (a, e) Bigint *a; int *e;
-#else
- (Bigint *a, int *e)
-#endif
-{
- ULong *xa, *xa0, w, y, z;
- int k;
- double d;
-#ifdef VAX
- ULong d0, d1;
-#else
-#define d0 word0(d)
-#define d1 word1(d)
-#endif
-
- xa0 = a->x;
- xa = xa0 + a->wds;
- y = *--xa;
-#ifdef DEBUG
- if (!y) Bug("zero y in b2d");
-#endif
- k = hi0bits(y);
- *e = 32 - k;
-#ifdef Pack_32
- if (k < Ebits) {
- d0 = (UINT32)(Exp_1 | y >> (Ebits - k));
- w = xa > xa0 ? *--xa : 0;
- d1 = (UINT32)(y << ((32-Ebits) + k) | w >> (Ebits - k));
- goto ret_d;
- }
- z = xa > xa0 ? *--xa : 0;
- if (k -= Ebits) {
- d0 = (UINT32)(Exp_1 | y << k | z >> (32 - k));
- y = xa > xa0 ? *--xa : 0;
- d1 = (UINT32)(z << k | y >> (32 - k));
- }
- else {
- d0 = (UINT32)(Exp_1 | y);
- d1 = (UINT32)z;
- }
-#else
- if (k < Ebits + 16) {
- z = xa > xa0 ? *--xa : 0;
- d0 = Exp_1 | y << k - Ebits | z >> Ebits + 16 - k;
- w = xa > xa0 ? *--xa : 0;
- y = xa > xa0 ? *--xa : 0;
- d1 = z << k + 16 - Ebits | w << k - Ebits | y >> 16 + Ebits - k;
- goto ret_d;
- }
- z = xa > xa0 ? *--xa : 0;
- w = xa > xa0 ? *--xa : 0;
- k -= Ebits + 16;
- d0 = Exp_1 | y << k + 16 | z << k | w >> 16 - k;
- y = xa > xa0 ? *--xa : 0;
- d1 = w << k + 16 | y << k;
-#endif
- ret_d:
-#ifdef VAX
- word0(d) = d0 >> 16 | d0 << 16;
- word1(d) = d1 >> 16 | d1 << 16;
-#endif
- return dval(d);
- }
-#undef d0
-#undef d1
-
- Bigint *
-d2b
-#ifdef KR_headers
- (d, e, bits) double d; int *e, *bits;
-#else
- (double d, int *e, int *bits)
-#endif
-{
- Bigint *b;
-#ifndef Sudden_Underflow
- int i;
-#endif
- int de, k;
- ULong *x, y, z;
-#ifdef VAX
- ULong d0, d1;
- d0 = word0(d) >> 16 | word0(d) << 16;
- d1 = word1(d) >> 16 | word1(d) << 16;
-#else
-#define d0 word0(d)
-#define d1 word1(d)
-#endif
-
-#ifdef Pack_32
- b = Balloc(1);
-#else
- b = Balloc(2);
-#endif
- if (b == NULL)
- return NULL;
- x = b->x;
-
- z = d0 & Frac_mask;
- d0 &= 0x7fffffff; /* clear sign bit, which we ignore */
-#ifdef Sudden_Underflow
- de = (int)(d0 >> Exp_shift);
-#ifndef IBM
- z |= Exp_msk11;
-#endif
-#else
- if ( (de = (int)(d0 >> Exp_shift)) !=0)
- z |= Exp_msk1;
-#endif
-#ifdef Pack_32
- if ( (y = d1) !=0) {
- if ( (k = lo0bits(&y)) !=0) {
- x[0] = y | z << (32 - k);
- z >>= k;
- }
- else
- x[0] = y;
-#ifndef Sudden_Underflow
- i =
-#endif
- b->wds = (x[1] = z) !=0 ? 2 : 1;
- }
- else {
-#ifdef DEBUG
- if (!z)
- Bug("Zero passed to d2b");
-#endif
- k = lo0bits(&z);
- x[0] = z;
-#ifndef Sudden_Underflow
- i =
-#endif
- b->wds = 1;
- k += 32;
- }
-#else
- if ( (y = d1) !=0) {
- if ( (k = lo0bits(&y)) !=0)
- if (k >= 16) {
- x[0] = y | z << 32 - k & 0xffff;
- x[1] = z >> k - 16 & 0xffff;
- x[2] = z >> k;
- i = 2;
- }
- else {
- x[0] = y & 0xffff;
- x[1] = y >> 16 | z << 16 - k & 0xffff;
- x[2] = z >> k & 0xffff;
- x[3] = z >> k+16;
- i = 3;
- }
- else {
- x[0] = y & 0xffff;
- x[1] = y >> 16;
- x[2] = z & 0xffff;
- x[3] = z >> 16;
- i = 3;
- }
- }
- else {
-#ifdef DEBUG
- if (!z)
- Bug("Zero passed to d2b");
-#endif
- k = lo0bits(&z);
- if (k >= 16) {
- x[0] = z;
- i = 0;
- }
- else {
- x[0] = z & 0xffff;
- x[1] = z >> 16;
- i = 1;
- }
- k += 32;
- }
- while(!x[i])
- --i;
- b->wds = i + 1;
-#endif
-#ifndef Sudden_Underflow
- if (de) {
-#endif
-#ifdef IBM
- *e = (de - Bias - (P-1) << 2) + k;
- *bits = 4*P + 8 - k - hi0bits(word0(d) & Frac_mask);
-#else
- *e = de - Bias - (P-1) + k;
- *bits = P - k;
-#endif
-#ifndef Sudden_Underflow
- }
- else {
- *e = de - Bias - (P-1) + 1 + k;
-#ifdef Pack_32
- *bits = 32*i - hi0bits(x[i-1]);
-#else
- *bits = (i+2)*16 - hi0bits(x[i]);
-#endif
- }
-#endif
- return b;
- }
-#undef d0
-#undef d1
-
- CONST double
-#ifdef IEEE_Arith
-bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 };
-CONST double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128, 1e-256
- };
-#else
-#ifdef IBM
-bigtens[] = { 1e16, 1e32, 1e64 };
-CONST double tinytens[] = { 1e-16, 1e-32, 1e-64 };
-#else
-bigtens[] = { 1e16, 1e32 };
-CONST double tinytens[] = { 1e-16, 1e-32 };
-#endif
-#endif
-
- CONST double
-tens[] = {
- 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
- 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
- 1e20, 1e21, 1e22
-#ifdef VAX
- , 1e23, 1e24
-#endif
- };
-
- char *
-#ifdef KR_headers
-strcp_D2A(a, b) char *a; char *b;
-#else
-strcp_D2A(char *a, CONST char *b)
-#endif
-{
- while((*a = *b++))
- a++;
- return a;
- }
-
-#ifdef NO_STRING_H
-
- Char *
-#ifdef KR_headers
-memcpy_D2A(a, b, len) Char *a; Char *b; size_t len;
-#else
-memcpy_D2A(void *a1, void *b1, size_t len)
-#endif
-{
- char *a = (char*)a1, *ae = a + len;
- char *b = (char*)b1, *a0 = a;
- while(a < ae)
- *a++ = *b++;
- return a0;
- }
-
-#endif /* NO_STRING_H */
diff --git a/StdLib/LibC/gdtoa/smisc.c b/StdLib/LibC/gdtoa/smisc.c
deleted file mode 100644
index 59e4f97dcc..0000000000
--- a/StdLib/LibC/gdtoa/smisc.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/* $NetBSD: smisc.c,v 1.2.14.1 2008/04/08 21:10:55 jdc Exp $ */
-
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 1999 by 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.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-#include <LibConfig.h>
-
-#include "gdtoaimp.h"
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
-// Disable: warning C4700: uninitialized local variable 'xx' used
-#pragma warning ( disable : 4700 )
-#endif /* defined(_MSC_VER) */
-
-Bigint *
-s2b
-#ifdef KR_headers
- (s, nd0, nd, y9) CONST char *s; int nd0, nd; ULong y9;
-#else
- (CONST char *s, int nd0, int nd, ULong y9)
-#endif
-{
- Bigint *b;
- int i, k;
- Long x, y;
-
- x = (nd + 8) / 9;
- for(k = 0, y = 1; x > y; y <<= 1, k++) ;
-#ifdef Pack_32
- b = Balloc(k);
- if (b == NULL)
- return NULL;
- b->x[0] = y9;
- b->wds = 1;
-#else
- b = Balloc(k+1);
- if (b == NULL)
- return NULL;
- b->x[0] = y9 & 0xffff;
- b->wds = (b->x[1] = y9 >> 16) ? 2 : 1;
-#endif
-
- i = 9;
- if (9 < nd0) {
- s += 9;
- do {
- b = multadd(b, 10, *s++ - '0');
- if (b == NULL)
- return NULL;
- } while(++i < nd0);
- s++;
- }
- else
- s += 10;
- for(; i < nd; i++) {
- b = multadd(b, 10, *s++ - '0');
- if (b == NULL)
- return NULL;
- }
- return b;
- }
-
- double
-ratio
-#ifdef KR_headers
- (a, b) Bigint *a, *b;
-#else
- (Bigint *a, Bigint *b)
-#endif
-{
- double da, db;
- int k, ka, kb;
-
- dval(da) = b2d(a, &ka);
- dval(db) = b2d(b, &kb);
- k = ka - kb + ULbits*(a->wds - b->wds);
-#ifdef IBM
- if (k > 0) {
- word0(da) += (k >> 2)*Exp_msk1;
- if (k &= 3)
- dval(da) *= 1 << k;
- }
- else {
- k = -k;
- word0(db) += (k >> 2)*Exp_msk1;
- if (k &= 3)
- dval(db) *= 1 << k;
- }
-#else
- if (k > 0)
- word0(da) += k*Exp_msk1;
- else {
- k = -k;
- word0(db) += k*Exp_msk1;
- }
-#endif
- return dval(da) / dval(db);
- }
-
-#ifdef INFNAN_CHECK
-
- int
-match
-#ifdef KR_headers
- (sp, t) CONST char **sp, *t;
-#else
- (CONST char **sp, CONST char *t)
-#endif
-{
- int c, d;
- CONST char *s = *sp;
-
- while( (d = *t++) !=0) {
- if ((c = *++s) >= 'A' && c <= 'Z')
- c += 'a' - 'A';
- if (c != d)
- return 0;
- }
- *sp = s + 1;
- return 1;
- }
-#endif /* INFNAN_CHECK */
-
- void
-#ifdef KR_headers
-copybits(c, n, b) ULong *c; int n; Bigint *b;
-#else
-copybits(ULong *c, int n, Bigint *b)
-#endif
-{
- ULong *ce, *x, *xe;
-#ifdef Pack_16
- int nw, nw1;
-#endif
-
- ce = c + ((unsigned int)(n-1) >> kshift) + 1;
- x = b->x;
-#ifdef Pack_32
- xe = x + b->wds;
- while(x < xe)
- *c++ = *x++;
-#else
- nw = b->wds;
- nw1 = nw & 1;
- for(xe = x + (nw - nw1); x < xe; x += 2)
- Storeinc(c, x[1], x[0]);
- if (nw1)
- *c++ = *x;
-#endif
- while(c < ce)
- *c++ = 0;
- }
-
- ULong
-#ifdef KR_headers
-any_on(b, k) Bigint *b; int k;
-#else
-any_on(Bigint *b, int k)
-#endif
-{
- int n, nwds;
- ULong *x, *x0, x1, x2;
-
- x = b->x;
- nwds = b->wds;
- n = (unsigned int)k >> kshift;
- if (n > nwds)
- n = nwds;
- else if (n < nwds && (k &= kmask)) {
- x1 = x2 = x[n];
- x1 >>= k;
- x1 <<= k;
- if (x1 != x2)
- return 1;
- }
- x0 = x;
- x += n;
- while(x > x0)
- if (*--x)
- return 1;
- return 0;
- }
diff --git a/StdLib/LibC/gdtoa/strtod.c b/StdLib/LibC/gdtoa/strtod.c
deleted file mode 100644
index 5cc6b8e44e..0000000000
--- a/StdLib/LibC/gdtoa/strtod.c
+++ /dev/null
@@ -1,1035 +0,0 @@
-/** @file
-
- Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- *****************************************************************
-
- The author of this software is David M. Gay.
-
- Copyright (C) 1998-2001 by 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.
-
-
- Please send bug reports to David M. Gay (dmg at acm dot org,
- with " at " changed at "@" and " dot " changed to ".").
-
- *****************************************************************
-
- NetBSD: strtod.c,v 1.4.14.1 2008/04/08 21:10:55 jdc Exp
-**/
-#include <LibConfig.h>
-
-#include "gdtoaimp.h"
-#ifndef NO_FENV_H
-#include <fenv.h>
-#endif
-
-#ifdef USE_LOCALE
-#include "locale.h"
-#endif
-
-#ifdef IEEE_Arith
-#ifndef NO_IEEE_Scale
-#define Avoid_Underflow
-#undef tinytens
-/* The factor of 2^53 in tinytens[4] helps us avoid setting the underflow */
-/* flag unnecessarily. It leads to a song and dance at the end of strtod. */
-static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128,
- 9007199254740992.e-256
- };
-#endif
-#endif
-
-#ifdef Honor_FLT_ROUNDS
-#define Rounding rounding
-#undef Check_FLT_ROUNDS
-#define Check_FLT_ROUNDS
-#else
-#define Rounding Flt_Rounds
-#endif
-
-//#ifndef __HAVE_LONG_DOUBLE
-//__strong_alias(_strtold, strtod)
-//__weak_alias(strtold, _strtold)
-//#endif
-
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
-// Disable: warning C4700: uninitialized local variable 'xx' used
-#pragma warning ( disable : 4700 )
-#endif /* defined(_MSC_VER) */
-
-double
-strtod(CONST char *s00, char **se)
-{
-#ifdef Avoid_Underflow
- int scale;
- #endif
- int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, decpt, dsign,
- e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign;
- CONST char *s, *s0, *s1;
- double aadj, aadj1, adj, rv, rv0;
- Long L;
- ULong y, z;
- Bigint *bb = NULL, *bb1, *bd0;
- Bigint *bd = NULL, *bs = NULL, *delta = NULL; /* pacify gcc */
-#ifdef SET_INEXACT
- int inexact, oldinexact;
-#endif
-#ifdef Honor_FLT_ROUNDS
- int rounding;
-#endif
-
- sign = nz0 = nz = decpt = 0;
- dval(rv) = 0.;
- for(s = s00;;s++) {
- switch(*s) {
- case '-':
- sign = 1;
- /* FALLTHROUGH */
- case '+':
- if (*++s)
- goto break2;
- /* FALLTHROUGH */
- case 0:
- goto ret0;
- case '\t':
- case '\n':
- case '\v':
- case '\f':
- case '\r':
- case ' ':
- continue;
- default:
- goto break2;
- }
- }
- break2:
- if (*s == '0') {
-#ifndef NO_HEX_FP
- {
- static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI };
- Long expt;
- ULong bits[2];
- switch(s[1]) {
- case 'x':
- case 'X':
- {
-#if defined(FE_DOWNWARD) && defined(FE_TONEAREST) && defined(FE_TOWARDZERO) && defined(FE_UPWARD)
- FPI fpi1 = fpi;
- switch(fegetround()) {
- case FE_TOWARDZERO: fpi1.rounding = 0; break;
- case FE_UPWARD: fpi1.rounding = 2; break;
- case FE_DOWNWARD: fpi1.rounding = 3;
- }
-#else
-#endif
- switch((i = gethex(&s, &fpi, &expt, &bb, sign)) & STRTOG_Retmask) {
- case STRTOG_NoNumber:
- s = s00;
- sign = 0;
- /* FALLTHROUGH */
- case STRTOG_Zero:
- break;
- default:
- if (bb) {
- copybits(bits, fpi.nbits, bb);
- Bfree(bb);
- }
- ULtod((/* LINTED */(U*)&rv)->L, bits, expt, i);
- }}
- goto ret;
- }
- }
-#endif
- nz0 = 1;
- while(*++s == '0') ;
- if (!*s)
- goto ret;
- }
- s0 = s;
- y = z = 0;
- for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++)
- if (nd < 9)
- y = 10*y + c - '0';
- else if (nd < 16)
- z = 10*z + c - '0';
- nd0 = nd;
-#ifdef USE_LOCALE
- if (c == *localeconv()->decimal_point)
-#else
- if (c == '.')
-#endif
- {
- decpt = 1;
- c = *++s;
- if (!nd) {
- for(; c == '0'; c = *++s)
- nz++;
- if (c > '0' && c <= '9') {
- s0 = s;
- nf += nz;
- nz = 0;
- goto have_dig;
- }
- goto dig_done;
- }
- for(; c >= '0' && c <= '9'; c = *++s) {
- have_dig:
- nz++;
- if (c -= '0') {
- nf += nz;
- for(i = 1; i < nz; i++)
- if (nd++ < 9)
- y *= 10;
- else if (nd <= DBL_DIG + 1)
- z *= 10;
- if (nd++ < 9)
- y = 10*y + c;
- else if (nd <= DBL_DIG + 1)
- z = 10*z + c;
- nz = 0;
- }
- }
- }
- dig_done:
- e = 0;
- if (c == 'e' || c == 'E') {
- if (!nd && !nz && !nz0) {
- goto ret0;
- }
- s00 = s;
- esign = 0;
- switch(c = *++s) {
- case '-':
- esign = 1;
- /* FALLTHROUGH */
- case '+':
- c = *++s;
- }
- if (c >= '0' && c <= '9') {
- while(c == '0')
- c = *++s;
- if (c > '0' && c <= '9') {
- L = c - '0';
- s1 = s;
- while((c = *++s) >= '0' && c <= '9')
- L = 10*L + c - '0';
- if (s - s1 > 8 || L > 19999)
- /* Avoid confusion from exponents
- * so large that e might overflow.
- */
- e = 19999; /* safe for 16 bit ints */
- else
- e = (int)L;
- if (esign)
- e = -e;
- }
- else
- e = 0;
- }
- else
- s = s00;
- }
- if (!nd) {
- if (!nz && !nz0) {
-#ifdef INFNAN_CHECK
- /* Check for Nan and Infinity */
-#ifndef No_Hex_NaN
- ULong bits[2];
- static FPI fpinan = /* only 52 explicit bits */
- { 52, 1-1023-53+1, 2046-1023-53+1, 1, SI };
-#endif // No_Hex_NaN
- if (!decpt)
- switch(c) {
- case 'i':
- case 'I':
- if (match(&s,"nf")) {
- --s;
- if (!match(&s,"inity"))
- ++s;
- word0(rv) = 0x7ff00000;
- word1(rv) = 0;
- goto ret;
- }
- break;
- case 'n':
- case 'N':
- if (match(&s, "an")) {
-#ifndef No_Hex_NaN
- if (*s == '(' /*)*/
- && hexnan(&s, &fpinan, bits)
- == STRTOG_NaNbits) {
- word0(rv) = (UINT32)(0x7ff00000U | bits[1]);
- word1(rv) = (UINT32)bits[0];
- }
- else {
-#endif
- word0(rv) = NAN_WORD0;
- word1(rv) = NAN_WORD1;
-#ifndef No_Hex_NaN
- }
-#endif
- goto ret;
- }
- }
-#endif /* INFNAN_CHECK */
- ret0:
- s = s00;
- sign = 0;
- }
- goto ret;
- }
- e1 = e -= nf;
-
- /* Now we have nd0 digits, starting at s0, followed by a
- * decimal point, followed by nd-nd0 digits. The number we're
- * after is the integer represented by those digits times
- * 10**e */
-
- if (!nd0)
- nd0 = nd;
- k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
- dval(rv) = (double)y;
- if (k > 9) {
-#ifdef SET_INEXACT
- if (k > DBL_DIG)
- oldinexact = get_inexact();
-#endif
- dval(rv) = tens[k - 9] * dval(rv) + z;
- }
- bd0 = 0;
- if (nd <= DBL_DIG
-#ifndef RND_PRODQUOT
-#ifndef Honor_FLT_ROUNDS
- && Flt_Rounds == 1
-#endif
-#endif
- ) {
- if (!e)
- goto ret;
- if (e > 0) {
- if (e <= Ten_pmax) {
-#ifdef VAX
- goto vax_ovfl_check;
-#else
-#ifdef Honor_FLT_ROUNDS
- /* round correctly FLT_ROUNDS = 2 or 3 */
- if (sign) {
- rv = -rv;
- sign = 0;
- }
-#endif
- /* rv = */ rounded_product(dval(rv), tens[e]);
- goto ret;
-#endif
- }
- i = DBL_DIG - nd;
- if (e <= Ten_pmax + i) {
- /* A fancier test would sometimes let us do
- * this for larger i values.
- */
-#ifdef Honor_FLT_ROUNDS
- /* round correctly FLT_ROUNDS = 2 or 3 */
- if (sign) {
- rv = -rv;
- sign = 0;
- }
-#endif
- e -= i;
- dval(rv) *= tens[i];
-#ifdef VAX
- /* VAX exponent range is so narrow we must
- * worry about overflow here...
- */
- vax_ovfl_check:
- word0(rv) -= P*Exp_msk1;
- /* rv = */ rounded_product(dval(rv), tens[e]);
- if ((word0(rv) & Exp_mask)
- > Exp_msk1*(DBL_MAX_EXP+Bias-1-P))
- goto ovfl;
- word0(rv) += P*Exp_msk1;
-#else
- /* rv = */ rounded_product(dval(rv), tens[e]);
-#endif
- goto ret;
- }
- }
-#ifndef Inaccurate_Divide
- else if (e >= -Ten_pmax) {
-#ifdef Honor_FLT_ROUNDS
- /* round correctly FLT_ROUNDS = 2 or 3 */
- if (sign) {
- rv = -rv;
- sign = 0;
- }
-#endif
- /* rv = */ rounded_quotient(dval(rv), tens[-e]);
- goto ret;
- }
-#endif
- }
- e1 += nd - k;
-
-#ifdef IEEE_Arith
-#ifdef SET_INEXACT
- inexact = 1;
- if (k <= DBL_DIG)
- oldinexact = get_inexact();
-#endif
-#ifdef Avoid_Underflow
- scale = 0;
-#endif
-#ifdef Honor_FLT_ROUNDS
- if ((rounding = Flt_Rounds) >= 2) {
- if (sign)
- rounding = rounding == 2 ? 0 : 2;
- else
- if (rounding != 2)
- rounding = 0;
- }
-#endif
-#endif /*IEEE_Arith*/
-
- /* Get starting approximation = rv * 10**e1 */
-
- if (e1 > 0) {
- if ( (i = e1 & 15) !=0)
- dval(rv) *= tens[i];
- if (e1 &= ~15) {
- if (e1 > DBL_MAX_10_EXP) {
- ovfl:
-#ifndef NO_ERRNO
- errno = ERANGE;
-#endif
- /* Can't trust HUGE_VAL */
-#ifdef IEEE_Arith
-#ifdef Honor_FLT_ROUNDS
- switch(rounding) {
- case 0: /* toward 0 */
- case 3: /* toward -infinity */
- word0(rv) = Big0;
- word1(rv) = Big1;
- break;
- default:
- word0(rv) = Exp_mask;
- word1(rv) = 0;
- }
-#else /*Honor_FLT_ROUNDS*/
- word0(rv) = Exp_mask;
- word1(rv) = 0;
-#endif /*Honor_FLT_ROUNDS*/
-#ifdef SET_INEXACT
- /* set overflow bit */
- dval(rv0) = 1e300;
- dval(rv0) *= dval(rv0);
-#endif
-#else /*IEEE_Arith*/
- word0(rv) = Big0;
- word1(rv) = Big1;
-#endif /*IEEE_Arith*/
- if (bd0)
- goto retfree;
- goto ret;
- }
- e1 = (unsigned int)e1 >> 4;
- for(j = 0; e1 > 1; j++, e1 = (unsigned int)e1 >> 1)
- if (e1 & 1)
- dval(rv) *= bigtens[j];
- /* The last multiplication could overflow. */
- word0(rv) -= P*Exp_msk1;
- dval(rv) *= bigtens[j];
- if ((z = word0(rv) & Exp_mask)
- > Exp_msk1*(DBL_MAX_EXP+Bias-P))
- goto ovfl;
- if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) {
- /* set to largest number */
- /* (Can't trust DBL_MAX) */
- word0(rv) = Big0;
- word1(rv) = Big1;
- }
- else
- word0(rv) += P*Exp_msk1;
- }
- }
- else if (e1 < 0) {
- e1 = -e1;
- if ( (i = e1 & 15) !=0)
- dval(rv) /= tens[i];
- if (e1 >>= 4) {
- if (e1 >= 1 << n_bigtens)
- goto undfl;
-#ifdef Avoid_Underflow
- if (e1 & Scale_Bit)
- scale = 2*P;
- for(j = 0; e1 > 0; j++, e1 = (unsigned int)e1 >> 1)
- if (e1 & 1)
- dval(rv) *= tinytens[j];
- if (scale && (j = 2*P + 1 - (unsigned int)((word0(rv) & Exp_mask)
- >> Exp_shift)) > 0) {
- /* scaled rv is denormal; zap j low bits */
- if (j >= 32) {
- word1(rv) = 0;
- if (j >= 53)
- word0(rv) = (P+2)*Exp_msk1;
- else
- word0(rv) &= 0xffffffff << (j-32);
- }
- else
- word1(rv) &= 0xffffffff << j;
- }
-#else
- for(j = 0; e1 > 1; j++, e1 >>= 1)
- if (e1 & 1)
- dval(rv) *= tinytens[j];
- /* The last multiplication could underflow. */
- dval(rv0) = dval(rv);
- dval(rv) *= tinytens[j];
- if (!dval(rv)) {
- dval(rv) = 2.*dval(rv0);
- dval(rv) *= tinytens[j];
-#endif
- if (!dval(rv)) {
- undfl:
- dval(rv) = 0.;
-#ifndef NO_ERRNO
- errno = ERANGE;
-#endif
- if (bd0)
- goto retfree;
- goto ret;
- }
-#ifndef Avoid_Underflow
- word0(rv) = Tiny0;
- word1(rv) = Tiny1;
- /* The refinement below will clean
- * this approximation up.
- */
- }
-#endif
- }
- }
-
- /* Now the hard part -- adjusting rv to the correct value.*/
-
- /* Put digits into bd: true value = bd * 10^e */
-
- bd0 = s2b(s0, nd0, nd, y);
- if (bd0 == NULL)
- goto ovfl;
-
- for(;;) {
- bd = Balloc(bd0->k);
- if (bd == NULL)
- goto ovfl;
- Bcopy(bd, bd0);
- bb = d2b(dval(rv), &bbe, &bbbits); /* rv = bb * 2^bbe */
- if (bb == NULL)
- goto ovfl;
- bs = i2b(1);
- if (bs == NULL)
- goto ovfl;
-
- if (e >= 0) {
- bb2 = bb5 = 0;
- bd2 = bd5 = e;
- }
- else {
- bb2 = bb5 = -e;
- bd2 = bd5 = 0;
- }
- if (bbe >= 0)
- bb2 += bbe;
- else
- bd2 -= bbe;
- bs2 = bb2;
-#ifdef Honor_FLT_ROUNDS
- if (rounding != 1)
- bs2++;
-#endif
-#ifdef Avoid_Underflow
- j = bbe - scale;
- i = j + bbbits - 1; /* logb(rv) */
- if (i < Emin) /* denormal */
- j += P - Emin;
- else
- j = P + 1 - bbbits;
-#else /*Avoid_Underflow*/
-#ifdef Sudden_Underflow
-#ifdef IBM
- j = 1 + 4*P - 3 - bbbits + ((bbe + bbbits - 1) & 3);
-#else
- j = P + 1 - bbbits;
-#endif
-#else /*Sudden_Underflow*/
- j = bbe;
- i = j + bbbits - 1; /* logb(rv) */
- if (i < Emin) /* denormal */
- j += P - Emin;
- else
- j = P + 1 - bbbits;
-#endif /*Sudden_Underflow*/
-#endif /*Avoid_Underflow*/
- bb2 += j;
- bd2 += j;
-#ifdef Avoid_Underflow
- bd2 += scale;
-#endif
- i = bb2 < bd2 ? bb2 : bd2;
- if (i > bs2)
- i = bs2;
- if (i > 0) {
- bb2 -= i;
- bd2 -= i;
- bs2 -= i;
- }
- if (bb5 > 0) {
- bs = pow5mult(bs, bb5);
- if (bs == NULL)
- goto ovfl;
- bb1 = mult(bs, bb);
- if (bb1 == NULL)
- goto ovfl;
- Bfree(bb);
- bb = bb1;
- }
- if (bb2 > 0) {
- bb = lshift(bb, bb2);
- if (bb == NULL)
- goto ovfl;
- }
- if (bd5 > 0) {
- bd = pow5mult(bd, bd5);
- if (bd == NULL)
- goto ovfl;
- }
- if (bd2 > 0) {
- bd = lshift(bd, bd2);
- if (bd == NULL)
- goto ovfl;
- }
- if (bs2 > 0) {
- bs = lshift(bs, bs2);
- if (bs == NULL)
- goto ovfl;
- }
- delta = diff(bb, bd);
- if (delta == NULL)
- goto ovfl;
- dsign = delta->sign;
- delta->sign = 0;
- i = cmp(delta, bs);
-#ifdef Honor_FLT_ROUNDS
- if (rounding != 1) {
- if (i < 0) {
- /* Error is less than an ulp */
- if (!delta->x[0] && delta->wds <= 1) {
- /* exact */
-#ifdef SET_INEXACT
- inexact = 0;
-#endif
- break;
- }
- if (rounding) {
- if (dsign) {
- adj = 1.;
- goto apply_adj;
- }
- }
- else if (!dsign) {
- adj = -1.;
- if (!word1(rv)
- && !(word0(rv) & Frac_mask)) {
- y = word0(rv) & Exp_mask;
-#ifdef Avoid_Underflow
- if (!scale || y > 2*P*Exp_msk1)
-#else
- if (y)
-#endif
- {
- delta = lshift(delta,Log2P);
- if (cmp(delta, bs) <= 0)
- adj = -0.5;
- }
- }
- apply_adj:
-#ifdef Avoid_Underflow
- if (scale && (y = word0(rv) & Exp_mask)
- <= 2*P*Exp_msk1)
- word0(adj) += (2*P+1)*Exp_msk1 - y;
-#else
-#ifdef Sudden_Underflow
- if ((word0(rv) & Exp_mask) <=
- P*Exp_msk1) {
- word0(rv) += P*Exp_msk1;
- dval(rv) += adj*ulp(dval(rv));
- word0(rv) -= P*Exp_msk1;
- }
- else
-#endif /*Sudden_Underflow*/
-#endif /*Avoid_Underflow*/
- dval(rv) += adj*ulp(dval(rv));
- }
- break;
- }
- adj = ratio(delta, bs);
- if (adj < 1.)
- adj = 1.;
- if (adj <= 0x7ffffffe) {
- /* adj = rounding ? ceil(adj) : floor(adj); */
- y = adj;
- if (y != adj) {
- if (!((rounding>>1) ^ dsign))
- y++;
- adj = y;
- }
- }
-#ifdef Avoid_Underflow
- if (scale && (y = word0(rv) & Exp_mask) <= 2*P*Exp_msk1)
- word0(adj) += (2*P+1)*Exp_msk1 - y;
-#else
-#ifdef Sudden_Underflow
- if ((word0(rv) & Exp_mask) <= P*Exp_msk1) {
- word0(rv) += P*Exp_msk1;
- adj *= ulp(dval(rv));
- if (dsign)
- dval(rv) += adj;
- else
- dval(rv) -= adj;
- word0(rv) -= P*Exp_msk1;
- goto cont;
- }
-#endif /*Sudden_Underflow*/
-#endif /*Avoid_Underflow*/
- adj *= ulp(dval(rv));
- if (dsign)
- dval(rv) += adj;
- else
- dval(rv) -= adj;
- goto cont;
- }
-#endif /*Honor_FLT_ROUNDS*/
-
- if (i < 0) {
- /* Error is less than half an ulp -- check for
- * special case of mantissa a power of two.
- */
- if (dsign || word1(rv) || word0(rv) & Bndry_mask
-#ifdef IEEE_Arith
-#ifdef Avoid_Underflow
- || (word0(rv) & Exp_mask) <= (2*P+1)*Exp_msk1
-#else
- || (word0(rv) & Exp_mask) <= Exp_msk1
-#endif
-#endif
- ) {
-#ifdef SET_INEXACT
- if (!delta->x[0] && delta->wds <= 1)
- inexact = 0;
-#endif
- break;
- }
- if (!delta->x[0] && delta->wds <= 1) {
- /* exact result */
-#ifdef SET_INEXACT
- inexact = 0;
-#endif
- break;
- }
- delta = lshift(delta,Log2P);
- if (cmp(delta, bs) > 0)
- goto drop_down;
- break;
- }
- if (i == 0) {
- /* exactly half-way between */
- if (dsign) {
- if ((word0(rv) & Bndry_mask1) == Bndry_mask1
- && word1(rv) == (
-#ifdef Avoid_Underflow
- (scale && (y = word0(rv) & Exp_mask) <= 2*P*Exp_msk1)
- ? (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) :
-#endif
- 0xffffffff)) {
- /*boundary case -- increment exponent*/
- word0(rv) = (word0(rv) & Exp_mask)
- + Exp_msk1
-#ifdef IBM
- | Exp_msk1 >> 4
-#endif
- ;
- word1(rv) = 0;
-#ifdef Avoid_Underflow
- dsign = 0;
-#endif
- break;
- }
- }
- else if (!(word0(rv) & Bndry_mask) && !word1(rv)) {
- drop_down:
- /* boundary case -- decrement exponent */
-#ifdef Sudden_Underflow /*{{*/
- L = word0(rv) & Exp_mask;
-#ifdef IBM
- if (L < Exp_msk1)
-#else
-#ifdef Avoid_Underflow
- if (L <= (scale ? (2*P+1)*Exp_msk1 : Exp_msk1))
-#else
- if (L <= Exp_msk1)
-#endif /*Avoid_Underflow*/
-#endif /*IBM*/
- goto undfl;
- L -= Exp_msk1;
-#else /*Sudden_Underflow}{*/
-#ifdef Avoid_Underflow
- if (scale) {
- L = word0(rv) & Exp_mask;
- if (L <= (2*P+1)*Exp_msk1) {
- if (L > (P+2)*Exp_msk1)
- /* round even ==> */
- /* accept rv */
- break;
- /* rv = smallest denormal */
- goto undfl;
- }
- }
-#endif /*Avoid_Underflow*/
- L = (word0(rv) & Exp_mask) - Exp_msk1;
-#endif /*Sudden_Underflow}*/
- word0(rv) = (UINT32)(L | Bndry_mask1);
- word1(rv) = 0xffffffffU;
-#ifdef IBM
- goto cont;
-#else
- break;
-#endif
- }
-#ifndef ROUND_BIASED
- if (!(word1(rv) & LSB))
- break;
-#endif
- if (dsign)
- dval(rv) += ulp(dval(rv));
-#ifndef ROUND_BIASED
- else {
- dval(rv) -= ulp(dval(rv));
-#ifndef Sudden_Underflow
- if (!dval(rv))
- goto undfl;
-#endif
- }
-#ifdef Avoid_Underflow
- dsign = 1 - dsign;
-#endif
-#endif
- break;
- }
- if ((aadj = ratio(delta, bs)) <= 2.) {
- if (dsign)
- aadj = aadj1 = 1.;
- else if (word1(rv) || word0(rv) & Bndry_mask) {
-#ifndef Sudden_Underflow
- if (word1(rv) == Tiny1 && !word0(rv))
- goto undfl;
-#endif
- aadj = 1.;
- aadj1 = -1.;
- }
- else {
- /* special case -- power of FLT_RADIX to be */
- /* rounded down... */
-
- if (aadj < 2./FLT_RADIX)
- aadj = 1./FLT_RADIX;
- else
- aadj *= 0.5;
- aadj1 = -aadj;
- }
- }
- else {
- aadj *= 0.5;
- aadj1 = dsign ? aadj : -aadj;
-#ifdef Check_FLT_ROUNDS
- switch(Rounding) {
- case 2: /* towards +infinity */
- aadj1 -= 0.5;
- break;
- case 0: /* towards 0 */
- case 3: /* towards -infinity */
- aadj1 += 0.5;
- }
-#else
- if (Flt_Rounds == 0)
- aadj1 += 0.5;
-#endif /*Check_FLT_ROUNDS*/
- }
- y = word0(rv) & Exp_mask;
-
- /* Check for overflow */
-
- if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) {
- dval(rv0) = dval(rv);
- word0(rv) -= P*Exp_msk1;
- adj = aadj1 * ulp(dval(rv));
- dval(rv) += adj;
- if ((word0(rv) & Exp_mask) >=
- Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
- if (word0(rv0) == Big0 && word1(rv0) == Big1)
- goto ovfl;
- word0(rv) = Big0;
- word1(rv) = Big1;
- goto cont;
- }
- else
- word0(rv) += P*Exp_msk1;
- }
- else {
-#ifdef Avoid_Underflow
- if (scale && y <= 2*P*Exp_msk1) {
- if (aadj <= 0x7fffffff) {
- if ((z = (uint32_t)aadj) == 0)
- z = 1;
- aadj = (double)z;
- aadj1 = dsign ? aadj : -aadj;
- }
- word0(aadj1) += (UINT32)((2*P+1)*Exp_msk1 - y);
- }
- adj = aadj1 * ulp(dval(rv));
- dval(rv) += adj;
-#else
-#ifdef Sudden_Underflow
- if ((word0(rv) & Exp_mask) <= P*Exp_msk1) {
- dval(rv0) = dval(rv);
- word0(rv) += P*Exp_msk1;
- adj = aadj1 * ulp(dval(rv));
- dval(rv) += adj;
-#ifdef IBM
- if ((word0(rv) & Exp_mask) < P*Exp_msk1)
-#else
- if ((word0(rv) & Exp_mask) <= P*Exp_msk1)
-#endif
- {
- if (word0(rv0) == Tiny0
- && word1(rv0) == Tiny1)
- goto undfl;
- word0(rv) = Tiny0;
- word1(rv) = Tiny1;
- goto cont;
- }
- else
- word0(rv) -= P*Exp_msk1;
- }
- else {
- adj = aadj1 * ulp(dval(rv));
- dval(rv) += adj;
- }
-#else /*Sudden_Underflow*/
- /* Compute adj so that the IEEE rounding rules will
- * correctly round rv + adj in some half-way cases.
- * If rv * ulp(rv) is denormalized (i.e.,
- * y <= (P-1)*Exp_msk1), we must adjust aadj to avoid
- * trouble from bits lost to denormalization;
- * example: 1.2e-307 .
- */
- if (y <= (P-1)*Exp_msk1 && aadj > 1.) {
- aadj1 = (double)(int)(aadj + 0.5);
- if (!dsign)
- aadj1 = -aadj1;
- }
- adj = aadj1 * ulp(dval(rv));
- dval(rv) += adj;
-#endif /*Sudden_Underflow*/
-#endif /*Avoid_Underflow*/
- }
- z = word0(rv) & Exp_mask;
-#ifndef SET_INEXACT
-#ifdef Avoid_Underflow
- if (!scale)
-#endif
- if (y == z) {
- /* Can we stop now? */
- L = (Long)aadj;
- aadj -= L;
- /* The tolerances below are conservative. */
- if (dsign || word1(rv) || word0(rv) & Bndry_mask) {
- if (aadj < .4999999 || aadj > .5000001)
- break;
- }
- else if (aadj < .4999999/FLT_RADIX)
- break;
- }
-#endif
- cont:
- Bfree(bb);
- Bfree(bd);
- Bfree(bs);
- Bfree(delta);
- }
-#ifdef SET_INEXACT
- if (inexact) {
- if (!oldinexact) {
- word0(rv0) = Exp_1 + (70 << Exp_shift);
- word1(rv0) = 0;
- dval(rv0) += 1.;
- }
- }
- else if (!oldinexact)
- clear_inexact();
-#endif
-#ifdef Avoid_Underflow
- if (scale) {
- word0(rv0) = Exp_1 - 2*P*Exp_msk1;
- word1(rv0) = 0;
- dval(rv) *= dval(rv0);
-#ifndef NO_ERRNO
- /* try to avoid the bug of testing an 8087 register value */
- if (word0(rv) == 0 && word1(rv) == 0)
- errno = ERANGE;
-#endif
- }
-#endif /* Avoid_Underflow */
-#ifdef SET_INEXACT
- if (inexact && !(word0(rv) & Exp_mask)) {
- /* set underflow bit */
- dval(rv0) = 1e-300;
- dval(rv0) *= dval(rv0);
- }
-#endif
- retfree:
- Bfree(bb);
- Bfree(bd);
- Bfree(bs);
- Bfree(bd0);
- Bfree(delta);
- ret:
- if (se)
- *se = __UNCONST(s);
- return sign ? -dval(rv) : dval(rv);
-}
-
diff --git a/StdLib/LibC/gdtoa/strtodg.c b/StdLib/LibC/gdtoa/strtodg.c
deleted file mode 100644
index fcb4360472..0000000000
--- a/StdLib/LibC/gdtoa/strtodg.c
+++ /dev/null
@@ -1,1021 +0,0 @@
-/** @file
-
- Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- *****************************************************************
-
- The author of this software is David M. Gay.
-
- Copyright (C) 1998-2001 by 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.
-
- Please send bug reports to David M. Gay (dmg at acm dot org,
- with " at " changed at "@" and " dot " changed to ".").
-
- *****************************************************************
-
- NetBSD: strtodg.c,v 1.5.14.1 2008/04/08 21:10:55 jdc Exp
-**/
-#include <LibConfig.h>
-
-#include "gdtoaimp.h"
-
-#ifdef USE_LOCALE
-#include "locale.h"
-#endif
-
-#if defined(_MSC_VER)
- // Disable warnings about assignment within conditional expressions.
- #pragma warning ( disable : 4706 )
-#endif
-
- static CONST int
-fivesbits[] = { 0, 3, 5, 7, 10, 12, 14, 17, 19, 21,
- 24, 26, 28, 31, 33, 35, 38, 40, 42, 45,
- 47, 49, 52
-#ifdef VAX
- , 54, 56
-#endif
- };
-
- Bigint *
-increment(Bigint *b)
-{
- ULong *x, *xe;
- Bigint *b1;
-#ifdef Pack_16
- ULong carry = 1, y;
-#endif
-
- x = b->x;
- xe = x + b->wds;
-#ifdef Pack_32
- do {
- if (*x < (ULong)0xffffffffL) {
- ++*x;
- return b;
- }
- *x++ = 0;
- } while(x < xe);
-#else
- do {
- y = *x + carry;
- carry = y >> 16;
- *x++ = y & 0xffff;
- if (!carry)
- return b;
- } while(x < xe);
- if (carry)
-#endif
- {
- if (b->wds >= b->maxwds) {
- b1 = Balloc(b->k+1);
- if (b1 == NULL)
- return NULL;
- Bcopy(b1,b);
- Bfree(b);
- b = b1;
- }
- b->x[b->wds++] = 1;
- }
- return b;
- }
-
- int
-decrement(Bigint *b)
-{
- ULong *x, *xe;
-#ifdef Pack_16
- ULong borrow = 1, y;
-#endif
-
- x = b->x;
- xe = x + b->wds;
-#ifdef Pack_32
- do {
- if (*x) {
- --*x;
- break;
- }
- *x++ = 0xffffffffUL;
- }
- while(x < xe);
-#else
- do {
- y = *x - borrow;
- borrow = (y & 0x10000) >> 16;
- *x++ = y & 0xffff;
- } while(borrow && x < xe);
-#endif
- return STRTOG_Inexlo;
- }
-
- static int
-all_on(CONST Bigint *b, int n)
-{
- CONST ULong *x, *xe;
-
- x = b->x;
- xe = x + ((unsigned int)n >> kshift);
- while(x < xe)
- if ((*x++ & ALL_ON) != ALL_ON)
- return 0;
- if (n &= kmask)
- return ((*x | (ALL_ON << n)) & ALL_ON) == ALL_ON;
- return 1;
- }
-
- Bigint *
-set_ones(Bigint *b, int n)
-{
- int k;
- ULong *x, *xe;
-
- k = (unsigned int)(n + ((1 << kshift) - 1)) >> kshift;
- if (b->k < k) {
- Bfree(b);
- b = Balloc(k);
- if (b == NULL)
- return NULL;
- }
- k = (unsigned int)n >> kshift;
- if (n &= kmask)
- k++;
- b->wds = k;
- x = b->x;
- xe = x + k;
- while(x < xe)
- *x++ = ALL_ON;
- if (n)
- x[-1] >>= ULbits - n;
- return b;
- }
-
- static int
-rvOK (
- double d, CONST FPI *fpi, Long *expt, ULong *bits, int exact, int rd, int *irv
-)
-{
- Bigint *b;
- ULong carry, inex, lostbits;
- int bdif, e, j, k, k1, nb, rv;
-
- carry = rv = 0;
- b = d2b(d, &e, &bdif);
- bdif -= nb = fpi->nbits;
- e += bdif;
- if (bdif <= 0) {
- if (exact)
- goto trunc;
- goto ret;
- }
- if (P == nb) {
- if (
-#ifndef IMPRECISE_INEXACT
- exact &&
-#endif
- fpi->rounding ==
-#ifdef RND_PRODQUOT
- FPI_Round_near
-#else
- Flt_Rounds
-#endif
- ) goto trunc;
- goto ret;
- }
- switch(rd) {
- case 1:
- goto trunc;
- case 2:
- break;
- default: /* round near */
- k = bdif - 1;
- if (!k) {
- if (!exact)
- goto ret;
- if (b->x[0] & 2)
- break;
- goto trunc;
- }
- if (b->x[(unsigned int)k>>kshift] & ((ULong)1 << (k & kmask)))
- break;
- goto trunc;
- }
- /* "break" cases: round up 1 bit, then truncate; bdif > 0 */
- carry = 1;
- trunc:
- inex = lostbits = 0;
- if (bdif > 0) {
- if ( (lostbits = any_on(b, bdif)) !=0)
- inex = STRTOG_Inexlo;
- rshift(b, bdif);
- if (carry) {
- inex = STRTOG_Inexhi;
- b = increment(b);
- if ( (j = nb & kmask) !=0)
- j = ULbits - j;
- if (hi0bits(b->x[b->wds - 1]) != j) {
- if (!lostbits)
- lostbits = b->x[0] & 1;
- rshift(b, 1);
- e++;
- }
- }
- }
- else if (bdif < 0)
- b = lshift(b, -bdif);
- if (e < fpi->emin) {
- k = fpi->emin - e;
- e = fpi->emin;
- if (k > nb || fpi->sudden_underflow) {
- inex = b->wds = 0;
- *irv = STRTOG_Underflow | STRTOG_Inexlo;
- }
- else {
- k1 = k - 1;
- if (k1 > 0 && !lostbits)
- lostbits = any_on(b, k1);
- if (!lostbits && !exact)
- goto ret;
- lostbits |=
- carry = b->x[(unsigned int)k1>>kshift] &
- (ULong)(1 << ((unsigned int)k1 & kmask));
- rshift(b, k);
- *irv = STRTOG_Denormal;
- if (carry) {
- b = increment(b);
- inex = STRTOG_Inexhi | STRTOG_Underflow;
- }
- else if (lostbits)
- inex = STRTOG_Inexlo | STRTOG_Underflow;
- }
- }
- else if (e > fpi->emax) {
- e = fpi->emax + 1;
- *irv = STRTOG_Infinite | STRTOG_Overflow | STRTOG_Inexhi;
-#ifndef NO_ERRNO
- errno = ERANGE;
-#endif
- inex = b->wds = 0;
- }
- *expt = e;
- copybits(bits, nb, b);
- *irv |= inex;
- rv = 1;
- ret:
- Bfree(b);
- return rv;
- }
-
- static int
-mantbits(double d)
-{
- ULong L;
- if ( (L = word1(d)) !=0)
- return P - lo0bits(&L);
- L = word0(d) | Exp_msk1;
- return P - 32 - lo0bits(&L);
- }
-
- int
-strtodg (
- CONST char *s00, char **se, CONST FPI *fpi, Long *expt, ULong *bits
-)
-{
- int abe = 0, abits = 0, asub;
- int bb0, bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, decpt, denorm;
- int dsign, e, e1, e2, emin, esign, finished, i, inex, irv;
- int j, k, nbits, nd, nd0, nf, nz, nz0, rd, rvbits, rve, rve1, sign;
- int sudden_underflow = 0; /* pacify gcc */
- CONST char *s, *s0, *s1;
- double adj, adj0, rv, tol;
- Long L;
- ULong y, z;
- Bigint *ab, *bb, *bb1, *bd, *bd0, *bs, *delta, *rvb, *rvb0;
-
- e2 = 0; /* XXX gcc */
-
- irv = STRTOG_Zero;
- denorm = sign = nz0 = nz = 0;
- dval(rv) = 0.;
- rvb = 0;
- nbits = fpi->nbits;
- for(s = s00;;s++) switch(*s) {
- case '-':
- sign = 1;
- /* FALLTHROUGH */
- case '+':
- if (*++s)
- goto break2;
- /* FALLTHROUGH */
- case 0:
- sign = 0;
- irv = STRTOG_NoNumber;
- s = s00;
- goto ret;
- case '\t':
- case '\n':
- case '\v':
- case '\f':
- case '\r':
- case ' ':
- continue;
- default:
- goto break2;
- }
- break2:
- if (*s == '0') {
-#ifndef NO_HEX_FP
- switch(s[1]) {
- case 'x':
- case 'X':
- irv = gethex(&s, fpi, expt, &rvb, sign);
- if (irv == STRTOG_NoNumber) {
- s = s00;
- sign = 0;
- }
- goto ret;
- }
-#endif
- nz0 = 1;
- while(*++s == '0') ;
- if (!*s)
- goto ret;
- }
- sudden_underflow = fpi->sudden_underflow;
- s0 = s;
- y = z = 0;
- for(decpt = nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++)
- if (nd < 9)
- y = 10*y + c - '0';
- else if (nd < 16)
- z = 10*z + c - '0';
- nd0 = nd;
-#ifdef USE_LOCALE
- if (c == *localeconv()->decimal_point)
-#else
- if (c == '.')
-#endif
- {
- decpt = 1;
- c = *++s;
- if (!nd) {
- for(; c == '0'; c = *++s)
- nz++;
- if (c > '0' && c <= '9') {
- s0 = s;
- nf += nz;
- nz = 0;
- goto have_dig;
- }
- goto dig_done;
- }
- for(; c >= '0' && c <= '9'; c = *++s) {
- have_dig:
- nz++;
- if (c -= '0') {
- nf += nz;
- for(i = 1; i < nz; i++)
- if (nd++ < 9)
- y *= 10;
- else if (nd <= DBL_DIG + 1)
- z *= 10;
- if (nd++ < 9)
- y = 10*y + c;
- else if (nd <= DBL_DIG + 1)
- z = 10*z + c;
- nz = 0;
- }
- }
- }
- dig_done:
- e = 0;
- if (c == 'e' || c == 'E') {
- if (!nd && !nz && !nz0) {
- irv = STRTOG_NoNumber;
- s = s00;
- goto ret;
- }
- s00 = s;
- esign = 0;
- switch(c = *++s) {
- case '-':
- esign = 1;
- /* FALLTHROUGH */
- case '+':
- c = *++s;
- }
- if (c >= '0' && c <= '9') {
- while(c == '0')
- c = *++s;
- if (c > '0' && c <= '9') {
- L = c - '0';
- s1 = s;
- while((c = *++s) >= '0' && c <= '9')
- L = 10*L + c - '0';
- if (s - s1 > 8 || L > 19999)
- /* Avoid confusion from exponents
- * so large that e might overflow.
- */
- e = 19999; /* safe for 16 bit ints */
- else
- e = (int)L;
- if (esign)
- e = -e;
- }
- else
- e = 0;
- }
- else
- s = s00;
- }
- if (!nd) {
- if (!nz && !nz0) {
-#ifdef INFNAN_CHECK
- /* Check for Nan and Infinity */
- if (!decpt)
- switch(c) {
- case 'i':
- case 'I':
- if (match(&s,"nf")) {
- --s;
- if (!match(&s,"inity"))
- ++s;
- irv = STRTOG_Infinite;
- goto infnanexp;
- }
- break;
- case 'n':
- case 'N':
- if (match(&s, "an")) {
- irv = STRTOG_NaN;
- *expt = fpi->emax + 1;
-#ifndef No_Hex_NaN
- if (*s == '(') /*)*/
- irv = hexnan(&s, fpi, bits);
-#endif
- goto infnanexp;
- }
- }
-#endif /* INFNAN_CHECK */
- irv = STRTOG_NoNumber;
- s = s00;
- }
- goto ret;
- }
-
- irv = STRTOG_Normal;
- e1 = e -= nf;
- rd = 0;
- switch(fpi->rounding & 3) {
- case FPI_Round_up:
- rd = 2 - sign;
- break;
- case FPI_Round_zero:
- rd = 1;
- break;
- case FPI_Round_down:
- rd = 1 + sign;
- }
-
- /* Now we have nd0 digits, starting at s0, followed by a
- * decimal point, followed by nd-nd0 digits. The number we're
- * after is the integer represented by those digits times
- * 10**e */
-
- if (!nd0)
- nd0 = nd;
- k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
- dval(rv) = (double)y;
- if (k > 9)
- dval(rv) = tens[k - 9] * dval(rv) + z;
- bd0 = 0;
- if (nbits <= P && nd <= DBL_DIG) {
- if (!e) {
- if (rvOK(dval(rv), fpi, expt, bits, 1, rd, &irv))
- goto ret;
- }
- else if (e > 0) {
- if (e <= Ten_pmax) {
- i = fivesbits[e] + mantbits(dval(rv)) <= P;
- /* rv = */ rounded_product(dval(rv), tens[e]);
- if (rvOK(dval(rv), fpi, expt, bits, i, rd, &irv))
- goto ret;
- e1 -= e;
- goto rv_notOK;
- }
- i = DBL_DIG - nd;
- if (e <= Ten_pmax + i) {
- /* A fancier test would sometimes let us do
- * this for larger i values.
- */
- e2 = e - i;
- e1 -= i;
- dval(rv) *= tens[i];
- /* rv = */ rounded_product(dval(rv), tens[e2]);
- if (rvOK(dval(rv), fpi, expt, bits, 0, rd, &irv))
- goto ret;
- e1 -= e2;
- }
- }
-#ifndef Inaccurate_Divide
- else if (e >= -Ten_pmax) {
- /* rv = */ rounded_quotient(dval(rv), tens[-e]);
- if (rvOK(dval(rv), fpi, expt, bits, 0, rd, &irv))
- goto ret;
- e1 -= e;
- }
-#endif
- }
- rv_notOK:
- e1 += nd - k;
-
- /* Get starting approximation = rv * 10**e1 */
-
- e2 = 0;
- if (e1 > 0) {
- if ( (i = e1 & 15) !=0)
- dval(rv) *= tens[i];
- if (e1 &= ~15) {
- e1 = (unsigned int)e1 >> 4;
- while(e1 >= (1 << (n_bigtens-1))) {
- e2 += (unsigned int)((word0(rv) & Exp_mask)
- >> Exp_shift1) - Bias;
- word0(rv) &= ~Exp_mask;
- word0(rv) |= Bias << Exp_shift1;
- dval(rv) *= bigtens[n_bigtens-1];
- e1 -= 1 << (n_bigtens-1);
- }
- e2 += (unsigned int)((word0(rv) & Exp_mask) >> Exp_shift1) - Bias;
- word0(rv) &= ~Exp_mask;
- word0(rv) |= Bias << Exp_shift1;
- for(j = 0; e1 > 0; j++, e1 = (unsigned int)e1 >> 1)
- if (e1 & 1)
- dval(rv) *= bigtens[j];
- }
- }
- else if (e1 < 0) {
- e1 = -e1;
- if ( (i = e1 & 15) !=0)
- dval(rv) /= tens[i];
- if (e1 &= ~15) {
- e1 = (unsigned int)e1 >> 4;
- while(e1 >= (1 << (n_bigtens-1))) {
- e2 += (unsigned int)((word0(rv) & Exp_mask)
- >> Exp_shift1) - Bias;
- word0(rv) &= ~Exp_mask;
- word0(rv) |= Bias << Exp_shift1;
- dval(rv) *= tinytens[n_bigtens-1];
- e1 -= 1 << (n_bigtens-1);
- }
- e2 += (unsigned int)((word0(rv) & Exp_mask) >> Exp_shift1) - Bias;
- word0(rv) &= ~Exp_mask;
- word0(rv) |= Bias << Exp_shift1;
- for(j = 0; e1 > 0; j++, e1 = (unsigned int)e1 >> 1)
- if (e1 & 1)
- dval(rv) *= tinytens[j];
- }
- }
- rvb = d2b(dval(rv), &rve, &rvbits); /* rv = rvb * 2^rve */
- if (rvb == NULL)
- return STRTOG_NoMemory;
- rve += e2;
- if ((j = rvbits - nbits) > 0) {
- rshift(rvb, j);
- rvbits = nbits;
- rve += j;
- }
- bb0 = 0; /* trailing zero bits in rvb */
- e2 = rve + rvbits - nbits;
- if (e2 > fpi->emax + 1)
- goto huge;
- rve1 = rve + rvbits - nbits;
- if (e2 < (emin = fpi->emin)) {
- denorm = 1;
- j = rve - emin;
- if (j > 0) {
- rvb = lshift(rvb, j);
- rvbits += j;
- }
- else if (j < 0) {
- rvbits += j;
- if (rvbits <= 0) {
- if (rvbits < -1) {
- ufl:
- rvb->wds = 0;
- rvb->x[0] = 0;
- *expt = emin;
- irv = STRTOG_Underflow | STRTOG_Inexlo;
- goto ret;
- }
- rvb->x[0] = rvb->wds = rvbits = 1;
- }
- else
- rshift(rvb, -j);
- }
- rve = rve1 = emin;
- if (sudden_underflow && e2 + 1 < emin)
- goto ufl;
- }
-
- /* Now the hard part -- adjusting rv to the correct value.*/
-
- /* Put digits into bd: true value = bd * 10^e */
-
- bd0 = s2b(s0, nd0, nd, y);
-
- for(;;) {
- bd = Balloc(bd0->k);
- if (bd == NULL)
- return STRTOG_NoMemory;
- Bcopy(bd, bd0);
- bb = Balloc(rvb->k);
- if (bb == NULL)
- return STRTOG_NoMemory;
- Bcopy(bb, rvb);
- bbbits = rvbits - bb0;
- bbe = rve + bb0;
- bs = i2b(1);
- if (bs == NULL)
- return STRTOG_NoMemory;
-
- if (e >= 0) {
- bb2 = bb5 = 0;
- bd2 = bd5 = e;
- }
- else {
- bb2 = bb5 = -e;
- bd2 = bd5 = 0;
- }
- if (bbe >= 0)
- bb2 += bbe;
- else
- bd2 -= bbe;
- bs2 = bb2;
- j = nbits + 1 - bbbits;
- i = bbe + bbbits - nbits;
- if (i < emin) /* denormal */
- j += i - emin;
- bb2 += j;
- bd2 += j;
- i = bb2 < bd2 ? bb2 : bd2;
- if (i > bs2)
- i = bs2;
- if (i > 0) {
- bb2 -= i;
- bd2 -= i;
- bs2 -= i;
- }
- if (bb5 > 0) {
- bs = pow5mult(bs, bb5);
- if (bs == NULL)
- return STRTOG_NoMemory;
- bb1 = mult(bs, bb);
- if (bb1 == NULL)
- return STRTOG_NoMemory;
- Bfree(bb);
- bb = bb1;
- }
- bb2 -= bb0;
- if (bb2 > 0) {
- bb = lshift(bb, bb2);
- if (bb == NULL)
- return STRTOG_NoMemory;
- }
- else if (bb2 < 0)
- rshift(bb, -bb2);
- if (bd5 > 0) {
- bd = pow5mult(bd, bd5);
- if (bd == NULL)
- return STRTOG_NoMemory;
- }
- if (bd2 > 0) {
- bd = lshift(bd, bd2);
- if (bd == NULL)
- return STRTOG_NoMemory;
- }
- if (bs2 > 0) {
- bs = lshift(bs, bs2);
- if (bs == NULL)
- return STRTOG_NoMemory;
- }
- asub = 1;
- inex = STRTOG_Inexhi;
- delta = diff(bb, bd);
- if (delta == NULL)
- return STRTOG_NoMemory;
- if (delta->wds <= 1 && !delta->x[0])
- break;
- dsign = delta->sign;
- delta->sign = finished = 0;
- L = 0;
- i = cmp(delta, bs);
- if (rd && i <= 0) {
- irv = STRTOG_Normal;
- if ( (finished = dsign ^ (rd&1)) !=0) {
- if (dsign != 0) {
- irv |= STRTOG_Inexhi;
- goto adj1;
- }
- irv |= STRTOG_Inexlo;
- if (rve1 == emin)
- goto adj1;
- for(i = 0, j = nbits; j >= ULbits;
- i++, j -= ULbits) {
- if (rvb->x[i] & ALL_ON)
- goto adj1;
- }
- if (j > 1 && lo0bits(rvb->x + i) < j - 1)
- goto adj1;
- rve = rve1 - 1;
- rvb = set_ones(rvb, rvbits = nbits);
- if (rvb == NULL)
- return STRTOG_NoMemory;
- break;
- }
- irv |= dsign ? STRTOG_Inexlo : STRTOG_Inexhi;
- break;
- }
- if (i < 0) {
- /* Error is less than half an ulp -- check for
- * special case of mantissa a power of two.
- */
- irv = dsign
- ? STRTOG_Normal | STRTOG_Inexlo
- : STRTOG_Normal | STRTOG_Inexhi;
- if (dsign || bbbits > 1 || denorm || rve1 == emin)
- break;
- delta = lshift(delta,1);
- if (delta == NULL)
- return STRTOG_NoMemory;
- if (cmp(delta, bs) > 0) {
- irv = STRTOG_Normal | STRTOG_Inexlo;
- goto drop_down;
- }
- break;
- }
- if (i == 0) {
- /* exactly half-way between */
- if (dsign) {
- if (denorm && all_on(rvb, rvbits)) {
- /*boundary case -- increment exponent*/
- rvb->wds = 1;
- rvb->x[0] = 1;
- rve = emin + nbits - (rvbits = 1);
- irv = STRTOG_Normal | STRTOG_Inexhi;
- denorm = 0;
- break;
- }
- irv = STRTOG_Normal | STRTOG_Inexlo;
- }
- else if (bbbits == 1) {
- irv = STRTOG_Normal;
- drop_down:
- /* boundary case -- decrement exponent */
- if (rve1 == emin) {
- irv = STRTOG_Normal | STRTOG_Inexhi;
- if (rvb->wds == 1 && rvb->x[0] == 1)
- sudden_underflow = 1;
- break;
- }
- rve -= nbits;
- rvb = set_ones(rvb, rvbits = nbits);
- if (rvb == NULL)
- return STRTOG_NoMemory;
- break;
- }
- else
- irv = STRTOG_Normal | STRTOG_Inexhi;
- if ((bbbits < nbits && !denorm) || !(rvb->x[0] & 1))
- break;
- if (dsign) {
- rvb = increment(rvb);
- if (rvb == NULL)
- return STRTOG_NoMemory;
- if ( (j = rvbits & kmask) !=0)
- j = ULbits - j;
- if (hi0bits(rvb->x[(unsigned int)(rvb->wds - 1)
- >> kshift])
- != j)
- rvbits++;
- irv = STRTOG_Normal | STRTOG_Inexhi;
- }
- else {
- if (bbbits == 1)
- goto undfl;
- decrement(rvb);
- irv = STRTOG_Normal | STRTOG_Inexlo;
- }
- break;
- }
- if ((dval(adj) = ratio(delta, bs)) <= 2.) {
- adj1:
- inex = STRTOG_Inexlo;
- if (dsign) {
- asub = 0;
- inex = STRTOG_Inexhi;
- }
- else if (denorm && bbbits <= 1) {
- undfl:
- rvb->wds = 0;
- rve = emin;
- irv = STRTOG_Underflow | STRTOG_Inexlo;
- break;
- }
- adj0 = dval(adj) = 1.;
- }
- else {
- adj0 = dval(adj) *= 0.5;
- if (dsign) {
- asub = 0;
- inex = STRTOG_Inexlo;
- }
- if (dval(adj) < 2147483647.) {
- L = (Long)adj0;
- adj0 -= L;
- switch(rd) {
- case 0:
- if (adj0 >= .5)
- goto inc_L;
- break;
- case 1:
- if (asub && adj0 > 0.)
- goto inc_L;
- break;
- case 2:
- if (!asub && adj0 > 0.) {
-inc_L:
- L++;
- inex = STRTOG_Inexact - inex;
- }
- }
- dval(adj) = (double)L;
- }
- }
- y = rve + rvbits;
-
- /* adj *= ulp(dval(rv)); */
- /* if (asub) rv -= adj; else rv += adj; */
-
- if (!denorm && rvbits < nbits) {
- rvb = lshift(rvb, j = nbits - rvbits);
- if (rvb == NULL)
- return STRTOG_NoMemory;
- rve -= j;
- rvbits = nbits;
- }
- ab = d2b(dval(adj), &abe, &abits);
- if (ab == NULL)
- return STRTOG_NoMemory;
- if (abe < 0)
- rshift(ab, -abe);
- else if (abe > 0)
- ab = lshift(ab, abe);
- rvb0 = rvb;
- if (asub) {
- /* rv -= adj; */
- j = hi0bits(rvb->x[rvb->wds-1]);
- rvb = diff(rvb, ab);
- if (rvb == NULL)
- return STRTOG_NoMemory;
- k = rvb0->wds - 1;
- if (denorm)
- /* do nothing */;
- else if (rvb->wds <= k
- || hi0bits( rvb->x[k]) >
- hi0bits(rvb0->x[k])) {
- /* unlikely; can only have lost 1 high bit */
- if (rve1 == emin) {
- --rvbits;
- denorm = 1;
- }
- else {
- rvb = lshift(rvb, 1);
- if (rvb == NULL)
- return STRTOG_NoMemory;
- --rve;
- --rve1;
- L = finished = 0;
- }
- }
- }
- else {
- rvb = sum(rvb, ab);
- if (rvb == NULL)
- return STRTOG_NoMemory;
- k = rvb->wds - 1;
- if (k >= rvb0->wds
- || hi0bits(rvb->x[k]) < hi0bits(rvb0->x[k])) {
- if (denorm) {
- if (++rvbits == nbits)
- denorm = 0;
- }
- else {
- rshift(rvb, 1);
- rve++;
- rve1++;
- L = 0;
- }
- }
- }
- Bfree(ab);
- Bfree(rvb0);
- if (finished)
- break;
-
- z = rve + rvbits;
- if (y == z && L) {
- /* Can we stop now? */
- tol = dval(adj) * 5e-16; /* > max rel error */
- dval(adj) = adj0 - .5;
- if (dval(adj) < -tol) {
- if (adj0 > tol) {
- irv |= inex;
- break;
- }
- }
- else if (dval(adj) > tol && adj0 < 1. - tol) {
- irv |= inex;
- break;
- }
- }
- bb0 = denorm ? 0 : trailz(rvb);
- Bfree(bb);
- Bfree(bd);
- Bfree(bs);
- Bfree(delta);
- }
- if (!denorm && (j = nbits - rvbits)) {
- if (j > 0)
- rvb = lshift(rvb, j);
- else
- rshift(rvb, -j);
- rve -= j;
- }
- *expt = rve;
- Bfree(bb);
- Bfree(bd);
- Bfree(bs);
- Bfree(bd0);
- Bfree(delta);
- if (rve > fpi->emax) {
- huge:
- rvb->wds = 0;
- irv = STRTOG_Infinite | STRTOG_Overflow | STRTOG_Inexhi;
-#ifndef NO_ERRNO
- errno = ERANGE;
-#endif
-#ifdef INFNAN_CHECK
- infnanexp:
-#endif
- *expt = fpi->emax + 1;
- }
- ret:
- if (denorm) {
- if (sudden_underflow) {
- rvb->wds = 0;
- irv = STRTOG_Underflow | STRTOG_Inexlo;
- }
- else {
- irv = (irv & ~STRTOG_Retmask) |
- (rvb->wds > 0 ? STRTOG_Denormal : STRTOG_Zero);
- if (irv & STRTOG_Inexact)
- irv |= STRTOG_Underflow;
- }
- }
- if (se)
- *se = __UNCONST(s);
- if (sign)
- irv |= STRTOG_Neg;
- if (rvb) {
- copybits(bits, nbits, rvb);
- Bfree(rvb);
- }
- return irv;
- }
diff --git a/StdLib/LibC/gdtoa/strtof.c b/StdLib/LibC/gdtoa/strtof.c
deleted file mode 100644
index 3b4b52cdc5..0000000000
--- a/StdLib/LibC/gdtoa/strtof.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* $NetBSD: strtof.c,v 1.2.14.1 2008/04/08 21:10:55 jdc Exp $ */
-
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by 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.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-#include <LibConfig.h>
-
-#include "namespace.h"
-#include "gdtoaimp.h"
-
-#ifdef __weak_alias
-__weak_alias(strtof, _strtof)
-#endif
-
- float
-#ifdef KR_headers
-strtof(s, sp) CONST char *s; char **sp;
-#else
-strtof(CONST char *s, char **sp)
-#endif
-{
- static CONST FPI fpi = { 24, 1-127-24+1, 254-127-24+1, 1, SI };
- ULong bits[1];
- Long expt;
- int k;
- union { ULong L[1]; float f; } u = { { 0 } };
-
- k = strtodg(s, sp, &fpi, &expt, bits);
- if (k == STRTOG_NoMemory) {
- errno = ERANGE;
- return HUGE_VALF;
- }
- switch(k & STRTOG_Retmask) {
- case STRTOG_NoNumber:
- case STRTOG_Zero:
- u.L[0] = 0;
- break;
-
- case STRTOG_Normal:
- case STRTOG_NaNbits:
- u.L[0] = (bits[0] & 0x7fffff) | ((expt + 0x7f + 23) << 23);
- break;
-
- case STRTOG_Denormal:
- u.L[0] = bits[0];
- break;
-
- case STRTOG_Infinite:
- u.L[0] = 0x7f800000;
- break;
-
- case STRTOG_NaN:
- u.L[0] = f_QNAN;
- }
- if (k & STRTOG_Neg)
- u.L[0] |= 0x80000000L;
- return u.f;
- }
diff --git a/StdLib/LibC/gdtoa/strtold_px.c b/StdLib/LibC/gdtoa/strtold_px.c
deleted file mode 100644
index f5920b2c4c..0000000000
--- a/StdLib/LibC/gdtoa/strtold_px.c
+++ /dev/null
@@ -1,4 +0,0 @@
-/* $NetBSD: strtold_px.c,v 1.1 2006/03/15 17:35:18 kleink Exp $ */
-
-#define GDTOA_LD_FMT x
-#include "strtold_subr.c"
diff --git a/StdLib/LibC/gdtoa/strtold_subr.c b/StdLib/LibC/gdtoa/strtold_subr.c
deleted file mode 100644
index db85fe8f23..0000000000
--- a/StdLib/LibC/gdtoa/strtold_subr.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* $NetBSD: strtold_subr.c,v 1.1 2006/03/15 17:35:18 kleink Exp $ */
-
-/*
- * Written by Klaus Klein <kleink@NetBSD.org>, November 16, 2005.
- * Public domain.
- */
-
-/*
- * NOTICE: This is not a standalone file. To use it, #include it in
- * the format-specific strtold_*.c, like so:
- *
- * #define GDTOA_LD_FMT <gdtoa extended-precision format code>
- * #include "strtold_subr.c"
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include "namespace.h"
-#include <math.h>
-#include <sys/stdint.h>
-#include <stdlib.h>
-#include "gdtoa.h"
-
-#ifdef __weak_alias
-__weak_alias(strtold, _strtold)
-#endif
-
-#ifndef __HAVE_LONG_DOUBLE
-#error no extended-precision long double type
-#endif
-
-#ifndef GDTOA_LD_FMT
-#error GDTOA_LD_FMT must be defined by format-specific source file
-#endif
-
-#define STRTOP(x) __CONCAT(strtop, x)
-
-long double
-strtold(const char *nptr, char **endptr)
-{
- long double ld;
-
- (void)STRTOP(GDTOA_LD_FMT)(nptr, endptr, &ld);
- return ld;
-}
diff --git a/StdLib/LibC/gdtoa/strtopx.c b/StdLib/LibC/gdtoa/strtopx.c
deleted file mode 100644
index 5dce12e0c6..0000000000
--- a/StdLib/LibC/gdtoa/strtopx.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/* $NetBSD: strtopx.c,v 1.3.14.1 2008/04/08 21:10:55 jdc Exp $ */
-
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by 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.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-#include <LibConfig.h>
-
-#include "gdtoaimp.h"
-
-#undef _0
-#undef _1
-
-/* one or the other of IEEE_BIG_ENDIAN or IEEE_LITTLE_ENDIAN should be #defined */
-
-#ifdef IEEE_BIG_ENDIAN
-#define _0 0
-#define _1 1
-#define _2 2
-#define _3 3
-#define _4 4
-#endif
-#ifdef IEEE_LITTLE_ENDIAN
-#define _0 4
-#define _1 3
-#define _2 2
-#define _3 1
-#define _4 0
-#endif
-
- int
-#ifdef KR_headers
-strtopx(s, sp, V) CONST char *s; char **sp; void *V;
-#else
-strtopx(CONST char *s, char **sp, void *V)
-#endif
-{
- static CONST FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI };
- ULong bits[2];
- Long expt;
- int k;
- UShort *L = (UShort*)V;
-
- k = strtodg(s, sp, &fpi, &expt, bits);
- if (k == STRTOG_NoMemory)
- return k;
- switch(k & STRTOG_Retmask) {
- case STRTOG_NoNumber:
- case STRTOG_Zero:
- L[0] = L[1] = L[2] = L[3] = L[4] = 0;
- break;
-
- case STRTOG_Denormal:
- L[_0] = 0;
- goto normal_bits;
-
- case STRTOG_Normal:
- case STRTOG_NaNbits:
- L[_0] = (UShort)(expt + 0x3fff + 63);
- normal_bits:
- L[_4] = (UShort)bits[0];
- L[_3] = (UShort)(bits[0] >> 16);
- L[_2] = (UShort)bits[1];
- L[_1] = (UShort)(bits[1] >> 16);
- break;
-
- case STRTOG_Infinite:
- L[_0] = 0x7fff;
- L[_1] = L[_2] = L[_3] = L[_4] = 0;
- break;
-
- case STRTOG_NaN:
- L[0] = ldus_QNAN0;
- L[1] = ldus_QNAN1;
- L[2] = ldus_QNAN2;
- L[3] = ldus_QNAN3;
- L[4] = ldus_QNAN4;
- }
- if (k & STRTOG_Neg)
- L[_0] |= 0x8000;
- return k;
- }
diff --git a/StdLib/LibC/gdtoa/sum.c b/StdLib/LibC/gdtoa/sum.c
deleted file mode 100644
index 850c1f0134..0000000000
--- a/StdLib/LibC/gdtoa/sum.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/* $NetBSD: sum.c,v 1.1.1.1.14.1 2008/04/08 21:10:55 jdc Exp $ */
-
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by 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.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-#include <LibConfig.h>
-
-#include "gdtoaimp.h"
-
- Bigint *
-#ifdef KR_headers
-sum(a, b) Bigint *a; Bigint *b;
-#else
-sum(Bigint *a, Bigint *b)
-#endif
-{
- Bigint *c;
- ULong carry, *xc, *xa, *xb, *xe, y;
-#ifdef Pack_32
- ULong z;
-#endif
-
- if (a->wds < b->wds) {
- c = b; b = a; a = c;
- }
- c = Balloc(a->k);
- if (c == NULL)
- return NULL;
- c->wds = a->wds;
- carry = 0;
- xa = a->x;
- xb = b->x;
- xc = c->x;
- xe = xc + b->wds;
-#ifdef Pack_32
- do {
- y = (*xa & 0xffff) + (*xb & 0xffff) + carry;
- carry = (y & 0x10000) >> 16;
- z = (*xa++ >> 16) + (*xb++ >> 16) + carry;
- carry = (z & 0x10000) >> 16;
- Storeinc(xc, z, y);
- }
- while(xc < xe);
- xe += a->wds - b->wds;
- while(xc < xe) {
- y = (*xa & 0xffff) + carry;
- carry = (y & 0x10000) >> 16;
- z = (*xa++ >> 16) + carry;
- carry = (z & 0x10000) >> 16;
- Storeinc(xc, z, y);
- }
-#else
- do {
- y = *xa++ + *xb++ + carry;
- carry = (y & 0x10000) >> 16;
- *xc++ = y & 0xffff;
- }
- while(xc < xe);
- xe += a->wds - b->wds;
- while(xc < xe) {
- y = *xa++ + carry;
- carry = (y & 0x10000) >> 16;
- *xc++ = y & 0xffff;
- }
-#endif
- if (carry) {
- if (c->wds == c->maxwds) {
- b = Balloc(c->k + 1);
- if (b == NULL)
- return NULL;
- Bcopy(b, c);
- Bfree(c);
- c = b;
- }
- c->x[c->wds++] = 1;
- }
- return c;
- }
diff --git a/StdLib/LibC/gdtoa/ulp.c b/StdLib/LibC/gdtoa/ulp.c
deleted file mode 100644
index 6f2780cf02..0000000000
--- a/StdLib/LibC/gdtoa/ulp.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* $NetBSD: ulp.c,v 1.2 2006/01/25 15:27:42 kleink Exp $ */
-
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 1999 by 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.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-#include <LibConfig.h>
-
-#include "gdtoaimp.h"
-
- double
-ulp
-#ifdef KR_headers
- (x) double x;
-#else
- (double x)
-#endif
-{
- Long L;
- double a;
-
- L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
-#ifndef Sudden_Underflow
- if (L > 0) {
-#endif
-#ifdef IBM
- L |= Exp_msk1 >> 4;
-#endif
- word0(a) = (UINT32)L;
- word1(a) = 0;
-#ifndef Sudden_Underflow
- }
- else {
- L = (unsigned int)-L >> Exp_shift;
- if (L < Exp_shift) {
- word0(a) = 0x80000 >> L;
- word1(a) = 0;
- }
- else {
- word0(a) = 0;
- L -= Exp_shift;
- word1(a) = L >= 31 ? 1 : 1 << (31 - L);
- }
- }
-#endif
- return a;
- }
diff --git a/StdLib/License.txt b/StdLib/License.txt
deleted file mode 100644
index be68999be6..0000000000
--- a/StdLib/License.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-Copyright (c) 2012, Intel Corporation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-* Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/StdLib/PosixLib/Err/LibErr.inf b/StdLib/PosixLib/Err/LibErr.inf
deleted file mode 100644
index 03877f6d99..0000000000
--- a/StdLib/PosixLib/Err/LibErr.inf
+++ /dev/null
@@ -1,42 +0,0 @@
-## @file
-# Library used for supplying some POSIX routines.
-#
-# Copyright (c) 2011, Intel Corporation. All rights reserved. <BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010006
- BASE_NAME = LibErr
- FILE_GUID = FC1D4706-88FB-42b0-98B0-A4B2E607EBAA
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibErr|UEFI_APPLICATION UEFI_DRIVER
-
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF EBC
-#
-
-[Sources.common]
- warn_err.c
-
-
-[Packages]
- MdePkg/MdePkg.dec
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
-
-[LibraryClasses]
- LibC
- LibStdio
- LibStdLib
- LibString
diff --git a/StdLib/PosixLib/Err/warn_err.c b/StdLib/PosixLib/Err/warn_err.c
deleted file mode 100644
index b69a41753f..0000000000
--- a/StdLib/PosixLib/Err/warn_err.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/** @file
- Implement the warning and error output messages.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1994 Michael L. Hitch
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Michael L. Hitch.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- **/
-#include <LibConfig.h>
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-
-static void
-_Vdomessage(int doerrno, const char *fmt, va_list args)
-{
- fprintf(stderr, "%s: ", getprogname());
- if (fmt) {
- vfprintf(stderr, fmt, args);
- fprintf(stderr, ": ");
- }
- if (doerrno && errno < EMAXERRORVAL) {
- fprintf(stderr, "%s", strerror(errno));
- }
- fprintf(stderr, "\n");
-}
-
-void
-err(int eval, const char *fmt, ...)
-{
- va_list ap;
- va_start(ap, fmt);
- _Vdomessage(1, fmt, ap);
- va_end(ap);
- exit(eval);
-}
-
-void
-errx(int eval, const char *fmt, ...)
-{
- va_list ap;
- va_start(ap, fmt);
- _Vdomessage(0, fmt, ap);
- va_end(ap);
- exit(eval);
-}
-
-void
-warn(const char *fmt, ...)
-{
- va_list ap;
- va_start(ap, fmt);
- _Vdomessage(1, fmt, ap);
- va_end(ap);
-}
-
-void
-warnx(const char *fmt, ...)
-{
- va_list ap;
- va_start(ap, fmt);
- _Vdomessage(0, fmt, ap);
- va_end(ap);
-}
diff --git a/StdLib/PosixLib/Gen/LibGen.inf b/StdLib/PosixLib/Gen/LibGen.inf
deleted file mode 100644
index 5a54686f6e..0000000000
--- a/StdLib/PosixLib/Gen/LibGen.inf
+++ /dev/null
@@ -1,47 +0,0 @@
-## @file
-# Library used for supplying glob POSIX routines.
-#
-# Copyright (c) 2011, Intel Corporation. All rights reserved. <BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010006
- BASE_NAME = LibGen
- FILE_GUID = CA599759-90A7-4fe4-BC8B-4B71C350DCAC
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibGen|UEFI_APPLICATION UEFI_DRIVER
-
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF EBC
-#
-
-[Sources.common]
- dirname.c
- opendir.c
- closedir.c
- readdir.c
- access.c
- utime.c
-
-[Packages]
- MdePkg/MdePkg.dec
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
-
-[LibraryClasses]
- LibStdio
- LibString
- LibStdLib
-
-[Pcd]
diff --git a/StdLib/PosixLib/Gen/access.c b/StdLib/PosixLib/Gen/access.c
deleted file mode 100644
index 3031e4f942..0000000000
--- a/StdLib/PosixLib/Gen/access.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/** @file
- Implementation of the Posix access() function.
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/syslimits.h>
-
-/** Save some typing later on. */
-#define GOOD_MODE (F_OK | X_OK | W_OK | R_OK)
-
-/** Determine accessibility of a file.
- The access() function checks the file, named by the pathname pointed to by
- the Path argument, for accessibility according to the bit pattern contained
- in Mode.
-
- The value of Mode is either the bitwise-inclusive OR of the access
- permissions to be checked (R_OK, W_OK, X_OK) or the existence test (F_OK).
-
- If Path ends in '/' or '\\', the target must be a directory, otherwise it doesn't matter.
- A file is executable if it is NOT a directory and it ends in ".efi".
-
- @param[in] Path Path or name of the file to be checked.
- @param[in] Mode Access permissions to check for.
-
- @retval 0 Successful completion.
- @retval -1 File is not accessible with the given Mode. The error condition
- is indicated by errno. Values of errno specific to the access
- function include: EACCES, ENOENT, ENOTDIR, ENAMETOOLONG
-**/
-int
-access(
- const char *Path,
- int Mode
- )
-{
- struct stat FileStat;
- int retval = -1;
- size_t PLength;
- uint32_t WantDir;
- uint32_t DirMatch;
-
- if((Path == NULL) || ((Mode & ~GOOD_MODE) != 0)) {
- errno = EINVAL;
- }
- else {
- PLength = strlen(Path);
- if(PLength > PATH_MAX) {
- errno = ENAMETOOLONG;
- }
- else {
- retval = stat(Path, &FileStat);
- if(retval == 0) {
- /* Path exists. FileStat now holds valid information. */
- WantDir = isDirSep(Path[PLength - 1]); // Does Path end in '/' or '\\' ?
- DirMatch = (! WantDir && (! S_ISDIR(FileStat.st_mode)));
-
- /* Test each permission individually. */
- do {
- if(Mode == F_OK) { /* Existence test. */
- if(DirMatch) { /* This is a directory or file as desired. */
- retval = 0;
- }
- else {
- /* Indicate why we failed the test. */
- errno = (WantDir) ? ENOTDIR : EISDIR;
- }
- break; /* F_OK does not combine with any other tests. */
- }
- if(Mode & R_OK) {
- if((FileStat.st_mode & READ_PERMS) == 0) {
- /* No read permissions.
- For UEFI, everything should have READ permissions.
- */
- errno = EDOOFUS; /* Programming Error. */
- break;
- }
- }
- if(Mode & W_OK) {
- if((FileStat.st_mode & WRITE_PERMS) == 0) {
- /* No write permissions. */
- errno = EACCES; /* Writing is not OK. */
- break;
- }
- }
- if(Mode & X_OK) {
- /* In EDK II, executable files end in ".efi" */
- if(strcmp(&Path[PLength-4], ".efi") != 0) {
- /* File is not an executable. */
- errno = EACCES;
- break;
- }
- }
- retval = 0;
- } while(FALSE);
- }
- else {
- /* File or path does not exist. */
- errno = ENOENT;
- }
- }
- }
- return retval;
-}
diff --git a/StdLib/PosixLib/Gen/closedir.c b/StdLib/PosixLib/Gen/closedir.c
deleted file mode 100644
index e5863b59ad..0000000000
--- a/StdLib/PosixLib/Gen/closedir.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/** @file
- Close an open directory.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1983, 1993
- Regents of the University of California. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- NetBSD: closedir.c,v 1.15 2006/05/17 20:36:50 christos Exp
- closedir.c 8.1 (Berkeley) 6/10/93
-**/
-#include <sys/cdefs.h>
-
-#include <namespace.h>
-#include <reentrant.h>
-#include <extern.h>
-#include <sys/types.h>
-
-#include <assert.h>
-#include <dirent.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#ifdef __weak_alias
-__weak_alias(closedir,_closedir)
-#endif
-
-/*
- * close a directory.
- */
-int
-closedir(DIR *dirp)
-{
- int fd;
-
- _DIAGASSERT(dirp != NULL);
-
-#ifdef _REENTRANT
- if (__isthreaded)
- mutex_lock((mutex_t *)dirp->dd_lock);
-#endif
- fd = dirp->dd_fd;
- dirp->dd_fd = -1;
- dirp->dd_loc = 0;
- free(dirp->dd_buf);
-
-#ifdef _REENTRANT
- if (__isthreaded) {
- mutex_unlock((mutex_t *)dirp->dd_lock);
- mutex_destroy((mutex_t *)dirp->dd_lock);
- free(dirp->dd_lock);
- }
-#endif
- free((void *)dirp);
- return(close(fd));
-}
diff --git a/StdLib/PosixLib/Gen/dirname.c b/StdLib/PosixLib/Gen/dirname.c
deleted file mode 100644
index eb924d435c..0000000000
--- a/StdLib/PosixLib/Gen/dirname.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/** @file
-
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1997, 2002 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Klaus Klein and Jason R. Thorpe.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
-
- NetBSD: dirname.c,v 1.10 2008/05/10 22:39:40 christos Exp
- */
-#include <LibConfig.h>
-#include <sys/cdefs.h>
-
-#include <limits.h>
-#include <ctype.h>
-#include <string.h>
-
-#ifdef __weak_alias
-__weak_alias(dirname,_dirname)
-#endif
-
-#ifdef HAVE_DIRNAME
-char *
-dirname(char *path)
-{
- static char singledot[] = ".";
- static char result[PATH_MAX];
- const char *lastp;
- size_t len;
-
- /*
- * If `path' is a null pointer or points to an empty string,
- * return a pointer to the string ".".
- */
- if ((path == NULL) || (*path == '\0'))
- return (singledot);
-
- /* Strip trailing slashes, if any. */
- lastp = path + strlen(path) - 1;
- while (lastp != path && isDirSep(*lastp))
- lastp--;
-
- /* Terminate path at the last occurence of '/'. */
- do {
- if (isDirSep(*lastp)) {
- /* Strip trailing slashes, if any. */
- while (lastp != path && isDirSep(*lastp))
- lastp--;
-
- /* ...and copy the result into the result buffer.
- We make sure that there will be room for the terminating NUL
- and for a final '/', if necessary.
- */
- len = (lastp - path) + 1 /* last char */;
- if (len > (PATH_MAX - 2))
- len = PATH_MAX - 2;
-
- memcpy(result, path, len);
- if(*lastp == ':') { /* Have we stripped off all except the Volume name? */
- if(isDirSep(lastp[1])) { /* Was ...":/"... so we want the root of the volume. */
- result[len++] = '/';
- }
- else {
- result[len++] = '.';
- }
- }
- result[len] = '\0';
- return (result);
- }
- } while (--lastp >= path);
-
- /* No /'s found, return a pointer to the string ".". */
- return (singledot);
-}
-#endif
diff --git a/StdLib/PosixLib/Gen/opendir.c b/StdLib/PosixLib/Gen/opendir.c
deleted file mode 100644
index cb4ffbc477..0000000000
--- a/StdLib/PosixLib/Gen/opendir.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/** @file
- Open a directory.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1983, 1993
- The Regents of the University of California. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- NetBSD: opendir.c,v 1.33 2008/01/10 09:49:04 elad Exp
- opendir.c 8.7 (Berkeley) 12/10/94
-**/
-#include <sys/cdefs.h>
-
-#include <namespace.h>
-#include <reentrant.h>
-#include <extern.h>
-#include <sys/param.h>
-//#include <sys/mount.h>
-#include <sys/stat.h>
-
-#include <assert.h>
-#include <dirent.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#define MAXITERATIONS 100
-
-/*
- * Open a directory.
- */
-DIR *
-opendir(const char *name)
-{
- _DIAGASSERT(name != NULL);
-
- return (__opendir2(name, DTF_HIDEW|DTF_NODUP));
-}
-
-DIR *
-__opendir2(const char *name, int flags)
-{
- DIR *dirp = NULL;
- int fd;
- int serrno;
- struct stat sb;
- int incr;
-
- _DIAGASSERT(name != NULL);
-
- if ((fd = open(name, O_RDONLY | O_NONBLOCK, 0)) == -1 ||
- fcntl(fd, F_SETFD, FD_CLOEXEC) == -1)
- goto error;
- if (fstat(fd, &sb) || !S_ISDIR(sb.st_mode)) {
- errno = ENOTDIR;
- goto error;
- }
- if ((dirp = (DIR *)malloc(sizeof(DIR))) == NULL)
- goto error;
- dirp->dd_buf = NULL;
-
- /*
- * If the machine's page size is an exact multiple of DIRBLKSIZ,
- * use a buffer that is cluster boundary aligned.
- * Hopefully this can be a big win someday by allowing page trades
- * to user space to be done by getdirentries()
- */
- incr = DIRBLKSIZ;
-
- dirp->dd_len = incr;
- dirp->dd_buf = malloc((size_t)dirp->dd_len);
- if (dirp->dd_buf == NULL)
- goto error;
- dirp->dd_seek = 0;
- flags &= ~DTF_REWIND;
-
- dirp->dd_loc = 0;
- dirp->dd_fd = fd;
- dirp->dd_flags = flags;
-
- /*
- * Set up seek point for rewinddir.
- */
-#ifdef _REENTRANT
- if (__isthreaded) {
- if ((dirp->dd_lock = malloc(sizeof(mutex_t))) == NULL)
- goto error;
- mutex_init((mutex_t *)dirp->dd_lock, NULL);
- }
-#endif
- dirp->dd_internal = NULL;
- return (dirp);
-error:
- serrno = errno;
- if (dirp && dirp->dd_buf)
- free(dirp->dd_buf);
- if (dirp)
- free(dirp);
- if (fd != -1)
- (void)close(fd);
- errno = serrno;
- return NULL;
-}
diff --git a/StdLib/PosixLib/Gen/readdir.c b/StdLib/PosixLib/Gen/readdir.c
deleted file mode 100644
index 13c4eaec07..0000000000
--- a/StdLib/PosixLib/Gen/readdir.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/** @file
- Get next entry in a directory.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- Copyright (c) 1983, 1993
- The Regents of the University of California. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- NetBSD: readdir.c,v 1.24 2008/05/04 18:53:26 tonnerre Exp
- readdir.c 8.3 (Berkeley) 9/29/94
- */
-#include <sys/cdefs.h>
-
-#include <namespace.h>
-#include <reentrant.h>
-#include <extern.h>
-#include <sys/param.h>
-#include <sys/stdint.h>
-
-#include <stdio.h>
-#include <dirent.h>
-#include <errno.h>
-#include <string.h>
-#include <unistd.h>
-
-/*
- * get next entry in a directory.
- */
-struct dirent *
-_readdir_unlocked(DIR *dirp, int skipdeleted)
-{
- struct dirent *dp;
-
-
- for (;;) {
- if (dirp->dd_loc >= dirp->dd_size) {
- if (dirp->dd_flags & __DTF_READALL)
- return (NULL);
- dirp->dd_loc = 0;
- }
- if (dirp->dd_loc == 0 && !(dirp->dd_flags & __DTF_READALL)) {
- dirp->dd_size = (long)read(dirp->dd_fd, dirp->dd_buf, (size_t)dirp->dd_len);
- if (dirp->dd_size <= 0)
- return (NULL);
- }
- dp = (struct dirent *) (void *)(dirp->dd_buf + (size_t)dirp->dd_loc);
- if ((intptr_t)dp & _DIRENT_ALIGN(dp))/* bogus pointer check */
- return (NULL);
- dirp->dd_loc += (long)dp->Size;
- if ((dp->Attribute & DT_HIDDEN) && (dirp->dd_flags & DTF_HIDEW))
- continue;
- return (dp);
- }
-}
-
-struct dirent *
-readdir(DIR *dirp)
-{
- struct dirent *dp;
-
-#ifdef _REENTRANT
- if (__isthreaded) {
- mutex_lock((mutex_t *)dirp->dd_lock);
- dp = _readdir_unlocked(dirp, 1);
- mutex_unlock((mutex_t *)dirp->dd_lock);
- }
- else
-#endif
- dp = _readdir_unlocked(dirp, 1);
- return (dp);
-}
-
-int
-readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result)
-{
- struct dirent *dp;
- int saved_errno;
-
- saved_errno = errno;
- errno = 0;
-#ifdef _REENTRANT
- if (__isthreaded) {
- mutex_lock((mutex_t *)dirp->dd_lock);
- if ((dp = _readdir_unlocked(dirp, 1)) != NULL)
- memcpy(entry, dp, (size_t)_DIRENT_SIZE(dp));
- mutex_unlock((mutex_t *)dirp->dd_lock);
- }
- else
-#endif
- if ((dp = _readdir_unlocked(dirp, 1)) != NULL)
- memcpy(entry, dp, (size_t)_DIRENT_SIZE(dp));
-
- if (errno != 0) {
- if (dp == NULL)
- return (errno);
- } else
- errno = saved_errno;
-
- if (dp != NULL)
- *result = entry;
- else
- *result = NULL;
-
- return (0);
-}
diff --git a/StdLib/PosixLib/Gen/utime.c b/StdLib/PosixLib/Gen/utime.c
deleted file mode 100644
index 9cb8b5b50b..0000000000
--- a/StdLib/PosixLib/Gen/utime.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/** @file
- Set file access and modification times.
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- NetBSD: utime.c,v 1.12 2003/08/07 16:42:59 agc Exp
- utime.c 8.1 (Berkeley) 6/4/93
- */
-#include <LibConfig.h>
-#include <sys/EfiCdefs.h>
-
-#include "namespace.h"
-#include <sys/time.h>
-
-#include <assert.h>
-#include <errno.h>
-#include <stddef.h>
-#include <utime.h>
-
-int
-utime(
- const char *path,
- const struct utimbuf *times
- )
-{
- struct timeval tv[2], *tvp;
-
- _DIAGASSERT(path != NULL);
-
- if (times == (struct utimbuf *) NULL)
- tvp = NULL;
- else {
- tv[0].tv_sec = times->actime;
- tv[1].tv_sec = times->modtime;
- tv[0].tv_usec = tv[1].tv_usec = 0;
- tvp = tv;
- }
- return (utimes(path, tvp));
-}
diff --git a/StdLib/PosixLib/GetPass/GetPass.c b/StdLib/PosixLib/GetPass/GetPass.c
deleted file mode 100644
index 46511e39a2..0000000000
--- a/StdLib/PosixLib/GetPass/GetPass.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/** @file
- Implement the getpass function.
-
- Copyright (c) 2011 - 2014, Intel Corporation <BR>
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-
-#include <Library/ShellLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/UefiLib.h>
-#include <Library/PcdLib.h>
-
-static CHAR8 *ReturnStringAscii = NULL;
-
-char *getpass(const char *Prompt)
-{
- BOOLEAN Ascii;
- CHAR16 *ReturnString;
-
- Ascii = FALSE;
-
- Print(L"%a", Prompt);
-
- ReturnString = ShellFileHandleReturnLine (gEfiShellParametersProtocol->StdIn, &Ascii);
- if (ReturnString == NULL) {
- return (NULL);
- }
-
- ReturnStringAscii = AllocateZeroPool((StrLen(ReturnString)+1)*sizeof(CHAR8));
- if (ReturnStringAscii == NULL) {
- return (NULL);
- }
-
- UnicodeStrToAsciiStr(ReturnString, ReturnStringAscii);
-
- FreePool(ReturnString);
-
- return (ReturnStringAscii);
-}
-
-EFI_STATUS
-EFIAPI
-DestructMePlease (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- SHELL_FREE_NON_NULL(ReturnStringAscii);
-
- return EFI_SUCCESS;
-}
diff --git a/StdLib/PosixLib/Glob/LibGlob.inf b/StdLib/PosixLib/Glob/LibGlob.inf
deleted file mode 100644
index 10052bb9a1..0000000000
--- a/StdLib/PosixLib/Glob/LibGlob.inf
+++ /dev/null
@@ -1,45 +0,0 @@
-## @file
-# Library used for supplying glob POSIX routines.
-#
-# Copyright (c) 2011, Intel Corporation. All rights reserved. <BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010006
- BASE_NAME = LibGlob
- FILE_GUID = 1D57B5D5-BAB4-4d2b-B7EB-0EB41D7B189C
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibGlob|UEFI_APPLICATION UEFI_DRIVER
-
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources.common]
- glob.c
-
-[Packages]
- MdePkg/MdePkg.dec
- ShellPkg/ShellPkg.dec
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
-
-[LibraryClasses]
- MemoryAllocationLib
- ShellLib
- BaseLib
- LibC
- LibStdio
- LibStdLib
- LibString
diff --git a/StdLib/PosixLib/Glob/glob.c b/StdLib/PosixLib/Glob/glob.c
deleted file mode 100644
index e7556c226a..0000000000
--- a/StdLib/PosixLib/Glob/glob.c
+++ /dev/null
@@ -1,1043 +0,0 @@
-/** @file
- * glob(3) -- a superset of the one defined in POSIX 1003.2.
- *
- * The [!...] convention to negate a range is supported (SysV, Posix, ksh).
- *
- * Optional extra services, controlled by flags not defined by POSIX:
- *
- * GLOB_MAGCHAR:
- * Set in gl_flags if pattern contained a globbing character.
- * GLOB_NOMAGIC:
- * Same as GLOB_NOCHECK, but it will only append pattern if it did
- * not contain any magic characters. [Used in csh style globbing]
- * GLOB_ALTDIRFUNC:
- * Use alternately specified directory access functions.
- * GLOB_TILDE:
- * expand ~user/foo to the /home/dir/of/user/foo
- * GLOB_BRACE:
- * expand {1,2}{a,b} to 1a 1b 2a 2b
- * GLOB_PERIOD:
- * allow metacharacters to match leading dots in filenames.
- * GLOB_NO_DOTDIRS:
- * . and .. are hidden from wildcards, even if GLOB_PERIOD is set.
- * gl_matchc:
- * Number of matches in the current invocation of glob.
- *
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Guido van Rossum.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
-
- glob.c 8.3 (Berkeley) 10/13/93
- NetBSD: glob.c,v 1.23.4.1 2010/07/19 18:14:08 riz Exp
- */
-#if defined(_MSC_VER)
- #pragma warning ( disable : 4244 )
- #pragma warning ( disable : 4018 )
-#endif
-
-#include <LibConfig.h>
-
-#include <sys/cdefs.h>
-
-#include <sys/param.h>
-#include <sys/stat.h>
-
-#include <assert.h>
-#include <ctype.h>
-#include <dirent.h>
-#include <errno.h>
-#include <glob.h>
-//#include <pwd.h>
-#include <stdio.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/fcntl.h>
-
-#ifdef HAVE_NBTOOL_CONFIG_H
-#define NO_GETPW_R
-#endif
-
-#define GLOB_LIMIT_MALLOC 65536
-#define GLOB_LIMIT_STAT 128
-#define GLOB_LIMIT_READDIR 16384
-
-#define GLOB_INDEX_MALLOC 0
-#define GLOB_INDEX_STAT 1
-#define GLOB_INDEX_READDIR 2
-
-/*
- * XXX: For NetBSD 1.4.x compatibility. (kill me l8r)
- */
-#ifndef _DIAGASSERT
-#define _DIAGASSERT(a)
-#endif
-
-#define DOLLAR '$'
-#define DOT '.'
-#define EOS '\0'
-#define LBRACKET '['
-#define NOT '!'
-#define QUESTION '?'
-#define QUOTE '\\'
-#define RANGE '-'
-#define RBRACKET ']'
-#define SEP '/'
-#define STAR '*'
-#define TILDE '~'
-#define UNDERSCORE '_'
-#define LBRACE '{'
-#define RBRACE '}'
-#define SLASH '/'
-#define COMMA ','
-
-#ifndef USE_8BIT_CHARS
-
-#define M_QUOTE 0x8000
-#define M_PROTECT 0x4000
-#define M_MASK 0xffff
-#define M_ASCII 0x00ff
-
-typedef u_short Char;
-
-#else
-
-#define M_QUOTE (Char)0x80
-#define M_PROTECT (Char)0x40
-#define M_MASK (Char)0xff
-#define M_ASCII (Char)0x7f
-
-typedef char Char;
-
-#endif
-
-
-#define CHAR(c) ((Char)((c)&M_ASCII))
-#define META(c) ((Char)((c)|M_QUOTE))
-#define M_ALL META('*')
-#define M_END META(']')
-#define M_NOT META('!')
-#define M_ONE META('?')
-#define M_RNG META('-')
-#define M_SET META('[')
-#define ismeta(c) (((c)&M_QUOTE) != 0)
-
-static int compare(const void *, const void *);
-static int g_Ctoc(const Char *, char *, size_t);
-static int g_lstat(Char *, __gl_stat_t *, glob_t *);
-static DIR *g_opendir(Char *, glob_t *);
-static Char *g_strchr(const Char *, int);
-static int g_stat(Char *, __gl_stat_t *, glob_t *);
-static int glob0(const Char *, glob_t *, size_t *);
-static int glob1(Char *, glob_t *, size_t *);
-static int glob2(Char *, Char *, Char *, Char *, glob_t *, size_t *);
-static int glob3(Char *, Char *, Char *, Char *, Char *, glob_t *, size_t *);
-static int globextend(const Char *, glob_t *, size_t *);
-static const Char *globtilde(const Char *, Char *, size_t, glob_t *);
-static int globexp1(const Char *, glob_t *, size_t *);
-static int globexp2(const Char *, const Char *, glob_t *, int *, size_t *);
-static int match(Char *, Char *, Char *);
-#ifdef DEBUG
-static void qprintf(const char *, Char *);
-#endif
-
-int
-glob(
- const char *pattern,
- int flags,
- int (*errfunc)(const char *, int),
- glob_t *pglob
-)
-{
- const u_char *patnext;
- int c;
- Char *bufnext, *bufend, patbuf[MAXPATHLEN+1];
- /* 0 = malloc(), 1 = stat(), 2 = readdir() */
- size_t limit[] = { 0, 0, 0 };
-
- _DIAGASSERT(pattern != NULL);
-
- patnext = (const u_char *) pattern;
- if (!(flags & GLOB_APPEND)) {
- pglob->gl_pathc = 0;
- pglob->gl_pathv = NULL;
- if (!(flags & GLOB_DOOFFS))
- pglob->gl_offs = 0;
- }
- pglob->gl_flags = flags & ~GLOB_MAGCHAR;
- pglob->gl_errfunc = errfunc;
- pglob->gl_matchc = 0;
-
- bufnext = patbuf;
- bufend = bufnext + MAXPATHLEN;
- if (flags & GLOB_NOESCAPE) {
- while (bufnext < bufend && (c = *patnext++) != EOS)
- *bufnext++ = c;
- } else {
- /* Protect the quoted characters. */
- while (bufnext < bufend && (c = *patnext++) != EOS)
- if (c == QUOTE) {
- if ((c = *patnext++) == EOS) {
- c = QUOTE;
- --patnext;
- }
- *bufnext++ = c | M_PROTECT;
- }
- else
- *bufnext++ = c;
- }
- *bufnext = EOS;
-
- if (flags & GLOB_BRACE)
- return globexp1(patbuf, pglob, limit);
- else
- return glob0(patbuf, pglob, limit);
-}
-
-/*
- * Expand recursively a glob {} pattern. When there is no more expansion
- * invoke the standard globbing routine to glob the rest of the magic
- * characters
- */
-static int
-globexp1(const Char *pattern, glob_t *pglob, size_t *limit)
-{
- const Char* ptr = pattern;
- int rv;
-
- _DIAGASSERT(pattern != NULL);
- _DIAGASSERT(pglob != NULL);
-
- /* Protect a single {}, for find(1), like csh */
- if (pattern[0] == LBRACE && pattern[1] == RBRACE && pattern[2] == EOS)
- return glob0(pattern, pglob, limit);
-
- while ((ptr = (const Char *) g_strchr(ptr, LBRACE)) != NULL)
- if (!globexp2(ptr, pattern, pglob, &rv, limit))
- return rv;
-
- return glob0(pattern, pglob, limit);
-}
-
-
-/*
- * Recursive brace globbing helper. Tries to expand a single brace.
- * If it succeeds then it invokes globexp1 with the new pattern.
- * If it fails then it tries to glob the rest of the pattern and returns.
- */
-static int
-globexp2(const Char *ptr, const Char *pattern, glob_t *pglob, int *rv,
- size_t *limit)
-{
- int i;
- Char *lm, *ls;
- const Char *pe, *pm, *pl;
- Char patbuf[MAXPATHLEN + 1];
-
- _DIAGASSERT(ptr != NULL);
- _DIAGASSERT(pattern != NULL);
- _DIAGASSERT(pglob != NULL);
- _DIAGASSERT(rv != NULL);
-
- /* copy part up to the brace */
- for (lm = patbuf, pm = pattern; pm != ptr; *lm++ = *pm++)
- continue;
- ls = lm;
-
- /* Find the balanced brace */
- for (i = 0, pe = ++ptr; *pe; pe++)
- if (*pe == LBRACKET) {
- /* Ignore everything between [] */
- for (pm = pe++; *pe != RBRACKET && *pe != EOS; pe++)
- continue;
- if (*pe == EOS) {
- /*
- * We could not find a matching RBRACKET.
- * Ignore and just look for RBRACE
- */
- pe = pm;
- }
- }
- else if (*pe == LBRACE)
- i++;
- else if (*pe == RBRACE) {
- if (i == 0)
- break;
- i--;
- }
-
- /* Non matching braces; just glob the pattern */
- if (i != 0 || *pe == EOS) {
- /*
- * we use `pattern', not `patbuf' here so that that
- * unbalanced braces are passed to the match
- */
- *rv = glob0(pattern, pglob, limit);
- return 0;
- }
-
- for (i = 0, pl = pm = ptr; pm <= pe; pm++) {
- switch (*pm) {
- case LBRACKET:
- /* Ignore everything between [] */
- for (pl = pm++; *pm != RBRACKET && *pm != EOS; pm++)
- continue;
- if (*pm == EOS) {
- /*
- * We could not find a matching RBRACKET.
- * Ignore and just look for RBRACE
- */
- pm = pl;
- }
- break;
-
- case LBRACE:
- i++;
- break;
-
- case RBRACE:
- if (i) {
- i--;
- break;
- }
- /* FALLTHROUGH */
- case COMMA:
- if (i && *pm == COMMA)
- break;
- else {
- /* Append the current string */
- for (lm = ls; (pl < pm); *lm++ = *pl++)
- continue;
- /*
- * Append the rest of the pattern after the
- * closing brace
- */
- for (pl = pe + 1; (*lm++ = *pl++) != EOS;)
- continue;
-
- /* Expand the current pattern */
-#ifdef DEBUG
- qprintf("globexp2:", patbuf);
-#endif
- *rv = globexp1(patbuf, pglob, limit);
-
- /* move after the comma, to the next string */
- pl = pm + 1;
- }
- break;
-
- default:
- break;
- }
- }
- *rv = 0;
- return 0;
-}
-
-
-
-/*
- * expand tilde from the passwd file.
- */
-static const Char *
-globtilde(const Char *pattern, Char *patbuf, size_t patsize, glob_t *pglob)
-{
- const char *h;
- const Char *p;
- Char *b;
- char *d;
- Char *pend = &patbuf[patsize / sizeof(Char)];
-
- pend--;
-
- _DIAGASSERT(pattern != NULL);
- _DIAGASSERT(patbuf != NULL);
- _DIAGASSERT(pglob != NULL);
-
- if (*pattern != TILDE || !(pglob->gl_flags & GLOB_TILDE))
- return pattern;
-
- /* Copy up to the end of the string or / */
- for (p = pattern + 1, d = (char *)(void *)patbuf;
- d < (char *)(void *)pend && *p && *p != SLASH;
- *d++ = *p++)
- continue;
-
- if (d == (char *)(void *)pend)
- return NULL;
-
- *d = EOS;
- d = (char *)(void *)patbuf;
-
- if (*d == EOS) {
- /*
- * handle a plain ~ or ~/ by expanding $HOME
- * first and then trying the password file
- */
- if ((h = getenv("HOME")) == NULL) {
- return pattern;
- }
- }
- else {
- /*
- * Expand a ~user
- */
- return pattern;
- }
-
- /* Copy the home directory */
- for (b = patbuf; b < pend && *h; *b++ = *h++)
- continue;
-
- if (b == pend)
- return NULL;
-
- /* Append the rest of the pattern */
- while (b < pend && (*b++ = *p++) != EOS)
- continue;
-
- if (b == pend)
- return NULL;
-
- return patbuf;
-}
-
-
-/*
- * The main glob() routine: compiles the pattern (optionally processing
- * quotes), calls glob1() to do the real pattern matching, and finally
- * sorts the list (unless unsorted operation is requested). Returns 0
- * if things went well, nonzero if errors occurred. It is not an error
- * to find no matches.
- */
-static int
-glob0(const Char *pattern, glob_t *pglob, size_t *limit)
-{
- const Char *qpatnext;
- int c, error;
- __gl_size_t oldpathc;
- Char *bufnext, patbuf[MAXPATHLEN+1];
-
- _DIAGASSERT(pattern != NULL);
- _DIAGASSERT(pglob != NULL);
-
- if ((qpatnext = globtilde(pattern, patbuf, sizeof(patbuf),
- pglob)) == NULL)
- return GLOB_ABEND;
- oldpathc = pglob->gl_pathc;
- bufnext = patbuf;
-
- /* We don't need to check for buffer overflow any more. */
- while ((c = *qpatnext++) != EOS) {
- switch (c) {
- case LBRACKET:
- c = *qpatnext;
- if (c == NOT)
- ++qpatnext;
- if (*qpatnext == EOS ||
- g_strchr(qpatnext+1, RBRACKET) == NULL) {
- *bufnext++ = LBRACKET;
- if (c == NOT)
- --qpatnext;
- break;
- }
- *bufnext++ = M_SET;
- if (c == NOT)
- *bufnext++ = M_NOT;
- c = *qpatnext++;
- do {
- *bufnext++ = CHAR(c);
- if (*qpatnext == RANGE &&
- (c = qpatnext[1]) != RBRACKET) {
- *bufnext++ = M_RNG;
- *bufnext++ = CHAR(c);
- qpatnext += 2;
- }
- } while ((c = *qpatnext++) != RBRACKET);
- pglob->gl_flags |= GLOB_MAGCHAR;
- *bufnext++ = M_END;
- break;
- case QUESTION:
- pglob->gl_flags |= GLOB_MAGCHAR;
- *bufnext++ = M_ONE;
- break;
- case STAR:
- pglob->gl_flags |= GLOB_MAGCHAR;
- /* collapse adjacent stars to one,
- * to avoid exponential behavior
- */
- if (bufnext == patbuf || bufnext[-1] != M_ALL)
- *bufnext++ = M_ALL;
- break;
- default:
- *bufnext++ = CHAR(c);
- break;
- }
- }
- *bufnext = EOS;
-#ifdef DEBUG
- qprintf("glob0:", patbuf);
-#endif
-
- if ((error = glob1(patbuf, pglob, limit)) != 0)
- return error;
-
- if (pglob->gl_pathc == oldpathc) {
- /*
- * If there was no match we are going to append the pattern
- * if GLOB_NOCHECK was specified or if GLOB_NOMAGIC was
- * specified and the pattern did not contain any magic
- * characters GLOB_NOMAGIC is there just for compatibility
- * with csh.
- */
- if ((pglob->gl_flags & GLOB_NOCHECK) ||
- ((pglob->gl_flags & (GLOB_NOMAGIC|GLOB_MAGCHAR))
- == GLOB_NOMAGIC)) {
- return globextend(pattern, pglob, limit);
- } else {
- return GLOB_NOMATCH;
- }
- } else if (!(pglob->gl_flags & GLOB_NOSORT)) {
- qsort(pglob->gl_pathv + pglob->gl_offs + oldpathc,
- (size_t)pglob->gl_pathc - oldpathc, sizeof(char *),
- compare);
- }
-
- return 0;
-}
-
-static int
-compare(const void *p, const void *q)
-{
-
- _DIAGASSERT(p != NULL);
- _DIAGASSERT(q != NULL);
-
- return strcoll(*(const char * const *)p, *(const char * const *)q);
-}
-
-static int
-glob1(Char *pattern, glob_t *pglob, size_t *limit)
-{
- Char pathbuf[MAXPATHLEN+1];
-
- _DIAGASSERT(pattern != NULL);
- _DIAGASSERT(pglob != NULL);
-
- /* A null pathname is invalid -- POSIX 1003.1 sect. 2.4. */
- if (*pattern == EOS)
- return 0;
- /*
- * we save one character so that we can use ptr >= limit,
- * in the general case when we are appending non nul chars only.
- */
- return glob2(pathbuf, pathbuf,
- pathbuf + (sizeof(pathbuf) / sizeof(*pathbuf)) - 1, pattern,
- pglob, limit);
-}
-
-/*
- * The functions glob2 and glob3 are mutually recursive; there is one level
- * of recursion for each segment in the pattern that contains one or more
- * meta characters.
- */
-static int
-glob2(Char *pathbuf, Char *pathend, Char *pathlim, Char *pattern, glob_t *pglob,
- size_t *limit)
-{
- __gl_stat_t sb;
- Char *p, *q;
- int anymeta;
- Char *pend;
- ptrdiff_t diff;
-
- _DIAGASSERT(pathbuf != NULL);
- _DIAGASSERT(pathend != NULL);
- _DIAGASSERT(pattern != NULL);
- _DIAGASSERT(pglob != NULL);
-
- /*
- * Loop over pattern segments until end of pattern or until
- * segment with meta character found.
- */
- for (anymeta = 0;;) {
- if (*pattern == EOS) { /* End of pattern? */
- *pathend = EOS;
- if (g_lstat(pathbuf, &sb, pglob))
- return 0;
-
- if ((pglob->gl_flags & GLOB_LIMIT) &&
- limit[GLOB_INDEX_STAT]++ >= GLOB_LIMIT_STAT) {
- errno = 0;
- *pathend++ = SEP;
- *pathend = EOS;
- return GLOB_NOSPACE;
- }
- if (((pglob->gl_flags & GLOB_MARK) &&
- pathend[-1] != SEP) && (S_ISDIR(sb.st_mode) ||
-// (S_ISLNK(sb.st_mode) &&
- (0 &&
- (g_stat(pathbuf, &sb, pglob) == 0) &&
- S_ISDIR(sb.st_mode)))) {
- if (pathend >= pathlim)
- return GLOB_ABORTED;
- *pathend++ = SEP;
- *pathend = EOS;
- }
- ++pglob->gl_matchc;
- return globextend(pathbuf, pglob, limit);
- }
-
- /* Find end of next segment, copy tentatively to pathend. */
- q = pathend;
- p = pattern;
- while (*p != EOS && *p != SEP) {
- if (ismeta(*p))
- anymeta = 1;
- if (q >= pathlim)
- return GLOB_ABORTED;
- *q++ = *p++;
- }
-
- /*
- * No expansion, or path ends in slash-dot shash-dot-dot,
- * do next segment.
- */
- if (pglob->gl_flags & GLOB_PERIOD) {
- for (pend = pathend; pend > pathbuf && pend[-1] == '/';
- pend--)
- continue;
- diff = pend - pathbuf;
- } else {
- /* XXX: GCC */
- diff = 0;
- pend = pathend;
- }
-
- if ((!anymeta) ||
- ((pglob->gl_flags & GLOB_PERIOD) &&
- (diff >= 1 && pend[-1] == DOT) &&
- (diff >= 2 && (pend[-2] == SLASH || pend[-2] == DOT)) &&
- (diff < 3 || pend[-3] == SLASH))) {
- pathend = q;
- pattern = p;
- while (*pattern == SEP) {
- if (pathend >= pathlim)
- return GLOB_ABORTED;
- *pathend++ = *pattern++;
- }
- } else /* Need expansion, recurse. */
- return glob3(pathbuf, pathend, pathlim, pattern, p,
- pglob, limit);
- }
- /* NOTREACHED */
-}
-
-static int
-glob3(Char *pathbuf, Char *pathend, Char *pathlim, Char *pattern,
- Char *restpattern, glob_t *pglob, size_t *limit)
-{
- struct dirent *dp;
- DIR *dirp;
- int error;
- char buf[MAXPATHLEN];
-
- /*
- * The readdirfunc declaration can't be prototyped, because it is
- * assigned, below, to two functions which are prototyped in glob.h
- * and dirent.h as taking pointers to differently typed opaque
- * structures.
- */
- struct dirent *(*readdirfunc)(void *);
-
- _DIAGASSERT(pathbuf != NULL);
- _DIAGASSERT(pathend != NULL);
- _DIAGASSERT(pattern != NULL);
- _DIAGASSERT(restpattern != NULL);
- _DIAGASSERT(pglob != NULL);
-
- *pathend = EOS;
- errno = 0;
-
- if ((dirp = g_opendir(pathbuf, pglob)) == NULL) {
- if (pglob->gl_errfunc) {
- if (g_Ctoc(pathbuf, buf, sizeof(buf)))
- return GLOB_ABORTED;
- if (pglob->gl_errfunc(buf, errno) ||
- pglob->gl_flags & GLOB_ERR)
- return GLOB_ABORTED;
- }
- /*
- * Posix/XOpen: glob should return when it encounters a
- * directory that it cannot open or read
- * XXX: Should we ignore ENOTDIR and ENOENT though?
- * I think that Posix had in mind EPERM...
- */
- if (pglob->gl_flags & GLOB_ERR)
- return GLOB_ABORTED;
-
- return 0;
- }
-
- error = 0;
-
- /* Search directory for matching names. */
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- readdirfunc = pglob->gl_readdir;
- else
- readdirfunc = (struct dirent *(*)(void *)) readdir;
- while ((dp = (*readdirfunc)(dirp)) != NULL) {
- u_char *sc;
- Char *dc;
-
- if ((pglob->gl_flags & GLOB_LIMIT) &&
- limit[GLOB_INDEX_READDIR]++ >= GLOB_LIMIT_READDIR) {
- errno = 0;
- *pathend++ = SEP;
- *pathend = EOS;
- return GLOB_NOSPACE;
- }
-
- /*
- * Initial DOT must be matched literally, unless we have
- * GLOB_PERIOD set.
- */
- if ((pglob->gl_flags & GLOB_PERIOD) == 0)
- if (dp->FileName[0] == DOT && *pattern != DOT)
- continue;
- /*
- * If GLOB_NO_DOTDIRS is set, . and .. vanish.
- */
- if ((pglob->gl_flags & GLOB_NO_DOTDIRS) &&
- (dp->FileName[0] == DOT) &&
- ((dp->FileName[1] == EOS) ||
- ((dp->FileName[1] == DOT) && (dp->FileName[2] == EOS))))
- continue;
- /*
- * The resulting string contains EOS, so we can
- * use the pathlim character, if it is the nul
- */
- for (sc = (u_char *) dp->FileName, dc = pathend;
- dc <= pathlim && (*dc++ = *sc++) != EOS;)
- continue;
-
- /*
- * Have we filled the buffer without seeing EOS?
- */
- if (dc > pathlim && *pathlim != EOS) {
- /*
- * Abort when requested by caller, otherwise
- * reset pathend back to last SEP and continue
- * with next dir entry.
- */
- if (pglob->gl_flags & GLOB_ERR) {
- error = GLOB_ABORTED;
- break;
- }
- else {
- *pathend = EOS;
- continue;
- }
- }
-
- if (!match(pathend, pattern, restpattern)) {
- *pathend = EOS;
- continue;
- }
- error = glob2(pathbuf, --dc, pathlim, restpattern, pglob,
- limit);
- if (error)
- break;
- }
-
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- (*pglob->gl_closedir)(dirp);
- else
- closedir(dirp);
-
- /*
- * Again Posix X/Open issue with regards to error handling.
- */
- if ((error || errno) && (pglob->gl_flags & GLOB_ERR))
- return GLOB_ABORTED;
-
- return error;
-}
-
-
-/*
- * Extend the gl_pathv member of a glob_t structure to accommodate a new item,
- * add the new item, and update gl_pathc.
- *
- * This assumes the BSD realloc, which only copies the block when its size
- * crosses a power-of-two boundary; for v7 realloc, this would cause quadratic
- * behavior.
- *
- * Return 0 if new item added, error code if memory couldn't be allocated.
- *
- * Invariant of the glob_t structure:
- * Either gl_pathc is zero and gl_pathv is NULL; or gl_pathc > 0 and
- * gl_pathv points to (gl_offs + gl_pathc + 1) items.
- */
-static int
-globextend(const Char *path, glob_t *pglob, size_t *limit)
-{
- char **pathv;
- size_t i, newsize, len;
- char *copy;
- const Char *p;
-
- _DIAGASSERT(path != NULL);
- _DIAGASSERT(pglob != NULL);
-
- newsize = sizeof(*pathv) * (2 + pglob->gl_pathc + pglob->gl_offs);
- pathv = pglob->gl_pathv ? realloc(pglob->gl_pathv, newsize) :
- malloc(newsize);
- if (pathv == NULL)
- return GLOB_NOSPACE;
-
- if (pglob->gl_pathv == NULL && pglob->gl_offs > 0) {
- /* first time around -- clear initial gl_offs items */
- pathv += pglob->gl_offs;
- for (i = pglob->gl_offs + 1; --i > 0; )
- *--pathv = NULL;
- }
- pglob->gl_pathv = pathv;
-
- for (p = path; *p++;)
- continue;
- len = (size_t)(p - path);
- limit[GLOB_INDEX_MALLOC] += len;
- if ((copy = malloc(len)) != NULL) {
- if (g_Ctoc(path, copy, len)) {
- free(copy);
- return GLOB_ABORTED;
- }
- pathv[pglob->gl_offs + pglob->gl_pathc++] = copy;
- }
- pathv[pglob->gl_offs + pglob->gl_pathc] = NULL;
-
- if ((pglob->gl_flags & GLOB_LIMIT) &&
- (newsize + limit[GLOB_INDEX_MALLOC]) >= GLOB_LIMIT_MALLOC) {
- errno = 0;
- return GLOB_NOSPACE;
- }
-
- return copy == NULL ? GLOB_NOSPACE : 0;
-}
-
-
-/*
- * pattern matching function for filenames. Each occurrence of the *
- * pattern causes a recursion level.
- */
-static int
-match(Char *name, Char *pat, Char *patend)
-{
- int ok, negate_range;
- Char c, k;
-
- _DIAGASSERT(name != NULL);
- _DIAGASSERT(pat != NULL);
- _DIAGASSERT(patend != NULL);
-
- while (pat < patend) {
- c = *pat++;
- switch (c & M_MASK) {
- case M_ALL:
- if (pat == patend)
- return 1;
- do
- if (match(name, pat, patend))
- return 1;
- while (*name++ != EOS);
- return 0;
- case M_ONE:
- if (*name++ == EOS)
- return 0;
- break;
- case M_SET:
- ok = 0;
- if ((k = *name++) == EOS)
- return 0;
- if ((negate_range = ((*pat & M_MASK) == M_NOT)) != EOS)
- ++pat;
- while (((c = *pat++) & M_MASK) != M_END)
- if ((*pat & M_MASK) == M_RNG) {
- if (c <= k && k <= pat[1])
- ok = 1;
- pat += 2;
- } else if (c == k)
- ok = 1;
- if (ok == negate_range)
- return 0;
- break;
- default:
- if (*name++ != c)
- return 0;
- break;
- }
- }
- return *name == EOS;
-}
-
-/* Free allocated data belonging to a glob_t structure. */
-void
-globfree(glob_t *pglob)
-{
- size_t i;
- char **pp;
-
- _DIAGASSERT(pglob != NULL);
-
- if (pglob->gl_pathv != NULL) {
- pp = pglob->gl_pathv + pglob->gl_offs;
- for (i = pglob->gl_pathc; i--; ++pp)
- if (*pp)
- free(*pp);
- free(pglob->gl_pathv);
- pglob->gl_pathv = NULL;
- pglob->gl_pathc = 0;
- }
-}
-
-static DIR *
-g_opendir(Char *str, glob_t *pglob)
-{
- char buf[MAXPATHLEN];
-
- _DIAGASSERT(str != NULL);
- _DIAGASSERT(pglob != NULL);
-
- if (!*str)
- (void)strlcpy(buf, ".", sizeof(buf));
- else {
- if (g_Ctoc(str, buf, sizeof(buf)))
- return NULL;
- }
-
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return (*pglob->gl_opendir)(buf);
-
- return opendir(buf);
-}
-
-static int
-g_lstat(Char *fn, __gl_stat_t *sb, glob_t *pglob)
-{
- char buf[MAXPATHLEN];
-
- _DIAGASSERT(fn != NULL);
- _DIAGASSERT(sb != NULL);
- _DIAGASSERT(pglob != NULL);
-
- if (g_Ctoc(fn, buf, sizeof(buf)))
- return -1;
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return (*pglob->gl_lstat)(buf, sb);
- return lstat(buf, sb);
-}
-
-static int
-g_stat(Char *fn, __gl_stat_t *sb, glob_t *pglob)
-{
- char buf[MAXPATHLEN];
-
- _DIAGASSERT(fn != NULL);
- _DIAGASSERT(sb != NULL);
- _DIAGASSERT(pglob != NULL);
-
- if (g_Ctoc(fn, buf, sizeof(buf)))
- return -1;
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return (*pglob->gl_stat)(buf, sb);
- return stat(buf, sb);
-}
-
-static Char *
-g_strchr(const Char *str, int ch)
-{
-
- _DIAGASSERT(str != NULL);
-
- do {
- if (*str == ch)
- return __UNCONST(str);
- } while (*str++);
- return NULL;
-}
-
-static int
-g_Ctoc(const Char *str, char *buf, size_t len)
-{
- char *dc;
-
- _DIAGASSERT(str != NULL);
- _DIAGASSERT(buf != NULL);
-
- if (len == 0)
- return 1;
-
- for (dc = buf; len && (*dc++ = *str++) != EOS; len--)
- continue;
-
- return len == 0;
-}
-
-#ifdef DEBUG
-static void
-qprintf(const char *str, Char *s)
-{
- Char *p;
-
- _DIAGASSERT(str != NULL);
- _DIAGASSERT(s != NULL);
-
- (void)printf("%s:\n", str);
- for (p = s; *p; p++)
- (void)printf("%c", CHAR(*p));
- (void)printf("\n");
- for (p = s; *p; p++)
- (void)printf("%c", *p & M_PROTECT ? '"' : ' ');
- (void)printf("\n");
- for (p = s; *p; p++)
- (void)printf("%c", ismeta(*p) ? '_' : ' ');
- (void)printf("\n");
-}
-#endif
diff --git a/StdLib/PosixLib/PosixLib.inf b/StdLib/PosixLib/PosixLib.inf
deleted file mode 100644
index 44b8054c25..0000000000
--- a/StdLib/PosixLib/PosixLib.inf
+++ /dev/null
@@ -1,59 +0,0 @@
-## @file
-# Library used for supplying some POSIX routines.
-#
-# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved. <BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010006
- BASE_NAME = LibPosix
- FILE_GUID = C516673C-6C71-4F0E-83B5-57FC662376EC
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.05
- LIBRARY_CLASS = LibPosix|UEFI_APPLICATION UEFI_DRIVER
-
-
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources.common]
- Err/warn_err.c
-
- Gen/dirname.c
- Gen/opendir.c
- Gen/closedir.c
- Gen/readdir.c
- Gen/access.c
- Gen/utime.c
-
- Glob/glob.c
-
- Stringlist/stringlist.c
-
- GetPass/GetPass.c
-
-
-[Packages]
- MdePkg/MdePkg.dec
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
- ShellPkg/ShellPkg.dec
-
-[LibraryClasses]
- MemoryAllocationLib
- ShellLib
- BaseLib
- LibC
- LibStdio
- LibStdLib
- LibString
diff --git a/StdLib/PosixLib/Stringlist/LibStringlist.inf b/StdLib/PosixLib/Stringlist/LibStringlist.inf
deleted file mode 100644
index 6c29cdae77..0000000000
--- a/StdLib/PosixLib/Stringlist/LibStringlist.inf
+++ /dev/null
@@ -1,41 +0,0 @@
-## @file
-# Library used for supplying glob POSIX routines.
-#
-# Copyright (c) 2011, Intel Corporation. All rights reserved. <BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010006
- BASE_NAME = LibStringlist
- FILE_GUID = 19D17940-BA8D-4fa7-A704-F33D9FAFAB9D
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LibStringlist|UEFI_APPLICATION UEFI_DRIVER
-
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF EBC
-#
-
-[Sources.common]
- stringlist.c
-
-[Packages]
- MdePkg/MdePkg.dec
- StdLib/StdLib.dec
- StdLibPrivateInternalFiles/DoNotUse.dec
-
-[LibraryClasses]
- LibC
- LibStdio
- LibStdLib
- LibString
diff --git a/StdLib/PosixLib/Stringlist/stringlist.c b/StdLib/PosixLib/Stringlist/stringlist.c
deleted file mode 100644
index 0629f90e87..0000000000
--- a/StdLib/PosixLib/Stringlist/stringlist.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/* $NetBSD: stringlist.c,v 1.13 2008/04/28 20:22:59 martin Exp $
-
- * Copyright (c) 1994, 1999 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Christos Zoulas.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
- #pragma warning ( disable : 4018 )
-#endif
-
-#include <sys/cdefs.h>
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: stringlist.c,v 1.13 2008/04/28 20:22:59 martin Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stringlist.h>
-
-#ifdef __weak_alias
-__weak_alias(sl_add,_sl_add)
-__weak_alias(sl_find,_sl_find)
-__weak_alias(sl_free,_sl_free)
-__weak_alias(sl_init,_sl_init)
-__weak_alias(sl_delete,_sl_delete)
-#endif
-
-#define _SL_CHUNKSIZE 20
-
-/*
- * sl_init(): Initialize a string list
- */
-StringList *
-sl_init(void)
-{
- StringList *sl;
-
- sl = malloc(sizeof(StringList));
- if (sl == NULL)
- return NULL;
-
- sl->sl_cur = 0;
- sl->sl_max = _SL_CHUNKSIZE;
- sl->sl_str = malloc(sl->sl_max * sizeof(char *));
- if (sl->sl_str == NULL) {
- free(sl);
- sl = NULL;
- }
- return sl;
-}
-
-
-/*
- * sl_add(): Add an item to the string list
- */
-int
-sl_add(StringList *sl, char *name)
-{
-
- _DIAGASSERT(sl != NULL);
-
- if (sl->sl_cur == sl->sl_max - 1) {
- char **new;
-
- new = realloc(sl->sl_str,
- (sl->sl_max + _SL_CHUNKSIZE) * sizeof(char *));
- if (new == NULL)
- return -1;
- sl->sl_max += _SL_CHUNKSIZE;
- sl->sl_str = new;
- }
- sl->sl_str[sl->sl_cur++] = name;
- return 0;
-}
-
-
-/*
- * sl_free(): Free a stringlist
- */
-void
-sl_free(StringList *sl, int all)
-{
- size_t i;
-
- if (sl == NULL)
- return;
- if (sl->sl_str) {
- if (all)
- for (i = 0; i < sl->sl_cur; i++)
- free(sl->sl_str[i]);
- free(sl->sl_str);
- }
- free(sl);
-}
-
-
-/*
- * sl_find(): Find a name in the string list
- */
-char *
-sl_find(StringList *sl, const char *name)
-{
- size_t i;
-
- _DIAGASSERT(sl != NULL);
-
- for (i = 0; i < sl->sl_cur; i++)
- if (strcmp(sl->sl_str[i], name) == 0)
- return sl->sl_str[i];
-
- return NULL;
-}
-
-int
-sl_delete(StringList *sl, const char *name, int all)
-{
- size_t i, j;
-
- for (i = 0; i < sl->sl_cur; i++)
- if (strcmp(sl->sl_str[i], name) == 0) {
- if (all)
- free(sl->sl_str[i]);
- for (j = i + 1; j < sl->sl_cur; j++)
- sl->sl_str[j - 1] = sl->sl_str[j];
- sl->sl_str[--sl->sl_cur] = NULL;
- return 0;
- }
- return -1;
-}
-
diff --git a/StdLib/ReadMe.txt b/StdLib/ReadMe.txt
deleted file mode 100644
index 35e3b6a87a..0000000000
--- a/StdLib/ReadMe.txt
+++ /dev/null
@@ -1,502 +0,0 @@
- EADK
- EDK II Standard Libraries and Applications
- ReadMe
- Version 1.02
- 21 Dec. 2012
-
-
-OVERVIEW
-========
-The EADK (uEfi Application Development Kit) provides a set of standards-based
-libraries, along with utility and demonstration applications, intended to
-ease development of UEFI applications based upon the EDK II Open-Source
-distribution.
-
-At this time, applications developed with the EADK are intended to reside
-on, and be loaded from, storage separate from the core firmware. This is
-primarily due to size and environmental requirements.
-
-This release of the EADK should only be used to produce UEFI Applications. Due to the execution
-environment built by the StdLib component, execution as a UEFI driver can cause system stability
-issues.
-
-This document describes the EDK II specific aspects of installing, building,
-and using the Standard C Library component of the EDK II Application
-Development Kit, EADK.
-
-The EADK is comprised of three packages:
- AppPkg, StdLib, and StdLibPrivateInternalFiles.
-
- AppPkg This package contains applications which demonstrate use of the
- Standard C and Sockets Libraries.
- These applications reside in AppPkg/Applications.
-
- Enquire This is a program that determines many properties of the
- C compiler and the target machine that Enquire is run on. The
- only changes required to port this 1990s era Unix program to
- EDK II were the addition of eight pragmas to enquire.c in
- order to disable some Microsoft VC++ specific warnings.
-
- Hello This is a very simple EDK II native application that doesn't use
- any features of the Standard C Library.
-
- Main This application is functionally identical to Hello, except that
- it uses the Standard C Library to provide a main() entry point.
-
- Python A port of the Python-2.7.2 interpreter for UEFI. Building this
- application is disabled by default.
- See the PythonReadMe.txt file, in the Python directory,
- for information on configuring and building Python.
-
- Sockets A collection of applications demonstrating use of the
- EDK II Socket Libraries. These applications include:
-
- * DataSink * DataSource
- * GetAddrInfo * GetHostByAddr
- * GetHostByDns * GetHostByName
- * GetNetByAddr * GetNetByName
- * GetServByName * GetServByPort
- * OobRx * OobTx
- * RawIp4Rx * RawIp4Tx
- * RecvDgram * SetHostName
- * SetSockOpt * TftpServer
- * WebServer
-
- StdLib The StdLib package contains the standard header files as well as
- implementations of other standards-based libraries.
-
- * BsdSocketLib
- Support routines above the sockets layer and C interface for
- the UEFI socket library.
- * Efi
- Template contents for the target system's
- \Efi\StdLib\etc directory.
- * EfiSocketLib
- UEFI socket implementation, may be linked into an
- application or run as a driver.
- * Include
- Standard include files.
- * LibC
- C Standard Library implementation as per
- ISO/IEC 9899:199409 (C95).
- * PosixLib
- Selected functions from the "Single Unix v4" specification.
- * SocketDxe
- UEFI sockets driver, includes EfiSocketLib.
- * UseSocketDxe
- Alternate linkage for applications that get built into the
- firmware. Cause application to use a common instance of the
- sockets driver instead of including all of sockets into the
- application.
-
- StdLibPrivateInternalFiles The contents of this package are for the
- exclusive use of the library implementations in StdLib. Please do
- not use anything from this package in your application or else
- unexpected behavior may occur.
- This package may be removed in a future release.
-
-
-RELEASE NOTES
-=============
- Fixes and Additions
- -------------------
-Beginning with release 1.01, applications built with the StdLib package
-no longer have a dependency on the TimerLib.
-
- Known Issues
- -----------------
-This release of the EADK has some restrictions, as described below.
-
- 1. The target machine must be running firmware which provides the
- UEFI 2.3 HII protocol.
-
- 2. Applications must be launched from within the EFI Shell.
-
- 3. Absolute file paths may optionally be prefixed by a volume specifier
- such as "FS0:". The volume specifier is separated from the remainder
- of the path by a single colon ':'. The volume specifier must be one of
- the Shell's mapped volume names as shown by the "map" command.
-
- 4. Absolute file paths that don't begin with a volume specifier;
- e.g. paths that begin with "/", are relative to the currently selected
- volume. When the EFI Shell first starts, there is NO selected volume.
-
- 5. The tmpfile(), and related, functions require that the current volume
- have a temporary directory as specified in <paths.h>. This directory
- is specified by macro _PATH_TMP as /Efi/StdLib/tmp.
-
-The Standard C Library provided by this package is a "hosted" implementation
-conforming to the ISO/IEC 9899-1990 C Language Standard with Addendum 1. This
-is commonly referred to as the "C 95" specification or ISO/IEC 9899:199409.
-The following instructions assume that you have an existing EDK II or UDK 2010
-source tree that has been configured to build with your tool chain. For
-convenience, it is assumed that your EDK II source tree is located at
-C:\Source\Edk2.
-
-
-EADK INSTALLATION
-=================
-The EADK is integrated within the EDK II source tree and is included with
-current EDK II check-outs. If they are missing from your tree, they may be
-installed by extracting, downloading or copying them to the root of your EDK II
-source tree. The three package directories should be peers to the Conf,
-MdePkg, Nt32Pkg, etc. directories.
-
-There are some boiler-plate declarations and definitions that need to be
-included in your application's INF and DSC build files. These are described
-in the CONFIGURATION section, below.
-
-A subset of the Python 2.7.2 distribution is included as part of AppPkg. If desired,
-the full Python 2.7.2 distribution may be downloaded from python.org and used instead.
-Delete or rename the existing Python-2.7.2 directory then extract the downloaded
-Python-2.7.2.tgz file into the AppPkg\Applications\Python directory. This will produce a
-Python-2.7.2 directory containing the full Python distribution. Python files that had to be
-modified for EDK II are in the AppPkg\Applications\Python\PyMod-2.7.2 directory. These
-files need to be copied into the corresponding directories within the extracted Python-2.7.2
-directory before Python can be built.
-
-
-BUILDING
-========
-It is not necessary to build the libraries separately from the target
-application(s). If the application references the libraries, as described in
-USAGE, below; the required libraries will be built as needed.
-To build the applications included in AppPkg, one would execute the following
-commands within the "Visual Studio Command Prompt" window:
-
- > cd C:\Source\Edk2
- > .\edksetup.bat
- > build -a X64 -p AppPkg\AppPkg.dsc
-
-This will produce the application executables: Enquire.efi, Hello.efi, and
-Main.efi in the C:\Source\Edk2\Build\AppPkg\DEBUG_VS2008\X64 directory; with
-the DEBUG_VS2008 component being replaced with the actual tool chain and build
-type you have selected in Conf\Tools_def.txt. These executables can now be
-loaded onto the target platform and executed.
-
-If you examine the AppPkg.dsc file, you will notice that the StdLib package is
-referenced in order to resolve the library classes comprising the Standard
-C Library. This, plus referencing the StdLib package in your application's
-.inf file is all that is needed to link your application to the standard
-libraries.
-
-Unless explicitly stated as allowed, EADK components should not be added as
-components of a DSC file which builds a platform's core firmware. There are
-incompatibilities in build flags and requirements that will conflict with the
-requirements of the core firmware. EADK components should be built using a
-separate DSC file then, if absolutely necessary, included as binary components
-of other DSC files.
-
-USAGE
-=====
-This implementation of the Standard C Library is comprised of 16 separate
-libraries in addition to the standard header files. Nine of the libraries are
-associated with use of one of the standard headers; thus, if the header is used
-in an application, it must be linked with the associated library. Three
-libraries are used to provide the Console and File-system device abstractions.
-The libraries and associated header files are described in the following table.
-
- Library
- Class Header File(s) Notes
----------- ---------------- -------------------------------------------------
-LibC -- Use Always -- This library is always required.
-LibCtype ctype.h, wctype.h Character classification and mapping
-LibLocale locale.h Localization types, macros, and functions
-LibMath math.h Mathematical functions, types, and macros
-LibStdio stdio.h Standard Input and Output functions, types, and
- macros
-LibStdLib stdlib.h General Utilities for numeric conversion, random
- num., etc.
-LibString string.h String copying, concatenation, comparison,
- & search
-LibSignal signal.h Functions and types for handling run-time
- conditions
-LibTime time.h Time and Date types, macros, and functions
-LibUefi sys/EfiSysCall.h Provides the UEFI system interface and
- "System Calls"
-LibWchar wchar.h Extended multibyte and wide character utilities
-LibNetUtil Network address and number manipulation utilities
-DevConsole Automatically provided File I/O abstractions for
- the UEFI Console device. No need to list this
- library class in your INF file(s).
-DevShell Add if desired File I/O abstractions using UEFI shell
- facilities. Add this to the application's main
- INF file if file-system access needed.
-DevUtility -- Do Not Use -- Utility functions used internally by the Device abstractions
-LibGdtoa -- Do Not Use -- This library is used internally and should not
- need to be explicitly specified by an
- application. It must be defined as one of the
- available library classes in the application's
- DSC file.
-
- Table 1: Standard Libraries
- ============================
-
-The DevConsole and DevShell libraries provide device I/O functionality and are treated
-specially. DevConsole is automatically included so there is no need to reference it in your
-application's DSC or INF files. DevShell must be listed, in your application's INF file in the
-[LibraryClasses] section, if your application does file I/O.
-
-These libraries must be fully described in the [LibraryClasses] section of the
-application package's DSC file. Then, each individual application needs to
-specify which libraries to link to by specifying the Library Class, from the
-above table, in the [LibraryClasses] section of the application's INF file. The
-AppPkg.dsc, StdLib.dsc, and Enquire.inf files provide good examples of this.
-More details are in the CONFIGURATION section, below.
-
-In order to simplify this process, the [LibraryClasses] definitions, and others, are
-specified in the StdLib.inc file. If this file is included in the DSC file, usually at the
-end, then other DSC file changes or additions are unnecessary. This is further described in
-the CONFIGURATION section, below.
-
-Within the source files of the application, use of the Standard headers and
-library functions follow standard C programming practices as formalized by
-ISO/IEC 9899:1990, with Addendum 1, (C 95) C language specification.
-
-
-BUILD CONFIGURATION
-===================
-DSC Files
----------
-
-All EDK II packages which build applications that use the standard libraries
-must include some "boilerplate" text in the package's .dsc file. To make it
-easier, and to reduce cut-and-paste errors, the "boilerplate" text has been
-consolidated into a single file, StdLib/StdLib.inc, which can be included in
-your .dsc file using the !include directive. The provided AppPkg.dsc and
-StdLib.dsc files do this on their last line.
-
-The "boilerplate" text can be included using a !include directive in the
-package's .dsc file. The provided AppPkg.dsc and StdLib.dsc files include
-the following "boilerplate" text:
-
- ##############################################################################
- #
- # Specify whether we are running in an emulation environment, or not.
- # Define EMULATE if we are, else keep the DEFINE commented out.
- #
- # DEFINE EMULATE = 1
-
- ##############################################################################
- #
- # Include Boilerplate text required for building with the Standard Libraries.
- #
- ##############################################################################
- !include StdLib/StdLib.inc
-
- Figure 1: "Boilerplate" Inclusion
- =================================
-
-The EMULATE macro must be defined if one desires to do source-level debugging within one of
-the emulated environments such as NT32Pkg or UnixPkg.
-
-The final boilerplate line, in Figure 1, includes the StdLib.inc file.
-Each section of StdLib/StdLib.inc is described below.
-
-If desired, all of the Socket applications, in AppPkg, can be built by including Sockets.inc:
-
- !include AppPkg/Applications/Sockets/Sockets.inc
-
- Figure 2: Socket Applications "Boilerplate" Inclusion
- =====================================================
-
-
-Descriptions of the Library Classes comprising the Standard Libraries,
-as shown in Figure 3: Library Class Descriptions, are provided.
-
- [LibraryClasses]
- #
- # C Standard Libraries
- #
- LibC|StdLib/LibC/LibC.inf
- LibCType|StdLib/LibC/Ctype/Ctype.inf
- LibLocale|StdLib/LibC/Locale/Locale.inf
- LibMath|StdLib/LibC/Math/Math.inf
- LibSignal|StdLib/LibC/Signal/Signal.inf
- LibStdio|StdLib/LibC/Stdio/Stdio.inf
- LibStdLib|StdLib/LibC/StdLib/StdLib.inf
- LibString|StdLib/LibC/String/String.inf
- LibTime|StdLib/LibC/Time/Time.inf
- LibUefi|StdLib/LibC/Uefi/Uefi.inf
- LibWchar|StdLib/LibC/Wchar/Wchar.inf
-
- # Common Utilities for Networking Libraries
- LibNetUtil|StdLib/LibC/NetUtil/NetUtil.inf
-
- # Additional libraries for POSIX functionality.
- LibErr|StdLib/PosixLib/Err/LibErr.inf
- LibGen|StdLib/PosixLib/Gen/LibGen.inf
- LibGlob|StdLib/PosixLib/Glob/LibGlob.inf
- LibStringlist|StdLib/PosixLib/Stringlist/LibStringlist.inf
-
- # Libraries for device abstractions within the Standard C Library
- # Applications should not directly access any functions defined in these libraries.
- LibGdtoa|StdLib/LibC/gdtoa/gdtoa.inf
- DevConsole|StdLib/LibC/Uefi/Devices/daConsole.inf
- DevShell|StdLib/LibC/Uefi/Devices/daShell.inf
- DevUtility|StdLib/LibC/Uefi/Devices/daUtility.inf
-
- [LibraryClasses.ARM.UEFI_APPLICATION]
- NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
-
- Figure 3: Library Class Descriptions
- ====================================
-
-
-The directives in Figure 4: Package Component Descriptions will create
-instances of the BaseLib and BaseMemoryLib library classes that are built
-with Link-time-Code-Generation disabled. This is necessary when using the
-Microsoft tool chains in order to allow the library's functions to be
-resolved during the second pass of the linker during Link-Time-Code-Generation
-of the application.
-
-A DXE driver version of the Socket library is also built.
-
- [Components]
- # BaseLib and BaseMemoryLib need to be built with the /GL- switch
- # when using the Microsoft tool chains. This is required so that
- # the library functions can be resolved during the second pass of
- # the linker during link-time-code-generation.
- #
- MdePkg/Library/BaseLib/BaseLib.inf {
- <BuildOptions>
- MSFT:*_*_*_CC_FLAGS = /X /Zc:wchar_t /GL-
- }
- MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf {
- <BuildOptions>
- MSFT:*_*_*_CC_FLAGS = /X /Zc:wchar_t /GL-
- }
-
- ##########
- # Socket Layer
- ##########
- StdLib/SocketDxe/SocketDxe.inf
-
- Figure 4: Package Component Descriptions
- ========================================
-
-
-Each compiler assumes, by default, that it will be used with standard libraries
-and headers provided by the compiler vendor. Many of these assumptions are
-incorrect for the UEFI environment. By including a BuildOptions section, as
-shown in Figure 5: Package Build Options, these assumptions can be
-tailored for compatibility with UEFI and the EDK II Standard Libraries.
-
-Note that the set of BuildOptions used is determined by the state of the EMULATE macro.
-
- [BuildOptions]
- !ifndef $(EMULATE)
- # These Build Options are used when building the Standard Libraries to be run
- # on real hardware.
- INTEL:*_*_IA32_CC_FLAGS = /Qfreestanding
- MSFT:*_*_IA32_CC_FLAGS = /X /Zc:wchar_t
- GCC:*_*_IA32_CC_FLAGS = -nostdinc -nostdlib
-
- !else
- # The Build Options, below, are only used when building the Standard Libraries
- # to be run under an emulation environment.
- # They disable optimization which facillitates debugging under the Emulation environment.
- INTEL:*_*_IA32_CC_FLAGS = /Od
- MSFT:*_*_IA32_CC_FLAGS = /Od
- GCC:*_*_IA32_CC_FLAGS = -O0
-
- Figure 5: Package Build Options
- ===============================
-
-
-INF Files
-=========
-The INF files for most modules will not require special directives in order to
-support the Standard Libraries. The two sections which require attention: LibraryClasses
-and BuildOptions, are described below.
-
- [LibraryClasses]
- UefiLib
- LibC
- LibString
- LibStdio
- DevShell
-
- Figure 6: Module Library Classes
- ================================
-
-
-Modules of type UEFI_APPLICATION that perform file I/O must include library
-class DevShell. Including this library class will allow file operations to be
-handled by the UEFI Shell. Without this class, only Console I/O is supported.
-
-
-An application's INF file might need to include a [BuildOptions] section
-specifying additional compiler and linker flags necessary to allow the
-application to be built. Usually, this section is not needed. When building
-code from external sources, though, it may be necessary to disable some
-warnings or enable/disable some compiler features.
-
- [BuildOptions]
- INTEL:*_*_*_CC_FLAGS = /Qdiag-disable:181,186
- MSFT:*_*_*_CC_FLAGS = /Oi- /wd4018 /wd4131
- GCC:*_*_IPF_SYMRENAME_FLAGS = --redefine-syms=Rename.txt
-
- Figure 7: Module Build Options
- ==============================
-
-
-TARGET-SYSTEM INSTALLATION
-==========================
-Applications that use file system features or the Socket library depend upon
-the existence of a specific directory tree structure on the same volume that
-the application was loaded from. This tree structure is described below:
-
- /EFI Root of the UEFI system area.
- |- /Tools Directory containing applications.
- |- /Boot UEFI specified Boot directory.
- |- /StdLib Root of the Standard Libraries sub-tree.
- |- /etc Configuration files used by libraries.
- |- /tmp Temporary files created by tmpfile(), etc.
-
-
-The /Efi/StdLib/etc directory must be manually populated from the StdLib/Efi/etc source
-directory.
-
-IMPLEMENTATION-Specific Features
-================================
-It is very strongly recommended that applications not use the long or
-unsigned long types. The size of these types varies between compilers and is one
-of the less portable aspects of C. Instead, one should use the UEFI defined
-types whenever possible. Use of these types, listed below for reference,
-ensures that the declared objects have unambiguous, explicitly declared, sizes
-and characteristics.
-
- UINT64 INT64 UINT32 INT32 UINT16 CHAR16
- INT16 BOOLEAN UINT8 CHAR8 INT8
- UINTN INTN PHYSICALADDRESS
-
-There are similar types declared in sys/types.h and related files.
-
-The types UINTN and INTN have the native width of the target processor
-architecture. Thus, INTN on IA32 has a width of 32 bits while INTN on X64 and
-IPF has a width of 64 bits.
-
-For maximum portability, data objects intended to hold addresses should be
-declared with type intptr_t or uintptr_t. These types, declared in
-sys/stdint.h, can be used to create objects capable of holding pointers. Note
-that these types will generate different sized objects on different processor
-architectures. If a constant size across all processors and compilers is
-needed, use type PHYSICAL_ADDRESS.
-
-Though not specifically required by the ISO/IEC 9899 standard, this
-implementation of the Standard C Library provides the following system calls
-which are declared in sys/EfiSysCall.h and/or unistd.h.
-
- close creat chmod dup dup2
- fcntl fstat getcwd ioctl isatty
- lseek lstat mkdir open poll
- read rename rmdir stat unlink write
-
-The open function will accept file names of "stdin:", "stdout:", and "stderr:"
-which cause the respective streams specified in the UEFI System Table to be
-opened. Normally, these are associated with the console device. When the
-application is first started, these streams are automatically opened on File
-Descriptors 0, 1, and 2 respectively.
-
- # # #
diff --git a/StdLib/SocketDxe/ComponentName.c b/StdLib/SocketDxe/ComponentName.c
deleted file mode 100644
index ff1f101516..0000000000
--- a/StdLib/SocketDxe/ComponentName.c
+++ /dev/null
@@ -1,182 +0,0 @@
-/** @file
- UEFI Component Name(2) protocol implementation.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "Socket.h"
-
-/**
- EFI Component Name Protocol declaration
-**/
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL mComponentName = {
- GetDriverName,
- GetControllerName,
- "eng"
-};
-
-/**
- EFI Component Name 2 Protocol declaration
-**/
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = {
- (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) GetDriverName,
- (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) GetControllerName,
- "en"
-};
-
-
-/**
- Driver name table declaration
-**/
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE
-mDriverNameTable[] = {
- {"eng;en", L"Socket Layer Driver"},
- {NULL, NULL}
-};
-
-/**
- Retrieves a Unicode string that is the user readable name of the driver.
-
- This function retrieves the user readable name of a driver in the form of a
- Unicode string. If the driver specified by This has a user readable name in
- the language specified by Language, then a pointer to the driver name is
- returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
- by This does not support the language specified by Language,
- then EFI_UNSUPPORTED is returned.
-
- @param [in] pThis A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
- EFI_COMPONENT_NAME_PROTOCOL instance.
- @param [in] pLanguage A pointer to a Null-terminated ASCII string
- array indicating the language. This is the
- language of the driver name that the caller is
- requesting, and it must match one of the
- languages specified in SupportedLanguages. The
- number of languages supported by a driver is up
- to the driver writer. Language is specified
- in RFC 3066 or ISO 639-2 language code format.
- @param [out] ppDriverName A pointer to the Unicode string to return.
- This Unicode string is the name of the
- driver specified by This in the language
- specified by Language.
-
- @retval EFI_SUCCESS The Unicode string for the Driver specified by
- This and the language specified by Language was
- returned in DriverName.
- @retval EFI_INVALID_PARAMETER Language is NULL.
- @retval EFI_INVALID_PARAMETER DriverName is NULL.
- @retval EFI_UNSUPPORTED The driver specified by This does not support
- the language specified by Language.
-
-**/
-EFI_STATUS
-EFIAPI
-GetDriverName (
- IN EFI_COMPONENT_NAME_PROTOCOL * pThis,
- IN CHAR8 * pLanguage,
- OUT CHAR16 ** ppDriverName
- )
-{
- EFI_STATUS Status;
-
- Status = LookupUnicodeString2 (
- pLanguage,
- pThis->SupportedLanguages,
- mDriverNameTable,
- ppDriverName,
- (BOOLEAN)(pThis == &mComponentName)
- );
- return Status;
-}
-
-/**
- Retrieves a Unicode string that is the user readable name of the controller
- that is being managed by a driver.
-
- This function retrieves the user readable name of the controller specified by
- ControllerHandle and ChildHandle in the form of a Unicode string. If the
- driver specified by This has a user readable name in the language specified by
- Language, then a pointer to the controller name is returned in ControllerName,
- and EFI_SUCCESS is returned. If the driver specified by This is not currently
- managing the controller specified by ControllerHandle and ChildHandle,
- then EFI_UNSUPPORTED is returned. If the driver specified by This does not
- support the language specified by Language, then EFI_UNSUPPORTED is returned.
-
- @param [in] pThis A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
- EFI_COMPONENT_NAME_PROTOCOL instance.
- @param [in] ControllerHandle The handle of a controller that the driver
- specified by This is managing. This handle
- specifies the controller whose name is to be
- returned.
- @param [in] ChildHandle The handle of the child controller to retrieve
- the name of. This is an optional parameter that
- may be NULL. It will be NULL for device
- drivers. It will also be NULL for a bus drivers
- that wish to retrieve the name of the bus
- controller. It will not be NULL for a bus
- driver that wishes to retrieve the name of a
- child controller.
- @param [in] pLanguage A pointer to a Null-terminated ASCII string
- array indicating the language. This is the
- language of the driver name that the caller is
- requesting, and it must match one of the
- languages specified in SupportedLanguages. The
- number of languages supported by a driver is up
- to the driver writer. Language is specified in
- RFC 3066 or ISO 639-2 language code format.
- @param [out] ppControllerName A pointer to the Unicode string to return.
- This Unicode string is the name of the
- controller specified by ControllerHandle and
- ChildHandle in the language specified by
- Language from the point of view of the driver
- specified by This.
-
- @retval EFI_SUCCESS The Unicode string for the user readable name in
- the language specified by Language for the
- driver specified by This was returned in
- DriverName.
- @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
- @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
- EFI_HANDLE.
- @retval EFI_INVALID_PARAMETER Language is NULL.
- @retval EFI_INVALID_PARAMETER ControllerName is NULL.
- @retval EFI_UNSUPPORTED The driver specified by This is not currently
- managing the controller specified by
- ControllerHandle and ChildHandle.
- @retval EFI_UNSUPPORTED The driver specified by This does not support
- the language specified by Language.
-
-**/
-EFI_STATUS
-EFIAPI
-GetControllerName (
- IN EFI_COMPONENT_NAME_PROTOCOL * pThis,
- IN EFI_HANDLE ControllerHandle,
- IN OPTIONAL EFI_HANDLE ChildHandle,
- IN CHAR8 * pLanguage,
- OUT CHAR16 ** ppControllerName
- )
-{
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Set the controller name
- //
- *ppControllerName = L"Socket Layer";
- Status = EFI_SUCCESS;
-
- //
- // Return the operation status
- //
- DBG_EXIT_HEX ( Status );
- return Status;
-}
diff --git a/StdLib/SocketDxe/DriverBinding.c b/StdLib/SocketDxe/DriverBinding.c
deleted file mode 100644
index 4d68f37be2..0000000000
--- a/StdLib/SocketDxe/DriverBinding.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/** @file
- Implement the driver binding protocol for the socket layer.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-
- \section NetworkAdapterManagement Network Adapter Management
- Network adapters may come and go over the life if a system running
- UEFI. The SocketDxe driver uses the driver binding API to manage
- the connections to network adapters.
-
- The ::DriverSupported routine selects network adapters that the
- socket layer is not using. This determination by the lack of the
- tag GUID associated with the network protocol in the
- ::cEslSocketBinding array. The selected network adapters are
- passed to the ::DriverStart routine.
-
- The ::DriverStart routine calls the ::EslServiceConnect routine
- to create an ::ESL_SERVICE structure to manage the network adapter
- for the socket layer. EslServiceConnect also installs the tag
- GUID on the network adapter to prevent future calls from
- ::DriverSupported. EslService also calls the network specific
- initialization routine listed in ESL_SOCKET_BINDING::pfnInitialize
- field of the ::cEslSocketBinding entry.
-
- The ::DriverStop routine calls the ::EslServiceDisconnect routine
- to undo the work done by ::DriverStart. The socket layer must break
- the active network connections, then remove the tag GUIDs from the
- controller handle and free ::ESL_SERVICE structure.
-
-**/
-
-#include "Socket.h"
-
-/**
- Verify the controller type
-
- This routine walks the cEslSocketBinding array to determines if
- the controller is a network adapter by supporting any of the
- network protocols required by the sockets layer. If so, the
- routine verifies that the socket layer is not already using the
- support by looking for the tag GUID listed in the corresponding
- array entry. The controller handle is passed to the ::DriverStart
- routine if sockets can use the network adapter.
- See the \ref NetworkAdapterManagement section.
-
- This routine is called by the UEFI driver framework during connect
- processing.
-
- @param [in] pThis Protocol instance pointer.
- @param [in] Controller Handle of device to test.
- @param [in] pRemainingDevicePath Not used.
-
- @retval EFI_SUCCESS This driver supports this device.
- @retval other This driver does not support this device.
-
-**/
-EFI_STATUS
-EFIAPI
-DriverSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL * pThis,
- IN EFI_HANDLE Controller,
- IN EFI_DEVICE_PATH_PROTOCOL * pRemainingDevicePath
- )
-{
- CONST ESL_SOCKET_BINDING * pEnd;
- VOID * pInterface;
- CONST ESL_SOCKET_BINDING * pSocketBinding;
- EFI_STATUS Status;
-
- //
- // Assume the list is empty
- //
- Status = EFI_UNSUPPORTED;
-
- //
- // Walk the list of network connection points
- //
- pSocketBinding = &cEslSocketBinding[0];
- pEnd = &pSocketBinding[ cEslSocketBindingEntries ];
- while ( pEnd > pSocketBinding ) {
- //
- // Determine if the controller supports the network protocol
- //
- Status = gBS->OpenProtocol (
- Controller,
- pSocketBinding->pNetworkBinding,
- &pInterface,
- pThis->DriverBindingHandle,
- Controller,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
- if ( !EFI_ERROR ( Status )) {
- //
- // Determine if the driver is already connected
- //
- Status = gBS->OpenProtocol (
- Controller,
- (EFI_GUID *)pSocketBinding->pTagGuid,
- &pInterface,
- pThis->DriverBindingHandle,
- Controller,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
- if ( !EFI_ERROR ( Status )) {
- Status = EFI_ALREADY_STARTED;
- }
- else {
- if ( EFI_UNSUPPORTED == Status ) {
- //
- // Connect the driver since the tag is not present
- //
- Status = EFI_SUCCESS;
- }
- }
- }
-
- //
- // Set the next network protocol
- //
- pSocketBinding += 1;
- }
-
- //
- // Return the device supported status
- //
- return Status;
-}
-
-
-/**
- Connect to a network adapter
-
- This routine calls ::EslServiceConnect to connect the socket
- layer to the network adapters. See the \ref NetworkAdapterManagement
- section.
-
- This routine is called by the UEFI driver framework during connect
- processing if the controller passes the tests in ::DriverSupported.
-
- @param [in] pThis Protocol instance pointer.
- @param [in] Controller Handle of device to work with.
- @param [in] pRemainingDevicePath Not used, always produce all possible children.
-
- @retval EFI_SUCCESS This driver is added to Controller.
- @retval other This driver does not support this device.
-
-**/
-EFI_STATUS
-EFIAPI
-DriverStart (
- IN EFI_DRIVER_BINDING_PROTOCOL * pThis,
- IN EFI_HANDLE Controller,
- IN EFI_DEVICE_PATH_PROTOCOL * pRemainingDevicePath
- )
-{
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Connect to this network adapter
- //
- Status = EslServiceConnect ( pThis->DriverBindingHandle,
- Controller );
-
- //
- // Display the driver start status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Disconnect from a network adapter
-
- This routine calls ::EslServiceDisconnect to disconnect the socket
- layer from the network adapters. See the \ref NetworkAdapterManagement
- section.
-
- This routine is called by ::DriverUnload when the socket layer
- is being unloaded. This routine should also called by the UEFI
- driver framework when a network adapter is being unloaded from
- the system.
-
- @param [in] pThis Protocol instance pointer.
- @param [in] Controller Handle of device to stop driver on.
- @param [in] NumberOfChildren How many children need to be stopped.
- @param [in] pChildHandleBuffer Not used.
-
- @retval EFI_SUCCESS This driver is removed Controller.
- @retval EFI_DEVICE_ERROR The device could not be stopped due to a device error.
- @retval other This driver was not removed from this device.
-
-**/
-EFI_STATUS
-EFIAPI
-DriverStop (
- IN EFI_DRIVER_BINDING_PROTOCOL * pThis,
- IN EFI_HANDLE Controller,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE * pChildHandleBuffer
- )
-{
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Disconnect the network adapters
- //
- Status = EslServiceDisconnect ( pThis->DriverBindingHandle,
- Controller );
-
- //
- // Display the driver start status
- //
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Driver binding protocol for the SocketDxe driver.
-**/
-EFI_DRIVER_BINDING_PROTOCOL mDriverBinding = {
- DriverSupported,
- DriverStart,
- DriverStop,
- 0xa,
- NULL,
- NULL
-};
diff --git a/StdLib/SocketDxe/EntryUnload.c b/StdLib/SocketDxe/EntryUnload.c
deleted file mode 100644
index edd991b407..0000000000
--- a/StdLib/SocketDxe/EntryUnload.c
+++ /dev/null
@@ -1,351 +0,0 @@
-/** @file
- Implement the entry and unload for the socket driver.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "Socket.h"
-
-
-/**
- The following GUID values are only used by the SocketDxe driver. An
- alternative set of values exists in EfiSocketLib\UseEfiSocketLib.c
- which an application uses when it links against EfiSocketLib. These
- two sets of values allow the SocketDxe driver to coexist with socket
- applications.
-
- Tag GUID - IPv4 in use by SocketDxe
-**/
-CONST EFI_GUID mEslIp4ServiceGuid = {
- 0x4e3a82e6, 0xe43f, 0x460a, { 0x86, 0x6e, 0x9b, 0x5a, 0xab, 0x80, 0x44, 0x48 }
-};
-
-
-/**
- Tag GUID - IPv6 in use by SocketDxe
-**/
-CONST EFI_GUID mEslIp6ServiceGuid = {
- 0x2fc3b2d3, 0x6eba, 0x42b0, { 0xa4, 0xa7, 0x14, 0xc7, 0xa8, 0x4b, 0x5d, 0x22 }
-};
-
-
-/**
- Tag GUID - TCPv4 in use by SocketDxe
-**/
-CONST EFI_GUID mEslTcp4ServiceGuid = {
- 0x4dcaab0a, 0x1990, 0x4352, { 0x8d, 0x2f, 0x2d, 0x8f, 0x13, 0x55, 0x98, 0xa5 }
-};
-
-
-/**
- Tag GUID - TCPv6 in use by SocketDxe
-**/
-CONST EFI_GUID mEslTcp6ServiceGuid = {
- 0xdd455a69, 0xec75, 0x456c, { 0x84, 0xd2, 0x95, 0xca, 0xe7, 0xd3, 0xc6, 0xd3 }
-};
-
-
-/**
- Tag GUID - UDPv4 in use by SocketDxe
-**/
-CONST EFI_GUID mEslUdp4ServiceGuid = {
- 0x43a110ce, 0x9ccd, 0x402b, { 0x8c, 0x29, 0x4a, 0x6d, 0x8a, 0xf7, 0x79, 0x90 }
-};
-
-
-/**
- Tag GUID - UDPv6 in use by SocketDxe
-**/
-CONST EFI_GUID mEslUdp6ServiceGuid = {
- 0x32ff59cd, 0xc33, 0x48d0, { 0xa2, 0x44, 0x4b, 0xb8, 0x11, 0x33, 0x64, 0x3 }
-};
-
-
-/**
- Socket driver unload routine.
-
- @param [in] ImageHandle Handle for the image.
-
- @retval EFI_SUCCESS Image may be unloaded
-
-**/
-EFI_STATUS
-EFIAPI
-DriverUnload (
- IN EFI_HANDLE ImageHandle
- )
-{
- UINTN BufferSize;
- UINTN Index;
- UINTN Max;
- EFI_HANDLE * pHandle;
- EFI_STATUS Status;
-
- //
- // Determine which devices are using this driver
- //
- BufferSize = 0;
- pHandle = NULL;
- Status = gBS->LocateHandle (
- ByProtocol,
- &gEfiCallerIdGuid,
- NULL,
- &BufferSize,
- NULL );
- if ( EFI_BUFFER_TOO_SMALL == Status ) {
- for ( ; ; ) {
- //
- // One or more block IO devices are present
- //
- Status = gBS->AllocatePool (
- EfiRuntimeServicesData,
- BufferSize,
- (VOID **) &pHandle
- );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_ERROR | DEBUG_POOL | DEBUG_INIT | DEBUG_INFO,
- "Insufficient memory, failed handle buffer allocation\r\n" ));
- break;
- }
-
- //
- // Locate the block IO devices
- //
- Status = gBS->LocateHandle (
- ByProtocol,
- &gEfiCallerIdGuid,
- NULL,
- &BufferSize,
- pHandle );
- if ( EFI_ERROR ( Status )) {
- //
- // Error getting handles
- //
- DEBUG (( DEBUG_ERROR | DEBUG_INIT | DEBUG_INFO,
- "Failure getting Telnet handles\r\n" ));
- break;
- }
-
- //
- // Remove any use of the driver
- //
- Max = BufferSize / sizeof ( pHandle[ 0 ]);
- for ( Index = 0; Max > Index; Index++ ) {
- Status = DriverStop ( &mDriverBinding,
- pHandle[ Index ],
- 0,
- NULL );
- if ( EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_WARN | DEBUG_INIT | DEBUG_INFO,
- "WARNING - Failed to shutdown the driver on handle %08x\r\n", pHandle[ Index ]));
- break;
- }
- }
- break;
- }
- }
- else {
- if ( EFI_NOT_FOUND == Status ) {
- //
- // No devices were found
- //
- Status = EFI_SUCCESS;
- }
- }
-
- //
- // Free the handle array
- //
- if ( NULL != pHandle ) {
- gBS->FreePool ( pHandle );
- }
-
- //
- // Done with the socket layer
- //
- if ( !EFI_ERROR ( Status )) {
- Status = EslDxeUninstall ( ImageHandle );
- if ( !EFI_ERROR ( Status )) {
- //
- // Remove the protocols installed by the EntryPoint routine.
- //
- Status = gBS->UninstallMultipleProtocolInterfaces (
- ImageHandle,
- &gEfiDriverBindingProtocolGuid,
- &mDriverBinding,
- &gEfiComponentNameProtocolGuid,
- &mComponentName,
- &gEfiComponentName2ProtocolGuid,
- &mComponentName2,
- NULL
- );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO,
- "Removed: gEfiComponentName2ProtocolGuid from 0x%08x\r\n",
- ImageHandle ));
- DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO,
- "Removed: gEfiComponentNameProtocolGuid from 0x%08x\r\n",
- ImageHandle ));
- DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO,
- "Removed: gEfiDriverBindingProtocolGuid from 0x%08x\r\n",
- ImageHandle ));
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_POOL | DEBUG_INIT,
- "ERROR - Failed to remove gEfiDriverBindingProtocolGuid from 0x%08x, Status: %r\r\n",
- ImageHandle,
- Status ));
- }
- }
- }
-
- //
- // Disconnect the network services
- //
- if ( !EFI_ERROR ( Status )) {
- EslServiceUnload ( );
- }
-
- //
- // Return the unload status
- //
- return Status;
-}
-
-
-/**
-Socket driver entry point.
-
-@param [in] ImageHandle Handle for the image.
-@param [in] pSystemTable Address of the system table.
-
-@retval EFI_SUCCESS Image successfully loaded.
-
-**/
-EFI_STATUS
-EFIAPI
-EntryPoint (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE * pSystemTable
- )
-{
- EFI_LOADED_IMAGE_PROTOCOL * pLoadedImage;
- EFI_STATUS Status;
-
- DBG_ENTER ( );
-
- //
- // Display the image handle
- //
- DEBUG (( DEBUG_INFO,
- "ImageHandle: 0x%08x\r\n",
- ImageHandle ));
-
- //
- // Enable unload support
- //
- Status = gBS->HandleProtocol (
- gImageHandle,
- &gEfiLoadedImageProtocolGuid,
- (VOID **)&pLoadedImage
- );
- if (!EFI_ERROR (Status)) {
- pLoadedImage->Unload = DriverUnload;
-
- //
- // Add the driver to the list of drivers
- //
- Status = EfiLibInstallDriverBindingComponentName2 (
- ImageHandle,
- pSystemTable,
- &mDriverBinding,
- ImageHandle,
- &mComponentName,
- &mComponentName2
- );
- if ( !EFI_ERROR ( Status )) {
- DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO,
- "Installed: gEfiDriverBindingProtocolGuid on 0x%08x\r\n",
- ImageHandle ));
- DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO,
- "Installed: gEfiComponentNameProtocolGuid on 0x%08x\r\n",
- ImageHandle ));
- DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO,
- "Installed: gEfiComponentName2ProtocolGuid on 0x%08x\r\n",
- ImageHandle ));
-
- //
- // Initialize the service layer
- //
- EslServiceLoad ( ImageHandle );
-
- //
- // Make the socket serivces available to other drivers
- // and applications
- //
- Status = EslDxeInstall ( &ImageHandle );
- if ( EFI_ERROR ( Status )) {
- //
- // Disconnect from the network
- //
- EslServiceUnload ( );
-
- //
- // Remove the driver bindings
- //
- gBS->UninstallMultipleProtocolInterfaces (
- ImageHandle,
- &gEfiDriverBindingProtocolGuid,
- &mDriverBinding,
- &gEfiComponentNameProtocolGuid,
- &mComponentName,
- &gEfiComponentName2ProtocolGuid,
- &mComponentName2,
- NULL
- );
- DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO,
- "Removed: gEfiComponentName2ProtocolGuid from 0x%08x\r\n",
- ImageHandle ));
- DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO,
- "Removed: gEfiComponentNameProtocolGuid from 0x%08x\r\n",
- ImageHandle ));
- DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO,
- "Removed: gEfiDriverBindingProtocolGuid from 0x%08x\r\n",
- ImageHandle ));
- }
- }
- else {
- DEBUG (( DEBUG_ERROR | DEBUG_POOL | DEBUG_INIT,
- "ERROR - EfiLibInstallDriverBindingComponentName2 failed, Status: %r\r\n",
- Status ));
- }
- }
- DBG_EXIT_STATUS ( Status );
- return Status;
-}
-
-
-/**
- Socket layer's service binding protocol delcaration.
-**/
-CONST EFI_SERVICE_BINDING_PROTOCOL mEfiServiceBinding = {
- EslDxeCreateChild,
- EslDxeDestroyChild
-};
-
-
-/**
- The following entries disable the constructor and destructor
- for the SocketDxe driver. Note that socket applications linking
- against EfiSocketLib use different redirection.
-**/
-PFN_ESL_xSTRUCTOR mpfnEslConstructor = NULL; ///< No EfiSocketLib constructor needed for SocketDxe
-PFN_ESL_xSTRUCTOR mpfnEslDestructor = NULL; ///< No EfiSocketLib destructor needed for SocketDxe
diff --git a/StdLib/SocketDxe/Socket.h b/StdLib/SocketDxe/Socket.h
deleted file mode 100644
index 7d8334c4a6..0000000000
--- a/StdLib/SocketDxe/Socket.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/** @file
- Definitions for the Socket layer driver.
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-#ifndef _SOCKET_H_
-#define _SOCKET_H_
-
-#include <Library/UefiDriverEntryPoint.h>
-#include <Efi/EfiSocketLib.h>
-
-#include <Protocol/LoadedImage.h>
-
-//------------------------------------------------------------------------------
-// Protocol Declarations
-//------------------------------------------------------------------------------
-
-extern EFI_COMPONENT_NAME_PROTOCOL mComponentName; ///< Component name protocol declaration
-extern EFI_COMPONENT_NAME2_PROTOCOL mComponentName2; ///< Component name 2 protocol declaration
-extern EFI_DRIVER_BINDING_PROTOCOL mDriverBinding; ///< Driver binding protocol declaration
-extern EFI_SERVICE_BINDING_PROTOCOL mServiceBinding; ///< Service binding protocol delcaration
-
-//------------------------------------------------------------------------------
-// Driver Binding Protocol Support
-//------------------------------------------------------------------------------
-
-/**
- Stop this driver on Controller by removing NetworkInterfaceIdentifier protocol and
- closing the DevicePath and PciIo protocols on Controller.
-
- @param [in] pThis Protocol instance pointer.
- @param [in] Controller Handle of device to stop driver on.
- @param [in] NumberOfChildren How many children need to be stopped.
- @param [in] pChildHandleBuffer Not used.
-
- @retval EFI_SUCCESS This driver is removed Controller.
- @retval EFI_DEVICE_ERROR The device could not be stopped due to a device error.
- @retval other This driver was not removed from this device.
-
-**/
-EFI_STATUS
-EFIAPI
-DriverStop (
- IN EFI_DRIVER_BINDING_PROTOCOL * pThis,
- IN EFI_HANDLE Controller,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE * pChildHandleBuffer
- );
-
-//------------------------------------------------------------------------------
-// EFI Component Name Protocol Support
-//------------------------------------------------------------------------------
-
-/**
- Retrieves a Unicode string that is the user readable name of the driver.
-
- This function retrieves the user readable name of a driver in the form of a
- Unicode string. If the driver specified by This has a user readable name in
- the language specified by Language, then a pointer to the driver name is
- returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
- by This does not support the language specified by Language,
- then EFI_UNSUPPORTED is returned.
-
- @param [in] pThis A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
- EFI_COMPONENT_NAME_PROTOCOL instance.
- @param [in] pLanguage A pointer to a Null-terminated ASCII string
- array indicating the language. This is the
- language of the driver name that the caller is
- requesting, and it must match one of the
- languages specified in SupportedLanguages. The
- number of languages supported by a driver is up
- to the driver writer. Language is specified
- in RFC 3066 or ISO 639-2 language code format.
- @param [out] ppDriverName A pointer to the Unicode string to return.
- This Unicode string is the name of the
- driver specified by This in the language
- specified by Language.
-
- @retval EFI_SUCCESS The Unicode string for the Driver specified by
- This and the language specified by Language was
- returned in DriverName.
- @retval EFI_INVALID_PARAMETER Language is NULL.
- @retval EFI_INVALID_PARAMETER DriverName is NULL.
- @retval EFI_UNSUPPORTED The driver specified by This does not support
- the language specified by Language.
-
-**/
-EFI_STATUS
-EFIAPI
-GetDriverName (
- IN EFI_COMPONENT_NAME_PROTOCOL * pThis,
- IN CHAR8 * pLanguage,
- OUT CHAR16 ** ppDriverName
- );
-
-
-/**
- Retrieves a Unicode string that is the user readable name of the controller
- that is being managed by a driver.
-
- This function retrieves the user readable name of the controller specified by
- ControllerHandle and ChildHandle in the form of a Unicode string. If the
- driver specified by This has a user readable name in the language specified by
- Language, then a pointer to the controller name is returned in ControllerName,
- and EFI_SUCCESS is returned. If the driver specified by This is not currently
- managing the controller specified by ControllerHandle and ChildHandle,
- then EFI_UNSUPPORTED is returned. If the driver specified by This does not
- support the language specified by Language, then EFI_UNSUPPORTED is returned.
-
- @param [in] pThis A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
- EFI_COMPONENT_NAME_PROTOCOL instance.
- @param [in] ControllerHandle The handle of a controller that the driver
- specified by This is managing. This handle
- specifies the controller whose name is to be
- returned.
- @param [in] ChildHandle The handle of the child controller to retrieve
- the name of. This is an optional parameter that
- may be NULL. It will be NULL for device
- drivers. It will also be NULL for a bus drivers
- that wish to retrieve the name of the bus
- controller. It will not be NULL for a bus
- driver that wishes to retrieve the name of a
- child controller.
- @param [in] pLanguage A pointer to a Null-terminated ASCII string
- array indicating the language. This is the
- language of the driver name that the caller is
- requesting, and it must match one of the
- languages specified in SupportedLanguages. The
- number of languages supported by a driver is up
- to the driver writer. Language is specified in
- RFC 3066 or ISO 639-2 language code format.
- @param [out] ppControllerName A pointer to the Unicode string to return.
- This Unicode string is the name of the
- controller specified by ControllerHandle and
- ChildHandle in the language specified by
- Language from the point of view of the driver
- specified by This.
-
- @retval EFI_SUCCESS The Unicode string for the user readable name in
- the language specified by Language for the
- driver specified by This was returned in
- DriverName.
- @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
- @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
- EFI_HANDLE.
- @retval EFI_INVALID_PARAMETER Language is NULL.
- @retval EFI_INVALID_PARAMETER ControllerName is NULL.
- @retval EFI_UNSUPPORTED The driver specified by This is not currently
- managing the controller specified by
- ControllerHandle and ChildHandle.
- @retval EFI_UNSUPPORTED The driver specified by This does not support
- the language specified by Language.
-
-**/
-EFI_STATUS
-EFIAPI
-GetControllerName (
- IN EFI_COMPONENT_NAME_PROTOCOL * pThis,
- IN EFI_HANDLE ControllerHandle,
- IN OPTIONAL EFI_HANDLE ChildHandle,
- IN CHAR8 * pLanguage,
- OUT CHAR16 ** ppControllerName
- );
-
-//------------------------------------------------------------------------------
-
-#endif // _SOCKET_H_
diff --git a/StdLib/SocketDxe/SocketDxe.inf b/StdLib/SocketDxe/SocketDxe.inf
deleted file mode 100644
index 1b459bafc8..0000000000
--- a/StdLib/SocketDxe/SocketDxe.inf
+++ /dev/null
@@ -1,62 +0,0 @@
-#/** @file
-# Component description file for the socket layer driver.
-#
-# This module implements the socket layer.
-# Copyright (c) 2011, Intel Corporation
-#
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#**/
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = SocketDxe
- FILE_GUID = 2A43BA5F-AC29-4fdc-8A3B-0328D0256F8C
- MODULE_TYPE = DXE_RUNTIME_DRIVER
- VERSION_STRING = 1.0
-
- ENTRY_POINT = EntryPoint
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF EBC
-#
-
-[Sources.common]
- Socket.h
- ComponentName.c
- DriverBinding.c
- EntryUnload.c
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- StdLib/StdLib.dec
-
-[LibraryClasses]
- EfiSocketLib
- UefiLib
- UefiBootServicesTableLib
- BaseMemoryLib
- DebugLib
- UefiRuntimeLib
- UefiDriverEntryPoint
-
-[Protocols]
- gEfiTcp4ProtocolGuid
- gEfiTcp4ServiceBindingProtocolGuid
- gEfiUdp4ProtocolGuid
- gEfiUdp4ServiceBindingProtocolGuid
- gEfiSocketProtocolGuid
- gEfiSocketServiceBindingProtocolGuid
-
-[Depex]
- gEfiBdsArchProtocolGuid AND
- gEfiCpuArchProtocolGuid AND
- gEfiTcp4ServiceBindingProtocolGuid AND
- gEfiTimerArchProtocolGuid AND
- gEfiUdp4ServiceBindingProtocolGuid
diff --git a/StdLib/StdLib.dec b/StdLib/StdLib.dec
deleted file mode 100644
index 98a5d89eac..0000000000
--- a/StdLib/StdLib.dec
+++ /dev/null
@@ -1,49 +0,0 @@
-## @file
-# Declarations for the UDK Standard Libraries.
-#
-# Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
-#
-# This program and the accompanying materials are licensed and made available under
-# the terms and conditions of the BSD License which accompanies this distribution.
-# The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-##
-
-
-[Defines]
- DEC_SPECIFICATION = 0x00010005
- PACKAGE_NAME = StdLib
- PACKAGE_GUID = edca00d2-2aeb-4f0b-ba48-52383627d4b2
- PACKAGE_VERSION = 0.01
-
-
-[Includes]
- Include
-
-[Includes.IA32]
- Include/Ia32
-
-[Includes.X64]
- Include/X64
-
-[Includes.IPF]
- Include/Ipf
-
-[Includes.ARM]
- Include/Arm
-
-[Includes.AARCH64]
- Include/Aarch64
-
-
-[Guids]
- gStdLibTokenSpaceGuid = { 0x447559f0, 0xd02e, 0x4cf1, { 0x99, 0xbc, 0xca, 0x11, 0x65, 0x40, 0x54, 0xc2 }}
-
-
-[Protocols]
- gEfiSocketProtocolGuid = { 0x58e6ed63, 0x1694, 0x440b, { 0x93, 0x88, 0xe9, 0x8f, 0xed, 0x6b, 0x65, 0xaf } }
- gEfiSocketServiceBindingProtocolGuid = { 0x8aaedb2a, 0xa6bb, 0x47c6, { 0x94, 0xce, 0x1b, 0x80, 0x96, 0x42, 0x3f, 0x2a } }
-
diff --git a/StdLib/StdLib.dsc b/StdLib/StdLib.dsc
deleted file mode 100644
index f62d2ad4fd..0000000000
--- a/StdLib/StdLib.dsc
+++ /dev/null
@@ -1,150 +0,0 @@
-## @file
-# Intel(r) UEFI Standard Libraries for EDK II.
-# Build descriptions.
-#
-# See the comments in the [LibraryClasses.IA32] and [BuildOptions] sections
-# for important information about configuring this package for your
-# environment.
-#
-# This package contains:
-# Standard C Library.
-# Sockets Library.
-# Posix Library.
-#
-# Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-##
-
-[Defines]
- PLATFORM_NAME = StdLib
- PLATFORM_GUID = 6135e67b-d813-4e4a-93c3-945d6af41858
- PLATFORM_VERSION = 0.01
- DSC_SPECIFICATION = 0x00010006
- OUTPUT_DIRECTORY = Build/StdLib
- SUPPORTED_ARCHITECTURES = IA32|X64|ARM|AARCH64
- BUILD_TARGETS = DEBUG|RELEASE|NOOPT
- SKUID_IDENTIFIER = DEFAULT
-
-#
-# Debug output control
-#
- DEFINE DEBUG_ENABLE_OUTPUT = FALSE # Set to TRUE to enable debug output
- DEFINE DEBUG_PRINT_ERROR_LEVEL = 0x80000000 # Flags to control amount of debug output
- DEFINE DEBUG_PROPERTY_MASK = 0x0f
-
-[PcdsFeatureFlag]
-
-[PcdsFixedAtBuild]
- gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|$(DEBUG_PROPERTY_MASK)
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|$(DEBUG_PRINT_ERROR_LEVEL)
-
-[PcdsFixedAtBuild.IPF]
-
-[LibraryClasses]
- #
- # Entry Point Libraries
- #
- UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
- ShellCEntryLib|ShellPkg/Library/UefiShellCEntryLib/UefiShellCEntryLib.inf
- UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
- #
- # Common Libraries
- #
- BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
- BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
- UefiLib|MdePkg/Library/UefiLib/UefiLib.inf
- PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
- PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
- MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
- UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
- UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
- !if $(DEBUG_ENABLE_OUTPUT)
- DebugLib|MdePkg/Library/UefiDebugLibConOut/UefiDebugLibConOut.inf
- DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf
- !else ## DEBUG_ENABLE_OUTPUT
- DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
- !endif ## DEBUG_ENABLE_OUTPUT
- DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
- PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf
- IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
- PciLib|MdePkg/Library/BasePciLibCf8/BasePciLibCf8.inf
- PciCf8Lib|MdePkg/Library/BasePciCf8Lib/BasePciCf8Lib.inf
- SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf
- UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf
- HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
- FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
- HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
- UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf
- PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
- SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
- ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
-
-###################################################################################################
-#
-# Components Section - list of the modules and components that will be processed by compilation
-# tools and the EDK II tools to generate PE32/PE32+/Coff image files.
-#
-# Note: The EDK II DSC file is not used to specify how compiled binary images get placed
-# into firmware volume images. This section is just a list of modules to compile from
-# source into UEFI-compliant binaries.
-# It is the FDF file that contains information on combining binary files into firmware
-# volume images, whose concept is beyond UEFI and is described in PI specification.
-# Binary modules do not need to be listed in this section, as they should be
-# specified in the FDF file. For example: Shell binary (Shell_Full.efi), FAT binary (Fat.efi),
-# Logo (Logo.bmp), and etc.
-# There may also be modules listed in this section that are not required in the FDF file,
-# When a module listed here is excluded from FDF file, then UEFI-compliant binary will be
-# generated for it, but the binary will not be put into any firmware volume.
-#
-###################################################################################################
-
-[Components]
-# Standard C Libraries.
- StdLib/LibC/LibC.inf
- StdLib/LibC/StdLib/StdLib.inf
- StdLib/LibC/String/String.inf
- StdLib/LibC/Wchar/Wchar.inf
- StdLib/LibC/Ctype/Ctype.inf
- StdLib/LibC/Time/Time.inf
- StdLib/LibC/Stdio/Stdio.inf
- StdLib/LibC/Locale/Locale.inf
- StdLib/LibC/Uefi/Uefi.inf
- StdLib/LibC/Math/Math.inf
- StdLib/LibC/Signal/Signal.inf
- StdLib/LibC/NetUtil/NetUtil.inf
-
-# Device Abstractions within the Standard C Library
-# Applications should not directly access any functions defined in these libraries.
- StdLib/LibC/gdtoa/gdtoa.inf
- StdLib/LibC/Uefi/Devices/daUtility.inf
- StdLib/LibC/Uefi/Devices/daConsole.inf
- StdLib/LibC/Uefi/Devices/daShell.inf
-
-# Additional, non-standard, libraries
- StdLib/LibC/Containers/ContainerLib.inf
-
-# Additional libraries for POSIX functionality.
- StdLib/PosixLib/PosixLib.inf
- StdLib/PosixLib/Err/LibErr.inf
- StdLib/PosixLib/Gen/LibGen.inf
- StdLib/PosixLib/Glob/LibGlob.inf
- StdLib/PosixLib/Stringlist/LibStringlist.inf
- StdLib/LibC/Uefi/InteractiveIO/IIO.inf
-
-# Socket Libraries - LibC based
- StdLib/BsdSocketLib/BsdSocketLib.inf
- StdLib/EfiSocketLib/EfiSocketLib.inf
- StdLib/UseSocketDxe/UseSocketDxe.inf
-
-##############################################################################
-#
-# Include Boilerplate text required for building with the Standard Libraries.
-#
-##############################################################################
-!include StdLib/StdLib.inc
diff --git a/StdLib/StdLib.inc b/StdLib/StdLib.inc
deleted file mode 100644
index fff9ef05e6..0000000000
--- a/StdLib/StdLib.inc
+++ /dev/null
@@ -1,135 +0,0 @@
-################################################################
-# Boilerplate text to be included by any DSC file using the
-# Standard Libraries.
-#
-# The including DSC file must DEFINE the EMULATE macro if
-# the application is to be run in an emulation environment.
-#
-# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-################################################################
-
-##########
-# Socket Support Libraries
-##########
-
-[LibraryClasses.common]
- BsdSocketLib|StdLib/BsdSocketLib/BsdSocketLib.inf
- EfiSocketLib|StdLib/EfiSocketLib/EfiSocketLib.inf
- UseSocketDxe|StdLib/UseSocketDxe/UseSocketDxe.inf
-
-[LibraryClasses.Common.UEFI_APPLICATION]
- ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
- FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
- SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
- ShellCEntryLib|ShellPkg/Library/UefiShellCEntryLib/UefiShellCEntryLib.inf
-
- #
- # C Standard Libraries
- #
- LibC|StdLib/LibC/LibC.inf
- LibCType|StdLib/LibC/Ctype/Ctype.inf
- LibLocale|StdLib/LibC/Locale/Locale.inf
- LibMath|StdLib/LibC/Math/Math.inf
- LibSignal|StdLib/LibC/Signal/Signal.inf
- LibStdio|StdLib/LibC/Stdio/Stdio.inf
- LibStdLib|StdLib/LibC/StdLib/StdLib.inf
- LibString|StdLib/LibC/String/String.inf
- LibTime|StdLib/LibC/Time/Time.inf
- LibUefi|StdLib/LibC/Uefi/Uefi.inf
- LibWchar|StdLib/LibC/Wchar/Wchar.inf
-
-# Common Utilities for Networking Libraries
- LibNetUtil|StdLib/LibC/NetUtil/NetUtil.inf
-
-# Additional libraries for POSIX functionality.
- LibPosix|StdLib/PosixLib/PosixLib.inf # Combines LibErr, LibGen, LibGlob, LibStringlist, GetPass into one library
-
- LibErr|StdLib/PosixLib/Err/LibErr.inf
- LibGen|StdLib/PosixLib/Gen/LibGen.inf
- LibGlob|StdLib/PosixLib/Glob/LibGlob.inf
- LibStringlist|StdLib/PosixLib/Stringlist/LibStringlist.inf
- LibIIO|StdLib/LibC/Uefi/InteractiveIO/IIO.inf
-
-# Additional, non-standard, libraries
- LibContainer|StdLib/LibC/Containers/ContainerLib.inf
-
-# Libraries for device abstractions within the Standard C Library
-# Applications should not directly access any functions defined in these libraries.
- LibGdtoa|StdLib/LibC/gdtoa/gdtoa.inf
- DevConsole|StdLib/LibC/Uefi/Devices/daConsole.inf
- DevShell|StdLib/LibC/Uefi/Devices/daShell.inf # DEPRECATED! Please use DevMedia for new code.
- DevMedia|StdLib/LibC/Uefi/Devices/daShell.inf
- DevUtility|StdLib/LibC/Uefi/Devices/daUtility.inf
-
- LuaLib|AppPkg/Applications/Lua/LuaLib.inf # Lua language library
-
-[LibraryClasses.ARM]
- NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
- NULL|StdLib/LibC/Softfloat/Softfloat.inf
-
- # Add support for GCC stack protector
- NULL|MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf
-
-[LibraryClasses.AArch64]
- NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
-
- # Use the softfloat library to cover missing hardfloat operations.
- NULL|StdLib/LibC/Softfloat/Softfloat.inf
-
- # Add support for GCC stack protector
- NULL|MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf
-
-[Components]
-# BaseLib and BaseMemoryLib need to be built with the /GL- switch when using the Microsoft
-# tool chain. This is required so that the library functions can be resolved during
-# the second pass of the linker during Link-time-code-generation.
-###
- MdePkg/Library/BaseLib/BaseLib.inf {
- <BuildOptions>
- MSFT:*_*_*_CC_FLAGS = /X /Zc:wchar_t /GL-
- }
-
- MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf {
- <BuildOptions>
- MSFT:*_*_*_CC_FLAGS = /X /Zc:wchar_t /GL-
- }
-
-##########
-# Socket Layer
-##########
- StdLib/SocketDxe/SocketDxe.inf
-
-
-##############################################################################
-#
-# See the additional comments below if you plan to run applications under an
-# emulation environment.
-#
-
-[BuildOptions]
-!ifdef $(EMULATE)
- # The Build Options, below, are only used when building the Standard Libraries
- # to be run under an emulation environment; such as NT32Pkg.
- # They disable optimization which facillitates debugging under the Emulation environment.
- INTEL:*_*_IA32_CC_FLAGS = /Od /D UEFI_C_SOURCE
- MSFT:*_*_IA32_CC_FLAGS = /Od /D UEFI_C_SOURCE
- GCC:*_*_IA32_CC_FLAGS = -O0 -DUEFI_C_SOURCE
- RVCT:*_*_*_CC_FLAGS = --library_interface=none -DUEFI_C_SOURCE -J$(WORKSPACE)/StdLib/Include -J$(WORKSPACE)/StdLib/Include/Arm
- XCODE:*_*_*_CC_FLAGS = -O0 -DUEFI_C_SOURCE -Wno-unused-const-variable -Wno-string-compare -Wno-sometimes-uninitialized
-
-!else
- # These Build Options are used when building the Standard Libraries to be run
- # on real hardware.
- INTEL:*_*_*_CC_FLAGS = /Qfreestanding /D UEFI_C_SOURCE
- MSFT:*_*_*_CC_FLAGS = /X /Zc:wchar_t /D UEFI_C_SOURCE
- GCC:*_*_*_CC_FLAGS = -nostdinc -nostdlib -DUEFI_C_SOURCE
- RVCT:*_*_*_CC_FLAGS = --library_interface=none -DUEFI_C_SOURCE -J$(WORKSPACE)/StdLib/Include -J$(WORKSPACE)/StdLib/Include/Arm
- XCODE:*_*_*_CC_FLAGS = -nostdinc -nostdlib -DUEFI_C_SOURCE -Wno-unused-const-variable -Wno-string-compare -Wno-sometimes-uninitialized
-!endif
diff --git a/StdLib/UseSocketDxe/UseSocketDxe.c b/StdLib/UseSocketDxe/UseSocketDxe.c
deleted file mode 100644
index 423419c23e..0000000000
--- a/StdLib/UseSocketDxe/UseSocketDxe.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/** @file
- Implement the connection to the socket driver
-
- Copyright (c) 2011, Intel Corporation
- All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include <Uefi.h>
-
-#include <Library/DebugLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiLib.h>
-
-#include <Protocol/EfiSocket.h>
-#include <Protocol/ServiceBinding.h>
-
-
-/**
- Free the socket resources
-
- This releases the socket resources allocated by calling
- EslServiceGetProtocol.
-
- This routine is called from the ::close routine in BsdSocketLib
- to release the socket resources.
-
- @param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL
- structure
-
- @return Value for ::errno, zero (0) indicates success.
-
- **/
-int
-EslServiceFreeProtocol (
- IN EFI_SOCKET_PROTOCOL * pSocketProtocol
- )
-{
- EFI_SERVICE_BINDING_PROTOCOL * pServiceBinding;
- int RetVal;
- EFI_STATUS Status;
-
- //
- // Assume success
- //
- RetVal = 0;
-
- //
- // Locate the socket protocol
- //
- Status = gBS->LocateProtocol ( &gEfiSocketServiceBindingProtocolGuid,
- NULL,
- (VOID **) &pServiceBinding );
- if ( !EFI_ERROR ( Status )) {
- //
- // Release the handle
- //
- Status = pServiceBinding->DestroyChild ( pServiceBinding,
- pSocketProtocol->SocketHandle );
- }
- if ( EFI_ERROR ( Status )) {
- RetVal = EIO;
- }
-
- //
- // Return the operation status
- //
- return RetVal;
-}
-
-
-/**
- Connect to the EFI socket library
-
- This routine establishes a connection to the socket driver
- and returns the API (::EFI_SOCKET_PROTOCOL address) to the
- socket file system layer in BsdSocketLib. This routine looks for
- the gEfiSocketServiceBindingProtocolGuid to locate the socket
- driver. This routine then creates a child handle and locates
- the gEfiSocketProtocolGuid protocol on that handle to get the
- ::EFI_SOCKET_PROTOCOL structure address.
-
- This routine is called from the ::socket routine in BsdSocketLib
- to create the data structure and initialize the API for a socket.
- Note that this implementation is only used by socket applications
- that link directly to UseSocketDxe.
-
- @param [in] ppSocketProtocol Address to receive the ::EFI_SOCKET_PROTOCOL
- structure address
-
- @return Value for ::errno, zero (0) indicates success.
-
- **/
-int
-EslServiceGetProtocol (
- IN EFI_SOCKET_PROTOCOL ** ppSocketProtocol
- )
-{
- EFI_SERVICE_BINDING_PROTOCOL * pServiceBinding;
- int RetVal;
- EFI_HANDLE SocketHandle;
- EFI_STATUS Status;
-
- //
- // Locate the socket protocol
- //
- Status = gBS->LocateProtocol ( &gEfiSocketServiceBindingProtocolGuid,
- NULL,
- (VOID **)&pServiceBinding );
- if ( !EFI_ERROR ( Status )) {
- //
- // Create a new socket
- //
- SocketHandle = NULL;
- Status = pServiceBinding->CreateChild ( pServiceBinding,
- &SocketHandle );
- if ( !EFI_ERROR ( Status )) {
- //
- // Get the socket protocol
- //
- Status = gBS->OpenProtocol ( SocketHandle,
- &gEfiSocketProtocolGuid,
- (VOID **)ppSocketProtocol,
- NULL,
- NULL,
- EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL );
- if ( !EFI_ERROR ( Status )) {
- //
- // Success!
- //
- RetVal = 0;
- }
- else {
- DEBUG (( DEBUG_ERROR,
- "ERROR - No socket protocol on 0x%08x, Status: %r\r\n",
- SocketHandle,
- Status ));
- RetVal = ENODEV;
- }
- }
- else {
- //
- // Translate the error
- //
- DEBUG (( DEBUG_ERROR,
- "ERROR - CreateChild failed, Status: %r\r\n",
- Status ));
- switch ( Status ) {
- case EFI_SUCCESS:
- RetVal = 0;
- break;
-
- case EFI_ACCESS_DENIED:
- case EFI_WRITE_PROTECTED:
- RetVal = EACCES;
- break;
-
- case EFI_NO_RESPONSE:
- RetVal = EHOSTUNREACH;
- break;
-
- case EFI_BAD_BUFFER_SIZE:
- case EFI_BUFFER_TOO_SMALL:
- case EFI_INVALID_PARAMETER:
- RetVal = EINVAL;
- break;
-
- case EFI_DEVICE_ERROR:
- case EFI_MEDIA_CHANGED:
- case EFI_NO_MEDIA:
- case EFI_VOLUME_CORRUPTED:
- RetVal = EIO;
- break;
-
- case EFI_NOT_FOUND:
- RetVal = ENOENT;
- break;
-
- default:
- case EFI_OUT_OF_RESOURCES:
- RetVal = ENOMEM;
- break;
-
- case EFI_VOLUME_FULL:
- RetVal = ENOSPC;
- break;
-
- case EFI_UNSUPPORTED:
- RetVal = ENOSYS;
- break;
-
- case EFI_NO_MAPPING:
- RetVal = ENXIO;
- break;
-
- case EFI_LOAD_ERROR:
- RetVal = ESRCH;
- break;
-
- case EFI_TIMEOUT:
- RetVal = ETIMEDOUT;
- break;
-
- case EFI_NOT_READY:
- RetVal = EWOULDBLOCK;
- break;
- }
- }
- }
- else {
- DEBUG (( DEBUG_ERROR,
- "ERROR - Socket driver not loaded, Status: %r\r\n",
- Status ));
- RetVal = ENODEV;
- }
-
- //
- // Return the operation status
- //
- return RetVal;
-}
diff --git a/StdLib/UseSocketDxe/UseSocketDxe.inf b/StdLib/UseSocketDxe/UseSocketDxe.inf
deleted file mode 100644
index 45fb70f292..0000000000
--- a/StdLib/UseSocketDxe/UseSocketDxe.inf
+++ /dev/null
@@ -1,45 +0,0 @@
-#/** @file
-# Component description file for the EFI socket library.
-#
-# This module implements the socket layer.
-# Copyright (c) 2011, Intel Corporation
-#
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#**/
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = UseSocketDxe
- FILE_GUID = 1A6853C8-F362-4f68-A77E-0B304A194C05
- MODULE_TYPE = BASE
- VERSION_STRING = 1.0
- LIBRARY_CLASS = UseSocketDxe
-
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF EBC
-#
-
-[Sources.common]
- UseSocketDxe.c
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- StdLib/StdLib.dec
-# SocketPkg/SocketPkg.dec
-
-[LibraryClasses]
- UefiLib
- UefiBootServicesTableLib
- BaseMemoryLib
- DebugLib
-
-[Protocols]
- gEfiSocketProtocolGuid
- gEfiSocketServiceBindingProtocolGuid