[Libguestfs] [PATCH nbdkit 1/2] file: Add an internal "mode"

Laszlo Ersek lersek at redhat.com
Thu Aug 18 09:51:38 UTC 2022


On 08/18/22 11:32, Richard W.M. Jones wrote:
> On Thu, Aug 18, 2022 at 10:27:11AM +0200, Laszlo Ersek wrote:
>> On 08/17/22 17:38, Richard W.M. Jones wrote:
>>> Previously we relied on the implicit assumption filename xor directory,
>>> representing two modes.  Make this explicit with an internal mode
>>> variable.
>>>
>>> This is just refactoring and should not change the functionality.
>>> However we're now more strict about duplicate file= or dir= parameters
>>> appearing on the command line.  Previously only the last one had an
>>> effect and the others were silently ignored.  Now we give an error in
>>> this case.  eg this worked before but now gives an error:
>>>
>>>   $ ./nbdkit file /var/tmp /var/tmp/fedora-36.img
>>>   nbdkit: error: file|dir parameter can only appear once on the command line
>>> ---
>>>  plugins/file/file.c | 124 +++++++++++++++++++++++++++-----------------
>>>  1 file changed, 76 insertions(+), 48 deletions(-)
>>>
>>> diff --git a/plugins/file/file.c b/plugins/file/file.c
>>> index aefca9ee2..f673ec132 100644
>>> --- a/plugins/file/file.c
>>> +++ b/plugins/file/file.c
>>> @@ -70,6 +70,7 @@
>>>  #include "isaligned.h"
>>>  #include "fdatasync.h"
>>>  
>>> +static enum { mode_none, mode_filename, mode_directory } mode = mode_none;
>>>  static char *filename = NULL;
>>>  static char *directory = NULL;
>>>  
>>> @@ -180,14 +181,23 @@ file_config (const char *key, const char *value)
>>>     * existence checks to the last possible moment.
>>>     */
>>>    if (strcmp (key, "file") == 0) {
>>> -    free (filename);
>>> +    if (mode != mode_none) {
>>> +    wrong_mode:
>>
>> *shudder*
>>
>> please move error handling sections to the end of the function. It's OK
>> to jump forward in exceptional cases, but crossing jump lines (i.e.
>> improper balancing / nesting) and backward jumps for error handling are
>> terrible.
> 
> I don't think I really have a problem with it, but I moved it
> to the end of the function.

Thank you.
Laszlo


More information about the Libguestfs mailing list