Fix the following linker errors:
ToolException: ./.build/LPC11U68/GCC_ARM/mbed-os/hal/targets/cmsis/TARGET_NXP/TARGET_LPC11U6X/TOOLCHAIN_GCC_ARM/TARGET_LPC11U68/startup_LPC11U68.o: In function `operator new(unsigned int)':
startup_LPC11U68.cpp:(.text._Znwj+0x0): multiple definition of `operator new(unsigned int)'
./.build/LPC11U68/GCC_ARM/mbed-os/hal/common/retarget.o:retarget.cpp:(.text._Znwj+0x0): first defined here
./.build/LPC11U68/GCC_ARM/mbed-os/hal/targets/cmsis/TARGET_NXP/TARGET_LPC11U6X/TOOLCHAIN_GCC_ARM/TARGET_LPC11U68/startup_LPC11U68.o: In function `operator new[](unsigned int)':
startup_LPC11U68.cpp:(.text._Znaj+0x0): multiple definition of `operator new[](unsigned int)'
./.build/LPC11U68/GCC_ARM/mbed-os/hal/common/retarget.o:retarget.cpp:(.text._Znaj+0x0): first defined here
./.build/LPC11U68/GCC_ARM/mbed-os/hal/targets/cmsis/TARGET_NXP/TARGET_LPC11U6X/TOOLCHAIN_GCC_ARM/TARGET_LPC11U68/startup_LPC11U68.o: In function `operator delete(void*)':
startup_LPC11U68.cpp:(.text._ZdlPv+0x0): multiple definition of `operator delete(void*)'
./.build/LPC11U68/GCC_ARM/mbed-os/hal/common/retarget.o:retarget.cpp:(.text._ZdlPv+0x0): first defined here
./.build/LPC11U68/GCC_ARM/mbed-os/hal/targets/cmsis/TARGET_NXP/TARGET_LPC11U6X/TOOLCHAIN_GCC_ARM/TARGET_LPC11U68/startup_LPC11U68.o: In function `operator delete[](void*)':
startup_LPC11U68.cpp:(.text._ZdaPv+0x0): multiple definition of `operator delete[](void*)'
./.build/LPC11U68/GCC_ARM/mbed-os/hal/common/retarget.o:retarget.cpp:(.text._ZdaPv+0x0): first defined here
collect2: error: ld returned 1 exit status
Signed-off-by: Tony Wu <tung7970@gmail.com>
- Corrected handling, before errors would forcibly restart the
accept loop without checks for timeouts
- Rearranged accept logic to match the logic of
recv/send/recvfrom/sendto
User feedback indicated that the previous deprecation notices
were confusing and mislead migration from the old style of thread
spawning.
The deprecation notices were updated to emphasize the replacement
functions, and examples of correct usage were added in the doxygen.
One limitation of C++ is that implicit casts do not occur when
matching template overloads, as a consequence the callback's
argument type requires a strict match.
Unfortunately, the prevents the previously common pattern of using
void pointers as function arguments, causing unnecessary problems
for users porting code.
Thing *t;
void doit(void *p) { blablabla }
Callback<void()> cb(t, doit);
To avoid this, explicit overloads on void pointers were added. This
avoids a template expansion, and allows the implicit cast to occur
as the user would expect.
To avoid complications with unexpected IP versions, the wanted
IP version was added as an extra argument to DNS query functions
(defaults to NSAPI_IPv4).
Internal API changes:
m nsapi_dns_query
m nsapi_dns_query_multiple
Interestingly, though multiple questions can be encoded in a single
DNS packet, few, if any, nameservers respect any but the first
question. This makes support for coelescing DNS queries useless.
Internal API changes:
+ nsapi_dns_query_multiple
Note, dns_query_multiple takes a buffer of nsapi_addr_t to fill. This is
less dynamic than the linked-list method used in linux's gethostbyname,
but is easier to manage and more constrained.
Internal API changes:
dnsQuery -> nsapi_dns_query
Additionally restructured query code to emit/parse network structures
in stream form to hopefully document the underlying structure more
explicitly.
As the templated tests grew, the resulting binary exceeded a
flash size of 64K. This caused the test to incorrectly fail on
small devices.
Moved and split into the following:
TESTS/mbed_functional/callback
TESTS/mbed_functional/callback_small
TESTS/mbed_functional/callback_big
TESTS/mbed_functional/functionpointer
- Marked `call` and `operator()` functions as const
- Moved to static_cast for internal function pointer to avoid losing
compiler checked const-safety
- Added test for `operator=` with non-callback types
- Moved from zero-cast to value-initializer when callback is null
- Added `operator==` and `operator!=`
- Removed special handling of null callback
- Replicated doxygen to all overloads
- Added correct nops where uninitialized callbacks are called
- Added assertion for null callback
- Removed copy-constructor from callback constructor