Print not Aborting on Write() failure #3651
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The current 1.6.5 Print library report the total count of characters send during operations. The assumption is that this count is of contiguous characters. If you printed a buffer of 45 characters and the print command returned 44 as the number of characters sent, the assumption is that the last character was not sent. But, this is not a valid assumption. The two low level functions through which all of the helper print funtions work (
size_t Print::write(const uint8_t *buffer, size_t size)
andsize_t Print::print(const __FlashStringHelper *ifsh)
) do not exit when a write failure is detected. They just attempt to write the next character from the input buffer. This renders any positional transmit information useless.I propose to change the behavior of these two routines. When a write error is encountered these function return with the count of sent characters. If the calling procedure wants to retry sending then ~buffer[sentCount] is the next character needing to be send.
see arduino/Arduino issue #3614
Chuck Todd