- Remove the suggestion of null terimination of the custom_fread custom_fwrite functions
- Update the tests
This commit is contained in:
2023-12-06 14:58:41 +01:00
parent fc997e1aac
commit 0023659552
2 changed files with 22 additions and 10 deletions

View File

@@ -73,17 +73,17 @@ void tftp_custom_fseek(tftp_custom_file_t* handle, size_t offset, int whence) {
* auto rolling over the offset
* if the bytes to read is bigger than the remaining bytes
* it will read the remaining bytes and set the bytes to 0
* this function does not handle null termination
* @param[out] buf The buffer to write the data to
* @param[in] bytes The number of bytes to read
* @param[in,out] handle Custom file handles
*/
size_t tftp_custom_fread(void* buf, size_t bytes, tftp_custom_file_t* handle) {
if (handle->offset + bytes >= handle->len) {
bytes = handle->len - handle->offset - 1;
if (handle->offset + bytes > handle->len) {
bytes = handle->len - handle->offset;
}
memcpy(buf, handle->data + handle->offset, bytes);
handle->offset += bytes;
((char*)buf)[bytes] = '\0';
if (handle->offset > handle->len) {
bytes = 0;
}
@@ -93,6 +93,11 @@ size_t tftp_custom_fread(void* buf, size_t bytes, tftp_custom_file_t* handle) {
/**
* @brief tftp custom file functions to write the data
* auto rolling over the offset
* if the bytes to write is bigger than the remaining bytes
* it will write the remaining bytes and set the bytes to 0
* this function does not handle null termination
* if you want to write a null termination you have to add it to the data
* and set the len to the new length before calling this function
*
* @param buf The buffer to write the data to
* @param bytes The number of bytes to write
@@ -100,8 +105,8 @@ size_t tftp_custom_fread(void* buf, size_t bytes, tftp_custom_file_t* handle) {
* @return The number of bytes written
*/
size_t tftp_custom_fwrite(const void* buf, size_t bytes, tftp_custom_file_t* handle) {
if (handle->offset + bytes >= handle->len) {
bytes = handle->len - handle->offset - 1;
if (handle->offset + bytes > handle->len) {
bytes = handle->len - handle->offset;
}
memcpy(handle->data + handle->offset, buf, bytes);
handle->offset += bytes;

View File

@@ -77,20 +77,27 @@ TEST(TFTP, custom_fwrite) {
}
TEST(TFTP, custom_fread_fwrite_suggested_by_Lorenz) {
char buf[21];
write_file.data = (char*)malloc(21 * sizeof(char));
write_file.len = 21;
write_file.offset = 0;
tftp_custom_fwrite("1234567890123456789", 19, &write_file);
tftp_custom_fwrite("0987654321", 10, &write_file);
EXPECT_EQ(write_file.offset, 20);
tftp_custom_fwrite("0987654321", 11, &write_file);
// the above function does not write the null terminator
EXPECT_EQ(write_file.offset, 21);
EXPECT_EQ(write_file.len, 21);
EXPECT_EQ(memcmp(write_file.data, "12345678901234567890", 21), 0);
EXPECT_EQ(memcmp(write_file.data, "12345678901234567890", 20), 0);
tftp_custom_fseek(&write_file, 0, SEEK_SET);
tftp_custom_fread(buf, 20, &write_file);
// the above function does not write the null terminator
buf[20] = '\0';
EXPECT_EQ(memcmp(buf, "12345678901234567890", 21), 0);
free(write_file.data);
write_file.data = NULL;
write_file.len = 0;
char buf[21];
file.offset = 9;
tftp_custom_fread(buf, 20, &file);
EXPECT_EQ(memcmp(buf, "0", 2), 0);