All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guoyi Tu <tugy@chinatelecom.cn>
To: "Christian Schoenebeck" <qemu_oss@crudebyte.com>,
	"Markus Armbruster" <armbru@redhat.com>,
	"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	qemu-devel@nongnu.org
Subject: Re: [PATCH] osdep: Introduce qemu_get_fd() to wrap the common codes
Date: Wed, 31 Aug 2022 16:25:27 +0800	[thread overview]
Message-ID: <4d00eb30-73bc-25c3-4450-d4f8b1199063@chinatelecom.cn> (raw)
In-Reply-To: <47453703.NBG3G7Ahn1@silver>

On 8/18/22 20:58, Christian Schoenebeck wrote:
> On Donnerstag, 18. August 2022 14:06:04 CEST Guoyi Tu wrote:
>> Ping...
>>
>> Any comments are welcome
>>
>> On 8/12/22 19:01, Guoyi Tu wrote:
>>> socket_get_fd() have much the same codes as monitor_fd_param(),
>>> so qemu_get_fd() is introduced to implement the common logic.
>>> now socket_get_fd() and monitor_fd_param() directly call this
>>> function.
> 
> s/have/has/, s/now/Now/, some proper rephrasing wouldn't hurt either.

will fix it.

>>> Signed-off-by: Guoyi Tu <tugy@chinatelecom.cn>
>>> ---
>>>
>>>    include/qemu/osdep.h |  1 +
>>>    monitor/misc.c       | 21 +--------------------
>>>    util/osdep.c         | 25 +++++++++++++++++++++++++
>>>    util/qemu-sockets.c  | 17 +++++------------
>>>    4 files changed, 32 insertions(+), 32 deletions(-)
>>>
>>> diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
>>> index b1c161c035..b920f128a7 100644
>>> --- a/include/qemu/osdep.h
>>> +++ b/include/qemu/osdep.h
>>> @@ -491,6 +491,7 @@ int qemu_open_old(const char *name, int flags, ...);
>>>
>>>    int qemu_open(const char *name, int flags, Error **errp);
>>>    int qemu_create(const char *name, int flags, mode_t mode, Error **errp);
>>>    int qemu_close(int fd);
>>>
>>> +int qemu_get_fd(Monitor *mon, const char *fdname, Error **errp);
>>>
>>>    int qemu_unlink(const char *name);
>>>    #ifndef _WIN32
>>>    int qemu_dup_flags(int fd, int flags);
>>>
>>> diff --git a/monitor/misc.c b/monitor/misc.c
>>> index 3d2312ba8d..0d3372cf2b 100644
>>> --- a/monitor/misc.c
>>> +++ b/monitor/misc.c
>>> @@ -1395,26 +1395,7 @@ void monitor_fdset_dup_fd_remove(int dup_fd)
>>>
>>>    int monitor_fd_param(Monitor *mon, const char *fdname, Error **errp)
>>>    {
>>>
>>> -    int fd;
>>> -    Error *local_err = NULL;
>>> -
>>> -    if (!qemu_isdigit(fdname[0]) && mon) {
>>> -        fd = monitor_get_fd(mon, fdname, &local_err);
>>> -    } else {
>>> -        fd = qemu_parse_fd(fdname);
>>> -        if (fd == -1) {
>>> -            error_setg(&local_err, "Invalid file descriptor number '%s'",
>>> -                       fdname);
>>> -        }
>>> -    }
>>> -    if (local_err) {
>>> -        error_propagate(errp, local_err);
>>> -        assert(fd == -1);
>>> -    } else {
>>> -        assert(fd != -1);
>>> -    }
>>> -
>>> -    return fd;
>>> +    return qemu_get_fd(mon, fdname, errp);
>>>
>>>    }
>>>   
>>>    /* Please update hmp-commands.hx when adding or changing commands */
>>>
>>> diff --git a/util/osdep.c b/util/osdep.c
>>> index 60fcbbaebe..c57551ca78 100644
>>> --- a/util/osdep.c
>>> +++ b/util/osdep.c
>>> @@ -23,6 +23,7 @@
>>>
>>>     */
>>>    #include "qemu/osdep.h"
>>>    #include "qapi/error.h"
>>>
>>> +#include "qemu/ctype.h"
>>>
>>>    #include "qemu/cutils.h"
>>>    #include "qemu/sockets.h"
>>>    #include "qemu/error-report.h"
>>>
>>> @@ -413,6 +414,30 @@ int qemu_close(int fd)
>>>
>>>        return close(fd);
>>>    }
>>>
>>> +int qemu_get_fd(Monitor *mon, const char *fdname, Error **errp)
>>> +{
>>> +    int fd;
>>> +    Error *local_err = NULL;
>>> +
>>> +    if (!qemu_isdigit(fdname[0]) && mon) {
>>> +        fd = monitor_get_fd(mon, fdname, &local_err);
>>> +    } else {
>>> +        fd = qemu_parse_fd(fdname);
>>> +        if (fd == -1) {
>>> +            error_setg(&local_err, "Invalid file descriptor number '%s'",
>>> +                       fdname);
>>> +        }
>>> +    }
>>> +    if (local_err) {
>>> +        error_propagate(errp, local_err);
>>> +        assert(fd == -1);
>>> +    } else {
>>> +        assert(fd != -1);
>>> +    }
>>> +
>>> +    return fd;
>>> +}
>>> +
> 
> Up to here you are basically just moving the code of monitor_fd_param() to a
> project wide shared new function qemu_get_fd(), but why? I mean you could
> simply call monitor_fd_param() in socket_get_fd() below, no?
> 

monitor_fd_param() is implemented in misc.c which is not linkded when 
build the test codes that test the socket_connect() api, such as 
test-unit-sockets.c and test-char.c. If call monitor_fd_param() directly 
in socket_get_fd(), we need to implement a stub version of 
monitor_fd_param() which actually has the same codes according to the 
codes in test-unit-socket.c which overwrite the monitor_get_fd().

what about moving monitor_fd_param() to the osdep.c and calling 
monitor_fd_param() in socket_get_fd() ?


>>>    /*
>>>     * Delete a file from the filesystem, unless the filename is
>>>
>>> /dev/fdset/...
>>>
>>>     *
>>>
>>> diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
>>> index 13b5b197f9..92960ee6eb 100644
>>> --- a/util/qemu-sockets.c
>>> +++ b/util/qemu-sockets.c
>>> @@ -1142,19 +1142,12 @@ static int socket_get_fd(const char *fdstr,
>>> Error **errp)
>>>
>>>    {
>>>        Monitor *cur_mon = monitor_cur();
>>>        int fd;
>>>
>>> -    if (cur_mon) {
>>> -        fd = monitor_get_fd(cur_mon, fdstr, errp);
>>> -        if (fd < 0) {
>>> -            return -1;
>>> -        }
>>> -    } else {
>>> -        if (qemu_strtoi(fdstr, NULL, 10, &fd) < 0) {
>>> -            error_setg_errno(errp, errno,
>>> -                             "Unable to parse FD number %s",
>>> -                             fdstr);
>>> -            return -1;
>>> -        }
>>> +
>>> +    fd = qemu_get_fd(cur_mon, fdstr, errp);
>>> +    if (fd < 0) {
>>> +        return -1;
>>>
>>>        }
> 
> This part looks like behaviour change to me. Haven't looked into the details
> though whether it would be OK. Just saying.

In my opinion the logic is almost the same.

> 
>>>
>>> +
> 
> Unintentional white line added?

will delete it.

Thanks for your coomments

> 
>>>
>>>        if (!fd_is_socket(fd)) {
>>>            error_setg(errp, "File descriptor '%s' is not a socket", fdstr);
>>>            close(fd);
> 
> 
> 


  parent reply	other threads:[~2022-08-31  8:28 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-12 11:01 [PATCH] osdep: Introduce qemu_get_fd() to wrap the common codes Guoyi Tu
2022-08-18 12:06 ` Guoyi Tu
2022-08-18 12:58   ` Christian Schoenebeck
2022-08-30  6:03     ` Markus Armbruster
2022-08-31  8:47       ` Guoyi Tu
2022-08-31  8:25     ` Guoyi Tu [this message]
2022-09-01 13:38       ` Christian Schoenebeck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4d00eb30-73bc-25c3-4450-d4f8b1199063@chinatelecom.cn \
    --to=tugy@chinatelecom.cn \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=f4bug@amsat.org \
    --cc=marcandre.lureau@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu_oss@crudebyte.com \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.