diff mbox series

[v1,1/1] mkimage: Fix error message if write less data then expected

Message ID 20200605080127.10156-2-mylene.josserand@collabora.com
State Superseded
Delegated to: Tom Rini
Headers show
Series Fix mkimage error message | expand

Commit Message

Mylene Josserand June 5, 2020, 8:01 a.m. UTC
Add a new error message in case the size of data written
are shorter than the one expected.

Currently, it will lead to the following error message:
   "mkimage: Write error on uImage: Success"

This is not explicit when the error is because the device
doesn't have enough space. Let's use a "No space left on
the device" error message in that case.

Signed-off-by: Mylène Josserand <mylene.josserand@collabora.com>
---
 tools/mkimage.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

Comments

Walter Lozano June 9, 2020, 6:49 p.m. UTC | #1
Hi Mylene,

Thanks for you patch.

On 5/6/20 05:01, Mylène Josserand wrote:
> Add a new error message in case the size of data written
> are shorter than the one expected.
>
> Currently, it will lead to the following error message:
>     "mkimage: Write error on uImage: Success"
>
> This is not explicit when the error is because the device
> doesn't have enough space. Let's use a "No space left on
> the device" error message in that case.
>
> Signed-off-by: Mylène Josserand <mylene.josserand@collabora.com>
> ---
>   tools/mkimage.c | 14 ++++++++++----
>   1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/tools/mkimage.c b/tools/mkimage.c
> index d2cd1917874..ef0cc889a92 100644
> --- a/tools/mkimage.c
> +++ b/tools/mkimage.c
> @@ -674,7 +674,7 @@ copy_file (int ifd, const char *datafile, int pad)
>   	int zero = 0;
>   	uint8_t zeros[4096];
>   	int offset = 0;
> -	int size;
> +	int size, ret;
>   	struct image_type_params *tparams = imagetool_get_type(params.type);
>   
>   	memset(zeros, 0, sizeof(zeros));
> @@ -730,9 +730,15 @@ copy_file (int ifd, const char *datafile, int pad)
>   	}
>   
>   	size = sbuf.st_size - offset;
> -	if (write(ifd, ptr + offset, size) != size) {
> -		fprintf (stderr, "%s: Write error on %s: %s\n",
> -			params.cmdname, params.imagefile, strerror(errno));
> +
> +	ret = write(ifd, ptr + offset, size);
> +	if (ret != size) {
> +		if (ret < 0)
> +			fprintf (stderr, "%s: Write error on %s: %s\n",
> +				 params.cmdname, params.imagefile, strerror(errno));
> +		else if (ret < size)
> +			fprintf (stderr, "%s: No space left on the device\n",
> +				 params.cmdname);


Thanks for improving the error message, it is much more clear now. The 
only question I have is if "no space left on the device" is the only 
possible cause for this situation, for sure it is the most probable.

>   		exit (EXIT_FAILURE);
>   	}
>   


Regards,

Walter
Mylene Josserand July 7, 2020, 8:25 a.m. UTC | #2
Hi,

On 6/9/20 8:49 PM, Walter Lozano wrote:
> Hi Mylene,
> 
> Thanks for you patch.
> 
> On 5/6/20 05:01, Mylène Josserand wrote:
>> Add a new error message in case the size of data written
>> are shorter than the one expected.
>>
>> Currently, it will lead to the following error message:
>>     "mkimage: Write error on uImage: Success"
>>
>> This is not explicit when the error is because the device
>> doesn't have enough space. Let's use a "No space left on
>> the device" error message in that case.
>>
>> Signed-off-by: Mylène Josserand <mylene.josserand@collabora.com>
>> ---
>>   tools/mkimage.c | 14 ++++++++++----
>>   1 file changed, 10 insertions(+), 4 deletions(-)
>>
>> diff --git a/tools/mkimage.c b/tools/mkimage.c
>> index d2cd1917874..ef0cc889a92 100644
>> --- a/tools/mkimage.c
>> +++ b/tools/mkimage.c
>> @@ -674,7 +674,7 @@ copy_file (int ifd, const char *datafile, int pad)
>>       int zero = 0;
>>       uint8_t zeros[4096];
>>       int offset = 0;
>> -    int size;
>> +    int size, ret;
>>       struct image_type_params *tparams = 
>> imagetool_get_type(params.type);
>>       memset(zeros, 0, sizeof(zeros));
>> @@ -730,9 +730,15 @@ copy_file (int ifd, const char *datafile, int pad)
>>       }
>>       size = sbuf.st_size - offset;
>> -    if (write(ifd, ptr + offset, size) != size) {
>> -        fprintf (stderr, "%s: Write error on %s: %s\n",
>> -            params.cmdname, params.imagefile, strerror(errno));
>> +
>> +    ret = write(ifd, ptr + offset, size);
>> +    if (ret != size) {
>> +        if (ret < 0)
>> +            fprintf (stderr, "%s: Write error on %s: %s\n",
>> +                 params.cmdname, params.imagefile, strerror(errno));
>> +        else if (ret < size)
>> +            fprintf (stderr, "%s: No space left on the device\n",
>> +                 params.cmdname);
> 
> 
> Thanks for improving the error message, it is much more clear now. The 
> only question I have is if "no space left on the device" is the only 
> possible cause for this situation, for sure it is the most probable.

Thanks for your review. Indeed, it is the most probable I guess.

> 
>>           exit (EXIT_FAILURE);
>>       }
> 
> 
> Regards,
> 
> Walter
> 

Best regards,
Mylène
Walter Lozano July 7, 2020, 1:40 p.m. UTC | #3
Hi Mylene,

On 7/7/20 05:25, Mylene Josserand wrote:
> Hi,
>
> On 6/9/20 8:49 PM, Walter Lozano wrote:
>> Hi Mylene,
>>
>> Thanks for you patch.
>>
>> On 5/6/20 05:01, Mylène Josserand wrote:
>>> Add a new error message in case the size of data written
>>> are shorter than the one expected.
>>>
>>> Currently, it will lead to the following error message:
>>>     "mkimage: Write error on uImage: Success"
>>>
>>> This is not explicit when the error is because the device
>>> doesn't have enough space. Let's use a "No space left on
>>> the device" error message in that case.
>>>
>>> Signed-off-by: Mylène Josserand <mylene.josserand@collabora.com>
>>> ---
>>>   tools/mkimage.c | 14 ++++++++++----
>>>   1 file changed, 10 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/tools/mkimage.c b/tools/mkimage.c
>>> index d2cd1917874..ef0cc889a92 100644
>>> --- a/tools/mkimage.c
>>> +++ b/tools/mkimage.c
>>> @@ -674,7 +674,7 @@ copy_file (int ifd, const char *datafile, int pad)
>>>       int zero = 0;
>>>       uint8_t zeros[4096];
>>>       int offset = 0;
>>> -    int size;
>>> +    int size, ret;
>>>       struct image_type_params *tparams = 
>>> imagetool_get_type(params.type);
>>>       memset(zeros, 0, sizeof(zeros));
>>> @@ -730,9 +730,15 @@ copy_file (int ifd, const char *datafile, int pad)
>>>       }
>>>       size = sbuf.st_size - offset;
>>> -    if (write(ifd, ptr + offset, size) != size) {
>>> -        fprintf (stderr, "%s: Write error on %s: %s\n",
>>> -            params.cmdname, params.imagefile, strerror(errno));
>>> +
>>> +    ret = write(ifd, ptr + offset, size);
>>> +    if (ret != size) {
>>> +        if (ret < 0)
>>> +            fprintf (stderr, "%s: Write error on %s: %s\n",
>>> +                 params.cmdname, params.imagefile, strerror(errno));
>>> +        else if (ret < size)
>>> +            fprintf (stderr, "%s: No space left on the device\n",
>>> +                 params.cmdname);
>>
>>
>> Thanks for improving the error message, it is much more clear now. 
>> The only question I have is if "no space left on the device" is the 
>> only possible cause for this situation, for sure it is the most 
>> probable.
>
> Thanks for your review. Indeed, it is the most probable I guess.


Yes, I agree. However, in order to be more accurate, and probably avoid 
future patches to correct a misleading message I would improve the error 
message with something like "Fewer bytes written than expected, probably 
no space left on the device" or something similar.

What do you think?

Besides that

Reviewed-by: Walter Lozano <walter.lozano@collabora.com>

>
>>
>>>           exit (EXIT_FAILURE);
>>>       }
>>
Regards,

Walter
Mylene Josserand July 8, 2020, 8:50 a.m. UTC | #4
Hello,

On 7/7/20 3:40 PM, Walter Lozano wrote:
> Hi Mylene,
> 
> On 7/7/20 05:25, Mylene Josserand wrote:
>> Hi,
>>
>> On 6/9/20 8:49 PM, Walter Lozano wrote:
>>> Hi Mylene,
>>>
>>> Thanks for you patch.
>>>
>>> On 5/6/20 05:01, Mylène Josserand wrote:
>>>> Add a new error message in case the size of data written
>>>> are shorter than the one expected.
>>>>
>>>> Currently, it will lead to the following error message:
>>>>     "mkimage: Write error on uImage: Success"
>>>>
>>>> This is not explicit when the error is because the device
>>>> doesn't have enough space. Let's use a "No space left on
>>>> the device" error message in that case.
>>>>
>>>> Signed-off-by: Mylène Josserand <mylene.josserand@collabora.com>
>>>> ---
>>>>   tools/mkimage.c | 14 ++++++++++----
>>>>   1 file changed, 10 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/tools/mkimage.c b/tools/mkimage.c
>>>> index d2cd1917874..ef0cc889a92 100644
>>>> --- a/tools/mkimage.c
>>>> +++ b/tools/mkimage.c
>>>> @@ -674,7 +674,7 @@ copy_file (int ifd, const char *datafile, int pad)
>>>>       int zero = 0;
>>>>       uint8_t zeros[4096];
>>>>       int offset = 0;
>>>> -    int size;
>>>> +    int size, ret;
>>>>       struct image_type_params *tparams = 
>>>> imagetool_get_type(params.type);
>>>>       memset(zeros, 0, sizeof(zeros));
>>>> @@ -730,9 +730,15 @@ copy_file (int ifd, const char *datafile, int pad)
>>>>       }
>>>>       size = sbuf.st_size - offset;
>>>> -    if (write(ifd, ptr + offset, size) != size) {
>>>> -        fprintf (stderr, "%s: Write error on %s: %s\n",
>>>> -            params.cmdname, params.imagefile, strerror(errno));
>>>> +
>>>> +    ret = write(ifd, ptr + offset, size);
>>>> +    if (ret != size) {
>>>> +        if (ret < 0)
>>>> +            fprintf (stderr, "%s: Write error on %s: %s\n",
>>>> +                 params.cmdname, params.imagefile, strerror(errno));
>>>> +        else if (ret < size)
>>>> +            fprintf (stderr, "%s: No space left on the device\n",
>>>> +                 params.cmdname);
>>>
>>>
>>> Thanks for improving the error message, it is much more clear now. 
>>> The only question I have is if "no space left on the device" is the 
>>> only possible cause for this situation, for sure it is the most 
>>> probable.
>>
>> Thanks for your review. Indeed, it is the most probable I guess.
> 
> 
> Yes, I agree. However, in order to be more accurate, and probably avoid 
> future patches to correct a misleading message I would improve the error 
> message with something like "Fewer bytes written than expected, probably 
> no space left on the device" or something similar.
> 
> What do you think?

Yes, why not. I thought that "No space left" is a more common error 
message but let's change that with more details about how many 
written/expected bytes.

> 
> Besides that
> 
> Reviewed-by: Walter Lozano <walter.lozano@collabora.com>

Thanks!

> 
>>
>>>
>>>>           exit (EXIT_FAILURE);
>>>>       }
>>>
> Regards,
> 
> Walter
> 

Best regards,
Mylène
diff mbox series

Patch

diff --git a/tools/mkimage.c b/tools/mkimage.c
index d2cd1917874..ef0cc889a92 100644
--- a/tools/mkimage.c
+++ b/tools/mkimage.c
@@ -674,7 +674,7 @@  copy_file (int ifd, const char *datafile, int pad)
 	int zero = 0;
 	uint8_t zeros[4096];
 	int offset = 0;
-	int size;
+	int size, ret;
 	struct image_type_params *tparams = imagetool_get_type(params.type);
 
 	memset(zeros, 0, sizeof(zeros));
@@ -730,9 +730,15 @@  copy_file (int ifd, const char *datafile, int pad)
 	}
 
 	size = sbuf.st_size - offset;
-	if (write(ifd, ptr + offset, size) != size) {
-		fprintf (stderr, "%s: Write error on %s: %s\n",
-			params.cmdname, params.imagefile, strerror(errno));
+
+	ret = write(ifd, ptr + offset, size);
+	if (ret != size) {
+		if (ret < 0)
+			fprintf (stderr, "%s: Write error on %s: %s\n",
+				 params.cmdname, params.imagefile, strerror(errno));
+		else if (ret < size)
+			fprintf (stderr, "%s: No space left on the device\n",
+				 params.cmdname);
 		exit (EXIT_FAILURE);
 	}